Changeset 5892207 in rtems-libbsd


Ignore:
Timestamp:
Nov 7, 2017, 2:15:38 PM (19 months ago)
Author:
Christian Mauderer <Christian.Mauderer@…>
Branches:
5cb01f277962d3127d364bf871f799b34e6b6be6, 9a4ed64d5acc20cd3488a633bd78cad7d1708081
Children:
ea5880a
Parents:
cf8e1d4
git-author:
Christian Mauderer <Christian.Mauderer@…> (11/07/17 14:15:38)
git-committer:
Sebastian Huber <sebastian.huber@…> (11/10/17 13:01:55)
Message:

saf1761_otg: Port to RTEMS.

Files:
5 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/dev/usb/controller/saf1761_otg.c

    rcf8e1d4 r5892207  
    4545#include <sys/stdint.h>
    4646#include <sys/stddef.h>
    47 #include <rtems/bsd/sys/param.h>
     47#include <sys/param.h>
    4848#include <sys/queue.h>
    4949#include <sys/types.h>
     
    5252#include <sys/bus.h>
    5353#include <sys/module.h>
    54 #include <rtems/bsd/sys/lock.h>
     54#include <sys/lock.h>
    5555#include <sys/mutex.h>
    5656#include <sys/condvar.h>
     
    8383#include <dev/usb/controller/saf1761_otg.h>
    8484#include <dev/usb/controller/saf1761_otg_reg.h>
     85#ifdef __rtems__
     86#include <rtems.h>
     87#include <bsp.h>
     88#ifdef LIBBSP_ARM_ATSAM_BSP_H
     89#include <bsp/pin-config.h>
     90#endif /* LIBBSP_ARM_ATSAM_BSP_H */
     91#endif /* __rtems__ */
    8592
    8693#define SAF1761_OTG_BUS2SC(bus) \
     
    519526
    520527                if (status & SOTG_PTD_DW3_ACTIVE) {
     528#ifndef __rtems__
    521529                        goto busy;
     530#else /* __rtems__ */
     531                        temp = saf1761_peek_host_status_le_4(sc,
     532                            pdt_addr + SOTG_PTD_DW0);
     533                        if (temp & SOTG_PTD_DW0_VALID) {
     534                                goto busy;
     535                        } else {
     536                                status = saf1761_peek_host_status_le_4(sc,
     537                                    pdt_addr + SOTG_PTD_DW3);
     538
     539                                /* check if still active */
     540                                if (status & SOTG_PTD_DW3_ACTIVE) {
     541                                        saf1761_host_channel_free(sc, td);
     542                                        goto retry;
     543                                } else if (status & SOTG_PTD_DW3_HALTED) {
     544                                        if (!(status & SOTG_PTD_DW3_ERRORS))
     545                                                td->error_stall = 1;
     546                                        td->error_any = 1;
     547                                        goto complete;
     548                                }
     549                        }
     550#endif /* __rtems__ */
    522551                } else if (status & SOTG_PTD_DW3_HALTED) {
    523552                        if (!(status & SOTG_PTD_DW3_ERRORS))
     
    563592                saf1761_host_channel_free(sc, td);
    564593        }
     594#ifdef __rtems__
     595retry:
     596#endif /* __rtems__ */
    565597        if (saf1761_host_channel_alloc(sc, td))
    566598                goto busy;
     
    15921624        (void) SAF1761_READ_LE_4(sc, SOTG_ISO_PTD_DONE_PTD);
    15931625
     1626#ifdef __rtems__
     1627        DPRINTFN(9, "HCINTERRUPT=0x%08x DCINTERRUPT=0x%08x\n", hcstat, status);
     1628
     1629#endif /* __rtems__ */
    15941630        if (status & SOTG_DCINTERRUPT_IEPSOF) {
    15951631                if ((sc->sc_host_async_busy_map[1] | sc->sc_host_async_busy_map[0] |
     
    16241660        USB_BUS_SPIN_UNLOCK(&sc->sc_bus);
    16251661
     1662#ifdef __rtems__
     1663#ifdef LIBBSP_ARM_ATSAM_BSP_H
     1664        const Pio *saf_irq_pio = PIOC;
     1665        /* The PIOC is used only by the SAF1761. So we can just reset the status
     1666         * without any further handling. */
     1667        (void) saf_irq_pio->PIO_ISR;
     1668#endif /* LIBBSP_ARM_ATSAM_BSP_H */
     1669
     1670#endif /* __rtems__ */
    16261671        return (retval);
    16271672}
     
    24492494        SAF1761_WRITE_LE_4(sc, SOTG_CTRL_SET_CLR,
    24502495            SOTG_CTRL_CLR(0xFFFF));
     2496#ifdef __rtems__
     2497        SAF1761_WRITE_LE_4(sc, SOTG_CTRL_SET_CLR,
     2498            SOTG_CTRL_SET(SOTG_CTRL_SEL_CP_EXT | SOTG_CTRL_VBUS_DRV));
     2499#else /* __rtems__ */
    24512500        SAF1761_WRITE_LE_4(sc, SOTG_CTRL_SET_CLR,
    24522501            SOTG_CTRL_SET(SOTG_CTRL_SW_SEL_HC_DC |
    24532502            SOTG_CTRL_BDIS_ACON_EN | SOTG_CTRL_SEL_CP_EXT |
    24542503            SOTG_CTRL_VBUS_DRV));
     2504#endif /* __rtems__ */
    24552505
    24562506        /* disable device address */
  • freebsd/sys/dev/usb/controller/saf1761_otg_fdt.c

    rcf8e1d4 r5892207  
    3737#include <sys/stdint.h>
    3838#include <sys/stddef.h>
    39 #include <rtems/bsd/sys/param.h>
     39#include <sys/param.h>
    4040#include <sys/queue.h>
    4141#include <sys/types.h>
     
    4444#include <sys/bus.h>
    4545#include <sys/module.h>
    46 #include <rtems/bsd/sys/lock.h>
     46#include <sys/lock.h>
    4747#include <sys/mutex.h>
    4848#include <sys/condvar.h>
     
    7878#include <dev/usb/controller/saf1761_otg.h>
    7979#include <dev/usb/controller/saf1761_otg_reg.h>
     80#ifdef __rtems__
     81#include <rtems.h>
     82#include <bsp.h>
     83#ifdef LIBBSP_ARM_ATSAM_BSP_H
     84#include <bsp/pin-config.h>
     85#endif /* LIBBSP_ARM_ATSAM_BSP_H */
     86#endif /* __rtems__ */
    8087
    8188static device_probe_t saf1761_otg_fdt_probe;
     
    103110static devclass_t saf1761_otg_devclass;
    104111
     112#ifndef __rtems__
    105113DRIVER_MODULE(saf1761otg, simplebus, saf1761_otg_driver, saf1761_otg_devclass, 0, 0);
     114#else /* __rtems__ */
     115DRIVER_MODULE(saf1761otg, nexus, saf1761_otg_driver, saf1761_otg_devclass, 0, 0);
     116#endif /* __rtems__ */
    106117MODULE_DEPEND(saf1761otg, usb, 1, 1, 1);
    107118
     
    109120saf1761_otg_fdt_probe(device_t dev)
    110121{
     122#ifndef __rtems__
    111123        if (!ofw_bus_status_okay(dev))
    112124                return (ENXIO);
     
    114126        if (!ofw_bus_is_compatible(dev, "nxp,usb-isp1761"))
    115127                return (ENXIO);
     128#else /* __rtems__ */
     129        if (device_get_unit(dev) != 0)
     130                return (ENXIO);
     131#endif /* __rtems__ */
    116132
    117133        device_set_desc(dev, "ISP1761/SAF1761 DCI USB 2.0 Device Controller");
     
    128144        int rid;
    129145
     146#ifndef __rtems__
    130147        /* get configuration from FDT */
    131148
     
    172189                sc->sc_hw_mode |= SOTG_HW_MODE_CTRL_INTR_LEVEL;
    173190        }
     191#else /* __rtems__ */
     192        /* set 16-bit data bus */
     193        sc->sc_hw_mode = 0;
     194#endif /* __rtems__ */
    174195
    175196        /* initialise some bus fields */
     
    214235        device_set_ivars(sc->sc_bus.bdev, &sc->sc_bus);
    215236
     237#ifdef __rtems__
     238#ifdef LIBBSP_ARM_ATSAM_BSP_H
     239        const Pin saf_irq = {PIO_PC16, PIOC, ID_PIOC, PIO_INPUT, PIO_PULLUP | PIO_IT_LOW_LEVEL};
     240        /* Activate pin interrupt. Add a default handler that just clears the
     241         * status. */
     242        PIO_Configure(&saf_irq, 1);
     243        PIO_EnableIt(&saf_irq);
     244#endif /* LIBBSP_ARM_ATSAM_BSP_H */
     245#endif /* __rtems__ */
    216246        err = bus_setup_intr(dev, sc->sc_irq_res, INTR_TYPE_TTY | INTR_MPSAFE,
    217247            &saf1761_otg_filter_interrupt, &saf1761_otg_interrupt, sc, &sc->sc_intr_hdl);
  • libbsd.py

    rcf8e1d4 r5892207  
    701701            'sys/dev/usb/controller/dwc_otg.h',
    702702            'sys/dev/usb/controller/dwc_otgreg.h',
     703            'sys/dev/usb/controller/saf1761_otg.h',
     704            'sys/dev/usb/controller/saf1761_otg_reg.h',
    703705        ]
    704706    )
     
    709711            'sys/dev/usb/controller/usb_controller.c',
    710712            'sys/dev/usb/controller/dwc_otg.c',
     713            'sys/dev/usb/controller/saf1761_otg.c',
     714            'sys/dev/usb/controller/saf1761_otg_fdt.c',
    711715        ],
    712716        mm.generator['source']()
  • libbsd_waf.py

    rcf8e1d4 r5892207  
    18771877              'freebsd/sys/dev/usb/controller/musb_otg.c',
    18781878              'freebsd/sys/dev/usb/controller/ohci.c',
     1879              'freebsd/sys/dev/usb/controller/saf1761_otg.c',
     1880              'freebsd/sys/dev/usb/controller/saf1761_otg_fdt.c',
    18791881              'freebsd/sys/dev/usb/controller/usb_controller.c',
    18801882              'freebsd/sys/dev/usb/input/atp.c',
  • rtemsbsd/include/machine/rtems-bsd-nexus-bus.h

    rcf8e1d4 r5892207  
    255255    SYSINIT_DRIVER_REFERENCE(umass, uhub)
    256256#endif /* RTEMS_BSD_DRIVER_USB_MASS */
     257
     258/*
     259 * USB SAF1761 host controller driver.
     260 */
     261#if !defined(RTEMS_BSD_DRIVER_USB_SAF1761_OTG)
     262  #define RTEMS_BSD_DRIVER_USB_SAF1761_OTG(_base, _irq)                  \
     263    static const rtems_bsd_device_resource usb_saf1761_otg_res[] = {     \
     264      {                                                                  \
     265        .type = RTEMS_BSD_RES_MEMORY,                                    \
     266        .start_request = 0,                                              \
     267        .start_actual = (_base)                                          \
     268      }, {                                                               \
     269        .type = RTEMS_BSD_RES_IRQ,                                       \
     270        .start_request = 0,                                              \
     271        .start_actual = (_irq)                                           \
     272      }                                                                  \
     273    };                                                                   \
     274    RTEMS_BSD_DEFINE_NEXUS_DEVICE(saf1761otg, 0,                         \
     275                                  RTEMS_ARRAY_SIZE(usb_saf1761_otg_res), \
     276                                  &usb_saf1761_otg_res[0])
     277#endif /* RTEMS_BSD_DRIVER_USB_SAF1761_OTG */
    257278
    258279/**
Note: See TracChangeset for help on using the changeset viewer.