diff mbox series

[v4] ARM: dts: add DT for lan966 SoC and 2-port board pcb8291

Message ID 20220209111318.21112-1-kavyasree.kotagiri@microchip.com (mailing list archive)
State New, archived
Headers show
Series [v4] ARM: dts: add DT for lan966 SoC and 2-port board pcb8291 | expand

Commit Message

Kavyasree Kotagiri Feb. 9, 2022, 11:13 a.m. UTC
This patch adds basic DT for Microchip lan966x SoC and associated board
pcb8291(2-port EVB). Adds peripherals required to allow booting: Interrupt
Controller, Clock, Generic ARMv7 Timers, Synopsys Timer, Flexcoms, GPIOs.
Also adds other peripherals like crypto(AES/SHA), DMA, Watchdog Timer, TRNG
and MCAN0.

Signed-off-by: Kavyasree Kotagiri <kavyasree.kotagiri@microchip.com>
---
v3 -> v4:
- Removed character 'x' from compatible string.
- Removed memory node as handled by bootloader.
- Renamed flexcom3 usart0 to usart3
- Added /chosen and /aliases nodes in dts file.

v2 -> v3:
- Enabling trng in dtsi itself.
- Removed "status=okay" dma0.
- Add gpio pin settings for can0(missed adding this in previous version)

v1 -> v2:
- Moved flx3 usart0 node to dtsi file.
- Removed status="okay" for dma0 to maintain consistency across nodes
  (which means enabling dma0 by default)

 arch/arm/boot/dts/Makefile            |   2 +
 arch/arm/boot/dts/lan966x.dtsi        | 237 ++++++++++++++++++++++++++
 arch/arm/boot/dts/lan966x_pcb8291.dts |  61 +++++++
 3 files changed, 300 insertions(+)
 create mode 100644 arch/arm/boot/dts/lan966x.dtsi
 create mode 100644 arch/arm/boot/dts/lan966x_pcb8291.dts

Comments

Tudor Ambarus Feb. 9, 2022, 12:32 p.m. UTC | #1
On 2/9/22 13:13, Kavyasree Kotagiri wrote:
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the content is safe
> 
> This patch adds basic DT for Microchip lan966x SoC and associated board
> pcb8291(2-port EVB). Adds peripherals required to allow booting: Interrupt
> Controller, Clock, Generic ARMv7 Timers, Synopsys Timer, Flexcoms, GPIOs.
> Also adds other peripherals like crypto(AES/SHA), DMA, Watchdog Timer, TRNG
> and MCAN0.
> 
> Signed-off-by: Kavyasree Kotagiri <kavyasree.kotagiri@microchip.com>
> ---
> v3 -> v4:
> - Removed character 'x' from compatible string.
> - Removed memory node as handled by bootloader.
> - Renamed flexcom3 usart0 to usart3
> - Added /chosen and /aliases nodes in dts file.
> 
> v2 -> v3:
> - Enabling trng in dtsi itself.
> - Removed "status=okay" dma0.
> - Add gpio pin settings for can0(missed adding this in previous version)
> 
> v1 -> v2:
> - Moved flx3 usart0 node to dtsi file.
> - Removed status="okay" for dma0 to maintain consistency across nodes
>   (which means enabling dma0 by default)
> 
>  arch/arm/boot/dts/Makefile            |   2 +
>  arch/arm/boot/dts/lan966x.dtsi        | 237 ++++++++++++++++++++++++++
>  arch/arm/boot/dts/lan966x_pcb8291.dts |  61 +++++++
>  3 files changed, 300 insertions(+)
>  create mode 100644 arch/arm/boot/dts/lan966x.dtsi
>  create mode 100644 arch/arm/boot/dts/lan966x_pcb8291.dts
> 
> diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
> index 235ad559acb2..2040a990f08c 100644
> --- a/arch/arm/boot/dts/Makefile
> +++ b/arch/arm/boot/dts/Makefile
> @@ -735,6 +735,8 @@ dtb-$(CONFIG_SOC_IMX7D) += \
>  dtb-$(CONFIG_SOC_IMX7ULP) += \
>         imx7ulp-com.dtb \
>         imx7ulp-evk.dtb
> +dtb-$(CONFIG_SOC_LAN966) += \
> +       lan966x_pcb8291.dtb
>  dtb-$(CONFIG_SOC_LS1021A) += \
>         ls1021a-moxa-uc-8410a.dtb \
>         ls1021a-qds.dtb \
> diff --git a/arch/arm/boot/dts/lan966x.dtsi b/arch/arm/boot/dts/lan966x.dtsi
> new file mode 100644
> index 000000000000..91ee9e0684f4
> --- /dev/null
> +++ b/arch/arm/boot/dts/lan966x.dtsi
> @@ -0,0 +1,237 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * lan966x.dtsi - Device Tree Include file for Microchip LAN966 family SoC
> + *
> + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries
> + *
> + * Author: Kavyasree Kotagiri <kavyasree.kotagiri@microchip.com>
> + *
> + */
> +
> +#include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> +#include <dt-bindings/mfd/atmel-flexcom.h>
> +#include <dt-bindings/dma/at91.h>
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/clock/microchip,lan966x.h>
> +
> +/ {
> +       model = "Microchip LAN966 family SoC";
> +       compatible = "microchip,lan966";
> +       interrupt-parent = <&gic>;
> +       #address-cells = <1>;
> +       #size-cells = <1>;
> +
> +       cpus {
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +
> +               cpu@0 {
> +                       device_type = "cpu";
> +                       compatible = "arm,cortex-a7";
> +                       clock-frequency = <600000000>;
> +                       reg = <0x0>;
> +               };
> +       };
> +
> +       clocks {
> +               sys_clk: sys_clk {
> +                       compatible = "fixed-clock";
> +                       #clock-cells = <0>;
> +                       clock-frequency = <162500000>;
> +               };
> +
> +               cpu_clk: cpu_clk {
> +                       compatible = "fixed-clock";
> +                       #clock-cells = <0>;
> +                       clock-frequency = <600000000>;
> +               };
> +
> +               ddr_clk: ddr_clk {
> +                       compatible = "fixed-clock";
> +                       #clock-cells = <0>;
> +                       clock-frequency = <300000000>;
> +               };
> +
> +               nic_clk: nic_clk {
> +                       compatible = "fixed-clock";
> +                       #clock-cells = <0>;
> +                       clock-frequency = <200000000>;
> +               };
> +       };
> +
> +       clks: clock-controller@e00c00a8 {
> +               compatible = "microchip,lan966x-gck";
> +               #clock-cells = <1>;
> +               clocks = <&cpu_clk>, <&ddr_clk>, <&sys_clk>;
> +               clock-names = "cpu", "ddr", "sys";
> +               reg = <0xe00c00a8 0x38>;
> +       };
> +
> +       timer {
> +               compatible = "arm,armv7-timer";
> +               interrupt-parent = <&gic>;
> +               interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +                            <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +                            <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +                            <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>;
> +               clock-frequency = <37500000>;
> +               arm,cpu-registers-not-fw-configured;
> +       };
> +
> +       soc {
> +               compatible = "simple-bus";
> +               #address-cells = <1>;
> +               #size-cells = <1>;
> +               ranges;
> +
> +               flx0: flexcom@e0040000 {
> +                       compatible = "atmel,sama5d2-flexcom";
> +                       reg = <0xe0040000 0x100>;
> +                       clocks = <&clks GCK_ID_FLEXCOM0>;
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0x0 0xe0040000 0x800>;
> +                       status = "disabled";
> +               };
> +
> +               flx1: flexcom@e0044000 {
> +                       compatible = "atmel,sama5d2-flexcom";
> +                       reg = <0xe0044000 0x100>;
> +                       clocks = <&clks GCK_ID_FLEXCOM1>;
> +                       #address-cells = <1>;
> +                       #size-cells = <1>;
> +                       ranges = <0x0 0xe0044000 0x800>;
> +                       status = "disabled";
> +               };
> +
> +               trng: trng@e0048000 {
> +                       compatible = "atmel,at91sam9g45-trng";
> +                       reg = <0xe0048000 0x100>;
> +                       clocks = <&nic_clk>;
> +               };
> +
> +               aes: aes@e004c000 {

Use generic names for nodes, so that we follow the dt node name recommendation.
Use aes: crypto@e004c000. you can find dt specification at
https://github.com/devicetree-org/devicetree-specification/releases/tag/v0.4-rc1

You can check
https://lore.kernel.org/lkml/20220208111225.234685-1-tudor.ambarus@microchip.com/
for reference. Also, please check other node names as well. On a quick look "trng"
should be replaced with "rng".

cheers,
ta
Michael Walle Feb. 9, 2022, 6:46 p.m. UTC | #2
Hi,

> +	clocks {
[..]
> +
> +		nic_clk: nic_clk {

What does nic_clk stand for? If I had to guess, it
has something to do with network. But..

> +			compatible = "fixed-clock";
> +			#clock-cells = <0>;
> +			clock-frequency = <200000000>;
> +		};
> +	};
> +
> +	clks: clock-controller@e00c00a8 {
> +		compatible = "microchip,lan966x-gck";
> +		#clock-cells = <1>;
> +		clocks = <&cpu_clk>, <&ddr_clk>, <&sys_clk>;
> +		clock-names = "cpu", "ddr", "sys";
> +		reg = <0xe00c00a8 0x38>;
> +	};
> +
> +	timer {
> +		compatible = "arm,armv7-timer";
> +		interrupt-parent = <&gic>;
> +		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>;
> +		clock-frequency = <37500000>;
> +		arm,cpu-registers-not-fw-configured;
> +	};
> +
> +	soc {
> +		compatible = "simple-bus";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		ranges;
> +
> +		flx0: flexcom@e0040000 {
> +			compatible = "atmel,sama5d2-flexcom";
> +			reg = <0xe0040000 0x100>;
> +			clocks = <&clks GCK_ID_FLEXCOM0>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			ranges = <0x0 0xe0040000 0x800>;
> +			status = "disabled";
> +		};
> +
> +		flx1: flexcom@e0044000 {
> +			compatible = "atmel,sama5d2-flexcom";
> +			reg = <0xe0044000 0x100>;
> +			clocks = <&clks GCK_ID_FLEXCOM1>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			ranges = <0x0 0xe0044000 0x800>;
> +			status = "disabled";
> +		};
> +
> +		trng: trng@e0048000 {
> +			compatible = "atmel,at91sam9g45-trng";
> +			reg = <0xe0048000 0x100>;
> +			clocks = <&nic_clk>;

.. it is used here..


> +		};
> +
> +		aes: aes@e004c000 {
> +			compatible = "atmel,at91sam9g46-aes";
> +			reg = <0xe004c000 0x100>;
> +			interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
> +			dmas = <&dma0 AT91_XDMAC_DT_PERID(13)>,
> +			       <&dma0 AT91_XDMAC_DT_PERID(12)>;
> +			dma-names = "rx", "tx";
> +			clocks = <&nic_clk>;

.. and here. and so on.

So, is it some kind of internal clock?

> +			interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> +		};
> +
> +		watchdog: watchdog@e0090000 {
> +			compatible = "snps,dw-wdt";
> +			reg = <0xe0090000 0x1000>;
> +			interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> +			clocks = <&nic_clk>;

Btw. can we disable all nodes by default and enable them
in the board dts files?
Kavyasree Kotagiri Feb. 10, 2022, 9:40 a.m. UTC | #3
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> Hi,
> 
> > +     clocks {
> [..]
> > +
> > +             nic_clk: nic_clk {
> 
> What does nic_clk stand for? If I had to guess, it
> has something to do with network. But..
> 
NIC clock is the clock used by AXI, AHB fabric and APB bridges which connects all the peripherals.
It is named so because the AXI fabric is based on NIC400 IP from ARM

> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <200000000>;
> > +             };
> > +     };
> > +
> > +     clks: clock-controller@e00c00a8 {
> > +             compatible = "microchip,lan966x-gck";
> > +             #clock-cells = <1>;
> > +             clocks = <&cpu_clk>, <&ddr_clk>, <&sys_clk>;
> > +             clock-names = "cpu", "ddr", "sys";
> > +             reg = <0xe00c00a8 0x38>;
> > +     };
> > +
> > +     timer {
> > +             compatible = "arm,armv7-timer";
> > +             interrupt-parent = <&gic>;
> > +             interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>;
> > +             clock-frequency = <37500000>;
> > +             arm,cpu-registers-not-fw-configured;
> > +     };
> > +
> > +     soc {
> > +             compatible = "simple-bus";
> > +             #address-cells = <1>;
> > +             #size-cells = <1>;
> > +             ranges;
> > +
> > +             flx0: flexcom@e0040000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0040000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM0>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0040000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             flx1: flexcom@e0044000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0044000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM1>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0044000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             trng: trng@e0048000 {
> > +                     compatible = "atmel,at91sam9g45-trng";
> > +                     reg = <0xe0048000 0x100>;
> > +                     clocks = <&nic_clk>;
> 
> .. it is used here..
> 
> 
> > +             };
> > +
> > +             aes: aes@e004c000 {
> > +                     compatible = "atmel,at91sam9g46-aes";
> > +                     reg = <0xe004c000 0x100>;
> > +                     interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
> > +                     dmas = <&dma0 AT91_XDMAC_DT_PERID(13)>,
> > +                            <&dma0 AT91_XDMAC_DT_PERID(12)>;
> > +                     dma-names = "rx", "tx";
> > +                     clocks = <&nic_clk>;
> 
> .. and here. and so on.
> 
> So, is it some kind of internal clock?
> 
> > +                     interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> > +             };
> > +
> > +             watchdog: watchdog@e0090000 {
> > +                     compatible = "snps,dw-wdt";
> > +                     reg = <0xe0090000 0x1000>;
> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> > +                     clocks = <&nic_clk>;
> 
> Btw. can we disable all nodes by default and enable them
> in the board dts files?
I would like to have only board specific nodes enabled in dts files and rest of them in dtsi file

Thanks,
Kavya
Michael Walle Feb. 10, 2022, 9:50 a.m. UTC | #4
Am 2022-02-10 10:40, schrieb Kavyasree.Kotagiri@microchip.com:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know 
>> the
>> content is safe

>> > +     clocks {
>> [..]
>> > +
>> > +             nic_clk: nic_clk {
>> 
>> What does nic_clk stand for? If I had to guess, it
>> has something to do with network. But..
>> 
> NIC clock is the clock used by AXI, AHB fabric and APB bridges which
> connects all the peripherals.
> It is named so because the AXI fabric is based on NIC400 IP from ARM

Ok, thanks for clarification.


>> > +             watchdog: watchdog@e0090000 {
>> > +                     compatible = "snps,dw-wdt";
>> > +                     reg = <0xe0090000 0x1000>;
>> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
>> > +                     clocks = <&nic_clk>;
>> 
>> Btw. can we disable all nodes by default and enable them
>> in the board dts files?
> I would like to have only board specific nodes enabled in dts files
> and rest of them in dtsi file

And how do you know which ones are board specific? E.g. I would like
to add our board which is also based on the lan9668. Maybe I don't
want a watchdog (or whatever node). Of course I could use

&watchdog {
   status = "disabled";
};

But IMHO opt-in is better. At least thats what we are doing for
the layerscape over on arm64.

-michael
Kavyasree Kotagiri Feb. 10, 2022, 11:52 a.m. UTC | #5
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> Am 2022-02-10 10:40, schrieb Kavyasree.Kotagiri@microchip.com:
> >> EXTERNAL EMAIL: Do not click links or open attachments unless you know
> >> the
> >> content is safe
> 
> >> > +     clocks {
> >> [..]
> >> > +
> >> > +             nic_clk: nic_clk {
> >>
> >> What does nic_clk stand for? If I had to guess, it
> >> has something to do with network. But..
> >>
> > NIC clock is the clock used by AXI, AHB fabric and APB bridges which
> > connects all the peripherals.
> > It is named so because the AXI fabric is based on NIC400 IP from ARM
> 
> Ok, thanks for clarification.
> 
> 
> >> > +             watchdog: watchdog@e0090000 {
> >> > +                     compatible = "snps,dw-wdt";
> >> > +                     reg = <0xe0090000 0x1000>;
> >> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> >> > +                     clocks = <&nic_clk>;
> >>
> >> Btw. can we disable all nodes by default and enable them
> >> in the board dts files?
> > I would like to have only board specific nodes enabled in dts files
> > and rest of them in dtsi file
> 
> And how do you know which ones are board specific? E.g. I would like
> to add our board which is also based on the lan9668. Maybe I don't
> want a watchdog (or whatever node). Of course I could use
> 
> &watchdog {
>    status = "disabled";
> };
> 
> But IMHO opt-in is better. At least thats what we are doing for
> the layerscape over on arm64.
> 
Basically, I am disabling only the nodes which have pinctrl settings in dtsi file
and enable in dts to make sure there are no conflicts on pins on the board.

> -michael
Michael Walle Feb. 10, 2022, 12:05 p.m. UTC | #6
Am 2022-02-10 12:52, schrieb Kavyasree.Kotagiri@microchip.com:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know 
>> the
>> content is safe
>> 
>> Am 2022-02-10 10:40, schrieb Kavyasree.Kotagiri@microchip.com:
>> >> EXTERNAL EMAIL: Do not click links or open attachments unless you know
>> >> the
>> >> content is safe
>> 
>> >> > +     clocks {
>> >> [..]
>> >> > +
>> >> > +             nic_clk: nic_clk {
>> >>
>> >> What does nic_clk stand for? If I had to guess, it
>> >> has something to do with network. But..
>> >>
>> > NIC clock is the clock used by AXI, AHB fabric and APB bridges which
>> > connects all the peripherals.
>> > It is named so because the AXI fabric is based on NIC400 IP from ARM
>> 
>> Ok, thanks for clarification.
>> 
>> 
>> >> > +             watchdog: watchdog@e0090000 {
>> >> > +                     compatible = "snps,dw-wdt";
>> >> > +                     reg = <0xe0090000 0x1000>;
>> >> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
>> >> > +                     clocks = <&nic_clk>;
>> >>
>> >> Btw. can we disable all nodes by default and enable them
>> >> in the board dts files?
>> > I would like to have only board specific nodes enabled in dts files
>> > and rest of them in dtsi file
>> 
>> And how do you know which ones are board specific? E.g. I would like
>> to add our board which is also based on the lan9668. Maybe I don't
>> want a watchdog (or whatever node). Of course I could use
>> 
>> &watchdog {
>>    status = "disabled";
>> };
>> 
>> But IMHO opt-in is better. At least thats what we are doing for
>> the layerscape over on arm64.
>> 
> Basically, I am disabling only the nodes which have pinctrl settings
> in dtsi file
> and enable in dts to make sure there are no conflicts on pins on the 
> board.

Thats not what I'm asking. I would like to see *optional* nodes
disabled by default. Whether the watchdog is optional might be
debatable, but what about the usb controller and the qspi
controller? They don't have shared pins AFAIK, so according
to your rule, they will be enabled by default and each board
which doesn't have anything connected on these pins would have
to disabled it.

Please keep in mind that this .dtsi will also be used by boards
not manufactured by microchip.

-michael
Michael Walle Feb. 10, 2022, 12:37 p.m. UTC | #7
Hi,

>  arch/arm/boot/dts/Makefile            |   2 +
>  arch/arm/boot/dts/lan966x.dtsi        | 237 ++++++++++++++++++++++++++
>  arch/arm/boot/dts/lan966x_pcb8291.dts |  61 +++++++

Please rename this to lan966x-pcb8921.dts. All (most?) of the device
tree files use the dash as a seperator between the SoC and the board.

> diff --git a/arch/arm/boot/dts/lan966x.dtsi b/arch/arm/boot/dts/lan966x.dtsi
> new file mode 100644
> index 000000000000..91ee9e0684f4
> --- /dev/null
> +++ b/arch/arm/boot/dts/lan966x.dtsi
> @@ -0,0 +1,237 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * lan966x.dtsi - Device Tree Include file for Microchip LAN966 family SoC
> + *
> + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries
> + *
> + * Author: Kavyasree Kotagiri <kavyasree.kotagiri@microchip.com>
> + *
> + */
> +
> +#include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/interrupt-controller/arm-gic.h>
> +#include <dt-bindings/mfd/atmel-flexcom.h>
> +#include <dt-bindings/dma/at91.h>
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/clock/microchip,lan966x.h>
> +
> +/ {
> +	model = "Microchip LAN966 family SoC";
> +	compatible = "microchip,lan966";

Undocumented compatible string. I see that the actual board
is documented in
  Documentation/devicetree/bindings/arm/atmel-at91.yaml

But as Arnd mentioned, this doesn't really make sense here
as you have to override it in the actual board dts anyway.

> +	interrupt-parent = <&gic>;
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +
> +	cpus {
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +
> +		cpu@0 {
> +			device_type = "cpu";
> +			compatible = "arm,cortex-a7";
> +			clock-frequency = <600000000>;
> +			reg = <0x0>;
> +		};
> +	};
> +
> +	clocks {
> +		sys_clk: sys_clk {
> +			compatible = "fixed-clock";
> +			#clock-cells = <0>;
> +			clock-frequency = <162500000>;
> +		};
> +
> +		cpu_clk: cpu_clk {
> +			compatible = "fixed-clock";
> +			#clock-cells = <0>;
> +			clock-frequency = <600000000>;
> +		};
> +
> +		ddr_clk: ddr_clk {
> +			compatible = "fixed-clock";
> +			#clock-cells = <0>;
> +			clock-frequency = <300000000>;
> +		};
> +
> +		nic_clk: nic_clk {
> +			compatible = "fixed-clock";
> +			#clock-cells = <0>;
> +			clock-frequency = <200000000>;
> +		};
> +	};
> +
> +	clks: clock-controller@e00c00a8 {
> +		compatible = "microchip,lan966x-gck";
> +		#clock-cells = <1>;
> +		clocks = <&cpu_clk>, <&ddr_clk>, <&sys_clk>;
> +		clock-names = "cpu", "ddr", "sys";
> +		reg = <0xe00c00a8 0x38>;
> +	};
> +
> +	timer {
> +		compatible = "arm,armv7-timer";
> +		interrupt-parent = <&gic>;
> +		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
> +			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>;
> +		clock-frequency = <37500000>;
> +		arm,cpu-registers-not-fw-configured;
> +	};
> +
> +	soc {
> +		compatible = "simple-bus";
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		ranges;
> +
> +		flx0: flexcom@e0040000 {
> +			compatible = "atmel,sama5d2-flexcom";

Are these expected to be exactly the same between the lan966x and the
sama5d2 or do you need something like

compatible = "microchip,lan966x-flexcom", "atmel,sama5d2-flexcom";

for the case when you need to make SoC specific settings/workarounds?

> +			reg = <0xe0040000 0x100>;
> +			clocks = <&clks GCK_ID_FLEXCOM0>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			ranges = <0x0 0xe0040000 0x800>;
> +			status = "disabled";
> +		};
> +
> +		flx1: flexcom@e0044000 {
> +			compatible = "atmel,sama5d2-flexcom";
> +			reg = <0xe0044000 0x100>;
> +			clocks = <&clks GCK_ID_FLEXCOM1>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			ranges = <0x0 0xe0044000 0x800>;
> +			status = "disabled";
> +		};
> +
> +		trng: trng@e0048000 {

Tudor already mentioned this..

> +			compatible = "atmel,at91sam9g45-trng";
> +			reg = <0xe0048000 0x100>;
> +			clocks = <&nic_clk>;
> +		};
> +
> +		aes: aes@e004c000 {

.. and this ..

> +			compatible = "atmel,at91sam9g46-aes";
> +			reg = <0xe004c000 0x100>;
> +			interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
> +			dmas = <&dma0 AT91_XDMAC_DT_PERID(13)>,
> +			       <&dma0 AT91_XDMAC_DT_PERID(12)>;
> +			dma-names = "rx", "tx";
> +			clocks = <&nic_clk>;
> +			clock-names = "aes_clk";
> +		};
> +
> +		flx2: flexcom@e0060000 {
> +			compatible = "atmel,sama5d2-flexcom";
> +			reg = <0xe0060000 0x100>;
> +			clocks = <&clks GCK_ID_FLEXCOM2>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			ranges = <0x0 0xe0060000 0x800>;
> +			status = "disabled";
> +		};
> +
> +		flx3: flexcom@e0064000 {
> +			compatible = "atmel,sama5d2-flexcom";
> +			reg = <0xe0064000 0x100>;
> +			clocks = <&clks GCK_ID_FLEXCOM3>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			ranges = <0x0 0xe0064000 0x800>;
> +			status = "disabled";
> +
> +			usart3: serial@200 {
> +				compatible = "atmel,at91sam9260-usart";
> +				reg = <0x200 0x200>;
> +				interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
> +				clocks = <&nic_clk>;
> +				clock-names = "usart";
> +				atmel,fifo-size = <32>;
> +				status = "disabled";
> +			};
> +		};
> +
> +		dma0: dma-controller@e0068000 {
> +			compatible = "microchip,sama7g5-dma";
> +			reg = <0xe0068000 0x1000>;
> +			interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
> +			#dma-cells = <1>;
> +			clocks = <&nic_clk>;
> +			clock-names = "dma_clk";
> +		};
> +
> +		sha: sha@e006c000 {

.. and this one.

> +			compatible = "atmel,at91sam9g46-sha";
> +			reg = <0xe006c000 0xec>;
> +			interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
> +			dmas = <&dma0 AT91_XDMAC_DT_PERID(14)>;
> +			dma-names = "tx";
> +			clocks = <&nic_clk>;
> +			clock-names = "sha_clk";
> +		};
> +
> +		flx4: flexcom@e0070000 {
> +			compatible = "atmel,sama5d2-flexcom";
> +			reg = <0xe0070000 0x100>;
> +			clocks = <&clks GCK_ID_FLEXCOM4>;
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +			ranges = <0x0 0xe0070000 0x800>;
> +			status = "disabled";
> +		};
> +
> +		timer0: timer@e008c000 {
> +			compatible = "snps,dw-apb-timer";
> +			reg = <0xe008c000 0x400>;
> +			clocks = <&nic_clk>;
> +			clock-names = "timer";
> +			interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> +		};
> +
> +		watchdog: watchdog@e0090000 {
> +			compatible = "snps,dw-wdt";
> +			reg = <0xe0090000 0x1000>;
> +			interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> +			clocks = <&nic_clk>;
> +		};
> +
> +		can0: can@e081c000 {
> +			compatible = "bosch,m_can";
> +			reg = <0xe081c000 0xfc>, <0x00100000 0x4000>;
> +			reg-names = "m_can", "message_ram";
> +			interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
> +				     <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
> +			interrupt-names = "int0", "int1";
> +			clocks = <&clks GCK_ID_MCAN0>, <&clks GCK_ID_MCAN0>;
> +			clock-names = "hclk", "cclk";
> +			assigned-clocks = <&clks GCK_ID_MCAN0>;
> +			assigned-clock-rates = <40000000>;
> +			bosch,mram-cfg = <0x0 0 0 64 0 0 32 32>;
> +			status = "disabled";
> +		};
> +
> +		gpio: pinctrl@e2004064 {
> +			compatible = "microchip,lan966x-pinctrl";
> +			reg = <0xe2004064 0xb4>,
> +			    <0xe2010024 0x138>;
> +			gpio-controller;
> +			#gpio-cells = <2>;
> +			gpio-ranges = <&gpio 0 0 78>;
> +			interrupt-controller;
> +			interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> +			#interrupt-cells = <2>;
> +		};
> +
> +		gic: interrupt-controller@e8c11000 {
> +			compatible = "arm,gic-400", "arm,cortex-a7-gic";
> +			#interrupt-cells = <3>;
> +			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
> +			interrupt-controller;
> +			reg = <0xe8c11000 0x1000>,
> +			      <0xe8c12000 0x2000>,
> +			      <0xe8c14000 0x2000>,
> +			      <0xe8c16000 0x2000>;
> +		};
> +	};
> +};

Overall most of the referenced bindings lack a proper yaml version :/

-michael
Kavyasree Kotagiri Feb. 10, 2022, 1:02 p.m. UTC | #8
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> Hi,
> 
> >  arch/arm/boot/dts/Makefile            |   2 +
> >  arch/arm/boot/dts/lan966x.dtsi        | 237 ++++++++++++++++++++++++++
> >  arch/arm/boot/dts/lan966x_pcb8291.dts |  61 +++++++
> 
> Please rename this to lan966x-pcb8921.dts. All (most?) of the device
> tree files use the dash as a seperator between the SoC and the board.
> 
Ok, I will change in my v6. 
Please have a look at my v5 patch where I already addressed all the node naming changes.
 
> > diff --git a/arch/arm/boot/dts/lan966x.dtsi
> b/arch/arm/boot/dts/lan966x.dtsi
> > new file mode 100644
> > index 000000000000..91ee9e0684f4
> > --- /dev/null
> > +++ b/arch/arm/boot/dts/lan966x.dtsi
> > @@ -0,0 +1,237 @@
> > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> > +/*
> > + * lan966x.dtsi - Device Tree Include file for Microchip LAN966 family SoC
> > + *
> > + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries
> > + *
> > + * Author: Kavyasree Kotagiri <kavyasree.kotagiri@microchip.com>
> > + *
> > + */
> > +
> > +#include <dt-bindings/interrupt-controller/irq.h>
> > +#include <dt-bindings/interrupt-controller/arm-gic.h>
> > +#include <dt-bindings/mfd/atmel-flexcom.h>
> > +#include <dt-bindings/dma/at91.h>
> > +#include <dt-bindings/gpio/gpio.h>
> > +#include <dt-bindings/clock/microchip,lan966x.h>
> > +
> > +/ {
> > +     model = "Microchip LAN966 family SoC";
> > +     compatible = "microchip,lan966";
> 
> Undocumented compatible string. I see that the actual board
> is documented in
>   Documentation/devicetree/bindings/arm/atmel-at91.yaml
> 
> But as Arnd mentioned, this doesn't really make sense here
> as you have to override it in the actual board dts anyway.
> 
> > +     interrupt-parent = <&gic>;
> > +     #address-cells = <1>;
> > +     #size-cells = <1>;
> > +
> > +     cpus {
> > +             #address-cells = <1>;
> > +             #size-cells = <0>;
> > +
> > +             cpu@0 {
> > +                     device_type = "cpu";
> > +                     compatible = "arm,cortex-a7";
> > +                     clock-frequency = <600000000>;
> > +                     reg = <0x0>;
> > +             };
> > +     };
> > +
> > +     clocks {
> > +             sys_clk: sys_clk {
> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <162500000>;
> > +             };
> > +
> > +             cpu_clk: cpu_clk {
> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <600000000>;
> > +             };
> > +
> > +             ddr_clk: ddr_clk {
> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <300000000>;
> > +             };
> > +
> > +             nic_clk: nic_clk {
> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <200000000>;
> > +             };
> > +     };
> > +
> > +     clks: clock-controller@e00c00a8 {
> > +             compatible = "microchip,lan966x-gck";
> > +             #clock-cells = <1>;
> > +             clocks = <&cpu_clk>, <&ddr_clk>, <&sys_clk>;
> > +             clock-names = "cpu", "ddr", "sys";
> > +             reg = <0xe00c00a8 0x38>;
> > +     };
> > +
> > +     timer {
> > +             compatible = "arm,armv7-timer";
> > +             interrupt-parent = <&gic>;
> > +             interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>;
> > +             clock-frequency = <37500000>;
> > +             arm,cpu-registers-not-fw-configured;
> > +     };
> > +
> > +     soc {
> > +             compatible = "simple-bus";
> > +             #address-cells = <1>;
> > +             #size-cells = <1>;
> > +             ranges;
> > +
> > +             flx0: flexcom@e0040000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> 
> Are these expected to be exactly the same between the lan966x and the
> sama5d2 or do you need something like
> 
> compatible = "microchip,lan966x-flexcom", "atmel,sama5d2-flexcom";
> 
> for the case when you need to make SoC specific settings/workarounds?
> 
> > +                     reg = <0xe0040000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM0>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0040000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             flx1: flexcom@e0044000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0044000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM1>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0044000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             trng: trng@e0048000 {
> 
> Tudor already mentioned this..
> 
> > +                     compatible = "atmel,at91sam9g45-trng";
> > +                     reg = <0xe0048000 0x100>;
> > +                     clocks = <&nic_clk>;
> > +             };
> > +
> > +             aes: aes@e004c000 {
> 
> .. and this ..
> 
> > +                     compatible = "atmel,at91sam9g46-aes";
> > +                     reg = <0xe004c000 0x100>;
> > +                     interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
> > +                     dmas = <&dma0 AT91_XDMAC_DT_PERID(13)>,
> > +                            <&dma0 AT91_XDMAC_DT_PERID(12)>;
> > +                     dma-names = "rx", "tx";
> > +                     clocks = <&nic_clk>;
> > +                     clock-names = "aes_clk";
> > +             };
> > +
> > +             flx2: flexcom@e0060000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0060000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM2>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0060000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             flx3: flexcom@e0064000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0064000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM3>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0064000 0x800>;
> > +                     status = "disabled";
> > +
> > +                     usart3: serial@200 {
> > +                             compatible = "atmel,at91sam9260-usart";
> > +                             reg = <0x200 0x200>;
> > +                             interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
> > +                             clocks = <&nic_clk>;
> > +                             clock-names = "usart";
> > +                             atmel,fifo-size = <32>;
> > +                             status = "disabled";
> > +                     };
> > +             };
> > +
> > +             dma0: dma-controller@e0068000 {
> > +                     compatible = "microchip,sama7g5-dma";
> > +                     reg = <0xe0068000 0x1000>;
> > +                     interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
> > +                     #dma-cells = <1>;
> > +                     clocks = <&nic_clk>;
> > +                     clock-names = "dma_clk";
> > +             };
> > +
> > +             sha: sha@e006c000 {
> 
> .. and this one.
> 
> > +                     compatible = "atmel,at91sam9g46-sha";
> > +                     reg = <0xe006c000 0xec>;
> > +                     interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
> > +                     dmas = <&dma0 AT91_XDMAC_DT_PERID(14)>;
> > +                     dma-names = "tx";
> > +                     clocks = <&nic_clk>;
> > +                     clock-names = "sha_clk";
> > +             };
> > +
> > +             flx4: flexcom@e0070000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0070000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM4>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0070000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             timer0: timer@e008c000 {
> > +                     compatible = "snps,dw-apb-timer";
> > +                     reg = <0xe008c000 0x400>;
> > +                     clocks = <&nic_clk>;
> > +                     clock-names = "timer";
> > +                     interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> > +             };
> > +
> > +             watchdog: watchdog@e0090000 {
> > +                     compatible = "snps,dw-wdt";
> > +                     reg = <0xe0090000 0x1000>;
> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> > +                     clocks = <&nic_clk>;
> > +             };
> > +
> > +             can0: can@e081c000 {
> > +                     compatible = "bosch,m_can";
> > +                     reg = <0xe081c000 0xfc>, <0x00100000 0x4000>;
> > +                     reg-names = "m_can", "message_ram";
> > +                     interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
> > +                                  <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
> > +                     interrupt-names = "int0", "int1";
> > +                     clocks = <&clks GCK_ID_MCAN0>, <&clks GCK_ID_MCAN0>;
> > +                     clock-names = "hclk", "cclk";
> > +                     assigned-clocks = <&clks GCK_ID_MCAN0>;
> > +                     assigned-clock-rates = <40000000>;
> > +                     bosch,mram-cfg = <0x0 0 0 64 0 0 32 32>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             gpio: pinctrl@e2004064 {
> > +                     compatible = "microchip,lan966x-pinctrl";
> > +                     reg = <0xe2004064 0xb4>,
> > +                         <0xe2010024 0x138>;
> > +                     gpio-controller;
> > +                     #gpio-cells = <2>;
> > +                     gpio-ranges = <&gpio 0 0 78>;
> > +                     interrupt-controller;
> > +                     interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> > +                     #interrupt-cells = <2>;
> > +             };
> > +
> > +             gic: interrupt-controller@e8c11000 {
> > +                     compatible = "arm,gic-400", "arm,cortex-a7-gic";
> > +                     #interrupt-cells = <3>;
> > +                     interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
> > +                     interrupt-controller;
> > +                     reg = <0xe8c11000 0x1000>,
> > +                           <0xe8c12000 0x2000>,
> > +                           <0xe8c14000 0x2000>,
> > +                           <0xe8c16000 0x2000>;
> > +             };
> > +     };
> > +};
> 
> Overall most of the referenced bindings lack a proper yaml version :/
> 
> -michael
Michael Walle Feb. 10, 2022, 1:33 p.m. UTC | #9
Am 2022-02-10 14:02, schrieb Kavyasree.Kotagiri@microchip.com:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know 
>> the
>> content is safe
>> 
>> Hi,
>> 
>> >  arch/arm/boot/dts/Makefile            |   2 +
>> >  arch/arm/boot/dts/lan966x.dtsi        | 237 ++++++++++++++++++++++++++
>> >  arch/arm/boot/dts/lan966x_pcb8291.dts |  61 +++++++
>> 
>> Please rename this to lan966x-pcb8921.dts. All (most?) of the device
>> tree files use the dash as a seperator between the SoC and the board.
>> 
> Ok, I will change in my v6.
> Please have a look at my v5 patch where I already addressed all the
> node naming changes.

My comments besides the renaming still apply.

-michael
Kavyasree Kotagiri Feb. 18, 2022, 10:55 a.m. UTC | #10
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> Hi,
> 
> >  arch/arm/boot/dts/Makefile            |   2 +
> >  arch/arm/boot/dts/lan966x.dtsi        | 237 ++++++++++++++++++++++++++
> >  arch/arm/boot/dts/lan966x_pcb8291.dts |  61 +++++++
> 
> Please rename this to lan966x-pcb8921.dts. All (most?) of the device
> tree files use the dash as a seperator between the SoC and the board.
> 
Ok. I will change it.

> > diff --git a/arch/arm/boot/dts/lan966x.dtsi
> b/arch/arm/boot/dts/lan966x.dtsi
> > new file mode 100644
> > index 000000000000..91ee9e0684f4
> > --- /dev/null
> > +++ b/arch/arm/boot/dts/lan966x.dtsi
> > @@ -0,0 +1,237 @@
> > +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> > +/*
> > + * lan966x.dtsi - Device Tree Include file for Microchip LAN966 family SoC
> > + *
> > + * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries
> > + *
> > + * Author: Kavyasree Kotagiri <kavyasree.kotagiri@microchip.com>
> > + *
> > + */
> > +
> > +#include <dt-bindings/interrupt-controller/irq.h>
> > +#include <dt-bindings/interrupt-controller/arm-gic.h>
> > +#include <dt-bindings/mfd/atmel-flexcom.h>
> > +#include <dt-bindings/dma/at91.h>
> > +#include <dt-bindings/gpio/gpio.h>
> > +#include <dt-bindings/clock/microchip,lan966x.h>
> > +
> > +/ {
> > +     model = "Microchip LAN966 family SoC";
> > +     compatible = "microchip,lan966";
> 
> Undocumented compatible string. I see that the actual board
> is documented in
>   Documentation/devicetree/bindings/arm/atmel-at91.yaml
> 
> But as Arnd mentioned, this doesn't really make sense here
> as you have to override it in the actual board dts anyway.
> 
> > +     interrupt-parent = <&gic>;
> > +     #address-cells = <1>;
> > +     #size-cells = <1>;
> > +
> > +     cpus {
> > +             #address-cells = <1>;
> > +             #size-cells = <0>;
> > +
> > +             cpu@0 {
> > +                     device_type = "cpu";
> > +                     compatible = "arm,cortex-a7";
> > +                     clock-frequency = <600000000>;
> > +                     reg = <0x0>;
> > +             };
> > +     };
> > +
> > +     clocks {
> > +             sys_clk: sys_clk {
> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <162500000>;
> > +             };
> > +
> > +             cpu_clk: cpu_clk {
> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <600000000>;
> > +             };
> > +
> > +             ddr_clk: ddr_clk {
> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <300000000>;
> > +             };
> > +
> > +             nic_clk: nic_clk {
> > +                     compatible = "fixed-clock";
> > +                     #clock-cells = <0>;
> > +                     clock-frequency = <200000000>;
> > +             };
> > +     };
> > +
> > +     clks: clock-controller@e00c00a8 {
> > +             compatible = "microchip,lan966x-gck";
> > +             #clock-cells = <1>;
> > +             clocks = <&cpu_clk>, <&ddr_clk>, <&sys_clk>;
> > +             clock-names = "cpu", "ddr", "sys";
> > +             reg = <0xe00c00a8 0x38>;
> > +     };
> > +
> > +     timer {
> > +             compatible = "arm,armv7-timer";
> > +             interrupt-parent = <&gic>;
> > +             interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>,
> > +                          <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) |
> IRQ_TYPE_LEVEL_LOW)>;
> > +             clock-frequency = <37500000>;
> > +             arm,cpu-registers-not-fw-configured;
> > +     };
> > +
> > +     soc {
> > +             compatible = "simple-bus";
> > +             #address-cells = <1>;
> > +             #size-cells = <1>;
> > +             ranges;
> > +
> > +             flx0: flexcom@e0040000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> 
> Are these expected to be exactly the same between the lan966x and the
> sama5d2 or do you need something like
> 
> compatible = "microchip,lan966x-flexcom", "atmel,sama5d2-flexcom";
> 
> for the case when you need to make SoC specific settings/workarounds?
> 
Yes, it is the same. No workarounds required.

> > +                     reg = <0xe0040000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM0>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0040000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             flx1: flexcom@e0044000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0044000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM1>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0044000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             trng: trng@e0048000 {
> 
> Tudor already mentioned this..
> 
> > +                     compatible = "atmel,at91sam9g45-trng";
> > +                     reg = <0xe0048000 0x100>;
> > +                     clocks = <&nic_clk>;
> > +             };
> > +
> > +             aes: aes@e004c000 {
> 
> .. and this ..
> 
> > +                     compatible = "atmel,at91sam9g46-aes";
> > +                     reg = <0xe004c000 0x100>;
> > +                     interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
> > +                     dmas = <&dma0 AT91_XDMAC_DT_PERID(13)>,
> > +                            <&dma0 AT91_XDMAC_DT_PERID(12)>;
> > +                     dma-names = "rx", "tx";
> > +                     clocks = <&nic_clk>;
> > +                     clock-names = "aes_clk";
> > +             };
> > +
> > +             flx2: flexcom@e0060000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0060000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM2>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0060000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             flx3: flexcom@e0064000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0064000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM3>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0064000 0x800>;
> > +                     status = "disabled";
> > +
> > +                     usart3: serial@200 {
> > +                             compatible = "atmel,at91sam9260-usart";
> > +                             reg = <0x200 0x200>;
> > +                             interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
> > +                             clocks = <&nic_clk>;
> > +                             clock-names = "usart";
> > +                             atmel,fifo-size = <32>;
> > +                             status = "disabled";
> > +                     };
> > +             };
> > +
> > +             dma0: dma-controller@e0068000 {
> > +                     compatible = "microchip,sama7g5-dma";
> > +                     reg = <0xe0068000 0x1000>;
> > +                     interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
> > +                     #dma-cells = <1>;
> > +                     clocks = <&nic_clk>;
> > +                     clock-names = "dma_clk";
> > +             };
> > +
> > +             sha: sha@e006c000 {
> 
> .. and this one.
> 
> > +                     compatible = "atmel,at91sam9g46-sha";
> > +                     reg = <0xe006c000 0xec>;
> > +                     interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
> > +                     dmas = <&dma0 AT91_XDMAC_DT_PERID(14)>;
> > +                     dma-names = "tx";
> > +                     clocks = <&nic_clk>;
> > +                     clock-names = "sha_clk";
> > +             };
> > +
> > +             flx4: flexcom@e0070000 {
> > +                     compatible = "atmel,sama5d2-flexcom";
> > +                     reg = <0xe0070000 0x100>;
> > +                     clocks = <&clks GCK_ID_FLEXCOM4>;
> > +                     #address-cells = <1>;
> > +                     #size-cells = <1>;
> > +                     ranges = <0x0 0xe0070000 0x800>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             timer0: timer@e008c000 {
> > +                     compatible = "snps,dw-apb-timer";
> > +                     reg = <0xe008c000 0x400>;
> > +                     clocks = <&nic_clk>;
> > +                     clock-names = "timer";
> > +                     interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
> > +             };
> > +
> > +             watchdog: watchdog@e0090000 {
> > +                     compatible = "snps,dw-wdt";
> > +                     reg = <0xe0090000 0x1000>;
> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> > +                     clocks = <&nic_clk>;
> > +             };
> > +
> > +             can0: can@e081c000 {
> > +                     compatible = "bosch,m_can";
> > +                     reg = <0xe081c000 0xfc>, <0x00100000 0x4000>;
> > +                     reg-names = "m_can", "message_ram";
> > +                     interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
> > +                                  <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
> > +                     interrupt-names = "int0", "int1";
> > +                     clocks = <&clks GCK_ID_MCAN0>, <&clks GCK_ID_MCAN0>;
> > +                     clock-names = "hclk", "cclk";
> > +                     assigned-clocks = <&clks GCK_ID_MCAN0>;
> > +                     assigned-clock-rates = <40000000>;
> > +                     bosch,mram-cfg = <0x0 0 0 64 0 0 32 32>;
> > +                     status = "disabled";
> > +             };
> > +
> > +             gpio: pinctrl@e2004064 {
> > +                     compatible = "microchip,lan966x-pinctrl";
> > +                     reg = <0xe2004064 0xb4>,
> > +                         <0xe2010024 0x138>;
> > +                     gpio-controller;
> > +                     #gpio-cells = <2>;
> > +                     gpio-ranges = <&gpio 0 0 78>;
> > +                     interrupt-controller;
> > +                     interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
> > +                     #interrupt-cells = <2>;
> > +             };
> > +
> > +             gic: interrupt-controller@e8c11000 {
> > +                     compatible = "arm,gic-400", "arm,cortex-a7-gic";
> > +                     #interrupt-cells = <3>;
> > +                     interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
> > +                     interrupt-controller;
> > +                     reg = <0xe8c11000 0x1000>,
> > +                           <0xe8c12000 0x2000>,
> > +                           <0xe8c14000 0x2000>,
> > +                           <0xe8c16000 0x2000>;
> > +             };
> > +     };
> > +};
> 
> Overall most of the referenced bindings lack a proper yaml version :/
> 
> -michael
Kavyasree Kotagiri Feb. 18, 2022, 12:28 p.m. UTC | #11
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> Am 2022-02-10 12:52, schrieb Kavyasree.Kotagiri@microchip.com:
> >> EXTERNAL EMAIL: Do not click links or open attachments unless you know
> >> the
> >> content is safe
> >>
> >> Am 2022-02-10 10:40, schrieb Kavyasree.Kotagiri@microchip.com:
> >> >> EXTERNAL EMAIL: Do not click links or open attachments unless you
> know
> >> >> the
> >> >> content is safe
> >>
> >> >> > +     clocks {
> >> >> [..]
> >> >> > +
> >> >> > +             nic_clk: nic_clk {
> >> >>
> >> >> What does nic_clk stand for? If I had to guess, it
> >> >> has something to do with network. But..
> >> >>
> >> > NIC clock is the clock used by AXI, AHB fabric and APB bridges which
> >> > connects all the peripherals.
> >> > It is named so because the AXI fabric is based on NIC400 IP from ARM
> >>
> >> Ok, thanks for clarification.
> >>
> >>
> >> >> > +             watchdog: watchdog@e0090000 {
> >> >> > +                     compatible = "snps,dw-wdt";
> >> >> > +                     reg = <0xe0090000 0x1000>;
> >> >> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> >> >> > +                     clocks = <&nic_clk>;
> >> >>
> >> >> Btw. can we disable all nodes by default and enable them
> >> >> in the board dts files?
> >> > I would like to have only board specific nodes enabled in dts files
> >> > and rest of them in dtsi file
> >>
> >> And how do you know which ones are board specific? E.g. I would like
> >> to add our board which is also based on the lan9668. Maybe I don't
> >> want a watchdog (or whatever node). Of course I could use
> >>
> >> &watchdog {
> >>    status = "disabled";
> >> };
> >>
> >> But IMHO opt-in is better. At least thats what we are doing for
> >> the layerscape over on arm64.
> >>
> > Basically, I am disabling only the nodes which have pinctrl settings
> > in dtsi file
> > and enable in dts to make sure there are no conflicts on pins on the
> > board.
> 
> Thats not what I'm asking. I would like to see *optional* nodes
> disabled by default. Whether the watchdog is optional might be
> debatable, but what about the usb controller and the qspi
> controller? They don't have shared pins AFAIK, so according
> to your rule, they will be enabled by default and each board
> which doesn't have anything connected on these pins would have
> to disabled it.
> 
> Please keep in mind that this .dtsi will also be used by boards
> not manufactured by microchip.
> 
I agree with you - "disabling optional nodes in dtsi"
I have gone through all the nodes.
Confirmed and moved enabling optional node watchdog
to dts file.

> -michael
Michael Walle Feb. 18, 2022, 12:32 p.m. UTC | #12
Am 2022-02-18 13:28, schrieb Kavyasree.Kotagiri@microchip.com:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know 
>> the
>> content is safe
>> 
>> Am 2022-02-10 12:52, schrieb Kavyasree.Kotagiri@microchip.com:
>> >> EXTERNAL EMAIL: Do not click links or open attachments unless you know
>> >> the
>> >> content is safe
>> >>
>> >> Am 2022-02-10 10:40, schrieb Kavyasree.Kotagiri@microchip.com:
>> >> >> EXTERNAL EMAIL: Do not click links or open attachments unless you
>> know
>> >> >> the
>> >> >> content is safe
>> >>
>> >> >> > +     clocks {
>> >> >> [..]
>> >> >> > +
>> >> >> > +             nic_clk: nic_clk {
>> >> >>
>> >> >> What does nic_clk stand for? If I had to guess, it
>> >> >> has something to do with network. But..
>> >> >>
>> >> > NIC clock is the clock used by AXI, AHB fabric and APB bridges which
>> >> > connects all the peripherals.
>> >> > It is named so because the AXI fabric is based on NIC400 IP from ARM
>> >>
>> >> Ok, thanks for clarification.
>> >>
>> >>
>> >> >> > +             watchdog: watchdog@e0090000 {
>> >> >> > +                     compatible = "snps,dw-wdt";
>> >> >> > +                     reg = <0xe0090000 0x1000>;
>> >> >> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
>> >> >> > +                     clocks = <&nic_clk>;
>> >> >>
>> >> >> Btw. can we disable all nodes by default and enable them
>> >> >> in the board dts files?
>> >> > I would like to have only board specific nodes enabled in dts files
>> >> > and rest of them in dtsi file
>> >>
>> >> And how do you know which ones are board specific? E.g. I would like
>> >> to add our board which is also based on the lan9668. Maybe I don't
>> >> want a watchdog (or whatever node). Of course I could use
>> >>
>> >> &watchdog {
>> >>    status = "disabled";
>> >> };
>> >>
>> >> But IMHO opt-in is better. At least thats what we are doing for
>> >> the layerscape over on arm64.
>> >>
>> > Basically, I am disabling only the nodes which have pinctrl settings
>> > in dtsi file
>> > and enable in dts to make sure there are no conflicts on pins on the
>> > board.
>> 
>> Thats not what I'm asking. I would like to see *optional* nodes
>> disabled by default. Whether the watchdog is optional might be
>> debatable, but what about the usb controller and the qspi
>> controller? They don't have shared pins AFAIK, so according
>> to your rule, they will be enabled by default and each board
>> which doesn't have anything connected on these pins would have
>> to disabled it.
>> 
>> Please keep in mind that this .dtsi will also be used by boards
>> not manufactured by microchip.
>> 
> I agree with you - "disabling optional nodes in dtsi"
> I have gone through all the nodes.
> Confirmed and moved enabling optional node watchdog
> to dts file.

Great, I just wanted to get to an agreement how the optional nodes
should be handled. If it turns out, some are still optional or
some aren't. It is easy to just mark them disabled and enable them
in the board dts files in a later patch.

-michael
Kavyasree Kotagiri Feb. 21, 2022, 5:44 a.m. UTC | #13
> EXTERNAL EMAIL: Do not click links or open attachments unless you know the
> content is safe
> 
> Am 2022-02-18 13:28, schrieb Kavyasree.Kotagiri@microchip.com:
> >> EXTERNAL EMAIL: Do not click links or open attachments unless you know
> >> the
> >> content is safe
> >>
> >> Am 2022-02-10 12:52, schrieb Kavyasree.Kotagiri@microchip.com:
> >> >> EXTERNAL EMAIL: Do not click links or open attachments unless you
> know
> >> >> the
> >> >> content is safe
> >> >>
> >> >> Am 2022-02-10 10:40, schrieb Kavyasree.Kotagiri@microchip.com:
> >> >> >> EXTERNAL EMAIL: Do not click links or open attachments unless you
> >> know
> >> >> >> the
> >> >> >> content is safe
> >> >>
> >> >> >> > +     clocks {
> >> >> >> [..]
> >> >> >> > +
> >> >> >> > +             nic_clk: nic_clk {
> >> >> >>
> >> >> >> What does nic_clk stand for? If I had to guess, it
> >> >> >> has something to do with network. But..
> >> >> >>
> >> >> > NIC clock is the clock used by AXI, AHB fabric and APB bridges which
> >> >> > connects all the peripherals.
> >> >> > It is named so because the AXI fabric is based on NIC400 IP from ARM
> >> >>
> >> >> Ok, thanks for clarification.
> >> >>
> >> >>
> >> >> >> > +             watchdog: watchdog@e0090000 {
> >> >> >> > +                     compatible = "snps,dw-wdt";
> >> >> >> > +                     reg = <0xe0090000 0x1000>;
> >> >> >> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
> >> >> >> > +                     clocks = <&nic_clk>;
> >> >> >>
> >> >> >> Btw. can we disable all nodes by default and enable them
> >> >> >> in the board dts files?
> >> >> > I would like to have only board specific nodes enabled in dts files
> >> >> > and rest of them in dtsi file
> >> >>
> >> >> And how do you know which ones are board specific? E.g. I would like
> >> >> to add our board which is also based on the lan9668. Maybe I don't
> >> >> want a watchdog (or whatever node). Of course I could use
> >> >>
> >> >> &watchdog {
> >> >>    status = "disabled";
> >> >> };
> >> >>
> >> >> But IMHO opt-in is better. At least thats what we are doing for
> >> >> the layerscape over on arm64.
> >> >>
> >> > Basically, I am disabling only the nodes which have pinctrl settings
> >> > in dtsi file
> >> > and enable in dts to make sure there are no conflicts on pins on the
> >> > board.
> >>
> >> Thats not what I'm asking. I would like to see *optional* nodes
> >> disabled by default. Whether the watchdog is optional might be
> >> debatable, but what about the usb controller and the qspi
> >> controller? They don't have shared pins AFAIK, so according
> >> to your rule, they will be enabled by default and each board
> >> which doesn't have anything connected on these pins would have
> >> to disabled it.
> >>
> >> Please keep in mind that this .dtsi will also be used by boards
> >> not manufactured by microchip.
> >>
> > I agree with you - "disabling optional nodes in dtsi"
> > I have gone through all the nodes.
> > Confirmed and moved enabling optional node watchdog
> > to dts file.
> 
> Great, I just wanted to get to an agreement how the optional nodes
> should be handled. If it turns out, some are still optional or
> some aren't. It is easy to just mark them disabled and enable them
> in the board dts files in a later patch.
> 
Sorry, I didn't get you. Do you still see optional nodes in my dtsi?
I think GPIO controller, Interrupt controller, XDMA, timers, AES, SHA, TRNG are
not optional. So, I keep them enabled in dtsi. 
Please let me know your comments.

> -michael
Michael Walle Feb. 21, 2022, 7:28 a.m. UTC | #14
Am 2022-02-21 06:44, schrieb Kavyasree.Kotagiri@microchip.com:
>> EXTERNAL EMAIL: Do not click links or open attachments unless you know 
>> the
>> content is safe
>> 
>> Am 2022-02-18 13:28, schrieb Kavyasree.Kotagiri@microchip.com:
>> >> EXTERNAL EMAIL: Do not click links or open attachments unless you know
>> >> the
>> >> content is safe
>> >>
>> >> Am 2022-02-10 12:52, schrieb Kavyasree.Kotagiri@microchip.com:
>> >> >> EXTERNAL EMAIL: Do not click links or open attachments unless you
>> know
>> >> >> the
>> >> >> content is safe
>> >> >>
>> >> >> Am 2022-02-10 10:40, schrieb Kavyasree.Kotagiri@microchip.com:
>> >> >> >> EXTERNAL EMAIL: Do not click links or open attachments unless you
>> >> know
>> >> >> >> the
>> >> >> >> content is safe
>> >> >>
>> >> >> >> > +     clocks {
>> >> >> >> [..]
>> >> >> >> > +
>> >> >> >> > +             nic_clk: nic_clk {
>> >> >> >>
>> >> >> >> What does nic_clk stand for? If I had to guess, it
>> >> >> >> has something to do with network. But..
>> >> >> >>
>> >> >> > NIC clock is the clock used by AXI, AHB fabric and APB bridges which
>> >> >> > connects all the peripherals.
>> >> >> > It is named so because the AXI fabric is based on NIC400 IP from ARM
>> >> >>
>> >> >> Ok, thanks for clarification.
>> >> >>
>> >> >>
>> >> >> >> > +             watchdog: watchdog@e0090000 {
>> >> >> >> > +                     compatible = "snps,dw-wdt";
>> >> >> >> > +                     reg = <0xe0090000 0x1000>;
>> >> >> >> > +                     interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
>> >> >> >> > +                     clocks = <&nic_clk>;
>> >> >> >>
>> >> >> >> Btw. can we disable all nodes by default and enable them
>> >> >> >> in the board dts files?
>> >> >> > I would like to have only board specific nodes enabled in dts files
>> >> >> > and rest of them in dtsi file
>> >> >>
>> >> >> And how do you know which ones are board specific? E.g. I would like
>> >> >> to add our board which is also based on the lan9668. Maybe I don't
>> >> >> want a watchdog (or whatever node). Of course I could use
>> >> >>
>> >> >> &watchdog {
>> >> >>    status = "disabled";
>> >> >> };
>> >> >>
>> >> >> But IMHO opt-in is better. At least thats what we are doing for
>> >> >> the layerscape over on arm64.
>> >> >>
>> >> > Basically, I am disabling only the nodes which have pinctrl settings
>> >> > in dtsi file
>> >> > and enable in dts to make sure there are no conflicts on pins on the
>> >> > board.
>> >>
>> >> Thats not what I'm asking. I would like to see *optional* nodes
>> >> disabled by default. Whether the watchdog is optional might be
>> >> debatable, but what about the usb controller and the qspi
>> >> controller? They don't have shared pins AFAIK, so according
>> >> to your rule, they will be enabled by default and each board
>> >> which doesn't have anything connected on these pins would have
>> >> to disabled it.
>> >>
>> >> Please keep in mind that this .dtsi will also be used by boards
>> >> not manufactured by microchip.
>> >>
>> > I agree with you - "disabling optional nodes in dtsi"
>> > I have gone through all the nodes.
>> > Confirmed and moved enabling optional node watchdog
>> > to dts file.
>> 
>> Great, I just wanted to get to an agreement how the optional nodes
>> should be handled. If it turns out, some are still optional or
>> some aren't. It is easy to just mark them disabled and enable them
>> in the board dts files in a later patch.
>> 
> Sorry, I didn't get you. Do you still see optional nodes in my dtsi?
> I think GPIO controller, Interrupt controller, XDMA, timers, AES, SHA, 
> TRNG are
> not optional. So, I keep them enabled in dtsi.

Agreed. Once you posted a new version, I'll post an RFC (or a regular
patch depending how fast this is picked up) for our board based on the
LAN966x.

-michael
diff mbox series

Patch

diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 235ad559acb2..2040a990f08c 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -735,6 +735,8 @@  dtb-$(CONFIG_SOC_IMX7D) += \
 dtb-$(CONFIG_SOC_IMX7ULP) += \
 	imx7ulp-com.dtb \
 	imx7ulp-evk.dtb
+dtb-$(CONFIG_SOC_LAN966) += \
+	lan966x_pcb8291.dtb
 dtb-$(CONFIG_SOC_LS1021A) += \
 	ls1021a-moxa-uc-8410a.dtb \
 	ls1021a-qds.dtb \
diff --git a/arch/arm/boot/dts/lan966x.dtsi b/arch/arm/boot/dts/lan966x.dtsi
new file mode 100644
index 000000000000..91ee9e0684f4
--- /dev/null
+++ b/arch/arm/boot/dts/lan966x.dtsi
@@ -0,0 +1,237 @@ 
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * lan966x.dtsi - Device Tree Include file for Microchip LAN966 family SoC
+ *
+ * Copyright (C) 2021 Microchip Technology, Inc. and its subsidiaries
+ *
+ * Author: Kavyasree Kotagiri <kavyasree.kotagiri@microchip.com>
+ *
+ */
+
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+#include <dt-bindings/mfd/atmel-flexcom.h>
+#include <dt-bindings/dma/at91.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/clock/microchip,lan966x.h>
+
+/ {
+	model = "Microchip LAN966 family SoC";
+	compatible = "microchip,lan966";
+	interrupt-parent = <&gic>;
+	#address-cells = <1>;
+	#size-cells = <1>;
+
+	cpus {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cpu@0 {
+			device_type = "cpu";
+			compatible = "arm,cortex-a7";
+			clock-frequency = <600000000>;
+			reg = <0x0>;
+		};
+	};
+
+	clocks {
+		sys_clk: sys_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <162500000>;
+		};
+
+		cpu_clk: cpu_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <600000000>;
+		};
+
+		ddr_clk: ddr_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <300000000>;
+		};
+
+		nic_clk: nic_clk {
+			compatible = "fixed-clock";
+			#clock-cells = <0>;
+			clock-frequency = <200000000>;
+		};
+	};
+
+	clks: clock-controller@e00c00a8 {
+		compatible = "microchip,lan966x-gck";
+		#clock-cells = <1>;
+		clocks = <&cpu_clk>, <&ddr_clk>, <&sys_clk>;
+		clock-names = "cpu", "ddr", "sys";
+		reg = <0xe00c00a8 0x38>;
+	};
+
+	timer {
+		compatible = "arm,armv7-timer";
+		interrupt-parent = <&gic>;
+		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+			     <GIC_PPI 14 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>,
+			     <GIC_PPI 11 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_LOW)>;
+		clock-frequency = <37500000>;
+		arm,cpu-registers-not-fw-configured;
+	};
+
+	soc {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		flx0: flexcom@e0040000 {
+			compatible = "atmel,sama5d2-flexcom";
+			reg = <0xe0040000 0x100>;
+			clocks = <&clks GCK_ID_FLEXCOM0>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0x0 0xe0040000 0x800>;
+			status = "disabled";
+		};
+
+		flx1: flexcom@e0044000 {
+			compatible = "atmel,sama5d2-flexcom";
+			reg = <0xe0044000 0x100>;
+			clocks = <&clks GCK_ID_FLEXCOM1>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0x0 0xe0044000 0x800>;
+			status = "disabled";
+		};
+
+		trng: trng@e0048000 {
+			compatible = "atmel,at91sam9g45-trng";
+			reg = <0xe0048000 0x100>;
+			clocks = <&nic_clk>;
+		};
+
+		aes: aes@e004c000 {
+			compatible = "atmel,at91sam9g46-aes";
+			reg = <0xe004c000 0x100>;
+			interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
+			dmas = <&dma0 AT91_XDMAC_DT_PERID(13)>,
+			       <&dma0 AT91_XDMAC_DT_PERID(12)>;
+			dma-names = "rx", "tx";
+			clocks = <&nic_clk>;
+			clock-names = "aes_clk";
+		};
+
+		flx2: flexcom@e0060000 {
+			compatible = "atmel,sama5d2-flexcom";
+			reg = <0xe0060000 0x100>;
+			clocks = <&clks GCK_ID_FLEXCOM2>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0x0 0xe0060000 0x800>;
+			status = "disabled";
+		};
+
+		flx3: flexcom@e0064000 {
+			compatible = "atmel,sama5d2-flexcom";
+			reg = <0xe0064000 0x100>;
+			clocks = <&clks GCK_ID_FLEXCOM3>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0x0 0xe0064000 0x800>;
+			status = "disabled";
+
+			usart3: serial@200 {
+				compatible = "atmel,at91sam9260-usart";
+				reg = <0x200 0x200>;
+				interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&nic_clk>;
+				clock-names = "usart";
+				atmel,fifo-size = <32>;
+				status = "disabled";
+			};
+		};
+
+		dma0: dma-controller@e0068000 {
+			compatible = "microchip,sama7g5-dma";
+			reg = <0xe0068000 0x1000>;
+			interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
+			#dma-cells = <1>;
+			clocks = <&nic_clk>;
+			clock-names = "dma_clk";
+		};
+
+		sha: sha@e006c000 {
+			compatible = "atmel,at91sam9g46-sha";
+			reg = <0xe006c000 0xec>;
+			interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>;
+			dmas = <&dma0 AT91_XDMAC_DT_PERID(14)>;
+			dma-names = "tx";
+			clocks = <&nic_clk>;
+			clock-names = "sha_clk";
+		};
+
+		flx4: flexcom@e0070000 {
+			compatible = "atmel,sama5d2-flexcom";
+			reg = <0xe0070000 0x100>;
+			clocks = <&clks GCK_ID_FLEXCOM4>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges = <0x0 0xe0070000 0x800>;
+			status = "disabled";
+		};
+
+		timer0: timer@e008c000 {
+			compatible = "snps,dw-apb-timer";
+			reg = <0xe008c000 0x400>;
+			clocks = <&nic_clk>;
+			clock-names = "timer";
+			interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>;
+		};
+
+		watchdog: watchdog@e0090000 {
+			compatible = "snps,dw-wdt";
+			reg = <0xe0090000 0x1000>;
+			interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>;
+			clocks = <&nic_clk>;
+		};
+
+		can0: can@e081c000 {
+			compatible = "bosch,m_can";
+			reg = <0xe081c000 0xfc>, <0x00100000 0x4000>;
+			reg-names = "m_can", "message_ram";
+			interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>,
+				     <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-names = "int0", "int1";
+			clocks = <&clks GCK_ID_MCAN0>, <&clks GCK_ID_MCAN0>;
+			clock-names = "hclk", "cclk";
+			assigned-clocks = <&clks GCK_ID_MCAN0>;
+			assigned-clock-rates = <40000000>;
+			bosch,mram-cfg = <0x0 0 0 64 0 0 32 32>;
+			status = "disabled";
+		};
+
+		gpio: pinctrl@e2004064 {
+			compatible = "microchip,lan966x-pinctrl";
+			reg = <0xe2004064 0xb4>,
+			    <0xe2010024 0x138>;
+			gpio-controller;
+			#gpio-cells = <2>;
+			gpio-ranges = <&gpio 0 0 78>;
+			interrupt-controller;
+			interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>;
+			#interrupt-cells = <2>;
+		};
+
+		gic: interrupt-controller@e8c11000 {
+			compatible = "arm,gic-400", "arm,cortex-a7-gic";
+			#interrupt-cells = <3>;
+			interrupts = <GIC_PPI 9 IRQ_TYPE_LEVEL_HIGH>;
+			interrupt-controller;
+			reg = <0xe8c11000 0x1000>,
+			      <0xe8c12000 0x2000>,
+			      <0xe8c14000 0x2000>,
+			      <0xe8c16000 0x2000>;
+		};
+	};
+};
diff --git a/arch/arm/boot/dts/lan966x_pcb8291.dts b/arch/arm/boot/dts/lan966x_pcb8291.dts
new file mode 100644
index 000000000000..ccec4177990b
--- /dev/null
+++ b/arch/arm/boot/dts/lan966x_pcb8291.dts
@@ -0,0 +1,61 @@ 
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * lan966x_pcb8291.dts - Device Tree file for PCB8291
+ */
+/dts-v1/;
+#include "lan966x.dtsi"
+
+/ {
+	model = "Microchip EVB - LAN9662";
+	compatible = "microchip,lan9662-pcb8291", "microchip,lan9662", "microchip,lan966";
+
+	chosen {
+		stdout-path = "serial0:115200n8";
+	};
+
+	aliases {
+		serial0 = &usart3;
+	};
+};
+
+&gpio {
+	fc_shrd7_pins: fc_shrd7-pins {
+		pins = "GPIO_49";
+		function = "fc_shrd7";
+	};
+
+	fc_shrd8_pins: fc_shrd8-pins {
+		pins = "GPIO_54";
+		function = "fc_shrd8";
+	};
+
+	fc3_b_pins: fcb3-spi-pins {
+		/* SCK, RXD, TXD */
+		pins = "GPIO_51", "GPIO_52", "GPIO_53";
+		function = "fc3_b";
+	};
+
+	can0_b_pins:  can0_b_pins {
+		/* RX, TX */
+		pins = "GPIO_35", "GPIO_36";
+		function = "can0_b";
+	};
+};
+
+&can0 {
+	pinctrl-0 = <&can0_b_pins>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&flx3 {
+	atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>;
+	status = "okay";
+
+	usart3: serial@200 {
+		pinctrl-0 = <&fc3_b_pins>, <&fc_shrd7_pins>, <&fc_shrd8_pins>;
+		pinctrl-names = "default";
+		status = "okay";
+	};
+};
+