]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
riscv: Add support for AMD/Xilinx MicroBlaze V
authorMichal Simek <michal.simek@amd.com>
Mon, 6 Nov 2023 11:56:47 +0000 (12:56 +0100)
committerLeo Yu-Chi Liang <ycliang@andestech.com>
Mon, 18 Dec 2023 03:08:49 +0000 (11:08 +0800)
MicroBlaze V is new AMD/Xilinx soft-core 32bit RISC-V processor IP.
It is hardware compatible with classic MicroBlaze processor.

The patch contains initial wiring and configuration for initial HW design
with memory, cpu, interrupt controller, timers and uartlite console
(interrupt controller is listed but U-Boot is not using it).

Provided DT is just describing one configuration and should be taken only
as example.

Signed-off-by: Michal Simek <michal.simek@amd.com>
Reviewed-by: Leo Yu-Chi Liang <ycliang@andestech.com>
Reviewed-by: Padmarao Begari <padmarao.begari@microchip.com>
12 files changed:
arch/riscv/Kconfig
arch/riscv/dts/Makefile
arch/riscv/dts/xilinx-mbv32.dts [new file with mode: 0644]
board/xilinx/Kconfig
board/xilinx/common/board.c
board/xilinx/mbv/Kconfig [new file with mode: 0644]
board/xilinx/mbv/MAINTAINERS [new file with mode: 0644]
board/xilinx/mbv/Makefile [new file with mode: 0644]
board/xilinx/mbv/board.c [new file with mode: 0644]
configs/xilinx_mbv32_defconfig [new file with mode: 0644]
configs/xilinx_mbv32_smode_defconfig [new file with mode: 0644]
include/configs/xilinx_mbv.h [new file with mode: 0644]

index 6d0d812ddb55654d664385f378c8d9bea910477e..67126d96af89f71dbe4a33127a2907e202d74236 100644 (file)
@@ -39,6 +39,9 @@ config TARGET_TH1520_LPI4A
        bool "Support Sipeed's TH1520 Lichee PI 4A Board"
        select SYS_CACHE_SHIFT_6
 
+config TARGET_XILINX_MBV
+       bool "Support AMD/Xilinx MicroBlaze V"
+
 endchoice
 
 config SYS_ICACHE_OFF
@@ -82,6 +85,7 @@ source "board/sifive/unmatched/Kconfig"
 source "board/sipeed/maix/Kconfig"
 source "board/starfive/visionfive2/Kconfig"
 source "board/thead/th1520_lpi4a/Kconfig"
+source "board/xilinx/mbv/Kconfig"
 
 # platform-specific options below
 source "arch/riscv/cpu/andesv5/Kconfig"
index be6c8a422729369d1978db0b73db1265e51f5095..b05bb5607f067a51d74a23ed66b752703974a361 100644 (file)
@@ -9,6 +9,8 @@ dtb-$(CONFIG_TARGET_SIFIVE_UNMATCHED) += hifive-unmatched-a00.dtb
 dtb-$(CONFIG_TARGET_SIPEED_MAIX) += k210-maix-bit.dtb
 dtb-$(CONFIG_TARGET_STARFIVE_VISIONFIVE2) += jh7110-starfive-visionfive-2.dtb
 dtb-$(CONFIG_TARGET_TH1520_LPI4A) += th1520-lichee-pi-4a.dtb
+dtb-$(CONFIG_TARGET_XILINX_MBV) += xilinx-mbv32.dtb
+
 include $(srctree)/scripts/Makefile.dts
 
 targets += $(dtb-y)
