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));