Skip to contentSkip to conversation

usb: renesas-xhci: Fix handling of unknown ROM state

PATCH New Moritz Fischer 1 participant 1 message Jun 15, 2021

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 usb: renesas-xhci: Fix handling of unknown ROM state

The ROM load sometimes seems to return an unknown status (RENESAS_ROM_STATUS_NO_RESULT) instead of success / fail.

If the ROM load indeed failed this leads to failures when trying to communicate with the controller later on.

Attempt to load firmware using RAM load in those cases.

Cc Mathias Nyman <[email protected]>
Cc Greg Kroah-Hartman <[email protected]>
Cc Vinod Koul <[email protected]>
Fixes 2478be82de44 ("usb: renesas-xhci: Add ROM loader for uPD720201")

---

Changes from v1:
- Added Vinod's Tested-by and Reviewed-by
- Reworded commit message with more detail
- Fixed up comment formatting

---
 drivers/usb/host/xhci-pci-renesas.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)
drivers/usb/host/xhci-pci-renesas.c +8 -8
index f97ac9f52bf4..431213cdf9e0 100644
@@ -207,7 +207,8 @@ static int renesas_check_rom_state(struct pci_dev *pdev)
 			return 0;
 
 		case RENESAS_ROM_STATUS_NO_RESULT: /* No result yet */
-			return 0;
+			dev_dbg(&pdev->dev, "Unknown ROM status ...\n");
+			break;
 
 		case RENESAS_ROM_STATUS_ERROR: /* Error State */
 		default: /* All other states are marked as "Reserved states" */
@@ -224,13 +225,12 @@ static int renesas_fw_check_running(struct pci_dev *pdev)
 	u8 fw_state;
 	int err;
 
-	/* Check if device has ROM and loaded, if so skip everything */
-	err = renesas_check_rom(pdev);
-	if (err) { /* we have rom */
-		err = renesas_check_rom_state(pdev);
-		if (!err)
-			return err;
-	}
+	/*
+	 * Only if device has ROM and loaded FW we can skip loading and
+	 * return success. Otherwise (even unknown state), attempt to load FW.
+	 */
+	if (renesas_check_rom(pdev) && !renesas_check_rom_state(pdev))
+		return 0;
 
 	/*
 	 * Test if the device is actually needing the firmware. As most
Signature · 1 line
2.31.1