diff --git a/arch/riscv/dts/xilinx-mbv32.dts b/arch/riscv/dts/xilinx-mbv32.dts
new file mode 100644 (file)
index 0000000..6a6b8b6
--- /dev/null
@@ -0,0 +1,106 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * dts file for AMD MicroBlaze V
+ *
+ * (C) Copyright 2023, Advanced Micro Devices, Inc.
+ *
+ * Michal Simek <michal.simek@amd.com>
+ */
+
+/dts-v1/;
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+       model = "AMD MicroBlaze V 32bit";
+       compatible = "amd,mbv";
+
+       cpus: cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+               timebase-frequency = <102000000>;
+               cpu_0: cpu@0 {
+                       compatible = "amd,mbv32", "riscv";
+                       device_type = "cpu";
+                       reg = <0>;
+                       riscv,isa = "rv32imafdc";
+                       i-cache-size = <32768>;
+                       d-cache-size = <32768>;
+                       clock-frequency = <102000000>;
+                       cpu0_intc: interrupt-controller {
+                               compatible = "riscv,cpu-intc";
+                               interrupt-controller;
+                               #interrupt-cells = <1>;
+                       };
+               };
+       };
+
+       aliases {
+               serial0 = &uart0;
+       };
+
+       chosen {
+               bootargs = "earlycon";
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@20000000 {
+               device_type = "memory";
+               reg = <0x20000000 0x20000000>;
+       };
+
+       clk102: clock {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <102000000>;
+       };
+
+       axi: axi {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               compatible = "simple-bus";
+               ranges;
+               bootph-all;
+
+               axi_intc: interrupt-controller@41200000 {
+                       compatible = "xlnx,xps-intc-1.00.a";
+                       reg = <0x41200000 0x1000>;
+                       interrupt-controller;
+                       interrupt-parent = <&cpu0_intc>;
+                       #interrupt-cells = <2>;
+                       kind-of-intr = <0>;
+               };
+
+               xlnx_timer0: timer@41c00000 {
+                       compatible = "xlnx,xps-timer-1.00.a";
+                       reg = <0x41c00000 0x1000>;
+                       interrupt-parent = <&axi_intc>;
+                       interrupts = <1 2>;
+                       bootph-all;
+                       xlnx,one-timer-only = <0>;
+                       clock-names = "s_axi_aclk";
+                       clocks = <&clk102>;
+               };
+
+               xlnx_timer1: timer@41c20000 {
+                       compatible = "xlnx,xps-timer-1.00.a";
+                       reg = <0x41c20000 0x1000>;
+                       interrupt-parent = <&axi_intc>;
+                       interrupts = <0 2>;
+                       xlnx,one-timer-only = <0>;
+                       clock-names = "s_axi_aclk";
+                       clocks = <&clk102>;
+               };
+
+               uart0: serial@40600000 {
+                       compatible = "xlnx,xps-uartlite-1.00.a";
+                       reg = <0x40600000 0x1000>;
+                       interrupt-parent = <&axi_intc>;
+                       interrupts = <2 2>;
+                       bootph-all;
+                       clocks = <&clk102>;
+                       current-speed = <115200>;
+                       xlnx,data-bits = <8>;
+                       xlnx,use-parity = <0>;
+               };
+       };
+};
index 4f0776e8bd95a0cc7efacd621b552fe3db5427e3..843198fa0da893c7184bfa602b148fbb421e79e8 100644 (file)
@@ -51,10 +51,11 @@ config XILINX_OF_BOARD_DTB_ADDR
 
 config BOOT_SCRIPT_OFFSET
        hex "Boot script offset"
-       depends on ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET || MICROBLAZE
+       depends on ARCH_ZYNQ || ARCH_ZYNQMP || ARCH_VERSAL || ARCH_VERSAL_NET || MICROBLAZE || TARGET_XILINX_MBV
        default 0xFC0000 if ARCH_ZYNQ || MICROBLAZE
        default 0x3E80000 if ARCH_ZYNQMP
        default 0x7F80000 if ARCH_VERSAL || ARCH_VERSAL_NET
+       default 0 if TARGET_XILINX_MBV
        help
           Specifies distro boot script offset in NAND/QSPI/NOR flash.
 
index 9309b071269fc6ab252668b7047d0207ec6a0e5e..12a877c71549a01eb37dd65941f2adca690add6f 100644 (file)
@@ -652,6 +652,11 @@ int embedded_dtb_select(void)
 #endif
 
 #if defined(CONFIG_LMB)
