Corstone1000 is a platform from arm, which includes pre
verified Corstone SSE710 sub-system that combines Cortex-A and
Cortex-M processors [0].

This code adds the support for the Cortex-A35 implementation
at host side, it contains also the necessary bits to support
the Corstone 1000 FVP (Fixed Virtual Platform) [1] and also the
FPGA MPS3 board implementation of this platform. [2]

0: https://documentation-service.arm.com/static/619e02b1f45f0b1fbf3a8f16
1: 
https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps
2: https://documentation-service.arm.com/static/61f3f4d7fa8173727a1b71bf

Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhl...@arm.com>
Signed-off-by: Rui Miguel Silva <rui.si...@linaro.org>
---
 arch/arm/Kconfig                         |   8 ++
 arch/arm/dts/Makefile                    |   3 +
 arch/arm/dts/corstone1000-fvp.dts        |  33 +++++
 arch/arm/dts/corstone1000-mps3.dts       |  41 ++++++
 arch/arm/dts/corstone1000.dtsi           | 167 +++++++++++++++++++++++
 board/armltd/corstone1000/Kconfig        |  12 ++
 board/armltd/corstone1000/MAINTAINERS    |   7 +
 board/armltd/corstone1000/Makefile       |   7 +
 board/armltd/corstone1000/corstone1000.c | 120 ++++++++++++++++
 configs/corstone1000_defconfig           |  80 +++++++++++
 include/configs/corstone1000.h           |  85 ++++++++++++
 11 files changed, 563 insertions(+)
 create mode 100644 arch/arm/dts/corstone1000-fvp.dts
 create mode 100644 arch/arm/dts/corstone1000-mps3.dts
 create mode 100644 arch/arm/dts/corstone1000.dtsi
 create mode 100644 board/armltd/corstone1000/Kconfig
 create mode 100644 board/armltd/corstone1000/MAINTAINERS
 create mode 100644 board/armltd/corstone1000/Makefile
 create mode 100644 board/armltd/corstone1000/corstone1000.c
 create mode 100644 configs/corstone1000_defconfig
 create mode 100644 include/configs/corstone1000.h

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 474ce4a555e4..68206e51f7db 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -1279,6 +1279,12 @@ config TARGET_VEXPRESS64_JUNO
        select USB
        imply OF_HAS_PRIOR_STAGE
 
+config TARGET_CORSTONE1000
+       bool "Support Corstone1000 Platform"
+       select ARM64
+       select PL01X_SERIAL
+       select DM
+
 config TARGET_TOTAL_COMPUTE
        bool "Support Total Compute Platform"
        select ARM64
@@ -2230,6 +2236,8 @@ source "arch/arm/mach-nexell/Kconfig"
 
 source "board/armltd/total_compute/Kconfig"
 
+source "board/armltd/corstone1000/Kconfig"
+
 source "board/bosch/shc/Kconfig"
 source "board/bosch/guardian/Kconfig"
 source "board/Marvell/octeontx/Kconfig"
diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 770a51955ea3..c850c040a36f 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -1219,6 +1219,9 @@ dtb-$(CONFIG_TARGET_EA_LPC3250DEVKITV2) += 
lpc3250-ea3250.dtb
 
 dtb-$(CONFIG_ARCH_QEMU) += qemu-arm.dtb qemu-arm64.dtb
 
+dtb-$(CONFIG_TARGET_CORSTONE1000) += corstone1000-mps3.dtb \
+                               corstone1000-fvp.dtb
+
 include $(srctree)/scripts/Makefile.dts
 
 targets += $(dtb-y)
