Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/riscv/boot/dts/canaan/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 12 kB image not shown  

Quelle  k210.dtsi   Sprache: unbekannt

 
// SPDX-License-Identifier: GPL-2.0+
/*
 * Copyright (C) 2019-20 Sean Anderson <seanga2@gmail.com>
 * Copyright (C) 2020 Western Digital Corporation or its affiliates.
 */
#include <dt-bindings/clock/k210-clk.h>
#include <dt-bindings/pinctrl/k210-fpioa.h>
#include <dt-bindings/reset/k210-rst.h>

/ {
 /*
  * Although the K210 is a 64-bit CPU, the address bus is only 32-bits
  * wide, and the upper half of all addresses is ignored.
  */
 #address-cells = <1>;
 #size-cells = <1>;
 compatible = "canaan,kendryte-k210";

 /*
  * The K210 has an sv39 MMU following the privileged specification v1.9.
  * Since this is a non-ratified draft specification, the kernel does not
  * support it and the K210 support enabled only for the !MMU case.
  * Be consistent with this by setting the CPUs MMU type to "none".
  */
 cpus {
  #address-cells = <1>;
  #size-cells = <0>;
  timebase-frequency = <7800000>;
  cpu0: cpu@0 {
   device_type = "cpu";
   compatible = "canaan,k210", "riscv";
   reg = <0>;
   riscv,isa = "rv64imafdc";
   mmu-type = "riscv,none";
   i-cache-block-size = <64>;
   i-cache-size = <0x8000>;
   d-cache-block-size = <64>;
   d-cache-size = <0x8000>;
   cpu0_intc: interrupt-controller {
    #interrupt-cells = <1>;
    interrupt-controller;
    compatible = "riscv,cpu-intc";
   };
  };
  cpu1: cpu@1 {
   device_type = "cpu";
   compatible = "canaan,k210", "riscv";
   reg = <1>;
   riscv,isa = "rv64imafdc";
   mmu-type = "riscv,none";
   i-cache-block-size = <64>;
   i-cache-size = <0x8000>;
   d-cache-block-size = <64>;
   d-cache-size = <0x8000>;
   cpu1_intc: interrupt-controller {
    #interrupt-cells = <1>;
    interrupt-controller;
    compatible = "riscv,cpu-intc";
   };
  };

  cpu-map {
   cluster0 {
    core0 {
     cpu = <&cpu0>;
    };

    core1 {
     cpu = <&cpu1>;
    };
   };
  };
 };

 sram: memory@80000000 {
  device_type = "memory";
  reg = <0x80000000 0x400000>, /* sram0 4 MiB */
        <0x80400000 0x200000>, /* sram1 2 MiB */
        <0x80600000 0x200000>; /* aisram 2 MiB */
 };

 sram_controller: memory-controller {
  compatible = "canaan,k210-sram";
  clocks = <&sysclk K210_CLK_SRAM0>,
    <&sysclk K210_CLK_SRAM1>,
    <&sysclk K210_CLK_AI>;
  clock-names = "sram0", "sram1", "aisram";
 };

 clocks {
  in0: oscillator {
   compatible = "fixed-clock";
   #clock-cells = <0>;
   clock-frequency = <26000000>;
  };
 };

 soc {
  #address-cells = <1>;
  #size-cells = <1>;
  compatible = "simple-bus";
  ranges;
  interrupt-parent = <&plic0>;

  rom0: nvmem@1000 {
   reg = <0x1000 0x1000>;
   read-only;
  };

  clint0: timer@2000000 {
   compatible = "canaan,k210-clint", "sifive,clint0";
   reg = <0x2000000 0xC000>;
   interrupts-extended = <&cpu0_intc 3>, <&cpu0_intc 7>,
           <&cpu1_intc 3>, <&cpu1_intc 7>;
  };

  plic0: interrupt-controller@c000000 {
   #interrupt-cells = <1>;
   #address-cells = <0>;
   compatible = "canaan,k210-plic", "sifive,plic-1.0.0";
   reg = <0xC000000 0x4000000>;
   interrupt-controller;
   interrupts-extended = <&cpu0_intc 11>, <&cpu0_intc 9>,
           <&cpu1_intc 11>, <&cpu1_intc 9>;
   riscv,ndev = <65>;
  };

  uarths0: serial@38000000 {
   compatible = "canaan,k210-uarths", "sifive,uart0";
   reg = <0x38000000 0x1000>;
   interrupts = <33>;
   clocks = <&sysclk K210_CLK_CPU>;
   status = "disabled";
  };

  gpio0: gpio-controller@38001000 {
   #interrupt-cells = <2>;
   #gpio-cells = <2>;
   compatible = "canaan,k210-gpiohs", "sifive,gpio0";
   reg = <0x38001000 0x1000>;
   interrupt-controller;
   interrupts = <34>, <35>, <36>, <37>, <38>, <39>, <40>,
         <41>, <42>, <43>, <44>, <45>, <46>, <47>,
         <48>, <49>, <50>, <51>, <52>, <53>, <54>,
         <55>, <56>, <57>, <58>, <59>, <60>, <61>,
         <62>, <63>, <64>, <65>;
   gpio-controller;
   ngpios = <32>;
   status = "disabled";
  };

  dmac0: dma-controller@50000000 {
   compatible = "snps,axi-dma-1.01a";
   reg = <0x50000000 0x1000>;
   interrupts = <27>, <28>, <29>, <30>, <31>, <32>;
   #dma-cells = <1>;
   clocks = <&sysclk K210_CLK_DMA>, <&sysclk K210_CLK_DMA>;
   clock-names = "core-clk", "cfgr-clk";
   resets = <&sysrst K210_RST_DMA>;
   dma-channels = <6>;
   snps,dma-masters = <2>;
   snps,priority = <0 1 2 3 4 5>;
   snps,data-width = <5>;
   snps,block-size = <0x200000 0x200000 0x200000
        0x200000 0x200000 0x200000>;
   snps,axi-max-burst-len = <256>;
  };

  apb0: bus@50200000 {
   #address-cells = <1>;
   #size-cells = <1>;
   compatible = "simple-pm-bus";
   ranges = <0x50200000 0x50200000 0x200000>;
   clocks = <&sysclk K210_CLK_APB0>;

   gpio1: gpio@50200000 {
    #address-cells = <1>;
    #size-cells = <0>;
    compatible = "snps,dw-apb-gpio";
    reg = <0x50200000 0x80>;
    clocks = <&sysclk K210_CLK_APB0>,
      <&sysclk K210_CLK_GPIO>;
    clock-names = "bus", "db";
    resets = <&sysrst K210_RST_GPIO>;
    status = "disabled";

    gpio1_0: gpio-port@0 {
     #gpio-cells = <2>;
     #interrupt-cells = <2>;
     compatible = "snps,dw-apb-gpio-port";
     reg = <0>;
     interrupt-controller;
     interrupts = <23>;
     gpio-controller;
     ngpios = <8>;
    };
   };

   uart1: serial@50210000 {
    compatible = "snps,dw-apb-uart";
    reg = <0x50210000 0x100>;
    interrupts = <11>;
    clocks = <&sysclk K210_CLK_UART1>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "baudclk", "apb_pclk";
    resets = <&sysrst K210_RST_UART1>;
    reg-io-width = <4>;
    reg-shift = <2>;
    dcd-override;
    dsr-override;
    cts-override;
    ri-override;
    status = "disabled";
   };

   uart2: serial@50220000 {
    compatible = "snps,dw-apb-uart";
    reg = <0x50220000 0x100>;
    interrupts = <12>;
    clocks = <&sysclk K210_CLK_UART2>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "baudclk", "apb_pclk";
    resets = <&sysrst K210_RST_UART2>;
    reg-io-width = <4>;
    reg-shift = <2>;
    dcd-override;
    dsr-override;
    cts-override;
    ri-override;
    status = "disabled";
   };

   uart3: serial@50230000 {
    compatible = "snps,dw-apb-uart";
    reg = <0x50230000 0x100>;
    interrupts = <13>;
    clocks = <&sysclk K210_CLK_UART3>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "baudclk", "apb_pclk";
    resets = <&sysrst K210_RST_UART3>;
    reg-io-width = <4>;
    reg-shift = <2>;
    dcd-override;
    dsr-override;
    cts-override;
    ri-override;
    status = "disabled";
   };

   spi2: spi@50240000 {
    compatible = "canaan,k210-spi";
    spi-slave;
    reg = <0x50240000 0x100>;
    #address-cells = <0>;
    #size-cells = <0>;
    interrupts = <3>;
    clocks = <&sysclk K210_CLK_SPI2>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "ssi_clk", "pclk";
    resets = <&sysrst K210_RST_SPI2>;
    status = "disabled";
   };

   i2s0: i2s@50250000 {
    compatible = "canaan,k210-i2s", "snps,designware-i2s";
    reg = <0x50250000 0x200>;
    interrupts = <5>;
    clocks = <&sysclk K210_CLK_I2S0>;
    clock-names = "i2sclk";
    resets = <&sysrst K210_RST_I2S0>;
    status = "disabled";
   };

   i2s1: i2s@50260000 {
    compatible = "canaan,k210-i2s", "snps,designware-i2s";
    reg = <0x50260000 0x200>;
    interrupts = <6>;
    clocks = <&sysclk K210_CLK_I2S1>;
    clock-names = "i2sclk";
    resets = <&sysrst K210_RST_I2S1>;
    status = "disabled";
   };

   i2s2: i2s@50270000 {
    compatible = "canaan,k210-i2s", "snps,designware-i2s";
    reg = <0x50270000 0x200>;
    interrupts = <7>;
    clocks = <&sysclk K210_CLK_I2S2>;
    clock-names = "i2sclk";
    resets = <&sysrst K210_RST_I2S2>;
    status = "disabled";
   };

   i2c0: i2c@50280000 {
    compatible = "snps,designware-i2c";
    reg = <0x50280000 0x100>;
    interrupts = <8>;
    clocks = <&sysclk K210_CLK_I2C0>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "ref", "pclk";
    resets = <&sysrst K210_RST_I2C0>;
    status = "disabled";
   };

   i2c1: i2c@50290000 {
    compatible = "snps,designware-i2c";
    reg = <0x50290000 0x100>;
    interrupts = <9>;
    clocks = <&sysclk K210_CLK_I2C1>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "ref", "pclk";
    resets = <&sysrst K210_RST_I2C1>;
    status = "disabled";
   };

   i2c2: i2c@502a0000 {
    compatible = "snps,designware-i2c";
    reg = <0x502A0000 0x100>;
    interrupts = <10>;
    clocks = <&sysclk K210_CLK_I2C2>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "ref", "pclk";
    resets = <&sysrst K210_RST_I2C2>;
    status = "disabled";
   };

   fpioa: pinmux@502b0000 {
    compatible = "canaan,k210-fpioa";
    reg = <0x502B0000 0x100>;
    clocks = <&sysclk K210_CLK_FPIOA>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "ref", "pclk";
    resets = <&sysrst K210_RST_FPIOA>;
    canaan,k210-sysctl-power = <&sysctl 108>;
   };

   timer0: timer@502d0000 {
    compatible = "snps,dw-apb-timer";
    reg = <0x502D0000 0x14>;
    interrupts = <14>;
    clocks = <&sysclk K210_CLK_TIMER0>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "timer", "pclk";
    resets = <&sysrst K210_RST_TIMER0>;
   };

   timer1: timer@502d0014 {
    compatible = "snps,dw-apb-timer";
    reg = <0x502D0014 0x14>;
    interrupts = <15>;
    clocks = <&sysclk K210_CLK_TIMER0>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "timer", "pclk";
    resets = <&sysrst K210_RST_TIMER0>;
   };

   timer2: timer@502e0000 {
    compatible = "snps,dw-apb-timer";
    reg = <0x502E0000 0x14>;
    interrupts = <16>;
    clocks = <&sysclk K210_CLK_TIMER1>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "timer", "pclk";
    resets = <&sysrst K210_RST_TIMER1>;
   };

   timer3: timer@502e0014 {
    compatible = "snps,dw-apb-timer";
    reg = <0x502E0014 0x114>;
    interrupts = <17>;
    clocks = <&sysclk K210_CLK_TIMER1>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "timer", "pclk";
    resets = <&sysrst K210_RST_TIMER1>;
   };

   timer4: timer@502f0000 {
    compatible = "snps,dw-apb-timer";
    reg = <0x502F0000 0x14>;
    interrupts = <18>;
    clocks = <&sysclk K210_CLK_TIMER2>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "timer", "pclk";
    resets = <&sysrst K210_RST_TIMER2>;
   };

   timer5: timer@502f0014 {
    compatible = "snps,dw-apb-timer";
    reg = <0x502F0014 0x14>;
    interrupts = <19>;
    clocks = <&sysclk K210_CLK_TIMER2>,
      <&sysclk K210_CLK_APB0>;
    clock-names = "timer", "pclk";
    resets = <&sysrst K210_RST_TIMER2>;
   };
  };

  apb1: bus@50400000 {
   #address-cells = <1>;
   #size-cells = <1>;
   compatible = "simple-pm-bus";
   ranges = <0x50400000 0x50400000 0x40100>;
   clocks = <&sysclk K210_CLK_APB1>;

   wdt0: watchdog@50400000 {
    compatible = "snps,dw-wdt";
    reg = <0x50400000 0x100>;
    interrupts = <21>;
    clocks = <&sysclk K210_CLK_WDT0>,
      <&sysclk K210_CLK_APB1>;
    clock-names = "tclk", "pclk";
    resets = <&sysrst K210_RST_WDT0>;
   };

   wdt1: watchdog@50410000 {
    compatible = "snps,dw-wdt";
    reg = <0x50410000 0x100>;
    interrupts = <22>;
    clocks = <&sysclk K210_CLK_WDT1>,
      <&sysclk K210_CLK_APB1>;
    clock-names = "tclk", "pclk";
    resets = <&sysrst K210_RST_WDT1>;
   };

   sysctl: syscon@50440000 {
    compatible = "canaan,k210-sysctl",
          "syscon", "simple-mfd";
    reg = <0x50440000 0x100>;
    clocks = <&sysclk K210_CLK_APB1>;
    clock-names = "pclk";

    sysclk: clock-controller {
     #clock-cells = <1>;
     compatible = "canaan,k210-clk";
     clocks = <&in0>;
    };

    sysrst: reset-controller {
     compatible = "canaan,k210-rst";
     #reset-cells = <1>;
    };

    reboot: syscon-reboot {
     compatible = "syscon-reboot";
     regmap = <&sysctl>;
     offset = <48>;
     mask = <1>;
     value = <1>;
    };
   };
  };

  apb2: bus@52000000 {
   #address-cells = <1>;
   #size-cells = <1>;
   compatible = "simple-pm-bus";
   ranges = <0x52000000 0x52000000 0x2000200>;
   clocks = <&sysclk K210_CLK_APB2>;

   spi0: spi@52000000 {
    #address-cells = <1>;
    #size-cells = <0>;
    compatible = "canaan,k210-spi";
    reg = <0x52000000 0x100>;
    interrupts = <1>;
    clocks = <&sysclk K210_CLK_SPI0>,
      <&sysclk K210_CLK_APB2>;
    clock-names = "ssi_clk", "pclk";
    resets = <&sysrst K210_RST_SPI0>;
    reset-names = "spi";
    num-cs = <4>;
    reg-io-width = <4>;
    status = "disabled";
   };

   spi1: spi@53000000 {
    #address-cells = <1>;
    #size-cells = <0>;
    compatible = "canaan,k210-spi";
    reg = <0x53000000 0x100>;
    interrupts = <2>;
    clocks = <&sysclk K210_CLK_SPI1>,
      <&sysclk K210_CLK_APB2>;
    clock-names = "ssi_clk", "pclk";
    resets = <&sysrst K210_RST_SPI1>;
    reset-names = "spi";
    num-cs = <4>;
    reg-io-width = <4>;
    status = "disabled";
   };

   spi3: spi@54000000 {
    #address-cells = <1>;
    #size-cells = <0>;
    compatible = "snps,dwc-ssi-1.01a";
    reg = <0x54000000 0x200>;
    interrupts = <4>;
    clocks = <&sysclk K210_CLK_SPI3>,
      <&sysclk K210_CLK_APB2>;
    clock-names = "ssi_clk", "pclk";
    resets = <&sysrst K210_RST_SPI3>;
    reset-names = "spi";

    num-cs = <4>;
    reg-io-width = <4>;
    status = "disabled";
   };
  };
 };
};

[ Dauer der Verarbeitung: 0.4 Sekunden  (vorverarbeitet)  ]