Re: [PATCH 08/11] MIPS: mobileye: Add EyeQ5 dtsi

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 4, 2023 at 11:11 AM Gregory CLEMENT
<gregory.clement@xxxxxxxxxxx> wrote:
>
> Add a device tree include file for the Mobileye EyeQ5 SoC.
>
> Based on the work of Slava Samsonov <stanislav.samsonov@xxxxxxxxx>
>
> Signed-off-by: Gregory CLEMENT <gregory.clement@xxxxxxxxxxx>
> ---
>  arch/mips/boot/dts/Makefile                   |   1 +
>  arch/mips/boot/dts/mobileye/Makefile          |   4 +
>  .../boot/dts/mobileye/eyeq5-fixed-clocks.dtsi | 315 ++++++++++++++++++
>  arch/mips/boot/dts/mobileye/eyeq5.dtsi        | 138 ++++++++
>  4 files changed, 458 insertions(+)
>  create mode 100644 arch/mips/boot/dts/mobileye/Makefile
>  create mode 100644 arch/mips/boot/dts/mobileye/eyeq5-fixed-clocks.dtsi
>  create mode 100644 arch/mips/boot/dts/mobileye/eyeq5.dtsi
>
> diff --git a/arch/mips/boot/dts/Makefile b/arch/mips/boot/dts/Makefile
> index 928f38a79dff..edb8e8dee758 100644
> --- a/arch/mips/boot/dts/Makefile
> +++ b/arch/mips/boot/dts/Makefile
> @@ -8,6 +8,7 @@ subdir-$(CONFIG_LANTIQ)                 += lantiq
>  subdir-$(CONFIG_MACH_LOONGSON64)       += loongson
>  subdir-$(CONFIG_SOC_VCOREIII)          += mscc
>  subdir-$(CONFIG_MIPS_MALTA)            += mti
> +subdir-$(CONFIG_SOC_EYEQ5)             += mobileye
>  subdir-$(CONFIG_LEGACY_BOARD_SEAD3)    += mti
>  subdir-$(CONFIG_FIT_IMAGE_FDT_NI169445)        += ni
>  subdir-$(CONFIG_MACH_PIC32)            += pic32
> diff --git a/arch/mips/boot/dts/mobileye/Makefile b/arch/mips/boot/dts/mobileye/Makefile
> new file mode 100644
> index 000000000000..99c4124fd4c0
> --- /dev/null
> +++ b/arch/mips/boot/dts/mobileye/Makefile
> @@ -0,0 +1,4 @@
> +# SPDX-License-Identifier: GPL-2.0-only
> +# Copyright 2023 Mobileye Vision Technologies Ltd.
> +
> +obj-$(CONFIG_BUILTIN_DTB)      += $(addsuffix .o, $(dtb-y))

You didn't add anything to 'dtb-y'. Did you test this?

Also, CONFIG_BUILTIN_DTB is supposed to be for legacy bootloaders
which don't understand DT. For a new SoC, fix the bootloader.

> diff --git a/arch/mips/boot/dts/mobileye/eyeq5-fixed-clocks.dtsi b/arch/mips/boot/dts/mobileye/eyeq5-fixed-clocks.dtsi
> new file mode 100644
> index 000000000000..a0066465ac8b
> --- /dev/null
> +++ b/arch/mips/boot/dts/mobileye/eyeq5-fixed-clocks.dtsi
> @@ -0,0 +1,315 @@
> +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +/*
> + * Copyright 2023 Mobileye Vision Technologies Ltd.
> + */

I assume these aren't all really fixed, but just 'I don't have a clock
driver yet'. That creates an ABI issue when you add the clock
driver(s). Just FYI.

