<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" type="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 -> " info="yes"> <device name="usb_host_2"/> </policy>
			<policy label="fb_drv -> "  info="yes">
				<device name="dcss"/>
				<device name="hdmi"/>
				<device name="mipi_dsi"/>
				<device name="src"/>
			</policy>
			<policy label="gpio_drv -> " info="yes">
				<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" info="yes">  <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>
