- 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.
This commit is contained in:
Stanislav Sedov 2012-04-07 23:47:08 +00:00
parent 351f30528e
commit 208cf1fbc3
2 changed files with 19 additions and 2 deletions

View File

@ -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;

View File

@ -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