[PATCH v4 2/3] phy: qcom: qmp-combo: get the USB3 & DisplayPort lanes mapping from DT

Konrad Dybcio konrad.dybcio at oss.qualcomm.com
Mon Oct 6 03:54:21 PDT 2025


On 10/6/25 12:35 PM, Dmitry Baryshkov wrote:
> On Mon, Oct 06, 2025 at 12:08:22PM +0200, Konrad Dybcio wrote:
>> On 9/30/25 9:39 AM, Neil Armstrong wrote:
>>> The QMP USB3/DP Combo PHY hosts an USB3 phy and a DP PHY on top
>>> of a combo glue to route either lanes to the 4 shared physical lanes.
>>>
>>> The routing of the lanes can be:
>>> - 2 DP + 2 USB3
>>> - 4 DP
>>> - 2 USB3
>>>
>>> Get the lanes mapping from DT and stop registering the USB-C
>>> muxes in favor of a static mode and orientation detemined
>>> by the lanes mapping.
>>>
>>> This allows supporting boards with direct connection of USB3 and
>>> DisplayPort lanes to the QMP Combo PHY lanes, not using the
>>> USB-C Altmode feature.
>>>
>>> Signed-off-by: Neil Armstrong <neil.armstrong at linaro.org>
>>> ---

[...]

>>
>> [...]
>>
>>> +struct qmp_combo_lane_mapping {
>>> +	unsigned int lanes_count;
>>
>> "num_lanes"?
>>
>>> +	enum typec_orientation orientation;
>>> +	u32 lanes[4];
>>> +};
>>> +
>>> +static const struct qmp_combo_lane_mapping usb3_data_lanes[] = {
>>> +	{ 2, TYPEC_ORIENTATION_NORMAL, { 1, 0 }},
>>> +	{ 2, TYPEC_ORIENTATION_REVERSE, { 2, 3 }},
>>> +};
>>> +
>>> +static const struct qmp_combo_lane_mapping dp_data_lanes[] = {
>>> +	{ 1, TYPEC_ORIENTATION_NORMAL, { 0 }},
>>> +	{ 1, TYPEC_ORIENTATION_REVERSE, { 3 }},
>>
>> This is not corroborated by your bindings change ^
>>
>> I'm also frankly not sure whether it's pin 2 or 3 that 1-lane-DP
>> would be TXd on
> 
> If we follow the standard, it should be 3 (RX2, TX2, TX1, RX1)

OK, then 3 it is

> 
>>
>>> +	{ 2, TYPEC_ORIENTATION_NORMAL, { 3, 2 }},
>>> +	{ 2, TYPEC_ORIENTATION_REVERSE, { 0, 1 }},
>>> +	{ 4, TYPEC_ORIENTATION_NORMAL, { 3, 2, 1, 0 }},
>>> +	{ 4, TYPEC_ORIENTATION_REVERSE, { 0, 1, 2, 3 }},
>>
>> Would it be too cheesy to check orientation based like:
> 
> That won't catch weird errors like {0, 2, 1, 3}.

Sure, but you can then drop the orientation field from the struct

> 
>>
>> static bool qmpphy_mapping_orient_flipped(u32 *data_lanes)
>> {
>> 	return data_lanes[0] == 0;
>> }

and the compiler will hopefully nicely inline this into a
compare-and-branch-on-0

Konrad



More information about the linux-phy mailing list