cleanup vmem_test

This commit is contained in:
Markus Fröschle
2016-06-06 05:19:25 +00:00
parent 46c62f381a
commit 0197af9703
4 changed files with 79 additions and 27 deletions

View File

@@ -42,6 +42,8 @@ CFLAGS= -Wall \
-fomit-frame-pointer \ -fomit-frame-pointer \
-ffreestanding \ -ffreestanding \
-fleading-underscore \ -fleading-underscore \
-Winline \
-Wshadow \
-Wa,--register-prefix-optional \ -Wa,--register-prefix-optional \
-g2 -g2
CFLAGS_OPTIMIZED = -mcpu=5474 \ CFLAGS_OPTIMIZED = -mcpu=5474 \

View File

@@ -999,7 +999,7 @@ static void pci_bridge_config(uint16_t bus, uint16_t device, uint16_t function)
handle = PCI_HANDLE(bus, device, function); handle = PCI_HANDLE(bus, device, function);
dbg("handle=%d\r\n", handle); dbg("handle=%d\r\n", handle);
pci_write_config_longword(handle, PCIBAR0, 0x40000000); pci_write_config_longword(handle, PCIBAR0, swpl(0x40000000));
pci_write_config_longword(handle, PCIBAR1, 0x0); pci_write_config_longword(handle, PCIBAR1, 0x0);
pci_write_config_longword(handle, PCICSR, 0x146); pci_write_config_longword(handle, PCICSR, 0x146);
} }

View File

@@ -236,6 +236,7 @@ bool isr_execute_handler(int vector)
return true; return true;
} }
#if defined(MACHINE_FIREBEE)
/* /*
* PIC interrupt handler for Firebee * PIC interrupt handler for Firebee
* *
@@ -266,6 +267,7 @@ bool pic_interrupt_handler(void *arg1, void *arg2)
} }
return true; return true;
} }
#endif /* MACHINE_FIREBEE */
bool xlbpci_interrupt_handler(void *arg1, void *arg2) bool xlbpci_interrupt_handler(void *arg1, void *arg2)
{ {

View File

@@ -85,7 +85,8 @@ static void init_pll(void)
/* /*
* INIT VIDEO DDR RAM * INIT VIDEO DDR RAM
*/ */
static void init_video_ddr(void) { static void init_video_ddr(void)
{
xprintf("init video RAM: "); xprintf("init video RAM: ");
* (volatile uint16_t *) 0xf0000400 = 0xb; /* set cke = 1, cs=1, config = 1 */ * (volatile uint16_t *) 0xf0000400 = 0xb; /* set cke = 1, cs=1, config = 1 */
@@ -119,10 +120,40 @@ static void init_video_ddr(void) {
xprintf("finished\r\n"); xprintf("finished\r\n");
} }
void memmove_b(uint8_t *dst, uint8_t *src, size_t size)
{
while (--size)
{
*dst++ = *src++;
}
}
void memmove_w(uint16_t *dst, uint16_t *src, size_t size)
{
size >>= 1;
while (--size)
{
*dst++ = *src++;
}
}
void memmove_l(uint32_t *dst, uint32_t *src, size_t size)
{
size >>= 2;
while (--size)
{
*dst++ = *src++;
}
}
void do_tests(void) void do_tests(void)
{ {
uint32_t version; // uint32_t version;
uint32_t buffer[64]; const int buffer_size = 64;
uint8_t buffer[buffer_size * 4];
xprintf("initialize Firebee video PLL\r\n"); xprintf("initialize Firebee video PLL\r\n");
init_pll(); init_pll();
@@ -132,57 +163,74 @@ void do_tests(void)
init_video_ddr(); init_video_ddr();
xprintf("finished\r\n"); xprintf("finished\r\n");
#ifdef _NOT_USED_
xprintf("try to read Configware version (only works on later configs)\r\n"); xprintf("try to read Configware version (only works on later configs)\r\n");
version = * (uint32_t *) 0xffffffff; version = * (uint32_t *) 0xffffffff;
xprintf("version = 0x%08lx\r\n", version); xprintf("version = 0x%08lx\r\n", version);
#endif /* _NOT_USED_ */
xprintf("try to access Firebee FPGA memory\r\n"); xprintf("try to access Firebee FPGA memory\r\n");
xprintf("write\r\n"); xprintf("write\r\n");
start = MCF_SLT0_SCNT; start = MCF_SLT0_SCNT;
/*
* fill 4 lines of video memory with 64 consecutive byte values
*/
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
{ {
((volatile uint8_t *) _VRAM)[i] = (uint32_t) i; ((volatile uint8_t *) _VRAM)[i] = (uint32_t) i;
} }
end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000;
xprintf("finished (took %f seconds).\r\n", time / 1000.0);
/*
* read back video memory into local fast ram buffer
*/
xprintf("read\r\n"); xprintf("read\r\n");
start = MCF_SLT0_SCNT; start = MCF_SLT0_SCNT;
/*
* read byte-wise
*/
xprintf("byte read\r\n"); xprintf("byte read\r\n");
for (i = 0; i < 64; i++) memmove_b(buffer, (uint8_t *) _VRAM, buffer_size);
((uint8_t *) buffer)[i] = * ((uint8_t *) _VRAM) + i; end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000;
hexdump((volatile uint8_t *) buffer, 64); xprintf("finished (took %f seconds).\r\n", time / 1000.0);
hexdump(buffer, 64);
/*
* read word-wise
*/
xprintf("word read\r\n"); xprintf("word read\r\n");
for (i = 0; i < 64 / sizeof(uint16_t); i++) memmove_w((uint16_t *) buffer, (uint16_t *) _VRAM, buffer_size);
((uint16_t *) buffer)[i] = * ((uint16_t *) _VRAM) + i; end = MCF_SLT0_SCNT;
hexdump((volatile uint8_t *) buffer, 64); time = (start - end) / (SYSCLK / 1000) / 1000;
xprintf("finished (took %f seconds).\r\n", time / 1000.0);
hexdump(buffer, 64);
/*
* read longword-wise
*/
xprintf("longword read\r\n"); xprintf("longword read\r\n");
for (i = 0; i < 64 / sizeof(uint32_t); i++) memmove_l((uint32_t *) buffer, (uint32_t *) _VRAM, buffer_size);
((uint32_t *) buffer)[i] = *((uint32_t *) _VRAM) + i;
hexdump((volatile uint8_t *) buffer, 64);
end = MCF_SLT0_SCNT; end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000; time = (start - end) / (SYSCLK / 1000) / 1000;
xprintf("finished (took %f seconds).\r\n", time / 1000.0); xprintf("finished (took %f seconds).\r\n", time / 1000.0);
hexdump(buffer, 64);
end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000;
xprintf("finished (took %f seconds).\r\n", time / 1000.0);
xprintf("read\r\n");
start = MCF_SLT0_SCNT;
hexdump((volatile uint8_t *) _VRAM, 64);
end = MCF_SLT0_SCNT;
time = (start - end) / (SYSCLK / 1000) / 1000;
xprintf("finished (took %f seconds).\r\n", time / 1000.0);
} }