coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
pmif_spmi.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <device/mmio.h>
4 #include <soc/iocfg.h>
5 #include <soc/pll.h>
6 #include <soc/pmif_spmi.h>
7 
8 /* IOCFG_BM, DRV_CFG2 */
9 DEFINE_BITFIELD(SPMI_SCL, 5, 3)
10 DEFINE_BITFIELD(SPMI_SDA, 8, 6)
11 
12 /* TOPRGU, WDT_SWSYSRST2 */
13 DEFINE_BIT(SPMI_MST_RST, 4)
14 DEFINE_BITFIELD(UNLOCK_KEY, 31, 24)
15 
16 /* TOPCKGEN, CLK_CFG_15 */
17 DEFINE_BITFIELD(CLK_SPMI_MST_SEL, 10, 8)
18 DEFINE_BIT(CLK_SPMI_MST_INT, 12)
19 DEFINE_BIT(PDN_SPMI_MST, 15)
20 
21 /* TOPCKGEN, CLK_CFG_UPDATE2 */
22 DEFINE_BIT(SPMI_MST_CK_UPDATE, 30)
23 
25 {
26  /* Software reset */
27  SET32_BITFIELDS(&mtk_rug->wdt_swsysrst2, SPMI_MST_RST, 1, UNLOCK_KEY, 0x85);
28 
29  SET32_BITFIELDS(&mtk_topckgen->clk_cfg_15_clr,
30  CLK_SPMI_MST_SEL, 0x7,
31  CLK_SPMI_MST_INT, 1,
32  PDN_SPMI_MST, 1);
33  SET32_BITFIELDS(&mtk_topckgen->clk_cfg_update2, SPMI_MST_CK_UPDATE, 1);
34 
35  /* Software reset */
36  SET32_BITFIELDS(&mtk_rug->wdt_swsysrst2, SPMI_MST_RST, 0, UNLOCK_KEY, 0x85);
37 
38  /* Enable SPMI */
39  write32(&mtk_spmi_mst->mst_req_en, 1);
40 
41  return 0;
42 }
43 
44 void pmif_spmi_iocfg(void)
45 {
46  SET32_BITFIELDS(&mtk_iocfg_bm->drv_cfg2, SPMI_SCL, 0x2, SPMI_SDA, 0x2);
47 }
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
#define DEFINE_BITFIELD(name, high_bit, low_bit)
Definition: mmio.h:124
#define DEFINE_BIT(name, bit)
Definition: mmio.h:131
#define SET32_BITFIELDS(addr,...)
Definition: mmio.h:201
#define mtk_iocfg_bm
Definition: iocfg.h:27
void pmif_spmi_iocfg(void)
Definition: pmif_spmi.c:44
int spmi_config_master(void)
Definition: pmif_spmi.c:24
#define mtk_topckgen
Definition: pll_common.h:11
#define mtk_spmi_mst
Definition: pmif_spmi.h:44
#define mtk_rug
Definition: pmif_spmi.h:43