[haiku-commits] haiku: hrev51534 - src/add-ons/kernel/busses/usb

  • From: jerome.duval@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Wed, 8 Nov 2017 19:37:04 +0100 (CET)

hrev51534 adds 1 changeset to branch 'master'
old head: 5ed6ef8e18df700101160a4fd5da7edb73408411
new head: e3441678243c79b7816142eeae3e4456c29c278b
overview: 
http://cgit.haiku-os.org/haiku/log/?qt=range&q=e3441678243c+%5E5ed6ef8e18df

----------------------------------------------------------------------------

e3441678243c: xhci: the command ring must be stopped when setting its address.
  
  * send stop and cancel commands.
  
  Signed-off-by: Jérôme Duval <jerome.duval@xxxxxxxxx>

                                         [ Greg Crain <gcrain70@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev51534
Commit:      e3441678243c79b7816142eeae3e4456c29c278b
URL:         http://cgit.haiku-os.org/haiku/commit/?id=e3441678243c
Author:      Greg Crain <gcrain70@xxxxxxxxx>
Date:        Wed Nov  8 17:58:44 2017 UTC
Committer:   Jérôme Duval <jerome.duval@xxxxxxxxx>
Commit-Date: Wed Nov  8 18:02:33 2017 UTC

----------------------------------------------------------------------------

2 files changed, 16 insertions(+)
src/add-ons/kernel/busses/usb/xhci.cpp        | 13 +++++++++++++
src/add-ons/kernel/busses/usb/xhci_hardware.h |  3 +++

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/busses/usb/xhci.cpp 
b/src/add-ons/kernel/busses/usb/xhci.cpp
index 44f0e10..5babbd1 100644
--- a/src/add-ons/kernel/busses/usb/xhci.cpp
+++ b/src/add-ons/kernel/busses/usb/xhci.cpp
@@ -516,6 +516,19 @@ XHCI::Start()
 
        dmaAddress += sizeof(xhci_erst_element) + XHCI_MAX_EVENTS
                * sizeof(xhci_trb);
+
+       // Make sure the Command Ring is stopped
+       if ((ReadOpReg(XHCI_CRCR_LO) & CRCR_CRR) != 0) {
+               TRACE_ALWAYS("Command Ring is running, send stop/cancel\n");
+               WriteOpReg(XHCI_CRCR_LO, CRCR_CS);
+               WriteOpReg(XHCI_CRCR_HI, 0);
+               WriteOpReg(XHCI_CRCR_LO, CRCR_CA);
+               WriteOpReg(XHCI_CRCR_HI, 0);
+               snooze(1000);
+               if ((ReadOpReg(XHCI_CRCR_LO) & CRCR_CRR) != 0) {
+                       TRACE_ERROR("Command Ring still running after 
stop/cancel\n");
+               }
+       }
        TRACE("setting CRCR addr = 0x%" B_PRIxPHYSADDR "\n", dmaAddress);
        WriteOpReg(XHCI_CRCR_LO, (uint32)dmaAddress | CRCR_RCS);
        WriteOpReg(XHCI_CRCR_HI, /*(uint32)(dmaAddress >> 32)*/0);
diff --git a/src/add-ons/kernel/busses/usb/xhci_hardware.h 
b/src/add-ons/kernel/busses/usb/xhci_hardware.h
index a9619d9..b10240f 100644
--- a/src/add-ons/kernel/busses/usb/xhci_hardware.h
+++ b/src/add-ons/kernel/busses/usb/xhci_hardware.h
@@ -91,6 +91,9 @@
 #define XHCI_CRCR_LO           0x18
 #define XHCI_CRCR_HI           0x1C
 #define CRCR_RCS                       (1<<0)
+#define CRCR_CS                                (1<<1)
+#define CRCR_CA                                (1<<2)
+#define CRCR_CRR                       (1<<3)
 // Section 5.4.6
 #define XHCI_DCBAAP_LO         0x30
 #define XHCI_DCBAAP_HI         0x34


Other related posts:

  • » [haiku-commits] haiku: hrev51534 - src/add-ons/kernel/busses/usb - jerome . duval