[PATCH 10/10] TI Pinmux : Port to RTEMS

Vijay Kumar Banerjee vijaykumar9597 at gmail.com
Sun Jul 28 10:42:47 UTC 2019


On Sat, Jul 27, 2019 at 7:35 PM Christian Mauderer <list at c-mauderer.de>
wrote:

> Does this initialize only the pins for drivers that are registered in
> libbsd or all pins? I think you had an extended boot log where you might
> could see it.
>
> If it is all pins, this might interfere with RTEMS drivers that are not
> libbsd based. In that case we need some kind of solution (not sure yet
> which one).
>
> It's muxing more pins than just the HDMI, including i2c pins. Please have
a look at the log that I got from RTEMS:
https://paste.ofcode.org/kVvrdYAfvC3G6kBtG5iaTb

These pins to be initialized are being decided from the device tree nodes
with the pinctrl-single,pins property. If the initialized pins are not all
required,
then I would like to propose a solution of using an overlay to rename the
property to "rtems-pinctrl-single,pins" or something like this for the pins
that
we need to be initialized, like hdmi. And in the ti_pinmux.c modify the
code to
search for this property instead of the default.

I haven't attempted doing it but before I attempt I would like to make sure
if
you think it's OK and not too hackish approach.

> Beneath that: I added some comments in the code below.
>
> On 26/07/2019 13:22, Vijay Kumar Banerjee wrote:
> > ---
> >  Makefile.todo                                 | 13 ++++++
> >  buildset/default.ini                          |  1 +
> >  libbsd.py                                     | 33 +++++++++++++++
> >  rtemsbsd/include/bsp/nexus-devices.h          |  1 +
> >  .../machine/rtems-bsd-kernel-namespace.h      |  9 +++++
> >  .../include/rtems/bsd/local/fdt_pinctrl_if.h  | 40 +++++++++++++++++++
> >  rtemsbsd/local/fdt_pinctrl_if.c               | 27 +++++++++++++
> >  7 files changed, 124 insertions(+)
> >  create mode 100644 rtemsbsd/local/fdt_pinctrl_if.c
> >
> > diff --git a/Makefile.todo b/Makefile.todo
> > index ed1e428e..1bf61432 100644
> > --- a/Makefile.todo
> > +++ b/Makefile.todo
> > @@ -53,6 +53,8 @@ GENERATED += $(LOCAL_INC)/hdmi_if.h
> >  GENERATED += $(LOCAL_SRC)/hdmi_if.c
> >  GENERATED += $(LOCAL_INC)/fb_if.h
> >  GENERATED += $(LOCAL_SRC)/fb_if.c
> > +GENERATED += $(LOCAL_INC)/fdt_pinctrl_if.h
> > +GENERATED += $(LOCAL_SRC)/fdt_pinctrl_if.c
> >  GENERATED += rtemsbsd/include/machine/rtems-bsd-regdomain.h
> >  GENERATED += rtemsbsd/rtems/rtems-bsd-regdomain.c
> >
> > @@ -279,6 +281,17 @@ $(LOCAL_SRC)/fb_if.c:
> $(FREEBSD_SRC)/sys/dev/fb/fb_if.m
> >           -e 's|#include "fb_if.h"|#include <rtems/bsd/local/fb_if.h>|'
> >       mv fb_if.c $@
> >
> > +$(LOCAL_INC)/fdt_pinctrl_if.h:
> $(FREEBSD_SRC)/sys/dev/fdt/fdt_pinctrl_if.m
> > +     awk -f $(TOOLS)/makeobjops.awk $< -h
> > +     mv fdt_pinctrl_if.h $@
> > +
> > +$(LOCAL_SRC)/fdt_pinctrl_if.c:
> $(FREEBSD_SRC)/sys/dev/fdt/fdt_pinctrl_if.m
> > +     awk -f $(TOOLS)/makeobjops.awk $< -c
> > +     sed -i fdt_pinctrl_if.c \
> > +         -e '1 i\#include <machine/rtems-bsd-kernel-space.h>\n' \
> > +         -e 's|#include "fdt_pinctrl_if.h"|#include
> <rtems/bsd/local/fdt_pinctrl_if.h>|'
> > +     mv fdt_pinctrl_if.c $@
> > +
> >  $(LOCAL_SRC)/gpio_if.c: $(FREEBSD_SRC)/sys/dev/gpio/gpio_if.m
> >       awk -f $(TOOLS)/makeobjops.awk $< -c
> >       mv gpio_if.c $@
> > diff --git a/buildset/default.ini b/buildset/default.ini
> > index 1d052a48..eed5cb75 100644
> > --- a/buildset/default.ini
> > +++ b/buildset/default.ini
> > @@ -38,6 +38,7 @@ dev_usb_wlan = off
> >  dev_wlan_rtwn = off
> >  iic = on
> >  display = on
> > +ti_pinmux = on
> >  dhcpcd = on
> >  dpaa = on
> >  evdev = on
> > diff --git a/libbsd.py b/libbsd.py
> > index 775eeeac..cdd97010 100644
> > --- a/libbsd.py
> > +++ b/libbsd.py
> > @@ -840,6 +840,38 @@ class display(builder.Module):
> >              mm.generator['source']()
> >          )
> >
> > +#
> > +# TI PINMUX
> > +#
> > +class ti_pinmux(builder.Module):
> > +
> > +    def __init__(self, manager):
> > +        super(ti_pinmux, self).__init__(manager, type(self).__name__)
> > +
> > +    def generate(self):
> > +        mm = self.manager
> > +        self.addKernelSpaceHeaderFiles(
> > +            [
> > +                'sys/arm/ti/ti_pinmux.h',
> > +                'sys/arm/ti/omap4/omap4_scm_padconf.h',
> > +                'sys/arm/ti/am335x/am335x_scm_padconf.h',
> > +            ]
> > +        )
> > +        self.addKernelSpaceSourceFiles(
> > +            [
> > +                'sys/arm/ti/ti_pinmux.c',
> > +                'sys/dev/fdt/fdt_pinctrl.c',
>
> That looks like a general file. So either this module isn't ti_pinmux
> but pinmux or the pinctrl should be somewhere else.
>
> > +                'sys/arm/ti/am335x/am335x_scm_padconf.c',
> > +            ],
> > +            mm.generator['source']()
> > +        )
> > +        self.addRTEMSSourceFiles(
> > +            [
> > +                'local/fdt_pinctrl_if.c',
>
> Same for that.
>
> > +            ],
> > +            mm.generator['source']()
> > +        )
> > +
> >  #
> >  # USB
> >  #
> > @@ -5198,6 +5230,7 @@ def load(mm):
> >      mm.addModule(evdev(mm))
> >      mm.addModule(iic(mm))
> >      mm.addModule(display(mm))
> > +    mm.addModule(ti_pinmux(mm))
> >
> >      mm.addModule(dev_usb(mm))
> >      mm.addModule(dev_usb_controller(mm))
> > diff --git a/rtemsbsd/include/bsp/nexus-devices.h
> b/rtemsbsd/include/bsp/nexus-devices.h
> > index 313c40d4..a22102c8 100644
> > --- a/rtemsbsd/include/bsp/nexus-devices.h
> > +++ b/rtemsbsd/include/bsp/nexus-devices.h
> > @@ -54,6 +54,7 @@ RTEMS_BSD_DRIVER_SMC0(0x4e000000,
> RVPBXA9_IRQ_ETHERNET);
> >  RTEMS_BSD_DEFINE_NEXUS_DEVICE(ofwbus, 0, 0, NULL);
> >  SYSINIT_DRIVER_REFERENCE(simplebus, ofwbus);
> >  SYSINIT_DRIVER_REFERENCE(ti_scm, simplebus);
> > +SYSINIT_DRIVER_REFERENCE(ti_pinmux, simplebus);
> >  SYSINIT_DRIVER_REFERENCE(am335x_prcm, simplebus);
> >  SYSINIT_DRIVER_REFERENCE(usbss, simplebus);
> >  SYSINIT_DRIVER_REFERENCE(musbotg, usbss);
> > diff --git a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
> b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
> > index d796d3d1..96ca6a7c 100644
> > --- a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
> > +++ b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h
> > @@ -1294,6 +1294,10 @@
> >  #define      fdt_immr_va _bsd_fdt_immr_va
> >  #define      fdt_is_compatible_strict _bsd_fdt_is_compatible_strict
> >  #define      fdt_parent_addr_cells _bsd_fdt_parent_addr_cells
> > +#define      fdt_pinctrl_configure _bsd_fdt_pinctrl_configure
> > +#define      fdt_pinctrl_configure_by_name
> _bsd_fdt_pinctrl_configure_by_name
> > +#define      fdt_pinctrl_configure_tree _bsd_fdt_pinctrl_configure_tree
> > +#define      fdt_pinctrl_register _bsd_fdt_pinctrl_register
> >  #define      fdt_regsize _bsd_fdt_regsize
> >  #define      fib4_free_nh_ext _bsd_fib4_free_nh_ext
> >  #define      fib4_lookup_nh_basic _bsd_fib4_lookup_nh_basic
> > @@ -5038,6 +5042,7 @@
> >  #define      t_functions _bsd_t_functions
> >  #define      t_functions_inited _bsd_t_functions_inited
> >  #define      ti_am335x_clk_devmap _bsd_ti_am335x_clk_devmap
> > +#define      ti_am335x_pinmux_dev _bsd_ti_am335x_pinmux_dev
> >  #define      tick _bsd_tick
> >  #define      ticket_altqs_active _bsd_ticket_altqs_active
> >  #define      ticket_altqs_inactive _bsd_ticket_altqs_inactive
> > @@ -5052,6 +5057,10 @@
> >  #define      _timeout_task_init _bsd__timeout_task_init
> >  #define      timevaladd _bsd_timevaladd
> >  #define      timevalsub _bsd_timevalsub
> > +#define      ti_pinmux_padconf_get _bsd_ti_pinmux_padconf_get
> > +#define      ti_pinmux_padconf_get_gpiomode
> _bsd_ti_pinmux_padconf_get_gpiomode
> > +#define      ti_pinmux_padconf_set _bsd_ti_pinmux_padconf_set
> > +#define      ti_pinmux_padconf_set_gpiomode
> _bsd_ti_pinmux_padconf_set_gpiomode
> >  #define      ti_prcm_clk_disable _bsd_ti_prcm_clk_disable
> >  #define      ti_prcm_clk_enable _bsd_ti_prcm_clk_enable
> >  #define      ti_prcm_clk_get_source_freq
> _bsd_ti_prcm_clk_get_source_freq
> > diff --git a/rtemsbsd/include/rtems/bsd/local/fdt_pinctrl_if.h
> b/rtemsbsd/include/rtems/bsd/local/fdt_pinctrl_if.h
> > index e69de29b..6343de41 100644
> > --- a/rtemsbsd/include/rtems/bsd/local/fdt_pinctrl_if.h
> > +++ b/rtemsbsd/include/rtems/bsd/local/fdt_pinctrl_if.h
> > @@ -0,0 +1,40 @@
> > +/*
> > + * This file is produced automatically.
> > + * Do not modify anything in here by hand.
> > + *
> > + * Created from source file
> > + *   freebsd-org/sys/dev/fdt/fdt_pinctrl_if.m
> > + * with
> > + *   makeobjops.awk
> > + *
> > + * See the source file for legal information
> > + */
> > +
> > +
> > +#ifndef _fdt_pinctrl_if_h_
> > +#define _fdt_pinctrl_if_h_
> > +
> > +
> > +#include <sys/tslog.h>
> > +
> > +/** @brief Unique descriptor for the FDT_PINCTRL_CONFIGURE() method */
> > +extern struct kobjop_desc fdt_pinctrl_configure_desc;
> > +/** @brief A function implementing the FDT_PINCTRL_CONFIGURE() method */
> > +typedef int fdt_pinctrl_configure_t(device_t pinctrl, phandle_t
> cfgxref);
> > +
> > +static __inline int FDT_PINCTRL_CONFIGURE(device_t pinctrl, phandle_t
> cfgxref)
> > +{
> > +     kobjop_t _m;
> > +     int rc;
> > +
> > +TSENTER2(device_get_name(pinctrl));
> > +
> > +     KOBJOPLOOKUP(((kobj_t)pinctrl)->ops,fdt_pinctrl_configure);
> > +     rc = ((fdt_pinctrl_configure_t *) _m)(pinctrl, cfgxref);
> > +
> > +TSEXIT2(device_get_name(pinctrl));
> > +
> > +     return (rc);
> > +}
> > +
> > +#endif /* _fdt_pinctrl_if_h_ */
> > diff --git a/rtemsbsd/local/fdt_pinctrl_if.c
> b/rtemsbsd/local/fdt_pinctrl_if.c
> > new file mode 100644
> > index 00000000..9609add0
> > --- /dev/null
> > +++ b/rtemsbsd/local/fdt_pinctrl_if.c
> > @@ -0,0 +1,27 @@
> > +#include <machine/rtems-bsd-kernel-space.h>
> > +
> > +/*
> > + * This file is produced automatically.
> > + * Do not modify anything in here by hand.
> > + *
> > + * Created from source file
> > + *   freebsd-org/sys/dev/fdt/fdt_pinctrl_if.m
> > + * with
> > + *   makeobjops.awk
> > + *
> > + * See the source file for legal information
> > + */
> > +
> > +#include <sys/param.h>
> > +#include <sys/queue.h>
> > +#include <sys/kernel.h>
> > +#include <sys/kobj.h>
> > +#include <sys/types.h>
> > +#include <sys/bus.h>
> > +#include <dev/ofw/openfirm.h>
> > +#include <rtems/bsd/local/fdt_pinctrl_if.h>
> > +
> > +struct kobjop_desc fdt_pinctrl_configure_desc = {
> > +     0, { &fdt_pinctrl_configure_desc, (kobjop_t)kobj_error_method }
> > +};
> > +
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20190728/6fbe232c/attachment-0001.html>


More information about the devel mailing list