mirror of
https://github.com/openhwgroup/cva6.git
synced 2025-04-20 04:07:36 -04:00
openpiton: Beautify status display in FSBL
This commit is contained in:
parent
078c5c167d
commit
fa3af5ece4
5 changed files with 39 additions and 19 deletions
1
openpiton/bootrom/linux/info.h
Symbolic link
1
openpiton/bootrom/linux/info.h
Symbolic link
|
@ -0,0 +1 @@
|
|||
../info.h
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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] = {
|
||||
|
@ -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--)
|
||||
|
@ -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;
|
||||
}
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue