From f83fb11e5fd07d5c310630fbc43a03f637fb0d51 Mon Sep 17 00:00:00 2001 From: Vince Liu Date: Wed, 11 Dec 2024 11:39:49 +0800 Subject: [PATCH] soc/mediatek/mt8189: Add CPU segment ID support Some of MTK's ICs (such as the MT8189) use two eFuse registers to record CPU ID information. Users can use get_cpu_id and get_cpu_segment_id to obtain the SoC version. For example, the CPU ID of the MT8189H is 0x81890000, and the CPU segment ID is 0x21. BUG=b:379008996 BRANCH=none TEST=build pass Signed-off-by: Vince Liu Change-Id: I535874025cde7f6f975246105e32e165083601e0 Reviewed-on: https://review.coreboot.org/c/coreboot/+/87509 Reviewed-by: Yidi Lin Tested-by: build bot (Jenkins) Reviewed-by: Yu-Ping Wu --- src/soc/mediatek/common/cpu_segment_id.c | 15 +++++++++++++++ src/soc/mediatek/common/include/soc/cpu_id.h | 4 ++++ src/soc/mediatek/mt8189/include/soc/efuse.h | 20 ++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 src/soc/mediatek/common/cpu_segment_id.c create mode 100644 src/soc/mediatek/mt8189/include/soc/efuse.h diff --git a/src/soc/mediatek/common/cpu_segment_id.c b/src/soc/mediatek/common/cpu_segment_id.c new file mode 100644 index 0000000000..f7cdc8ad34 --- /dev/null +++ b/src/soc/mediatek/common/cpu_segment_id.c @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ + +#include +#include +#include +#include + +u32 get_cpu_segment_id(void) +{ + u32 id = read32(&mtk_efuse->cpu_seg_id_reg); + + printk(BIOS_INFO, "CPU Segment ID: %#x\n", id); + + return id; +} diff --git a/src/soc/mediatek/common/include/soc/cpu_id.h b/src/soc/mediatek/common/include/soc/cpu_id.h index 9453a15864..173518fc42 100644 --- a/src/soc/mediatek/common/include/soc/cpu_id.h +++ b/src/soc/mediatek/common/include/soc/cpu_id.h @@ -5,7 +5,11 @@ #define MTK_CPU_ID_MT8186G 0x81861001 #define MTK_CPU_ID_MT8186T 0x81862001 +#define MTK_CPU_ID_MT8189 0x81890000 +#define MTK_CPU_SEG_ID_MT8189G 0x20 +#define MTK_CPU_SEG_ID_MT8189H 0x21 u32 get_cpu_id(void); +u32 get_cpu_segment_id(void); #endif /* SOC_MEDIATEK_COMMON_CPU_ID_H */ diff --git a/src/soc/mediatek/mt8189/include/soc/efuse.h b/src/soc/mediatek/mt8189/include/soc/efuse.h new file mode 100644 index 0000000000..031dd5ef78 --- /dev/null +++ b/src/soc/mediatek/mt8189/include/soc/efuse.h @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0-only OR MIT */ + +#ifndef __SOC_MEDIATEK_MT8189_INCLUDE_SOC_EFUSE_H__ +#define __SOC_MEDIATEK_MT8189_INCLUDE_SOC_EFUSE_H__ + +#include +#include + +struct efuse_regs { + u32 reserved1[488]; + u32 cpu_id_reg; + u32 reserved2[15]; + u32 cpu_seg_id_reg; +}; +check_member(efuse_regs, cpu_id_reg, 0x7A0); +check_member(efuse_regs, cpu_seg_id_reg, 0x7E0); + +static struct efuse_regs *const mtk_efuse = (void *)EFUSEC_BASE; + +#endif /*__SOC_MEDIATEK_MT8189_INCLUDE_SOC_EFUSE_H__*/