Message ID | 20220915015121.27596-13-peterlin@andestech.com |
---|---|
State | Superseded |
Headers | show |
Series | Add Andes AE350 fdt driver support | expand |
On 15 Sept 2022, at 02:51, Yu Chien Peter Lin <peterlin@andestech.com> wrote: > > We update ae350 documentation to add details about platform device tree. > The nodes and their properties must be provided to properly initialize > data of underlying hardware and access their mmio registers. > > Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com> > --- > docs/platform/andes-ae350.md | 191 ++++++++++++++++++++++++++++++++++- > 1 file changed, 187 insertions(+), 4 deletions(-) > > diff --git a/docs/platform/andes-ae350.md b/docs/platform/andes-ae350.md > index 1cf83cf..2a0e242 100644 > --- a/docs/platform/andes-ae350.md > +++ b/docs/platform/andes-ae350.md > @@ -18,13 +18,196 @@ The Andes AE350 platform does not have any platform-specific options. > Building Andes AE350 Platform > ----------------------------- > > -To use Linux v5.2 should be used to build Andes AE350 OpenSBI binaries by using > -the compile time option FW_FDT_PATH. > - > -AE350's dts is included in https://github.com/andestech/linux/tree/ast-v3_2_0-release-public > +AE350's dts is included in https://github.com/andestech/linux/tree/RISCV-Linux-5.4-ast-v5_1_0-branch > > **Linux Kernel Payload** > > ``` > make PLATFORM=andes/ae350 FW_PAYLOAD_PATH=<linux_build_directory>/arch/riscv/boot/Image FW_FDT_PATH=<ae350.dtb path> > ``` > + > +DTS Example: (Quad-core AX45MP) > +------------------------------- > + > +``` > + cpus { > + #address-cells = <1>; > + #size-cells = <0>; > + timebase-frequency = <60000000>; > + > + CPU0: cpu@0 { > + device_type = "cpu"; > + reg = <0>; > + status = "okay"; > + compatible = "riscv"; > + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; The versions mean it won’t validate even with the updated bindings in [1]. Though Linux will parse it fine. > + riscv,priv-major = <1>; > + riscv,priv-minor = <10>; > + mmu-type = "riscv,sv48"; > + clock-frequency = <60000000>; > + i-cache-size = <0x8000>; > + i-cache-sets = <256>; > + i-cache-line-size = <64>; > + i-cache-block-size = <64>; > + d-cache-size = <0x8000>; > + d-cache-sets = <128>; > + d-cache-line-size = <64>; > + d-cache-block-size = <64>; > + next-level-cache = <&L2>; > + CPU0_intc: interrupt-controller { > + #interrupt-cells = <1>; > + interrupt-controller; > + compatible = "riscv,cpu-intc"; > + }; > + }; > + CPU1: cpu@1 { > + device_type = "cpu"; > + reg = <1>; > + status = "okay"; > + compatible = "riscv"; > + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; > + riscv,priv-major = <1>; > + riscv,priv-minor = <10>; > + mmu-type = "riscv,sv48"; > + clock-frequency = <60000000>; > + i-cache-size = <0x8000>; > + i-cache-sets = <256>; > + i-cache-line-size = <64>; > + i-cache-block-size = <64>; > + d-cache-size = <0x8000>; > + d-cache-sets = <128>; > + d-cache-line-size = <64>; > + d-cache-block-size = <64>; > + next-level-cache = <&L2>; > + CPU1_intc: interrupt-controller { > + #interrupt-cells = <1>; > + interrupt-controller; > + compatible = "riscv,cpu-intc"; > + }; > + }; > + CPU2: cpu@2 { > + device_type = "cpu"; > + reg = <2>; > + status = "okay"; > + compatible = "riscv"; > + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; > + riscv,priv-major = <1>; > + riscv,priv-minor = <10>; > + mmu-type = "riscv,sv48"; > + clock-frequency = <60000000>; > + i-cache-size = <0x8000>; > + i-cache-sets = <256>; > + i-cache-line-size = <64>; > + i-cache-block-size = <64>; > + d-cache-size = <0x8000>; > + d-cache-sets = <128>; > + d-cache-line-size = <64>; > + d-cache-block-size = <64>; > + next-level-cache = <&L2>; > + CPU2_intc: interrupt-controller { > + #interrupt-cells = <1>; > + interrupt-controller; > + compatible = "riscv,cpu-intc"; > + }; > + }; > + CPU3: cpu@3 { > + device_type = "cpu"; > + reg = <3>; > + status = "okay"; > + compatible = "riscv"; > + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; > + riscv,priv-major = <1>; > + riscv,priv-minor = <10>; > + mmu-type = "riscv,sv48"; > + clock-frequency = <60000000>; > + i-cache-size = <0x8000>; > + i-cache-sets = <256>; > + i-cache-line-size = <64>; > + i-cache-block-size = <64>; > + d-cache-size = <0x8000>; > + d-cache-sets = <128>; > + d-cache-line-size = <64>; > + d-cache-block-size = <64>; > + next-level-cache = <&L2>; > + CPU3_intc: interrupt-controller { > + #interrupt-cells = <1>; > + interrupt-controller; > + compatible = "riscv,cpu-intc"; > + }; > + }; > + }; > + > + soc { > + #address-cells = <2>; > + #size-cells = <2>; > + compatible = "andestech,riscv-ae350-soc", "simple-bus"; > + ranges; > + > + plic0: interrupt-controller@e4000000 { > + compatible = "riscv,plic0"; > + reg = <0x00000000 0xe4000000 0x00000000 0x02000000>; > + interrupts-extended = < > + &CPU0_intc 11 &CPU0_intc 9 > + &CPU1_intc 11 &CPU1_intc 9 > + &CPU2_intc 11 &CPU2_intc 9 > + &CPU3_intc 11 &CPU3_intc 9 > + >; > + interrupt-controller; > + #address-cells = <2>; > + #interrupt-cells = <2>; > + riscv,ndev = <71>; > + }; > + > + plic1: interrupt-controller@e6400000 { > + compatible = "riscv,plic1"; > + reg = <0x00000000 0xe6400000 0x00000000 0x00400000>; > + interrupts-extended = < > + &CPU0_intc 3 > + &CPU1_intc 3 > + &CPU2_intc 3 > + &CPU3_intc 3 > + >; > + interrupt-controller; > + #address-cells = <2>; > + #interrupt-cells = <2>; > + riscv,ndev = <4>; > + }; > + > + plmt0: plmt0@e6000000 { > + compatible = "riscv,plmt0"; > + reg = <0x00000000 0xe6000000 0x00000000 0x00100000>; > + interrupts-extended = < > + &CPU0_intc 7 > + &CPU1_intc 7 > + &CPU2_intc 7 > + &CPU3_intc 7 > + >; > + }; > + > + wdt: wdt@f0500000 { > + compatible = "andestech,atcwdt200"; Assuming atc stands for AndesTeCh that seems a bit redundant? Jess [1] https://lore.kernel.org/all/20220823183319.3314940-4-mail@conchuod.ie/ > + reg = <0x00000000 0xf0500000 0x00000000 0x00001000>; > + interrupts = <3 4>; > + interrupt-parent = <&plic0>; > + clock-frequency = <15000000>; > + }; > + > + serial0: serial@f0300000 { > + compatible = "andestech,uart16550", "ns16550a"; > + reg = <0x00000000 0xf0300000 0x00000000 0x00001000>; > + interrupts = <9 4>; > + interrupt-parent = <&plic0>; > + clock-frequency = <19660800>; > + current-speed = <38400>; > + reg-shift = <2>; > + reg-offset = <32>; > + reg-io-width = <4>; > + no-loopback-test = <1>; > + }; > + > + smu: smu@f0100000 { > + compatible = "andestech,atcsmu"; > + reg = <0x00000000 0xf0100000 0x00000000 0x00001000>; > + }; > + }; > +``` > -- > 2.34.1 > > > -- > opensbi mailing list > opensbi@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/opensbi
On Thu, Sep 15, 2022 at 03:31:38AM +0100, Jessica Clarke wrote: > On 15 Sept 2022, at 02:51, Yu Chien Peter Lin <peterlin@andestech.com> wrote: > > > > We update ae350 documentation to add details about platform device tree. > > The nodes and their properties must be provided to properly initialize > > data of underlying hardware and access their mmio registers. > > > > Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com> > > --- > > docs/platform/andes-ae350.md | 191 ++++++++++++++++++++++++++++++++++- > > 1 file changed, 187 insertions(+), 4 deletions(-) > > > > diff --git a/docs/platform/andes-ae350.md b/docs/platform/andes-ae350.md > > index 1cf83cf..2a0e242 100644 > > --- a/docs/platform/andes-ae350.md > > +++ b/docs/platform/andes-ae350.md > > @@ -18,13 +18,196 @@ The Andes AE350 platform does not have any platform-specific options. > > Building Andes AE350 Platform > > ----------------------------- > > > > -To use Linux v5.2 should be used to build Andes AE350 OpenSBI binaries by using > > -the compile time option FW_FDT_PATH. > > - > > -AE350's dts is included in https://github.com/andestech/linux/tree/ast-v3_2_0-release-public > > +AE350's dts is included in https://github.com/andestech/linux/tree/RISCV-Linux-5.4-ast-v5_1_0-branch > > > > **Linux Kernel Payload** > > > > ``` > > make PLATFORM=andes/ae350 FW_PAYLOAD_PATH=<linux_build_directory>/arch/riscv/boot/Image FW_FDT_PATH=<ae350.dtb path> > > ``` > > + > > +DTS Example: (Quad-core AX45MP) > > +------------------------------- > > + > > +``` > > + cpus { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + timebase-frequency = <60000000>; > > + > > + CPU0: cpu@0 { > > + device_type = "cpu"; > > + reg = <0>; > > + status = "okay"; > > + compatible = "riscv"; > > + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; > > The versions mean it won’t validate even with the updated bindings in [1]. Hi Jessica, Thanks, we'll update it to comply with bindings. > > ... > > + wdt: wdt@f0500000 { > > + compatible = "andestech,atcwdt200"; > > Assuming atc stands for AndesTeCh that seems a bit redundant? > > Jess This is not an abbreviation but a term used in our manual and kernel driver. Best regards, Peter Lin > > [1] https://lore.kernel.org/all/20220823183319.3314940-4-mail@conchuod.ie/ > > > + reg = <0x00000000 0xf0500000 0x00000000 0x00001000>; > > + interrupts = <3 4>; > > + interrupt-parent = <&plic0>; > > + clock-frequency = <15000000>; > > + }; > > + > > + serial0: serial@f0300000 { > > + compatible = "andestech,uart16550", "ns16550a"; > > + reg = <0x00000000 0xf0300000 0x00000000 0x00001000>; > > + interrupts = <9 4>; > > + interrupt-parent = <&plic0>; > > + clock-frequency = <19660800>; > > + current-speed = <38400>; > > + reg-shift = <2>; > > + reg-offset = <32>; > > + reg-io-width = <4>; > > + no-loopback-test = <1>; > > + }; > > + > > + smu: smu@f0100000 { > > + compatible = "andestech,atcsmu"; > > + reg = <0x00000000 0xf0100000 0x00000000 0x00001000>; > > + }; > > + }; > > +``` > > -- > > 2.34.1 > > > > > > -- > > opensbi mailing list > > opensbi@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/opensbi >
diff --git a/docs/platform/andes-ae350.md b/docs/platform/andes-ae350.md index 1cf83cf..2a0e242 100644 --- a/docs/platform/andes-ae350.md +++ b/docs/platform/andes-ae350.md @@ -18,13 +18,196 @@ The Andes AE350 platform does not have any platform-specific options. Building Andes AE350 Platform ----------------------------- -To use Linux v5.2 should be used to build Andes AE350 OpenSBI binaries by using -the compile time option FW_FDT_PATH. - -AE350's dts is included in https://github.com/andestech/linux/tree/ast-v3_2_0-release-public +AE350's dts is included in https://github.com/andestech/linux/tree/RISCV-Linux-5.4-ast-v5_1_0-branch **Linux Kernel Payload** ``` make PLATFORM=andes/ae350 FW_PAYLOAD_PATH=<linux_build_directory>/arch/riscv/boot/Image FW_FDT_PATH=<ae350.dtb path> ``` + +DTS Example: (Quad-core AX45MP) +------------------------------- + +``` + cpus { + #address-cells = <1>; + #size-cells = <0>; + timebase-frequency = <60000000>; + + CPU0: cpu@0 { + device_type = "cpu"; + reg = <0>; + status = "okay"; + compatible = "riscv"; + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; + riscv,priv-major = <1>; + riscv,priv-minor = <10>; + mmu-type = "riscv,sv48"; + clock-frequency = <60000000>; + i-cache-size = <0x8000>; + i-cache-sets = <256>; + i-cache-line-size = <64>; + i-cache-block-size = <64>; + d-cache-size = <0x8000>; + d-cache-sets = <128>; + d-cache-line-size = <64>; + d-cache-block-size = <64>; + next-level-cache = <&L2>; + CPU0_intc: interrupt-controller { + #interrupt-cells = <1>; + interrupt-controller; + compatible = "riscv,cpu-intc"; + }; + }; + CPU1: cpu@1 { + device_type = "cpu"; + reg = <1>; + status = "okay"; + compatible = "riscv"; + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; + riscv,priv-major = <1>; + riscv,priv-minor = <10>; + mmu-type = "riscv,sv48"; + clock-frequency = <60000000>; + i-cache-size = <0x8000>; + i-cache-sets = <256>; + i-cache-line-size = <64>; + i-cache-block-size = <64>; + d-cache-size = <0x8000>; + d-cache-sets = <128>; + d-cache-line-size = <64>; + d-cache-block-size = <64>; + next-level-cache = <&L2>; + CPU1_intc: interrupt-controller { + #interrupt-cells = <1>; + interrupt-controller; + compatible = "riscv,cpu-intc"; + }; + }; + CPU2: cpu@2 { + device_type = "cpu"; + reg = <2>; + status = "okay"; + compatible = "riscv"; + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; + riscv,priv-major = <1>; + riscv,priv-minor = <10>; + mmu-type = "riscv,sv48"; + clock-frequency = <60000000>; + i-cache-size = <0x8000>; + i-cache-sets = <256>; + i-cache-line-size = <64>; + i-cache-block-size = <64>; + d-cache-size = <0x8000>; + d-cache-sets = <128>; + d-cache-line-size = <64>; + d-cache-block-size = <64>; + next-level-cache = <&L2>; + CPU2_intc: interrupt-controller { + #interrupt-cells = <1>; + interrupt-controller; + compatible = "riscv,cpu-intc"; + }; + }; + CPU3: cpu@3 { + device_type = "cpu"; + reg = <3>; + status = "okay"; + compatible = "riscv"; + riscv,isa = "rv64i2p0m2p0a2p0f2p0d2p0c2p0xv5-1p1xdsp0p0"; + riscv,priv-major = <1>; + riscv,priv-minor = <10>; + mmu-type = "riscv,sv48"; + clock-frequency = <60000000>; + i-cache-size = <0x8000>; + i-cache-sets = <256>; + i-cache-line-size = <64>; + i-cache-block-size = <64>; + d-cache-size = <0x8000>; + d-cache-sets = <128>; + d-cache-line-size = <64>; + d-cache-block-size = <64>; + next-level-cache = <&L2>; + CPU3_intc: interrupt-controller { + #interrupt-cells = <1>; + interrupt-controller; + compatible = "riscv,cpu-intc"; + }; + }; + }; + + soc { + #address-cells = <2>; + #size-cells = <2>; + compatible = "andestech,riscv-ae350-soc", "simple-bus"; + ranges; + + plic0: interrupt-controller@e4000000 { + compatible = "riscv,plic0"; + reg = <0x00000000 0xe4000000 0x00000000 0x02000000>; + interrupts-extended = < + &CPU0_intc 11 &CPU0_intc 9 + &CPU1_intc 11 &CPU1_intc 9 + &CPU2_intc 11 &CPU2_intc 9 + &CPU3_intc 11 &CPU3_intc 9 + >; + interrupt-controller; + #address-cells = <2>; + #interrupt-cells = <2>; + riscv,ndev = <71>; + }; + + plic1: interrupt-controller@e6400000 { + compatible = "riscv,plic1"; + reg = <0x00000000 0xe6400000 0x00000000 0x00400000>; + interrupts-extended = < + &CPU0_intc 3 + &CPU1_intc 3 + &CPU2_intc 3 + &CPU3_intc 3 + >; + interrupt-controller; + #address-cells = <2>; + #interrupt-cells = <2>; + riscv,ndev = <4>; + }; + + plmt0: plmt0@e6000000 { + compatible = "riscv,plmt0"; + reg = <0x00000000 0xe6000000 0x00000000 0x00100000>; + interrupts-extended = < + &CPU0_intc 7 + &CPU1_intc 7 + &CPU2_intc 7 + &CPU3_intc 7 + >; + }; + + wdt: wdt@f0500000 { + compatible = "andestech,atcwdt200"; + reg = <0x00000000 0xf0500000 0x00000000 0x00001000>; + interrupts = <3 4>; + interrupt-parent = <&plic0>; + clock-frequency = <15000000>; + }; + + serial0: serial@f0300000 { + compatible = "andestech,uart16550", "ns16550a"; + reg = <0x00000000 0xf0300000 0x00000000 0x00001000>; + interrupts = <9 4>; + interrupt-parent = <&plic0>; + clock-frequency = <19660800>; + current-speed = <38400>; + reg-shift = <2>; + reg-offset = <32>; + reg-io-width = <4>; + no-loopback-test = <1>; + }; + + smu: smu@f0100000 { + compatible = "andestech,atcsmu"; + reg = <0x00000000 0xf0100000 0x00000000 0x00001000>; + }; + }; +```
We update ae350 documentation to add details about platform device tree. The nodes and their properties must be provided to properly initialize data of underlying hardware and access their mmio registers. Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com> --- docs/platform/andes-ae350.md | 191 ++++++++++++++++++++++++++++++++++- 1 file changed, 187 insertions(+), 4 deletions(-)