diff --git a/openpiton/bootrom/linux/info.h b/openpiton/bootrom/linux/info.h new file mode 120000 index 000000000..ed6cf21f6 --- /dev/null +++ b/openpiton/bootrom/linux/info.h @@ -0,0 +1 @@ +../info.h \ No newline at end of file diff --git a/openpiton/bootrom/linux/src/main.c b/openpiton/bootrom/linux/src/main.c index 16ec471ed..528fab8bf 100644 --- a/openpiton/bootrom/linux/src/main.c +++ b/openpiton/bootrom/linux/src/main.c @@ -2,11 +2,14 @@ #include "spi.h" #include "sd.h" #include "gpt.h" +#include "info.h" int main() { init_uart(UART_FREQ, 115200); - print_uart("Hello World!\r\n"); + print_uart(info); + + print_uart("sd initialized!\r\n"); int res = gpt_find_boot_partition((uint8_t *)0x80000000UL, 2 * 16384); diff --git a/openpiton/bootrom/linux/src/sd.c b/openpiton/bootrom/linux/src/sd.c index 455562620..0faff05c0 100644 --- a/openpiton/bootrom/linux/src/sd.c +++ b/openpiton/bootrom/linux/src/sd.c @@ -17,25 +17,31 @@ int init_sd() int sd_copy(void *dst, uint32_t src_lba, uint32_t size) { + char buf[100]; uint64_t raw_addr = PITON_SD_BASE_ADDR; raw_addr += ((uint64_t)src_lba) << 9; - + uint32_t num_chars = 0; uint64_t * addr = (uint64_t *)raw_addr; volatile uint64_t * p = (uint64_t *)dst; for (uint32_t blk = 0; blk < size; blk++) { if(blk % 100 == 0) { - print_uart("copying block "); - print_uart_dec(blk, 1); - print_uart(" of "); - print_uart_dec(size, 1); - print_uart(" blocks ("); - print_uart_dec((blk*100)/size, 1); - print_uart(" %)\r\n"); + for(uint32_t k=0; k -1; i--) @@ -69,11 +74,13 @@ void print_uart_dec(uint32_t val, uint32_t digits) uint8_t dec; dec = bin_to_hex_table[cur & 0xf]; write_serial(dec); + num++; } } + return num; } -void print_uart_int(uint32_t addr) +int print_uart_int(uint32_t addr) { int i; for (i = 3; i > -1; i--) @@ -84,9 +91,10 @@ void print_uart_int(uint32_t addr) write_serial(hex[0]); write_serial(hex[1]); } + return 8; } -void print_uart_addr(uint64_t addr) +int print_uart_addr(uint64_t addr) { int i; for (i = 7; i > -1; i--) @@ -97,12 +105,14 @@ void print_uart_addr(uint64_t addr) write_serial(hex[0]); write_serial(hex[1]); } + return 16; } -void print_uart_byte(uint8_t byte) +int print_uart_byte(uint8_t byte) { uint8_t hex[2]; bin_to_hex(byte, hex); write_serial(hex[0]); write_serial(hex[1]); + return 2; } \ No newline at end of file diff --git a/openpiton/bootrom/linux/src/uart.h b/openpiton/bootrom/linux/src/uart.h index 06046f88b..fe5e92338 100644 --- a/openpiton/bootrom/linux/src/uart.h +++ b/openpiton/bootrom/linux/src/uart.h @@ -18,12 +18,12 @@ void init_uart(); -void print_uart(const char* str); +int print_uart(const char* str); -void print_uart_dec(uint32_t val, uint32_t digits); +int print_uart_dec(uint32_t val, uint32_t digits); -void print_uart_int(uint32_t addr); +int print_uart_int(uint32_t addr); -void print_uart_addr(uint64_t addr); +int print_uart_addr(uint64_t addr); -void print_uart_byte(uint8_t byte); +int print_uart_byte(uint8_t byte);