lkml.org 
[lkml]   [2019]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 173/215] usb: usb251xb: Reallow swap-dx-lanes to apply to the upstream port
    Date
    From: Lucas Stach <l.stach@pengutronix.de>

    commit 4849ee6129702dcb05d36f9c7c61b4661fcd751f upstream.

    This is a partial revert of 73d31def1aab "usb: usb251xb: Create a ports
    field collector method", which broke a existing devicetree
    (arch/arm64/boot/dts/freescale/imx8mq.dtsi).

    There is no reason why the swap-dx-lanes property should not apply to
    the upstream port. The reason given in the breaking commit was that it's
    inconsitent with respect to other port properties, but in fact it is not.
    All other properties which only apply to the downstream ports explicitly
    reject port 0, so there is pretty strong precedence that the driver
    referred to the upstream port as port 0. So there is no inconsistency in
    this property at all, other than the swapping being also applicable to
    the upstream port.

    CC: stable@vger.kernel.org #5.2
    Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
    Link: https://lore.kernel.org/r/20190719084407.28041-3-l.stach@pengutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/usb/misc/usb251xb.c | 13 +++++++------
    1 file changed, 7 insertions(+), 6 deletions(-)

    --- a/drivers/usb/misc/usb251xb.c
    +++ b/drivers/usb/misc/usb251xb.c
    @@ -375,7 +375,8 @@ out_err:

    #ifdef CONFIG_OF
    static void usb251xb_get_ports_field(struct usb251xb *hub,
    - const char *prop_name, u8 port_cnt, u8 *fld)
    + const char *prop_name, u8 port_cnt,
    + bool ds_only, u8 *fld)
    {
    struct device *dev = hub->dev;
    struct property *prop;
    @@ -383,7 +384,7 @@ static void usb251xb_get_ports_field(str
    u32 port;

    of_property_for_each_u32(dev->of_node, prop_name, prop, p, port) {
    - if ((port >= 1) && (port <= port_cnt))
    + if ((port >= ds_only ? 1 : 0) && (port <= port_cnt))
    *fld |= BIT(port);
    else
    dev_warn(dev, "port %u doesn't exist\n", port);
    @@ -501,15 +502,15 @@ static int usb251xb_get_ofdata(struct us

    hub->non_rem_dev = USB251XB_DEF_NON_REMOVABLE_DEVICES;
    usb251xb_get_ports_field(hub, "non-removable-ports", data->port_cnt,
    - &hub->non_rem_dev);
    + true, &hub->non_rem_dev);

    hub->port_disable_sp = USB251XB_DEF_PORT_DISABLE_SELF;
    usb251xb_get_ports_field(hub, "sp-disabled-ports", data->port_cnt,
    - &hub->port_disable_sp);
    + true, &hub->port_disable_sp);

    hub->port_disable_bp = USB251XB_DEF_PORT_DISABLE_BUS;
    usb251xb_get_ports_field(hub, "bp-disabled-ports", data->port_cnt,
    - &hub->port_disable_bp);
    + true, &hub->port_disable_bp);

    hub->max_power_sp = USB251XB_DEF_MAX_POWER_SELF;
    if (!of_property_read_u32(np, "sp-max-total-current-microamp",
    @@ -573,7 +574,7 @@ static int usb251xb_get_ofdata(struct us
    */
    hub->port_swap = USB251XB_DEF_PORT_SWAP;
    usb251xb_get_ports_field(hub, "swap-dx-lanes", data->port_cnt,
    - &hub->port_swap);
    + false, &hub->port_swap);

    /* The following parameters are currently not exposed to devicetree, but
    * may be as soon as needed.

    \
     
     \ /
      Last update: 2019-07-29 22:09    [W:4.137 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site