summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRex-BC Chen <rex-bc.chen@mediatek.com>2022-10-17 20:49:08 +0800
committerFelix Held <felix-coreboot@felixheld.de>2022-10-21 14:52:17 +0000
commit6ad80f1b81d08e6c1400eaceb710887371254894 (patch)
treed037d3fefba22846355256d66ada6361b858336c
parente8df32775d89aefeb4c7ec48cf0b97a262f9d9ac (diff)
soc/mediatek/mt8186: Add support for reading CPU ID
MT8186 has two slightly different versions: MT8186G and MT8186T (turbo version). Add get_cpu_id() to identify different CPUs. BUG=b:249436110 TEST=cpu id is correct. BRANCH=corsola Signed-off-by: Bo-Chen Chen <rex-bc.chen@mediatek.com> Change-Id: I0612dd589e11853dbddc1d99526e9c9bf170acec Reviewed-on: https://review.coreboot.org/c/coreboot/+/68576 Reviewed-by: Yu-Ping Wu <yupingso@google.com> Reviewed-by: Yidi Lin <yidilin@google.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
-rw-r--r--src/soc/mediatek/common/cpu_id.c15
-rw-r--r--src/soc/mediatek/common/include/soc/cpu_id.h11
-rw-r--r--src/soc/mediatek/mt8186/Makefile.inc1
-rw-r--r--src/soc/mediatek/mt8186/include/soc/efuse.h3
4 files changed, 30 insertions, 0 deletions
diff --git a/src/soc/mediatek/common/cpu_id.c b/src/soc/mediatek/common/cpu_id.c
new file mode 100644
index 0000000000..e31adcdf3f
--- /dev/null
+++ b/src/soc/mediatek/common/cpu_id.c
@@ -0,0 +1,15 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#include <console/console.h>
+#include <device/mmio.h>
+#include <soc/cpu_id.h>
+#include <soc/efuse.h>
+
+u32 get_cpu_id(void)
+{
+ u32 id = read32(&mtk_efuse->cpu_id_reg);
+
+ printk(BIOS_INFO, "CPU: %#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
new file mode 100644
index 0000000000..9453a15864
--- /dev/null
+++ b/src/soc/mediatek/common/include/soc/cpu_id.h
@@ -0,0 +1,11 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef SOC_MEDIATEK_COMMON_CPU_ID_H
+#define SOC_MEDIATEK_COMMON_CPU_ID_H
+
+#define MTK_CPU_ID_MT8186G 0x81861001
+#define MTK_CPU_ID_MT8186T 0x81862001
+
+u32 get_cpu_id(void);
+
+#endif /* SOC_MEDIATEK_COMMON_CPU_ID_H */
diff --git a/src/soc/mediatek/mt8186/Makefile.inc b/src/soc/mediatek/mt8186/Makefile.inc
index cd207773ac..c8dbbc9593 100644
--- a/src/soc/mediatek/mt8186/Makefile.inc
+++ b/src/soc/mediatek/mt8186/Makefile.inc
@@ -1,6 +1,7 @@
ifeq ($(CONFIG_SOC_MEDIATEK_MT8186),y)
# for bootblock, verstage, romstage, ramstage
+all-y += ../common/cpu_id.c
all-y += ../common/flash_controller.c
all-y += ../common/gpio.c ../common/gpio_op.c gpio.c
all-y += ../common/i2c.c i2c.c
diff --git a/src/soc/mediatek/mt8186/include/soc/efuse.h b/src/soc/mediatek/mt8186/include/soc/efuse.h
index fe3dfff9aa..3804b464d8 100644
--- a/src/soc/mediatek/mt8186/include/soc/efuse.h
+++ b/src/soc/mediatek/mt8186/include/soc/efuse.h
@@ -9,9 +9,12 @@
struct efuse_regs {
uint32_t reserved[130];
uint32_t adc_cali_reg;
+ uint32_t reserved1[357];
+ uint32_t cpu_id_reg;
};
check_member(efuse_regs, adc_cali_reg, 0x208);
+check_member(efuse_regs, cpu_id_reg, 0x7a0);
static struct efuse_regs *const mtk_efuse = (void *)EFUSEC_BASE;
#endif