diff options
-rw-r--r-- | sys/arm/xscale/pxa/uart_bus_pxa.c | 20 | ||||
-rw-r--r-- | sys/conf/options.arm | 1 |
2 files changed, 19 insertions, 2 deletions
diff --git a/sys/arm/xscale/pxa/uart_bus_pxa.c b/sys/arm/xscale/pxa/uart_bus_pxa.c index eab7883..c5df619 100644 --- a/sys/arm/xscale/pxa/uart_bus_pxa.c +++ b/sys/arm/xscale/pxa/uart_bus_pxa.c @@ -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; diff --git a/sys/conf/options.arm b/sys/conf/options.arm index 3f9df6b..bbe7f12 100644 --- a/sys/conf/options.arm +++ b/sys/conf/options.arm @@ -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 |