Begin UART0 integration
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sat, 31 Dec 2016 07:03:13 +0000 (23:03 -0800)
committerAlyssa Rosenzweig <alyssa@rosenzweig.io>
Sat, 31 Dec 2016 07:03:13 +0000 (23:03 -0800)
romstage.c

index a48b214..b5444f9 100644 (file)
@@ -22,19 +22,37 @@ VideoCoreIV first stage bootloader.
 \r
 uint32_t g_CPUID;\r
 \r
+#define UART_DR     (UART_BASE+0x00)\r
+#define UART_RSRECR (UART_BASE+0x04)\r
+#define UART_FR     (UART_BASE+0x18)\r
+#define UART_ILPR   (UART_BASE+0x20)\r
+#define UART_IBRD   (UART_BASE+0x24)\r
+#define UART_FBRD   (UART_BASE+0x28)\r
+#define UART_LCRH   (UART_BASE+0x2C)\r
+#define UART_CR     (UART_BASE+0x30)\r
+#define UART_IFLS   (UART_BASE+0x34)\r
+#define UART_IMSC   (UART_BASE+0x38)\r
+#define UART_RIS    (UART_BASE+0x3C)\r
+#define UART_MIS    (UART_BASE+0x40)\r
+#define UART_ICR    (UART_BASE+0x44)\r
+#define UART_DMACR  (UART_BASE+0x48)\r
+#define UART_ITCR   (UART_BASE+0x80)\r
+#define UART_ITIP   (UART_BASE+0x84)\r
+#define UART_ITOP   (UART_BASE+0x88)\r
+#define UART_TDR    (UART_BASE+0x8C)\r
+\r
 void uart_putc(unsigned int ch)\r
 {\r
-       while(1) {\r
-               if (mmio_read32(AUX_MU_LSR_REG) & 0x20)\r
-                       break;\r
-       }\r
-       mmio_write32(AUX_MU_IO_REG, ch);\r
+       while(UART_MSR & 0x20) break;\r
+       UART_RBRTHRDLL = ch;\r
 }\r
 \r
 void uart_init(void) {\r
+        mmio_write32(UART_CR, 0);\r
+\r
        unsigned int ra = GP_FSEL1;\r
        ra &= ~(7 << 12);\r
-       ra |= 2 << 12;\r
+       ra |= 4 << 12;\r
        GP_FSEL1 = ra;\r
 \r
        GP_PUD = 0;\r
@@ -44,18 +62,16 @@ void uart_init(void) {
        udelay(150);\r
        GP_PUDCLK0 = 0;\r
 \r
-       mmio_write32(AUX_ENABLES, 1);\r
-       mmio_write32(AUX_MU_IER_REG, 0);\r
-       mmio_write32(AUX_MU_CNTL_REG, 0);\r
-       mmio_write32(AUX_MU_LCR_REG, 3);\r
-       mmio_write32(AUX_MU_MCR_REG, 0);\r
-       mmio_write32(AUX_MU_IER_REG, 0);\r
-       mmio_write32(AUX_MU_IIR_REG, 0xC6);\r
+        CM_UARTDIV = CM_PASSWORD | 42667;\r
+        CM_UARTCTL = CM_PASSWORD | CM_SRC_OSC | CM_UARTCTL_FRAC_SET | CM_UARTCTL_ENAB_SET;\r
 \r
-       mmio_write32(AUX_MU_BAUD_REG, 270);\r
+        mmio_write32(UART_ICR, 0x7FF);\r
+        mmio_write32(UART_IBRD, 1);\r
+        mmio_write32(UART_FBRD, 40);\r
+        mmio_write32(UART_LCRH, 0x70);\r
+        mmio_write32(UART_CR, 0x301);\r
 \r
-       mmio_write32(AUX_MU_LCR_REG, 3);\r
-       mmio_write32(AUX_MU_CNTL_REG, 3);\r
+        for(;;) uart_putc('B');\r
 }\r
 \r
 void led_init(void) {\r
This page took 0.027546 seconds and 4 git commands to generate.