mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 07:34:31 +00:00
arm: K3: am654: Add support for boot device detection
AM654 allows for booting from primary or backup boot media. Both media can be chosen individually based on switch settings. ROM looks for a valid image in primary boot media, if not found then looks in backup boot media. In order to pass this boot media information to boot loader, ROM stores a value at a particular address. Add support for reading this information and determining the boot media correctly. Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> Signed-off-by: Andreas Dannenberg <dannenberg@ti.com> Signed-off-by: Vignesh R <vigneshr@ti.com> Reviewed-by: Tom Rini <trini@konsulko.com>
This commit is contained in:
parent
f70b72e353
commit
e00646099f
7 changed files with 148 additions and 2 deletions
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_OMAP2PLUS) \
|
#if defined(CONFIG_ARCH_OMAP2PLUS) \
|
||||||
|| defined(CONFIG_EXYNOS4) || defined(CONFIG_EXYNOS5) \
|
|| defined(CONFIG_EXYNOS4) || defined(CONFIG_EXYNOS5) \
|
||||||
|| defined(CONFIG_EXYNOS4210)
|
|| defined(CONFIG_EXYNOS4210) || defined(CONFIG_ARCH_K3)
|
||||||
/* Platform-specific defines */
|
/* Platform-specific defines */
|
||||||
#include <asm/arch/spl.h>
|
#include <asm/arch/spl.h>
|
||||||
|
|
||||||
|
|
|
@ -40,4 +40,11 @@ config SYS_K3_MCU_SCRATCHPAD_SIZE
|
||||||
help
|
help
|
||||||
Describes the size of MCU Scratchpad RAM.
|
Describes the size of MCU Scratchpad RAM.
|
||||||
|
|
||||||
|
config SYS_K3_BOOT_PARAM_TABLE_INDEX
|
||||||
|
hex
|
||||||
|
default 0x41c7fbfc if SOC_K3_AM6
|
||||||
|
help
|
||||||
|
Address at which ROM stores the value which determines if SPL
|
||||||
|
is booted up by primary boot media or secondary boot media.
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -7,11 +7,26 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <asm/io.h>
|
||||||
#include <spl.h>
|
#include <spl.h>
|
||||||
|
#include <asm/arch/hardware.h>
|
||||||
|
|
||||||
#ifdef CONFIG_SPL_BUILD
|
#ifdef CONFIG_SPL_BUILD
|
||||||
|
static void store_boot_index_from_rom(void)
|
||||||
|
{
|
||||||
|
u32 *boot_index = (u32 *)K3_BOOT_PARAM_TABLE_INDEX_VAL;
|
||||||
|
|
||||||
|
*boot_index = *(u32 *)(CONFIG_SYS_K3_BOOT_PARAM_TABLE_INDEX);
|
||||||
|
}
|
||||||
|
|
||||||
void board_init_f(ulong dummy)
|
void board_init_f(ulong dummy)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Cannot delay this further as there is a chance that
|
||||||
|
* K3_BOOT_PARAM_TABLE_INDEX can be over written by SPL MALLOC section.
|
||||||
|
*/
|
||||||
|
store_boot_index_from_rom();
|
||||||
|
|
||||||
/* Init DM early in-order to invoke system controller */
|
/* Init DM early in-order to invoke system controller */
|
||||||
spl_early_init();
|
spl_early_init();
|
||||||
|
|
||||||
|
@ -19,9 +34,50 @@ void board_init_f(ulong dummy)
|
||||||
preloader_console_init();
|
preloader_console_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u32 __get_backup_bootmedia(u32 devstat)
|
||||||
|
{
|
||||||
|
u32 bkup_boot = (devstat & CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_MASK) >>
|
||||||
|
CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_SHIFT;
|
||||||
|
|
||||||
|
switch (bkup_boot) {
|
||||||
|
case BACKUP_BOOT_DEVICE_USB:
|
||||||
|
return BOOT_DEVICE_USB;
|
||||||
|
case BACKUP_BOOT_DEVICE_UART:
|
||||||
|
return BOOT_DEVICE_UART;
|
||||||
|
case BACKUP_BOOT_DEVICE_ETHERNET:
|
||||||
|
return BOOT_DEVICE_ETHERNET;
|
||||||
|
case BACKUP_BOOT_DEVICE_MMC2:
|
||||||
|
return BOOT_DEVICE_MMC2;
|
||||||
|
case BACKUP_BOOT_DEVICE_SPI:
|
||||||
|
return BOOT_DEVICE_SPI;
|
||||||
|
case BACKUP_BOOT_DEVICE_HYPERFLASH:
|
||||||
|
return BOOT_DEVICE_HYPERFLASH;
|
||||||
|
case BACKUP_BOOT_DEVICE_I2C:
|
||||||
|
return BOOT_DEVICE_I2C;
|
||||||
|
};
|
||||||
|
|
||||||
|
return BOOT_DEVICE_RAM;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u32 __get_primary_bootmedia(u32 devstat)
|
||||||
|
{
|
||||||
|
u32 bootmode = devstat & CTRLMMR_MAIN_DEVSTAT_BOOTMODE_MASK;
|
||||||
|
|
||||||
|
if (bootmode == BOOT_DEVICE_OSPI || bootmode == BOOT_DEVICE_QSPI)
|
||||||
|
bootmode = BOOT_DEVICE_SPI;
|
||||||
|
|
||||||
|
return bootmode;
|
||||||
|
}
|
||||||
|
|
||||||
u32 spl_boot_device(void)
|
u32 spl_boot_device(void)
|
||||||
{
|
{
|
||||||
return BOOT_DEVICE_RAM;
|
u32 devstat = readl(CTRLMMR_MAIN_DEVSTAT);
|
||||||
|
u32 bootindex = readl(K3_BOOT_PARAM_TABLE_INDEX_VAL);
|
||||||
|
|
||||||
|
if (bootindex == K3_PRIMARY_BOOTMODE)
|
||||||
|
return __get_primary_bootmedia(devstat);
|
||||||
|
else
|
||||||
|
return __get_backup_bootmedia(devstat);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
23
arch/arm/mach-k3/include/mach/am6_hardware.h
Normal file
23
arch/arm/mach-k3/include/mach/am6_hardware.h
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* K3: AM6 SoC definitions, structures etc.
|
||||||
|
*
|
||||||
|
* (C) Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
|
||||||
|
*/
|
||||||
|
#ifndef __ASM_ARCH_AM6_HARDWARE_H
|
||||||
|
#define __ASM_ARCH_AM6_HARDWARE_H
|
||||||
|
|
||||||
|
#include <config.h>
|
||||||
|
|
||||||
|
#define CTRL_MMR0_BASE 0x00100000
|
||||||
|
#define CTRLMMR_MAIN_DEVSTAT (CTRL_MMR0_BASE + 0x30)
|
||||||
|
|
||||||
|
#define CTRLMMR_MAIN_DEVSTAT_BOOTMODE_MASK GENMASK(3, 0)
|
||||||
|
#define CTRLMMR_MAIN_DEVSTAT_BOOTMODE_SHIFT 0
|
||||||
|
#define CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_MASK GENMASK(6, 4)
|
||||||
|
#define CTRLMMR_MAIN_DEVSTAT_BKUP_BOOTMODE_SHIFT 4
|
||||||
|
|
||||||
|
/* MCU SCRATCHPAD usage */
|
||||||
|
#define K3_BOOT_PARAM_TABLE_INDEX_VAL CONFIG_SYS_K3_MCU_SCRATCHPAD_BASE
|
||||||
|
|
||||||
|
#endif /* __ASM_ARCH_AM6_HARDWARE_H */
|
36
arch/arm/mach-k3/include/mach/am6_spl.h
Normal file
36
arch/arm/mach-k3/include/mach/am6_spl.h
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
|
||||||
|
* Lokesh Vutla <lokeshvutla@ti.com>
|
||||||
|
*/
|
||||||
|
#ifndef _ASM_ARCH_AM6_SPL_H_
|
||||||
|
#define _ASM_ARCH_AM6_SPL_H_
|
||||||
|
|
||||||
|
#define BOOT_DEVICE_RAM 0x00
|
||||||
|
#define BOOT_DEVICE_OSPI 0x01
|
||||||
|
#define BOOT_DEVICE_QSPI 0x02
|
||||||
|
#define BOOT_DEVICE_HYPERFLASH 0x03
|
||||||
|
#define BOOT_DEVICE_SPI 0x04
|
||||||
|
#define BOOT_DEVICE_I2C 0x05
|
||||||
|
#define BOOT_DEVICE_MMC2 0x06
|
||||||
|
#define BOOT_DEVICE_ETHERNET 0x07
|
||||||
|
#define BOOT_DEVICE_USB 0x08
|
||||||
|
#define BOOT_DEVICE_PCIE 0x09
|
||||||
|
#define BOOT_DEVICE_UART 0x0a
|
||||||
|
#define BOOT_DEVICE_NAND 0x0c
|
||||||
|
#define BOOT_DEVICE_MMC1 0x0d
|
||||||
|
#define BOOT_DEVICE_MMC2_2 0x0e
|
||||||
|
|
||||||
|
#define BACKUP_BOOT_DEVICE_RAM 0x0
|
||||||
|
#define BACKUP_BOOT_DEVICE_USB 0x1
|
||||||
|
#define BACKUP_BOOT_DEVICE_UART 0x2
|
||||||
|
#define BACKUP_BOOT_DEVICE_ETHERNET 0x3
|
||||||
|
#define BACKUP_BOOT_DEVICE_MMC2 0x4
|
||||||
|
#define BACKUP_BOOT_DEVICE_SPI 0x5
|
||||||
|
#define BACKUP_BOOT_DEVICE_HYPERFLASH 0x6
|
||||||
|
#define BACKUP_BOOT_DEVICE_I2C 0x7
|
||||||
|
|
||||||
|
#define K3_PRIMARY_BOOTMODE 0x0
|
||||||
|
#define K3_BACKUP_BOOTMODE 0x1
|
||||||
|
|
||||||
|
#endif
|
12
arch/arm/mach-k3/include/mach/hardware.h
Normal file
12
arch/arm/mach-k3/include/mach/hardware.h
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
|
||||||
|
* Lokesh Vutla <lokeshvutla@ti.com>
|
||||||
|
*/
|
||||||
|
#ifndef _ASM_ARCH_HARDWARE_H_
|
||||||
|
#define _ASM_ARCH_HARDWARE_H_
|
||||||
|
|
||||||
|
#ifdef CONFIG_SOC_K3_AM6
|
||||||
|
#include "am6_hardware.h"
|
||||||
|
#endif
|
||||||
|
#endif /* _ASM_ARCH_HARDWARE_H_ */
|
12
arch/arm/mach-k3/include/mach/spl.h
Normal file
12
arch/arm/mach-k3/include/mach/spl.h
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
|
||||||
|
* Lokesh Vutla <lokeshvutla@ti.com>
|
||||||
|
*/
|
||||||
|
#ifndef _ASM_ARCH_SPL_H_
|
||||||
|
#define _ASM_ARCH_SPL_H_
|
||||||
|
|
||||||
|
#ifdef CONFIG_SOC_K3_AM6
|
||||||
|
#include "am6_spl.h"
|
||||||
|
#endif
|
||||||
|
#endif /* _ASM_ARCH_SPL_H_ */
|
Loading…
Reference in a new issue