Module Name: src
Committed By: jmcneill
Date: Sun Sep 22 13:56:25 UTC 2024
Modified Files:
src/sys/arch/evbppc/include: wii.h
src/sys/arch/evbppc/wii/dev: ehci_hollywood.c hollywood.c hollywood.h
ohci_hollywood.c sdhc_hollywood.c
Log Message:
wii: Restrict IOP access to shared peripherals.
Ensure that the IOP cannot access peripherals by clearing the appropriate
bus access bit. I have observed OHCI reporting completion for TDs living
in ARM reserved memory at runtime, this seems to suppress that.
To generate a diff of this commit:
cvs rdiff -u -r1.7 -r1.8 src/sys/arch/evbppc/include/wii.h
cvs rdiff -u -r1.2 -r1.3 src/sys/arch/evbppc/wii/dev/ehci_hollywood.c \
src/sys/arch/evbppc/wii/dev/hollywood.c \
src/sys/arch/evbppc/wii/dev/hollywood.h \
src/sys/arch/evbppc/wii/dev/ohci_hollywood.c \
src/sys/arch/evbppc/wii/dev/sdhc_hollywood.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/evbppc/include/wii.h
diff -u src/sys/arch/evbppc/include/wii.h:1.7 src/sys/arch/evbppc/include/wii.h:1.8
--- src/sys/arch/evbppc/include/wii.h:1.7 Thu Jan 25 11:47:53 2024
+++ src/sys/arch/evbppc/include/wii.h Sun Sep 22 13:56:25 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: wii.h,v 1.7 2024/01/25 11:47:53 jmcneill Exp $ */
+/* $NetBSD: wii.h,v 1.8 2024/09/22 13:56:25 jmcneill Exp $ */
/*-
* Copyright (c) 2024 Jared McNeill <[email protected]>
@@ -114,6 +114,11 @@
#define HW_ARMIRQFLAGS (HOLLYWOOD_PRIV_BASE + 0x038)
#define HW_ARMIRQMASK (HOLLYWOOD_PRIV_BASE + 0x03c)
#define HW_AHBPROT (HOLLYWOOD_PRIV_BASE + 0x064)
+#define IOPSD1EN __BIT(24)
+#define IOPSD0EN __BIT(23)
+#define IOPOH1EN __BIT(22)
+#define IOPOH0EN __BIT(21)
+#define IOPEHCEN __BIT(20)
#define HW_GPIOB_OUT (HOLLYWOOD_BASE + 0x0c0)
#define HW_GPIOB_DIR (HOLLYWOOD_BASE + 0x0c4)
#define HW_GPIOB_IN (HOLLYWOOD_BASE + 0x0c8)
Index: src/sys/arch/evbppc/wii/dev/ehci_hollywood.c
diff -u src/sys/arch/evbppc/wii/dev/ehci_hollywood.c:1.2 src/sys/arch/evbppc/wii/dev/ehci_hollywood.c:1.3
--- src/sys/arch/evbppc/wii/dev/ehci_hollywood.c:1.2 Tue Jan 23 21:56:07 2024
+++ src/sys/arch/evbppc/wii/dev/ehci_hollywood.c Sun Sep 22 13:56:25 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ehci_hollywood.c,v 1.2 2024/01/23 21:56:07 jmcneill Exp $ */
+/* $NetBSD: ehci_hollywood.c,v 1.3 2024/09/22 13:56:25 jmcneill Exp $ */
/*-
* Copyright (c) 2024 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ehci_hollywood.c,v 1.2 2024/01/23 21:56:07 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ehci_hollywood.c,v 1.3 2024/09/22 13:56:25 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -81,6 +81,8 @@ ehci_hollywood_attach(device_t parent, d
aprint_naive("\n");
aprint_normal(": EHCI\n");
+ hollywood_claim_device(self, IOPEHCEN);
+
sc->sc_offs = EREAD1(sc, EHCI_CAPLENGTH);
EOWRITE4(sc, EHCI_USBINTR, 0);
Index: src/sys/arch/evbppc/wii/dev/hollywood.c
diff -u src/sys/arch/evbppc/wii/dev/hollywood.c:1.2 src/sys/arch/evbppc/wii/dev/hollywood.c:1.3
--- src/sys/arch/evbppc/wii/dev/hollywood.c:1.2 Tue Jan 23 21:56:07 2024
+++ src/sys/arch/evbppc/wii/dev/hollywood.c Sun Sep 22 13:56:25 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: hollywood.c,v 1.2 2024/01/23 21:56:07 jmcneill Exp $ */
+/* $NetBSD: hollywood.c,v 1.3 2024/09/22 13:56:25 jmcneill Exp $ */
/*-
* Copyright (c) 2024 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hollywood.c,v 1.2 2024/01/23 21:56:07 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hollywood.c,v 1.3 2024/09/22 13:56:25 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -219,3 +219,10 @@ hollywood_intr_establish(int irq, int ip
return intr_establish_xname(hollywood_pic.pic_intrbase + irq,
IST_LEVEL, ipl, func, arg, name);
}
+
+void
+hollywood_claim_device(device_t dev, uint32_t mask)
+{
+ /* Restrict IOP access to a device, giving exclusive access to PPC. */
+ WR4(HW_AHBPROT, RD4(HW_AHBPROT) & ~mask);
+}
Index: src/sys/arch/evbppc/wii/dev/hollywood.h
diff -u src/sys/arch/evbppc/wii/dev/hollywood.h:1.2 src/sys/arch/evbppc/wii/dev/hollywood.h:1.3
--- src/sys/arch/evbppc/wii/dev/hollywood.h:1.2 Tue Jan 23 21:56:07 2024
+++ src/sys/arch/evbppc/wii/dev/hollywood.h Sun Sep 22 13:56:25 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: hollywood.h,v 1.2 2024/01/23 21:56:07 jmcneill Exp $ */
+/* $NetBSD: hollywood.h,v 1.3 2024/09/22 13:56:25 jmcneill Exp $ */
/*-
* Copyright (c) 2024 Jared McNeill <[email protected]>
@@ -36,6 +36,7 @@ struct hollywood_attach_args {
bus_dma_tag_t haa_dmat;
};
+void hollywood_claim_device(device_t, uint32_t);
void *hollywood_intr_establish(int, int, int (*)(void *), void *, const char *);
#endif /* _WII_DEV_HOLLYWOOD_H_ */
Index: src/sys/arch/evbppc/wii/dev/ohci_hollywood.c
diff -u src/sys/arch/evbppc/wii/dev/ohci_hollywood.c:1.2 src/sys/arch/evbppc/wii/dev/ohci_hollywood.c:1.3
--- src/sys/arch/evbppc/wii/dev/ohci_hollywood.c:1.2 Tue Jan 23 21:56:07 2024
+++ src/sys/arch/evbppc/wii/dev/ohci_hollywood.c Sun Sep 22 13:56:25 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: ohci_hollywood.c,v 1.2 2024/01/23 21:56:07 jmcneill Exp $ */
+/* $NetBSD: ohci_hollywood.c,v 1.3 2024/09/22 13:56:25 jmcneill Exp $ */
/*-
* Copyright (c) 2024 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ohci_hollywood.c,v 1.2 2024/01/23 21:56:07 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ohci_hollywood.c,v 1.3 2024/09/22 13:56:25 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -84,6 +84,9 @@ ohci_hollywood_attach(device_t parent, d
aprint_naive("\n");
aprint_normal(": OHCI\n");
+ hollywood_claim_device(self,
+ device_unit(self) == 0 ? IOPOH0EN : IOPOH1EN);
+
bus_space_write_4(sc->iot, sc->ioh, OHCI_INTERRUPT_DISABLE,
OHCI_ALL_INTRS);
Index: src/sys/arch/evbppc/wii/dev/sdhc_hollywood.c
diff -u src/sys/arch/evbppc/wii/dev/sdhc_hollywood.c:1.2 src/sys/arch/evbppc/wii/dev/sdhc_hollywood.c:1.3
--- src/sys/arch/evbppc/wii/dev/sdhc_hollywood.c:1.2 Tue Jan 23 21:56:07 2024
+++ src/sys/arch/evbppc/wii/dev/sdhc_hollywood.c Sun Sep 22 13:56:25 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: sdhc_hollywood.c,v 1.2 2024/01/23 21:56:07 jmcneill Exp $ */
+/* $NetBSD: sdhc_hollywood.c,v 1.3 2024/09/22 13:56:25 jmcneill Exp $ */
/*-
* Copyright (c) 2024 Jared McNeill <[email protected]>
@@ -27,7 +27,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sdhc_hollywood.c,v 1.2 2024/01/23 21:56:07 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdhc_hollywood.c,v 1.3 2024/09/22 13:56:25 jmcneill Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -89,6 +89,9 @@ sdhc_hollywood_attach(device_t parent, d
aprint_naive("\n");
aprint_normal(": SDHC\n");
+ hollywood_claim_device(self,
+ device_unit(self) == 0 ? IOPSD0EN : IOPSD1EN);
+
hollywood_intr_establish(haa->haa_irq, IPL_SDMMC, sdhc_intr,
&sc->sc_base, device_xname(self));