coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
pmif.c File Reference
#include <assert.h>
#include <console/console.h>
#include <device/mmio.h>
#include <soc/addressmap.h>
#include <soc/pmif.h>
#include <soc/pmif_spi.h>
#include <soc/pmif_spmi.h>
#include <soc/pmif_sw.h>
#include <soc/spmi.h>
#include <timer.h>
Include dependency graph for pmif.c:

Go to the source code of this file.

Functions

static int pmif_check_swinf (struct pmif *arb, long timeout_us, u32 expected_status)
 
static void pmif_send_cmd (struct pmif *arb, int write, u32 opc, u32 slvid, u32 addr, u32 *rdata, u32 wdata, u32 len)
 
static void pmif_spmi_read (struct pmif *arb, u32 slvid, u32 reg, u32 *data)
 
static void pmif_spmi_write (struct pmif *arb, u32 slvid, u32 reg, u32 data)
 
static u32 pmif_spmi_read_field (struct pmif *arb, u32 slvid, u32 reg, u32 mask, u32 shift)
 
static void pmif_spmi_write_field (struct pmif *arb, u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
 
static void pmif_spi_read (struct pmif *arb, u32 slvid, u32 reg, u32 *data)
 
static void pmif_spi_write (struct pmif *arb, u32 slvid, u32 reg, u32 data)
 
static u32 pmif_spi_read_field (struct pmif *arb, u32 slvid, u32 reg, u32 mask, u32 shift)
 
static void pmif_spi_write_field (struct pmif *arb, u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
 
static int is_pmif_init_done (struct pmif *arb)
 
struct pmifget_pmif_controller (int inf, int mstid)
 
static void pmif_select (enum pmic_interface mode)
 
void pmwrap_interface_init (void)
 
int mtk_pmif_init (void)
 

Variables

static const struct pmif pmif_spmi_arb []
 
static const struct pmif pmif_spi_arb []
 

Function Documentation

◆ get_pmif_controller()

struct pmif* get_pmif_controller ( int  inf,
int  mstid 
)

Definition at line 168 of file pmif.c.

References ARRAY_SIZE, die(), pmif::mstid, NULL, PMIF_SPI, pmif_spi_arb, PMIF_SPMI, and pmif_spmi_arb.

Referenced by buf_read(), buf_write(), init_pmif_arb(), mtk_pmif_init(), pmic_read(), pmif_spmi_enable(), pmif_spmi_enable_cmdIssue(), pmif_spmi_enable_swinf(), pmif_spmi_force_normal_mode(), rtc_read(), and rtc_write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_pmif_init_done()

static int is_pmif_init_done ( struct pmif arb)
static

Definition at line 133 of file pmif.c.

References E_NODEV, mtk_pmif_regs::init_done, pmif::mtk_pmif, and read32().

Here is the call graph for this function:

◆ mtk_pmif_init()

int mtk_pmif_init ( void  )

Definition at line 293 of file pmif.c.

References get_pmif_controller(), pmif_clk_init(), PMIF_SPI, pmif_spi_init(), PMIF_SPMI, pmif_spmi_init(), and SPMI_MASTER_0.

Referenced by platform_romstage_main().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pmif_check_swinf()

static int pmif_check_swinf ( struct pmif arb,
long  timeout_us,
u32  expected_status 
)
static

Definition at line 14 of file pmif.c.

References pmif::ch, chan_regs::ch_sta, E_TIMEOUT, GET_SWINF_0_FSM, read32(), stopwatch_expired(), and stopwatch_init_usecs_expire().

Referenced by pmif_send_cmd().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pmif_select()

static void pmif_select ( enum pmic_interface  mode)
static

Definition at line 179 of file pmif.c.

References mtk_pmif_regs::arb_en, die(), mtk_pmif_regs::inf_en, pmif::mtk_pmif, mtk_pmif_regs::other_inf_en, PMIF_SLP_REQ, pmif_spi_arb, pmif_spmi_arb, PMIF_VLD_RDY, SET32_BITFIELDS, mtk_pmif_regs::sleep_protection_ctrl, and mtk_pmif_regs::spi_mode_ctrl.

Referenced by pmwrap_interface_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pmif_send_cmd()

static void pmif_send_cmd ( struct pmif arb,
int  write,
u32  opc,
u32  slvid,
u32  addr,
u32 rdata,
u32  wdata,
u32  len 
)
static

Definition at line 29 of file pmif.c.

References addr, BIOS_ERR, pmif::ch, chan_regs::ch_rdy, chan_regs::ch_send, pmif_check_swinf(), PMIF_READ_US, PMIF_WAIT_IDLE_US, printk, chan_regs::rdata, read32(), SWINF_FSM_IDLE, SWINF_FSM_WFVLDCLR, chan_regs::wdata, and write32().

Referenced by pmif_spi_read(), pmif_spi_write(), pmif_spmi_read(), and pmif_spmi_write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pmif_spi_read()

static void pmif_spi_read ( struct pmif arb,
u32  slvid,
u32  reg,
u32 data 
)
static

Definition at line 100 of file pmif.c.

References PMIF_CMD_REG_0, and pmif_send_cmd().

Referenced by pmif_spi_read_field(), and pmif_spi_write_field().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pmif_spi_read_field()

static u32 pmif_spi_read_field ( struct pmif arb,
u32  slvid,
u32  reg,
u32  mask,
u32  shift 
)
static

Definition at line 111 of file pmif.c.

References mask, and pmif_spi_read().

Here is the call graph for this function:

◆ pmif_spi_write()

static void pmif_spi_write ( struct pmif arb,
u32  slvid,
u32  reg,
u32  data 
)
static

Definition at line 106 of file pmif.c.

References NULL, PMIF_CMD_REG_0, and pmif_send_cmd().

Referenced by pmif_spi_write_field().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pmif_spi_write_field()

static void pmif_spi_write_field ( struct pmif arb,
u32  slvid,
u32  reg,
u32  val,
u32  mask,
u32  shift 
)
static

Definition at line 122 of file pmif.c.

References mask, pmif_spi_read(), pmif_spi_write(), and val.

Here is the call graph for this function:

◆ pmif_spmi_read()

static void pmif_spmi_read ( struct pmif arb,
u32  slvid,
u32  reg,
u32 data 
)
static

Definition at line 67 of file pmif.c.

References PMIF_CMD_EXT_REG_LONG, and pmif_send_cmd().

Referenced by pmif_spmi_read_field(), and pmif_spmi_write_field().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pmif_spmi_read_field()

static u32 pmif_spmi_read_field ( struct pmif arb,
u32  slvid,
u32  reg,
u32  mask,
u32  shift 
)
static

Definition at line 78 of file pmif.c.

References mask, and pmif_spmi_read().

Here is the call graph for this function:

◆ pmif_spmi_write()

static void pmif_spmi_write ( struct pmif arb,
u32  slvid,
u32  reg,
u32  data 
)
static

Definition at line 73 of file pmif.c.

References NULL, PMIF_CMD_EXT_REG_LONG, and pmif_send_cmd().

Referenced by pmif_spmi_write_field().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ pmif_spmi_write_field()

static void pmif_spmi_write_field ( struct pmif arb,
u32  slvid,
u32  reg,
u32  val,
u32  mask,
u32  shift 
)
static

Definition at line 89 of file pmif.c.

References mask, pmif_spmi_read(), pmif_spmi_write(), and val.

Here is the call graph for this function:

◆ pmwrap_interface_init()

void pmwrap_interface_init ( void  )

Definition at line 282 of file pmif.c.

References BIOS_INFO, CONFIG, pmif_select(), PMIF_SLP_REQ, PMIF_VLD_RDY, and printk.

Here is the call graph for this function:

Variable Documentation

◆ pmif_spi_arb

const struct pmif pmif_spi_arb[]
static
Initial value:
= {
{
.mtk_pmif = (struct mtk_pmif_regs *)PMIF_SPI_BASE,
.pmifid = PMIF_SPI,
.write = pmif_spi_write,
.read = pmif_spi_read,
.write_field = pmif_spi_write_field,
.read_field = pmif_spi_read_field,
.is_pmif_init_done = is_pmif_init_done,
},
}
static int is_pmif_init_done(struct pmif *arb)
Definition: pmif.c:133
static u32 pmif_spi_read_field(struct pmif *arb, u32 slvid, u32 reg, u32 mask, u32 shift)
Definition: pmif.c:111
static void pmif_spi_write(struct pmif *arb, u32 slvid, u32 reg, u32 data)
Definition: pmif.c:106
static void pmif_spi_write_field(struct pmif *arb, u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
Definition: pmif.c:122
static void pmif_spi_read(struct pmif *arb, u32 slvid, u32 reg, u32 *data)
Definition: pmif.c:100
static struct dramc_channel const ch[2]
#define PMIF_SPI_AP_CHAN
Definition: pmif.h:123
@ PMIF_SPI
Definition: pmif_common.h:39
@ PMIF_SPI_BASE
Definition: addressmap.h:30

Definition at line 133 of file pmif.c.

Referenced by get_pmif_controller(), and pmif_select().

◆ pmif_spmi_arb

const struct pmif pmif_spmi_arb[]
static
Initial value:
= {
{
.mtk_pmif = (struct mtk_pmif_regs *)PMIF_SPMI_BASE,
.mstid = SPMI_MASTER_0,
.pmifid = PMIF_SPMI,
.write = pmif_spmi_write,
.read = pmif_spmi_read,
.write_field = pmif_spmi_write_field,
.read_field = pmif_spmi_read_field,
.is_pmif_init_done = is_pmif_init_done,
},
}
static void pmif_spmi_write(struct pmif *arb, u32 slvid, u32 reg, u32 data)
Definition: pmif.c:73
static u32 pmif_spmi_read_field(struct pmif *arb, u32 slvid, u32 reg, u32 mask, u32 shift)
Definition: pmif.c:78
static void pmif_spmi_read(struct pmif *arb, u32 slvid, u32 reg, u32 *data)
Definition: pmif.c:67
static void pmif_spmi_write_field(struct pmif *arb, u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
Definition: pmif.c:89
#define PMIF_SPMI_AP_CHAN
Definition: pmif.h:122
@ PMIF_SPMI
Definition: pmif_common.h:40
@ PMIF_SPMI_BASE
Definition: addressmap.h:31
@ SPMI_MASTER_0
Definition: spmi.h:9

Definition at line 133 of file pmif.c.

Referenced by get_pmif_controller(), and pmif_select().