diff options
Diffstat (limited to 'src/soc/broadcom/cygnus/sdram.c')
-rw-r--r-- | src/soc/broadcom/cygnus/sdram.c | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/src/soc/broadcom/cygnus/sdram.c b/src/soc/broadcom/cygnus/sdram.c index d9b45c0d43..1642842e0c 100644 --- a/src/soc/broadcom/cygnus/sdram.c +++ b/src/soc/broadcom/cygnus/sdram.c @@ -17,9 +17,46 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <console/console.h> +#include <symbols.h> #include <soc/sdram.h> +#define DRAM_TEST_LEN 0x8000000 + +static void test_ddr(void) +{ + if (IS_ENABLED(CONFIG_CYGNUS_SDRAM_TEST_DDR)) { + uint32_t *test_buffer = (uint32_t *) _dram; + uint32_t len = DRAM_TEST_LEN; + uint32_t i; + uint32_t fail_count = 0; + + printk(BIOS_INFO, "test ddr start from 0x%p to 0x%p\n", test_buffer, + test_buffer + len); + + for (i = 0; i < len; i++) + *(test_buffer + i) = i; + + for (i = 0; i < len; i++) { + int val = *(test_buffer + i); + + if ((i % 0x10000) == 0) + printk(BIOS_INFO, "#"); + + if (i != val) { + printk(BIOS_ERR, "\ntest_ddr: @ 0x%p: %d != %d\n", + test_buffer + i, i, val); + fail_count++; + } + } + printk(BIOS_INFO, "\ntest ddr end: fail=%d\n", fail_count); + } +} + void sdram_init(void) { - printk(BIOS_INFO, "sdram initialization is not implemented\n"); + printk(BIOS_INFO, "sdram initialization is in progress...\n"); + ddr_init2(); + printk(BIOS_INFO, "sdram initialization is completed.\n"); + + test_ddr(); } |