From 2cf7b6b3e4f3f93c50632781b3898efd6b38cd03 Mon Sep 17 00:00:00 2001 From: Vijay Kumar Banerjee Date: Sun, 4 Aug 2019 01:49:41 +0530 Subject: TDA19988: Port to RTEMS --- Makefile.todo | 26 ++++++ buildset/default.ini | 1 + libbsd.py | 41 ++++++++++ rtemsbsd/include/bsp/nexus-devices.h | 1 + .../include/machine/rtems-bsd-kernel-namespace.h | 65 +++++++++++++++ rtemsbsd/include/rtems/bsd/local/clknode_if.h | 92 ++++++++++++++++++++++ rtemsbsd/include/rtems/bsd/local/hdmi_if.h | 71 +++++++++++++++++ rtemsbsd/include/rtems/bsd/local/opt_videomode.h | 0 rtemsbsd/local/clknode_if.c | 40 ++++++++++ rtemsbsd/local/hdmi_if.c | 35 ++++++++ 10 files changed, 372 insertions(+) create mode 100644 rtemsbsd/include/rtems/bsd/local/clknode_if.h create mode 100644 rtemsbsd/include/rtems/bsd/local/hdmi_if.h create mode 100644 rtemsbsd/include/rtems/bsd/local/opt_videomode.h create mode 100644 rtemsbsd/local/clknode_if.c create mode 100644 rtemsbsd/local/hdmi_if.c diff --git a/Makefile.todo b/Makefile.todo index de3d0c5b..cad9b2a0 100644 --- a/Makefile.todo +++ b/Makefile.todo @@ -49,6 +49,10 @@ GENERATED += $(LOCAL_INC)/iicbus_if.h GENERATED += $(LOCAL_SRC)/iicbus_if.c GENERATED += $(LOCAL_INC)/fdt_pinctrl_if.h GENERATED += $(LOCAL_SRC)/fdt_pinctrl_if.c +GENERATED += $(LOCAL_INC)/clknode_if.h +GENERATED += $(LOCAL_SRC)/clknode_if.c +GENERATED += $(LOCAL_INC)/hdmi_if.h +GENERATED += $(LOCAL_SRC)/hdmi_if.c GENERATED += rtemsbsd/include/machine/rtems-bsd-regdomain.h GENERATED += rtemsbsd/rtems/rtems-bsd-regdomain.c @@ -252,6 +256,28 @@ $(LOCAL_SRC)/fdt_pinctrl_if.c: $(FREEBSD_SRC)/sys/dev/fdt/fdt_pinctrl_if.m -e 's|#include "fdt_pinctrl_if.h"|#include |' mv fdt_pinctrl_if.c $@ +$(LOCAL_INC)/clknode_if.h: $(FREEBSD_SRC)/sys/dev/extres/clk/clknode_if.m + awk -f $(TOOLS)/makeobjops.awk $< -h + mv clknode_if.h $@ + +$(LOCAL_SRC)/clknode_if.c: $(FREEBSD_SRC)/sys/dev/extres/clk/clknode_if.m + awk -f $(TOOLS)/makeobjops.awk $< -c + sed -i clknode_if.c \ + -e '1 i\#include \n' \ + -e 's|#include "clknode_if.h"|#include |' + mv clknode_if.c $@ + +$(LOCAL_INC)/hdmi_if.h: $(FREEBSD_SRC)/sys/dev/hdmi/hdmi_if.m + awk -f $(TOOLS)/makeobjops.awk $< -h + mv hdmi_if.h $@ + +$(LOCAL_SRC)/hdmi_if.c: $(FREEBSD_SRC)/sys/dev/hdmi/hdmi_if.m + awk -f $(TOOLS)/makeobjops.awk $< -c + sed -i hdmi_if.c \ + -e '1 i\#include \n' \ + -e 's|#include "hdmi_if.h"|#include |' + mv hdmi_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 eabaec5f..4834e6d1 100644 --- a/buildset/default.ini +++ b/buildset/default.ini @@ -38,6 +38,7 @@ dev_usb_wlan = off dev_wlan_rtwn = off iic = on pinmux = on +display = on dhcpcd = on dpaa = on evdev = on diff --git a/libbsd.py b/libbsd.py index 7c3d84ca..bdc91776 100644 --- a/libbsd.py +++ b/libbsd.py @@ -777,6 +777,46 @@ class iic(builder.Module): mm.generator['source']() ) + +# +# DISPLAY +# +class display(builder.Module): + + def __init__(self, manager): + super(display, self).__init__(manager, type(self).__name__) + + def generate(self): + mm = self.manager + self.addKernelSpaceHeaderFiles( + [ + 'sys/dev/extres/clk/clk.h', + 'sys/dev/videomode/videomode.h', + 'sys/dev/videomode/edidvar.h', + 'sys/dev/videomode/edidreg.h', + 'sys/dev/videomode/ediddevs.h', + 'sys/dev/videomode/ediddevs_data.h', + 'sys/dev/videomode/vesagtf.h', + ] + ) + self.addKernelSpaceSourceFiles( + [ + 'sys/arm/ti/am335x/tda19988.c', + 'sys/dev/videomode/pickmode.c', + 'sys/dev/videomode/edid.c', + 'sys/dev/videomode/vesagtf.c', + 'sys/dev/videomode/videomode.c', + ], + mm.generator['source']() + ) + self.addRTEMSSourceFiles( + [ + 'local/clknode_if.c', + 'local/hdmi_if.c', + ], + mm.generator['source']() + ) + # # PINMUX # @@ -5167,6 +5207,7 @@ def load(mm): mm.addModule(evdev(mm)) mm.addModule(iic(mm)) mm.addModule(pinmux(mm)) + mm.addModule(display(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 7c6ff380..e330679d 100644 --- a/rtemsbsd/include/bsp/nexus-devices.h +++ b/rtemsbsd/include/bsp/nexus-devices.h @@ -65,6 +65,7 @@ SYSINIT_DRIVER_REFERENCE(ukphy, miibus); SYSINIT_DRIVER_REFERENCE(rtems_i2c, simplebus); SYSINIT_DRIVER_REFERENCE(ofw_iicbus, rtems_i2c); SYSINIT_DRIVER_REFERENCE(iic, iicbus); +SYSINIT_DRIVER_REFERENCE(tda, iicbus); SYSINIT_DRIVER_REFERENCE(iicbus, rtems_i2c); #ifdef RTEMS_BSD_MODULE_NET80211 SYSINIT_DRIVER_REFERENCE(rtwn_usb, uhub); diff --git a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h index e7bc6d6e..1606543c 100644 --- a/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h +++ b/rtemsbsd/include/machine/rtems-bsd-kernel-namespace.h @@ -563,7 +563,53 @@ #define clean_unrhdrl _bsd_clean_unrhdrl #define ClearCheckNewLink _bsd_ClearCheckNewLink #define clear_unrhdr _bsd_clear_unrhdr +#define clk_disable _bsd_clk_disable +#define clkdom_create _bsd_clkdom_create +#define clkdom_dump _bsd_clkdom_dump +#define clkdom_finit _bsd_clkdom_finit +#define clkdom_get_by_dev _bsd_clkdom_get_by_dev +#define clkdom_set_ofw_mapper _bsd_clkdom_set_ofw_mapper +#define clkdom_unlock _bsd_clkdom_unlock +#define clkdom_xlock _bsd_clkdom_xlock +#define clk_enable _bsd_clk_enable +#define clk_get_by_id _bsd_clk_get_by_id +#define clk_get_by_name _bsd_clk_get_by_name +#define clk_get_by_ofw_index _bsd_clk_get_by_ofw_index +#define clk_get_by_ofw_index_prop _bsd_clk_get_by_ofw_index_prop +#define clk_get_by_ofw_name _bsd_clk_get_by_ofw_name +#define clk_get_freq _bsd_clk_get_freq +#define clk_get_name _bsd_clk_get_name +#define clk_get_parent _bsd_clk_get_parent #define clk_intr_event _bsd_clk_intr_event +#define clknode_class _bsd_clknode_class +#define clknode_create _bsd_clknode_create +#define clknode_disable _bsd_clknode_disable +#define clknode_enable _bsd_clknode_enable +#define clknode_find_by_id _bsd_clknode_find_by_id +#define clknode_find_by_name _bsd_clknode_find_by_name +#define clknode_get_device _bsd_clknode_get_device +#define clknode_get_flags _bsd_clknode_get_flags +#define clknode_get_freq _bsd_clknode_get_freq +#define clknode_get_name _bsd_clknode_get_name +#define clknode_get_parent _bsd_clknode_get_parent +#define clknode_get_parent_idx _bsd_clknode_get_parent_idx +#define clknode_get_parent_names _bsd_clknode_get_parent_names +#define clknode_get_parents_num _bsd_clknode_get_parents_num +#define clknode_get_softc _bsd_clknode_get_softc +#define clknode_init_parent_idx _bsd_clknode_init_parent_idx +#define clknode_register _bsd_clknode_register +#define clknode_set_freq _bsd_clknode_set_freq +#define clknode_set_parent_by_idx _bsd_clknode_set_parent_by_idx +#define clknode_set_parent_by_name _bsd_clknode_set_parent_by_name +#define clknode_stop _bsd_clknode_stop +#define clk_parse_ofw_clk_name _bsd_clk_parse_ofw_clk_name +#define clk_parse_ofw_out_names _bsd_clk_parse_ofw_out_names +#define clk_release _bsd_clk_release +#define clk_set_assigned _bsd_clk_set_assigned +#define clk_set_freq _bsd_clk_set_freq +#define clk_set_parent_by_clk _bsd_clk_set_parent_by_clk +#define clk_stop _bsd_clk_stop +#define clk_test_freq _bsd_clk_test_freq #define comp_algo_deflate _bsd_comp_algo_deflate #define comp_algorithm_lookup _bsd_comp_algorithm_lookup #define config_intrhook_disestablish _bsd_config_intrhook_disestablish @@ -775,6 +821,9 @@ #define drbr_needs_enqueue_drv _bsd_drbr_needs_enqueue_drv #define driver_module_handler _bsd_driver_module_handler #define dwc_driver _bsd_dwc_driver +#define dwc_hdmi_get_edid _bsd_dwc_hdmi_get_edid +#define dwc_hdmi_init _bsd_dwc_hdmi_init +#define dwc_hdmi_set_videomode _bsd_dwc_hdmi_set_videomode #define dwc_otg_attach _bsd_dwc_otg_attach #define dwc_otg_detach _bsd_dwc_otg_detach #define dwc_otg_driver _bsd_dwc_otg_driver @@ -1087,6 +1136,13 @@ #define e1000_write_vfta_generic _bsd_e1000_write_vfta_generic #define e1000_write_vfta_i350 _bsd_e1000_write_vfta_i350 #define e1000_write_xmdio_reg _bsd_e1000_write_xmdio_reg +#define edid_is_valid _bsd_edid_is_valid +#define edid_nproducts _bsd_edid_nproducts +#define edid_nvendors _bsd_edid_nvendors +#define edid_parse _bsd_edid_parse +#define edid_print _bsd_edid_print +#define edid_products _bsd_edid_products +#define edid_vendors _bsd_edid_vendors #define ehci_detach _bsd_ehci_detach #define ehci_get_port_speed_hostc _bsd_ehci_get_port_speed_hostc #define ehci_get_port_speed_portsc _bsd_ehci_get_port_speed_portsc @@ -2736,6 +2792,7 @@ #define m_checkalignment _bsd_m_checkalignment #define m_clget _bsd_m_clget #define m_cljget _bsd_m_cljget +#define M_CLOCK _bsd_M_CLOCK #define m_collapse _bsd_m_collapse #define m_copyback _bsd_m_copyback #define m_copydata _bsd_m_copydata @@ -3446,6 +3503,8 @@ #define pgsigio _bsd_pgsigio #define phashinit _bsd_phashinit #define phashinit_flags _bsd_phashinit_flags +#define pick_mode_by_dotclock _bsd_pick_mode_by_dotclock +#define pick_mode_by_ref _bsd_pick_mode_by_ref #define pipe_dtor _bsd_pipe_dtor #define pipe_named_ctor _bsd_pipe_named_ctor #define pipeselwakeup _bsd_pipeselwakeup @@ -4618,6 +4677,7 @@ #define soreceive_generic _bsd_soreceive_generic #define soreserve _bsd_soreserve #define sorflush _bsd_sorflush +#define sort_modes _bsd_sort_modes #define sosend _bsd_sosend #define sosend_dgram _bsd_sosend_dgram #define sosend_generic _bsd_sosend_generic @@ -4726,6 +4786,7 @@ #define sysctl_handle_uma_zone_max _bsd_sysctl_handle_uma_zone_max #define sysctl___hw _bsd_sysctl___hw #define sysctl___hw_bus _bsd_sysctl___hw_bus +#define sysctl___hw_clock _bsd_sysctl___hw_clock #define sysctl___hw_fdt _bsd_sysctl___hw_fdt #define sysctl___hw_pci _bsd_sysctl___hw_pci #define sysctl___hw_sdhci _bsd_sysctl___hw_sdhci @@ -5459,6 +5520,10 @@ #define uuid_ether_add _bsd_uuid_ether_add #define uuid_ether_del _bsd_uuid_ether_del #define vht80_chan_ranges _bsd_vht80_chan_ranges +#define vesagtf_mode _bsd_vesagtf_mode +#define vesagtf_mode_params _bsd_vesagtf_mode_params +#define videomode_count _bsd_videomode_count +#define videomode_list _bsd_videomode_list #define vlan_cookie_p _bsd_vlan_cookie_p #define vlan_devat_p _bsd_vlan_devat_p #define vlan_input_p _bsd_vlan_input_p diff --git a/rtemsbsd/include/rtems/bsd/local/clknode_if.h b/rtemsbsd/include/rtems/bsd/local/clknode_if.h new file mode 100644 index 00000000..97f4c956 --- /dev/null +++ b/rtemsbsd/include/rtems/bsd/local/clknode_if.h @@ -0,0 +1,92 @@ +/* + * This file is @generated automatically. + * Do not modify anything in here by hand. + * + * Created from source file + * freebsd-org/sys/dev/extres/clk/clknode_if.m + * with + * makeobjops.awk + * + * See the source file for legal information + */ + + +#ifndef _clknode_if_h_ +#define _clknode_if_h_ + + +struct clknode; + +/** @brief Unique descriptor for the CLKNODE_INIT() method */ +extern struct kobjop_desc clknode_init_desc; +/** @brief A function implementing the CLKNODE_INIT() method */ +typedef int clknode_init_t(struct clknode *clk, device_t dev); + +static __inline int CLKNODE_INIT(struct clknode *clk, device_t dev) +{ + kobjop_t _m; + int rc; + KOBJOPLOOKUP(((kobj_t)clk)->ops,clknode_init); + rc = ((clknode_init_t *) _m)(clk, dev); + return (rc); +} + +/** @brief Unique descriptor for the CLKNODE_RECALC_FREQ() method */ +extern struct kobjop_desc clknode_recalc_freq_desc; +/** @brief A function implementing the CLKNODE_RECALC_FREQ() method */ +typedef int clknode_recalc_freq_t(struct clknode *clk, uint64_t *freq); + +static __inline int CLKNODE_RECALC_FREQ(struct clknode *clk, uint64_t *freq) +{ + kobjop_t _m; + int rc; + KOBJOPLOOKUP(((kobj_t)clk)->ops,clknode_recalc_freq); + rc = ((clknode_recalc_freq_t *) _m)(clk, freq); + return (rc); +} + +/** @brief Unique descriptor for the CLKNODE_SET_FREQ() method */ +extern struct kobjop_desc clknode_set_freq_desc; +/** @brief A function implementing the CLKNODE_SET_FREQ() method */ +typedef int clknode_set_freq_t(struct clknode *clk, uint64_t fin, + uint64_t *fout, int flags, int *done); + +static __inline int CLKNODE_SET_FREQ(struct clknode *clk, uint64_t fin, + uint64_t *fout, int flags, int *done) +{ + kobjop_t _m; + int rc; + KOBJOPLOOKUP(((kobj_t)clk)->ops,clknode_set_freq); + rc = ((clknode_set_freq_t *) _m)(clk, fin, fout, flags, done); + return (rc); +} + +/** @brief Unique descriptor for the CLKNODE_SET_GATE() method */ +extern struct kobjop_desc clknode_set_gate_desc; +/** @brief A function implementing the CLKNODE_SET_GATE() method */ +typedef int clknode_set_gate_t(struct clknode *clk, bool enable); + +static __inline int CLKNODE_SET_GATE(struct clknode *clk, bool enable) +{ + kobjop_t _m; + int rc; + KOBJOPLOOKUP(((kobj_t)clk)->ops,clknode_set_gate); + rc = ((clknode_set_gate_t *) _m)(clk, enable); + return (rc); +} + +/** @brief Unique descriptor for the CLKNODE_SET_MUX() method */ +extern struct kobjop_desc clknode_set_mux_desc; +/** @brief A function implementing the CLKNODE_SET_MUX() method */ +typedef int clknode_set_mux_t(struct clknode *clk, int idx); + +static __inline int CLKNODE_SET_MUX(struct clknode *clk, int idx) +{ + kobjop_t _m; + int rc; + KOBJOPLOOKUP(((kobj_t)clk)->ops,clknode_set_mux); + rc = ((clknode_set_mux_t *) _m)(clk, idx); + return (rc); +} + +#endif /* _clknode_if_h_ */ diff --git a/rtemsbsd/include/rtems/bsd/local/hdmi_if.h b/rtemsbsd/include/rtems/bsd/local/hdmi_if.h new file mode 100644 index 00000000..fc23c801 --- /dev/null +++ b/rtemsbsd/include/rtems/bsd/local/hdmi_if.h @@ -0,0 +1,71 @@ +/* + * This file is @generated automatically. + * Do not modify anything in here by hand. + * + * Created from source file + * freebsd-org/sys/dev/hdmi/hdmi_if.m + * with + * makeobjops.awk + * + * See the source file for legal information + */ + + +#ifndef _hdmi_if_h_ +#define _hdmi_if_h_ + + +#include + +typedef void (*hdmi_event_hook)(void *, device_t, int); +EVENTHANDLER_DECLARE(hdmi_event, hdmi_event_hook); + +#define HDMI_EVENT_CONNECTED 0 + +/** @brief Unique descriptor for the HDMI_GET_EDID() method */ +extern struct kobjop_desc hdmi_get_edid_desc; +/** @brief A function implementing the HDMI_GET_EDID() method */ +typedef int hdmi_get_edid_t(device_t dev, uint8_t **edid, + uint32_t *edid_length); + +static __inline int HDMI_GET_EDID(device_t dev, uint8_t **edid, + uint32_t *edid_length) +{ + kobjop_t _m; + int rc; + KOBJOPLOOKUP(((kobj_t)dev)->ops,hdmi_get_edid); + rc = ((hdmi_get_edid_t *) _m)(dev, edid, edid_length); + return (rc); +} + +/** @brief Unique descriptor for the HDMI_SET_VIDEOMODE() method */ +extern struct kobjop_desc hdmi_set_videomode_desc; +/** @brief A function implementing the HDMI_SET_VIDEOMODE() method */ +typedef int hdmi_set_videomode_t(device_t dev, + const struct videomode *videomode); + +static __inline int HDMI_SET_VIDEOMODE(device_t dev, + const struct videomode *videomode) +{ + kobjop_t _m; + int rc; + KOBJOPLOOKUP(((kobj_t)dev)->ops,hdmi_set_videomode); + rc = ((hdmi_set_videomode_t *) _m)(dev, videomode); + return (rc); +} + +/** @brief Unique descriptor for the HDMI_ENABLE() method */ +extern struct kobjop_desc hdmi_enable_desc; +/** @brief A function implementing the HDMI_ENABLE() method */ +typedef int hdmi_enable_t(device_t dev, int onoff); + +static __inline int HDMI_ENABLE(device_t dev, int onoff) +{ + kobjop_t _m; + int rc; + KOBJOPLOOKUP(((kobj_t)dev)->ops,hdmi_enable); + rc = ((hdmi_enable_t *) _m)(dev, onoff); + return (rc); +} + +#endif /* _hdmi_if_h_ */ diff --git a/rtemsbsd/include/rtems/bsd/local/opt_videomode.h b/rtemsbsd/include/rtems/bsd/local/opt_videomode.h new file mode 100644 index 00000000..e69de29b diff --git a/rtemsbsd/local/clknode_if.c b/rtemsbsd/local/clknode_if.c new file mode 100644 index 00000000..6f1c0ba3 --- /dev/null +++ b/rtemsbsd/local/clknode_if.c @@ -0,0 +1,40 @@ +#include + +/* + * This file is @generated automatically. + * Do not modify anything in here by hand. + * + * Created from source file + * freebsd-org/sys/dev/extres/clk/clknode_if.m + * with + * makeobjops.awk + * + * See the source file for legal information + */ + +#include +#include +#include +#include +#include + +struct kobjop_desc clknode_init_desc = { + 0, { &clknode_init_desc, (kobjop_t)kobj_error_method } +}; + +struct kobjop_desc clknode_recalc_freq_desc = { + 0, { &clknode_recalc_freq_desc, (kobjop_t)kobj_error_method } +}; + +struct kobjop_desc clknode_set_freq_desc = { + 0, { &clknode_set_freq_desc, (kobjop_t)kobj_error_method } +}; + +struct kobjop_desc clknode_set_gate_desc = { + 0, { &clknode_set_gate_desc, (kobjop_t)kobj_error_method } +}; + +struct kobjop_desc clknode_set_mux_desc = { + 0, { &clknode_set_mux_desc, (kobjop_t)kobj_error_method } +}; + diff --git a/rtemsbsd/local/hdmi_if.c b/rtemsbsd/local/hdmi_if.c new file mode 100644 index 00000000..847f7d4d --- /dev/null +++ b/rtemsbsd/local/hdmi_if.c @@ -0,0 +1,35 @@ +#include + +/* + * This file is @generated automatically. + * Do not modify anything in here by hand. + * + * Created from source file + * freebsd-org/sys/dev/hdmi/hdmi_if.m + * with + * makeobjops.awk + * + * See the source file for legal information + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct kobjop_desc hdmi_get_edid_desc = { + 0, { &hdmi_get_edid_desc, (kobjop_t)kobj_error_method } +}; + +struct kobjop_desc hdmi_set_videomode_desc = { + 0, { &hdmi_set_videomode_desc, (kobjop_t)kobj_error_method } +}; + +struct kobjop_desc hdmi_enable_desc = { + 0, { &hdmi_enable_desc, (kobjop_t)kobj_error_method } +}; + -- cgit v1.2.3