6 #include <soc/addressmap.h>
33 u32 data, bc = len - 1;
48 (opc << 30) | (write << 29) | (slvid << 24) | (bc << 16) |
addr);
83 data &= (
mask << shift);
95 new = old & ~(
mask << shift);
96 new |= (
val << shift);
116 data &= (
mask << shift);
128 new = old & ~(
mask << shift);
129 new |= (
val << shift);
175 die(
"[%s] Failed to get pmif controller: inf = %d, mstid = %d\n", __func__, inf,
mstid);
181 unsigned int spi_spm_sleep_req, spi_scp_sleep_req,
182 spmi_spm_sleep_req, spmi_scp_sleep_req,
183 spi_md_ctl_pmif_rdy, spi_md_ctl_srclk_en, spi_md_ctl_srvol_en,
184 spmi_md_ctl_pmif_rdy, spmi_md_ctl_srclk_en, spmi_md_ctl_srvol_en,
185 spi_inf_srclken_rc_en, spi_other_inf_dcxo0_en, spi_other_inf_dcxo1_en,
186 spi_arb_srclken_rc_en, spi_arb_dcxo_conn_en, spi_arb_dcxo_nfc_en;
191 spi_spm_sleep_req = 1;
192 spi_scp_sleep_req = 1;
193 spmi_spm_sleep_req = 1;
194 spmi_scp_sleep_req = 1;
201 spi_md_ctl_pmif_rdy = 1;
202 spi_md_ctl_srclk_en = 0;
203 spi_md_ctl_srvol_en = 0;
204 spmi_md_ctl_pmif_rdy = 1;
205 spmi_md_ctl_srclk_en = 0;
206 spmi_md_ctl_srvol_en = 0;
209 spi_inf_srclken_rc_en = 1;
212 spi_other_inf_dcxo0_en = 0;
213 spi_other_inf_dcxo1_en = 0;
216 spi_arb_srclken_rc_en = 1;
217 spi_arb_dcxo_conn_en = 0;
218 spi_arb_dcxo_nfc_en = 0;
223 spi_spm_sleep_req = 0;
224 spi_scp_sleep_req = 0;
225 spmi_spm_sleep_req = 0;
226 spmi_scp_sleep_req = 0;
233 spi_md_ctl_pmif_rdy = 0;
234 spi_md_ctl_srclk_en = 1;
235 spi_md_ctl_srvol_en = 1;
236 spmi_md_ctl_pmif_rdy = 0;
237 spmi_md_ctl_srclk_en = 1;
238 spmi_md_ctl_srvol_en = 1;
241 spi_inf_srclken_rc_en = 0;
244 spi_other_inf_dcxo0_en = 1;
245 spi_other_inf_dcxo1_en = 1;
248 spi_arb_srclken_rc_en = 0;
249 spi_arb_dcxo_conn_en = 1;
250 spi_arb_dcxo_nfc_en = 1;
254 die(
"Can't support pmif mode %d\n", mode);
258 PMIFSPI_SPM_SLEEP_REQ_SEL, spi_spm_sleep_req,
259 PMIFSPI_SCP_SLEEP_REQ_SEL, spi_scp_sleep_req);
261 PMIFSPMI_SPM_SLEEP_REQ_SEL, spmi_spm_sleep_req,
262 PMIFSPMI_SCP_SLEEP_REQ_SEL, spmi_scp_sleep_req);
264 PMIFSPI_MD_CTL_PMIF_RDY, spi_md_ctl_pmif_rdy,
265 PMIFSPI_MD_CTL_SRCLK_EN, spi_md_ctl_srclk_en,
266 PMIFSPI_MD_CTL_SRVOL_EN, spi_md_ctl_srvol_en);
268 PMIFSPMI_MD_CTL_PMIF_RDY, spmi_md_ctl_pmif_rdy,
269 PMIFSPMI_MD_CTL_SRCLK_EN, spmi_md_ctl_srclk_en,
270 PMIFSPMI_MD_CTL_SRVOL_EN, spmi_md_ctl_srvol_en);
272 PMIFSPI_INF_EN_SRCLKEN_RC_HW, spi_inf_srclken_rc_en);
274 PMIFSPI_OTHER_INF_DXCO0_EN, spi_other_inf_dcxo0_en,
275 PMIFSPI_OTHER_INF_DXCO1_EN, spi_other_inf_dcxo1_en);
277 PMIFSPI_ARB_EN_SRCLKEN_RC_HW, spi_arb_srclken_rc_en,
278 PMIFSPI_ARB_EN_DCXO_CONN, spi_arb_dcxo_conn_en,
279 PMIFSPI_ARB_EN_DCXO_NFC, spi_arb_dcxo_nfc_en);
284 if (
CONFIG(SRCLKEN_RC_SUPPORT)) {
static void write32(void *addr, uint32_t val)
static uint32_t read32(const void *addr)
static int is_pmif_init_done(struct pmif *arb)
static void pmif_select(enum pmic_interface mode)
static const struct pmif pmif_spi_arb[]
static u32 pmif_spi_read_field(struct pmif *arb, u32 slvid, u32 reg, u32 mask, u32 shift)
static const struct pmif pmif_spmi_arb[]
static void pmif_spmi_write(struct pmif *arb, u32 slvid, u32 reg, u32 data)
static int pmif_check_swinf(struct pmif *arb, long timeout_us, u32 expected_status)
static u32 pmif_spmi_read_field(struct pmif *arb, u32 slvid, u32 reg, u32 mask, u32 shift)
void pmwrap_interface_init(void)
static void pmif_spi_write(struct pmif *arb, u32 slvid, u32 reg, u32 data)
static void pmif_spi_write_field(struct pmif *arb, u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
struct pmif * get_pmif_controller(int inf, int mstid)
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_spi_read(struct pmif *arb, u32 slvid, u32 reg, u32 *data)
static void pmif_spmi_read(struct pmif *arb, u32 slvid, u32 reg, u32 *data)
static void pmif_spmi_write_field(struct pmif *arb, u32 slvid, u32 reg, u32 val, u32 mask, u32 shift)
#define printk(level,...)
void __noreturn die(const char *fmt,...)
#define SET32_BITFIELDS(addr,...)
static int stopwatch_expired(struct stopwatch *sw)
static void stopwatch_init_usecs_expire(struct stopwatch *sw, long us)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
static struct dramc_channel const ch[2]
#define PMIF_SPMI_AP_CHAN
int pmif_spi_init(struct pmif *arb)
int pmif_spmi_init(struct pmif *arb)
#define GET_SWINF_0_FSM(x)
#define SWINF_FSM_WFVLDCLR
u32 sleep_protection_ctrl
struct mtk_pmif_regs * mtk_pmif