On Thu, Apr 2, 2020 at 9:18 AM Christian Mauderer
<christian.maude...@embedded-brains.de> wrote:
>
> On 02/04/2020 17:13, Gedare Bloom wrote:
> > Maybe file a ticket against this for the future.
>
> Problematic point is: I'm not sure when or if FreeBSD ever will have the
> necessary functions. So that ticket would be a candidate for being open
> forever.
>
OK that's fine.

It seems all the imx stuff is ok, except for the changes noted in the
shared files to address. The new imports seem straightforward and if
you need this stuff for 5.1 then once you sort out the patch order and
the unaligned access, if Sebastian is happy go for it.

New BSPs/features that can wait for 6.0 at this point should.

> >
> > On Thu, Apr 2, 2020 at 8:43 AM Christian Mauderer
> > <christian.maude...@embedded-brains.de> wrote:
> >>
> >> This is not a nice solution but it should work on all chips. As soon as
> >> FreeBSD has a nice solution via the USB PHY driver, this should be
> >> replaced.
> >>
> >> Update #3869.
> >> ---
> >>  freebsd/sys/dev/usb/controller/ehci_imx.c | 59 
> >> +++++++++++++++++++++++++++++++
> >>  1 file changed, 59 insertions(+)
> >>
> >> diff --git a/freebsd/sys/dev/usb/controller/ehci_imx.c 
> >> b/freebsd/sys/dev/usb/controller/ehci_imx.c
> >> index d158df1d..544a63b5 100644
> >> --- a/freebsd/sys/dev/usb/controller/ehci_imx.c
> >> +++ b/freebsd/sys/dev/usb/controller/ehci_imx.c
> >> @@ -50,6 +50,9 @@ __FBSDID("$FreeBSD$");
> >>
> >>  #include <dev/ofw/ofw_bus.h>
> >>  #include <dev/ofw/ofw_bus_subr.h>
> >> +#ifdef __rtems__
> >> +#include <dev/fdt/fdt_common.h>
> >> +#endif /* __rtems__ */
> >>
> >>  #include <dev/usb/usb.h>
> >>  #include <dev/usb/usbdi.h>
> >> @@ -270,6 +273,9 @@ struct imx_ehci_softc {
> >>         device_t        dev;
> >>         struct resource *ehci_mem_res;  /* EHCI core regs. */
> >>         struct resource *ehci_irq_res;  /* EHCI core IRQ. */
> >> +#ifdef __rtems__
> >> +       void            *phy_regs;
> >> +#endif /* __rtems__ */
> >>  };
> >>
> >>  static struct ofw_compat_data compat_data[] = {
> >> @@ -380,6 +386,32 @@ imx_ehci_disable_oc(struct imx_ehci_softc *sc)
> >>         index = usbmprops[1];
> >>         imx_usbmisc_set_ctrl(usbmdev, index, USBNC_OVER_CUR_DIS);
> >>  }
> >> +#ifdef __rtems__
> >> +#define BUS_SPACE_PHYSADDR(res, offs) \
> >> +       ((u_int)(rman_get_start(res)+(offs)))
> >> +
> >> +static uint16_t
> >> +imx_ehci_get_port_speed_portsc(struct ehci_softc *sc, uint16_t index)
> >> +{
> >> +       uint32_t v;
> >> +       struct imx_ehci_softc *isc = (struct imx_ehci_softc *)sc;
> >> +
> >> +       v = ehci_get_port_speed_portsc(sc, index);
> >> +
> >> +       /* Set/clear ENHOSTDISCONDETECT in USBPHY CTRL register */
> >> +       /* FIXME: This is a very hacky method. It should be done by the phy
> >> +        * driver instead. */
> >> +       volatile uint32_t *ctrl_set = isc->phy_regs + 0x34;
> >> +       volatile uint32_t *ctrl_clr = isc->phy_regs + 0x38;
> >> +       if (v == UPS_HIGH_SPEED) {
> >> +               *ctrl_set = 0x2;
> >> +       } else {
> >> +               *ctrl_clr = 0x2;
> >> +       }
> >> +
> >> +       return (v);
> >> +}
> >> +#endif /* __rtems__ */
> >>
> >>  static int
> >>  imx_ehci_attach(device_t dev)
> >> @@ -474,6 +506,33 @@ imx_ehci_attach(device_t dev)
> >>         esc->sc_flags |= EHCI_SCFLG_NORESTERM | EHCI_SCFLG_TT;
> >>         esc->sc_vendor_post_reset = imx_ehci_post_reset;
> >>         esc->sc_vendor_get_port_speed = ehci_get_port_speed_portsc;
> >> +#ifdef __rtems__
> >> +       /*
> >> +        * FIXME: This is a big hack to get the PHY regs and set one bit 
> >> during
> >> +        * changes of the port speed.
> >> +        */
> >> +       sc->phy_regs = 0;
> >> +       if (OF_hasprop(ofw_bus_get_node(sc->dev), "fsl,usbphy")) {
> >> +               phandle_t *cells;
> >> +               int len;
> >> +               phandle_t phynode;
> >> +
> >> +               cells = NULL;
> >> +               len = OF_getencprop_alloc_multi(ofw_bus_get_node(sc->dev),
> >> +                   "fsl,usbphy", sizeof(*cells), (void **)&cells);
> >> +               if (len > 0
> >> +                   && (phynode = OF_node_from_xref(cells[0])) != -1 &&
> >> +                   ofw_bus_node_is_compatible(phynode, 
> >> "fsl,imx6ul-usbphy")) {
> >> +                       u_long base, size;
> >> +                       if (fdt_regsize(phynode, &base, &size) == 0) {
> >> +                               sc->phy_regs = (void*)base;
> >> +                               esc->sc_vendor_get_port_speed =
> >> +                                   imx_ehci_get_port_speed_portsc;
> >> +                       }
> >> +               }
> >> +               OF_prop_free(cells);
> >> +       }
> >> +#endif /* __rtems__ */
> >>
> >>         err = ehci_init(esc);
> >>         if (err != 0) {
> >> --
> >> 2.16.4
> >>
> >> _______________________________________________
> >> devel mailing list
> >> devel@rtems.org
> >> http://lists.rtems.org/mailman/listinfo/devel
>
> --
> --------------------------------------------
> embedded brains GmbH
> Herr Christian Mauderer
> Dornierstr. 4
> D-82178 Puchheim
> Germany
> email: christian.maude...@embedded-brains.de
> Phone: +49-89-18 94 741 - 18
> Fax:   +49-89-18 94 741 - 08
> PGP: Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to