summaryrefslogtreecommitdiff
path: root/src/soc/mediatek/mt8188/include
diff options
context:
space:
mode:
authorHui Liu <hui.liu@mediatek.corp-partner.google.com>2022-07-05 14:59:03 +0800
committerFelix Held <felix-coreboot@felixheld.de>2022-07-21 10:28:24 +0000
commitf1d9e42269b86fa2d87cf840a14af3725af46627 (patch)
tree97fc27bd1dfbc0c8ec70317a0ef053a801a1d899 /src/soc/mediatek/mt8188/include
parent823dcea39ceb44e938ace8b40e0cca4244a052c5 (diff)
soc/mediatek/mt8188: Add PMIF and PMIC init support
Add PMIF, SPI, SPMI and PMIC init code. These PMIC settings are used by MediaTek internally. We can find these registers in "MT6365_PMIC_Data_Sheet_V1.4.pdf" and "MT6315 datasheet v1.3.pdf". The setting values are provided by MeidaTek designers. TEST=build pass BUG=b:233720142 Signed-off-by: Hui Liu <hui.liu@mediatek.corp-partner.google.com> Change-Id: I05a51894b130a59c28d957b64d6401c8bb9cee91 Reviewed-on: https://review.coreboot.org/c/coreboot/+/65758 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Yu-Ping Wu <yupingso@google.com>
Diffstat (limited to 'src/soc/mediatek/mt8188/include')
-rw-r--r--src/soc/mediatek/mt8188/include/soc/addressmap.h1
-rw-r--r--src/soc/mediatek/mt8188/include/soc/iocfg.h74
-rw-r--r--src/soc/mediatek/mt8188/include/soc/pmif.h142
3 files changed, 217 insertions, 0 deletions
diff --git a/src/soc/mediatek/mt8188/include/soc/addressmap.h b/src/soc/mediatek/mt8188/include/soc/addressmap.h
index d54a9c690b..dce2bb5fee 100644
--- a/src/soc/mediatek/mt8188/include/soc/addressmap.h
+++ b/src/soc/mediatek/mt8188/include/soc/addressmap.h
@@ -74,6 +74,7 @@ enum {
MSDC1_TOP_BASE = IO_PHYS + 0x01EB0000,
I2C5_BASE = IO_PHYS + 0x01EC0000,
I2C6_BASE = IO_PHYS + 0x01EC1000,
+ EFUSE_BASE = IO_PHYS + 0x01F20000,
MSDC0_TOP_BASE = IO_PHYS + 0x01F50000,
};
#endif
diff --git a/src/soc/mediatek/mt8188/include/soc/iocfg.h b/src/soc/mediatek/mt8188/include/soc/iocfg.h
new file mode 100644
index 0000000000..4c37c88921
--- /dev/null
+++ b/src/soc/mediatek/mt8188/include/soc/iocfg.h
@@ -0,0 +1,74 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+/*
+ * This file is created based on MT8188 Functional Specification
+ * Chapter number: 5.2
+ */
+
+#ifndef __SOC_MEDIATEK_MT8188_IOCFG_H__
+#define __SOC_MEDIATEK_MT8188_IOCFG_H__
+
+#include <soc/addressmap.h>
+#include <types.h>
+
+struct mt8188_iocfg_lt_regs {
+ u32 reserved1[4];
+ u32 drv_cfg1;
+ u32 drv_cfg1_set;
+ u32 drv_cfg1_clr;
+ u32 reserved2;
+ u32 drv_cfg2;
+ u32 drv_cfg2_set;
+ u32 drv_cfg2_clr;
+ u32 reserved3;
+ u32 drv_cfg3;
+ u32 drv_cfg3_set;
+ u32 drv_cfg3_clr;
+ u32 reserved4[5];
+ u32 eh_cfg;
+ u32 eh_cfg_set;
+ u32 eh_cfg_clr;
+ u32 reserved5[9];
+ u32 ies_cfg1;
+ u32 ies_cfg1_set;
+ u32 ies_cfg1_clr;
+ u32 reserved6[9];
+ u32 pd_cfg1;
+ u32 pd_cfg1_set;
+ u32 pd_cfg1_clr;
+ u32 reserved7[9];
+ u32 pu_cfg1;
+ u32 pu_cfg1_set;
+ u32 pu_cfg1_clr;
+ u32 reserved8[21];
+ u32 rdsel_cfg3;
+ u32 rdsel_cfg3_set;
+ u32 rdsel_cfg3_clr;
+ u32 reserved9[5];
+ u32 smt_cfg0;
+ u32 smt_cfg0_set;
+ u32 smt_cfg0_clr;
+ u32 reserved10[17];
+ u32 tdsel_cfg3;
+ u32 tdsel_cfg3_set;
+ u32 tdsel_cfg3_clr;
+};
+check_member(mt8188_iocfg_lt_regs, drv_cfg1, 0x10);
+check_member(mt8188_iocfg_lt_regs, drv_cfg2, 0x20);
+check_member(mt8188_iocfg_lt_regs, drv_cfg3, 0x30);
+check_member(mt8188_iocfg_lt_regs, eh_cfg, 0x50);
+check_member(mt8188_iocfg_lt_regs, ies_cfg1, 0x80);
+check_member(mt8188_iocfg_lt_regs, pd_cfg1, 0xB0);
+check_member(mt8188_iocfg_lt_regs, pu_cfg1, 0xE0);
+check_member(mt8188_iocfg_lt_regs, rdsel_cfg3, 0x140);
+check_member(mt8188_iocfg_lt_regs, smt_cfg0, 0x160);
+check_member(mt8188_iocfg_lt_regs, tdsel_cfg3, 0x1B0);
+
+#define mtk_iocfg_lt ((struct mt8188_iocfg_lt_regs *)IOCFG_LT_BASE)
+
+enum {
+ IO_4_MA = 0x1,
+ IO_6_MA = 0x2,
+};
+
+#endif /* __SOC_MEDIATEK_MT8188_IOCFG_H__ */
diff --git a/src/soc/mediatek/mt8188/include/soc/pmif.h b/src/soc/mediatek/mt8188/include/soc/pmif.h
new file mode 100644
index 0000000000..dd8ada7b33
--- /dev/null
+++ b/src/soc/mediatek/mt8188/include/soc/pmif.h
@@ -0,0 +1,142 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+#ifndef __MT8188_SOC_PMIF_H__
+#define __MT8188_SOC_PMIF_H__
+
+#include <device/mmio.h>
+#include <soc/pmif_common.h>
+#include <types.h>
+
+/* indicate which number SW channel start, by project */
+#define PMIF_SPMI_SW_CHAN BIT(6)
+#define PMIF_SPMI_INF 0x5E7
+
+struct mtk_pmif_regs {
+ u32 init_done;
+ u32 reserved1[5];
+ u32 inf_busy_sta;
+ u32 other_busy_sta_0;
+ u32 other_busy_sta_1;
+ u32 inf_en;
+ u32 other_inf_en;
+ u32 inf_cmd_per_0;
+ u32 inf_cmd_per_1;
+ u32 inf_cmd_per_2;
+ u32 inf_cmd_per_3;
+ u32 inf_max_bytecnt_per_0;
+ u32 inf_max_bytecnt_per_1;
+ u32 inf_max_bytecnt_per_2;
+ u32 inf_max_bytecnt_per_3;
+ u32 staupd_ctrl;
+ u32 reserved2[48];
+ u32 int_gps_auxadc_cmd_addr;
+ u32 int_gps_auxadc_cmd;
+ u32 int_gps_auxadc_rdata_addr;
+ u32 reserved3[13];
+ u32 arb_en;
+ u32 reserved4[34];
+ u32 lat_cnter_ctrl;
+ u32 lat_cnter_en;
+ u32 lat_limit_loading;
+ u32 lat_limit_0;
+ u32 lat_limit_1;
+ u32 lat_limit_2;
+ u32 lat_limit_3;
+ u32 lat_limit_4;
+ u32 lat_limit_5;
+ u32 lat_limit_6;
+ u32 lat_limit_7;
+ u32 lat_limit_8;
+ u32 lat_limit_9;
+ u32 reserved5[99];
+ u32 crc_ctrl;
+ u32 crc_sta;
+ u32 sig_mode;
+ u32 pmic_sig_addr;
+ u32 pmic_sig_val;
+ u32 reserved6[2];
+ u32 cmdissue_en;
+ u32 reserved7[10];
+ u32 timer_ctrl;
+ u32 timer_sta;
+ u32 sleep_protection_ctrl;
+ u32 reserved8[6];
+ u32 spi_mode_ctrl;
+ u32 reserved9[2];
+ u32 pmic_eint_sta_addr;
+ u32 reserved10[2];
+ u32 irq_event_en_0;
+ u32 irq_flag_raw_0;
+ u32 irq_flag_0;
+ u32 irq_clr_0;
+ u32 reserved11[244];
+ u32 swinf_0_acc;
+ u32 swinf_0_wdata_31_0;
+ u32 swinf_0_wdata_63_32;
+ u32 reserved12[2];
+ u32 swinf_0_rdata_31_0;
+ u32 swinf_0_rdata_63_32;
+ u32 reserved13[2];
+ u32 swinf_0_vld_clr;
+ u32 swinf_0_sta;
+ u32 reserved14[5];
+ u32 swinf_1_acc;
+ u32 swinf_1_wdata_31_0;
+ u32 swinf_1_wdata_63_32;
+ u32 reserved15[2];
+ u32 swinf_1_rdata_31_0;
+ u32 swinf_1_rdata_63_32;
+ u32 reserved16[2];
+ u32 swinf_1_vld_clr;
+ u32 swinf_1_sta;
+ u32 reserved17[5];
+ u32 swinf_2_acc;
+ u32 swinf_2_wdata_31_0;
+ u32 swinf_2_wdata_63_32;
+ u32 reserved18[2];
+ u32 swinf_2_rdata_31_0;
+ u32 swinf_2_rdata_63_32;
+ u32 reserved19[2];
+ u32 swinf_2_vld_clr;
+ u32 swinf_2_sta;
+ u32 reserved20[5];
+ u32 swinf_3_acc;
+ u32 swinf_3_wdata_31_0;
+ u32 swinf_3_wdata_63_32;
+ u32 reserved21[2];
+ u32 swinf_3_rdata_31_0;
+ u32 swinf_3_rdata_63_32;
+ u32 reserved22[2];
+ u32 swinf_3_vld_clr;
+ u32 swinf_3_sta;
+ u32 reserved23[133];
+};
+
+check_member(mtk_pmif_regs, inf_busy_sta, 0x18);
+check_member(mtk_pmif_regs, int_gps_auxadc_cmd_addr, 0x110);
+check_member(mtk_pmif_regs, arb_en, 0x0150);
+check_member(mtk_pmif_regs, lat_cnter_en, 0x1E0);
+check_member(mtk_pmif_regs, crc_ctrl, 0x39C);
+check_member(mtk_pmif_regs, cmdissue_en, 0x3B8);
+check_member(mtk_pmif_regs, timer_ctrl, 0x3E4);
+check_member(mtk_pmif_regs, spi_mode_ctrl, 0x408);
+check_member(mtk_pmif_regs, pmic_eint_sta_addr, 0x414);
+check_member(mtk_pmif_regs, irq_event_en_0, 0x420);
+check_member(mtk_pmif_regs, swinf_0_acc, 0x800);
+
+#define PMIF_SPMI_AP_CHAN (PMIF_SPMI_BASE + 0x880)
+#define PMIF_SPI_AP_CHAN (PMIF_SPI_BASE + 0x880)
+
+struct mtk_clk_monitor_regs {
+ u32 clk_monitor_ctrl;
+};
+
+#define mtk_clk_monitor ((struct mtk_clk_monitor_regs *)EFUSE_BASE + 0x45C)
+
+enum {
+ FREQ_260MHZ = 260,
+};
+
+#define FREQ_METER_ABIST_AD_OSC_CK 42
+
+#endif /*__MT8188_SOC_PMIF_H__*/