Re: [edk2] [PATCH] SourceLevelDebugPkg DebugCommUsb3: Return error when debug cap is reset

2018-03-19 Thread Wu, Hao A
Reviewed-by: Hao Wu 

Best Regards,
Hao Wu


> -Original Message-
> From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Star
> Zeng
> Sent: Monday, March 19, 2018 8:46 PM
> To: edk2-devel@lists.01.org
> Cc: Ni, Ruiyu; Wu, Hao A; Zeng, Star
> Subject: [edk2] [PATCH] SourceLevelDebugPkg DebugCommUsb3: Return error
> when debug cap is reset
> 
> When source level debug is enabled, but debug cable is not connected,
> XhcResetHC() in XhciReg.c will reset the host controller, the debug
> capability registers will be also reset. After the code in
> InitializeUsbDebugHardware() sets DCE bit and LSE bit to "1" in DCCTRL,
> there will be DMA on 0 (the value of some debug capability registers
> for data transfer is 0) address buffer, fault info like below will
> appear when IOMMU based on VTd is enabled.
> 
>   VER_REG - 0x0010
>   CAP_REG - 0x00D2008C40660462
>   ECAP_REG- 0x00F050DA
>   GSTS_REG- 0xC000
>   RTADDR_REG  - 0x86512000
>   CCMD_REG- 0x2800
>   FSTS_REG- 0x0002
>   FECTL_REG   - 0xC000
>   FEDATA_REG  - 0x
>   FEADDR_REG  - 0x
>   FEUADDR_REG - 0x
>   FRCD_REG[0] - 0xC00600A0 
> Fault Info - 0x
> Source - B00 D14 F00
> Type - 1 (read)
> Reason - 6
>   IVA_REG - 0x
>   IOTLB_REG   - 0x1200
> 
> This patch is to return error for the case.
> 
> Cc: Ruiyu Ni 
> Cc: Hao Wu 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Star Zeng 
> ---
>  .../DebugCommunicationLibUsb3/DebugCommunicationLibUsb3Common.c   |
> 8 
>  1 file changed, 8 insertions(+)
> 
> diff --git
> a/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommun
> icationLibUsb3Common.c
> b/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommun
> icationLibUsb3Common.c
> index fb9ca84fc7bc..86ecc2f9dbc7 100644
> ---
> a/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommun
> icationLibUsb3Common.c
> +++
> b/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommun
> icationLibUsb3Common.c
> @@ -673,11 +673,19 @@ InitializeUsbDebugHardware (
>UINTN   Index;
>UINT8   TotalUsb3Port;
>EFI_PHYSICAL_ADDRESSXhciOpRegister;
> +  UINT32  Dcddi1;
> 
>XhciOpRegister = Handle->XhciOpRegister;
>TotalUsb3Port = MmioRead32 (((UINTN) Handle->XhciMmioBase +
> XHC_HCSPARAMS1_OFFSET)) >> 24;
> 
>if (Handle->Initialized == USB3DBG_NOT_ENABLED) {
> +Dcddi1 = XhcReadDebugReg (Handle,XHC_DC_DCDDI1);
> +if (Dcddi1 != (UINT32)((XHCI_DEBUG_DEVICE_VENDOR_ID << 16) |
> XHCI_DEBUG_DEVICE_PROTOCOL)) {
> +  //
> +  // The debug capability has been reset by other code, return device 
> error.
> +  //
> +  return EFI_DEVICE_ERROR;
> +}
>  //
>  // If XHCI supports debug capability, hardware resource has been 
> allocated,
>  // but it has not been enabled, try to enable again.
> --
> 2.7.0.windows.1
> 
> ___
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel
___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel


[edk2] [PATCH] SourceLevelDebugPkg DebugCommUsb3: Return error when debug cap is reset

2018-03-19 Thread Star Zeng
When source level debug is enabled, but debug cable is not connected,
XhcResetHC() in XhciReg.c will reset the host controller, the debug
capability registers will be also reset. After the code in
InitializeUsbDebugHardware() sets DCE bit and LSE bit to "1" in DCCTRL,
there will be DMA on 0 (the value of some debug capability registers
for data transfer is 0) address buffer, fault info like below will
appear when IOMMU based on VTd is enabled.

  VER_REG - 0x0010
  CAP_REG - 0x00D2008C40660462
  ECAP_REG- 0x00F050DA
  GSTS_REG- 0xC000
  RTADDR_REG  - 0x86512000
  CCMD_REG- 0x2800
  FSTS_REG- 0x0002
  FECTL_REG   - 0xC000
  FEDATA_REG  - 0x
  FEADDR_REG  - 0x
  FEUADDR_REG - 0x
  FRCD_REG[0] - 0xC00600A0 
Fault Info - 0x
Source - B00 D14 F00
Type - 1 (read)
Reason - 6
  IVA_REG - 0x
  IOTLB_REG   - 0x1200

This patch is to return error for the case.

Cc: Ruiyu Ni 
Cc: Hao Wu 
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Star Zeng 
---
 .../DebugCommunicationLibUsb3/DebugCommunicationLibUsb3Common.c   | 8 
 1 file changed, 8 insertions(+)

diff --git 
a/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommunicationLibUsb3Common.c
 
b/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommunicationLibUsb3Common.c
index fb9ca84fc7bc..86ecc2f9dbc7 100644
--- 
a/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommunicationLibUsb3Common.c
+++ 
b/SourceLevelDebugPkg/Library/DebugCommunicationLibUsb3/DebugCommunicationLibUsb3Common.c
@@ -673,11 +673,19 @@ InitializeUsbDebugHardware (
   UINTN   Index;
   UINT8   TotalUsb3Port;
   EFI_PHYSICAL_ADDRESSXhciOpRegister;
+  UINT32  Dcddi1;
 
   XhciOpRegister = Handle->XhciOpRegister;
   TotalUsb3Port = MmioRead32 (((UINTN) Handle->XhciMmioBase + 
XHC_HCSPARAMS1_OFFSET)) >> 24;
 
   if (Handle->Initialized == USB3DBG_NOT_ENABLED) {
+Dcddi1 = XhcReadDebugReg (Handle,XHC_DC_DCDDI1);
+if (Dcddi1 != (UINT32)((XHCI_DEBUG_DEVICE_VENDOR_ID << 16) | 
XHCI_DEBUG_DEVICE_PROTOCOL)) {
+  //
+  // The debug capability has been reset by other code, return device 
error.
+  //
+  return EFI_DEVICE_ERROR;
+}
 //
 // If XHCI supports debug capability, hardware resource has been 
allocated, 
 // but it has not been enabled, try to enable again.
-- 
2.7.0.windows.1

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel