Nios® V/II Embedded Design Suite (EDS)
Support for Embedded Development Tools, Processors (SoCs and Nios® V/II processor), Embedded Development Suites (EDSs), Boot and Configuration, Operating Systems, C and C++
12601 Discussions

pl330 Buffer Overrun in U-Boot with ECC

Honored Contributor II

For anyone who has issues with ECC memory and scrubbing in the U-Boot preloader: 


There are some issues with the sdram.c file that ships with the u-boot that comes with Quartus. In general, the buffer sizes for the pl330 DMA initialization are too small for RAM sizes >1 GiB. We are running a Cyclone V with 2 GiB of RAM with ECC, leading to a 40-bit wide interface with two chip selects. 


In order to fix the buffer error, it is necessary to choose a buffer size that is dynamically calculated using preloader parameters, or by hard-coding the size in to the preloader. After some testing (see attached), I was able to work out that pl330_buf1 needed to be 2208 words deep. It is also necessary to change the variable used in sdram_scrub_boot_region by removing the "buf" variable and implementing this change on line 1534 in sdram.c: 


- pl330.buf_size = sizeof(buf); 

- pl330.buf = buf; 

+ pl330.buf_size = sizeof(pl330_buf1); 

+ pl330.buf = pl330_buf1; 


If anyone has any questions about this, just post or send me a note.
0 Kudos
0 Replies