blob: 8557d2ecb832af9898bbf4b16012a9ff807d7f09 [file] [log] [blame]
/*
* Copyright (c) 2018 - 2020 Antmicro <www.antmicro.com>
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <zephyr/dt-bindings/i2c/i2c.h>
/ {
#address-cells = <1>;
#size-cells = <1>;
compatible = "litex,vexriscv", "litex-dev";
model = "litex,vexriscv";
chosen {
zephyr,entropy = &prbs0;
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
clock-frequency = <100000000>;
compatible = "litex,vexriscv-standard", "riscv";
device_type = "cpu";
reg = <0>;
riscv,isa = "rv32im_zicsr_zifencei";
status = "okay";
};
};
soc {
#address-cells = <1>;
#size-cells = <1>;
compatible = "litex,vexriscv";
ranges;
ctrl0: soc_controller@e0000000 {
compatible = "litex,soc-controller";
reg = <0xe0000000 0x4
0xe0000004 0x4
0xe0000008 0x4>;
reg-names = "reset",
"scratch",
"bus_errors";
};
intc0: interrupt-controller@bc0 {
compatible = "litex,vexriscv-intc0";
#address-cells = <0>;
#interrupt-cells = <2>;
interrupt-controller;
reg = <0xbc0 0x4 0xfc0 0x4>;
reg-names = "irq_mask", "irq_pending";
riscv,max-priority = <7>;
};
uart0: serial@e0001800 {
compatible = "litex,uart";
interrupt-parent = <&intc0>;
interrupts = <2 10>;
reg = <0xe0001800 0x4
0xe0001804 0x4
0xe0001808 0x4
0xe000180c 0x4
0xe0001810 0x4
0xe0001814 0x4
0xe0001818 0x4
0xe000181c 0x4>;
reg-names =
"rxtx",
"txfull",
"rxempty",
"ev_status",
"ev_pending",
"ev_enable",
"txempty",
"rxfull";
status = "disabled";
};
spi0: spi@e0002000 {
compatible = "litex,spi";
reg = <0xe0002000 0x4
0xe0002004 0x4
0xe0002008 0x4
0xe000200c 0x4
0xe0002010 0x4
0xe0002014 0x4>;
reg-names = "control",
"status",
"mosi",
"miso",
"cs",
"loopback";
status = "disabled";
#address-cells = <1>;
#size-cells = <0>;
};
spi1: spi@e000c000 {
compatible = "litex,spi-litespi";
reg = <0xe000c000 0x4>,
<0xe000c004 0x4>,
<0xe000c008 0x4>,
<0xe000c00c 0x4>,
<0xe000c010 0x4>,
<0xe000c800 0x4>,
<0x60000000 0x1000000>;
reg-names = "core_mmap_dummy_bits",
"core_master_cs",
"core_master_phyconfig",
"core_master_rxtx",
"core_master_status",
"phy_clk_divisor",
"flash_mmap";
#address-cells = <1>;
#size-cells = <0>;
spiflash0: flash@0 {
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <10000000>;
};
};
timer0: timer@e0002800 {
compatible = "litex,timer0";
interrupt-parent = <&intc0>;
interrupts = <1 0>;
reg = <0xe0002800 0x4
0xe0002804 0x4
0xe0002808 0x4
0xe000280c 0x4
0xe0002810 0x4
0xe0002814 0x4
0xe0002818 0x4
0xe000281c 0x4
0xe0002820 0x4
0xe0002824 0x8>;
reg-names =
"load",
"reload",
"en",
"update_value",
"value",
"ev_status",
"ev_pending",
"ev_enable",
"uptime_latch",
"uptime_cycles";
status = "disabled";
};
wdt0: watchdog@e000d000 {
compatible = "litex,watchdog";
interrupt-parent = <&intc0>;
reg = <0xe000d000 0x4>,
<0xe000d004 0x4>,
<0xe000d008 0x4>,
<0xe000d00c 0x4>,
<0xe000d010 0x4>,
<0xe000d014 0x4>;
reg-names = "control",
"cycles",
"remaining",
"ev_status",
"ev_pending",
"ev_enable";
interrupts = <8 15>;
};
mdio0: mdio@e0008000 {
compatible = "litex,liteeth-mdio";
reg = <0xe0008000 0x4>,
<0xe0008004 0x4>,
<0xe0008008 0x4>;
reg-names = "crg_reset",
"mdio_w",
"mdio_r";
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
phy0: ethernet-phy@1 {
compatible = "ethernet-phy";
reg = <1>;
};
};
eth0: ethernet@e0009800 {
compatible = "litex,liteeth";
interrupt-parent = <&intc0>;
interrupts = <3 0>;
reg = <0xe0009800 0x4
0xe0009804 0x4
0xe0009808 0x4
0xe000980c 0x4
0xe0009810 0x4
0xe0009814 0x4
0xe0009818 0x4
0xe000981c 0x4
0xe0009820 0x4
0xe0009824 0x4
0xe0009828 0x4
0xe000982c 0x4
0xe0009830 0x4
0xe0009834 0x4
0xb0000000 0x2000>;
local-mac-address = [10 e2 d5 00 00 02];
reg-names = "rx_slot",
"rx_length",
"rx_errors",
"rx_ev_status",
"rx_ev_pending",
"rx_ev_enable",
"tx_start",
"tx_ready",
"tx_level",
"tx_slot",
"tx_length",
"tx_ev_status",
"tx_ev_pending",
"tx_ev_enable",
"buffers";
phy-handle = <&phy0>;
status = "disabled";
};
dna0: dna@e0003800 {
compatible = "litex,dna0";
/* DNA data is 57-bits long,
so it requires 8 bytes.
In LiteX each 32-bit register holds
only a single byte of meaningful data,
hence 8 registers. */
reg = <0xe0003800 0x20>;
reg-names = "mem";
status = "disabled";
};
i2c0: i2c@e0005000 {
compatible = "litex,i2c";
reg = <0xe0005000 0x4 0xe0005004 0x4>;
reg-names = "write", "read";
clock-frequency = <I2C_BITRATE_STANDARD>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
gpio_out: gpio@e0005800 {
compatible = "litex,gpio";
reg = <0xe0005800 0x4>;
reg-names = "control";
ngpios = <4>;
port-is-output;
status = "disabled";
gpio-controller;
#gpio-cells = <2>;
};
gpio_in: gpio@e0006000 {
compatible = "litex,gpio";
reg = <0xe0006000 0x4
0xe0006004 0x4
0xe0006008 0x4
0xe0006010 0x4
0xe0006014 0x4>;
interrupt-parent = <&intc0>;
interrupts = <4 2>;
reg-names = "base",
"irq_mode",
"irq_edge",
"irq_pend",
"irq_en";
ngpios = <4>;
status = "disabled";
gpio-controller;
#gpio-cells = <2>;
};
prbs0: prbs@e0006800 {
compatible = "litex,prbs";
reg = <0xe0006800 0x4>;
reg-names = "status";
status = "disabled";
};
pwm0: pwm@e0007000 {
compatible = "litex,pwm";
reg = <0xe0007000 0x4 0xe0007004 0x10 0xe0007014 0x10>;
reg-names = "enable", "width", "period";
status = "disabled";
#pwm-cells = <2>;
};
i2s_rx: i2s_rx@e000a800 {
compatible = "litex,i2s";
reg = <0xe000a800 0x4
0xe000a804 0x4
0xe000a808 0x4
0xe000a80c 0x4
0xe000a810 0x4
0xe000a814 0x4
0xb1000000 0x40000>;
interrupt-parent = <&intc0>;
interrupts = <6 2>;
#address-cells = <1>;
#size-cells = <0>;
reg-names = "ev_status",
"ev_pending",
"ev_enable",
"rx_ctl",
"rx_stat",
"rx_conf",
"fifo";
fifo_depth = <256>;
status = "disabled";
};
i2s_tx: i2s_tx@e000b000 {
compatible = "litex,i2s";
reg = <0xe000b000 0x4
0xe000b004 0x4
0xe000b008 0x4
0xe000b00c 0x4
0xe000b010 0x4
0xe000b014 0x4
0xb2000000 0x40000>;
interrupt-parent = <&intc0>;
interrupts = <7 2>;
#address-cells = <1>;
#size-cells = <0>;
reg-names = "ev_status",
"ev_pending",
"ev_enable",
"tx_ctl",
"tx_stat",
"tx_conf",
"fifo";
fifo_depth = <256>;
status = "disabled";
};
clock-outputs {
#address-cells = <1>;
#size-cells = <0>;
clk0: clock-controller@0 {
#clock-cells = <1>;
reg = <0>;
compatible = "litex,clkout";
clock-output-names = "CLK_0";
litex,clock-frequency = <11289600>;
litex,clock-phase = <0>;
litex,clock-duty-num = <1>;
litex,clock-duty-den = <2>;
litex,clock-margin = <1>;
litex,clock-margin-exp = <2>;
status = "disabled";
};
clk1: clock-controller@1 {
#clock-cells = <1>;
reg = <1>;
compatible = "litex,clkout";
clock-output-names = "CLK_1";
litex,clock-frequency = <22579200>;
litex,clock-phase = <0>;
litex,clock-duty-num = <1>;
litex,clock-duty-den = <2>;
litex,clock-margin = <1>;
litex,clock-margin-exp = <2>;
status = "disabled";
};
};
clock0: clock@e0004800 {
compatible = "litex,clk";
reg = <0xe0004800 0x4
0xe0004804 0x4
0xe0004808 0x4
0xe000480c 0x4
0xe0004810 0x4
0xe0004814 0x4
0xe0004818 0x4
0xe000481c 0x4>;
reg-names = "drp_reset",
"drp_locked",
"drp_read",
"drp_write",
"drp_drdy",
"drp_adr",
"drp_dat_w",
"drp_dat_r";
#clock-cells = <1>;
clocks = <&clk0 0>, <&clk1 1>;
clock-output-names = "CLK_0", "CLK_1";
litex,lock-timeout = <10>;
litex,drdy-timeout = <10>;
litex,divclk-divide-min = <1>;
litex,divclk-divide-max = <107>;
litex,clkfbout-mult-min = <2>;
litex,clkfbout-mult-max = <65>;
litex,vco-freq-min = <600000000>;
litex,vco-freq-max = <1200000000>;
litex,clkout-divide-min = <1>;
litex,clkout-divide-max = <126>;
litex,vco-margin = <0>;
status = "disabled";
};
};
};