arm: socfpga: move gen5 SDR driver to DM
To clean up reset handling for socfpga gen5, port the DDR driver to DM using UCLASS_RAM and implement proper reset handling. This gets us rid of one ad-hoc call to socfpga_per_reset(). The gen5 driver is implemented in 2 distinct files. One of it (containing the calibration training) is not touched much and is kept at using hard coded addresses since the code grows even more otherwise. SPL is changed from calling hard into the DDR driver code to just probing UCLASS_RESET and UCLASS_RAM. It is happy after finding a RAM driver after that. Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
This commit is contained in:
committed by
Marek Vasut
parent
ede6e7b64f
commit
29873c74f3
@@ -791,9 +791,9 @@
|
||||
reg = <0xfffec000 0x100>;
|
||||
};
|
||||
|
||||
sdr: sdr@ffc25000 {
|
||||
sdr: sdr@ffc20000 {
|
||||
compatible = "altr,sdr-ctl", "syscon";
|
||||
reg = <0xffc25000 0x1000>;
|
||||
reg = <0xffc20000 0x6000>;
|
||||
resets = <&rst SDR_RESET>;
|
||||
};
|
||||
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
unsigned long sdram_calculate_size(void);
|
||||
int sdram_mmr_init_full(unsigned int sdr_phy_reg);
|
||||
int sdram_calibration_full(void);
|
||||
|
||||
const struct socfpga_sdram_config *socfpga_get_sdram_config(void);
|
||||
|
||||
void socfpga_get_seq_ac_init(const u32 **init, unsigned int *nelem);
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <debug_uart.h>
|
||||
#include <fdtdec.h>
|
||||
#include <watchdog.h>
|
||||
#include <dm/uclass.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
@@ -123,9 +124,9 @@ static void socfpga_pl310_clear(void)
|
||||
void board_init_f(ulong dummy)
|
||||
{
|
||||
const struct cm_config *cm_default_cfg = cm_get_default_config();
|
||||
unsigned long sdram_size;
|
||||
unsigned long reg;
|
||||
int ret;
|
||||
struct udevice *dev;
|
||||
|
||||
/*
|
||||
* First C code to run. Clear fake OCRAM ECC first as SBE
|
||||
@@ -156,7 +157,6 @@ void board_init_f(ulong dummy)
|
||||
socfpga_bridges_reset(1);
|
||||
}
|
||||
|
||||
socfpga_per_reset(SOCFPGA_RESET(SDR), 0);
|
||||
socfpga_per_reset(SOCFPGA_RESET(UART0), 0);
|
||||
socfpga_per_reset(SOCFPGA_RESET(OSC1TIMER0), 0);
|
||||
|
||||
@@ -200,27 +200,16 @@ void board_init_f(ulong dummy)
|
||||
hang();
|
||||
}
|
||||
|
||||
ret = uclass_get_device(UCLASS_RESET, 0, &dev);
|
||||
if (ret)
|
||||
debug("Reset init failed: %d\n", ret);
|
||||
|
||||
/* enable console uart printing */
|
||||
preloader_console_init();
|
||||
|
||||
if (sdram_mmr_init_full(0xffffffff) != 0) {
|
||||
puts("SDRAM init failed.\n");
|
||||
hang();
|
||||
}
|
||||
|
||||
debug("SDRAM: Calibrating PHY\n");
|
||||
/* SDRAM calibration */
|
||||
if (sdram_calibration_full() == 0) {
|
||||
puts("SDRAM calibration failed.\n");
|
||||
hang();
|
||||
}
|
||||
|
||||
sdram_size = sdram_calculate_size();
|
||||
debug("SDRAM: %ld MiB\n", sdram_size >> 20);
|
||||
|
||||
/* Sanity check ensure correct SDRAM size specified */
|
||||
if (get_ram_size(0, sdram_size) != sdram_size) {
|
||||
puts("SDRAM size check failed!\n");
|
||||
ret = uclass_get_device(UCLASS_RAM, 0, &dev);
|
||||
if (ret) {
|
||||
debug("DRAM init failed: %d\n", ret);
|
||||
hang();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user