> +
> +/ {
> +       /* Fixed clock */
> +       pll_cpu: pll_cpu {

Don't use _ in node names.

> +               compatible = "fixed-clock";
> +               #clock-cells = <0>;
> +               clock-frequency = <1500000000>;
> +       };
> +
> +       pll_vdi: pll_vdi {
> +               compatible = "fixed-clock";
> +               #clock-cells = <0>;
> +               clock-frequency = <1280000000>;
> +       };
> +
> +       pll_per: pll_per {
> +               compatible = "fixed-clock";
> +               #clock-cells = <0>;
> +               clock-frequency = <2000000000>;
> +       };
> +
> +       pll_ddr0: pll_ddr0 {
> +               compatible = "fixed-clock";
> +               #clock-cells = <0>;
> +               clock-frequency = <1857210000>;
> +       };
> +
> +       pll_ddr1: pll_ddr1 {
> +               compatible = "fixed-clock";
> +               #clock-cells = <0>;
> +               clock-frequency = <1857210000>;
> +       };
> +
> +/* PLL_CPU derivatives */
> +       occ_cpu: occ_cpu {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_cpu>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "occ_cpu";

Isn't the default name the node name? Drop these unless you really
have a need and they aren't redundant.

> +       };
> +       si_css0_ref_clk: si_css0_ref_clk { /* gate ClkRstGen_si_css0_ref */
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_cpu>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "si_css0_ref_clk";
> +       };
> +       cpc_clk: cpc_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&si_css0_ref_clk>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "cpc_clk";
> +       };
> +       core0_clk: core0_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&si_css0_ref_clk>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "core0_clk";
> +       };
> +       core1_clk: core1_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&si_css0_ref_clk>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "core1_clk";
> +       };
> +       core2_clk: core2_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&si_css0_ref_clk>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "core2_clk";
> +       };
> +       core3_clk: core3_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&si_css0_ref_clk>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "core3_clk";
> +       };
> +       cm_clk: cm_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&si_css0_ref_clk>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "cm_clk";
> +       };
> +       mem_clk: mem_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&si_css0_ref_clk>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "mem_clk";
> +       };
> +       occ_isram: occ_isram {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_cpu>;
> +               #clock-cells = <0>;
> +               clock-div = <2>;
> +               clock-mult = <1>;
> +               clock-output-names = "occ_isram";
> +       };
> +       isram_clk: isram_clk { /* gate ClkRstGen_isram */
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_isram>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "isram_clk";
> +       };
> +       occ_dbu: occ_dbu {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_cpu>;
> +               #clock-cells = <0>;
> +               clock-div = <10>;
> +               clock-mult = <1>;
> +               clock-output-names = "occ_dbu";
> +       };
> +       si_dbu_tp_pclk: si_dbu_tp_pclk { /* gate ClkRstGen_dbu */
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_dbu>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "si_dbu_tp_pclk";
> +       };
> +/* PLL_VDI derivatives */
> +       occ_vdi: occ_vdi {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_vdi>;
> +               #clock-cells = <0>;
> +               clock-div = <2>;
> +               clock-mult = <1>;
> +               clock-output-names = "occ_vdi";
> +       };
> +       vdi_clk: vdi_clk { /* gate ClkRstGen_vdi */
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_vdi>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "vdi_clk";
> +       };
> +       occ_can_ser: occ_can_ser {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_vdi>;
> +               #clock-cells = <0>;
> +               clock-div = <16>;
> +               clock-mult = <1>;
> +               clock-output-names = "occ_can_ser";
> +       };
> +       can_ser_clk: can_ser_clk { /* gate ClkRstGen_can_ser */
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_can_ser>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "can_ser_clk";
> +       };
> +       i2c_ser_clk: i2c_ser_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_vdi>;
> +               #clock-cells = <0>;
> +               clock-div = <20>;
> +               clock-mult = <1>;
> +               clock-output-names = "i2c_ser_clk";
> +       };
> +/* PLL_PER derivatives */
> +       occ_periph: occ_periph {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_per>;
> +               #clock-cells = <0>;
> +               clock-div = <16>;
> +               clock-mult = <1>;
> +               clock-output-names = "occ_periph";
> +       };
> +       periph_clk: periph_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_periph>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "periph_clk";
> +       };
> +       can_clk: can_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_periph>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "can_clk";
> +       };
> +       spi_clk: spi_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_periph>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "spi_clk";
> +       };
> +       uart_clk: uart_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_periph>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "uart_clk";
> +       };
> +       i2c_clk: i2c_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_periph>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "i2c_clk";
> +       };
> +       timer_clk: timer_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_periph>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "timer_clk";
> +       };
> +       gpio_clk: gpio_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_periph>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "gpio_clk";
> +       };
> +       emmc_sys_clk: emmc_sys_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_per>;
> +               #clock-cells = <0>;
> +               clock-div = <10>;
> +               clock-mult = <1>;
> +               clock-output-names = "emmc_sys_clk";
> +       };
> +       ccf_ctrl_clk: ccf_ctrl_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_per>;
> +               #clock-cells = <0>;
> +               clock-div = <4>;
> +               clock-mult = <1>;
> +               clock-output-names = "ccf_ctrl_clk";
> +       };
> +       occ_mjpeg_core: occ_mjpeg_core {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_per>;
> +               #clock-cells = <0>;
> +               clock-div = <2>;
> +               clock-mult = <1>;
> +               clock-output-names = "occ_mjpeg_core";
> +       };
> +       hsm_clk: hsm_clk { /* gate ClkRstGen_hsm */
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_mjpeg_core>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "hsm_clk";
> +       };
> +       mjpeg_core_clk: mjpeg_core_clk { /* gate ClkRstGen_mjpeg_gen */
> +               compatible = "fixed-factor-clock";
> +               clocks = <&occ_mjpeg_core>;
> +               #clock-cells = <0>;
> +               clock-div = <1>;
> +               clock-mult = <1>;
> +               clock-output-names = "mjpeg_core_clk";
> +       };
> +       fcmu_a_clk: fcmu_a_clk {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_per>;
> +               #clock-cells = <0>;
> +               clock-div = <20>;
> +               clock-mult = <1>;
> +               clock-output-names = "fcmu_a_clk";
> +       };
> +       occ_pci_sys: occ_pci_sys {
> +               compatible = "fixed-factor-clock";
> +               clocks = <&pll_per>;
> +               #clock-cells = <0>;
> +               clock-div = <8>;
> +               clock-mult = <1>;
> +               clock-output-names = "occ_pci_sys";
> +       };
> +       pclk: pclk {
> +               compatible = "fixed-clock";
> +               #clock-cells = <0>;
> +               clock-frequency = <250000000>;  /* 250MHz */
> +       };
> +       tsu_clk: tsu_clk {
> +               compatible = "fixed-clock";
> +               #clock-cells = <0>;
> +               clock-frequency = <125000000>;  /* 125MHz */
> +       };
> +};
> diff --git a/arch/mips/boot/dts/mobileye/eyeq5.dtsi b/arch/mips/boot/dts/mobileye/eyeq5.dtsi
> new file mode 100644
> index 000000000000..0504c2fb3ad5
> --- /dev/null
> +++ b/arch/mips/boot/dts/mobileye/eyeq5.dtsi
> @@ -0,0 +1,138 @@
> +// SPDX-License-Identifier: GPL-2.0

