5 static inline uint32_t read32(const void *addr
)
7 return *(volatile uint32_t *)addr
;
10 static inline void write32(void *addr
, uint32_t value
)
12 *(volatile uint32_t *)addr
= value
;
22 uint32_t zero0
; // reserved
23 uint32_t zero1
; // reserved
29 void uart_write(char c
)
31 struct uart_regs
*regs
= 0x2000;
32 while (!read32(®s
->tx_rdy
));
33 write32(®s
->tx_data
, c
);
36 void uart_writestr(const char *c
) {
43 void memcpy(void *dest
, void *src
, size_t n
) {
45 //cast src and dest to char*
46 char *src_char
= (char *)src
;
47 char *dest_char
= (char *)dest
;
49 dest_char
[i
] = src_char
[i
]; //copy contents byte by byte
52 void uart_writeuint32(uint32_t val
) {
53 const char lut
[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
54 uint8_t *val_arr
= &val
;
57 for (i
= 0; i
< 4; i
++) {
58 uart_write(lut
[(val_arr
[3-i
] >> 4) & 0xF]);
59 uart_write(lut
[val_arr
[3-i
] & 0xF]);
68 const int kNumIterations
= 65536;
71 volatile uint32_t *ram
= 0x10000000;
72 uart_writestr("Firmware launched...\n");
74 uart_writestr("DRAM init... ");
76 struct gramProfile profile
= {
78 0x320, 0x6, 0x200, 0x0
83 struct gramProfile profile2
;
84 gram_init(&ctx
, &profile
, (void*)0x10000000, (void*)0x00009000, (void*)0x00008000);
85 uart_writestr("done\n");
87 uart_writestr("Rdly\np0: ");
88 for (size_t i
= 0; i
< 8; i
++) {
90 gram_load_calibration(&ctx
, &profile2
);
91 gram_reset_burstdet(&ctx
);
92 for (size_t j
= 0; j
< 128; j
++) {
95 if (gram_read_burstdet(&ctx
, 0)) {
103 uart_writestr("Rdly\np1: ");
104 for (size_t i
= 0; i
< 8; i
++) {
105 profile2
.rdly_p1
= i
;
106 gram_load_calibration(&ctx
, &profile2
);
107 gram_reset_burstdet(&ctx
);
108 for (size_t j
= 0; j
< 128; j
++) {
111 if (gram_read_burstdet(&ctx
, 1)) {
119 uart_writestr("Auto calibrating... ");
120 res
= gram_generate_calibration(&ctx
, &profile2
);
121 if (res
!= GRAM_ERR_NONE
) {
122 uart_writestr("failed\n");
123 gram_load_calibration(&ctx
, &profile
);
125 gram_load_calibration(&ctx
, &profile2
);
127 uart_writestr("done\n");
129 uart_writestr("Auto calibration profile:");
130 uart_writestr("p0 rdly:");
131 uart_writeuint32(profile2
.rdly_p0
);
132 uart_writestr(" p1 rdly:");
133 uart_writeuint32(profile2
.rdly_p1
);
136 uart_writestr("DRAM test... \n");
137 for (size_t i
= 0; i
< kNumIterations
; i
++) {
138 ram
[i
] = 0xDEAF0000 | i
*4;
141 for (size_t i
= 0; i
< kNumIterations
; i
++) {
142 if (ram
[i
] != (0xDEAF0000 | i
*4)) {
143 uart_writestr("fail : *(0x");
144 uart_writeuint32(&ram
[i
]);
145 uart_writestr(") = ");
146 uart_writeuint32(ram
[i
]);
151 uart_writestr("Test canceled (more than 10 errors)\n");
156 uart_writestr("done\n");