Port am335x usb driver to RTEMS.

Add FDT and umass support for am335x USB driver.

Now RTEMS can mount and open USB disk.
This commit is contained in:
Sichen Zhao 2017-07-13 10:24:05 +08:00 committed by Sebastian Huber
parent bd3c01a126
commit 9121570cf2
7 changed files with 75 additions and 0 deletions

View File

@ -438,7 +438,9 @@ am335x_prcm_attach(device_t dev)
sc->bsh = rman_get_bushandle(sc->res[0]);
am335x_prcm_sc = sc;
#ifndef __rtems__
ti_cpu_reset = am335x_prcm_reset;
#endif /* __rtems__ */
if (am335x_clk_get_sysclk_freq(NULL, &sysclk) != 0)
sysclk = 0;

View File

@ -29,6 +29,9 @@
#ifndef _TI_CPUID_H_
#define _TI_CPUID_H_
#ifdef __rtems__
#include <bsp.h>
#endif /* __rtems__ */
#define OMAP_MAKEREV(d, a, b, c) \
(uint32_t)(((d) << 16) | (((a) & 0xf) << 8) | (((b) & 0xf) << 4) | ((c) & 0xf))
@ -70,7 +73,23 @@
#define CHIP_OMAP_4 0
#define CHIP_AM335X 1
#ifdef __rtems__
#ifdef IS_AM335X
#define SOC_TI_AM335X
#else
#warning Unknown SOC.
#endif
#if defined(SOC_TI_AM335X)
#define _ti_chip CHIP_AM335X
#elif defined(SOC_OMAP4)
#define _ti_chip CHIP_OMAP_4
#else
#define _ti_chip -1
#endif
#else /* __rtems__ */
extern int _ti_chip;
#endif /* __rtems__ */
static __inline int ti_chip(void)
{

View File

@ -889,6 +889,39 @@ def dev_usb_storage_add_on(mm):
)
return mod
#
# BBB USB
#
def dev_usb_controller_bbb(mm):
mod = builder.Module('dev_usb_controller_bbb')
mod.addDependency(mm['dev_usb'])
mod.addKernelSpaceHeaderFiles(
[
'sys/arm/ti/ti_cpuid.h',
'sys/arm/ti/ti_prcm.h',
'sys/arm/ti/ti_scm.h',
'sys/arm/ti/tivar.h',
'sys/arm/ti/am335x/am335x_scm.h',
'sys/dev/usb/controller/musb_otg.h',
'sys/sys/timeet.h',
'sys/sys/watchdog.h',
'sys/dev/fdt/fdt_pinctrl.h',
]
)
mod.addKernelSpaceSourceFiles(
[
'sys/arm/ti/ti_scm.c',
'sys/arm/ti/am335x/am335x_prcm.c',
'sys/arm/ti/am335x/am335x_usbss.c',
'sys/arm/ti/ti_prcm.c',
'sys/arm/ti/am335x/am335x_musb.c',
'sys/dev/usb/controller/musb_otg.c',
],
mm.generator['source']()
)
return mod
#
# USB Template
#
@ -3195,6 +3228,7 @@ def sources(mm):
mm.addModule(cam(mm))
mm.addModule(dev_usb_storage(mm))
#mm.addModule(dev_usb_storage_add_on(mm))
mm.addModule(dev_usb_controller_bbb(mm))
#mm.addModule(dev_usb_template(mm))

View File

@ -731,6 +731,11 @@ def build(bld):
source = ['freebsd/sys/arm/lpc/if_lpe.c',
'freebsd/sys/arm/lpc/lpc_pwr.c',
'freebsd/sys/arm/ti/am335x/am335x_musb.c',
'freebsd/sys/arm/ti/am335x/am335x_prcm.c',
'freebsd/sys/arm/ti/am335x/am335x_usbss.c',
'freebsd/sys/arm/ti/ti_prcm.c',
'freebsd/sys/arm/ti/ti_scm.c',
'freebsd/sys/arm/xilinx/zy7_slcr.c',
'freebsd/sys/cam/cam.c',
'freebsd/sys/cam/scsi/scsi_all.c',
@ -896,6 +901,7 @@ def build(bld):
'freebsd/sys/dev/tsec/if_tsec_fdt.c',
'freebsd/sys/dev/usb/controller/dwc_otg.c',
'freebsd/sys/dev/usb/controller/ehci.c',
'freebsd/sys/dev/usb/controller/musb_otg.c',
'freebsd/sys/dev/usb/controller/ohci.c',
'freebsd/sys/dev/usb/controller/usb_controller.c',
'freebsd/sys/dev/usb/input/atp.c',

View File

@ -46,6 +46,20 @@
RTEMS_BSD_DRIVER_SMC0(0x4e000000, RVPBXA9_IRQ_ETHERNET);
#elif defined(LIBBSP_ARM_BEAGLE_BSP_H)
#include <bsp/irq.h>
RTEMS_BSD_DEFINE_NEXUS_DEVICE(ofwbus, 0, 0, NULL);
SYSINIT_DRIVER_REFERENCE(simplebus, ofwbus);
SYSINIT_DRIVER_REFERENCE(ti_scm, simplebus);
SYSINIT_DRIVER_REFERENCE(am335x_prcm, simplebus);
SYSINIT_DRIVER_REFERENCE(usbss, simplebus);
SYSINIT_DRIVER_REFERENCE(musbotg, usbss);
RTEMS_BSD_DRIVER_USB;
RTEMS_BSD_DRIVER_USB_MASS;
#elif defined(LIBBSP_ARM_LPC32XX_BSP_H)
#include <bsp/irq.h>

View File