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 <jmcne...@invisible.ca>
@@ -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 <jmcne...@invisible.ca>
@@ -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 <jmcne...@invisible.ca>
@@ -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 <jmcne...@invisible.ca>
@@ -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 <jmcne...@invisible.ca>
@@ -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 <jmcne...@invisible.ca>
@@ -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));
 

Reply via email to