mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-08 02:03:56 -06:00
SD/MMC patches
- Convert legacy SD host controller to the SDBus API - Move legacy API to a separate "sdcard_legacy.h" header - Introduce methods to access multiple bytes on SDBus data lines - Fix 'switch function' group location - Fix SDSC maximum card size (2GB) CI jobs result:180605963
-----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAl9ABBYACgkQ4+MsLN6t wN4vng/8DEiJcb6RyjXXRbY6dY+k1mPRbUCCdkkSL/20OUF7edu8FXVO/YtTemky /rUbG8xa/WqxLXg5TqHkmJAHbQYjPu3YfakMTaNKAQfmAukepsqaWO4T2ROKtBNf Muj5X0idTnMSHYNLyJ9O59FiaGMmXN/1eWYkd6QcGl5IVyQQws1Sn/2Mwm4sXinU jkLzYSiibho/y9Y18MzvgD22/Z4dcRmdyCenHYaVAZVOJ1DNKNpJg0nem13lva8/ 9kZbtjV0WuGX+QkNd5KUSpJQEjemRuABsPSwu+MIA/1AWDhoowAITUbMba5GpRmT uIylUiVpVyJAD545UB5rVMlBb86hBEp/4cpxpZ8J05qd1L8Ko/F3ECUj1WrteqK7 Wf6p4ZtF+unGELwk/7tu9o9MiEIU5Lb8IN2cr68gQ2p50rxR1ABkJo4K7FqR9Lvk QkmfqAJRl/dSvh9ChDE/xRMewYm69FE7MGpg4JaeW6KZ4CTX0JwWy9LSpdjQf5AG uhHqGTjiZkn9kzIGMIYaRuKDqYQcnslQpKxd0lRKNMw775LI/0L3MBIc1zfLA/Sb uUHdADDUibQaXaTHVgkyJDU96i3STkehEhbTejo36i+Qevd6bE8j3yDu483Kt2aV AStMJpW+8Iuq7T2hIRaggqhcuwCIsknKU3yhvV7rwAgHxnwy4Nc= =Pefc -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/philmd-gitlab/tags/sd-next-20200821' into staging SD/MMC patches - Convert legacy SD host controller to the SDBus API - Move legacy API to a separate "sdcard_legacy.h" header - Introduce methods to access multiple bytes on SDBus data lines - Fix 'switch function' group location - Fix SDSC maximum card size (2GB) CI jobs result:180605963
# gpg: Signature made Fri 21 Aug 2020 18:27:50 BST # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * remotes/philmd-gitlab/tags/sd-next-20200821: (23 commits) hw/sd: Correct the maximum size of a Standard Capacity SD Memory Card hw/sd: Fix incorrect populated function switch status data structure hw/sd: Use sdbus_read_data() instead of sdbus_read_byte() when possible hw/sd: Add sdbus_read_data() to read multiples bytes on the data line hw/sd: Use sdbus_write_data() instead of sdbus_write_byte when possible hw/sd: Add sdbus_write_data() to write multiples bytes on the data line hw/sd: Rename sdbus_read_data() as sdbus_read_byte() hw/sd: Rename sdbus_write_data() as sdbus_write_byte() hw/sd: Rename read/write_data() as read/write_byte() hw/sd: Move sdcard legacy API to 'hw/sd/sdcard_legacy.h' hw/sd/sdcard: Make sd_data_ready() static hw/sd/pl181: Replace disabled fprintf()s by trace events hw/sd/pl181: Do not create SD card within the SD host controller hw/sd/pl181: Expose a SDBus and connect the SDCard to it hw/sd/pl181: Use named GPIOs hw/sd/pl181: Add TODO to use Fifo32 API hw/sd/pl181: Rename pl181_send_command() as pl181_do_command() hw/sd/pl181: Replace fprintf(stderr, "*\n") with error_report() hw/sd/milkymist: Do not create SD card within the SD host controller hw/sd/milkymist: Create the SDBus at init() ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
d7df0ceee0
21 changed files with 415 additions and 222 deletions
|
@ -25,6 +25,7 @@
|
|||
#include "hw/char/pl011.h"
|
||||
#include "hw/hw.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/sd/sd.h"
|
||||
|
||||
#define TYPE_INTEGRATOR_CM "integrator_core"
|
||||
#define INTEGRATOR_CM(obj) \
|
||||
|
@ -595,6 +596,7 @@ static void integratorcp_init(MachineState *machine)
|
|||
MemoryRegion *ram_alias = g_new(MemoryRegion, 1);
|
||||
qemu_irq pic[32];
|
||||
DeviceState *dev, *sic, *icp;
|
||||
DriveInfo *dinfo;
|
||||
int i;
|
||||
|
||||
cpuobj = object_new(machine->cpu_type);
|
||||
|
@ -645,10 +647,21 @@ static void integratorcp_init(MachineState *machine)
|
|||
sysbus_create_simple(TYPE_INTEGRATOR_DEBUG, 0x1a000000, 0);
|
||||
|
||||
dev = sysbus_create_varargs("pl181", 0x1c000000, pic[23], pic[24], NULL);
|
||||
qdev_connect_gpio_out(dev, 0,
|
||||
qdev_connect_gpio_out_named(dev, "card-read-only", 0,
|
||||
qdev_get_gpio_in_named(icp, ICP_GPIO_MMC_WPROT, 0));
|
||||
qdev_connect_gpio_out(dev, 1,
|
||||
qdev_connect_gpio_out_named(dev, "card-inserted", 0,
|
||||
qdev_get_gpio_in_named(icp, ICP_GPIO_MMC_CARDIN, 0));
|
||||
dinfo = drive_get_next(IF_SD);
|
||||
if (dinfo) {
|
||||
DeviceState *card;
|
||||
|
||||
card = qdev_new(TYPE_SD_CARD);
|
||||
qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo),
|
||||
&error_fatal);
|
||||
qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"),
|
||||
&error_fatal);
|
||||
}
|
||||
|
||||
sysbus_create_varargs("pl041", 0x1d000000, pic[25], NULL);
|
||||
|
||||
if (nd_table[0].used)
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "hw/irq.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/ssi/ssi.h"
|
||||
#include "hw/sd/sd.h"
|
||||
#include "chardev/char-fe.h"
|
||||
#include "sysemu/blockdev.h"
|
||||
#include "sysemu/qtest.h"
|
||||
|
@ -2136,15 +2137,24 @@ PXA2xxState *pxa270_init(MemoryRegion *address_space,
|
|||
|
||||
s->gpio = pxa2xx_gpio_init(0x40e00000, s->cpu, s->pic, 121);
|
||||
|
||||
dinfo = drive_get(IF_SD, 0, 0);
|
||||
if (!dinfo && !qtest_enabled()) {
|
||||
warn_report("missing SecureDigital device");
|
||||
}
|
||||
s->mmc = pxa2xx_mmci_init(address_space, 0x41100000,
|
||||
dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
|
||||
qdev_get_gpio_in(s->pic, PXA2XX_PIC_MMC),
|
||||
qdev_get_gpio_in(s->dma, PXA2XX_RX_RQ_MMCI),
|
||||
qdev_get_gpio_in(s->dma, PXA2XX_TX_RQ_MMCI));
|
||||
dinfo = drive_get(IF_SD, 0, 0);
|
||||
if (dinfo) {
|
||||
DeviceState *carddev;
|
||||
|
||||
/* Create and plug in the sd card */
|
||||
carddev = qdev_new(TYPE_SD_CARD);
|
||||
qdev_prop_set_drive_err(carddev, "drive",
|
||||
blk_by_legacy_dinfo(dinfo), &error_fatal);
|
||||
qdev_realize_and_unref(carddev, qdev_get_child_bus(DEVICE(s->mmc),
|
||||
"sd-bus"),
|
||||
&error_fatal);
|
||||
} else if (!qtest_enabled()) {
|
||||
warn_report("missing SecureDigital device");
|
||||
}
|
||||
|
||||
for (i = 0; pxa270_serial[i].io_base; i++) {
|
||||
if (serial_hd(i)) {
|
||||
|
@ -2260,15 +2270,24 @@ PXA2xxState *pxa255_init(MemoryRegion *address_space, unsigned int sdram_size)
|
|||
|
||||
s->gpio = pxa2xx_gpio_init(0x40e00000, s->cpu, s->pic, 85);
|
||||
|
||||
dinfo = drive_get(IF_SD, 0, 0);
|
||||
if (!dinfo && !qtest_enabled()) {
|
||||
warn_report("missing SecureDigital device");
|
||||
}
|
||||
s->mmc = pxa2xx_mmci_init(address_space, 0x41100000,
|
||||
dinfo ? blk_by_legacy_dinfo(dinfo) : NULL,
|
||||
qdev_get_gpio_in(s->pic, PXA2XX_PIC_MMC),
|
||||
qdev_get_gpio_in(s->dma, PXA2XX_RX_RQ_MMCI),
|
||||
qdev_get_gpio_in(s->dma, PXA2XX_TX_RQ_MMCI));
|
||||
dinfo = drive_get(IF_SD, 0, 0);
|
||||
if (dinfo) {
|
||||
DeviceState *carddev;
|
||||
|
||||
/* Create and plug in the sd card */
|
||||
carddev = qdev_new(TYPE_SD_CARD);
|
||||
qdev_prop_set_drive_err(carddev, "drive",
|
||||
blk_by_legacy_dinfo(dinfo), &error_fatal);
|
||||
qdev_realize_and_unref(carddev, qdev_get_child_bus(DEVICE(s->mmc),
|
||||
"sd-bus"),
|
||||
&error_fatal);
|
||||
} else if (!qtest_enabled()) {
|
||||
warn_report("missing SecureDigital device");
|
||||
}
|
||||
|
||||
for (i = 0; pxa255_serial[i].io_base; i++) {
|
||||
if (serial_hd(i)) {
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
#include "hw/intc/realview_gic.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/i2c/arm_sbcon_i2c.h"
|
||||
#include "hw/sd/sd.h"
|
||||
|
||||
#define SMP_BOOT_ADDR 0xe0000000
|
||||
#define SMP_BOOTREG_ADDR 0x10000030
|
||||
|
@ -69,6 +70,7 @@ static void realview_init(MachineState *machine,
|
|||
qemu_irq mmc_irq[2];
|
||||
PCIBus *pci_bus = NULL;
|
||||
NICInfo *nd;
|
||||
DriveInfo *dinfo;
|
||||
I2CBus *i2c;
|
||||
int n;
|
||||
unsigned int smp_cpus = machine->smp.cpus;
|
||||
|
@ -234,8 +236,18 @@ static void realview_init(MachineState *machine,
|
|||
mmc_irq[1] = qemu_irq_split(
|
||||
qdev_get_gpio_in(sysctl, ARM_SYSCTL_GPIO_MMC_CARDIN),
|
||||
qemu_irq_invert(qdev_get_gpio_in(gpio2, 0)));
|
||||
qdev_connect_gpio_out(dev, 0, mmc_irq[0]);
|
||||
qdev_connect_gpio_out(dev, 1, mmc_irq[1]);
|
||||
qdev_connect_gpio_out_named(dev, "card-read-only", 0, mmc_irq[0]);
|
||||
qdev_connect_gpio_out_named(dev, "card-inserted", 0, mmc_irq[1]);
|
||||
dinfo = drive_get_next(IF_SD);
|
||||
if (dinfo) {
|
||||
DeviceState *card;
|
||||
|
||||
card = qdev_new(TYPE_SD_CARD);
|
||||
qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo),
|
||||
&error_fatal);
|
||||
qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"),
|
||||
&error_fatal);
|
||||
}
|
||||
|
||||
sysbus_create_simple("pl031", 0x10017000, pic[10]);
|
||||
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include "hw/block/flash.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "hw/char/pl011.h"
|
||||
#include "hw/sd/sd.h"
|
||||
|
||||
#define VERSATILE_FLASH_ADDR 0x34000000
|
||||
#define VERSATILE_FLASH_SIZE (64 * 1024 * 1024)
|
||||
|
@ -309,8 +310,29 @@ static void versatile_init(MachineState *machine, int board_id)
|
|||
/* Wire up the mux control signals from the SYS_CLCD register */
|
||||
qdev_connect_gpio_out(sysctl, 0, qdev_get_gpio_in(dev, 0));
|
||||
|
||||
sysbus_create_varargs("pl181", 0x10005000, sic[22], sic[1], NULL);
|
||||
sysbus_create_varargs("pl181", 0x1000b000, sic[23], sic[2], NULL);
|
||||
dev = sysbus_create_varargs("pl181", 0x10005000, sic[22], sic[1], NULL);
|
||||
dinfo = drive_get_next(IF_SD);
|
||||
if (dinfo) {
|
||||
DeviceState *card;
|
||||
|
||||
card = qdev_new(TYPE_SD_CARD);
|
||||
qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo),
|
||||
&error_fatal);
|
||||
qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"),
|
||||
&error_fatal);
|
||||
}
|
||||
|
||||
dev = sysbus_create_varargs("pl181", 0x1000b000, sic[23], sic[2], NULL);
|
||||
dinfo = drive_get_next(IF_SD);
|
||||
if (dinfo) {
|
||||
DeviceState *card;
|
||||
|
||||
card = qdev_new(TYPE_SD_CARD);
|
||||
qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo),
|
||||
&error_fatal);
|
||||
qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"),
|
||||
&error_fatal);
|
||||
}
|
||||
|
||||
/* Add PL031 Real Time Clock. */
|
||||
sysbus_create_simple("pl031", 0x101e8000, pic[10]);
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#include "hw/cpu/a9mpcore.h"
|
||||
#include "hw/cpu/a15mpcore.h"
|
||||
#include "hw/i2c/arm_sbcon_i2c.h"
|
||||
#include "hw/sd/sd.h"
|
||||
|
||||
#define VEXPRESS_BOARD_ID 0x8e0
|
||||
#define VEXPRESS_FLASH_SIZE (64 * 1024 * 1024)
|
||||
|
@ -624,10 +625,20 @@ static void vexpress_common_init(MachineState *machine)
|
|||
|
||||
dev = sysbus_create_varargs("pl181", map[VE_MMCI], pic[9], pic[10], NULL);
|
||||
/* Wire up MMC card detect and read-only signals */
|
||||
qdev_connect_gpio_out(dev, 0,
|
||||
qdev_connect_gpio_out_named(dev, "card-read-only", 0,
|
||||
qdev_get_gpio_in(sysctl, ARM_SYSCTL_GPIO_MMC_WPROT));
|
||||
qdev_connect_gpio_out(dev, 1,
|
||||
qdev_connect_gpio_out_named(dev, "card-inserted", 0,
|
||||
qdev_get_gpio_in(sysctl, ARM_SYSCTL_GPIO_MMC_CARDIN));
|
||||
dinfo = drive_get_next(IF_SD);
|
||||
if (dinfo) {
|
||||
DeviceState *card;
|
||||
|
||||
card = qdev_new(TYPE_SD_CARD);
|
||||
qdev_prop_set_drive_err(card, "drive", blk_by_legacy_dinfo(dinfo),
|
||||
&error_fatal);
|
||||
qdev_realize_and_unref(card, qdev_get_child_bus(dev, "sd-bus"),
|
||||
&error_fatal);
|
||||
}
|
||||
|
||||
sysbus_create_simple("pl050_keyboard", map[VE_KMI0], pic[12]);
|
||||
sysbus_create_simple("pl050_mouse", map[VE_KMI1], pic[13]);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue