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

Christian Mauderer list at c-mauderer.de
Sat Jul 27 14:05:07 UTC 2019


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).

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 }
> +};
> +
> 



More information about the devel mailing list