+
+#ifndef MMU_SECTION_SIZE
+#define MMU_SECTION_SIZE        (1 * 1024 * 1024)
+#endif
+
 phys_addr_t board_get_usable_ram_top(phys_size_t total_size)
 {
        phys_size_t size;
diff --git a/board/xilinx/mbv/Kconfig b/board/xilinx/mbv/Kconfig
new file mode 100644 (file)
index 0000000..4bc9f72
--- /dev/null
@@ -0,0 +1,28 @@
+if TARGET_XILINX_MBV
+
+config SYS_BOARD
+       default "mbv"
+
+config SYS_VENDOR
+       default "xilinx"
+
+config SYS_CPU
+       default "generic"
+
+config SYS_CONFIG_NAME
+       default "xilinx_mbv"
+
+config TEXT_BASE
+       default 0x80000000 if !RISCV_SMODE
+       default 0x80400000 if RISCV_SMODE && ARCH_RV32I
+
+config BOARD_SPECIFIC_OPTIONS
+       def_bool y
+       select GENERIC_RISCV
+       imply BOARD_LATE_INIT
+       imply CMD_SBI
+       imply CMD_PING
+
+source "board/xilinx/Kconfig"
+
+endif
diff --git a/board/xilinx/mbv/MAINTAINERS b/board/xilinx/mbv/MAINTAINERS
new file mode 100644 (file)
index 0000000..445654f
--- /dev/null
@@ -0,0 +1,7 @@
+XILINX MicroBlaze V BOARD
+M:     Michal Simek <michal.simek@amd.com>
+S:     Maintained
+F:     arch/riscv/dts/xilinx-mbv*
+F:     board/xilinx/mbv/
+F:     configs/xilinx_mbv*
+F:     include/configs/xilinx_mbv.h
diff --git a/board/xilinx/mbv/Makefile b/board/xilinx/mbv/Makefile
new file mode 100644 (file)
index 0000000..e2fc0c6
--- /dev/null
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0
+#
+# (C) Copyright 2023, Advanced Micro Devices, Inc.
+
+obj-y  += board.o
diff --git a/board/xilinx/mbv/board.c b/board/xilinx/mbv/board.c
new file mode 100644 (file)
index 0000000..ccf4395
--- /dev/null
@@ -0,0 +1,11 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2023, Advanced Micro Devices, Inc.
+ *
+ * Michal Simek <michal.simek@amd.com>
+ */
+
+int board_init(void)
+{
+       return 0;
+}
diff --git a/configs/xilinx_mbv32_defconfig b/configs/xilinx_mbv32_defconfig
new file mode 100644 (file)
index 0000000..2689495
--- /dev/null
@@ -0,0 +1,30 @@
+CONFIG_RISCV=y
+CONFIG_TEXT_BASE=0x21200000
+CONFIG_SYS_MALLOC_LEN=0x800000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
+CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20200000
+CONFIG_ENV_SIZE=0x20000
+CONFIG_DEFAULT_DEVICE_TREE="xilinx-mbv32"
+CONFIG_DEBUG_UART_BASE=0x40600000
+CONFIG_DEBUG_UART_CLOCK=1000000
+CONFIG_SYS_CLK_FREQ=100000000
+CONFIG_BOOT_SCRIPT_OFFSET=0x0
+CONFIG_SYS_LOAD_ADDR=0x80200000
+CONFIG_DEBUG_UART=y
+CONFIG_TARGET_XILINX_MBV=y
+CONFIG_FIT=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_DISPLAY_CPUINFO=y
+CONFIG_DISPLAY_BOARDINFO=y
+# CONFIG_BOARD_LATE_INIT is not set
+# CONFIG_CMD_MII is not set
+CONFIG_CMD_TIMER=y
+CONFIG_OF_EMBED=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_DM_MTD=y
+CONFIG_DEBUG_UART_ANNOUNCE=y
+CONFIG_DEBUG_UART_SKIP_INIT=y
+CONFIG_XILINX_UARTLITE=y
+CONFIG_XILINX_TIMER=y
+CONFIG_PANIC_HANG=y
diff --git a/configs/xilinx_mbv32_smode_defconfig b/configs/xilinx_mbv32_smode_defconfig
new file mode 100644 (file)
index 0000000..c724d1b
--- /dev/null
@@ -0,0 +1,32 @@
+CONFIG_RISCV=y
+CONFIG_TEXT_BASE=0x21200000
+CONFIG_SYS_MALLOC_LEN=0x800000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
+CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x20200000
+CONFIG_ENV_SIZE=0x20000
+CONFIG_DEFAULT_DEVICE_TREE="xilinx-mbv32"
+CONFIG_DEBUG_UART_BASE=0x40600000
+CONFIG_DEBUG_UART_CLOCK=1000000
+CONFIG_SYS_CLK_FREQ=100000000
+CONFIG_BOOT_SCRIPT_OFFSET=0x0
+CONFIG_SYS_LOAD_ADDR=0x80200000
+CONFIG_TARGET_XILINX_MBV=y
+CONFIG_RISCV_SMODE=y
+CONFIG_FIT=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_DISPLAY_CPUINFO=y
+CONFIG_DISPLAY_BOARDINFO=y
+# CONFIG_BOARD_LATE_INIT is not set
+# CONFIG_CMD_MII is not set
+CONFIG_CMD_TIMER=y
+CONFIG_OF_EMBED=y
+CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_DM_MTD=y
+CONFIG_DEBUG_UART_UARTLITE=y
+CONFIG_DEBUG_UART_ANNOUNCE=y
+CONFIG_DEBUG_UART_SKIP_INIT=y
+CONFIG_XILINX_UARTLITE=y
+# CONFIG_RISCV_TIMER is not set
+CONFIG_XILINX_TIMER=y
+CONFIG_PANIC_HANG=y
diff --git a/include/configs/xilinx_mbv.h b/include/configs/xilinx_mbv.h
new file mode 100644 (file)
index 0000000..dba398a
--- /dev/null
@@ -0,0 +1,6 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * (C) Copyright 2023, Advanced Micro Devices, Inc.
+ *
+ * Michal Simek <michal.simek@amd.com>
+ */