diff --git a/build/configs/armvirt_defconfig b/build/configs/armvirt_defconfig index 4bd48ac..d320211 100644 --- a/build/configs/armvirt_defconfig +++ b/build/configs/armvirt_defconfig @@ -2,10 +2,15 @@ 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 + +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/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/armvirt_uart.c deleted file mode 100644 index 6cc4a7c..0000000 --- a/driver/uart/armvirt_uart.c +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include - -#define ARMVIRT_UART_BASE 0x09000000 - -static __init int armvirt_uart_init(void) -{ - return 0; -} - -void __io_putchar(__u8 b) -{ - // TODO: check FIFO - writeb(VA(ARMVIRT_UART_BASE), b); -} - -stdio_init(armvirt_uart_init); - -void uart_send_byte(__u8 b) -{ - writeb(VA(ARMVIRT_UART_BASE), b); -} -__u8 uart_recv_byte() -{ - return readb(VA(ARMVIRT_UART_BASE)); -} - -__u32 uart_rxbuf_count() -{ - return 0; -} diff --git a/driver/uart/pl011_uart.c b/driver/uart/pl011_uart.c new file mode 100644 index 0000000..4e4ef4b --- /dev/null +++ b/driver/uart/pl011_uart.c @@ -0,0 +1,44 @@ +#include +#include +#include + +#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; +} + +stdio_init(pl011_uart_init); + +void uart_send_byte(__u8 b) +{ + UART_WRITEB(UART_DR, b); +} +__u8 uart_recv_byte() +{ + return UART_READB(UART_DR); +} + +__u32 uart_rxbuf_count() +{ + return UART_READB(UART_FR) & UART_FR_RXFE; +}