diff --git a/Ubiquitous/XiZi_AIoT/hardkernel/mmu/arm/armv8-a/cortex-a55/bootmmu.c b/Ubiquitous/XiZi_AIoT/hardkernel/mmu/arm/armv8-a/cortex-a55/bootmmu.c index f05989867..78b665e8e 100644 --- a/Ubiquitous/XiZi_AIoT/hardkernel/mmu/arm/armv8-a/cortex-a55/bootmmu.c +++ b/Ubiquitous/XiZi_AIoT/hardkernel/mmu/arm/armv8-a/cortex-a55/bootmmu.c @@ -122,89 +122,6 @@ static void build_boot_pgdir() } #include "log.h" -#include "ns16550.h" -#define UART_LCRVAL UART_LCR_8N1 /* 8 data, 1 stop, no parity */ -#define UART_MCRVAL (UART_MCR_DTR | UART_MCR_RTS) /* RTS/DTR */ - -#define out_le32(a, v) (*(volatile uint32_t*)(a) = (v)) -#define in_le32(a) (*(volatile uint32_t*)(a)) - -#ifndef CONFIG_SYS_NS16550_IER -#define CONFIG_SYS_NS16550_IER 0x00 -#endif /* CONFIG_SYS_NS16550_IER */ - -#define serial_dout(reg, value) \ - serial_out_shift((char*)com_port + ((char*)reg - (char*)com_port) * (1 << 2), \ - 2, value) -#define serial_din(reg) \ - serial_in_shift((char*)com_port + ((char*)reg - (char*)com_port) * (1 << 2), \ - 2) - -#define DIV_ROUND_CLOSEST(x, divisor) ( \ - { \ - typeof(x) __x = x; \ - typeof(divisor) __d = divisor; \ - (((typeof(x))-1) > 0 || ((typeof(divisor))-1) > 0 || (__x) > 0) ? (((__x) + ((__d) / 2)) / (__d)) : (((__x) - ((__d) / 2)) / (__d)); \ - }) - -int _ns16550_calc_divisor(NS16550_t port, int clock, int baudrate) -{ - const unsigned int mode_x_div = 16; - - return DIV_ROUND_CLOSEST(clock, mode_x_div * baudrate); -} -static inline void serial_out_shift(void* addr, int shift, int value) -{ - out_le32(addr, value); -} - -static inline int serial_in_shift(void* addr, int shift) -{ - return in_le32(addr); -} - -void __debug_uart_init(void) -{ - struct NS16550* com_port = (struct NS16550*)0xFE660000ULL; - - /* - * We copy the code from above because it is already horribly messy. - * Trying to refactor to nicely remove the duplication doesn't seem - * feasible. The better fix is to move all users of this driver to - * driver model. - */ - int baud_divisor = _ns16550_calc_divisor(com_port, 24000000, - 1500000); - serial_dout(&com_port->ier, CONFIG_SYS_NS16550_IER); - serial_dout(&com_port->mcr, UART_MCRVAL); - serial_dout(&com_port->fcr, UART_FCR_DEFVAL); - - serial_dout(&com_port->lcr, UART_LCR_BKSE | UART_LCRVAL); - serial_dout(&com_port->dll, baud_divisor & 0xff); - serial_dout(&com_port->dlm, (baud_divisor >> 8) & 0xff); - serial_dout(&com_port->lcr, UART_LCRVAL); -} - -void __debug_uart_putc(int ch) -{ - static struct NS16550* com_port = (struct NS16550*)0xFE660000ULL; - - if (ch == '\n') { - _debug_uart_putc('\r'); - } - - while (!(serial_din(&com_port->lsr) & UART_LSR_THRE)) - ; - serial_dout(&com_port->thr, ch); -} - -void __print(){ - __debug_uart_init(); - for(int i = 0; i < 10; i++){ - __debug_uart_putc((int)'+'); - } -} - static void load_boot_pgdir() { @@ -253,11 +170,6 @@ extern void main(void); static bool _bss_inited = false; void bootmain() { - __print(); - // if(_bss_inited){ - // unsigned int* p = (unsigned int*)0xffffffff; - // *p = 0; - // } build_boot_pgdir(); load_boot_pgdir(); __asm__ __volatile__("add sp, sp, %0" ::"r"(KERN_OFFSET));