Skip to content

Commit 74152db

Browse files
Marek Vasutgregkh
authored andcommitted
usb: renesas-xhci: Fix External ROM access timeouts
commit f9420f4 upstream. Increase the External ROM access timeouts to prevent failures during programming of External SPI EEPROM chips. The current timeouts are too short for some SPI EEPROMs used with uPD720201 controllers. The current timeout for Chip Erase in renesas_rom_erase() is 100 ms , the current timeout for Sector Erase issued by the controller before Page Program in renesas_fw_download_image() is also 100 ms. Neither timeout is sufficient for e.g. the Macronix MX25L5121E or MX25V5126F. MX25L5121E reference manual [1] page 35 section "ERASE AND PROGRAMMING PERFORMANCE" and page 23 section "Table 8. AC CHARACTERISTICS (Temperature = 0°C to 70°C for Commercial grade, VCC = 2.7V ~ 3.6V)" row "tCE" indicate that the maximum time required for Chip Erase opcode to complete is 2 s, and for Sector Erase it is 300 ms . MX25V5126F reference manual [2] page 47 section "13. ERASE AND PROGRAMMING PERFORMANCE (2.3V - 3.6V)" and page 42 section "Table 8. AC CHARACTERISTICS (Temperature = -40°C to 85°C for Industrial grade, VCC = 2.3V - 3.6V)" row "tCE" indicate that the maximum time required for Chip Erase opcode to complete is 3.2 s, and for Sector Erase it is 400 ms . Update the timeouts such, that Chip Erase timeout is set to 5 seconds, and Sector Erase timeout is set to 500 ms. Such lengthy timeouts ought to be sufficient for majority of SPI EEPROM chips. [1] https://www.macronix.com/Lists/Datasheet/Attachments/8634/MX25L5121E,%203V,%20512Kb,%20v1.3.pdf [2] https://www.macronix.com/Lists/Datasheet/Attachments/8750/MX25V5126F,%202.5V,%20512Kb,%20v1.1.pdf Fixes: 2478be8 ("usb: renesas-xhci: Add ROM loader for uPD720201") Cc: stable <stable@kernel.org> Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org> Link: https://lore.kernel.org/r/20250802225526.25431-1-marek.vasut+renesas@mailbox.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 84dc708 commit 74152db

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

drivers/usb/host/xhci-pci-renesas.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,9 @@
4747
#define RENESAS_ROM_ERASE_MAGIC 0x5A65726F
4848
#define RENESAS_ROM_WRITE_MAGIC 0x53524F4D
4949

50-
#define RENESAS_RETRY 10000
51-
#define RENESAS_DELAY 10
50+
#define RENESAS_RETRY 50000 /* 50000 * RENESAS_DELAY ~= 500ms */
51+
#define RENESAS_CHIP_ERASE_RETRY 500000 /* 500000 * RENESAS_DELAY ~= 5s */
52+
#define RENESAS_DELAY 10
5253

5354
#define RENESAS_FW_NAME "renesas_usb_fw.mem"
5455

@@ -407,7 +408,7 @@ static void renesas_rom_erase(struct pci_dev *pdev)
407408
/* sleep a bit while ROM is erased */
408409
msleep(20);
409410

410-
for (i = 0; i < RENESAS_RETRY; i++) {
411+
for (i = 0; i < RENESAS_CHIP_ERASE_RETRY; i++) {
411412
retval = pci_read_config_byte(pdev, RENESAS_ROM_STATUS,
412413
&status);
413414
status &= RENESAS_ROM_STATUS_ERASE;

0 commit comments

Comments
 (0)