coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
mt6315.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <console/console.h>
4 #include <delay.h>
5 #include <soc/mt6315.h>
6 #include <soc/pmif.h>
7 
8 static struct pmif *pmif_arb = NULL;
9 
10 static void mt6315_read(u32 slvid, u32 reg, u32 *data)
11 {
12  pmif_arb->read(pmif_arb, slvid, reg, data);
13 }
14 
15 static void mt6315_write(u32 slvid, u32 reg, u32 data)
16 {
17  pmif_arb->write(pmif_arb, slvid, reg, data);
18 }
19 
20 void mt6315_write_field(u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
21 {
22  pmif_arb->write_field(pmif_arb, slvid, reg, val, mask, shift);
23 }
24 
25 static void mt6315_wdt_enable(u32 slvid)
26 {
27  mt6315_write(slvid, 0x3A9, 0x63);
28  mt6315_write(slvid, 0x3A8, 0x15);
29  mt6315_write(slvid, 0x127, 0x2);
30  mt6315_write(slvid, 0x127, 0x1);
31  mt6315_write(slvid, 0x127, 0x8);
32  udelay(50);
33  mt6315_write(slvid, 0x128, 0x8);
34  mt6315_write(slvid, 0x3A8, 0);
35  mt6315_write(slvid, 0x3A9, 0);
36 }
37 
38 void mt6315_buck_set_voltage(u32 slvid, u32 buck_id, u32 buck_uv)
39 {
40  unsigned int vol_reg, vol_val;
41 
42  if (!pmif_arb)
43  die("ERROR: pmif_arb not initialized");
44 
45  switch (buck_id) {
46  case MT6315_BUCK_1:
47  vol_reg = MT6315_BUCK_TOP_ELR0;
48  break;
49  case MT6315_BUCK_3:
50  vol_reg = MT6315_BUCK_TOP_ELR3;
51  break;
52  default:
53  die("ERROR: Unknown buck_id %u", buck_id);
54  return;
55  };
56 
57  vol_val = buck_uv / 6250;
58  mt6315_write(slvid, vol_reg, vol_val);
59 }
60 
62 {
63  u32 vol_reg, vol;
64 
65  if (!pmif_arb)
66  die("ERROR: pmif_arb not initialized");
67 
68  switch (buck_id) {
69  case MT6315_BUCK_1:
70  vol_reg = MT6315_BUCK_VBUCK1_DBG0;
71  break;
72  case MT6315_BUCK_3:
73  vol_reg = MT6315_BUCK_VBUCK1_DBG3;
74  break;
75  default:
76  die("ERROR: Unknown buck_id %u", buck_id);
77  return 0;
78  };
79 
80  mt6315_read(slvid, vol_reg, &vol);
81  return vol * 6250;
82 }
83 
84 static void init_pmif_arb(void)
85 {
86  if (!pmif_arb) {
88  if (!pmif_arb)
89  die("ERROR: No spmi device");
90  }
91 
93  die("ERROR - Failed to initialize pmif spmi");
94 }
95 
96 void mt6315_init(void)
97 {
98  init_pmif_arb();
102 }
static void mt6315_write(u32 slvid, u32 reg, u32 data)
Definition: mt6315.c:15
static void mt6315_read(u32 slvid, u32 reg, u32 *data)
Definition: mt6315.c:10
void mt6315_write_field(u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
Definition: mt6315.c:20
static void init_pmif_arb(void)
Definition: mt6315.c:84
static void mt6315_wdt_enable(u32 slvid)
Definition: mt6315.c:25
void mt6315_init(void)
Definition: mt6315.c:96
static struct pmif * pmif_arb
Definition: mt6315.c:8
void mt6315_buck_set_voltage(u32 slvid, u32 buck_id, u32 buck_uv)
Definition: mt6315.c:38
u32 mt6315_buck_get_voltage(u32 slvid, u32 buck_id)
Definition: mt6315.c:61
void __noreturn die(const char *fmt,...)
Definition: die.c:17
@ MT6315_BUCK_VBUCK1_DBG0
Definition: mt6315.h:33
@ MT6315_BUCK_TOP_ELR0
Definition: mt6315.h:31
@ MT6315_BUCK_TOP_ELR3
Definition: mt6315.h:32
@ MT6315_BUCK_VBUCK1_DBG3
Definition: mt6315.h:34
@ MT6315_GPU
Definition: mt6315.h:18
@ MT6315_CPU
Definition: mt6315.h:17
@ MT6315_BUCK_3
Definition: mt6315.h:25
@ MT6315_BUCK_1
Definition: mt6315.h:23
void mt6315_init_setting(void)
Definition: mt6315.c:191
@ PMIF_SPMI
Definition: pmif_common.h:40
struct pmif * get_pmif_controller(int inf, int mstid)
Definition: pmif.c:168
static const int mask[4]
Definition: gpio.c:308
#define NULL
Definition: stddef.h:19
uint32_t u32
Definition: stdint.h:51
void(* write)(struct pmif *arb, u32 slvid, u32 reg, u32 data)
Definition: pmif_common.h:32
void(* read)(struct pmif *arb, u32 slvid, u32 reg, u32 *data)
Definition: pmif_common.h:31
int(* is_pmif_init_done)(struct pmif *arb)
Definition: pmif_common.h:35
void(* write_field)(struct pmif *arb, u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
Definition: pmif_common.h:34
u8 val
Definition: sys.c:300
void udelay(uint32_t us)
Definition: udelay.c:15