From 227f3bb4be00ffe48ce4ffdaf1e982d96187b188 Mon Sep 17 00:00:00 2001 From: Conke Hu Date: Sat, 10 May 2025 15:13:35 +0800 Subject: [PATCH 1/2] rename armvirt uart to pl011 uart Signed-off-by: Conke Hu --- build/configs/armvirt_defconfig | 4 ++-- driver/uart/Makefile | 2 +- driver/uart/{armvirt_uart.c => pl011_uart.c} | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) rename driver/uart/{armvirt_uart.c => pl011_uart.c} (50%) diff --git a/build/configs/armvirt_defconfig b/build/configs/armvirt_defconfig index 4bd48ac..d365269 100644 --- a/build/configs/armvirt_defconfig +++ b/build/configs/armvirt_defconfig @@ -2,10 +2,10 @@ CONFIG_ARCH = arm CONFIG_PLAT = armvirt -CONFIG_ARCH_VER = armv6k +CONFIG_ARCH_VER = armv7-a CONFIG_DEBUG = y CONFIG_VERBOSE = y CONFIG_UART = y -CONFIG_ARMVIRT_UART = y +CONFIG_PL011_UART = y diff --git a/driver/uart/Makefile b/driver/uart/Makefile index ae6c5f9..d7c17d4 100644 --- a/driver/uart/Makefile +++ b/driver/uart/Makefile @@ -7,4 +7,4 @@ obj-$(CONFIG_UART_AT91) += at91_uart.o obj-$(CONFIG_UART_OMAP3) += omap3_uart.o obj-$(CONFIG_UART_OMAP4) += omap4_uart.o obj-$(CONFIG_E310_UART) += e310_uart.o -obj-$(CONFIG_ARMVIRT_UART) += armvirt_uart.o +obj-$(CONFIG_PL011_UART) += pl011_uart.o diff --git a/driver/uart/armvirt_uart.c b/driver/uart/pl011_uart.c similarity index 50% rename from driver/uart/armvirt_uart.c rename to driver/uart/pl011_uart.c index 6cc4a7c..c060535 100644 --- a/driver/uart/armvirt_uart.c +++ b/driver/uart/pl011_uart.c @@ -2,9 +2,9 @@ #include #include -#define ARMVIRT_UART_BASE 0x09000000 +#define PL011_UART_BASE 0x09000000 -static __init int armvirt_uart_init(void) +static __init int pl011_uart_init(void) { return 0; } @@ -12,18 +12,18 @@ static __init int armvirt_uart_init(void) void __io_putchar(__u8 b) { // TODO: check FIFO - writeb(VA(ARMVIRT_UART_BASE), b); + writeb(VA(PL011_UART_BASE), b); } -stdio_init(armvirt_uart_init); +stdio_init(pl011_uart_init); void uart_send_byte(__u8 b) { - writeb(VA(ARMVIRT_UART_BASE), b); + writeb(VA(PL011_UART_BASE), b); } __u8 uart_recv_byte() { - return readb(VA(ARMVIRT_UART_BASE)); + return readb(VA(PL011_UART_BASE)); } __u32 uart_rxbuf_count() From cb91ffc9b360f31878f3585cd002e66c813bc236 Mon Sep 17 00:00:00 2001 From: Conke Hu Date: Sat, 10 May 2025 15:46:13 +0800 Subject: [PATCH 2/2] add uart loader support Signed-off-by: Conke Hu --- build/configs/armvirt_defconfig | 5 +++++ core/init.c | 4 +--- driver/uart/pl011_uart.c | 30 +++++++++++++++++++++--------- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/build/configs/armvirt_defconfig b/build/configs/armvirt_defconfig index d365269..d320211 100644 --- a/build/configs/armvirt_defconfig +++ b/build/configs/armvirt_defconfig @@ -9,3 +9,8 @@ CONFIG_VERBOSE = y CONFIG_UART = y CONFIG_PL011_UART = y + +CONFIG_LOADER_MENU = y +CONFIG_YMODEM = y +CONFIG_KERMIT = y +CONFIG_OS_RAM_ADDR = 0x40200000 diff --git a/core/init.c b/core/init.c index 9ca684a..ad76875 100644 --- a/core/init.c +++ b/core/init.c @@ -8,7 +8,6 @@ #include #include -#ifdef CONFIG_DEFAULT_LOADER extern struct loader_opt g_loader_begin[], g_loader_end[]; static inline void boot(struct loader_opt *loader) @@ -48,7 +47,6 @@ static int load_os(char key) return 0; } -#endif static const char __init_data banner[] = "\ng-bios " __GBIOS_VER__ #ifdef CONFIG_VERBOSE @@ -115,7 +113,7 @@ int main(void) for (;;) { #endif -#if 0 +#if 1 char key; if (uart_rxbuf_count() > 0) { diff --git a/driver/uart/pl011_uart.c b/driver/uart/pl011_uart.c index c060535..4e4ef4b 100644 --- a/driver/uart/pl011_uart.c +++ b/driver/uart/pl011_uart.c @@ -4,29 +4,41 @@ #define PL011_UART_BASE 0x09000000 +#define UART_DR 0x00 +#define UART_RSRECR 0x04 +#define UART_FR 0x18 +#define UART_ILPR 0x20 +#define UART_IBRD 0x24 +#define UART_FBRD 0x28 +#define UART_LCR_H 0x2C +#define UART_CR 0x30 + +// #define UART_FR_BUSY (1 << 3) // UART is busy? +#define UART_FR_RXFE (1 << 4) // RX FIFO is empty +#define UART_FR_TXFF (1 << 5) // TX FIFO is full + +#define UART_READB(reg) \ + readb(VA(PL011_UART_BASE + (reg))) + +#define UART_WRITEB(reg, val) \ + writeb(VA(PL011_UART_BASE + (reg)), (val)) static __init int pl011_uart_init(void) { return 0; } -void __io_putchar(__u8 b) -{ - // TODO: check FIFO - writeb(VA(PL011_UART_BASE), b); -} - stdio_init(pl011_uart_init); void uart_send_byte(__u8 b) { - writeb(VA(PL011_UART_BASE), b); + UART_WRITEB(UART_DR, b); } __u8 uart_recv_byte() { - return readb(VA(PL011_UART_BASE)); + return UART_READB(UART_DR); } __u32 uart_rxbuf_count() { - return 0; + return UART_READB(UART_FR) & UART_FR_RXFE; }