|
@@ -313,3 +313,92 @@ static int omap3_pwrdm_read_logic_pwrst(struct powerdomain *pwrdm)
|
|
OMAP2_PM_PWSTST,
|
|
OMAP2_PM_PWSTST,
|
|
OMAP3430_LOGICSTATEST_MASK);
|
|
OMAP3430_LOGICSTATEST_MASK);
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+static int omap3_pwrdm_read_logic_retst(struct powerdomain *pwrdm)
|
|
|
|
+{
|
|
|
|
+ return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
|
|
|
+ OMAP2_PM_PWSTCTRL,
|
|
|
|
+ OMAP3430_LOGICSTATEST_MASK);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int omap3_pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm)
|
|
|
|
+{
|
|
|
|
+ return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
|
|
|
+ OMAP3430_PM_PREPWSTST,
|
|
|
|
+ OMAP3430_LASTLOGICSTATEENTERED_MASK);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int omap3_get_mem_bank_lastmemst_mask(u8 bank)
|
|
|
|
+{
|
|
|
|
+ switch (bank) {
|
|
|
|
+ case 0:
|
|
|
|
+ return OMAP3430_LASTMEM1STATEENTERED_MASK;
|
|
|
|
+ case 1:
|
|
|
|
+ return OMAP3430_LASTMEM2STATEENTERED_MASK;
|
|
|
|
+ case 2:
|
|
|
|
+ return OMAP3430_LASTSHAREDL2CACHEFLATSTATEENTERED_MASK;
|
|
|
|
+ case 3:
|
|
|
|
+ return OMAP3430_LASTL2FLATMEMSTATEENTERED_MASK;
|
|
|
|
+ default:
|
|
|
|
+ WARN_ON(1); /* should never happen */
|
|
|
|
+ return -EEXIST;
|
|
|
|
+ }
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int omap3_pwrdm_read_prev_mem_pwrst(struct powerdomain *pwrdm, u8 bank)
|
|
|
|
+{
|
|
|
|
+ u32 m;
|
|
|
|
+
|
|
|
|
+ m = omap3_get_mem_bank_lastmemst_mask(bank);
|
|
|
|
+
|
|
|
|
+ return omap2_prm_read_mod_bits_shift(pwrdm->prcm_offs,
|
|
|
|
+ OMAP3430_PM_PREPWSTST, m);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int omap3_pwrdm_clear_all_prev_pwrst(struct powerdomain *pwrdm)
|
|
|
|
+{
|
|
|
|
+ omap2_prm_write_mod_reg(0, pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST);
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int omap3_pwrdm_enable_hdwr_sar(struct powerdomain *pwrdm)
|
|
|
|
+{
|
|
|
|
+ return omap2_prm_rmw_mod_reg_bits(0,
|
|
|
|
+ 1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT,
|
|
|
|
+ pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int omap3_pwrdm_disable_hdwr_sar(struct powerdomain *pwrdm)
|
|
|
|
+{
|
|
|
|
+ return omap2_prm_rmw_mod_reg_bits(1 << OMAP3430ES2_SAVEANDRESTORE_SHIFT,
|
|
|
|
+ 0, pwrdm->prcm_offs,
|
|
|
|
+ OMAP2_PM_PWSTCTRL);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+struct pwrdm_ops omap3_pwrdm_operations = {
|
|
|
|
+ .pwrdm_set_next_pwrst = omap3_pwrdm_set_next_pwrst,
|
|
|
|
+ .pwrdm_read_next_pwrst = omap3_pwrdm_read_next_pwrst,
|
|
|
|
+ .pwrdm_read_pwrst = omap3_pwrdm_read_pwrst,
|
|
|
|
+ .pwrdm_read_prev_pwrst = omap3_pwrdm_read_prev_pwrst,
|
|
|
|
+ .pwrdm_set_logic_retst = omap2_pwrdm_set_logic_retst,
|
|
|
|
+ .pwrdm_read_logic_pwrst = omap3_pwrdm_read_logic_pwrst,
|
|
|
|
+ .pwrdm_read_logic_retst = omap3_pwrdm_read_logic_retst,
|
|
|
|
+ .pwrdm_read_prev_logic_pwrst = omap3_pwrdm_read_prev_logic_pwrst,
|
|
|
|
+ .pwrdm_set_mem_onst = omap2_pwrdm_set_mem_onst,
|
|
|
|
+ .pwrdm_set_mem_retst = omap2_pwrdm_set_mem_retst,
|
|
|
|
+ .pwrdm_read_mem_pwrst = omap2_pwrdm_read_mem_pwrst,
|
|
|
|
+ .pwrdm_read_mem_retst = omap2_pwrdm_read_mem_retst,
|
|
|
|
+ .pwrdm_read_prev_mem_pwrst = omap3_pwrdm_read_prev_mem_pwrst,
|
|
|
|
+ .pwrdm_clear_all_prev_pwrst = omap3_pwrdm_clear_all_prev_pwrst,
|
|
|
|
+ .pwrdm_enable_hdwr_sar = omap3_pwrdm_enable_hdwr_sar,
|
|
|
|
+ .pwrdm_disable_hdwr_sar = omap3_pwrdm_disable_hdwr_sar,
|
|
|
|
+ .pwrdm_wait_transition = omap2_pwrdm_wait_transition,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+
|
|
|
|
+static struct prm_ll_data omap3xxx_prm_ll_data = {
|
|
|
|
+ .read_reset_sources = &omap3xxx_prm_read_reset_sources,
|