diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/Kconfig | 9 | ||||
-rw-r--r-- | arch/arm/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/dts/an7581-u-boot.dtsi | 18 | ||||
-rw-r--r-- | arch/arm/dts/en7581-evb-u-boot.dtsi | 11 | ||||
-rw-r--r-- | arch/arm/mach-airoha/Kconfig | 32 | ||||
-rw-r--r-- | arch/arm/mach-airoha/Makefile | 5 | ||||
-rw-r--r-- | arch/arm/mach-airoha/an7581/Makefile | 3 | ||||
-rw-r--r-- | arch/arm/mach-airoha/an7581/init.c | 47 | ||||
-rw-r--r-- | arch/arm/mach-airoha/cpu.c | 20 |
9 files changed, 146 insertions, 0 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index cf08fe63f1e..dfeecebd480 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -600,6 +600,13 @@ choice prompt "Target select" default TARGET_HIKEY +config ARCH_AIROHA + bool "Airoha SoCs" + select DM + select OF_CONTROL + help + Support for the Airoha soc. + config ARCH_AT91 bool "Atmel AT91" select GPIO_EXTRA_HEADER @@ -2251,6 +2258,8 @@ config SYS_KWD_CONFIG Path within the source directory to the kwbimage.cfg file to use when packaging the U-Boot image for use. +source "arch/arm/mach-airoha/Kconfig" + source "arch/arm/mach-apple/Kconfig" source "arch/arm/mach-aspeed/Kconfig" diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 7334e79965f..5ecadb2ef1b 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -51,6 +51,7 @@ PLATFORM_CPPFLAGS += $(arch-y) $(tune-y) # Machine directory name. This list is sorted alphanumerically # by CONFIG_* macro name. +machine-$(CONFIG_ARCH_AIROHA) += airoha machine-$(CONFIG_ARCH_APPLE) += apple machine-$(CONFIG_ARCH_ASPEED) += aspeed machine-$(CONFIG_ARCH_AT91) += at91 diff --git a/arch/arm/dts/an7581-u-boot.dtsi b/arch/arm/dts/an7581-u-boot.dtsi new file mode 100644 index 00000000000..0316b73f3a5 --- /dev/null +++ b/arch/arm/dts/an7581-u-boot.dtsi @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/ { + reserved-memory { + #address-cells = <2>; + #size-cells = <2>; + ranges; + + atf-reserved-memory@80000000 { + no-map; + reg = <0x0 0x80000000 0x0 0x40000>; + }; + }; +}; + +&uart1 { + bootph-all; +}; diff --git a/arch/arm/dts/en7581-evb-u-boot.dtsi b/arch/arm/dts/en7581-evb-u-boot.dtsi new file mode 100644 index 00000000000..ebd3b8b4958 --- /dev/null +++ b/arch/arm/dts/en7581-evb-u-boot.dtsi @@ -0,0 +1,11 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/ { + /* When running as a first-stage bootloader this isn't filled in automatically */ + memory@80000000 { + device_type = "memory"; + reg = <0x0 0x80000000 0x0 0x20000000>; + }; +}; + +#include "an7581-u-boot.dtsi" diff --git a/arch/arm/mach-airoha/Kconfig b/arch/arm/mach-airoha/Kconfig new file mode 100644 index 00000000000..be3562ae3ff --- /dev/null +++ b/arch/arm/mach-airoha/Kconfig @@ -0,0 +1,32 @@ +if ARCH_AIROHA + +config SYS_VENDOR + default "airoha" + +choice + prompt "Airoha board select" + +config TARGET_AN7581 + bool "Airoha AN7581 SoC" + select ARM64 + help + The Airoha EN7581 is a ARM-based SoC with a quad-core Cortex-A7 + including NEON and GPU, Mali-450 graphics, several DDR3 options, + crypto engine, built-in Wi-Fi / Bluetooth combo chip, JPEG decoder, + video interfaces supporting HDMI and MIPI, and video codec support. + Peripherals include Gigabit Ethernet, switch, USB3.0 and OTG, PCIe, + I2S, PCM, S/PDIF, UART, SPI, I2C, IR TX/RX, and PWM. + +endchoice + +config SYS_SOC + default "an7581" if TARGET_AN7581 + +config SYS_BOARD + default "an7581" if TARGET_AN7581 + +config SYS_CONFIG_NAME + default "an7581" if TARGET_AN7581 + +endif + diff --git a/arch/arm/mach-airoha/Makefile b/arch/arm/mach-airoha/Makefile new file mode 100644 index 00000000000..215a300373b --- /dev/null +++ b/arch/arm/mach-airoha/Makefile @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-y += cpu.o + +obj-$(CONFIG_TARGET_AN7581) += an7581/ diff --git a/arch/arm/mach-airoha/an7581/Makefile b/arch/arm/mach-airoha/an7581/Makefile new file mode 100644 index 00000000000..886ab7e4eb9 --- /dev/null +++ b/arch/arm/mach-airoha/an7581/Makefile @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-y += init.o diff --git a/arch/arm/mach-airoha/an7581/init.c b/arch/arm/mach-airoha/an7581/init.c new file mode 100644 index 00000000000..cefe9c6db9e --- /dev/null +++ b/arch/arm/mach-airoha/an7581/init.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <fdtdec.h> +#include <init.h> +#include <asm/armv8/mmu.h> +#include <asm/system.h> + +int print_cpuinfo(void) +{ + printf("CPU: Airoha AN7581\n"); + return 0; +} + +int dram_init(void) +{ + return fdtdec_setup_mem_size_base(); +} + +int dram_init_banksize(void) +{ + return fdtdec_setup_memory_banksize(); +} + +void reset_cpu(ulong addr) +{ + psci_system_reset(); +} + +static struct mm_region an7581_mem_map[] = { + { + /* DDR */ + .virt = 0x80000000UL, + .phys = 0x80000000UL, + .size = 0x80000000UL, + .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) | PTE_BLOCK_OUTER_SHARE, + }, { + .virt = 0x00000000UL, + .phys = 0x00000000UL, + .size = 0x20000000UL, + .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) | + PTE_BLOCK_NON_SHARE | + PTE_BLOCK_PXN | PTE_BLOCK_UXN + }, { + 0, + } +}; +struct mm_region *mem_map = an7581_mem_map; diff --git a/arch/arm/mach-airoha/cpu.c b/arch/arm/mach-airoha/cpu.c new file mode 100644 index 00000000000..a578e964664 --- /dev/null +++ b/arch/arm/mach-airoha/cpu.c @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <cpu_func.h> +#include <dm.h> +#include <init.h> +#include <wdt.h> +#include <dm/uclass-internal.h> + +int arch_cpu_init(void) +{ + icache_enable(); + + return 0; +} + +void enable_caches(void) +{ + /* Enable D-cache. I-cache is already enabled in start.S */ + dcache_enable(); +} |