Doesn't match eyeq5-fixed-clocks.dtsi

> +/*
> + * Copyright 2023 Mobileye Vision Technologies Ltd.
> + */
> +
> +#include <dt-bindings/interrupt-controller/mips-gic.h>
> +#include <dt-bindings/soc/mobileye,eyeq5.h>
> +
> +/memreserve/ 0x40000000 0xc0000000; /* DDR32 */
> +/memreserve/ 0x08000000 0x08000000; /* DDR_LOW */
> +
> +#include "eyeq5-fixed-clocks.dtsi"
> +
> +/* almost all GIC IRQs has the same characteristics. provide short form */

Maybe so, but I prefer not having 2 levels of lookup to figure out values.

> +#define GIC_IRQ(x) GIC_SHARED (x) IRQ_TYPE_LEVEL_HIGH
> +
> +/ {
> +       #address-cells = <2>;
> +       #size-cells = <2>;
> +       cpus {
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +               cpu@0 {
> +                       device_type = "cpu";
> +                       compatible = "mti,i6500";
> +                       reg = <0>;
> +                       clocks = <&core0_clk>;
> +               };
> +       };
> +
> +       reserved-memory {
> +               #address-cells = <2>;
> +               #size-cells = <2>;
> +               ranges;
> +
> +/* These reserved memory regions are also defined in bootmanager
> + * for configuring inbound translation for BARS, don't change
> + * these without syncing with bootmanager
> + */

Indent with the rest of the node.

> +               shmem0_reserved: shmem@804000000 {
> +                       reg = <0x8 0x04000000 0x0 0x1000000>;
> +               };
> +               shmem1_reserved: shmem@805000000 {
> +                       reg = <0x8 0x05000000 0x0 0x1000000>;
> +               };
> +               pci0_msi_reserved: pci0_msi@806000000 {
> +                       reg = <0x8 0x06000000 0x0 0x100000>;
> +               };
> +               pci1_msi_reserved: pci1_msi@806100000 {
> +                       reg = <0x8 0x06100000 0x0 0x100000>;
> +               };
> +
> +               mini_coredump0_reserved: mini_coredump0@806200000 {
> +                       reg = <0x8 0x06200000 0x0 0x100000>;
> +               };
> +               mhm_reserved_0: the_mhm_reserved_0@0 {
> +                       reg = <0x8 0x00000000 0x0 0x0000800>;
> +               };
> +       };
> +
> +       aliases {
> +               serial0 = &uart0;
> +               serial1 = &uart1;
> +               serial2 = &uart2;
> +       };
> +
> +       cpu_intc: interrupt-controller {
> +               compatible = "mti,cpu-interrupt-controller";
> +               interrupt-controller;
> +               #address-cells = <0>;
> +               #interrupt-cells = <1>;
> +       };
> +
> +       gic: interrupt-controller@140000 {
> +               compatible = "mti,gic";
> +               reg = <0x0 0x140000 0x0 0x20000>;
> +               interrupt-controller;
> +               #interrupt-cells = <3>;
> +
> +               /*
> +                * Declare the interrupt-parent even though the mti,gic
> +                * binding doesn't require it, such that the kernel can
> +                * figure out that cpu_intc is the root interrupt
> +                * controller & should be probed first.
> +                */
> +               interrupt-parent = <&cpu_intc>;
> +
> +               timer {
> +                       compatible = "mti,gic-timer";
> +                       interrupts = <GIC_LOCAL 1 IRQ_TYPE_NONE>;
> +                       clocks = <&core0_clk>;
> +               };
> +       };
> +
> +       soc: soc {
> +               #address-cells = <2>;
> +               #size-cells = <2>;
> +               ranges;
> +               compatible = "simple-bus";
> +
> +               uart0: serial@800000 {
> +                       compatible = "arm,pl011", "arm,primecell";
> +                       reg = <0 0x800000 0x0 0x1000>;
> +                       reg-io-width = <4>;
> +                       interrupt-parent = <&gic>;
> +                       interrupts = <GIC_IRQ(NUM_INT_UART)>;
> +                       clocks  = <&uart_clk>, <&occ_periph>;
> +                       clock-names = "uartclk", "apb_pclk";
> +               };
> +
> +               uart1: serial@900000 {
> +                       compatible = "arm,pl011", "arm,primecell";
> +                       reg = <0 0x900000 0x0 0x1000>;
> +                       reg-io-width = <4>;
> +                       interrupt-parent = <&gic>;
> +                       interrupts = <GIC_IRQ(NUM_INT_UART)>;
> +                       clocks  = <&uart_clk>, <&occ_periph>;
> +                       clock-names = "uartclk", "apb_pclk";
> +               };
> +
> +               uart2: serial@a00000 {
> +                       compatible = "arm,pl011", "arm,primecell";
> +                       reg = <0 0xa00000 0x0 0x1000>;
> +                       reg-io-width = <4>;
> +                       interrupt-parent = <&gic>;
> +                       interrupts = <GIC_IRQ(NUM_INT_UART)>;
> +                       clocks  = <&uart_clk>, <&occ_periph>;
> +                       clock-names = "uartclk", "apb_pclk";
> +               };
> +
> +               olb: olb@e00000 {
> +                       compatible = "mobileye,eyeq5-olb", "syscon", "simple-mfd";
> +                       reg = <0 0xe00000 0x0 0x400>;
> +                       reg-io-width = <4>;
> +               };
> +
> +       };
> +};
> --
> 2.40.1
>





[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux