| Andes AE350 SoC Platform |
| ======================== |
| The AE350 AXI/AHB-based platform N25(F)/NX25(F)/D25F/A25/AX25 CPU with level-one |
| memories, interrupt controller, debug module, AXI and AHB Bus Matrix Controller, |
| AXI-to-AHB Bridge and a collection of fundamental AHB/APB bus IP components |
| pre-integrated together as a system design. The high-quality and configurable |
| AHB/APB IPs suites a majority embedded systems, and the verified platform serves |
| as a starting point to jump start SoC designs. |
| |
| To build platform specific library and firmwares, provide the |
| *PLATFORM=generic* parameter to the top level `make` command. |
| |
| Platform Options |
| ---------------- |
| |
| The Andes AE350 platform does not have any platform-specific options. |
| |
| Building Andes AE350 Platform |
| ----------------------------- |
| |
| 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=generic FW_PAYLOAD_PATH=<linux_build_directory>/arch/riscv/boot/Image FW_FDT_PATH=<ae350.dtb path> |
| ``` |
| |
| DTS Example: (Quad-core AX45MP) |
| ------------------------------- |
| |
| ``` |
| compatible = "andestech,ae350"; |
| cpus { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| timebase-frequency = <60000000>; |
| |
| CPU0: cpu@0 { |
| device_type = "cpu"; |
| reg = <0>; |
| status = "okay"; |
| compatible = "riscv"; |
| riscv,isa = "rv64imafdc"; |
| 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 = "rv64imafdc"; |
| 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 = "rv64imafdc"; |
| 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 = "rv64imafdc"; |
| 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>; |
| }; |
| |
| plicsw: interrupt-controller@e6400000 { |
| compatible = "andestech,plicsw"; |
| 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>; |
| }; |
| |
| plmt0: plmt0@e6000000 { |
| compatible = "andestech,plmt0"; |
| reg = <0x00000000 0xe6000000 0x00000000 0x00100000>; |
| interrupts-extended = < &CPU0_intc 7 |
| &CPU1_intc 7 |
| &CPU2_intc 7 |
| &CPU3_intc 7 >; |
| }; |
| |
| wdt: watchdog@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>; |
| }; |
| }; |
| ``` |