svn commit: r333138 - in head/sys: arm/allwinner dev/uart
Emmanuel Vadot
manu at FreeBSD.org
Tue May 1 13:57:09 UTC 2018
Author: manu
Date: Tue May 1 13:57:08 2018
New Revision: 333138
URL: https://svnweb.freebsd.org/changeset/base/333138
Log:
uart_snps: Add early printf support
Move the allwinner early printf support to the snps driver as it
should work with all implementation.
While here add instruction for enabling it on 64bits SoCs.
Modified:
head/sys/arm/allwinner/aw_machdep.c
head/sys/dev/uart/uart_dev_snps.c
Modified: head/sys/arm/allwinner/aw_machdep.c
==============================================================================
--- head/sys/arm/allwinner/aw_machdep.c Tue May 1 12:58:01 2018 (r333137)
+++ head/sys/arm/allwinner/aw_machdep.c Tue May 1 13:57:08 2018 (r333138)
@@ -164,30 +164,6 @@ allwinner_cpu_reset(platform_t plat)
while (1);
}
-/*
- * To use early printf on Allwinner SoC, add to kernel config
- * options SOCDEV_PA=0x01C00000
- * options SOCDEV_VA=0x10000000
- * options EARLY_PRINTF
- * And remove the if 0
-*/
-#if 0
-#ifdef EARLY_PRINTF
-static void
-allwinner_early_putc(int c)
-{
- volatile uint32_t * UART_STAT_REG = (uint32_t *)0x1002807C;
- volatile uint32_t * UART_TX_REG = (uint32_t *)0x10028000;
- const uint32_t UART_TXRDY = (1 << 2);
-
- while ((*UART_STAT_REG & UART_TXRDY) == 0)
- continue;
- *UART_TX_REG = c;
-}
-early_putc_t *early_putc = allwinner_early_putc;
-#endif /* EARLY_PRINTF */
-#endif
-
#if defined(SOC_ALLWINNER_A10)
static platform_method_t a10_methods[] = {
PLATFORMMETHOD(platform_attach, a10_attach),
Modified: head/sys/dev/uart/uart_dev_snps.c
==============================================================================
--- head/sys/dev/uart/uart_dev_snps.c Tue May 1 12:58:01 2018 (r333137)
+++ head/sys/dev/uart/uart_dev_snps.c Tue May 1 13:57:08 2018 (r333138)
@@ -61,6 +61,44 @@ struct snps_softc {
#endif
};
+/*
+ * To use early printf on 64 bits Allwinner SoC, add to kernel config
+ * options SOCDEV_PA=0x0
+ * options SOCDEV_VA=0x40000000
+ * options EARLY_PRINTF
+ *
+ * To use early printf on 32 bits Allwinner SoC, add to kernel config
+ * options SOCDEV_PA=0x01C00000
+ * options SOCDEV_VA=0x10000000
+ * options EARLY_PRINTF
+ *
+ * remove the if 0
+*/
+#if 0
+#ifdef EARLY_PRINTF
+static void
+uart_snps_early_putc(int c)
+{
+ volatile uint32_t *stat;
+ volatile uint32_t *tx;
+
+#ifdef ALLWINNER_64
+ stat = (uint32_t *) (SOCDEV_VA + 0x1C2807C);
+ tx = (uint32_t *) (SOCDEV_VA + 0x1C28000);
+#endif
+#ifdef ALLWINNER_32
+ stat = (uint32_t *) (SOCDEV_VA + 0x2807C);
+ tx = (uint32_t *) (SOCDEV_VA + 0x28000);
+#endif
+
+ while ((*stat & (1 << 2)) == 0)
+ continue;
+ *tx = c;
+}
+early_putc_t *early_putc = uart_snps_early_putc;
+#endif /* EARLY_PRINTF */
+#endif
+
static int
snps_uart_attach(struct uart_softc *uart_sc)
{
More information about the svn-src-head
mailing list