blob: 8a06252170d541a5c262ca493f2d93767c1adad5 [file] [log] [blame]
Myles Watson34261952010-03-19 02:33:40 +00001#include <lib.h> /* Prototypes */
Stefan Reinauer7ce8c542005-12-02 21:52:30 +00002
3#ifndef RAMINIT_SYSINFO
4 #define RAMINIT_SYSINFO 0
5#endif
6
7static inline void print_debug_sdram_8(const char *strval, uint32_t val)
8{
Stefan Reinauerf2b7a432010-03-30 22:21:06 +00009#if CONFIG_USE_PRINTK_IN_CAR
10 printk(BIOS_DEBUG, "%s%02x\n", strval, val);
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000011#else
Stefan Reinauer64ed2b72010-03-31 14:47:43 +000012 print_debug(strval); print_debug_hex8(val); print_debug("\n");
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000013#endif
14}
15
Eric Biederman8ca8d762003-04-22 19:02:15 +000016/* Setup SDRAM */
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000017#if RAMINIT_SYSINFO == 1
18void sdram_initialize(int controllers, const struct mem_controller *ctrl, void *sysinfo)
19#else
Eric Biederman2c018fb2003-07-21 20:13:45 +000020void sdram_initialize(int controllers, const struct mem_controller *ctrl)
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000021#endif
Eric Biederman8ca8d762003-04-22 19:02:15 +000022{
Eric Biederman2c018fb2003-07-21 20:13:45 +000023 int i;
Eric Biederman8ca8d762003-04-22 19:02:15 +000024 /* Set the registers we can set once to reasonable values */
Eric Biederman2c018fb2003-07-21 20:13:45 +000025 for(i = 0; i < controllers; i++) {
Stefan Reinauerf2b7a432010-03-30 22:21:06 +000026 print_debug_sdram_8("Ram1.", i);
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000027
28 #if RAMINIT_SYSINFO == 1
Stefan Reinauerf2b7a432010-03-30 22:21:06 +000029 sdram_set_registers(ctrl + i, sysinfo);
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000030 #else
Eric Biederman2c018fb2003-07-21 20:13:45 +000031 sdram_set_registers(ctrl + i);
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000032 #endif
Eric Biederman2c018fb2003-07-21 20:13:45 +000033 }
Eric Biederman8ca8d762003-04-22 19:02:15 +000034
Eric Biederman8ca8d762003-04-22 19:02:15 +000035 /* Now setup those things we can auto detect */
Eric Biederman2c018fb2003-07-21 20:13:45 +000036 for(i = 0; i < controllers; i++) {
Stefan Reinauerf2b7a432010-03-30 22:21:06 +000037 print_debug_sdram_8("Ram2.", i);
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000038
39 #if RAMINIT_SYSINFO == 1
Stefan Reinauerf2b7a432010-03-30 22:21:06 +000040 sdram_set_spd_registers(ctrl + i, sysinfo);
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000041 #else
42 sdram_set_spd_registers(ctrl + i);
43 #endif
44
Eric Biederman2c018fb2003-07-21 20:13:45 +000045 }
Eric Biederman8ca8d762003-04-22 19:02:15 +000046
Eric Biederman8ca8d762003-04-22 19:02:15 +000047 /* Now that everything is setup enable the SDRAM.
Stefan Reinauer14e22772010-04-27 06:56:47 +000048 * Some chipsets do the work for us while on others
Eric Biederman8ca8d762003-04-22 19:02:15 +000049 * we need to it by hand.
50 */
Stefan Reinauer64ed2b72010-03-31 14:47:43 +000051 print_debug("Ram3\n");
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000052
53 #if RAMINIT_SYSINFO == 1
54 sdram_enable(controllers, ctrl, sysinfo);
55 #else
Eric Biederman2c018fb2003-07-21 20:13:45 +000056 sdram_enable(controllers, ctrl);
Stefan Reinauer7ce8c542005-12-02 21:52:30 +000057 #endif
Eric Biederman8ca8d762003-04-22 19:02:15 +000058
Stefan Reinauer64ed2b72010-03-31 14:47:43 +000059 print_debug("Ram4\n");
Eric Biederman8ca8d762003-04-22 19:02:15 +000060}