summaryrefslogtreecommitdiff
path: root/src/soc/mediatek/mt8183/dramc_pi_basic_api.c
diff options
context:
space:
mode:
authorYu-Ping Wu <yupingso@chromium.org>2019-10-03 08:49:23 +0800
committerPatrick Georgi <pgeorgi@google.com>2019-10-18 12:21:56 +0000
commit4d4ccced31f87fd98f1b0783438dbc5480b355f5 (patch)
tree2144e037b45d9846c8d8261bf8b78ac38b380fe3 /src/soc/mediatek/mt8183/dramc_pi_basic_api.c
parentcea735cf127e090fbb5fa588bd5d7bd3c959e49f (diff)
downloadcoreboot-4d4ccced31f87fd98f1b0783438dbc5480b355f5.tar.xz
soc/mediatek/mt8183: Pass impedance data as a function argument
To make data flow more explicit, global variable 'impedance' is replaced with a local variable, which is passed as a function argument. BUG=none BRANCH=kukui TEST=Krane boots correctly Change-Id: I0f6dacc33fda013a3476a10d9899821b7297e770 Signed-off-by: Yu-Ping Wu <yupingso@chromium.org> Reviewed-on: https://review.coreboot.org/c/coreboot/+/35766 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Hung-Te Lin <hungte@chromium.org>
Diffstat (limited to 'src/soc/mediatek/mt8183/dramc_pi_basic_api.c')
-rw-r--r--src/soc/mediatek/mt8183/dramc_pi_basic_api.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/soc/mediatek/mt8183/dramc_pi_basic_api.c b/src/soc/mediatek/mt8183/dramc_pi_basic_api.c
index 8f9af608fb..5901f42acc 100644
--- a/src/soc/mediatek/mt8183/dramc_pi_basic_api.c
+++ b/src/soc/mediatek/mt8183/dramc_pi_basic_api.c
@@ -20,8 +20,6 @@
#include <soc/dramc_register.h>
#include <soc/dramc_pi_api.h>
-static u32 impedance[2][4];
-
u8 get_freq_fsq(u8 freq)
{
if (freq == LP4X_DDR1600 || freq == LP4X_DDR2400)
@@ -53,7 +51,8 @@ static void dramc_sw_imp_cal_vref_sel(u8 term_option, u8 impcal_stage)
clrsetbits_le32(&ch[0].phy.shu[0].ca_cmd[11], 0x3f << 8, vref_sel << 8);
}
-void dramc_sw_impedance_cal(const struct sdram_params *params, u8 term)
+void dramc_sw_impedance_cal(const struct sdram_params *params, u8 term,
+ struct dram_impedance *impedance)
{
u32 broadcast_bak, impcal_bak, imp_cal_result;
u32 DRVP_result = 0xff, ODTN_result = 0xff, DRVN_result = 0x9;
@@ -131,26 +130,25 @@ void dramc_sw_impedance_cal(const struct sdram_params *params, u8 term)
dramc_show("impedance: term=%d, DRVP=%d, DRVN=%d, ODTN=%d\n",
term, DRVP_result, DRVN_result, ODTN_result);
+ u32 *imp = impedance->data[term];
if (term == ODT_OFF) {
- impedance[term][0] = DRVP_result;
- impedance[term][1] = ODTN_result;
- impedance[term][2] = 0;
- impedance[term][3] = 15;
+ imp[0] = DRVP_result;
+ imp[1] = ODTN_result;
+ imp[2] = 0;
+ imp[3] = 15;
} else {
- impedance[term][0] = (DRVP_result <= 3) ?
- (DRVP_result * 3) : DRVP_result;
- impedance[term][1] = (DRVN_result <= 3) ?
- (DRVN_result * 3) : DRVN_result;
- impedance[term][2] = 0;
- impedance[term][3] = (ODTN_result <= 3) ?
- (ODTN_result * 3) : ODTN_result;
+ imp[0] = (DRVP_result <= 3) ? (DRVP_result * 3) : DRVP_result;
+ imp[1] = (DRVN_result <= 3) ? (DRVN_result * 3) : DRVN_result;
+ imp[2] = 0;
+ imp[3] = (ODTN_result <= 3) ? (ODTN_result * 3) : ODTN_result;
}
dramc_sw_imp_cal_vref_sel(term, IMPCAL_STAGE_TRACKING);
dramc_set_broadcast(broadcast_bak);
}
-void dramc_sw_impedance_save_reg(u8 freq_group)
+void dramc_sw_impedance_save_reg(u8 freq_group,
+ const struct dram_impedance *impedance)
{
u8 ca_term = ODT_OFF, dq_term = ODT_ON;
u32 sw_impedance[2][4] = {0};
@@ -160,7 +158,7 @@ void dramc_sw_impedance_save_reg(u8 freq_group)
for (u8 term = 0; term < 2; term++)
for (u8 i = 0; i < 4; i++)
- sw_impedance[term][i] = impedance[term][i];
+ sw_impedance[term][i] = impedance->data[term][i];
sw_impedance[ODT_OFF][2] = sw_impedance[ODT_ON][2];
sw_impedance[ODT_OFF][3] = sw_impedance[ODT_ON][3];