hsin-hsiung wang has uploaded this change for review.

View Change

mediatek/mt8183: allow modifying vcore voltage

Because vcore is the power of ddrphy in the soc, DRAM DVFS needs to be
calibrated with different vcore voltages to get correct parameters.
A new API is added to allow changing vcore voltage.

BUG=b:80501386
BRANCH=none
TEST=measure vcore voltage with multimeter

Change-Id: Ic43d5efe7e597121775dc853a3e2a08ebc59657d
Signed-off-by: Hsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com>
---
M src/soc/mediatek/mt8183/include/soc/mt6358.h
M src/soc/mediatek/mt8183/mt6358.c
2 files changed, 28 insertions(+), 0 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/91/33391/1
diff --git a/src/soc/mediatek/mt8183/include/soc/mt6358.h b/src/soc/mediatek/mt8183/include/soc/mt6358.h
index c90e6e4..f213c35 100644
--- a/src/soc/mediatek/mt8183/include/soc/mt6358.h
+++ b/src/soc/mediatek/mt8183/include/soc/mt6358.h
@@ -25,6 +25,9 @@
PMIC_TOP_TMA_KEY = 0x03a8,
PMIC_PWRHOLD = 0x0a08,
PMIC_CPSDSA4 = 0x0a2e,
+ PMIC_VCORE_OP_EN = 0x1490,
+ PMIC_VCORE_DBG0 = 0x149e,
+ PMIC_VCORE_VOSEL = 0x14aa,
PMIC_VDRAM1_VOSEL_SLEEP = 0x160a,
PMIC_VDRAM1_OP_EN = 0x1610,
PMIC_VDRAM1_DBG0 = 0x161e,
@@ -43,5 +46,7 @@
void pmic_set_power_hold(bool enable);
unsigned int pmic_get_vdram1_vol(void);
void pmic_set_vdram1_vol(unsigned int vdram_uv);
+unsigned int pmic_get_vcore_vol(void);
+void pmic_set_vcore_vol(unsigned int vcore_uv);

#endif /* __SOC_MEDIATEK_MT6358_H__ */
diff --git a/src/soc/mediatek/mt8183/mt6358.c b/src/soc/mediatek/mt8183/mt6358.c
index 409369f..eff0543 100644
--- a/src/soc/mediatek/mt8183/mt6358.c
+++ b/src/soc/mediatek/mt8183/mt6358.c
@@ -756,6 +756,29 @@
pwrap_write_field(PMIC_VDRAM1_VOSEL, vol_reg, 0x7F, 0);
}

+unsigned int pmic_get_vcore_vol(void)
+{
+ unsigned int vol_reg;
+
+ vol_reg = pwrap_read_field(PMIC_VCORE_DBG0, 0x7F, 0);
+ return 500000 + vol_reg * 6250;
+}
+
+void pmic_set_vcore_vol(unsigned int vcore_uv)
+{
+ unsigned int vol_reg;
+
+ if (vcore_uv < 500000)
+ vol_reg = 0;
+ else if (vcore_uv > 1100000)
+ vol_reg = 0x60;
+ else
+ vol_reg = (vcore_uv - 500000) / 6250;
+
+ pwrap_write_field(PMIC_VCORE_OP_EN, 1, 0x7F, 0);
+ pwrap_write_field(PMIC_VCORE_VOSEL, vol_reg, 0x7F, 0);
+}
+
static void pmic_wdt_set(void)
{
/* [5]=1, RG_WDTRSTB_DEB */

To view, visit change 33391. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Ic43d5efe7e597121775dc853a3e2a08ebc59657d
Gerrit-Change-Number: 33391
Gerrit-PatchSet: 1
Gerrit-Owner: hsin-hsiung wang <hsin-hsiung.wang@mediatek.com>
Gerrit-MessageType: newchange