coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
dpm.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/dpm.h>
5 #include <soc/mcu_common.h>
6 #include <soc/symbols.h>
7 
8 static struct mtk_mcu dpm_mcu[] = {
9  {
10  .firmware_name = CONFIG_DPM_DM_FIRMWARE,
11  .run_address = (void *)DPM_DM_SRAM_BASE,
12  },
13  {
14  .firmware_name = CONFIG_DPM_PM_FIRMWARE,
15  .run_address = (void *)DPM_PM_SRAM_BASE,
16  .priv = mtk_dpm,
17  .reset = dpm_reset,
18  },
19 };
20 
21 void dpm_reset(struct mtk_mcu *mcu)
22 {
23  struct dpm_regs *dpm = mcu->priv;
24 
25  /* write bootargs */
26  write32(&dpm->twam_window_len, 0x0);
27  write32(&dpm->twam_mon_type, 0x0);
28 
29  /* free RST */
31 }
32 
33 int dpm_init(void)
34 {
35  int i;
36  struct mtk_mcu *dpm;
37 
38  if (CONFIG(DPM_FOUR_CHANNEL))
39  if (dpm_4ch_init())
40  return -1;
41 
42  /* config DPM SRAM layout */
44 
45  for (i = 0; i < ARRAY_SIZE(dpm_mcu); i++) {
46  dpm = &dpm_mcu[i];
47  dpm->load_buffer = _dram_dma;
48  dpm->buffer_size = REGION_SIZE(dram_dma);
49  if (mtk_init_mcu(dpm))
50  return -1;
51  }
52 
53  if (CONFIG(DPM_FOUR_CHANNEL))
55  return -1;
56 
57  return 0;
58 }
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
#define ARRAY_SIZE(a)
Definition: helpers.h:12
int dpm_init(void)
Definition: dpm.c:33
void dpm_reset(struct mtk_mcu *mcu)
Definition: dpm.c:21
static struct mtk_mcu dpm_mcu[]
Definition: dpm.c:8
#define DPM_MEM_RATIO_MASK
Definition: dpm.h:42
int dpm_4ch_para_setting(void)
Definition: dpm_4ch.c:75
int dpm_4ch_init(void)
Definition: dpm_4ch.c:67
#define DPM_MEM_RATIO_CFG1
Definition: dpm.h:43
static struct dpm_regs *const mtk_dpm
Definition: dpm.h:49
#define DPM_SW_RSTN_RESET
Definition: dpm.h:40
@ CONFIG
Definition: dsi_common.h:201
#define setbits32(addr, set)
Definition: mmio.h:21
#define clrsetbits32(addr, clear, set)
Definition: mmio.h:16
#define REGION_SIZE(name)
Definition: symbols.h:10
int mtk_init_mcu(struct mtk_mcu *mcu)
Definition: mcu.c:10
@ DPM_PM_SRAM_BASE
Definition: addressmap.h:49
@ DPM_DM_SRAM_BASE
Definition: addressmap.h:50
Definition: dpm.h:10
u32 twam_window_len
Definition: dpm.h:15
u32 sw_rstn
Definition: dpm.h:11
u32 twam_mon_type
Definition: dpm.h:16
size_t buffer_size
Definition: mcu_common.h:11
const char * firmware_name
Definition: mcu_common.h:7
void * priv
Definition: mcu_common.h:12
void * load_buffer
Definition: mcu_common.h:10
static void __noreturn reset(void)