arm: mach-k3: am62p: Fixup CPU core, CAN-FD and Video-codec nodes in fdt
AM62P SOC is available in multiple variants: -CPU cores (Cortex-A) AM62Px1 (1 core), AM62Px2 (2 cores), AM62Px4 (4 cores) -With and without CAN-FD & Video-codec support Remove the relevant FDT nodes by reading the actual configuration from the SoC registers, with that change it is possible to have a single dts/dtb file handling the different variant at runtime. Signed-off-by: Aparna Patra <a-patra@ti.com> Reviewed-by: Bryan Brattlof <bb@ti.com>
This commit is contained in:
@@ -7,8 +7,42 @@
|
||||
#include "../common_fdt.h"
|
||||
#include <fdt_support.h>
|
||||
|
||||
static void fdt_fixup_cores_wdt_nodes_am62p(void *blob, int core_nr)
|
||||
{
|
||||
char node_path[32];
|
||||
|
||||
if (core_nr < 1)
|
||||
return;
|
||||
|
||||
for (; core_nr < 4; core_nr++) {
|
||||
snprintf(node_path, sizeof(node_path), "/cpus/cpu@%d", core_nr);
|
||||
fdt_del_node_path(blob, node_path);
|
||||
snprintf(node_path, sizeof(node_path), "/cpus/cpu-map/cluster0/core%d", core_nr);
|
||||
fdt_del_node_path(blob, node_path);
|
||||
snprintf(node_path, sizeof(node_path), "/bus@f0000/watchdog@e0%d0000", core_nr);
|
||||
fdt_del_node_path(blob, node_path);
|
||||
}
|
||||
}
|
||||
|
||||
static void fdt_fixup_video_codec_nodes_am62p(void *blob, bool has_video_codec)
|
||||
{
|
||||
if (!has_video_codec)
|
||||
fdt_del_node_path(blob, "/bus@f0000/video-codec@30210000");
|
||||
}
|
||||
|
||||
static void fdt_fixup_canfd_nodes_am62p(void *blob, bool has_canfd)
|
||||
{
|
||||
if (!has_canfd) {
|
||||
fdt_del_node_path(blob, "/bus@f0000/can@20701000");
|
||||
fdt_del_node_path(blob, "/bus@f0000/can@20711000");
|
||||
}
|
||||
}
|
||||
|
||||
int ft_system_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
fdt_fixup_cores_wdt_nodes_am62p(blob, k3_get_core_nr());
|
||||
fdt_fixup_video_codec_nodes_am62p(blob, k3_has_video_codec());
|
||||
fdt_fixup_canfd_nodes_am62p(blob, k3_has_canfd());
|
||||
fdt_fixup_reserved(blob, "tfa", CONFIG_K3_ATF_LOAD_ADDR, 0x80000);
|
||||
fdt_fixup_reserved(blob, "optee", CONFIG_K3_OPTEE_LOAD_ADDR, 0x1800000);
|
||||
|
||||
|
@@ -19,6 +19,14 @@
|
||||
#define MCU_CTRL_MMR0_BASE 0x04500000
|
||||
#define WKUP_CTRL_MMR0_BASE 0x43000000
|
||||
|
||||
#define CTRLMMR_WKUP_JTAG_DEVICE_ID (WKUP_CTRL_MMR0_BASE + 0x18)
|
||||
#define JTAG_DEV_CORE_NR_MASK GENMASK(19, 18)
|
||||
#define JTAG_DEV_CORE_NR_SHIFT 18
|
||||
#define JTAG_DEV_CANFD_MASK BIT(15)
|
||||
#define JTAG_DEV_CANFD_SHIFT 15
|
||||
#define JTAG_DEV_VIDEO_CODEC_MASK BIT(14)
|
||||
#define JTAG_DEV_VIDEO_CODEC_SHIFT 14
|
||||
|
||||
#define CTRLMMR_MAIN_DEVSTAT (WKUP_CTRL_MMR0_BASE + 0x30)
|
||||
#define MAIN_DEVSTAT_PRIMARY_BOOTMODE_MASK GENMASK(6, 3)
|
||||
#define MAIN_DEVSTAT_PRIMARY_BOOTMODE_SHIFT 3
|
||||
@@ -72,6 +80,27 @@
|
||||
|
||||
#define TI_SRAM_SCRATCH_BOARD_EEPROM_START 0x43c30000
|
||||
|
||||
static inline int k3_get_core_nr(void)
|
||||
{
|
||||
u32 dev_id = readl(CTRLMMR_WKUP_JTAG_DEVICE_ID);
|
||||
|
||||
return ((dev_id & JTAG_DEV_CORE_NR_MASK) >> JTAG_DEV_CORE_NR_SHIFT) + 1;
|
||||
}
|
||||
|
||||
static inline int k3_has_video_codec(void)
|
||||
{
|
||||
u32 dev_id = readl(CTRLMMR_WKUP_JTAG_DEVICE_ID);
|
||||
|
||||
return !((dev_id & JTAG_DEV_VIDEO_CODEC_MASK) >> JTAG_DEV_VIDEO_CODEC_SHIFT);
|
||||
}
|
||||
|
||||
static inline int k3_has_canfd(void)
|
||||
{
|
||||
u32 dev_id = readl(CTRLMMR_WKUP_JTAG_DEVICE_ID);
|
||||
|
||||
return (dev_id & JTAG_DEV_CANFD_MASK) >> JTAG_DEV_CANFD_SHIFT;
|
||||
}
|
||||
|
||||
#if defined(CONFIG_SYS_K3_SPL_ATF) && !defined(__ASSEMBLY__)
|
||||
|
||||
static const u32 put_device_ids[] = {};
|
||||
|
Reference in New Issue
Block a user