sculpt: add basic support for i.MX8 Quad EVK

* Introduce CPU quota for driver subsytem (needed by sd_card_drv)
* Introduce CPU quota for runtime subsytem and nic_drv (needed by fec_nic_drv)
* Increase CAP quota for inspect terminal slightly
* Add sculpt packages for imx8q_evk

Fix #3958
This commit is contained in:
Stefan Kalkowski 2020-11-24 16:00:47 +01:00 committed by Christian Helmuth
parent 22852f2e50
commit b907629341
17 changed files with 465 additions and 4 deletions

View File

@ -0,0 +1,4 @@
Device-driver subsystem that starts drivers for
framebuffer, input, and block devices on demand

View File

@ -0,0 +1,11 @@
_/src/platform_drv
_/src/usb_host_drv
_/src/usb_hid_drv
_/src/usb_block_drv
_/src/imx8q_evk_drivers
_/src/imx8_fb_drv
_/src/report_rom
_/src/event_filter
_/src/rom_filter
_/src/rom_reporter
_/raw/drivers_managed-imx8q_evk

View File

@ -0,0 +1 @@
2020-11-24-l a809c41bb15c0dff6f0e803cd55e54d3f730d398

View File

@ -0,0 +1 @@
The i.MX8 Quad EVK specific parts needed to run sculpt.

View File

@ -0,0 +1,4 @@
_/pkg/drivers_managed-imx8q_evk
_/pkg/sculpt
_/src/fec_nic_drv

View File

@ -0,0 +1 @@
2020-11-24-n 69dc099d76ea5571e12ea9a46b5cc9ed75999c7a

View File

@ -0,0 +1,3 @@
<block_devices default="sdcard">
<device label="sdcard" model="Unknown"/>
</block_devices>

View File

@ -0,0 +1,11 @@
content: drivers.config fb_drv.config event_filter.config en_us.chargen \
special.chargen numlock_remap.config block_devices.report
drivers.config numlock_remap.config event_filter.config block_devices.report:
cp $(REP_DIR)/recipes/raw/drivers_managed-imx8q_evk/$@ $@
fb_drv.config:
cp $(GENODE_DIR)/repos/dde_linux/recipes/raw/drivers_interactive-imx8q_evk/$@ $@
en_us.chargen special.chargen:
cp $(GENODE_DIR)/repos/os/src/server/event_filter/$@ $@

View File

@ -0,0 +1,355 @@
<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>
<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">
<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="compatible" value="snps,dwc3"/>
<property name="dr_mode" value="host"/>
</device>
<device name="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="compatible" value="nxp,imx8mq-dcss"/>
<property name="disp-dev" value="hdmi_disp"/>
</device>
<!-- CAUTION: System reset controller access is currently required by
mipi_dsi -->
<device name="src">
<io_mem address="0x30390000" size="0x10000"/>
</device>
<device name="mipi_dsi">
<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"/>
<property name="compatible" value="fsl,imx8mq-mipi-dsi_drm"/>
</device>
<device name="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"/>
<property name="compatible" value="fsl,imx8mq-hdmi"/>
</device>
<device name="sdhc2">
<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"/>
<property name="compatible" value="fsl,imx8mq-usdhc"/>
</device>
<device name="fec">
<io_mem address="0x30be0000" size="0x4000"/>
<irq number="152"/>
<irq number="151"/>
<irq number="150"/>
<property name="compatible" value="fsl,imx6sx-fec"/>
<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>
</config>

View File

@ -0,0 +1,34 @@
<config>
<output>
<chargen>
<remap>
<!-- <key name="KEY_CAPSLOCK" to="KEY_ESC"/> -->
<key name="KEY_F11" to="KEY_RESTART"/>
<key name="KEY_F12" to="KEY_DASHBOARD"/>
<key name="KEY_LEFTMETA" to="KEY_SCREEN"/>
<include rom="numlock.remap"/>
<merge>
<input name="touch"/>
<input name="usb"/>
</merge>
</remap>
<mod1>
<key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/>
</mod1>
<mod2>
<key name="KEY_LEFTCTRL"/> <key name="KEY_RIGHTCTRL"/>
</mod2>
<mod3>
<key name="KEY_RIGHTALT"/> <!-- AltGr -->
</mod3>
<mod4>
<rom name="capslock"/>
</mod4>
<repeat delay_ms="230" rate_ms="40"/>
<include rom="en_us.chargen"/>
<include rom="special.chargen"/>
</chargen>
</output>
<policy label="touch" input="touch"/>
<policy label="usb" input="usb"/>
</config>

View File

@ -0,0 +1 @@
2020-11-24-j 663fa6b28df78dfdc69d62dfdff8ec636ba43dac

View File

@ -0,0 +1,25 @@
<config>
<input name="numlock_enabled" rom="numlock" node="numlock">
<attribute name="enabled" /> </input>
<output node="remap">
<if>
<has_value input="numlock_enabled" value="no"/>
<then>
<inline>
<key name="KEY_KP0" to="KEY_INSERT"/>
<key name="KEY_KP1" to="KEY_END"/>
<key name="KEY_KP2" to="KEY_DOWN"/>
<key name="KEY_KP3" to="KEY_PAGEDOWN"/>
<key name="KEY_KP4" to="KEY_LEFT"/>
<key name="KEY_KP5" to="KEY_RESERVED"/>
<key name="KEY_KP6" to="KEY_RIGHT"/>
<key name="KEY_KP7" to="KEY_HOME"/>
<key name="KEY_KP8" to="KEY_UP"/>
<key name="KEY_KP9" to="KEY_PAGEUP"/>
<key name="KEY_KPDOT" to="KEY_DELETE"/>
</inline>
</then>
</if>
</output>
</config>

View File

@ -1,4 +1,4 @@
if {![have_spec pc]} {
if {![have_spec pc] && ![have_spec imx8q_evk]} {
puts "Platform is unsupported.";
exit 0;
}
@ -18,7 +18,8 @@ proc config_system_content {} { return {\
<system state=""/>} }
proc nic_drv {} {
if {[have_spec pc]} { return ipxe_nic_drv }
if {[have_spec pc]} { return ipxe_nic_drv }
if {[have_spec imx8q_evk]} { return fec_nic_drv }
puts "\n Run script is not supported on this platform. \n";
exit 0;
}
@ -50,6 +51,7 @@ install_config {
<start name="timer">
<resource name="RAM" quantum="1M"/>
<resource name="CPU" quantum="10"/>
<provides><service name="Timer"/></provides>
</start>
@ -238,6 +240,7 @@ install_config {
<start name="drivers" caps="3150" priority="-1" managing_system="yes">
<resource name="RAM" quantum="128M"/>
<resource name="CPU" quantum="40"/>
<binary name="init"/>
<route>
<service name="LOG"> <child name="log"/> </service>
@ -438,6 +441,7 @@ install_config {
<start name="runtime" caps="50000" priority="-3">
<binary name="init"/>
<resource name="RAM" quantum="32G"/>
<resource name="CPU" quantum="40"/>
<route>
<service name="ROM" label="config">
<child name="config_fs_rom" label="managed/runtime"/> </service>

View File

@ -50,7 +50,7 @@ static void gen_gui_fb_start(Xml_generator &xml)
static void gen_terminal_start(Xml_generator &xml)
{
gen_common_start_content(xml, "terminal", Cap_quota{100}, Ram_quota{4*1024*1024});
gen_common_start_content(xml, "terminal", Cap_quota{110}, Ram_quota{4*1024*1024});
gen_provides<Terminal::Session>(xml);

View File

@ -16,6 +16,7 @@
void Sculpt::gen_nic_drv_start_content(Xml_generator &xml)
{
gen_common_start_content(xml, "nic_drv", Cap_quota{300}, Ram_quota{16*1024*1024});
gen_named_node(xml, "resource", "CPU", [&] () { xml.attribute("quantum", "50"); });
gen_provides<Nic::Session>(xml);

View File

@ -7,6 +7,10 @@ include/gpio:
cp -r $(REP_DIR)/include/gpio $@
src/drivers:
mkdir -p $@/gpio/ $@/touch/
mkdir -p $@/gpio/ $@/touch/ $@/sd_card
cp -r $(REP_DIR)/src/drivers/gpio/imx/ $@/gpio
cp -r $(REP_DIR)/src/drivers/touch/synaptics_dsx/ $@/touch
cp -r $(REP_DIR)/src/drivers/sd_card/imx/ $@/sd_card/
cp -r $(REP_DIR)/src/drivers/sd_card/imx6/ $@/sd_card/
cp -r $(REP_DIR)/src/drivers/sd_card/imx8/ $@/sd_card/
cp $(REP_DIR)/src/drivers/sd_card/*.* $@/sd_card/

View File

@ -3,4 +3,5 @@ os
event_session
platform_session
gpio_session
block_session