integrator/cp: Wire up MMC card detection
PATCH 1/1 integrator/cp: Wire up MMC card detection
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.
--- hw/arm/integratorcp.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
hw/arm/integratorcp.c +6 -3
@@ -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 ]);
Signature · 1 line
2.1.4
Quoted 7 lines · Jan Kiszka
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.
I'm not sure what you mean here. The WPROT signal isn't wired up to the SIC at all as far as I can see -- it's just a read-only bit in the CP_INTREG register in what we model as "icp_control".
Your patch doesn't seem to do anything with the icp_control at all, which doesn't look right, because the docs say that to clear the 'card insert' interrupt reported by the SIC you need to write to the CP_INTREG register.
The gpio out line from the PL181 is just a status line (high when a card is present, low if not); there needs to be a latch somewhere in here that gets reset by the CP_INTREG write, the PL181 line isn't just wired directly to the SIC.
thanks
-- PMM
Quoted 18 lines · Peter Maydell
Quoted 7 lines · Jan Kiszka
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.
I'm not sure what you mean here. The WPROT signal isn't wired up to the SIC at all as far as I can see -- it's just a read-only bit in the
CP_INTREGregister in what we model as "icp_control".Your patch doesn't seem to do anything with the
icp_controlat all, which doesn't look right, because the docs say that to clear the 'card insert' interrupt reported by the SIC you need to write to theCP_INTREGregister.
Quoted 4 lines
The gpio out line from the PL181 is just a status line (high when a card is present, low if not); there needs to be a latch somewhere in here that gets reset by the
CP_INTREGwrite, the PL181 line isn't just wired directly to the SIC.
Indeed, read this too quickly. Let's see if modeling this more correctly will also improve the detection reliability.
Jan