mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
usb: octeon-hcd: fail the probe when the USB core does not respond
If the USBN clock/PHY setup did not actually bring the core up (wrong board reference-clock configuration, for instance), every USBC CSR reads as all-ones and initialization marches on programming garbage, ending in timeouts or a wedge deep in the FIFO flush. Read GHWCFG3 - a hardwired configuration register that can be neither 0 nor all-ones on a live core - right before core initialization, and give up cleanly if the core is not answering. Assisted-by: Claude:claude-opus-5 Signed-off-by: Orgad Shaneh <orgads@gmail.com> Link: https://patch.msgid.link/20260901193100.1352110-2-orgads@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
4c7a1b9f1f
commit
22bce6d2b3
|
|
@ -853,6 +853,14 @@ static int cvmx_usb_initialize(struct device *dev,
|
|||
* USBC_GAHBCFG[PTXFEMPLVL]
|
||||
* Global interrupt mask, USBC_GAHBCFG[GLBLINTRMSK] = 1
|
||||
*/
|
||||
usbcx_gahbcfg.u32 = cvmx_usb_read_csr32(usb,
|
||||
CVMX_USBCX_GHWCFG3(usb->index));
|
||||
if (usbcx_gahbcfg.u32 == 0xffffffff || usbcx_gahbcfg.u32 == 0) {
|
||||
dev_err(dev, "USB core is not responding (GHWCFG3=0x%08x)\n",
|
||||
usbcx_gahbcfg.u32);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
usbcx_gahbcfg.u32 = 0;
|
||||
usbcx_gahbcfg.s.dmaen = !(usb->init_flags &
|
||||
CVMX_USB_INITIALIZE_FLAGS_NO_DMA);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user