diff --git a/arch/arm/dts/corstone1000-fvp.dts 
b/arch/arm/dts/corstone1000-fvp.dts
new file mode 100644
index 000000000000..2c5ea307d532
--- /dev/null
+++ b/arch/arm/dts/corstone1000-fvp.dts
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2022, Linaro Limited. All rights reserved.
+ *
+ */
+
+/dts-v1/;
+
+#include "corstone1000.dtsi"
+
+/ {
+       model = "corstone1000-fvp";
+
+       ethernet: eth@4010000 {
+               compatible = "smsc,lan91c111";
+               reg = <0x40100000 0x10000>;
+               phy-mode = "mii";
+               interrupt-parent = <&gic>;
+               interrupts = <GIC_SPI 116 0xf04>;
+               reg-io-width = <2>;
+               smsc,irq-push-pull;
+       };
+
+};
+
+&refclk {
+       clock-frequency = <50000000>;
+};
+
+&arm_ffa {
+       status = "okay";
+};
diff --git a/arch/arm/dts/corstone1000-mps3.dts 
b/arch/arm/dts/corstone1000-mps3.dts
new file mode 100644
index 000000000000..99a51d2f5148
--- /dev/null
+++ b/arch/arm/dts/corstone1000-mps3.dts
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2022, Linaro Limited. All rights reserved.
+ *
+ */
+
+/dts-v1/;
+
+#include "corstone1000.dtsi"
+
+/ {
+       model = "corstone1000-mps3";
+
+       ethernet: eth@4010000 {
+               compatible = "smsc,lan9220", "smsc,lan9115";
+               reg = <0x40100000 0x10000>;
+               phy-mode = "mii";
+               interrupt-parent = <&gic>;
+               interrupts = <GIC_SPI 116 IRQ_TYPE_LEVEL_HIGH>;
+               reg-io-width = <2>;
+               smsc,irq-push-pull;
+       };
+
+       usb: usb@40200000 {
+               compatible = "nxp,usb-isp1763";
+               reg = <0x40200000 0x100000>;
+               interrupts-parent = <&gic>;
+               interrupts = <GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
+               bus-width = <16>;
+               dr_mode = "host";
+       };
+};
+
+&refclk {
+       clock-frequency = <50000000>;
+};
+
+&arm_ffa {
+       status = "okay";
+};
diff --git a/arch/arm/dts/corstone1000.dtsi b/arch/arm/dts/corstone1000.dtsi
new file mode 100644
index 000000000000..4d9dc3eeb6f5
--- /dev/null
+++ b/arch/arm/dts/corstone1000.dtsi
@@ -0,0 +1,167 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) 2022, Arm Limited. All rights reserved.
+ * Copyright (c) 2022, Linaro Limited. All rights reserved.
+ *
+ */
+
+#include <dt-bindings/interrupt-controller/arm-gic.h>
+
+/ {
+       compatible = "arm,corstone1000";
+       interrupt-parent = <&gic>;
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       chosen {
+               stdout-path = "/uart@1a510000:115200n8";
+       };
+
+       cpus {
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               cpu@0 {
+                       device_type = "cpu";
+                       compatible = "arm,armv8";
+                       reg = <0>;
+                       next-level-cache = <&L2_0>;
+               };
+       };
+
+       memory@88200000 {
+               device_type = "memory";
+               reg = <0x88200000 0x77e00000>;
+       };
+
+       gic: interrupt-controller@1c000000 {
+               compatible = "arm,gic-400";
+               #interrupt-cells = <3>;
+               #address-cells = <0>;
+               interrupt-controller;
+               reg =   <0x1c010000 0x1000>,
+                       <0x1c02f000 0x2000>,
+                       <0x1c04f000 0x1000>,
+                       <0x1c06f000 0x2000>;
+               interrupts = <1 9 0xf08>;
+       };
+
+       L2_0: l2-cache0 {
+               compatible = "cache";
+       };
+
+       refclk100mhz: refclk100mhz {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <100000000>;
+               clock-output-names = "apb_pclk";
+       };
+
+       smbclk: refclk24mhzx2 {
+               /* Reference 24MHz clock x 2 */
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <48000000>;
+               clock-output-names = "smclk";
+       };
+
+       uartclk: uartclk {
+               /* UART clock - 50MHz */
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <50000000>;
+               clock-output-names = "uartclk";
+       };
+
+       serial0: uart@1a510000 {
+               compatible = "arm,pl011", "arm,primecell";
+               reg = <0x1a510000 0x1000>;
+               interrupt-parent = <&gic>;
+               interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
+               clocks = <&uartclk>, <&refclk100mhz>;
+               clock-names = "uartclk", "apb_pclk";
+       };
+
+       timer {
+               compatible = "arm,armv8-timer";
+               interrupts =    <GIC_PPI 13 0xf08>,
+                               <GIC_PPI 14 0xf08>,
+                               <GIC_PPI 11 0xf08>,
+                               <GIC_PPI 10 0xf08>;
+       };
+
+       refclk: refclk@1a220000 {
+               compatible = "arm,armv7-timer-mem";
+               reg = <0x1a220000  0x1000>;
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+
+               frame@1a230000 {
+                       frame-number = <0>;
+                       interrupts = <GIC_SPI 2 0xf04>;
+                       reg = <0x1a230000 0x1000>;
+               };
+       };
+
+       mbox_es0mhu0: mhu@1b000000 {
+               compatible = "arm,mhuv2","arm,primecell";
+               reg = <0x1b000000 0x1000>,
+                     <0x1b010000 0x1000>;
+               clocks = <&refclk100mhz>;
+               clock-names = "apb_pclk";
+               interrupts = <GIC_SPI 12 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-names = "mhu_rx";
+               #mbox-cells = <1>;
+               mbox-name = "arm-es0-mhu0";
+       };
+
+       mbox_es0mhu1: mhu@1b020000 {
+               compatible = "arm,mhuv2","arm,primecell";
+               reg = <0x1b020000 0x1000>,
+                     <0x1b030000 0x1000>;
+               clocks = <&refclk100mhz>;
+               clock-names = "apb_pclk";
+               interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-names = "mhu_rx";
+               #mbox-cells = <1>;
+               mbox-name = "arm-es0-mhu1";
+       };
+
+       mbox_semhu1: mhu@1b820000 {
+               compatible = "arm,mhuv2","arm,primecell";
+               reg = <0x1b820000 0x1000>,
+                     <0x1b830000 0x1000>;
+               clocks = <&refclk100mhz>;
+               clock-names = "apb_pclk";
+               interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>;
+               interrupt-names = "mhu_rx";
+               #mbox-cells = <1>;
+               mbox-name = "arm-se-mhu1";
+       };
+
+       client {
+               compatible = "arm,client";
+               mboxes = <&mbox_es0mhu0 0>, <&mbox_es0mhu1 0>, <&mbox_semhu1 0>;
+               mbox-names = "es0mhu0", "es0mhu1", "semhu1";
+       };
+
+       extsys0: extsys@1A010310 {
+               compatible = "arm,extsys_ctrl";
+               reg = <0x1A010310 0x4>,
+                     <0x1A010314 0x4>;
+               reg-names = "rstreg", "streg";
+       };
+
+       psci {
+               compatible = "arm,psci-1.0", "arm,psci-0.2";
+               method = "smc";
+       };
+
+       arm_ffa: arm_ffa {
+               compatible = "arm,ffa";
+               method = "smc";
+               status = "disabled";
+       };
+
+};
diff --git a/board/armltd/corstone1000/Kconfig 
b/board/armltd/corstone1000/Kconfig
new file mode 100644
index 000000000000..709674d4cf7d
--- /dev/null
+++ b/board/armltd/corstone1000/Kconfig
@@ -0,0 +1,12 @@
+if TARGET_CORSTONE1000
+
+config SYS_BOARD
+       default "corstone1000"
+
+config SYS_VENDOR
+       default "armltd"
+
+config SYS_CONFIG_NAME
+       default "corstone1000"
+
+endif
diff --git a/board/armltd/corstone1000/MAINTAINERS 
b/board/armltd/corstone1000/MAINTAINERS
new file mode 100644
index 000000000000..8c905686de76
--- /dev/null
+++ b/board/armltd/corstone1000/MAINTAINERS
@@ -0,0 +1,7 @@
+CORSTONE1000 BOARD
+M:     Rui Miguel Silva <rui.si...@linaro.org>
+M:     Vishnu Banavath <vishnu.banav...@arm.com>
+S:     Maintained
+F:     board/armltd/corstone1000/
+F:     include/configs/corstone1000.h
+F:     configs/corstone1000_defconfig
diff --git a/board/armltd/corstone1000/Makefile 
b/board/armltd/corstone1000/Makefile
new file mode 100644
index 000000000000..77a82c28929b
--- /dev/null
+++ b/board/armltd/corstone1000/Makefile
@@ -0,0 +1,7 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# (C) Copyright 2022 Arm Limited
+# (C) Copyright 2022 Linaro
+# Rui Miguel Silva <rui.si...@linaro.org>
+
+obj-y  := corstone1000.o
diff --git a/board/armltd/corstone1000/corstone1000.c 
b/board/armltd/corstone1000/corstone1000.c
new file mode 100644
index 000000000000..8ac1d0a90fc9
--- /dev/null
+++ b/board/armltd/corstone1000/corstone1000.c
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * (C) Copyright 2022 ARM Limited
+ * (C) Copyright 2022 Linaro
+ * Rui Miguel Silva <rui.si...@linaro.org>
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <dm/platform_data/serial_pl01x.h>
+#include <asm/armv8/mmu.h>
+#include <asm/global_data.h>
+
+static const struct pl01x_serial_plat serial_plat = {
+       .base = V2M_UART0,
+       .type = TYPE_PL011,
+       .clock = CONFIG_PL011_CLOCK,
+};
+
+U_BOOT_DRVINFO(corstone1000_serials) = {
+       .name = "serial_pl01x",
+       .plat = &serial_plat,
+};
+
+static struct mm_region corstone1000_mem_map[] = {
+       {
+               /* CVM */
+               .virt = 0x02000000UL,
+               .phys = 0x02000000UL,
+               .size = 0x02000000UL,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
+                       PTE_BLOCK_INNER_SHARE
+       }, {
+               /* QSPI */
+               .virt = 0x08000000UL,
+               .phys = 0x08000000UL,
+               .size = 0x08000000UL,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
+                       PTE_BLOCK_INNER_SHARE
+       }, {
+               /* Host Peripherals */
+               .virt = 0x1A000000UL,
+               .phys = 0x1A000000UL,
+               .size = 0x26000000UL,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+                       PTE_BLOCK_NON_SHARE |
+                       PTE_BLOCK_PXN | PTE_BLOCK_UXN
+       }, {
+               /* USB */
+               .virt = 0x40200000UL,
+               .phys = 0x40200000UL,
+               .size = 0x00100000UL,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+                       PTE_BLOCK_NON_SHARE |
+                       PTE_BLOCK_PXN | PTE_BLOCK_UXN
+       }, {
+               /* ethernet */
+               .virt = 0x40100000UL,
+               .phys = 0x40100000UL,
+               .size = 0x00100000UL,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
+                       PTE_BLOCK_NON_SHARE |
+                       PTE_BLOCK_PXN | PTE_BLOCK_UXN
+       }, {
+               /* OCVM */
+               .virt = 0x80000000UL,
+               .phys = 0x80000000UL,
+               .size = 0x80000000UL,
+               .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
+                       PTE_BLOCK_INNER_SHARE
+       }, {
+               /* List terminator */
+               0,
+       }
+};
+
+struct mm_region *mem_map = corstone1000_mem_map;
+
+int board_init(void)
+{
+       return 0;
+}
+
+int dram_init(void)
+{
+       gd->ram_size = PHYS_SDRAM_1_SIZE;
+
+       return 0;
+}
+
+int dram_init_banksize(void)
+{
+       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+       gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
+
+       return 0;
+}
+
+/*
+ * Board specific ethernet initialization routine.
+ */
+int board_eth_init(struct bd_info *bis)
+{
+       int rc = 0;
+
+#ifndef CONFIG_DM_ETH
+#ifdef CONFIG_SMC91111
+       rc = smc91111_initialize(0, CONFIG_SMC91111_BASE);
+#endif
+#ifdef CONFIG_SMC911X
+       rc = smc911x_initialize(0, CONFIG_SMC911X_BASE);
+#endif
+#endif
+
+       return rc;
+}
+
+void reset_cpu(ulong addr)
+{
+}
diff --git a/configs/corstone1000_defconfig b/configs/corstone1000_defconfig
new file mode 100644
index 000000000000..02f931b0d469
--- /dev/null
+++ b/configs/corstone1000_defconfig
@@ -0,0 +1,80 @@
+CONFIG_ARM=y
+CONFIG_TARGET_CORSTONE1000=y
+CONFIG_SYS_TEXT_BASE=0x80000000
+CONFIG_SYS_MALLOC_F_LEN=0x2000
+CONFIG_SYS_MALLOC_LEN=0x2000000
+CONFIG_SYS_LOAD_ADDR=0x82100000
+CONFIG_NR_DRAM_BANKS=1
+CONFIG_IDENT_STRING=" corstone1000 aarch64 "
+CONFIG_FIT=y
+CONFIG_BOOTDELAY=3
+CONFIG_USE_BOOTARGS=y
+CONFIG_BOOTARGS="console=ttyAMA0 loglevel=9 ip=dhcp earlyprintk"
+CONFIG_LOGLEVEL=7
+# CONFIG_DISPLAY_CPUINFO is not set
+# CONFIG_DISPLAY_BOARDINFO is not set
+CONFIG_HUSH_PARSER=y
+CONFIG_SYS_PROMPT="corstone1000# "
+# CONFIG_CMD_CONSOLE is not set
+CONFIG_CMD_BOOTZ=y
+CONFIG_CMD_BOOTM=y
+CONFIG_CMD_LOADM=y
+CONFIG_CMD_BOOTEFI=y
+CONFIG_EFI_LOADER=y
+CONFIG_EFI_PARTITION=y
+CONFIG_CMD_BOOTEFI_HELLO_COMPILE=y
+CONFIG_CMD_BOOTEFI_HELLO=y
+# CONFIG_CMD_XIMG is not set
+# CONFIG_CMD_ENV_EXISTS is not set
+CONFIG_CMD_NVEDIT_EFI=y
+# CONFIG_CMD_LOADS is not set
+CONFIG_CMD_USB=y
+CONFIG_CMD_ITEST=y
+# CONFIG_CMD_SETEXPR is not set
+# CONFIG_CMD_NFS is not set
+CONFIG_CMD_MII=y
+CONFIG_CMD_CACHE=y
+CONFIG_CMD_EFIDEBUG=y
+CONFIG_CMD_FAT=y
+CONFIG_OF_CONTROL=y
+CONFIG_REGMAP=y
+# CONFIG_MMC is not set
+CONFIG_DM_SERIAL=y
+CONFIG_USB=y
+CONFIG_DM_USB=y
+CONFIG_USB_STORAGE=y
+CONFIG_EFI_MM_COMM_TEE=y
+# CONFIG_OPTEE is not set
+# CONFIG_GENERATE_SMBIOS_TABLE is not set
+# CONFIG_HEXDUMP is not set
+CONFIG_EFI_RUNTIME_UPDATE_CAPSULE=y
+CONFIG_EFI_CAPSULE_ON_DISK=y
+# CONFIG_EFI_CAPSULE_ON_DISK_EARLY is not set
+# CONFIG_EFI_CAPSULE_AUTHENTICATE is not set
+CONFIG_EFI_HAVE_CAPSULE_SUPPORT=y
+CONFIG_EFI_CAPSULE_FIRMWARE_FIT=y
+CONFIG_EFI_CAPSULE_FIRMWARE_RAW=y
+CONFIG_EFI_SECURE_BOOT=y
+CONFIG_DM_RTC=y
+CONFIG_CMD_RTC=y
+CONFIG_EFI_GET_TIME=y
+CONFIG_EFI_SET_TIME=y
+CONFIG_RTC_EMULATION=y
+CONFIG_PSCI_RESET=y
+CONFIG_DISTRO_DEFAULTS=y
+CONFIG_CMD_DHCP=y
+CONFIG_SMC911X=y
+CONFIG_SMC911X_BASE=0x40100000
+CONFIG_DM_ETH=y
+CONFIG_PHY_SMSC=y
+CONFIG_CMD_BOOTEFI_SELFTEST=y
+CONFIG_CMD_TIME=y
+CONFIG_CMD_GETTIME=y
+CONFIG_NET_RANDOM_ETHADDR=y
+CONFIG_VERSION_VARIABLE=y
+CONFIG_PHYLIB=y
+CONFIG_PHY=y
+CONFIG_RAM=y
+CONFIG_ERRNO_STR=y
+CONFIG_CMD_EDITENV=y
+CONFIG_MISC=y
diff --git a/include/configs/corstone1000.h b/include/configs/corstone1000.h
new file mode 100644
index 000000000000..dd7b12475081
--- /dev/null
+++ b/include/configs/corstone1000.h
@@ -0,0 +1,85 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+/*
+ * (C) Copyright 2022 ARM Limited
+ * (C) Copyright 2022 Linaro
+ * Rui Miguel Silva <rui.si...@linaro.org>
+ * Abdellatif El Khlifi <abdellatif.elkhl...@arm.com>
+ *
+ * Configuration for Corstone1000. Parts were derived from other ARM
+ * configurations.
+ */
+
+#ifndef __CORSTONE1000_H
+#define __CORSTONE1000_H
+
+#include <linux/sizes.h>
+
+#define CONFIG_SYS_INIT_SP_ADDR                (CONFIG_SYS_SDRAM_BASE + 
0x03f00000)
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+#define CONFIG_SYS_HZ          1000
+
+#define V2M_SRAM0              0x02000000
+#define V2M_QSPI               0x08000000
+
+#define V2M_DEBUG              0x10000000
+#define V2M_BASE_PERIPH                0x1A000000
+
+#define V2M_BASE               0x80000000
+
+#define V2M_PERIPH_OFFSET(x)   ((x) << 16)
+
+#define V2M_SYSID              (V2M_BASE_PERIPH)
+#define V2M_SYSCTL             (V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(1))
+
+#define V2M_COUNTER_CTL                (V2M_BASE_PERIPH + 
V2M_PERIPH_OFFSET(32))
+#define V2M_COUNTER_READ       (V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(33))
+
+#define V2M_TIMER_CTL          (V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(34))
+#define V2M_TIMER_BASE0                (V2M_BASE_PERIPH + 
V2M_PERIPH_OFFSET(35))
+
+#define V2M_UART0              (V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(81))
+#define V2M_UART1              (V2M_BASE_PERIPH + V2M_PERIPH_OFFSET(82))
+
+#define CONFIG_PL011_CLOCK     50000000
+
+/* Physical Memory Map */
+#define PHYS_SDRAM_1           (V2M_BASE)
+#define PHYS_SDRAM_1_SIZE      0x80000000
+
+#define CONFIG_ENV_SECT_SIZE   SZ_64K
+
+#define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_1
+
+/* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE      512     /* Console I/O Buffer Size */
+#define CONFIG_SYS_MAXARGS     64      /* max command args */
+
+#define CONFIG_EXTRA_ENV_SETTINGS                                              
        \
