summaryrefslogtreecommitdiff
path: root/src/soc/broadcom/cygnus/sdram.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/soc/broadcom/cygnus/sdram.c')
-rw-r--r--src/soc/broadcom/cygnus/sdram.c39
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();
}