mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-10 12:39:22 -04:00
ARM: OMAP4+: Move external phy initialisations to arch specific place.
The external phy is present in the case OMAP5 soc is currently configured in emif-common.c. This results in having dummy structures for those Socs which do not have a external phy. So by having a weak function in emif-common and overriding it in OMAP5, avoids the use of dummy structures. Signed-off-by: R Sricharan <r.sricharan@ti.com>
This commit is contained in:
parent
cc009defa4
commit
254763822e
@ -31,6 +31,7 @@
|
|||||||
#include <asm/arch/sys_proto.h>
|
#include <asm/arch/sys_proto.h>
|
||||||
#include <asm/omap_common.h>
|
#include <asm/omap_common.h>
|
||||||
#include <asm/utils.h>
|
#include <asm/utils.h>
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
|
||||||
void set_lpmode_selfrefresh(u32 base)
|
void set_lpmode_selfrefresh(u32 base)
|
||||||
{
|
{
|
||||||
@ -140,9 +141,6 @@ static void do_lpddr2_init(u32 base, u32 cs)
|
|||||||
static void lpddr2_init(u32 base, const struct emif_regs *regs)
|
static void lpddr2_init(u32 base, const struct emif_regs *regs)
|
||||||
{
|
{
|
||||||
struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
|
struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
|
||||||
u32 *ext_phy_ctrl_base = 0;
|
|
||||||
u32 *emif_ext_phy_ctrl_base = 0;
|
|
||||||
u32 i = 0;
|
|
||||||
|
|
||||||
/* Not NVM */
|
/* Not NVM */
|
||||||
clrbits_le32(&emif->emif_lpddr2_nvm_config, EMIF_REG_CS1NVMEN_MASK);
|
clrbits_le32(&emif->emif_lpddr2_nvm_config, EMIF_REG_CS1NVMEN_MASK);
|
||||||
@ -160,29 +158,7 @@ static void lpddr2_init(u32 base, const struct emif_regs *regs)
|
|||||||
writel(regs->sdram_config_init, &emif->emif_sdram_config);
|
writel(regs->sdram_config_init, &emif->emif_sdram_config);
|
||||||
writel(regs->emif_ddr_phy_ctlr_1, &emif->emif_ddr_phy_ctrl_1);
|
writel(regs->emif_ddr_phy_ctlr_1, &emif->emif_ddr_phy_ctrl_1);
|
||||||
|
|
||||||
ext_phy_ctrl_base = (u32 *) &(regs->emif_ddr_ext_phy_ctrl_1);
|
do_ext_phy_settings(base, regs);
|
||||||
emif_ext_phy_ctrl_base = (u32 *) &(emif->emif_ddr_ext_phy_ctrl_1);
|
|
||||||
|
|
||||||
if (omap_revision() >= OMAP5430_ES1_0) {
|
|
||||||
/* Configure external phy control timing registers */
|
|
||||||
for (i = 0; i < EMIF_EXT_PHY_CTRL_TIMING_REG; i++) {
|
|
||||||
writel(*ext_phy_ctrl_base, emif_ext_phy_ctrl_base++);
|
|
||||||
/* Update shadow registers */
|
|
||||||
writel(*ext_phy_ctrl_base++, emif_ext_phy_ctrl_base++);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* external phy 6-24 registers do not change with
|
|
||||||
* ddr frequency
|
|
||||||
*/
|
|
||||||
for (i = 0; i < EMIF_EXT_PHY_CTRL_CONST_REG; i++) {
|
|
||||||
writel(ext_phy_ctrl_const_base[i],
|
|
||||||
emif_ext_phy_ctrl_base++);
|
|
||||||
/* Update shadow registers */
|
|
||||||
writel(ext_phy_ctrl_const_base[i],
|
|
||||||
emif_ext_phy_ctrl_base++);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
do_lpddr2_init(base, CS0);
|
do_lpddr2_init(base, CS0);
|
||||||
if (regs->sdram_config & EMIF_REG_EBANK_MASK)
|
if (regs->sdram_config & EMIF_REG_EBANK_MASK)
|
||||||
@ -194,6 +170,10 @@ static void lpddr2_init(u32 base, const struct emif_regs *regs)
|
|||||||
/* Enable refresh now */
|
/* Enable refresh now */
|
||||||
clrbits_le32(&emif->emif_sdram_ref_ctrl, EMIF_REG_INITREF_DIS_MASK);
|
clrbits_le32(&emif->emif_sdram_ref_ctrl, EMIF_REG_INITREF_DIS_MASK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
__weak void do_ext_phy_settings(u32 base, const struct emif_regs *regs)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void emif_update_timings(u32 base, const struct emif_regs *regs)
|
void emif_update_timings(u32 base, const struct emif_regs *regs)
|
||||||
|
@ -91,7 +91,6 @@ const struct emif_regs emif_regs_elpida_400_mhz_2cs = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Dummy registers for OMAP44xx */
|
/* Dummy registers for OMAP44xx */
|
||||||
const u32 ext_phy_ctrl_const_base[EMIF_EXT_PHY_CTRL_CONST_REG];
|
|
||||||
const u32 ddr3_ext_phy_ctrl_const_base[EMIF_EXT_PHY_CTRL_CONST_REG];
|
const u32 ddr3_ext_phy_ctrl_const_base[EMIF_EXT_PHY_CTRL_CONST_REG];
|
||||||
|
|
||||||
const struct dmm_lisa_map_regs lisa_map_2G_x_1_x_2 = {
|
const struct dmm_lisa_map_regs lisa_map_2G_x_1_x_2 = {
|
||||||
|
@ -204,6 +204,37 @@ void emif_get_device_details(u32 emif_nr,
|
|||||||
|
|
||||||
#endif /* CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS */
|
#endif /* CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS */
|
||||||
|
|
||||||
|
void do_ext_phy_settings(u32 base, const struct emif_regs *regs)
|
||||||
|
{
|
||||||
|
u32 *ext_phy_ctrl_base = 0;
|
||||||
|
u32 *emif_ext_phy_ctrl_base = 0;
|
||||||
|
u32 i = 0;
|
||||||
|
|
||||||
|
struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
|
||||||
|
|
||||||
|
ext_phy_ctrl_base = (u32 *) &(regs->emif_ddr_ext_phy_ctrl_1);
|
||||||
|
emif_ext_phy_ctrl_base = (u32 *) &(emif->emif_ddr_ext_phy_ctrl_1);
|
||||||
|
|
||||||
|
/* Configure external phy control timing registers */
|
||||||
|
for (i = 0; i < EMIF_EXT_PHY_CTRL_TIMING_REG; i++) {
|
||||||
|
writel(*ext_phy_ctrl_base, emif_ext_phy_ctrl_base++);
|
||||||
|
/* Update shadow registers */
|
||||||
|
writel(*ext_phy_ctrl_base++, emif_ext_phy_ctrl_base++);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* external phy 6-24 registers do not change with
|
||||||
|
* ddr frequency
|
||||||
|
*/
|
||||||
|
for (i = 0; i < EMIF_EXT_PHY_CTRL_CONST_REG; i++) {
|
||||||
|
writel(ext_phy_ctrl_const_base[i],
|
||||||
|
emif_ext_phy_ctrl_base++);
|
||||||
|
/* Update shadow registers */
|
||||||
|
writel(ext_phy_ctrl_const_base[i],
|
||||||
|
emif_ext_phy_ctrl_base++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
|
#ifndef CONFIG_SYS_DEFAULT_LPDDR2_TIMINGS
|
||||||
static const struct lpddr2_ac_timings timings_jedec_532_mhz = {
|
static const struct lpddr2_ac_timings timings_jedec_532_mhz = {
|
||||||
.max_freq = 532000000,
|
.max_freq = 532000000,
|
||||||
|
@ -1141,6 +1141,8 @@ void emif_get_device_timings(u32 emif_nr,
|
|||||||
const struct lpddr2_device_timings **cs1_device_timings);
|
const struct lpddr2_device_timings **cs1_device_timings);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void do_ext_phy_settings(u32 base, const struct emif_regs *regs);
|
||||||
|
|
||||||
#ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
|
#ifndef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
|
||||||
extern u32 *const T_num;
|
extern u32 *const T_num;
|
||||||
extern u32 *const T_den;
|
extern u32 *const T_den;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user