genode/repos/gems/recipes/raw/drivers_managed-imx8q_evk/drivers.config
Norman Feske dc8c899c1d Streamline platform-device API on ARM
This API rework eases the access to memory-mapped I/O registers and
interrupts when using the platform driver. It introduces the notions of

- Platform::Device       - one device obtained from a platform session
- Platform::Device::Mmio - locally-mapped MMIO registers of a device
- Platform::Device::Irq  - interface for receiving device interrupts

The patch touches several drivers. Some drivers would require a
significant structural change to adopt the new API (e.g., net/virtio,
dde_linux drivers, imx gpio). In these cases, the patch adds
compatibility shims meant to be temporary. In other cases (e.g., imx
i2c), the adaptation was simple enough to carry through.

Fixes #4075
2021-04-20 12:10:58 +02:00

364 lines
12 KiB
Plaintext

<config>
<parent-provides>
<service name="ROM"/>
<service name="IRQ"/>
<service name="IO_MEM"/>
<service name="PD"/>
<service name="RM"/>
<service name="CPU"/>
<service name="LOG"/>
<service name="Timer"/>
<service name="Report"/>
<service name="Capture"/>
<service name="Event"/>
</parent-provides>
<report child_caps="true" child_ram="true" init_caps="true" init_ram="true" delay_ms="5000"/>
<default-route>
<any-service> <parent/> <any-child/> </any-service>
</default-route>
<default caps="100"/>
<service name="Block">
<default-policy> <child name="sd_card_drv"/> </default-policy> </service>
<service name="Usb">
<default-policy> <child name="usb_drv"/> </default-policy> </service>
<service name="Platform">
<default-policy> <child name="platform_drv"/> </default-policy> </service>
<service name="Rtc">
<default-policy> <child name="rtc_drv"/> </default-policy> </service>
<start name="report_rom">
<resource name="RAM" quantum="2M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config verbose="no">
<policy label="rom_reporter -> usb_devices" report="usb_drv -> devices"/>
<policy label="usb_hid_drv -> report" report="usb_drv -> devices"/>
</config>
</start>
<start name="rom_reporter">
<resource name="RAM" quantum="1M"/>
<config>
<rom label="usb_devices"/>
<rom label="block_devices"/>
</config>
<route>
<service name="ROM" label="block_devices"><parent label="block_devices.report"/> </service>
<service name="ROM" label="usb_devices"> <child name="report_rom"/> </service>
<service name="Report" label="usb_devices"> <parent label="usb_devices"/> </service>
<service name="Report" label="block_devices"><parent label="block_devices"/> </service>
<service name="LOG"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="ROM"> <parent/> </service>
</route>
</start>
<start name="platform_drv" caps="150">
<binary name="imx8mq_platform_drv"/>
<resource name="RAM" quantum="1M"/>
<provides> <service name="Platform"/> </provides>
<config>
<!-- GPIO banks -->
<device name="gpio1">
<io_mem address="0x30200000" size="0x10000"/>
<irq number="96"/>
<irq number="97"/>
</device>
<device name="gpio2">
<io_mem address="0x30210000" size="0x10000"/>
<irq number="98"/>
<irq number="99"/>
</device>
<device name="gpio3">
<io_mem address="0x30220000" size="0x10000"/>
<irq number="100"/>
<irq number="101"/>
</device>
<device name="gpio4">
<io_mem address="0x30230000" size="0x10000"/>
<irq number="102"/>
<irq number="103"/>
</device>
<device name="gpio5">
<io_mem address="0x30240000" size="0x10000"/>
<irq number="104"/>
<irq number="105"/>
</device>
<device name="synaptics_dsx">
<io_mem address="0x30a20000" size="0x10000"/>
<irq number="67"/>
</device>
<device name="usb_host_2" type="snps,dwc3">
<io_mem address="0x38200000" size="0x10000"/>
<irq number="73"/>
<power-domain name="usb_otg_2"/>
<clock name="usb_phy_ref_clk_root"
driver_name="usb_phy_root_clk"
parent="system_pll1_div8"
rate="100000000"/>
<clock name="usb_core_ref_clk_root"
parent="system_pll1_div8"
rate="100000000"/>
<clock name="usb_bus_clk_root"
parent="system_pll2_div2"
rate="500000000"/>
<clock name="usb_ctrl2_gate"/>
<clock name="usb_phy2_gate"/>
<property name="dr_mode" value="host"/>
<property name="snps,dis_u2_susphy_quirk"/>
</device>
<device name="dcss" type="nxp,imx8mq-dcss">
<io_mem address="0x32e00000" size="0x30000"/>
<irq number="50"/>
<clock name="display_apb_clk_root"
driver_name="apb"/>
<clock name="display_axi_clk_root"
parent="system_pll1_clk"
rate="800000000"
driver_name="axi"/>
<clock name="display_rtrm_clk_root"
parent="system_pll1_clk"
rate="400000000"
driver_name="rtrm"/>
<clock name="video_pll1_clk"
parent="25m_ref_clk"
rate="1200000000" />
<clock name="display_dtrc_clk_root"
driver_name="dtrc"/>
<clock name="dc_pixel_clk_root"
parent="video_pll1_clk"
rate="120000000"
driver_name="pix"/>
<property name="disp-dev" value="hdmi_disp"/>
</device>
<!-- CAUTION: System reset controller access is currently required by
mipi_dsi -->
<device name="src" type="fsl,imx8mq-src">
<io_mem address="0x30390000" size="0x10000"/>
</device>
<device name="mipi_dsi" type="fsl,imx8mq-mipi-dsi_drm">
<io_mem address="0x30a00000" size="0x1000"/>
<irq number="66"/>
<power-domain name="mipi"/>
<clock name="mipi_dsi_phy_ref_clk_root"
parent="video_pll1_clk"
rate="24000000"
driver_name="phy_ref"/>
<clock name="mipi_dsi_esc_rx_clk_root"
parent="system_pll1_div10"
rate="80000000"
driver_name="rx_esc"/>
<clock name="mipi_dsi_core_clk_root"
parent="system_pll1_div3"
rate="266000000"
driver_name="core"/>
</device>
<device name="hdmi" value="fsl,imx8mq-hdmi">
<io_mem address="0x32c00000" size="0x100000"/>
<io_mem address="0x32e40000" size="0x40000"/>
<io_mem address="0x32e2f000" size="0x10"/>
<irq number="48"/>
<irq number="57"/>
</device>
<device name="sdhc2" type="fsl,imx8mq-usdhc">
<io_mem address="0x30b50000" size="0x10000"/>
<irq number="55"/>
<clock name="nand_usdhc_bus_clk_root"/>
<clock name="usdhc2_clk_root"/>
<clock name="usdhc2_gate"/>
</device>
<device name="fec" type="fsl,imx6sx-fec">
<io_mem address="0x30be0000" size="0x4000"/>
<irq number="152"/>
<irq number="151"/>
<irq number="150"/>
<property name="mii" value="rgmii-id"/>
</device>
<policy label="usb_drv -> "> <device name="usb_host_2"/> </policy>
<policy label="fb_drv -> ">
<device name="dcss"/>
<device name="hdmi"/>
<device name="mipi_dsi"/>
<device name="src"/>
</policy>
<policy label="gpio_drv -> ">
<device name="gpio1"/>
<device name="gpio2"/>
<device name="gpio3"/>
<device name="gpio4"/>
<device name="gpio5"/>
</policy>
<policy label="touch_drv -> "> <device name="synaptics_dsx"/> </policy>
<policy label="sd_card_drv -> "> <device name="sdhc2"/> </policy>
<policy label="runtime -> nic"> <device name="fec"/> </policy>
</config>
<route> <any-service> <parent/> </any-service> </route>
</start>
<start name="usb_drv" caps="200">
<binary name="imx8q_evk_usb_host_drv"/>
<resource name="RAM" quantum="16M"/>
<provides> <service name="Usb"/> </provides>
<config>
<report devices="yes"/>
<policy label_prefix="usb_hid_drv" class="0x3"/>
</config>
<route>
<service name="Platform"> <child name="platform_drv"/> </service>
<service name="Report" label="devices"> <child name="report_rom"/> </service>
<service name="Report" label="config"> <parent label="usb_active_config"/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="RM"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
</route>
</start>
<start name="usb_hid_drv" caps="140">
<resource name="RAM" quantum="11M"/>
<config use_report="yes" capslock_led="rom" numlock_led="rom"/>
<route>
<service name="ROM" label="report"> <child name="report_rom"/> </service>
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
<service name="ROM" label="numlock"> <parent label="numlock"/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="RM"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="Event"> <child name="event_filter" label="usb"/> </service>
<service name="Usb"> <child name="usb_drv"/> </service>
</route>
</start>
<start name="gpio_drv" caps="150">
<binary name="imx_gpio_drv"/>
<resource name="RAM" quantum="2M"/>
<provides><service name="Gpio"/></provides>
<config/>
<route>
<service name="RM"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Platform"> <child name="platform_drv"/> </service>
</route>
</start>
<start name="touch_drv" caps="150">
<binary name="imx8_synaptics_touch_drv"/>
<resource name="RAM" quantum="5M"/>
<provides><service name="Input"/></provides>
<route>
<service name="RM"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="Event"> <child name="event_filter" label="touch"/> </service>
<service name="Platform"> <child name="platform_drv"/> </service>
<service name="Gpio"> <child name="gpio_drv"/> </service>
</route>
</start>
<start name="fb_drv" caps="250">
<binary name="imx8_fb_drv"/>
<resource name="RAM" quantum="40M"/>
<route>
<service name="ROM" label="config"> <parent label="fb_drv.config"/> </service>
<service name="RM"> <parent/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="Capture"> <parent/> </service>
<service name="Report"> <parent/> </service>
<service name="Platform"> <child name="platform_drv"/> </service>
</route>
</start>
<start name="sd_card_drv">
<binary name="imx8_sd_card_drv"/>
<resource name="RAM" quantum="16M"/>
<resource name="CPU" quantum="80"/>
<provides><service name="Block"/></provides>
<route>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="RM"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="Platform"> <child name="platform_drv"/> </service>
</route>
</start>
<!-- toggle key mappings depending on the numlock state -->
<start name="numlock_remap_rom">
<binary name="rom_filter"/>
<resource name="RAM" quantum="1M"/>
<provides> <service name="ROM"/> </provides>
<route>
<service name="ROM" label="config"> <parent label="numlock_remap.config"/> </service>
<service name="ROM" label="numlock"> <parent label="numlock"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="event_filter" caps="90">
<resource name="RAM" quantum="2M"/>
<provides> <service name="Event"/> </provides>
<route>
<service name="ROM" label="config"> <parent label="event_filter.config"/> </service>
<service name="ROM" label="numlock.remap"> <child name="numlock_remap_rom"/> </service>
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="Timer"> <parent/> </service>
<service name="Event"> <parent/> </service>
</route>
</start>
<start name="rtc_drv">
<binary name="dummy_rtc_drv"/>
<resource name="RAM" quantum="1M"/>
<provides> <service name="Rtc"/> </provides>
<config allow_setting_rtc="true" year="2021" month="02" day="24"
hour="0" minute="0" second="0"/>
<route>
<any-service> <parent/> </any-service>
</route>
</start>
</config>