From 474d6ba5003d93460eb8b2d1aa0ad1996cca6bb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20Fr=C3=B6schle?= Date: Sun, 8 Dec 2013 07:49:06 +0000 Subject: [PATCH] fixed .bss and .data copy; moved dma_init() back here --- BaS_gcc/sources/sysinit.c | 34 +++++++++++----------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/BaS_gcc/sources/sysinit.c b/BaS_gcc/sources/sysinit.c index da3e87e..8e30abc 100644 --- a/BaS_gcc/sources/sysinit.c +++ b/BaS_gcc/sources/sysinit.c @@ -921,16 +921,6 @@ extern uint8_t _BAS_RESIDENT_TEXT[]; extern uint8_t _BAS_RESIDENT_TEXT_SIZE[]; #define BAS_RESIDENT_TEXT_SIZE ((uint32_t) _BAS_RESIDENT_TEXT_SIZE) -void clear_data_segment(void) -{ - extern uint8_t _BAS_DATA_START[]; - uint8_t *BAS_DATA_START = &_BAS_DATA_START[0]; - extern uint8_t _BAS_DATA_END[]; - uint8_t *BAS_DATA_END = &_BAS_DATA_END[0]; - - bzero(BAS_DATA_START, BAS_DATA_END - BAS_DATA_START); -} - void clear_bss_segment(void) { extern uint8_t _BAS_BSS_START[]; @@ -938,7 +928,7 @@ void clear_bss_segment(void) extern uint8_t _BAS_BSS_END[]; uint8_t *BAS_BSS_END = &_BAS_BSS_END[0]; - bzero(BAS_BSS_START, BAS_BSS_END - BAS_BSS_END); + bzero(BAS_BSS_START, BAS_BSS_END - BAS_BSS_START - 1); } void initialize_hardware(void) @@ -972,9 +962,6 @@ void initialize_hardware(void) return; } #endif /* MACHINE_FIREBEE */ - - clear_bss_segment(); - init_gpio(); init_serial(); @@ -1089,25 +1076,22 @@ void initialize_hardware(void) 0 /* leave core clock enabled */ ); + init_slt(); + init_fbcs(); + init_ddram(); + + /* the following only makes sense _after_ DDRAM has been initialized */ + clear_bss_segment(); if (BAS_LMA != BAS_IN_RAM) { - xprintf("copying BaS (%p - %p) to RAM (%p - %p)\r\n", BAS_LMA, BAS_LMA + BAS_SIZE, BAS_IN_RAM, BAS_IN_RAM + BAS_SIZE); memcpy((void *) BAS_IN_RAM, BAS_LMA, BAS_SIZE); - xprintf("finished.\r\n"); /* we have copied a code area, so flush the caches */ flush_and_invalidate_caches(); } - else - { - xprintf("no BaS copy necessary - running from RAM already\r\n"); - } - init_slt(); - init_fbcs(); - init_ddram(); #if MACHINE_FIREBEE init_fpga(); init_pll(); @@ -1119,6 +1103,10 @@ void initialize_hardware(void) #if MACHINE_FIREBEE init_ac97(); #endif /* MACHINE_FIREBEE */ + + xprintf("initialize and test DMA\r\n"); + dma_init(); + /* jump into the BaS */ extern void BaS(void); BaS();