Skip to content

Commit

Permalink
openpiton: Beautify status display in FSBL
Browse files Browse the repository at this point in the history
  • Loading branch information
msfschaffner authored and zarubaf committed Jun 4, 2019
1 parent 078c5c1 commit fa3af5e
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 19 deletions.
1 change: 1 addition & 0 deletions openpiton/bootrom/linux/info.h
5 changes: 4 additions & 1 deletion openpiton/bootrom/linux/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
22 changes: 14 additions & 8 deletions openpiton/bootrom/linux/src/sd.c
Original file line number Diff line number Diff line change
Expand Up @@ -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<num_chars; k++) {
print_uart("\b");
}
num_chars =print_uart("copying block ");
num_chars+=print_uart_dec(blk, 1);
num_chars+=print_uart(" of ");
num_chars+=print_uart_dec(size, 1);
num_chars+=print_uart(" blocks (");
num_chars+=print_uart_dec((blk*100)/size, 1);
num_chars+=print_uart(" %)");
}
for (uint32_t offset = 0; offset < 64; offset++) {
*(p++) = *(addr++);
}
}

print_uart("\r\n");

return 0;
}
20 changes: 15 additions & 5 deletions openpiton/bootrom/linux/src/uart.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,18 @@ void init_uart(uint32_t freq, uint32_t baud)
write_reg_u8(UART_MODEM_CONTROL, 0x20); // Autoflow mode
}

void print_uart(const char *str)
// returns number of characters printed
int print_uart(const char *str)
{
int num = 0;
const char *cur = &str[0];
while (*cur != '\0')
{
write_serial((uint8_t)*cur);
++cur;
++num;
}
return num;
}

uint8_t bin_to_hex_table[16] = {
Expand All @@ -55,8 +59,9 @@ void bin_to_hex(uint8_t inp, uint8_t res[2])
return;
}

void print_uart_dec(uint32_t val, uint32_t digits)
int print_uart_dec(uint32_t val, uint32_t digits)
{
int num = 0;
int i;
uint32_t k = 1000000000;
for (i = 9; i > -1; i--)
Expand All @@ -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--)
Expand All @@ -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--)
Expand All @@ -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;
}
10 changes: 5 additions & 5 deletions openpiton/bootrom/linux/src/uart.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);

0 comments on commit fa3af5e

Please sign in to comment.