Date: Thu, 19 Mar 2009 09:11:53 -0500 (CDT) From: Mark Tinguely <tinguely@casselton.net> To: freebsd-arm@freebsd.org Subject: PXA255 QEM FYI Message-ID: <200903191411.n2JEBrCY099265@casselton.net>
next in thread | raw e-mail | index | archive | help
This is just a FYI for those wanting to use QEMU with the PXA255. 1) The uart is not discovered causing a hang after the line: warning: no time-of-day clock registered, system time will not be set accurately I had this problem in qemu 0.9.1 and 0.10.0_1. This problem was keeping the NFS diskless and MD based kernels to even get to single user. In FreeBSD, sys/arm/xscale/pxa/uart_bus_pxa.c in uart_pxa_probe(), a check is made to make sure the port is enabled. QEM does not enable that bit. It appears that Linux does not check for the bit. A simple work around in FreeBSD would something like: static int uart_pxa_probe(device_t dev) { bus_space_handle_t base; struct uart_softc *sc; +#ifdef QEMU + base = (bus_space_handle_t)pxa_get_base(dev); + if (0x40100000 != (unsigned int) 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; return(uart_bus_probe(dev, 2, PXA2X0_COM_FREQ, 0, 0)); } 2) the new QEMU (qemu-0.10.0_1) compile under FreeBSD-8.0-current, incorrect brings a register value from the ARM enviroment to the QEMU SMC emulation evironment and QEMU crashes with a message: qemu: fatal: smc91c111_read: Bad reg 0:30e R00=00000000 R01=c5e1f300 R02=0000000e R03=c0a778e0 R04=c0ba8300 R05=c0baab00 R06=00000003 R07=00000001 R08=00000000 R09=00000000 R10=c0bb4540 R11=c00fbc50 R12=c00fbc54 R13=c00fbc44 R14=c0403950 R15=c03e8bac PSR=a0000113 N-C- A svc32 Notice register 2 has the correct value of 0x0e. Compiled under FreeBSD 6.4, the emulator runs fine. I will mention this to the QEMU people; it may be a difference in gcc3 vs gcc4. A temporary work around in QEMU might be a mask (0xff) of the offset variable in smc91c111_readb (and smc91c111_writeb ?) or removal of the ethernet card from the kernel configuration. A big THANK-YOU to Jacques Fourie for holding my hand to get these problems resolved. --Mark Tinguely.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903191411.n2JEBrCY099265>