mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
ddr: fix overflow when ddr freq is high
PD#161475: ddr: fix overflow when ddr freq is high Caculate of ddr freq will overflow if ddr freq is over 1.5GHz, This commit fixed it. Change-Id: Idc07b1022b52e3ec5c227c15afff1aaf21575ed7 Signed-off-by: tao zeng <tao.zeng@amlogic.com>
This commit is contained in:
@@ -97,8 +97,9 @@ static unsigned long g12_get_dmc_freq_quick(struct ddr_bandwidth *db)
|
||||
m = val & 0x1ff;
|
||||
n = ((val >> 10) & 0x1f);
|
||||
od1 = (((val >> 19) & 0x1)) == 1 ? 2 : 1;
|
||||
freq = DEFAULT_XTAL_FREQ / 1000; /* avoid overflow */
|
||||
if (n)
|
||||
freq = (((DEFAULT_XTAL_FREQ * m) / n) >> od1) / od_div;
|
||||
freq = ((((freq * m) / n) >> od1) / od_div) * 1000;
|
||||
|
||||
return freq;
|
||||
}
|
||||
|
||||
@@ -70,7 +70,8 @@ static unsigned long gx_get_dmc_freq_quick(struct ddr_bandwidth *db)
|
||||
(db->cpu_type < MESON_CPU_MAJOR_ID_GXL)) {
|
||||
od1 = (val >> 14) & 0x03;
|
||||
}
|
||||
freq = (DEFAULT_XTAL_FREQ * m / (n * (1 + od))) >> od1;
|
||||
freq = DEFAULT_XTAL_FREQ / 1000; /* avoid overflow */
|
||||
freq = ((freq * m / (n * (1 + od))) >> od1) * 1000;
|
||||
return freq;
|
||||
}
|
||||
|
||||
|
||||
@@ -63,7 +63,8 @@ static unsigned long gxl_get_dmc_freq_quick(struct ddr_bandwidth *db)
|
||||
m = (val >> 4) & 0x1ff;
|
||||
n = (val >> 16) & 0x1f;
|
||||
od1 = (val >> 0) & 0x03;
|
||||
freq = (DEFAULT_XTAL_FREQ * m / (n * (1 + od))) >> od1;
|
||||
freq = DEFAULT_XTAL_FREQ / 1000; /* avoid overflow */
|
||||
freq = ((freq * m / (n * (1 + od))) >> od1) * 1000;
|
||||
return freq;
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
|
||||
#define DEFAULT_CLK_CNT 12000000
|
||||
#define DEFAULT_XTAL_FREQ 24000000
|
||||
#define DEFAULT_XTAL_FREQ 24000000UL
|
||||
|
||||
#define DMC_QOS_IRQ (1 << 30)
|
||||
#define MAX_CHANNEL 4
|
||||
|
||||
Reference in New Issue
Block a user