From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43093) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YHI2K-00062f-1k for qemu-devel@nongnu.org; Fri, 30 Jan 2015 15:19:29 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YHI2G-0000FF-Rr for qemu-devel@nongnu.org; Fri, 30 Jan 2015 15:19:27 -0500 Received: from goliath.siemens.de ([192.35.17.28]:54030) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YHI2G-0000Ey-H5 for qemu-devel@nongnu.org; Fri, 30 Jan 2015 15:19:24 -0500 Message-ID: <54CBE747.8060600@siemens.com> Date: Fri, 30 Jan 2015 21:19:19 +0100 From: Jan Kiszka MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [PATCH] integrator/cp: Wire up MMC card detection List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Peter Maydell , qemu-devel This allows to use MMC emulation with the Integrator/CP model. Well, mostly. There seems to be timing issues with Linux so that the card is not always detected (but most of the time). Note that the read-only pin is intentionally left unconnected because the PIC model could deliver it incorrectly as interrupt to the guest while the spec says that this pin is just for status reading. Signed-off-by: Jan Kiszka --- hw/arm/integratorcp.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/hw/arm/integratorcp.c b/hw/arm/integratorcp.c index 8c48b68..0efadc4 100644 --- a/hw/arm/integratorcp.c +++ b/hw/arm/integratorcp.c @@ -477,7 +477,7 @@ static void integratorcp_init(MachineState *machine) MemoryRegion *ram = g_new(MemoryRegion, 1); MemoryRegion *ram_alias = g_new(MemoryRegion, 1); qemu_irq pic[32]; - DeviceState *dev; + DeviceState *dev, *sic; int i; Error *err = NULL; @@ -535,7 +535,7 @@ static void integratorcp_init(MachineState *machine) for (i = 0; i < 32; i++) { pic[i] = qdev_get_gpio_in(dev, i); } - sysbus_create_simple(TYPE_INTEGRATOR_PIC, 0xca000000, pic[26]); + sic = sysbus_create_simple(TYPE_INTEGRATOR_PIC, 0xca000000, pic[26]); sysbus_create_varargs("integrator_pit", 0x13000000, pic[5], pic[6], pic[7], NULL); sysbus_create_simple("pl031", 0x15000000, pic[8]); @@ -545,7 +545,10 @@ static void integratorcp_init(MachineState *machine) sysbus_create_simple("pl050_keyboard", 0x18000000, pic[3]); sysbus_create_simple("pl050_mouse", 0x19000000, pic[4]); sysbus_create_simple(TYPE_INTEGRATOR_DEBUG, 0x1a000000, 0); - sysbus_create_varargs("pl181", 0x1c000000, pic[23], pic[24], NULL); + dev = sysbus_create_varargs("pl181", 0x1c000000, pic[23], pic[24], NULL); + /* Wire up MMC card detect */ + qdev_connect_gpio_out(dev, 1, qdev_get_gpio_in(sic, 3)); + if (nd_table[0].used) smc91c111_init(&nd_table[0], 0xc8000000, pic[27]); -- 2.1.4