coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mtcmos.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <delay.h>
4 #include <device/mmio.h>
5 #include <soc/spm.h>
6 
7 enum {
8  SRAM_ISOINT_B = 1U << 6,
9  SRAM_CKISO = 1U << 5,
10  PWR_CLK_DIS = 1U << 4,
11  PWR_ON_2ND = 1U << 3,
12  PWR_ON = 1U << 2,
13  PWR_ISO = 1U << 1,
14  PWR_RST_B = 1U << 0
15 };
16 
17 static void mtcmos_power_on(const struct power_domain_data *pd)
18 {
20  (SPM_PROJECT_CODE << 16) | (1U << 0));
21 
22  setbits32(pd->pwr_con, PWR_ON);
24 
25  while (!(read32(&mtk_spm->pwr_status) & pd->pwr_sta_mask) ||
27  continue;
28 
33 
34  while (read32(pd->pwr_con) & pd->sram_ack_mask)
35  continue;
36 
37  if (pd->caps & SCPD_SRAM_ISO) {
39  udelay(1);
41  }
42 }
43 
45 {
46  int i;
47 
48  for (i = 0; i < ARRAY_SIZE(disp); i++)
49  mtcmos_power_on(&disp[i]);
50 }
51 
53 {
54  int i;
55 
56  for (i = 0; i < ARRAY_SIZE(audio); i++)
58 }
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
static uint32_t read32(const void *addr)
Definition: mmio.h:22
#define ARRAY_SIZE(a)
Definition: helpers.h:12
static void mtcmos_power_on(const struct power_domain_data *pd)
Definition: mtcmos.c:17
@ PWR_CLK_DIS
Definition: mtcmos.c:10
@ SRAM_CKISO
Definition: mtcmos.c:9
@ PWR_ON
Definition: mtcmos.c:12
@ PWR_RST_B
Definition: mtcmos.c:14
@ SRAM_ISOINT_B
Definition: mtcmos.c:8
@ PWR_ISO
Definition: mtcmos.c:13
@ PWR_ON_2ND
Definition: mtcmos.c:11
void mtcmos_audio_power_on(void)
Definition: mtcmos.c:52
void mtcmos_display_power_on(void)
Definition: mtcmos.c:44
#define setbits32(addr, set)
Definition: mmio.h:21
#define clrbits32(addr, clear)
Definition: mmio.h:26
static const struct power_domain_data disp[]
Definition: spm.h:156
static struct mtk_spm_regs *const mtk_spm
Definition: spm.h:154
@ SPM_PROJECT_CODE
Definition: spm.h:11
static const struct power_domain_data audio[]
Definition: spm.h:165
#define SCPD_SRAM_ISO
Definition: mtcmos.h:14
u32 pwr_status
Definition: spm.h:105
u32 pwr_status_2nd
Definition: spm.h:106
u32 poweron_config_set
Definition: spm.h:24
u32 sram_pdn_mask
Definition: mtcmos.h:9
u32 sram_ack_mask
Definition: mtcmos.h:10
void * pwr_con
Definition: mtcmos.h:7
u32 pwr_sta_mask
Definition: mtcmos.h:8
void udelay(uint32_t us)
Definition: udelay.c:15