Author: stas
Date: Sat Apr  7 23:47:08 2012
New Revision: 234004
URL: http://svn.freebsd.org/changeset/base/234004

Log:
  - Add new ARM kernel option QEMU_WORKAROUNDS which can be
    used in the code which needs to implement some specific
    behaviour when being run under QEMU.
  - Make PXA UART probe code to work under QEMU gumstix, which
    doesn't emulate all the ports properly.

Modified:
  head/sys/arm/xscale/pxa/uart_bus_pxa.c
  head/sys/conf/options.arm

Modified: head/sys/arm/xscale/pxa/uart_bus_pxa.c
==============================================================================
--- head/sys/arm/xscale/pxa/uart_bus_pxa.c      Sat Apr  7 22:28:50 2012        
(r234003)
+++ head/sys/arm/xscale/pxa/uart_bus_pxa.c      Sat Apr  7 23:47:08 2012        
(r234004)
@@ -72,12 +72,28 @@ uart_pxa_probe(device_t dev)
        bus_space_handle_t      base;
        struct                  uart_softc *sc;
 
-       /* Check to see if the enable bit's on. */
        base = (bus_space_handle_t)pxa_get_base(dev);
+#ifdef QEMU_WORKAROUNDS
+       /*
+        * QEMU really exposes only the first uart unless
+        * you specify several of them in the configuration.
+        * Otherwise all the rest of UARTs stay unconnected,
+        * which causes problems in the ns16550 attach routine.
+        * Unfortunately, even if you provide qemu with 4 uarts
+        * on the command line, it has a bug where it segfaults
+        * trying to enable bluetooth on the HWUART.  So we just
+        * allow the FFUART to be attached.
+        * Also, don't check the UUE (UART Unit Enable) bit, as
+        * the gumstix bootloader doesn't set it.
+        */
+       if (base != PXA2X0_FFUART_BASE)
+               return (ENXIO);
+#else
+       /* Check to see if the enable bit's on. */
        if ((bus_space_read_4(obio_tag, base,
            (REG_IER << 2)) & PXA_UART_UUE) == 0)
                return (ENXIO);
-
+#endif
        sc = device_get_softc(dev);
        sc->sc_class = &uart_ns8250_class;
 

Modified: head/sys/conf/options.arm
==============================================================================
--- head/sys/conf/options.arm   Sat Apr  7 22:28:50 2012        (r234003)
+++ head/sys/conf/options.arm   Sat Apr  7 23:47:08 2012        (r234004)
@@ -23,6 +23,7 @@ KERNPHYSADDR          opt_global.h
 KERNVIRTADDR           opt_global.h
 LOADERRAMADDR          opt_global.h
 PHYSADDR               opt_global.h
+QEMU_WORKAROUNDS       opt_global.h
 SKYEYE_WORKAROUNDS     opt_global.h
 SOC_MV_DISCOVERY       opt_global.h
 SOC_MV_KIRKWOOD                opt_global.h
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to