From c1125bad6cda95b45ec151e6d2227fb2b7b03a43 Mon Sep 17 00:00:00 2001 From: Aaron Williams Date: Tue, 6 Apr 2021 12:10:16 +0200 Subject: [PATCH] usb: hub: Fix usb_get_port_status() for big-endian platforms Add missing endianness conversions to usb_get_port_status(). This (amongst others) is necessary to enable the use of USB 3 hubs on big-endian platforms like MIPS Octeon. Signed-off-by: Aaron Williams Signed-off-by: Stefan Roese Cc: Chandrakala Chavva Cc: Bin Meng Cc: Marek Vasut --- common/usb_hub.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/common/usb_hub.c b/common/usb_hub.c index 3d856e7de7..ba11a188ca 100644 --- a/common/usb_hub.c +++ b/common/usb_hub.c @@ -144,7 +144,8 @@ int usb_get_port_status(struct usb_device *dev, int port, void *data) if (!usb_hub_is_root_hub(dev->dev) && usb_hub_is_superspeed(dev)) { struct usb_port_status *status = (struct usb_port_status *)data; - u16 tmp = (status->wPortStatus) & USB_SS_PORT_STAT_MASK; + u16 tmp = le16_to_cpu(status->wPortStatus) & + USB_SS_PORT_STAT_MASK; if (status->wPortStatus & USB_SS_PORT_STAT_POWER) tmp |= USB_PORT_STAT_POWER; @@ -152,7 +153,7 @@ int usb_get_port_status(struct usb_device *dev, int port, void *data) USB_SS_PORT_STAT_SPEED_5GBPS) tmp |= USB_PORT_STAT_SUPER_SPEED; - status->wPortStatus = tmp; + status->wPortStatus = cpu_to_le16(tmp); } #endif