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>
This commit is contained in:
Rex-BC Chen 2022-10-17 20:49:08 +08:00 committed by Felix Held
parent e8df32775d
commit 6ad80f1b81
4 changed files with 30 additions and 0 deletions

View File

@ -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;
}

View File

@ -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 */

View File

@ -1,6 +1,7 @@
ifeq ($(CONFIG_SOC_MEDIATEK_MT8186),y) ifeq ($(CONFIG_SOC_MEDIATEK_MT8186),y)
# for bootblock, verstage, romstage, ramstage # for bootblock, verstage, romstage, ramstage
all-y += ../common/cpu_id.c
all-y += ../common/flash_controller.c all-y += ../common/flash_controller.c
all-y += ../common/gpio.c ../common/gpio_op.c gpio.c all-y += ../common/gpio.c ../common/gpio_op.c gpio.c
all-y += ../common/i2c.c i2c.c all-y += ../common/i2c.c i2c.c

View File

@ -9,9 +9,12 @@
struct efuse_regs { struct efuse_regs {
uint32_t reserved[130]; uint32_t reserved[130];
uint32_t adc_cali_reg; 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, adc_cali_reg, 0x208);
check_member(efuse_regs, cpu_id_reg, 0x7a0);
static struct efuse_regs *const mtk_efuse = (void *)EFUSEC_BASE; static struct efuse_regs *const mtk_efuse = (void *)EFUSEC_BASE;
#endif #endif