Re: [PATCH 1/3] arm64: dts: S32G3: Introduce device tree for S32G-VNP-RDB3
From: Ghennadi Procopciuc
Date: Mon Mar 18 2024 - 06:26:29 EST
On 3/18/24 11:34, Wadim Mueller wrote:
> On Mon, Mar 18, 2024 at 09:32:24AM +0200, Ghennadi Procopciuc wrote:
>> On 3/16/24 00:27, Wadim Mueller wrote:
>>> This commit adds device tree support for the NXP S32G3-based
>>> S32G-VNP-RDB3 Board (Vehicle Networking Platform - Reference Design Board) [1].
>>>
>>> The S32G3 features an 8-core ARM Cortex-A53 based SoC developed by NXP.
>>>
>>> The device tree files are derived from the official NXP downstream Linux tree [2].
>>>
>>> This addition encompasses a limited selection of peripherals that are upstream-supported. Apart from the ARM System Modules (GIC, Generic Timer, etc.), the following IPs have been validated:
>>>
>>> UART: fsl-linflexuart
>>> SDHC: fsl-imx-esdhc
>>> Ethernet: synopsys gmac/stmac
>>>
>>> Clock settings for the chip rely on ATF Firmware [3]. Pin control integration into the device tree is pending and currently relies on Firmware/U-Boot settings [4].
>>>
>>> These changes were validated using the latest BSP39 Firmware/U-Boot from NXP [5].
>>>
>>> The modifications enable booting the official Ubuntu 22.04 from NXP on
>>> the RDB3 with default settings from the SD card and eMMC.
>>>
>>> [1] https://www.nxp.com/design/design-center/designs/s32g3-vehicle-networking-reference-design:S32G-VNP-RDB3
>>> [2] https://github.com/nxp-auto-linux/linux
>>> [3] https://github.com/nxp-auto-linux/arm-trusted-firmware
>>> [4] https://github.com/nxp-auto-linux/u-boot
>>> [5] https://github.com/nxp-auto-linux/auto_yocto_bsp
>>>
>>> Signed-off-by: Wadim Mueller <wafgo01@xxxxxxxxx>
>>
>> This patch seems to be heavily based on the downstream version of the
>> kernel. Many of the changes originate from NXP. Therefore, shouldn't the
>> authors also be mentioned here?
>>
>
> Yes, it definitely is, I also mentionaed it in the commit message. As
> Krzyszof mentioned, would you expect me to "git blame" the file and put
> all contributors into the commment part? Or would it be enough to put a
> Copyright of NXP as here [1]?
>
>
> [1] https://github.com/nxp-auto-linux/linux/blob/cdac0506874b7e6a277f12e72e3900d2a410d909/arch/arm64/boot/dts/freescale/s32g3.dtsi#L3
IMHO, the copyright must be kept and up to three contributors to the
original content should be mentioned.
>>> ---
>>> arch/arm64/boot/dts/freescale/Makefile | 1 +
>>> arch/arm64/boot/dts/freescale/s32g3.dtsi | 352 ++++++++++++++++++
>>> .../boot/dts/freescale/s32g399a-rdb3.dts | 57 +++
>>> .../dt-bindings/clock/nxp,s32-scmi-clock.h | 158 ++++++++
>>> 4 files changed, 568 insertions(+)
>>> create mode 100644 arch/arm64/boot/dts/freescale/s32g3.dtsi
>>> create mode 100644 arch/arm64/boot/dts/freescale/s32g399a-rdb3.dts
>>> create mode 100644 include/dt-bindings/clock/nxp,s32-scmi-clock.h
>>>
>>> diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile
>>> index 2cb0212b63c6..e701008dbc7b 100644
>>> --- a/arch/arm64/boot/dts/freescale/Makefile
>>> +++ b/arch/arm64/boot/dts/freescale/Makefile
>>> @@ -252,3 +252,4 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-venice-gw74xx-rpidsi.dtb
>>> dtb-$(CONFIG_ARCH_S32) += s32g274a-evb.dtb
>>> dtb-$(CONFIG_ARCH_S32) += s32g274a-rdb2.dtb
>>> dtb-$(CONFIG_ARCH_S32) += s32v234-evb.dtb
>>> +dtb-$(CONFIG_ARCH_S32) += s32g399a-rdb3.dtb
>>> diff --git a/arch/arm64/boot/dts/freescale/s32g3.dtsi b/arch/arm64/boot/dts/freescale/s32g3.dtsi
>>> new file mode 100644
>>> index 000000000000..481ddcfd3a6d
>>> --- /dev/null
>>> +++ b/arch/arm64/boot/dts/freescale/s32g3.dtsi
>>> @@ -0,0 +1,352 @@
>>> +// SPDX-License-Identifier: GPL-2.0-or-later
>>> +
>>> +#include <dt-bindings/interrupt-controller/arm-gic.h>
>>> +#include <dt-bindings/clock/nxp,s32-scmi-clock.h>
>>> +/ {
>>> + compatible = "nxp,s32g3";
>>> + interrupt-parent = <&gic>;
>>> + #address-cells = <0x02>;
>>> + #size-cells = <0x02>;
>>> +
>>> + cpus {
>>> + #address-cells = <1>;
>>> + #size-cells = <0>;
>>> +
>>> + cpu-map {
>>> + cluster0 {
>>> + core0 {
>>> + cpu = <&cpu0>;
>>> + };
>>> +
>>> + core1 {
>>> + cpu = <&cpu1>;
>>> + };
>>> +
>>> + core2 {
>>> + cpu = <&cpu2>;
>>> + };
>>> +
>>> + core3 {
>>> + cpu = <&cpu3>;
>>> + };
>>> + };
>>> +
>>> + cluster1 {
>>> + core0 {
>>> + cpu = <&cpu4>;
>>> + };
>>> +
>>> + core1 {
>>> + cpu = <&cpu5>;
>>> + };
>>> +
>>> + core2 {
>>> + cpu = <&cpu6>;
>>> + };
>>> +
>>> + core3 {
>>> + cpu = <&cpu7>;
>>> + };
>>> + };
>>> + };
>>> +
>>> + cpu0: cpu@0 {
>>> + device_type = "cpu";
>>> + compatible = "arm,cortex-a53";
>>> + reg = <0x0>;
>>> + enable-method = "psci";
>>> + clocks = <&dfs S32_SCMI_CLK_A53>;
>>> + next-level-cache = <&cluster0_l2_cache>;
>>> + #cooling-cells = <2>;
>>> + };
>>
>> Are the '#cooling-cells = <2>;' used in this patch? If not, shouldn't
>> you drop them?
>>
>
> No, its not used. Will drop it, thanks for the hint!
>
>>> +
>>> + cpu1: cpu@1 {
>>> + device_type = "cpu";
>>> + compatible = "arm,cortex-a53";
>>> + reg = <0x1>;
>>> + enable-method = "psci";
>>> + clocks = <&dfs S32_SCMI_CLK_A53>;
>>> + next-level-cache = <&cluster0_l2_cache>;
>>> + #cooling-cells = <2>;
>>> + };
>>> +
>>> + cpu2: cpu@2 {
>>> + device_type = "cpu";
>>> + compatible = "arm,cortex-a53";
>>> + reg = <0x2>;
>>> + enable-method = "psci";
>>> + clocks = <&dfs S32_SCMI_CLK_A53>;
>>> + next-level-cache = <&cluster0_l2_cache>;
>>> + #cooling-cells = <2>;
>>> + };
>>> +
>>> + cpu3: cpu@3 {
>>> + device_type = "cpu";
>>> + compatible = "arm,cortex-a53";
>>> + reg = <0x3>;
>>> + enable-method = "psci";
>>> + clocks = <&dfs S32_SCMI_CLK_A53>;
>>> + next-level-cache = <&cluster0_l2_cache>;
>>> + #cooling-cells = <2>;
>>> + };
>>> +
>>> + cpu4: cpu@100 {
>>> + device_type = "cpu";
>>> + compatible = "arm,cortex-a53";
>>> + reg = <0x100>;
>>> + enable-method = "psci";
>>> + clocks = <&dfs S32_SCMI_CLK_A53>;
>>> + next-level-cache = <&cluster1_l2_cache>;
>>> + #cooling-cells = <2>;
>>> + };
>>> +
>>> + cpu5: cpu@101 {
>>> + device_type = "cpu";
>>> + compatible = "arm,cortex-a53";
>>> + reg = <0x101>;
>>> + enable-method = "psci";
>>> + clocks = <&dfs S32_SCMI_CLK_A53>;
>>> + next-level-cache = <&cluster1_l2_cache>;
>>> + #cooling-cells = <2>;
>>> + };
>>> +
>>> + cpu6: cpu@102 {
>>> + device_type = "cpu";
>>> + compatible = "arm,cortex-a53";
>>> + reg = <0x102>;
>>> + enable-method = "psci";
>>> + clocks = <&dfs S32_SCMI_CLK_A53>;
>>> + next-level-cache = <&cluster1_l2_cache>;
>>> + #cooling-cells = <2>;
>>> + };
>>> +
>>> + cpu7: cpu@103 {
>>> + device_type = "cpu";
>>> + compatible = "arm,cortex-a53";
>>> + reg = <0x103>;
>>> + enable-method = "psci";
>>> + clocks = <&dfs S32_SCMI_CLK_A53>;
>>> + next-level-cache = <&cluster1_l2_cache>;
>>> + #cooling-cells = <2>;
>>> + };
>>> +
>>> + cluster0_l2_cache: l2-cache0 {
>>> + compatible = "cache";
>>> + status = "okay";
>>> + };
>>> +
>>> + cluster1_l2_cache: l2-cache1 {
>>> + compatible = "cache";
>>> + status = "okay";
>>> + };
>>> + };
>>> +
>>> + pmu {
>>> + compatible = "arm,cortex-a53-pmu";
>>> + interrupts = <GIC_PPI 7 IRQ_TYPE_LEVEL_HIGH>;
>>> + };
>>> +
>>> + timer {
>>> + compatible = "arm,armv8-timer";
>>> + interrupts = <GIC_PPI 13 IRQ_TYPE_LEVEL_LOW>, /* sec-phys */
>>> + <GIC_PPI 14 IRQ_TYPE_LEVEL_LOW>, /* virt */
>>> + <GIC_PPI 11 IRQ_TYPE_LEVEL_LOW>, /* hyp-virt */
>>> + <GIC_PPI 10 IRQ_TYPE_LEVEL_LOW>, /* sec-phys */
>>> + <GIC_PPI 12 IRQ_TYPE_LEVEL_LOW>; /* phys */
>>> + always-on;
>>> + };
>>
>> 1. 'always-on' -> 'arm,no-tick-in-suspend' as the timer does not tick
>> during suspend on this platform.
>>
>> 2. The ARMv8 timer driver expects a certain order of interrupts
>> when the interrupt names are not used in bindings which is not followed
>> in this node.
>>
>> Here is the fix to be applied:
>> https://github.com/nxp-auto-linux/linux/commit/f23552d3f8d8f3893dc5b485ba79ee73895f5b27
>>
>
> 1) thanks, whill change it!
> 2) I wanted to avoid to create the interrupt-names property and directly
> put it in the right order, or do you see here a wrong order to what is
> erxpected by the arch_timer driver? Is your proposal to also use the interrupt-names property
> instead or a ordering it according the dt schema?
Any of these two options should work. I thought it was more intuitive to
add the names here to highlight an order and driver's expectations.
>>> +
>>> + reserved-memory {
>>> + #address-cells = <2>;
>>> + #size-cells = <2>;
>>> + ranges;
>>> +
>>> + scmi_tx_buf: shm@d0000000 {
>>> + compatible = "arm,scmi-shmem";
>>> + reg = <0x0 0xd0000000 0x0 0x80>;
>>> + no-map;
>>> + };
>>> +
>>> + scmi_rx_buf: shm@d0000080 {
>>> + compatible = "arm,scmi-shmem";
>>> + reg = <0x0 0xd0000080 0x0 0x80>;
>>> + no-map;
>>> + };
>>> + };
>>> +
>>> + firmware {
>>> + scmi: scmi {
>>> + compatible = "arm,scmi-smc";
>>> + mbox-names = "tx", "rx";
>>> + shmem = <&scmi_tx_buf>, <&scmi_rx_buf>;
>>
>> Have you verified the RX support?
>>
>>> + arm,smc-id = <0xc20000fe>;
>>> + #address-cells = <1>;
>>> + #size-cells = <0>;
>>> + status = "okay";
>>> + interrupts = <GIC_SPI 300 IRQ_TYPE_EDGE_RISING>;
>>> + interrupt-names = "p2a_notif";
>>
>> This support is not available upstream and, therefore, should be either
>> removed or completely added.
>>
>
> Thanks, will do that in v2!
>>> +
>>> + dfs: protocol@13 {
>>> + reg = <0x13>;
>>> + #clock-cells = <1>;
>>> + };
>>> +
>>> + clks: protocol@14 {
>>> + reg = <0x14>;
>>> + #clock-cells = <1>;
>>> + };
>>> +
>>> + reset: protocol@16 {
>>> + reg = <0x16>;
>>> + #reset-cells = <1>;
>>> + };
>>
>> Is this really needed to be part of this patch?
>>
>
> No the reset node is not really needed, I forgot to remove it, thanks
> for the hint!
>
>>> +
>>> + pinctrl_scmi: protocol@80 {
>>> + reg = <0x80>;
>>> + #pinctrl-cells = <2>;
>>> +
>>> + status = "disabled";
>>> + };
>>
>> Not documented.
>>
>
> Will be removed as not used
>
>>> + };
>>> +
>>> + psci: psci {
>>> + compatible = "arm,psci-1.0";
>>> + method = "smc";
>>> + };
>>> + };
>>> +
>>> + soc@0 {
>>> + compatible = "simple-bus";
>>> + #address-cells = <1>;
>>> + #size-cells = <1>;
>>> + ranges = <0 0 0 0x80000000>;
>>> +
>>> + uart0: serial@401c8000 {
>>> + compatible = "nxp,s32g3-linflexuart",
>>> + "fsl,s32v234-linflexuart";
>>> + reg = <0x401c8000 0x3000>;
>>> + interrupts = <GIC_SPI 82 IRQ_TYPE_EDGE_RISING>;
>>> + status = "disabled";
>>> + };
>>> +
>>> + uart1: serial@401cc000 {
>>> + compatible = "nxp,s32g3-linflexuart",
>>> + "fsl,s32v234-linflexuart";
>>> + reg = <0x401cc000 0x3000>;
>>> + interrupts = <GIC_SPI 83 IRQ_TYPE_EDGE_RISING>;
>>> + status = "disabled";
>>> + };
>>> +
>>> + uart2: serial@402bc000 {
>>> + compatible = "nxp,s32g3-linflexuart",
>>> + "fsl,s32v234-linflexuart";
>>> + reg = <0x402bc000 0x3000>;
>>> + interrupts = <GIC_SPI 84 IRQ_TYPE_EDGE_RISING>;
>>> + status = "disabled";
>>> + };
>>> +
>>> + gic: interrupt-controller@50800000 {
>>> + compatible = "arm,gic-v3";
>>> + #interrupt-cells = <3>;
>>> + interrupt-controller;
>>> + reg = <0x50800000 0x10000>,
>>> + <0x50900000 0x200000>,
>>> + <0x50400000 0x2000>,
>>> + <0x50410000 0x2000>,
>>> + <0x50420000 0x2000>;
>>> + interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
>>> + mbi-ranges = <167 16>;
>>> + };
>>> +
>>> + qspi: spi@40134000 {
>>> + compatible = "nxp,s32g3-qspi";
>>> + #address-cells = <1>;
>>> + #size-cells = <0>;
>>> + reg = <0x0 0x00000000 0x0 0x20000000>,
>>> + <0x0 0x40134000 0x0 0x1000>;
>>> + reg-names = "QuadSPI-memory", "QuadSPI";
>>> + interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
>>> + clock-names = "qspi_en", "qspi";
>>> + clocks = <&clks S32_SCMI_CLK_QSPI_FLASH1X>,
>>> + <&clks S32_SCMI_CLK_QSPI_FLASH1X>;
>>> + spi-max-frequency = <200000000>;
>>> + spi-num-chipselects = <2>;
>>> + status = "disabled";
>>> + };
>>
>> This binding and support is missing. Please delete.
>>
>>> +
>>> + usdhc0: mmc@402f0000 {
>>> + compatible = "nxp,s32g3-usdhc",
>>> + "nxp,s32g2-usdhc";
>>> + reg = <0x402f0000 0x1000>;
>>> + interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>;
>>> + clocks = <&clks S32_SCMI_CLK_USDHC_MODULE>,
>>> + <&clks S32_SCMI_CLK_USDHC_AHB>,
>>> + <&clks S32_SCMI_CLK_USDHC_CORE>;
>>> + clock-names = "ipg", "ahb", "per";
>>> + status = "disabled";
>>> + };
>>
>> nxp,s32g3-usdhc is not documented.
>>
>
> Would you propose to delete the compatible string, or add the
> documentation of nxp,s32g3-usdhc to the schema? The driver seems to work pretty fine
> without any g3 specific adaptations.
I am fine with reusing the S32G2 compatible string, but it may not look
aesthetically pleasing. Adding a new compatible string may enhance the
appearance and emphasize the SoC difference.
Best regards,
Ghennadi
>>> +
>>> + gmac0: ethernet@4033c000 {
>>> + status = "disabled";
>>> + compatible = "nxp,s32-dwmac";
>>> + reg = <0x4033c000 0x2000>, /* gmac IP */
>>> + <0x4007c004 0x4>; /* S32 CTRL_STS reg */
>>> + interrupt-parent = <&gic>;
>>> + interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
>>> + interrupt-names = "macirq";
>>> + tx-fifo-depth = <20480>;
>>> + rx-fifo-depth = <20480>;
>>> + dma-coherent;
>>> + snps,mtl-rx-config = <&mtl_rx_setup_gmac0>;
>>> + snps,mtl-tx-config = <&mtl_tx_setup_gmac0>;
>>> + clocks = <&clks S32_SCMI_CLK_GMAC0_AXI>,
>>> + <&clks S32_SCMI_CLK_GMAC0_AXI>,
>>> + <&clks S32_SCMI_CLK_GMAC0_TX_SGMII>,
>>> + <&clks S32_SCMI_CLK_GMAC0_TX_RGMII>,
>>> + <&clks S32_SCMI_CLK_GMAC0_TX_RMII>,
>>> + <&clks S32_SCMI_CLK_GMAC0_TX_MII>,
>>> + <&clks S32_SCMI_CLK_GMAC0_RX_SGMII>,
>>> + <&clks S32_SCMI_CLK_GMAC0_RX_RGMII>,
>>> + <&clks S32_SCMI_CLK_GMAC0_RX_RMII>,
>>> + <&clks S32_SCMI_CLK_GMAC0_RX_MII>,
>>> + <&clks S32_SCMI_CLK_GMAC0_TS>;
>>> + clock-names = "stmmaceth", "pclk",
>>> + "tx_sgmii", "tx_rgmii",
>>> + "tx_rmii", "tx_mii",
>>> + "rx_sgmii", "rx_rgmii",
>>> + "rx_rmii", "rx_mii",
>>> + "ptp_ref";
>>> +
>>> + mtl_rx_setup_gmac0: rx-queues-config {
>>> + snps,rx-queues-to-use = <5>;
>>> + #address-cells = <1>;
>>> + #size-cells = <0>;
>>> +
>>> + queue@0 {};
>>> + queue@1 {};
>>> + queue@2 {};
>>> + queue@3 {};
>>> + queue@4 {};
>>> + };
>>> +
>>> + mtl_tx_setup_gmac0: tx-queues-config {
>>> + snps,tx-queues-to-use = <5>;
>>> + #address-cells = <1>;
>>> + #size-cells = <0>;
>>> +
>>> + queue@0 {};
>>> + queue@1 {};
>>> + queue@2 {};
>>> + queue@3 {};
>>> + queue@4 {};
>>> + };
>>> +
>>> + gmac0_mdio: mdio0 {
>>> + compatible = "snps,dwmac-mdio";
>>> + #address-cells = <1>;
>>> + #size-cells = <0>;
>>> + };
>>> + };
>>> +
>>> + };
>>> +};
>>> diff --git a/arch/arm64/boot/dts/freescale/s32g399a-rdb3.dts b/arch/arm64/boot/dts/freescale/s32g399a-rdb3.dts
>>> new file mode 100644
>>> index 000000000000..707b503c0165
>>> --- /dev/null
>>> +++ b/arch/arm64/boot/dts/freescale/s32g399a-rdb3.dts
>>> @@ -0,0 +1,57 @@
>>> +// SPDX-License-Identifier: GPL-2.0-or-later
>>> +/*
>>> + * NXP S32G3 Reference Design Board 3 (S32G-VNP-RDB3)
>>> + */
>>> +
>>> +/dts-v1/;
>>> +
>>> +#include "s32g3.dtsi"
>>> +
>>> +/ {
>>> + model = "NXP S32G3 Reference Design Board 3 (S32G-VNP-RDB3)";
>>> + compatible = "nxp,s32g399a-rdb3", "nxp,s32g3";
>>> +
>>> + aliases {
>>> + serial0 = &uart0;
>>> + serial1 = &uart1;
>>> + ethernet0 = &gmac0;
>>> + reset = &reset;
>>> + };
>>> +
>>> + chosen {
>>> + stdout-path = "serial0:115200n8";
>>> + };
>>> +
>>> + /* 4GiB RAM */
>>> + memory@80000000 {
>>> + device_type = "memory";
>>> + reg = <0x0 0x80000000 0 0x80000000>,
>>> + <0x8 0x80000000 0 0x80000000>;
>>> + };
>>> +};
>>> +
>>> +&gmac0 {
>>> + status = "okay";
>>> + phy-handle = <&mdio_a_phy1>;
>>> + phy-mode = "rgmii-id";
>>> +};
>>> +
>>> +&gmac0_mdio {
>>> + #address-cells = <1>;
>>> + #size-cells = <0>;
>>> + mdio_a_phy1: ethernet-phy@1 {
>>> + reg = <1>;
>>> + };
>>> +};
>>> +
>>> +&uart0 {
>>> + status = "okay";
>>> +};
>>> +
>>> +&uart1 {
>>> + status = "okay";
>>> +};
>>> +
>>> +&usdhc0 {
>>> + status = "okay";
>>> +};
>>> diff --git a/include/dt-bindings/clock/nxp,s32-scmi-clock.h b/include/dt-bindings/clock/nxp,s32-scmi-clock.h
>>> new file mode 100644
>>> index 000000000000..240022c1f109
>>> --- /dev/null
>>> +++ b/include/dt-bindings/clock/nxp,s32-scmi-clock.h
>>> @@ -0,0 +1,158 @@
>>> +/* SPDX-License-Identifier: BSD-3-Clause */
>>> +
>>> +#ifndef __DT_BINDINGS_NXP_SCMI_CLOCK_S32_H
>>> +#define __DT_BINDINGS_NXP_SCMI_CLOCK_S32_H
>>> +
>>> +#define S32_SCMI_COMPLEX_CLK 0xFFFFFFFFU
>>> +#define S32_SCMI_NOT_IMPLEMENTED_CLK 0xFFFFFFFEU
>>> +
>>> +#define S32_SCMI_CLK_BASE_ID 0U
>>> +#define S32_SCMI_CLK(N) ((N) + S32_SCMI_CLK_BASE_ID)
>>> +#define S32_PLAT_SCMI_CLK(N) ((N) + S32_SCMI_PLAT_CLK_BASE_ID)
>>> +
>>> +#define S32_SCMI_CLK_VERSION_MAJOR (1)
>>> +#define S32_SCMI_CLK_VERSION_MINOR (0)
>>> +
>>> +/* A53 */
>>> +#define S32_SCMI_CLK_A53 S32_SCMI_CLK(0)
>>> +/* SERDES */
>>> +#define S32_SCMI_CLK_SERDES_AXI S32_SCMI_CLK(1)
>>> +#define S32_SCMI_CLK_SERDES_AUX S32_SCMI_CLK(2)
>>> +#define S32_SCMI_CLK_SERDES_APB S32_SCMI_CLK(3)
>>> +#define S32_SCMI_CLK_SERDES_REF S32_SCMI_CLK(4)
>>> +/* FTM0 */
>>> +#define S32_SCMI_CLK_FTM0_SYS S32_SCMI_CLK(5)
>>> +#define S32_SCMI_CLK_FTM0_EXT S32_SCMI_CLK(6)
>>> +/* FTM1 */
>>> +#define S32_SCMI_CLK_FTM1_SYS S32_SCMI_CLK(7)
>>> +#define S32_SCMI_CLK_FTM1_EXT S32_SCMI_CLK(8)
>>> +/* FlexCAN */
>>> +#define S32_SCMI_CLK_FLEXCAN_REG S32_SCMI_CLK(9)
>>> +#define S32_SCMI_CLK_FLEXCAN_SYS S32_SCMI_CLK(10)
>>> +#define S32_SCMI_CLK_FLEXCAN_CAN S32_SCMI_CLK(11)
>>> +#define S32_SCMI_CLK_FLEXCAN_TS S32_SCMI_CLK(12)
>>> +/* LINFlexD */
>>> +#define S32_SCMI_CLK_LINFLEX_XBAR S32_SCMI_CLK(13)
>>> +#define S32_SCMI_CLK_LINFLEX_LIN S32_SCMI_CLK(14)
>>> +#define S32_SCMI_CLK_GMAC0_TS S32_SCMI_CLK(15)
>>> +/* GMAC0 - SGMII */
>>> +#define S32_SCMI_CLK_GMAC0_RX_SGMII S32_SCMI_CLK(16)
>>> +#define S32_SCMI_CLK_GMAC0_TX_SGMII S32_SCMI_CLK(17)
>>> +/* GMAC0 - RGMII */
>>> +#define S32_SCMI_CLK_GMAC0_RX_RGMII S32_SCMI_CLK(18)
>>> +#define S32_SCMI_CLK_GMAC0_TX_RGMII S32_SCMI_CLK(19)
>>> +/* GMAC0 - RMII */
>>> +#define S32_SCMI_CLK_GMAC0_RX_RMII S32_SCMI_CLK(20)
>>> +#define S32_SCMI_CLK_GMAC0_TX_RMII S32_SCMI_CLK(21)
>>> +/* GMAC0 - MII */
>>> +#define S32_SCMI_CLK_GMAC0_RX_MII S32_SCMI_CLK(22)
>>> +#define S32_SCMI_CLK_GMAC0_TX_MII S32_SCMI_CLK(23)
>>> +#define S32_SCMI_CLK_GMAC0_AXI S32_SCMI_CLK(24)
>>> +/* SPI */
>>> +#define S32_SCMI_CLK_SPI_REG S32_SCMI_CLK(25)
>>> +#define S32_SCMI_CLK_SPI_MODULE S32_SCMI_CLK(26)
>>> +/* QSPI */
>>> +#define S32_SCMI_CLK_QSPI_REG S32_SCMI_CLK(27)
>>> +#define S32_SCMI_CLK_QSPI_AHB S32_SCMI_CLK(28)
>>> +#define S32_SCMI_CLK_QSPI_FLASH2X S32_SCMI_CLK(29)
>>> +#define S32_SCMI_CLK_QSPI_FLASH1X S32_SCMI_CLK(30)
>>> +/* uSDHC */
>>> +#define S32_SCMI_CLK_USDHC_AHB S32_SCMI_CLK(31)
>>> +#define S32_SCMI_CLK_USDHC_MODULE S32_SCMI_CLK(32)
>>> +#define S32_SCMI_CLK_USDHC_CORE S32_SCMI_CLK(33)
>>> +#define S32_SCMI_CLK_USDHC_MOD32K S32_SCMI_CLK(34)
>>> +/* DDR */
>>> +#define S32_SCMI_CLK_DDR_REG S32_SCMI_CLK(35)
>>> +#define S32_SCMI_CLK_DDR_PLL_REF S32_SCMI_CLK(36)
>>> +#define S32_SCMI_CLK_DDR_AXI S32_SCMI_CLK(37)
>>> +/* SRAM */
>>> +#define S32_SCMI_CLK_SRAM_AXI S32_SCMI_CLK(38)
>>> +#define S32_SCMI_CLK_SRAM_REG S32_SCMI_CLK(39)
>>> +/* I2C */
>>> +#define S32_SCMI_CLK_I2C_REG S32_SCMI_CLK(40)
>>> +#define S32_SCMI_CLK_I2C_MODULE S32_SCMI_CLK(41)
>>> +/* SIUL2 */
>>> +#define S32_SCMI_CLK_SIUL2_REG S32_SCMI_CLK(42)
>>> +#define S32_SCMI_CLK_SIUL2_FILTER S32_SCMI_CLK(43)
>>> +/* CRC */
>>> +#define S32_SCMI_CLK_CRC_REG S32_SCMI_CLK(44)
>>> +#define S32_SCMI_CLK_CRC_MODULE S32_SCMI_CLK(45)
>>> +/* EIM0 */
>>> +#define S32_SCMI_CLK_EIM0_REG S32_SCMI_CLK(46)
>>> +#define S32_SCMI_CLK_EIM0_MODULE S32_SCMI_CLK(47)
>>> +/* EIM0 */
>>> +#define S32_SCMI_CLK_EIM123_REG S32_SCMI_CLK(48)
>>> +#define S32_SCMI_CLK_EIM123_MODULE S32_SCMI_CLK(49)
>>> +/* EIM */
>>> +#define S32_SCMI_CLK_EIM_REG S32_SCMI_CLK(50)
>>> +#define S32_SCMI_CLK_EIM_MODULE S32_SCMI_CLK(51)
>>> +/* FCCU */
>>> +#define S32_SCMI_CLK_FCCU_MODULE S32_SCMI_CLK(52)
>>> +#define S32_SCMI_CLK_FCCU_SAFE S32_SCMI_CLK(53)
>>> +/* RTC */
>>> +#define S32_SCMI_CLK_RTC_REG S32_SCMI_CLK(54)
>>> +#define S32_SCMI_CLK_RTC_SIRC S32_SCMI_CLK(55)
>>> +#define S32_SCMI_CLK_RTC_FIRC S32_SCMI_CLK(56)
>>> +/* SWT */
>>> +#define S32_SCMI_CLK_SWT_MODULE S32_SCMI_CLK(57)
>>> +#define S32_SCMI_CLK_SWT_COUNTER S32_SCMI_CLK(58)
>>> +/* STM */
>>> +#define S32_SCMI_CLK_STM_MODULE S32_SCMI_CLK(59)
>>> +#define S32_SCMI_CLK_STM_REG S32_SCMI_CLK(60)
>>> +/* PIT */
>>> +#define S32_SCMI_CLK_PIT_MODULE S32_SCMI_CLK(61)
>>> +#define S32_SCMI_CLK_PIT_REG S32_SCMI_CLK(62)
>>> +/* eDMA */
>>> +#define S32_SCMI_CLK_EDMA_MODULE S32_SCMI_CLK(63)
>>> +#define S32_SCMI_CLK_EDMA_AHB S32_SCMI_CLK(64)
>>> +/* ADC */
>>> +#define S32_SCMI_CLK_SAR_ADC_BUS S32_SCMI_CLK(65)
>>> +/* CMU */
>>> +#define S32_SCMI_CLK_CMU_MODULE S32_SCMI_CLK(66)
>>> +#define S32_SCMI_CLK_CMU_REG S32_SCMI_CLK(67)
>>> +/* TMU */
>>> +#define S32_SCMI_CLK_TMU_MODULE S32_SCMI_CLK(68)
>>> +#define S32_SCMI_CLK_TMU_REG S32_SCMI_CLK(69)
>>> +/* FlexRay */
>>> +#define S32_SCMI_CLK_FR_REG S32_SCMI_CLK(70)
>>> +#define S32_SCMI_CLK_FR_PE S32_SCMI_CLK(71)
>>> +/* WKPU */
>>> +#define S32_SCMI_CLK_WKPU_MODULE S32_SCMI_CLK(72)
>>> +#define S32_SCMI_CLK_WKPU_REG S32_SCMI_CLK(73)
>>> +/* SRC */
>>> +#define S32_SCMI_CLK_SRC_MODULE S32_SCMI_CLK(74)
>>> +#define S32_SCMI_CLK_SRC_REG S32_SCMI_CLK(75)
>>> +/* SRC-TOP */
>>> +#define S32_SCMI_CLK_SRC_TOP_MODULE S32_SCMI_CLK(76)
>>> +#define S32_SCMI_CLK_SRC_TOP_REG S32_SCMI_CLK(77)
>>> +/* CTU */
>>> +#define S32_SCMI_CLK_CTU_MODULE S32_SCMI_CLK(78)
>>> +#define S32_SCMI_CLK_CTU_CTU S32_SCMI_CLK(79)
>>> +/* DBG */
>>> +#define S32_SCMI_CLK_DBG_SYS4 S32_SCMI_CLK(80)
>>> +#define S32_SCMI_CLK_DBG_SYS2 S32_SCMI_CLK(81)
>>> +/* Cortex-M7 */
>>> +#define S32_SCMI_CLK_M7_CORE S32_SCMI_CLK(82)
>>> +/* DMAMUX */
>>> +#define S32_SCMI_CLK_DMAMUX_MODULE S32_SCMI_CLK(83)
>>> +#define S32_SCMI_CLK_DMAMUX_REG S32_SCMI_CLK(84)
>>> +/* GIC */
>>> +#define S32_SCMI_CLK_GIC_MODULE S32_SCMI_CLK(85)
>>> +/* MSCM */
>>> +#define S32_SCMI_CLK_MSCM_MODULE S32_SCMI_CLK(86)
>>> +#define S32_SCMI_CLK_MSCM_REG S32_SCMI_CLK(87)
>>> +/* SEMA42 */
>>> +#define S32_SCMI_CLK_SEMA42_MODULE S32_SCMI_CLK(88)
>>> +#define S32_SCMI_CLK_SEMA42_REG S32_SCMI_CLK(89)
>>> +/* XRDC */
>>> +#define S32_SCMI_CLK_XRDC_MODULE S32_SCMI_CLK(90)
>>> +#define S32_SCMI_CLK_XRDC_REG S32_SCMI_CLK(91)
>>> +/* CLKOUT */
>>> +#define S32_SCMI_CLK_CLKOUT_0 S32_SCMI_CLK(92)
>>> +#define S32_SCMI_CLK_CLKOUT_1 S32_SCMI_CLK(93)
>>> +
>>> +#define S32_SCMI_PLAT_CLK_BASE_ID S32_SCMI_CLK(94)
>>> +
>>> +#define S32_SCMI_CLK_MAX_ID S32_PLAT_SCMI_CLK(32)
>>> +
>>> +#endif
>>
>> Regards,
>> Ghennadi