OSDN Git Service

MIPS: ath79: enable uart during early_prink
authorGabor Juhos <juhosg@openwrt.org>
Fri, 20 Jul 2018 11:58:24 +0000 (13:58 +0200)
committerPaul Burton <paul.burton@mips.com>
Wed, 25 Jul 2018 02:07:42 +0000 (19:07 -0700)
This patch ensures, that the pinmux register is properly setup for the
boot console UART when early_printk is enabled.

[paul.burton@mips.com:
  - s/poinmux/pinmux/
  - s/uart/UART/
  - Drop extraneous parentheses.]

Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
Signed-off-by: John Crispin <john@phrozen.org>
Signed-off-by: Paul Burton <paul.burton@mips.com>
Cc: James Hogan <jhogan@kernel.org>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: linux-mips@linux-mips.org
arch/mips/ath79/early_printk.c

index 20e2c31..4b10631 100644 (file)
@@ -60,6 +60,46 @@ static void prom_putchar_dummy(char ch)
        /* nothing to do */
 }
 
+static void prom_enable_uart(u32 id)
+{
+       void __iomem *gpio_base;
+       u32 uart_en;
+       u32 t;
+
+       switch (id) {
+       case REV_ID_MAJOR_AR71XX:
+               uart_en = AR71XX_GPIO_FUNC_UART_EN;
+               break;
+
+       case REV_ID_MAJOR_AR7240:
+       case REV_ID_MAJOR_AR7241:
+       case REV_ID_MAJOR_AR7242:
+               uart_en = AR724X_GPIO_FUNC_UART_EN;
+               break;
+
+       case REV_ID_MAJOR_AR913X:
+               uart_en = AR913X_GPIO_FUNC_UART_EN;
+               break;
+
+       case REV_ID_MAJOR_AR9330:
+       case REV_ID_MAJOR_AR9331:
+               uart_en = AR933X_GPIO_FUNC_UART_EN;
+               break;
+
+       case REV_ID_MAJOR_AR9341:
+       case REV_ID_MAJOR_AR9342:
+       case REV_ID_MAJOR_AR9344:
+               /* TODO */
+       default:
+               return;
+       }
+
+       gpio_base = (void __iomem *)KSEG1ADDR(AR71XX_GPIO_BASE);
+       t = __raw_readl(gpio_base + AR71XX_GPIO_REG_FUNC);
+       t |= uart_en;
+       __raw_writel(t, gpio_base + AR71XX_GPIO_REG_FUNC);
+}
+
 static void prom_putchar_init(void)
 {
        void __iomem *base;
@@ -94,8 +134,10 @@ static void prom_putchar_init(void)
 
        default:
                _prom_putchar = prom_putchar_dummy;
-               break;
+               return;
        }
+
+       prom_enable_uart(id);
 }
 
 void prom_putchar(char ch)