All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Crosthwaite <crosthwaitepeter@gmail.com>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: Kevin O'Connor <kevin@koconnor.net>,
	Peter Crosthwaite <crosthwaite.peter@gmail.com>,
	Markus Armbruster <armbru@redhat.com>,
	patches@linaro.org, qemu-devel@nongnu.org,
	Alistair Francis <alistair.francis@xilinx.com>,
	qemu-arm@nongnu.org, Paolo Bonzini <pbonzini@redhat.com>,
	"Edgar E. Iglesias" <edgar.iglesias@gmail.com>
Subject: Re: [Qemu-devel] [PATCH 08/10] hw/sd/pxa2xx_mmci: Update to use new SDBus APIs
Date: Sat, 19 Dec 2015 13:42:57 -0800	[thread overview]
Message-ID: <20151219214257.GI4164@pcrost-box> (raw)
In-Reply-To: <1449851831-4966-9-git-send-email-peter.maydell@linaro.org>

On Fri, Dec 11, 2015 at 04:37:09PM +0000, Peter Maydell wrote:
> Now the PXA2xx MMCI device is QOMified itself, we can
> update it to use the SDBus APIs to talk to the SD card.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
>  hw/sd/pxa2xx_mmci.c | 80 +++++++++++++++++++++++++++++++++++++++++++----------
>  1 file changed, 66 insertions(+), 14 deletions(-)
> 
> diff --git a/hw/sd/pxa2xx_mmci.c b/hw/sd/pxa2xx_mmci.c
> index b6bb390..a30be2b 100644
> --- a/hw/sd/pxa2xx_mmci.c
> +++ b/hw/sd/pxa2xx_mmci.c
> @@ -16,10 +16,14 @@
>  #include "hw/sd/sd.h"
>  #include "hw/qdev.h"
>  #include "hw/qdev-properties.h"
> +#include "qemu/error-report.h"
>  
>  #define TYPE_PXA2XX_MMCI "pxa2xx-mmci"
>  #define PXA2XX_MMCI(obj) OBJECT_CHECK(PXA2xxMMCIState, (obj), TYPE_PXA2XX_MMCI)
>  
> +#define TYPE_PXA2XX_MMCI_BUS "pxa2xx-mmci-bus"
> +#define PXA2XX_MMCI_BUS(obj) OBJECT_CHECK(SDBus, (obj), TYPE_PXA2XX_MMCI_BUS)
> +
>  typedef struct PXA2xxMMCIState {
>      SysBusDevice parent_obj;
>  
> @@ -27,9 +31,11 @@ typedef struct PXA2xxMMCIState {
>      qemu_irq irq;
>      qemu_irq rx_dma;
>      qemu_irq tx_dma;
> +    qemu_irq inserted;
> +    qemu_irq readonly;
>  
>      BlockBackend *blk;
> -    SDState *card;
> +    SDBus sdbus;
>  
>      uint32_t status;
>      uint32_t clkrt;
> @@ -129,7 +135,7 @@ static void pxa2xx_mmci_fifo_update(PXA2xxMMCIState *s)
>  
>      if (s->cmdat & CMDAT_WR_RD) {
>          while (s->bytesleft && s->tx_len) {
> -            sd_write_data(s->card, s->tx_fifo[s->tx_start ++]);
> +            sdbus_write_data(&s->sdbus, s->tx_fifo[s->tx_start++]);
>              s->tx_start &= 0x1f;
>              s->tx_len --;
>              s->bytesleft --;
> @@ -139,7 +145,7 @@ static void pxa2xx_mmci_fifo_update(PXA2xxMMCIState *s)
>      } else
>          while (s->bytesleft && s->rx_len < 32) {
>              s->rx_fifo[(s->rx_start + (s->rx_len ++)) & 0x1f] =
> -                sd_read_data(s->card);
> +                sdbus_read_data(&s->sdbus);
>              s->bytesleft --;
>              s->intreq |= INT_RXFIFO_REQ;
>          }
> @@ -173,7 +179,7 @@ static void pxa2xx_mmci_wakequeues(PXA2xxMMCIState *s)
>      request.arg = s->arg;
>      request.crc = 0;	/* FIXME */
>  
> -    rsplen = sd_do_command(s->card, &request, response);
> +    rsplen = sdbus_do_command(&s->sdbus, &request, response);
>      s->intreq |= INT_END_CMD;
>  
>      memset(s->resp_fifo, 0, sizeof(s->resp_fifo));
> @@ -482,32 +488,59 @@ PXA2xxMMCIState *pxa2xx_mmci_init(MemoryRegion *sysmem,
>                  BlockBackend *blk, qemu_irq irq,
>                  qemu_irq rx_dma, qemu_irq tx_dma)
>  {
> -    DeviceState *dev;
> +    DeviceState *dev, *carddev;
>      SysBusDevice *sbd;
>      PXA2xxMMCIState *s;
> +    Error *err = NULL;
>  
>      dev = qdev_create(NULL, TYPE_PXA2XX_MMCI);
>      s = PXA2XX_MMCI(dev);
> -    /* Reach into the device and initialize the SD card. This is
> -     * unclean but will vanish when we update to SDBus APIs.
> -     */
> -    s->card = sd_init(s->blk, false);
> -    if (s->card == NULL) {
> -        exit(1);
> -    }
> -    qdev_init_nofail(dev);
>      sbd = SYS_BUS_DEVICE(dev);
>      sysbus_mmio_map(sbd, 0, base);
>      sysbus_connect_irq(sbd, 0, irq);
>      sysbus_connect_irq(sbd, 1, rx_dma);
>      sysbus_connect_irq(sbd, 2, tx_dma);
> +
> +    /* Create and plug in the sd card */
> +    carddev = qdev_create(qdev_get_child_bus(dev, "sd-bus"), TYPE_SD);
> +    qdev_prop_set_drive(carddev, "drive", blk, &err);
> +    if (err) {
> +        error_report("failed to init SD card: %s", error_get_pretty(err));
> +        return NULL;
> +    }
> +    object_property_set_bool(OBJECT(carddev), true, "realized", &err);
> +    if (err) {
> +        error_report("failed to init SD card: %s", error_get_pretty(err));
> +        return NULL;
> +    }
> +
>      return s;
>  }
>  
> +static void pxa2xx_mmci_set_inserted(DeviceState *dev, bool inserted)
> +{
> +    PXA2xxMMCIState *s = PXA2XX_MMCI(dev);
> +
> +    qemu_set_irq(s->inserted, inserted);
> +}
> +
> +static void pxa2xx_mmci_set_readonly(DeviceState *dev, bool readonly)
> +{
> +    PXA2xxMMCIState *s = PXA2XX_MMCI(dev);
> +
> +    qemu_set_irq(s->readonly, readonly);
> +}
> +
>  void pxa2xx_mmci_handlers(PXA2xxMMCIState *s, qemu_irq readonly,
>                            qemu_irq coverswitch)
>  {
> -    sd_set_cb(s->card, readonly, coverswitch);
> +    DeviceState *dev = DEVICE(s);
> +
> +    s->readonly = readonly;
> +    s->inserted = coverswitch;
> +
> +    pxa2xx_mmci_set_inserted(dev, sdbus_get_inserted(&s->sdbus));
> +    pxa2xx_mmci_set_readonly(dev, sdbus_get_readonly(&s->sdbus));

Looking at the machine models, _mmci_handlers is only called at
machine init time. So this should not be needed. devices should be
triggering an initial call of _set_readonly that reliably propagates
back up.

If we do need these two lines they should be in the reset handler.

Regards,
Peter

>  }
>  
>  static void pxa2xx_mmci_instance_init(Object *obj)
> @@ -524,6 +557,17 @@ static void pxa2xx_mmci_instance_init(Object *obj)
>  
>      register_savevm(NULL, "pxa2xx_mmci", 0, 0,
>                      pxa2xx_mmci_save, pxa2xx_mmci_load, s);
> +
> +    qbus_create_inplace(&s->sdbus, sizeof(s->sdbus),
> +                        TYPE_PXA2XX_MMCI_BUS, DEVICE(obj), "sd-bus");
> +}
> +
> +static void pxa2xx_mmci_bus_class_init(ObjectClass *klass, void *data)
> +{
> +    SDBusClass *sbc = SD_BUS_CLASS(klass);
> +
> +    sbc->set_inserted = pxa2xx_mmci_set_inserted;
> +    sbc->set_readonly = pxa2xx_mmci_set_readonly;
>  }
>  
>  static const TypeInfo pxa2xx_mmci_info = {
> @@ -533,9 +577,17 @@ static const TypeInfo pxa2xx_mmci_info = {
>      .instance_init = pxa2xx_mmci_instance_init,
>  };
>  
> +static const TypeInfo pxa2xx_mmci_bus_info = {
> +    .name = TYPE_PXA2XX_MMCI_BUS,
> +    .parent = TYPE_SD_BUS,
> +    .instance_size = sizeof(SDBus),
> +    .class_init = pxa2xx_mmci_bus_class_init,
> +};
> +
>  static void pxa2xx_mmci_register_types(void)
>  {
>      type_register_static(&pxa2xx_mmci_info);
> +    type_register_static(&pxa2xx_mmci_bus_info);
>  }
>  
>  type_init(pxa2xx_mmci_register_types)
> -- 
> 1.9.1
> 

  reply	other threads:[~2015-12-19 21:43 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-11 16:37 [Qemu-devel] [PATCH 00/10] hw/sd: QOMify sd.c (and pxa2xx_mmci) Peter Maydell
2015-12-11 16:37 ` [Qemu-devel] [PATCH 01/10] hw/sd/sdhci.c: Remove x-drive property Peter Maydell
2015-12-17 19:28   ` Alistair Francis
2015-12-19 21:33   ` Peter Crosthwaite
2015-12-11 16:37 ` [Qemu-devel] [PATCH 02/10] hw/sd/sd.c: QOMify Peter Maydell
2015-12-17 21:45   ` Alistair Francis
2015-12-17 22:11     ` Peter Maydell
2015-12-18  0:20       ` Alistair Francis
2015-12-19 21:36   ` Peter Crosthwaite
2015-12-20 17:07     ` Peter Maydell
2015-12-20 18:25       ` Peter Crosthwaite
2015-12-11 16:37 ` [Qemu-devel] [PATCH 03/10] hw/sd/sd.c: Convert sd_reset() function into Device reset method Peter Maydell
2015-12-17 23:51   ` Alistair Francis
2015-12-19 21:37   ` Peter Crosthwaite
2015-12-11 16:37 ` [Qemu-devel] [PATCH 04/10] hw/sd: Add QOM bus which SD cards plug in to Peter Maydell
2015-12-19 21:38   ` Peter Crosthwaite
2015-12-20 17:10     ` Peter Maydell
2015-12-20 20:51       ` Peter Crosthwaite
2015-12-20 23:18         ` Peter Maydell
2015-12-21  0:15           ` Peter Crosthwaite
2016-01-07 18:09         ` Peter Maydell
2016-01-08 14:51           ` Peter Crosthwaite
2015-12-11 16:37 ` [Qemu-devel] [PATCH 05/10] hw/sd/sdhci.c: Update to use SDBus APIs Peter Maydell
2015-12-11 19:01   ` Kevin O'Connor
2015-12-11 23:08     ` Peter Maydell
2015-12-19 21:39   ` Peter Crosthwaite
2015-12-20 17:10     ` Peter Maydell
2015-12-11 16:37 ` [Qemu-devel] [PATCH 06/10] sdhci_sysbus: Create SD card device in users, not the device itself Peter Maydell
2015-12-18  0:18   ` Alistair Francis
2015-12-18  9:00     ` Peter Maydell
2015-12-19 21:40     ` Peter Crosthwaite
2015-12-11 16:37 ` [Qemu-devel] [PATCH 07/10] hw/sd/pxa2xx_mmci: convert to SysBusDevice object Peter Maydell
2015-12-19 21:41   ` Peter Crosthwaite
2015-12-11 16:37 ` [Qemu-devel] [PATCH 08/10] hw/sd/pxa2xx_mmci: Update to use new SDBus APIs Peter Maydell
2015-12-19 21:42   ` Peter Crosthwaite [this message]
2015-12-20 17:14     ` Peter Maydell
2015-12-11 16:37 ` [Qemu-devel] [PATCH 09/10] hw/sd/pxa2xx_mmci: Convert to VMStateDescription Peter Maydell
2015-12-19 21:45   ` Peter Crosthwaite
2015-12-20 17:17     ` Peter Maydell
2015-12-11 16:37 ` [Qemu-devel] [PATCH 10/10] hw/sd/pxa2xx_mmci: Add reset function Peter Maydell
2015-12-19 21:45   ` Peter Crosthwaite
2015-12-17  1:25 ` [Qemu-devel] [PATCH 00/10] hw/sd: QOMify sd.c (and pxa2xx_mmci) Alistair Francis

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151219214257.GI4164@pcrost-box \
    --to=crosthwaitepeter@gmail.com \
    --cc=alistair.francis@xilinx.com \
    --cc=armbru@redhat.com \
    --cc=crosthwaite.peter@gmail.com \
    --cc=edgar.iglesias@gmail.com \
    --cc=kevin@koconnor.net \
    --cc=patches@linaro.org \
    --cc=pbonzini@redhat.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-arm@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.