1*4882a593Smuzhiyun// SPDX-License-Identifier: GPL-2.0+ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * Copyright (C) 2019 Sean Anderson <seanga2@gmail.com> 4*4882a593Smuzhiyun * Copyright (C) 2020 Western Digital Corporation or its affiliates. 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun#include <dt-bindings/clock/k210-clk.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun/ { 9*4882a593Smuzhiyun /* 10*4882a593Smuzhiyun * Although the K210 is a 64-bit CPU, the address bus is only 32-bits 11*4882a593Smuzhiyun * wide, and the upper half of all addresses is ignored. 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun #address-cells = <1>; 14*4882a593Smuzhiyun #size-cells = <1>; 15*4882a593Smuzhiyun compatible = "kendryte,k210"; 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun aliases { 18*4882a593Smuzhiyun serial0 = &uarths0; 19*4882a593Smuzhiyun }; 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun /* 22*4882a593Smuzhiyun * The K210 has an sv39 MMU following the priviledge specification v1.9. 23*4882a593Smuzhiyun * Since this is a non-ratified draft specification, the kernel does not 24*4882a593Smuzhiyun * support it and the K210 support enabled only for the !MMU case. 25*4882a593Smuzhiyun * Be consistent with this by setting the CPUs MMU type to "none". 26*4882a593Smuzhiyun */ 27*4882a593Smuzhiyun cpus { 28*4882a593Smuzhiyun #address-cells = <1>; 29*4882a593Smuzhiyun #size-cells = <0>; 30*4882a593Smuzhiyun timebase-frequency = <7800000>; 31*4882a593Smuzhiyun cpu0: cpu@0 { 32*4882a593Smuzhiyun device_type = "cpu"; 33*4882a593Smuzhiyun reg = <0>; 34*4882a593Smuzhiyun compatible = "kendryte,k210", "sifive,rocket0", "riscv"; 35*4882a593Smuzhiyun riscv,isa = "rv64imafdc"; 36*4882a593Smuzhiyun mmu-type = "none"; 37*4882a593Smuzhiyun i-cache-size = <0x8000>; 38*4882a593Smuzhiyun i-cache-block-size = <64>; 39*4882a593Smuzhiyun d-cache-size = <0x8000>; 40*4882a593Smuzhiyun d-cache-block-size = <64>; 41*4882a593Smuzhiyun clocks = <&sysctl K210_CLK_CPU>; 42*4882a593Smuzhiyun clock-frequency = <390000000>; 43*4882a593Smuzhiyun cpu0_intc: interrupt-controller { 44*4882a593Smuzhiyun #interrupt-cells = <1>; 45*4882a593Smuzhiyun interrupt-controller; 46*4882a593Smuzhiyun compatible = "riscv,cpu-intc"; 47*4882a593Smuzhiyun }; 48*4882a593Smuzhiyun }; 49*4882a593Smuzhiyun cpu1: cpu@1 { 50*4882a593Smuzhiyun device_type = "cpu"; 51*4882a593Smuzhiyun reg = <1>; 52*4882a593Smuzhiyun compatible = "kendryte,k210", "sifive,rocket0", "riscv"; 53*4882a593Smuzhiyun riscv,isa = "rv64imafdc"; 54*4882a593Smuzhiyun mmu-type = "none"; 55*4882a593Smuzhiyun i-cache-size = <0x8000>; 56*4882a593Smuzhiyun i-cache-block-size = <64>; 57*4882a593Smuzhiyun d-cache-size = <0x8000>; 58*4882a593Smuzhiyun d-cache-block-size = <64>; 59*4882a593Smuzhiyun clocks = <&sysctl K210_CLK_CPU>; 60*4882a593Smuzhiyun clock-frequency = <390000000>; 61*4882a593Smuzhiyun cpu1_intc: interrupt-controller { 62*4882a593Smuzhiyun #interrupt-cells = <1>; 63*4882a593Smuzhiyun interrupt-controller; 64*4882a593Smuzhiyun compatible = "riscv,cpu-intc"; 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun }; 67*4882a593Smuzhiyun }; 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun sram: memory@80000000 { 70*4882a593Smuzhiyun device_type = "memory"; 71*4882a593Smuzhiyun reg = <0x80000000 0x400000>, 72*4882a593Smuzhiyun <0x80400000 0x200000>, 73*4882a593Smuzhiyun <0x80600000 0x200000>; 74*4882a593Smuzhiyun reg-names = "sram0", "sram1", "aisram"; 75*4882a593Smuzhiyun }; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun clocks { 78*4882a593Smuzhiyun in0: oscillator { 79*4882a593Smuzhiyun compatible = "fixed-clock"; 80*4882a593Smuzhiyun #clock-cells = <0>; 81*4882a593Smuzhiyun clock-frequency = <26000000>; 82*4882a593Smuzhiyun }; 83*4882a593Smuzhiyun }; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun soc { 86*4882a593Smuzhiyun #address-cells = <1>; 87*4882a593Smuzhiyun #size-cells = <1>; 88*4882a593Smuzhiyun compatible = "kendryte,k210-soc", "simple-bus"; 89*4882a593Smuzhiyun ranges; 90*4882a593Smuzhiyun interrupt-parent = <&plic0>; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun sysctl: sysctl@50440000 { 93*4882a593Smuzhiyun compatible = "kendryte,k210-sysctl", "simple-mfd"; 94*4882a593Smuzhiyun reg = <0x50440000 0x1000>; 95*4882a593Smuzhiyun #clock-cells = <1>; 96*4882a593Smuzhiyun }; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun clint0: clint@2000000 { 99*4882a593Smuzhiyun #interrupt-cells = <1>; 100*4882a593Smuzhiyun compatible = "riscv,clint0"; 101*4882a593Smuzhiyun reg = <0x2000000 0xC000>; 102*4882a593Smuzhiyun interrupts-extended = <&cpu0_intc 3 &cpu0_intc 7 103*4882a593Smuzhiyun &cpu1_intc 3 &cpu1_intc 7>; 104*4882a593Smuzhiyun clocks = <&sysctl K210_CLK_ACLK>; 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun plic0: interrupt-controller@c000000 { 108*4882a593Smuzhiyun #interrupt-cells = <1>; 109*4882a593Smuzhiyun interrupt-controller; 110*4882a593Smuzhiyun compatible = "kendryte,k210-plic0", "riscv,plic0"; 111*4882a593Smuzhiyun reg = <0xC000000 0x4000000>; 112*4882a593Smuzhiyun interrupts-extended = <&cpu0_intc 11>, <&cpu0_intc 0xffffffff>, 113*4882a593Smuzhiyun <&cpu1_intc 11>, <&cpu1_intc 0xffffffff>; 114*4882a593Smuzhiyun riscv,ndev = <65>; 115*4882a593Smuzhiyun riscv,max-priority = <7>; 116*4882a593Smuzhiyun }; 117*4882a593Smuzhiyun 118*4882a593Smuzhiyun uarths0: serial@38000000 { 119*4882a593Smuzhiyun compatible = "kendryte,k210-uarths", "sifive,uart0"; 120*4882a593Smuzhiyun reg = <0x38000000 0x1000>; 121*4882a593Smuzhiyun interrupts = <33>; 122*4882a593Smuzhiyun clocks = <&sysctl K210_CLK_CPU>; 123*4882a593Smuzhiyun }; 124*4882a593Smuzhiyun }; 125*4882a593Smuzhiyun}; 126