diff options
author | Aidan MacDonald <amachronic@protonmail.com> | 2022-06-29 23:22:55 +0100 |
---|---|---|
committer | Aidan MacDonald <amachronic@protonmail.com> | 2022-07-10 09:48:39 -0400 |
commit | 131566b8f80355aa64bba904f9de4d1506b90442 (patch) | |
tree | a480bc6140029199ef3569204b29162de23674b8 /firmware/target/mips | |
parent | d0d13baf3e263d5aa270b3d26686cd01deb3b059 (diff) | |
download | rockbox-131566b8f80355aa64bba904f9de4d1506b90442.tar.gz rockbox-131566b8f80355aa64bba904f9de4d1506b90442.zip |
x1000: fix linux boot USB issues
If the USB controller is active when we hand over to Linux it'll
often trigger "irq nobody cared" warnings. Disabling the controller
before boot prevents that.
Also move the USB PHY bit workaround from the dualboot cleanup hook
to the main Linux boot function. Mainline kernels don't clear these
bits either.
Change-Id: Ieaf896c3b8c3e58a8c47de5afeb384ae2511a5fa
Diffstat (limited to 'firmware/target/mips')
-rw-r--r-- | firmware/target/mips/ingenic_x1000/boot-x1000.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/firmware/target/mips/ingenic_x1000/boot-x1000.c b/firmware/target/mips/ingenic_x1000/boot-x1000.c index c8e97b4d6a..f59ec5c4ea 100644 --- a/firmware/target/mips/ingenic_x1000/boot-x1000.c +++ b/firmware/target/mips/ingenic_x1000/boot-x1000.c | |||
@@ -20,6 +20,7 @@ | |||
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | 21 | ||
22 | #include "system.h" | 22 | #include "system.h" |
23 | #include "usb.h" | ||
23 | #include "boot-x1000.h" | 24 | #include "boot-x1000.h" |
24 | #include "nand-x1000.h" | 25 | #include "nand-x1000.h" |
25 | #include "gpio-x1000.h" | 26 | #include "gpio-x1000.h" |
@@ -113,6 +114,14 @@ void x1000_boot_linux(const void* source, size_t length, | |||
113 | { | 114 | { |
114 | size_t args_len = strlen(args); | 115 | size_t args_len = strlen(args); |
115 | 116 | ||
117 | /* Shut off USB to avoid "irq 21 nobody cared" error */ | ||
118 | usb_close(); | ||
119 | usb_enable(false); | ||
120 | |||
121 | /* clear USB PHY voodoo bits, not all kernels use them */ | ||
122 | jz_writef(CPM_OPCR, GATE_USBPHY_CLK(0)); | ||
123 | jz_writef(CPM_USBCDR, PHY_GATE(0)); | ||
124 | |||
116 | disable_irq(); | 125 | disable_irq(); |
117 | 126 | ||
118 | /* --- Beyond this point, do not call into DRAM --- */ | 127 | /* --- Beyond this point, do not call into DRAM --- */ |
@@ -151,10 +160,6 @@ void x1000_dualboot_cleanup(void) | |||
151 | jz_writef(LCD_CTRL, BEDN(0), EOFM(0), SOFM(0), IFUM(0), QDM(0)); | 160 | jz_writef(LCD_CTRL, BEDN(0), EOFM(0), SOFM(0), IFUM(0), QDM(0)); |
152 | jz_writef(CPM_CLKGR, LCD(1)); | 161 | jz_writef(CPM_CLKGR, LCD(1)); |
153 | 162 | ||
154 | /* clear USB PHY voodoo bits, not all kernels use them */ | ||
155 | jz_writef(CPM_OPCR, GATE_USBPHY_CLK(0)); | ||
156 | jz_writef(CPM_USBCDR, PHY_GATE(0)); | ||
157 | |||
158 | #if defined(FIIO_M3K) || defined(EROS_QN) | 163 | #if defined(FIIO_M3K) || defined(EROS_QN) |
159 | /* | 164 | /* |
160 | * Need to bring up MPLL before booting Linux | 165 | * Need to bring up MPLL before booting Linux |