+                               "usb_pgood_delay=250\0"                         
        \
+                               "boot_bank_flag=0x08002000\0"                   
        \
+                               "kernel_addr_bank_0=0x083EE000\0"               
        \
+                               "kernel_addr_bank_1=0x0936E000\0"               
        \
+                               "retrieve_kernel_load_addr="                    
        \
+                                       "if itest.l *${boot_bank_flag} == 0; 
then "     \
+                                           "setenv kernel_addr 
$kernel_addr_bank_0;"   \
+                                       "else "                                 
        \
+                                           "setenv kernel_addr 
$kernel_addr_bank_1;"   \
+                                       "fi;"                                   
        \
+                                       "\0"                                    
        \
+                               "kernel_addr_r=0x88200000\0"
+
+/*
+ * config_distro_bootcmd define the boot command to distro_bootcmd, but we here
+ * want to first try to load a kernel if exists, override that config then
+ */
+#undef CONFIG_BOOTCOMMAND
+
+#define CONFIG_BOOTCOMMAND                                                     
        \
+                               "run retrieve_kernel_load_addr;"                
        \
+                               "echo Loading kernel from $kernel_addr to 
memory ... ;" \
+                               "loadm $kernel_addr $kernel_addr_r 0xc00000;"   
        \
+                               "usb start; usb reset;"                         
        \
+                               "run distro_bootcmd;"                           
        \
+                               "bootefi $kernel_addr_r $fdtcontroladdr;"
+#endif
-- 
2.35.1

Reply via email to