| 1234567891011121314151617181920212223242526272829303132 | #include "fw.h"#include "io.h"extern const char __dram_init_start[], __dram_init_end[], __dram_init_len[];extern const char __dram_bss_start[], __dram_bss_end[], __dram_bss_len[];uint32_t romcopy_time[2];IRQHANDLER(romcopy){    static unsigned int romcopy_state;    switch (romcopy_state++) {    case 0:	/* Copy testdata */	ROMCOPY_RAMADDR = (size_t)__dram_init_start;	ROMCOPY_ROMADDR = __rom_offset;	ROMCOPY_DATALEN = (size_t)__dram_init_len;	break;    case 1:	/* Zero .dram.bss */	romcopy_time[0] = rdtime() - time_zero;	ROMCOPY_RAMADDR = (size_t)__dram_bss_start;	ROMCOPY_ROMADDR = 0;	/* Clear */	ROMCOPY_DATALEN = (size_t)__dram_bss_len;	break;    default:	romcopy_time[1] = rdtime() - romcopy_time[0];	mask_irq(ROMCOPY_IRQ);	return;    }}
 |