mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-09-22 07:32:03 +00:00
Merge branch '2022-01-04-platform-updates' into next
- Assorted updates for vexpress64, apple m1, iot2050 and stemmy platforms.
This commit is contained in:
commit
2a4b89a8ff
13 changed files with 153 additions and 39 deletions
|
@ -7,7 +7,7 @@ config SYS_VENDOR
|
|||
default "armltd"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
default "vexpress_aemv8a"
|
||||
default "vexpress_aemv8"
|
||||
|
||||
config JUNO_DTB_PART
|
||||
string "NOR flash partition holding DTB"
|
||||
|
|
|
@ -3,5 +3,5 @@
|
|||
# (C) Copyright 2000-2004
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
|
||||
obj-y := vexpress64.o
|
||||
obj-y := vexpress64.o lowlevel_init.o
|
||||
obj-$(CONFIG_TARGET_VEXPRESS64_JUNO) += pcie.o
|
||||
|
|
12
board/armltd/vexpress64/lowlevel_init.S
Normal file
12
board/armltd/vexpress64/lowlevel_init.S
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* (C) Copyright 2021 Arm Limited
|
||||
*/
|
||||
|
||||
.global save_boot_params
|
||||
save_boot_params:
|
||||
|
||||
adr x8, prior_stage_fdt_address
|
||||
str x0, [x8]
|
||||
|
||||
b save_boot_params_ret
|
|
@ -18,6 +18,10 @@
|
|||
#include <dm/platform_data/serial_pl01x.h>
|
||||
#include "pcie.h"
|
||||
#include <asm/armv8/mmu.h>
|
||||
#ifdef CONFIG_VIRTIO_NET
|
||||
#include <virtio_types.h>
|
||||
#include <virtio.h>
|
||||
#endif
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
|
@ -64,6 +68,9 @@ __weak void vexpress64_pcie_init(void)
|
|||
int board_init(void)
|
||||
{
|
||||
vexpress64_pcie_init();
|
||||
#ifdef CONFIG_VIRTIO_NET
|
||||
virtio_init();
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -85,7 +92,15 @@ int dram_init_banksize(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* Assigned in lowlevel_init.S
|
||||
* Push the variable into the .data section so that it
|
||||
* does not get cleared later.
|
||||
*/
|
||||
unsigned long __section(".data") prior_stage_fdt_address;
|
||||
|
||||
#ifdef CONFIG_OF_BOARD
|
||||
|
||||
#ifdef CONFIG_TARGET_VEXPRESS64_JUNO
|
||||
#define JUNO_FLASH_SEC_SIZE (256 * 1024)
|
||||
static phys_addr_t find_dtb_in_nor_flash(const char *partname)
|
||||
{
|
||||
|
@ -130,9 +145,11 @@ static phys_addr_t find_dtb_in_nor_flash(const char *partname)
|
|||
|
||||
return ~0;
|
||||
}
|
||||
#endif
|
||||
|
||||
void *board_fdt_blob_setup(int *err)
|
||||
{
|
||||
#ifdef CONFIG_TARGET_VEXPRESS64_JUNO
|
||||
phys_addr_t fdt_rom_addr = find_dtb_in_nor_flash(CONFIG_JUNO_DTB_PART);
|
||||
|
||||
*err = 0;
|
||||
|
@ -142,6 +159,22 @@ void *board_fdt_blob_setup(int *err)
|
|||
}
|
||||
|
||||
return (void *)fdt_rom_addr;
|
||||
#endif
|
||||
|
||||
#ifdef VEXPRESS_FDT_ADDR
|
||||
if (fdt_magic(VEXPRESS_FDT_ADDR) == FDT_MAGIC) {
|
||||
*err = 0;
|
||||
return (void *)VEXPRESS_FDT_ADDR;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (fdt_magic(prior_stage_fdt_address) == FDT_MAGIC) {
|
||||
*err = 0;
|
||||
return (void *)prior_stage_fdt_address;
|
||||
}
|
||||
|
||||
*err = -ENXIO;
|
||||
return NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -60,7 +60,6 @@ CONFIG_CMD_TIME=y
|
|||
# CONFIG_ISO_PARTITION is not set
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_OF_LIST="k3-am6528-iot2050-basic k3-am6548-iot2050-advanced"
|
||||
CONFIG_SPL_MULTI_DTB_FIT=y
|
||||
CONFIG_SPL_OF_LIST="k3-am65-iot2050-spl"
|
||||
CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y
|
||||
|
|
|
@ -15,7 +15,7 @@ CONFIG_ANDROID_BOOT_IMAGE=y
|
|||
CONFIG_BOOTDELAY=1
|
||||
CONFIG_USE_BOOTARGS=y
|
||||
CONFIG_BOOTARGS="console=ttyAMA0 earlycon=pl011,0x1c090000 debug user_debug=31 loglevel=9"
|
||||
CONFIG_BOOTCOMMAND="if smhload ${boot_name} ${boot_addr}; then set bootargs; abootimg addr ${boot_addr}; abootimg get dtb --index=0 fdt_addr; bootm ${boot_addr} ${boot_addr} ${fdt_addr}; else; set fdt_high 0xffffffffffffffff; set initrd_high 0xffffffffffffffff; smhload ${kernel_name} ${kernel_addr}; smhload ${fdtfile} ${fdt_addr}; smhload ${initrd_name} ${initrd_addr} initrd_end; fdt addr ${fdt_addr}; fdt resize; fdt chosen ${initrd_addr} ${initrd_end}; booti $kernel_addr - $fdt_addr; fi"
|
||||
CONFIG_BOOTCOMMAND="if smhload ${boot_name} ${boot_addr_r}; then set bootargs; abootimg addr ${boot_addr_r}; abootimg get dtb --index=0 fdt_addr_r; bootm ${boot_addr_r} ${boot_addr_r} ${fdt_addr_r}; else; set fdt_high 0xffffffffffffffff; set initrd_high 0xffffffffffffffff; smhload ${kernel_name} ${kernel_addr}; smhload ${fdtfile} ${fdt_addr_r}; smhload ${ramdisk_name} ${ramdisk_addr_r} ramdisk_end; fdt addr ${fdt_addr_r}; fdt resize; fdt chosen ${ramdisk_addr_r} ${ramdisk_end}; booti $kernel_addr - $fdt_addr_r; fi"
|
||||
# CONFIG_DISPLAY_CPUINFO is not set
|
||||
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||
CONFIG_SYS_PROMPT="VExpress64# "
|
||||
|
|
|
@ -25,7 +25,7 @@ or turning on CONFIG_BASE_FVP for the more full featured model.
|
|||
Rather than create a new armv8 board similar to armltd/vexpress64, add
|
||||
semihosting calls to the existing one, enabled with CONFIG_SEMIHOSTING
|
||||
and CONFIG_BASE_FVP both set. Also reuse the existing board config file
|
||||
vexpress_aemv8a.h but differentiate the two models by the presence or
|
||||
vexpress_aemv8.h but differentiate the two models by the presence or
|
||||
absence of CONFIG_BASE_FVP. This change is tested and works on both the
|
||||
Foundation and Base fastmodel simulators.
|
||||
|
||||
|
|
9
doc/board/armltd/index.rst
Normal file
9
doc/board/armltd/index.rst
Normal file
|
@ -0,0 +1,9 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Arm Ltd
|
||||
=============
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 2
|
||||
|
||||
vexpress64.rst
|
51
doc/board/armltd/vexpress64.rst
Normal file
51
doc/board/armltd/vexpress64.rst
Normal file
|
@ -0,0 +1,51 @@
|
|||
.. SPDX-License-Identifier: GPL-2.0
|
||||
|
||||
Arm Versatile Express
|
||||
=====================
|
||||
|
||||
The vexpress_* board configuration supports the following platforms:
|
||||
|
||||
* FVP_Base_RevC-2xAEMvA
|
||||
* Juno development board
|
||||
|
||||
Fixed Virtual Platforms
|
||||
-----------------------
|
||||
|
||||
The Fixed Virtual Platforms (FVP) are complete simulations of an Arm system,
|
||||
including processor, memory and peripherals. They are set out in a "programmer's
|
||||
view", which gives a comprehensive model on which to build and test software.
|
||||
|
||||
The supported FVPs are available free of charge and can be downloaded from the
|
||||
Arm developer site [1]_ (user registration might be required).
|
||||
|
||||
Supported features:
|
||||
|
||||
* GICv3
|
||||
* Generic timer
|
||||
* PL011 UART
|
||||
|
||||
The default configuration assumes that U-Boot is bootstrapped using a suitable
|
||||
bootloader, such as Trusted Firmware-A [4]_. The u-boot binary can be passed
|
||||
into the TF-A build: ``make PLAT=<platform> all fip BL33=u-boot.bin``
|
||||
|
||||
The FVPs can be debugged using Arm Development Studio [2]_.
|
||||
|
||||
Juno
|
||||
----
|
||||
|
||||
Juno is an Arm development board with the following features:
|
||||
|
||||
* Arm Cortex-A72/A57 and Arm Cortex-A53 in a "big.LITTLE" configuration
|
||||
* A PCIe Gen2.0 bus with 4 lanes
|
||||
* 8GB of DRAM
|
||||
* GICv2
|
||||
|
||||
More details can be found in the board documentation [3]_.
|
||||
|
||||
References
|
||||
----------
|
||||
|
||||
.. [1] https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms
|
||||
.. [2] https://developer.arm.com/tools-and-software/embedded/arm-development-studio
|
||||
.. [3] https://developer.arm.com/tools-and-software/development-boards/juno-development-board
|
||||
.. [4] https://trustedfirmware-a.readthedocs.io/
|
|
@ -12,6 +12,7 @@ Board-specific doc
|
|||
allwinner/index
|
||||
amlogic/index
|
||||
apple/index
|
||||
armltd/index
|
||||
atmel/index
|
||||
congatec/index
|
||||
coreboot/index
|
||||
|
|
|
@ -3,8 +3,6 @@
|
|||
|
||||
#include <linux/sizes.h>
|
||||
|
||||
#define CONFIG_SYS_SDRAM_BASE 0x880000000
|
||||
|
||||
/* Environment */
|
||||
#define ENV_DEVICE_SETTINGS \
|
||||
"stdin=serial,usbkbd\0" \
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
* bootloader. New images are loaded at the same address for compatibility.
|
||||
*/
|
||||
#define CONFIG_SYS_INIT_SP_ADDR CONFIG_SYS_TEXT_BASE
|
||||
#define CONFIG_SYS_BOOTM_LEN SZ_64M
|
||||
|
||||
/* FIXME: This should be loaded from device tree... */
|
||||
#define CONFIG_SYS_L2_PL310
|
||||
|
|
|
@ -4,36 +4,39 @@
|
|||
* configurations.
|
||||
*/
|
||||
|
||||
#ifndef __VEXPRESS_AEMV8A_H
|
||||
#define __VEXPRESS_AEMV8A_H
|
||||
#ifndef __VEXPRESS_AEMV8_H
|
||||
#define __VEXPRESS_AEMV8_H
|
||||
|
||||
#include <linux/stringify.h>
|
||||
|
||||
#define CONFIG_REMAKE_ELF
|
||||
|
||||
/* Link Definitions */
|
||||
#ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP
|
||||
#ifdef CONFIG_TARGET_VEXPRESS64_JUNO
|
||||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7fff0)
|
||||
#else
|
||||
/* ATF loads u-boot here for BASE_FVP model */
|
||||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x03f00000)
|
||||
#elif CONFIG_TARGET_VEXPRESS64_JUNO
|
||||
#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x7fff0)
|
||||
#endif
|
||||
|
||||
#define CONFIG_SYS_BOOTM_LEN (64 << 20) /* Increase max gunzip size */
|
||||
|
||||
/* CS register bases for the original memory map. */
|
||||
#define V2M_PA_CS0 0x00000000
|
||||
#define V2M_PA_CS1 0x14000000
|
||||
#define V2M_PA_CS2 0x18000000
|
||||
#define V2M_PA_CS3 0x1c000000
|
||||
#define V2M_PA_CS4 0x0c000000
|
||||
#define V2M_PA_CS5 0x10000000
|
||||
#define V2M_BASE 0x80000000
|
||||
#define V2M_PA_BASE 0x00000000
|
||||
|
||||
#define V2M_PA_CS0 (V2M_PA_BASE + 0x00000000)
|
||||
#define V2M_PA_CS1 (V2M_PA_BASE + 0x14000000)
|
||||
#define V2M_PA_CS2 (V2M_PA_BASE + 0x18000000)
|
||||
#define V2M_PA_CS3 (V2M_PA_BASE + 0x1c000000)
|
||||
#define V2M_PA_CS4 (V2M_PA_BASE + 0x0c000000)
|
||||
#define V2M_PA_CS5 (V2M_PA_BASE + 0x10000000)
|
||||
|
||||
#define V2M_PERIPH_OFFSET(x) (x << 16)
|
||||
#define V2M_SYSREGS (V2M_PA_CS3 + V2M_PERIPH_OFFSET(1))
|
||||
#define V2M_SYSCTL (V2M_PA_CS3 + V2M_PERIPH_OFFSET(2))
|
||||
#define V2M_SERIAL_BUS_PCI (V2M_PA_CS3 + V2M_PERIPH_OFFSET(3))
|
||||
|
||||
#define V2M_BASE 0x80000000
|
||||
|
||||
/* Common peripherals relative to CS7. */
|
||||
#define V2M_AACI (V2M_PA_CS3 + V2M_PERIPH_OFFSET(4))
|
||||
#define V2M_MMCI (V2M_PA_CS3 + V2M_PERIPH_OFFSET(5))
|
||||
|
@ -72,23 +75,23 @@
|
|||
|
||||
/* Generic Interrupt Controller Definitions */
|
||||
#ifdef CONFIG_GICV3
|
||||
#define GICD_BASE (0x2f000000)
|
||||
#define GICR_BASE (0x2f100000)
|
||||
#define GICD_BASE (V2M_PA_BASE + 0x2f000000)
|
||||
#define GICR_BASE (V2M_PA_BASE + 0x2f100000)
|
||||
#else
|
||||
|
||||
#ifdef CONFIG_TARGET_VEXPRESS64_BASE_FVP
|
||||
#define GICD_BASE (0x2f000000)
|
||||
#define GICC_BASE (0x2c000000)
|
||||
#elif CONFIG_TARGET_VEXPRESS64_JUNO
|
||||
#ifdef CONFIG_TARGET_VEXPRESS64_JUNO
|
||||
#define GICD_BASE (0x2C010000)
|
||||
#define GICC_BASE (0x2C02f000)
|
||||
#else
|
||||
#define GICD_BASE (V2M_PA_BASE + 0x2f000000)
|
||||
#define GICC_BASE (V2M_PA_BASE + 0x2c000000)
|
||||
#endif
|
||||
#endif /* !CONFIG_GICV3 */
|
||||
|
||||
#ifndef CONFIG_TARGET_VEXPRESS64_JUNO
|
||||
/* The Vexpress64 simulators use SMSC91C111 */
|
||||
#if defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) && !defined(CONFIG_DM_ETH)
|
||||
/* The Vexpress64 BASE_FVP simulator uses SMSC91C111 */
|
||||
#define CONFIG_SMC91111 1
|
||||
#define CONFIG_SMC91111_BASE (0x01A000000)
|
||||
#define CONFIG_SMC91111_BASE (V2M_PA_BASE + 0x01A000000)
|
||||
#endif
|
||||
|
||||
/* PL011 Serial Configuration */
|
||||
|
@ -113,7 +116,7 @@
|
|||
#ifdef CONFIG_TARGET_VEXPRESS64_JUNO
|
||||
#define PHYS_SDRAM_2 (0x880000000)
|
||||
#define PHYS_SDRAM_2_SIZE 0x180000000
|
||||
#elif CONFIG_TARGET_VEXPRESS64_BASE_FVP && CONFIG_NR_DRAM_BANKS == 2
|
||||
#elif CONFIG_NR_DRAM_BANKS == 2
|
||||
#define PHYS_SDRAM_2 (0x880000000)
|
||||
#define PHYS_SDRAM_2_SIZE 0x80000000
|
||||
#endif
|
||||
|
@ -171,15 +174,22 @@
|
|||
BOOTENV
|
||||
|
||||
#elif CONFIG_TARGET_VEXPRESS64_BASE_FVP
|
||||
|
||||
#define VEXPRESS_KERNEL_ADDR 0x80080000
|
||||
#define VEXPRESS_FDT_ADDR 0x8fc00000
|
||||
#define VEXPRESS_BOOT_ADDR 0x8fd00000
|
||||
#define VEXPRESS_RAMDISK_ADDR 0x8fe00000
|
||||
|
||||
#define CONFIG_EXTRA_ENV_SETTINGS \
|
||||
"kernel_name=Image\0" \
|
||||
"kernel_addr=0x80080000\0" \
|
||||
"initrd_name=ramdisk.img\0" \
|
||||
"initrd_addr=0x88000000\0" \
|
||||
"fdtfile=devtree.dtb\0" \
|
||||
"fdt_addr=0x83000000\0" \
|
||||
"boot_name=boot.img\0" \
|
||||
"boot_addr=0x8007f800\0"
|
||||
"kernel_addr_r=" __stringify(VEXPRESS_KERNEL_ADDR) "\0" \
|
||||
"ramdisk_name=ramdisk.img\0" \
|
||||
"ramdisk_addr_r=" __stringify(VEXPRESS_RAMDISK_ADDR) "\0" \
|
||||
"fdtfile=devtree.dtb\0" \
|
||||
"fdt_addr_r=" __stringify(VEXPRESS_FDT_ADDR) "\0" \
|
||||
"boot_name=boot.img\0" \
|
||||
"boot_addr_r=" __stringify(VEXPRESS_BOOT_ADDR) "\0"
|
||||
|
||||
#endif
|
||||
|
||||
/* Monitor Command Prompt */
|
||||
|
@ -193,7 +203,7 @@
|
|||
/* Store environment at top of flash in the same location as blank.img */
|
||||
/* in the Juno firmware. */
|
||||
#else
|
||||
#define CONFIG_SYS_FLASH_BASE 0x0C000000
|
||||
#define CONFIG_SYS_FLASH_BASE (V2M_PA_BASE + 0x0C000000)
|
||||
/* 256 x 256KiB sectors */
|
||||
#define CONFIG_SYS_MAX_FLASH_SECT 256
|
||||
/* Store environment at top of flash */
|
||||
|
@ -210,4 +220,4 @@
|
|||
#define CONFIG_SYS_FLASH_EMPTY_INFO /* flinfo indicates empty blocks */
|
||||
#define FLASH_MAX_SECTOR_SIZE 0x00040000
|
||||
|
||||
#endif /* __VEXPRESS_AEMV8A_H */
|
||||
#endif /* __VEXPRESS_AEMV8_H */
|
Loading…
Reference in a new issue