Ira W. Snyder wrote: > On Wed, Jul 08, 2009 at 05:58:50PM -0700, Ira W. Snyder wrote: >> On Wed, Jul 08, 2009 at 07:32:26PM -0500, Peter Tyser wrote: >>> On Thu, 2009-07-09 at 08:24 +0800, Liu Dave-R63238 wrote:
[snip] >> Both the DMA and CPU methods are definitely on the same order of >> magnitude. The time taken by the CFI flash driver is MUCH longer than >> the SDRAM initialization. I wonder, should the icache be enabled for >> that as well? >> >> I'll do some more testing when I get back to the office tomorrow. >> > > Ok, I've added back the get_tbms() code, and created a routine to > initialize ECC with the CPU. I've inlined my patch below, just for > reference. > > DMA 945ms > CPU 581ms > > As an interesting comparison, I also benchmarked the method of using the > DDR controller to initialize ECC. > > DDRC 129ms > > So there you have it. Dave Liu is correct, the CPU method is faster, > though definitely on the same order of magnitude with the > icache_enable()/icache_disable() patch. Thanks for the measurements and the update. > I may stick with the DDRC method on my board, the difference is just > amazing. The flash init still takes up most of the boot process, > however. > > Peter, feel free to fold the patch below into your own work. > Ira [snip] FWIIW, and it doesn't materially change your results, but it would have been better to duplicate the get_tbms() call and put it directly around the *_meminit() calls rather than having the print statements inside the timed part. Since U-Boot printing is a blocking call (generally), you are adding the UART Tx time to your measurement. #if 0 debug("\nInitializing ECC (using DMA)!\n"); s = get_tbms(); dma_meminit(CONFIG_MEM_INIT_VALUE, dram_size); #else debug("\nInitializing ECC (using CPU)!\n"); s = get_tbms(); cpu_meminit(CONFIG_MEM_INIT_VALUE, dram_size); #endif e = get_tbms(); > + s = get_tbms(); > +#if 0 > + debug("\nInitializing ECC (using DMA)!\n"); > dma_meminit(CONFIG_MEM_INIT_VALUE, dram_size); > +#else > + debug("\nInitializing ECC (using CPU)!\n"); > + cpu_meminit(CONFIG_MEM_INIT_VALUE, dram_size); > +#endif > + e = get_tbms(); > > debug("\nREADY!\n"); > + debug("ddr init duration: %ld ms\n", e - s); > > /* Clear All ECC Errors */ > if ((ddr->err_detect & ECC_ERROR_DETECT_MME) == ECC_ERROR_DETECT_MME) Thanks, gvb _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot