diff options
author | Hui Liu <hui.liu@mediatek.corp-partner.google.com> | 2022-07-05 14:59:03 +0800 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-07-21 10:28:24 +0000 |
commit | f1d9e42269b86fa2d87cf840a14af3725af46627 (patch) | |
tree | 97fc27bd1dfbc0c8ec70317a0ef053a801a1d899 /src/soc/mediatek/mt8188/include | |
parent | 823dcea39ceb44e938ace8b40e0cca4244a052c5 (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.h | 1 | ||||
-rw-r--r-- | src/soc/mediatek/mt8188/include/soc/iocfg.h | 74 | ||||
-rw-r--r-- | src/soc/mediatek/mt8188/include/soc/pmif.h | 142 |
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__*/ |