--- freebsd/sys/arm/broadcom/bcm2835/bcm2835_dma.c | 13 +++++++++++++ libbsd_waf.py | 3 ++- rtemsbsd/include/bsp/nexus-devices.h | 7 +++++++ rtemsbsd/include/machine/rtems-bsd-nexus-bus.h | 21 +++++++++++++++++++++ 4 files changed, 43 insertions(+), 1 deletion(-)
diff --git a/freebsd/sys/arm/broadcom/bcm2835/bcm2835_dma.c b/freebsd/sys/arm/broadcom/bcm2835/bcm2835_dma.c index 98dd2cf..a3b89ee 100644 --- a/freebsd/sys/arm/broadcom/bcm2835/bcm2835_dma.c +++ b/freebsd/sys/arm/broadcom/bcm2835/bcm2835_dma.c @@ -42,10 +42,12 @@ __FBSDID("$FreeBSD$"); #include <rtems/bsd/sys/resource.h> #include <sys/rman.h> +#ifndef __rtems__ #include <dev/fdt/fdt_common.h> #include <dev/ofw/openfirm.h> #include <dev/ofw/ofw_bus.h> #include <dev/ofw/ofw_bus_subr.h> +#endif /* __rtems__ */ #include <vm/vm.h> #include <vm/pmap.h> @@ -657,11 +659,13 @@ static int bcm_dma_probe(device_t dev) { +#ifndef __rtems__ if (!ofw_bus_status_okay(dev)) return (ENXIO); if (!ofw_bus_is_compatible(dev, "broadcom,bcm2835-dma")) return (ENXIO); +#endif /* __rtems__ */ device_set_desc(dev, "BCM2835 DMA Controller"); return (BUS_PROBE_DEFAULT); @@ -671,7 +675,9 @@ static int bcm_dma_attach(device_t dev) { struct bcm_dma_softc *sc = device_get_softc(dev); +#ifndef __rtems__ phandle_t node; +#endif /* __rtems__ */ int rid, err = 0; int i; @@ -685,6 +691,7 @@ bcm_dma_attach(device_t dev) sc->sc_intrhand[i] = NULL; } +#ifndef __rtems__ /* Get DMA channel mask. */ node = ofw_bus_get_node(sc->sc_dev); if (OF_getencprop(node, "brcm,dma-channel-mask", &bcm_dma_channel_mask, @@ -695,6 +702,7 @@ bcm_dma_attach(device_t dev) return (ENXIO); } +#endif /* __rtems__ */ /* Mask out channels used by GPU. */ bcm_dma_channel_mask &= ~BCM_DMA_CH_GPU_MASK; @@ -764,5 +772,10 @@ static driver_t bcm_dma_driver = { static devclass_t bcm_dma_devclass; +#ifndef __rtems__ DRIVER_MODULE(bcm_dma, simplebus, bcm_dma_driver, bcm_dma_devclass, 0, 0); MODULE_VERSION(bcm_dma, 1); +#else /* __rtems__ */ +DRIVER_MODULE(bcm_dma, nexus, bcm_dma_driver, bcm_dma_devclass, 0, 0); +MODULE_VERSION(bcm_dma, 1); +#endif /* __rtems__ */ diff --git a/libbsd_waf.py b/libbsd_waf.py index 524b8bc..eff7bf8 100644 --- a/libbsd_waf.py +++ b/libbsd_waf.py @@ -1142,7 +1142,8 @@ def build(bld): 'rtemsbsd/telnetd/telnetd-service.c', 'rtemsbsd/telnetd/telnetd.c'] if bld.get_env()["RTEMS_ARCH"] == "arm": - source += ['freebsd/sys/mips/mips/in_cksum.c'] + source += ['freebsd/sys/arm/broadcom/bcm2835/bcm2835_dma.c', + 'freebsd/sys/mips/mips/in_cksum.c'] if bld.get_env()["RTEMS_ARCH"] == "avr": source += ['freebsd/sys/mips/mips/in_cksum.c'] if bld.get_env()["RTEMS_ARCH"] == "bfin": diff --git a/rtemsbsd/include/bsp/nexus-devices.h b/rtemsbsd/include/bsp/nexus-devices.h index 45beb30..cbffcf6 100644 --- a/rtemsbsd/include/bsp/nexus-devices.h +++ b/rtemsbsd/include/bsp/nexus-devices.h @@ -95,6 +95,13 @@ RTEMS_BSD_DRIVER_TSEC(0xffeb0000, #endif /* !QORIQ_CHIP_IS_T_VARIANT(QORIQ_CHIP_VARIANT) */ +#elif defined(LIBBSP_ARM_RASPBERRYPI_BSP_H) + +#include <bsp/raspberrypi.h> +#include <bsp/irq.h> + +RTEMS_BSD_DRIVER_BCM2835_DMA((unsigned long)0x20007000, 16); + #endif #endif diff --git a/rtemsbsd/include/machine/rtems-bsd-nexus-bus.h b/rtemsbsd/include/machine/rtems-bsd-nexus-bus.h index 5a3458c..25688a0 100644 --- a/rtemsbsd/include/machine/rtems-bsd-nexus-bus.h +++ b/rtemsbsd/include/machine/rtems-bsd-nexus-bus.h @@ -172,6 +172,27 @@ extern "C" { #endif /* RTEMS_BSD_DRIVER_MMC */ /* + * [BCM2835] Raspberry Pi DMA Controller + */ +#if !defined(RTEMS_BSD_DRIVER_BCM2835_DMA) + #define RTEMS_BSD_DRIVER_BCM2835_DMA(_base, _irq) \ + static const rtems_bsd_device_resource rpi_dma_res[] = { \ + { \ + .type = RTEMS_BSD_RES_MEMORY, \ + .start_request = 0, \ + .start_actual = (_base) \ + }, { \ + .type = RTEMS_BSD_RES_IRQ, \ + .start_request = 0, \ + .start_actual = (_irq) \ + } \ + }; \ + RTEMS_BSD_DEFINE_NEXUS_DEVICE(bcm_dma, 0, \ + RTEMS_ARRAY_SIZE(rpi_dma_res), \ + &rpi_dma_res[0]) +#endif /* RTEMS_BSD_DRIVER_BCM2835_DMA */ + +/* * USB Drivers. */ #if !defined(RTEMS_BSD_DRIVER_USB) -- 2.1.4 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel