All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi
@ 2015-12-21 22:47 Andrew Baumann
  2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 1/3] sd: sdhci: Delete over-zealous power check Andrew Baumann
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Andrew Baumann @ 2015-12-21 22:47 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Igor Mitsyanko, Andrew Baumann, Sai Pavan Boddu,
	Peter Crosthwaite, Stefan Hajnoczi

This is a series of three tweaks needed to enable the generic sdhci
controller to emulate Raspberry Pi (bcm2835/2836), and boot Linux and
Windows.

There was some discussion of these changes in the following thread:
https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg01401.html

v2 is functionally equivalent to v1; the only changes are to commit
messages and review metadata. v3 fixes two bugs in patch 3/3 (details
there).

Cheers,
Andrew

Andrew Baumann (2):
  sdhci: don't raise a command index error for an unexpected response
  sdhci: add optional quirk property to disable card insertion/removal
    interrupts

Peter Crosthwaite (1):
  sd: sdhci: Delete over-zealous power check

 hw/sd/sdhci.c         | 10 +++++-----
 include/hw/sd/sdhci.h |  1 +
 2 files changed, 6 insertions(+), 5 deletions(-)

-- 
2.5.3

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH v3 1/3] sd: sdhci: Delete over-zealous power check
  2015-12-21 22:47 [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Andrew Baumann
@ 2015-12-21 22:47 ` Andrew Baumann
  2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 2/3] sdhci: don't raise a command index error for an unexpected response Andrew Baumann
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Andrew Baumann @ 2015-12-21 22:47 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Peter Crosthwaite, Igor Mitsyanko, Andrew Baumann,
	Sai Pavan Boddu, Peter Crosthwaite, Stefan Hajnoczi

From: Peter Crosthwaite <crosthwaitepeter@gmail.com>

This check was conditionalising SD card operation on the card being
powered by the SDHCI host controller. It is however possible
(particularly in embedded systems) for the power control of the SD card
to be managed outside of SDHCI. This can be as trivial as hard-wiring
the SD slot VCC to a constant power-rail.

This means the guest SDHCI can validly opt-out of the SDHCI power
control feature while still using the card. So delete this check to
allow operation of the card with SDHCI power control.

This is needed for at least Xilinx Zynq and Raspberry Pi, and
also makes Freescale i.MX25 work for me. The digilent Zybo board
has a public schematic which shows SD VCC hardwiring:

http://digilentinc.com/Data/Products/ZYBO/ZYBO_sch_VB.3.pdf
bottom of page 3.

Signed-off-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
Reviewed-by: Sai Pavan Boddu <saipava@xilinx.com>
[AB: Add Pi to list of devices fixed in commit message]
Signed-off-by: Andrew Baumann <Andrew.Baumann@microsoft.com>
---
 hw/sd/sdhci.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index 8612760..bc39d48 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -831,7 +831,7 @@ static void sdhci_data_transfer(void *opaque)
 
 static bool sdhci_can_issue_command(SDHCIState *s)
 {
-    if (!SDHC_CLOCK_IS_ON(s->clkcon) || !(s->pwrcon & SDHC_POWER_ON) ||
+    if (!SDHC_CLOCK_IS_ON(s->clkcon) ||
         (((s->prnsts & SDHC_DATA_INHIBIT) || s->stopped_state) &&
         ((s->cmdreg & SDHC_CMD_DATA_PRESENT) ||
         ((s->cmdreg & SDHC_CMD_RESPONSE) == SDHC_CMD_RSP_WITH_BUSY &&
-- 
2.5.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH v3 2/3] sdhci: don't raise a command index error for an unexpected response
  2015-12-21 22:47 [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Andrew Baumann
  2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 1/3] sd: sdhci: Delete over-zealous power check Andrew Baumann
@ 2015-12-21 22:47 ` Andrew Baumann
  2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 3/3] sdhci: add optional quirk property to disable card insertion/removal interrupts Andrew Baumann
  2015-12-22  8:03 ` [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Stefan Hajnoczi
  3 siblings, 0 replies; 6+ messages in thread
From: Andrew Baumann @ 2015-12-21 22:47 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Igor Mitsyanko, Andrew Baumann, Sai Pavan Boddu,
	Peter Crosthwaite, Stefan Hajnoczi

This deletes a block of code that raised a command index error if a
command returned response data, but the guest did not set the
appropriate bits in the response register to handle such a response. I
cannot find any documentation that suggests the controller should
behave in this way, the error code doesn't make sense (command index
error is defined for the case where the index in a response does not
match that of the issued command), and in at least one case (CMD23
issued by UEFI on Raspberry Pi 2), actual hardware does not do this.

Signed-off-by: Andrew Baumann <Andrew.Baumann@microsoft.com>
Reviewed-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
---
 hw/sd/sdhci.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index bc39d48..dd83e89 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -243,9 +243,6 @@ static void sdhci_send_command(SDHCIState *s)
             (s->cmdreg & SDHC_CMD_RESPONSE) == SDHC_CMD_RSP_WITH_BUSY) {
             s->norintsts |= SDHC_NIS_TRSCMP;
         }
-    } else if (rlen != 0 && (s->errintstsen & SDHC_EISEN_CMDIDX)) {
-        s->errintsts |= SDHC_EIS_CMDIDX;
-        s->norintsts |= SDHC_NIS_ERR;
     }
 
     if (s->norintstsen & SDHC_NISEN_CMDCMP) {
-- 
2.5.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PATCH v3 3/3] sdhci: add optional quirk property to disable card insertion/removal interrupts
  2015-12-21 22:47 [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Andrew Baumann
  2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 1/3] sd: sdhci: Delete over-zealous power check Andrew Baumann
  2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 2/3] sdhci: don't raise a command index error for an unexpected response Andrew Baumann
@ 2015-12-21 22:47 ` Andrew Baumann
  2015-12-22  8:03 ` [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Stefan Hajnoczi
  3 siblings, 0 replies; 6+ messages in thread
From: Andrew Baumann @ 2015-12-21 22:47 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Igor Mitsyanko, Andrew Baumann, Sai Pavan Boddu,
	Peter Crosthwaite, Stefan Hajnoczi

This is needed for a quirk of the Raspberry Pi (bcm2835/6) MMC
controller, where the card insert bit is documented as unimplemented
(always reads zero, doesn't generate interrupts) but is in fact
observed on hardware as set at power on, but is cleared (and remains
clear) on subsequent controller resets.

Signed-off-by: Andrew Baumann <Andrew.Baumann@microsoft.com>
Reviewed-by: Peter Crosthwaite <crosthwaite.peter@gmail.com>
---

Notes:
    v3: add missing field in header, drop needless change to vmstate

 hw/sd/sdhci.c         | 5 ++++-
 include/hw/sd/sdhci.h | 1 +
 2 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
index dd83e89..7acb4d7 100644
--- a/hw/sd/sdhci.c
+++ b/hw/sd/sdhci.c
@@ -193,7 +193,9 @@ static void sdhci_reset(SDHCIState *s)
      * initialization */
     memset(&s->sdmasysad, 0, (uintptr_t)&s->capareg - (uintptr_t)&s->sdmasysad);
 
-    sd_set_cb(s->card, s->ro_cb, s->eject_cb);
+    if (!s->noeject_quirk) {
+        sd_set_cb(s->card, s->ro_cb, s->eject_cb);
+    }
     s->data_count = 0;
     s->stopped_state = sdhc_not_stopped;
 }
@@ -1276,6 +1278,7 @@ static Property sdhci_sysbus_properties[] = {
     DEFINE_PROP_UINT32("capareg", SDHCIState, capareg,
             SDHC_CAPAB_REG_DEFAULT),
     DEFINE_PROP_UINT32("maxcurr", SDHCIState, maxcurr, 0),
+    DEFINE_PROP_BOOL("noeject-quirk", SDHCIState, noeject_quirk, false),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/include/hw/sd/sdhci.h b/include/hw/sd/sdhci.h
index e78d938..ffd1f80 100644
--- a/include/hw/sd/sdhci.h
+++ b/include/hw/sd/sdhci.h
@@ -77,6 +77,7 @@ typedef struct SDHCIState {
     uint32_t buf_maxsz;
     uint16_t data_count;   /* current element in FIFO buffer */
     uint8_t  stopped_state;/* Current SDHC state */
+    bool     noeject_quirk;/* Quirk to disable card insert/remove interrupts */
     /* Buffer Data Port Register - virtual access point to R and W buffers */
     /* Software Reset Register - always reads as 0 */
     /* Force Event Auto CMD12 Error Interrupt Reg - write only */
-- 
2.5.3

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi
  2015-12-21 22:47 [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Andrew Baumann
                   ` (2 preceding siblings ...)
  2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 3/3] sdhci: add optional quirk property to disable card insertion/removal interrupts Andrew Baumann
@ 2015-12-22  8:03 ` Stefan Hajnoczi
  2015-12-31 21:05   ` Andrew Baumann
  3 siblings, 1 reply; 6+ messages in thread
From: Stefan Hajnoczi @ 2015-12-22  8:03 UTC (permalink / raw)
  To: Andrew Baumann
  Cc: Peter Maydell, Igor Mitsyanko, qemu-devel, Sai Pavan Boddu,
	Peter Crosthwaite, Stefan Hajnoczi

[-- Attachment #1: Type: text/plain, Size: 1259 bytes --]

On Mon, Dec 21, 2015 at 02:47:46PM -0800, Andrew Baumann wrote:
> This is a series of three tweaks needed to enable the generic sdhci
> controller to emulate Raspberry Pi (bcm2835/2836), and boot Linux and
> Windows.
> 
> There was some discussion of these changes in the following thread:
> https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg01401.html
> 
> v2 is functionally equivalent to v1; the only changes are to commit
> messages and review metadata. v3 fixes two bugs in patch 3/3 (details
> there).
> 
> Cheers,
> Andrew
> 
> Andrew Baumann (2):
>   sdhci: don't raise a command index error for an unexpected response
>   sdhci: add optional quirk property to disable card insertion/removal
>     interrupts
> 
> Peter Crosthwaite (1):
>   sd: sdhci: Delete over-zealous power check
> 
>  hw/sd/sdhci.c         | 10 +++++-----
>  include/hw/sd/sdhci.h |  1 +
>  2 files changed, 6 insertions(+), 5 deletions(-)
> 
> -- 
> 2.5.3

I have merged SD Card patches in the past and this looks reasonable.  My
SD Card knowledge is zero, however.  You have Reviewed-by from Peter
Crosthwaithe so let's merge this.

Thanks, applied to my block-next tree:
https://github.com/stefanha/qemu/commits/block-next

Stefan

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 473 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi
  2015-12-22  8:03 ` [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Stefan Hajnoczi
@ 2015-12-31 21:05   ` Andrew Baumann
  0 siblings, 0 replies; 6+ messages in thread
From: Andrew Baumann @ 2015-12-31 21:05 UTC (permalink / raw)
  To: Stefan Hajnoczi, Peter Crosthwaite
  Cc: Igor Mitsyanko, Peter Maydell, Sai Pavan Boddu, qemu-devel

> From: Stefan Hajnoczi [mailto:stefanha@gmail.com]
> Sent: Tuesday, 22 December 2015 00:04
> On Mon, Dec 21, 2015 at 02:47:46PM -0800, Andrew Baumann wrote:
> > This is a series of three tweaks needed to enable the generic sdhci
> > controller to emulate Raspberry Pi (bcm2835/2836), and boot Linux and
> > Windows.
> >
> > There was some discussion of these changes in the following thread:
> > https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg01401.html
> >
> > v2 is functionally equivalent to v1; the only changes are to commit
> > messages and review metadata. v3 fixes two bugs in patch 3/3 (details
> > there).
> >
> > Cheers,
> > Andrew
> >
> > Andrew Baumann (2):
> >   sdhci: don't raise a command index error for an unexpected response
> >   sdhci: add optional quirk property to disable card insertion/removal
> >     interrupts
> >
> > Peter Crosthwaite (1):
> >   sd: sdhci: Delete over-zealous power check
> >
> >  hw/sd/sdhci.c         | 10 +++++-----
> >  include/hw/sd/sdhci.h |  1 +
> >  2 files changed, 6 insertions(+), 5 deletions(-)
> >
> > --
> > 2.5.3
> 
> I have merged SD Card patches in the past and this looks reasonable.  My
> SD Card knowledge is zero, however.  You have Reviewed-by from Peter
> Crosthwaithe so let's merge this.
> 
> Thanks, applied to my block-next tree:
> https://github.com/stefanha/qemu/commits/block-next

Thanks. Unfortunately I screwed up testing patch 3/3 (the sdhci noeject quirk, committed as 723697551a7e9), and it doesn't work as intended -- in fact, it serves no useful purpose in its present form. I'll send a new series shortly to back it out and replace it with a pi-specific quirk. 

(The other two patches from this series are still good, BTW.)

Andrew

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2015-12-31 21:05 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-12-21 22:47 [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Andrew Baumann
2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 1/3] sd: sdhci: Delete over-zealous power check Andrew Baumann
2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 2/3] sdhci: don't raise a command index error for an unexpected response Andrew Baumann
2015-12-21 22:47 ` [Qemu-devel] [PATCH v3 3/3] sdhci: add optional quirk property to disable card insertion/removal interrupts Andrew Baumann
2015-12-22  8:03 ` [Qemu-devel] [PATCH v3 0/3] sdhci patches to enable Raspberry Pi Stefan Hajnoczi
2015-12-31 21:05   ` Andrew Baumann

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.