Please read the technical note Rev.0202 for TQMa6x, which is available on request.
Overview
Version Matrix
BSP revision | 0100 (precompiled binaries) TQMa6x BSP Rev.0100 (source) | 0101 | 0104 | 0105 | 0109 | 0110 | |
---|---|---|---|---|---|---|---|
PTXdist version required by BSP | 2013.03 | 2013.12 | 2013.12 | 2014.11 | 2015.05 | 2016.04 | |
OSELAS Toolchain cf. Building OSELAS.Toolchains() | 2012.12.1 | 2013.12.1 | 2013.12.2 | 2013.12.2 | 2013.12.2 | 2014.12.2 | |
Platform | MBa6x | MBa6x | MBa6x | MBa6x | MBa6x | TQMa6x | TQMa6x-FSL |
U-Boot | 2013.04 | 2013.04 | 2013.04 | 2014.04 | 2015.04 | 2015.04 | NXP rel_imx_4.1.15_2.0.0_ga |
Linux Kernel | 3.10 | 3.13 | 3.16-rc5 | 3.16.7 | 4.1 | 4.1 | NXP rel_imx_4.1.15_2.0.0_ga |
Qt Version | 4.8.4 | 4.8.5 | 4.8.6 | 5.3.2 | 5.3.2 | 5.6.2 | 5.6.2 |
Flat Devicetree
With BSP Revision 0109 the Linux kernel version changed from 3.16.7 to 4.1 The devicetree source & blob files for kernel 3.16.7 are not compatible to kernel 4.1 and vice versa.
Naming convention
Device Tree Blobs
Several device tree blobs (.dtb files) are built by default, the resulting files are named as follows:
imx6<q|dl>-mba6x-<hdmi|lvds|multi|pd>.dtb
When building an sd card image, the HDMI enabled device tree blob is used by default.
Module (CPU) type | |
---|---|
imx6q | TQMa6Q | TQMa6D |
imx6dl | TQMa6DL | TQMa6S |
Module revision | |
mba6x | TQMa6x Rev.02xx Variant B | TQMa6x Rev.01xx |
Display interface | |
hdmi | HDMI only |
lvds | LVDS only |
pd | parallel display only |
multi | HDMI + LVDS + parallel display |
Dependency matrix
File | Module | Starterkit Mainboard | i.MX6Q | i.MX6D | i.MX6DL | i.MX6S | Revision 010x | Revision 020x | Ethernet Patch |
---|---|---|---|---|---|---|---|---|---|
imx6qdl-tqma6x.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
imx6q-tqma6x.dtsi | ✔ | ✔ | ✔ | ✔ | |||||
imx6dl-tqma6x.dtsi | ✔ | ✔ | ✔ | ✔ | |||||
imx6qdl-mba6x.dtsi | included | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
imx6q-mba6x.dts | included | ✔ | ✔ | ✔ | ✔ | ||||
imx6dl-mba6x.dts | included | ✔ | ✔ | ✔ | ✔ |
Dependency graph
<graphviz dot> digraph “FDT_dependencies” {
rankdir=BT node [shape=box style=filled]
{ /* level graph */ node[shape=none, width=0, height=0, label=“” style=invis]; edge[dir=none style=invis]; 1 → 2 → 3 → 4 → 5 → 6; }
subgraph FSL { node [fillcolor="#E66A08" fontcolor="#FFFFFF"] "imx6q.dtsi"; "imx6dl.dtsi"; "imx6qdl.dtsi"; }
subgraph TQM { node [fillcolor="#1D8EC6" fontcolor="#FFFFFF"] "imx6qdl-tqma6x.dtsi"; "imx6q-tqma6q.dtsi"; "imx6dl-tqma6s.dtsi"; }
subgraph MB { node [fillcolor="#8F8F8F" fontcolor="#FFFFFF"] "imx6qdl-mba6x.dtsi"; "imx6q-mba6x.dts" [shape=oval color="#FF0000"]; "imx6dl-mba6x.dts" [shape=oval color="#FF0000"]; }
{rank=same; 6; "imx6q.dtsi"; "imx6dl.dtsi"} {rank=same; 5; "imx6qdl-tqma6x.dtsi"} {rank=same; 4; "imx6q-tqma6q.dtsi"; "imx6dl-tqma6s.dtsi"} {rank=same; 3; "imx6qdl-mba6x.dtsi"} {rank=same; 2; "imx6q-mba6x.dts"; "imx6dl-mba6x.dts"} {rank=same; 1; "imx6q-mba6x-hdmi.dts"; "imx6dl-mba6x-hdmi.dts" } {"imx6q.dtsi" "imx6dl.dtsi"} -> "imx6qdl.dtsi";
"imx6q-tqma6q.dtsi" -> {"imx6qdl-tqma6x.dtsi" "imx6q.dtsi"}; "imx6dl-tqma6s.dtsi" -> {"imx6qdl-tqma6x.dtsi" "imx6dl.dtsi"};
"imx6q-mba6x.dts" -> {"imx6qdl-mba6x.dtsi" "imx6q-tqma6q.dtsi"}; "imx6dl-mba6x.dts" -> {"imx6qdl-mba6x.dtsi" "imx6dl-tqma6s.dtsi"}; "imx6q-mba6x-hdmi.dts" -> "imx6q-mba6x.dts"; "imx6dl-mba6x-hdmi.dts" -> "imx6dl-mba6x.dts";
}
</graphviz> <HTML>
CPU specific files
Module specific files
Baseboard specific files
</HTML>
Naming convention
Device Tree Blobs
Several device tree blobs (.dtb files) are built by default, the resulting files are named as follows:
imx6<q|dl>-mba6<a|b>-<hdmi|lvds|multi|pd>.dtb
When building an sd card image, the HDMI enabled device tree blob is used by default.
Flat Image Tree (FIT)
Additionaly a FIT image (*.itb) is generated, which contains all device trees in a single file.
To select an individual DTB from this FIT you have to set the U-Boot variables fdt_type
and fitfdt_part
accordingly.
Module (CPU) type | |
---|---|
imx6q | TQMa6Q | TQMa6D |
imx6dl | TQMa6DL | TQMa6S |
Module revision & variant | |
mba6a | TQMa6x Rev.02xx Variant A & C |
mba6b | TQMa6x Rev.02xx Variant B | TQMa6x Rev.01xx |
Display interface | |
hdmi | HDMI only |
lvds | LVDS only |
pd | parallel display only |
multi | HDMI + LVDS + parallel display |
Dependency matrix
File | Module | Starterkit Mainboard | i.MX6Q | i.MX6D | i.MX6DL | i.MX6S | Revision 010x | Revision 020x | Ethernet Patch |
---|---|---|---|---|---|---|---|---|---|
imx6qdl-tqma6.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
imx6qdl-tqma6a.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
imx6qdl-tqma6b.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
imx6q-tqma6.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
imx6q-tqma6a.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
imx6q-tqma6b.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
imx6dl-tqma6.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
imx6dl-tqma6a.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
imx6dl-tqma6b.dtsi | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
imx6qdl-mba6.dtsi | included | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
imx6qdl-mba6a.dtsi | included | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
imx6qdl-mba6b.dtsi | included | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |
imx6q-mba6.dtsi | included | ✔ | ✔ | ✔ | ✔ | ✔ | |||
imx6q-mba6a.dts | included | ✔ | ✔ | ✔ | ✔ | ✔ | |||
imx6q-mba6b.dts | included | ✔ | ✔ | ✔ | ✔ | ✔ | |||
imx6dl-mba6.dtsi | included | ✔ | ✔ | ✔ | ✔ | ✔ | |||
imx6dl-mba6a.dts | included | ✔ | ✔ | ✔ | ✔ | ✔ | |||
imx6dl-mba6b.dts | included | ✔ | ✔ | ✔ | ✔ | ✔ |
Dependency graph
<graphviz dot> digraph “FDT_dependencies” {
rankdir=BT node [shape=box style=filled]
{ /* level graph */ node[shape=none, width=0, height=0, label=“” style=invis]; edge[dir=none style=invis]; 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → 9; }
subgraph FSL { node [fillcolor="#E66A08" fontcolor="#FFFFFF"] "imx6q.dtsi"; "imx6dl.dtsi"; "imx6qdl.dtsi"; }
subgraph TQM { node [fillcolor="#1D8EC6" fontcolor="#FFFFFF"] "imx6qdl-tqma6.dtsi"; "imx6q-tqma6<a|b>.dtsi"; "imx6dl-tqma6<a|b>.dtsi"; "imx6qdl-tqma6<a|b>.dtsi"; }
subgraph MB { node [fillcolor="#8F8F8F" fontcolor="#FFFFFF"] ordering=out; "imx6qdl-mba6.dtsi"; subgraph MBq { rankdir=LR; "imx6q-mba6.dtsi"; "imx6q-mba6<a|b>.dts" [shape=oval color="#FF0000"]; } "imx6qdl-mba6<a|b>.dtsi"; subgraph MBdl { "imx6dl-mba6<a|b>.dts" [shape=oval color="#FF0000"]; "imx6dl-mba6.dtsi"; } }
{rank=same; 8; "imx6q.dtsi"; "imx6dl.dtsi"} {rank=same; 7; "imx6qdl-tqma6.dtsi"} {rank=same; 6; "imx6q-tqma6<a|b>.dtsi"; "imx6dl-tqma6<a|b>.dtsi"} {rank=same; 5; "imx6qdl-tqma6<a|b>.dtsi"} {rank=same; 4; "imx6qdl-mba6.dtsi"} {rank=same; 3; "imx6q-mba6.dtsi"; "imx6q-mba6<a|b>.dts"; "imx6dl-mba6<a|b>.dts"; "imx6dl-mba6.dtsi"} {rank=same; 2; "imx6qdl-mba6<a|b>.dtsi" } {"imx6q.dtsi" "imx6dl.dtsi"} -> "imx6qdl.dtsi";
"imx6q-tqma6<a|b>.dtsi" -> {"imx6qdl-tqma6.dtsi" "imx6qdl-tqma6<a|b>.dtsi" "imx6q.dtsi"}; "imx6dl-tqma6<a|b>.dtsi" -> {"imx6qdl-tqma6.dtsi" "imx6qdl-tqma6<a|b>.dtsi" "imx6dl.dtsi"};
"imx6q-mba6<a|b>.dts" -> {"imx6q-tqma6<a|b>.dtsi" "imx6qdl-mba6<a|b>.dtsi" "imx6qdl-mba6.dtsi" "imx6q-mba6.dtsi"}; "imx6dl-mba6<a|b>.dts" -> {"imx6dl-tqma6<a|b>.dtsi" "imx6qdl-mba6<a|b>.dtsi" "imx6qdl-mba6.dtsi" "imx6dl-mba6.dtsi"};
}
</graphviz>
<HTML>
CPU specific files
Module specific files
Baseboard specific files
</HTML>
Bootloader
Supported features
Feature | BSP Revision | Remarks | |||||
---|---|---|---|---|---|---|---|
TQ Product | Chip | Interface | Function | 0105 | 0109 | 0110 | |
TQMa6x | i.MX6 | Ethernet | RGMII (10/100/1000 Mbit/s) | ✔ | ✔ | ✔ | |
TQMa6x | i.MX6 | uSDHC | eMMC / SD-Card | ✔ | ✔ | ✔ | SD card / eMMC |
TQMa6x | i.MX6 | UART2 | RS232 | ✔ | ✔ | ✔ | default console |
TQMa6x | i.MX6 | I²C | EEPROM, Temperature Sensors | ✔ | ✔ | ✔ | |
TQMa6x | i.MX6 | GPIO | custom config on request | ||||
TQMa6x | i.MX6 | SPI | SPI NOR Flash | ✔ | ✔ | ✔ | |
TQMa6x | i.MX6 | IIM / Fuse | on request | ||||
TQMa6x | i.MX6 | Devicetree FIT image | ✔ | see How To |
Supported boot devices
Boot device | supported |
---|---|
eMMC / SD boot | ✔ |
TFTP boot | ✔ |
SPI NOR boot | ✔ |
Operating System
Supported Features
Feature | BSP Revision | Remarks | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
TQ Product | Chip | Interface | Function | Pre-Release | 0100 | 0101 | 0104 | 0105 | 0109 | 0110 | |
TQMa6x | i.MX6 | AUD3 | TLV320AIC3204 | ✔ | ✔ | ✔ | ✔ | ✔ | AudioCodec | ||
i.MX6 | EIM | Bus access | ✔ | ✔ | ✔ | driver support / no device on MBa6x | |||||
i.MX6 | ENET | RGMII (10/100/1000 Mbit/s) | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | MBa6x Rev. ≥ 0102 required | ||
i.MX6 | FLEXCAN1 | CAN 2.0B | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | BSP Rev. ≤ 0100: bitrate is not set as correctly |
||
i.MX6 | FLEXCAN2 | CAN 2.0B | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
i.MX6 | GPIO | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | BSP Rev. ≥ 0104: available via sysfs default pin-multiplexing covers all GPIO pins available on X30 |
||
i.MX6 | GPIO1_IO21 | Buzzer | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | BSP Rev. ≤ 0101 supported via sysfs gpio BSP Rev. ≥ 0104 supported via beep command |
||
i.MX6 | GPU2D | Hardware Acceleration | ○ | ✔ | ✔ | ✔ | BSP Rev. ≥ 0105 or kernel 3.10.17-fsl ◊ ptxdist platformconfig → extra kernel ◊ rootfs from Freescale reference BSP required tested resolution 1366×768 For using GPU see How To |
||||
i.MX6 | GPU3D | Hardware Acceleration | ○ | ✔ | ✔ | ✔ | BSP Rev. ≥ 0105 or kernel 3.10.17-fsl ◊ ptxdist platformconfig → extra kernel ◊ rootfs from Freescale reference BSP required tested resolution 1366×768 For using GPU see How To |
||||
i.MX6 | HDMI | HDMI | ✔ | ✔ | ✔ | ✔ | ✔ | known limitations ◊ requires monitor with correct HPD signal For Freescale kernel see How To |
|||
i.MX6 | I2C1 | I2C devices | ✔ | ✔ | ✔ | ✔ | ✔ | see supported onboard I2C devices | |||
i.MX6 | I2C3 | I2C devices | ✔ | ✔ | ✔ | ✔ | ✔ | see supported onboard I2C devices | |||
i.MX6 | IPU1 | Parallel LCD | ✔ | ✔ | ✔ | ✔ | displays supported BSP Rev. ≥ 0104: EDT ET(M)0700G0DH6 (7“ WVGA) supported by imx6[q|dl]-mba6x-pd.dtb |
||||
i.MX6 | JTAG | ||||||||||
i.MX6 | LDB | LVDS | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | displays supported BSP Rev. ≥ 0104: ChiMei G104X (10.4” XGA) supported by imx6[q|dl]-mba6x-lvds.dtb |
|
i.MX6 | PCIe | Device Discovery | ✔ | ✔ | ✔ | ✔ | BSP Rev. 0104 TQMa6D/Q support | ||||
i.MX6 | PWM1 | Backlight Dimming | ✔ | ✔ | ✔ | ✔ | MBa6x Rev. ≥ 0200 required | ||||
i.MX6 | SATA | Serial ATA 3.0 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | TQMa6Q and TQMa6D only | ||
i.MX6 | SPDIF | Digtal Audio | ✔ | ✔ | ✔ | availabe at X30.10/12 on MBa6x | |||||
i.MX6 | SPI1 | Bus access | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | BSP Rev. ≥ 0104: SS2 configured for spidev, SS3 prepared for usage (pin-multiplexing) |
||
i.MX6 | SPI1 | NOR flash | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | /dev/mtd0 | ||
i.MX6 | SPI5 | Bus access | ✔ | ✔ | ✔ | ✔ | TQMa6Q only BSP Rev. ≥ 0104: SS1 configured for spidev |
||||
i.MX6 | TEMPMON | ✔ | ✔ | ✔ | ✔ | ✔ | |||||
i.MX6 | UART1 | not available on MBa6x | |||||||||
i.MX6 | UART2 | RS232 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | default console | |
i.MX6 | UART3 | TTL | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
i.MX6 | UART4 | RS485 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
i.MX6 | UART5 | TTL | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
i.MX6 | USB_OTG | Host | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
i.MX6 | USB_OTG | OTG | ✔ | ✔ | ✔ | ✔ | ✔ | ||||
i.MX6 | USB_UH1 | USB2517 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ||
i.MX6 | USB_UH2 | not available on MBa6x | |||||||||
i.MX6 | USB_UH3 | not available on MBa6x | |||||||||
i.MX6 | uSDHC | SD(HC)-Card sd2 SD card sd3 eMMC | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | see issues for known limitations | |
i.MX6 | VPU | Hardware Acceleration | ✔ | ✔ | For using VPU see How To | ||||||
MBa6x | TLV320AIC3204 | Audio Codec | Headphone Out / Line Out | ✔ | ✔ | ✔ | ✔ | ✔ | selectable using solder straps on MBa6x | ||
Line In | ✔ | ✔ | ✔ | ✔ | ✔ | ||||||
Microphone In | |||||||||||
LAN9500 | ENET | 10/100 Mbit/s | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | BSP Rev. ≤ 0101 MAC needs to be configured via U-Boot variable usbethaddr BSP Rev. ≥ 0104 automatic MAC configuration with MBa6x Rev. ≥ 0200 |
|
GPIO | GPIO Key | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | configured as input device | |||
LED | LED | LED | ✔ | ✔ | ✔ | ✔ | MBa6x Rev. ≥ 0200 required | ||||
USB2517 | USB1 | LAN9500 | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | MBa6x Rev. ≥ 0102 required | |
USB2517 | USB2 | Host | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
USB2517 | USB3 | Host | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
USB2517 | USB4 on pinheader X27 | Host | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
USB2517 | USB5 on Mini-PCIe connector X23 | Host | |||||||||
USB2517 | USB6 | Host | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ | |||
USB2517 | USB7 on LVDS connector X19 | not tested |
Onboard I2C devices
TQMa6x Rev.01xx / TQMa6x Rev.02xx Variant B
I2C bus | TQMa6x | MBa6x | ||||
---|---|---|---|---|---|---|
I2C1 | 0x18 Audiocodec |
|||||
I2C3 | 0x08 PMIC | 0x48 LM75 | 0x50 EEPROM | 0x49 LM75 | 0x57 EEPROM | 0x68 RTC |
TQMa6x Rev.02xx Variant A & C
I2C bus | TQMa6x | MBa6x | |||||
---|---|---|---|---|---|---|---|
I2C1 | 0x08 PMIC | 0x48 LM75 | 0x50 EEPROM | 0x18 Audiocodec | 0x49 LM75 | 0x57 EEPROM | 0x68 RTC |
I2C3 | not available due to ethernet patch |
i.MX6 | AUD3 | I2S | t.b.d | |||
i.MX6 | I2S | AudioCodec | t.b.d |
Changelog
U-Boot 2015.04 Mainline
- add support for module revision 04xx except TQMa6DP and TQMa6QP
- eMMC 5.1 support
- changed eMMC / SD boot command for firmware partition
- mmc commands for mlc to pseudo slc conversion
- mmc command dsr value
- spi nor 4k sector support disabled
- automatic device tree selection if device tree is not configured in U-Boot environment
- eMMC boot partition support
U-Boot-FSL 2016.03 (rel_imx_4.1.15_2.0.0_ga)
- add support for module revision 04xx including TQMa6DP and TQMa6QP
- eMMC 5.1 support
- changed eMMC / SD boot command for firmware partition
- mmc command dsr value
- mmc commands for mlc to pseudo slc conversion
- eMMC boot partition support
- spi nor 4k sector support disabled
- automatic device tree selection if device tree is not configured in U-Boot environment
Linux 3.16
- add support for module revision 04xx except TQMa6DP and TQMa6QP
- updated SDMA firmware for audio
- SDMA driver update
- backport bugfixes
- optimized kernelconfig
Linux 4.1 Mainline
- Support for module revision 04xx except TQMa6DP und TQMa6QP
- Patches für sdma (devicetree for ssififo has to be selected in PTXdist platformconfig)
- Backport bugfixes
- Update Vivante GPU treiber to 5.0.11.p7 + patches
- Optimized kernelconfig
Linux rel_imx_4.1.15_2.0.0_ga
- 4.1.15 Module support 04xx including TQMa6xDP and TQMa6xQP
Userland
- systemd 230
- kmsfb for compatibility of the Vivante GPU Treiber with linux mainline kernel
- Qt 5.6.2
Userland FSL
- gstreamer-imx plugins
- gstreamer imx 0.12.3
Build tools
- Changed: PTXdist 2015.05
Userland
- Fixed: Buildrules für Qt5
- Added: gstreamer 1.6
U-Boot
- Changed: U-Boot 2015.04
- Added: Support for TQMa6x Rev. 020x and Rev.10x
- Added: Support for on-die temperature sensor
- Added: Support for Devicetree in FIT-Image
Linux kernel
- Changed: Default kernel 4.1.6 (longterm)
- Added: Extra kernel 4.1.5 w/ RT-Patches
- Changed: Kernel 3.16.7 support for TQMa6x Rev.02xx
- Added: VPU Support
- Added: Support for IPU Scaler
- Added: PowerOff driver
Buildenvironment
- ptxdist-2014.11
- OSELAS.Toolchain-2013.12.2
U-Boot 2014.04
- TQMa6L support
- SPI CS used for Touch IRQ line in case of parallel display will not be configured as GPIO out
- Name of legacy fbdev configurable via env so support older kernels
Linux 3.16.7
- Port to 3.16.7
- Support for TQMa6L
- Port GPU support from Freescale 3.10.17
- PCIe Support for TQMa6S/L
- Add Devicetree for dual LVDS with AUO panels
RootFS
- Qt4.8 → Qt5.3.2
- GPU binaries from Freescale
- Updates for packages (ptxdist update)
- GPU SDK and examples (usable for NFS root)
- Qt5 examples (usable for NFS root)