[edk2-devel] [PATCH edk2-platforms V2 0/2] Add USB driver support

Meenakshi Aggarwal posted 2 patches 3 years, 10 months ago
Failed in applying to current master (apply log)
There is a newer version of this series
Silicon/NXP/NxpQoriqLs.dec                   |   5 +
Silicon/NXP/LX2160A/LX2160A.dsc.inc          |   4 +
Silicon/NXP/NxpQoriqLs.dsc.inc               |  12 +
Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc |   1 +
Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf |  18 +-
Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf |  45 ++++
Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h   | 138 ++++++++++
Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c   | 281 ++++++++++++++++++++
8 files changed, 501 insertions(+), 3 deletions(-)
create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h
create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c
[edk2-devel] [PATCH edk2-platforms V2 0/2] Add USB driver support
Posted by Meenakshi Aggarwal 3 years, 10 months ago
This patchset implement USB driver for DWC3 controller and enable
USB for LX2160A Platform.

Changes in v2:
	- Indentation changes
	- Incorporated review comments
	- create EndOfDxe event and initialize USB in EndOfDxe
	  callback function.

Meenakshi Aggarwal (2):
  Silicon/NXP: Add DWC3 USB controller initialization driver
  Platform/NXP:LX2160: Enable support of USB controller

 Silicon/NXP/NxpQoriqLs.dec                   |   5 +
 Silicon/NXP/LX2160A/LX2160A.dsc.inc          |   4 +
 Silicon/NXP/NxpQoriqLs.dsc.inc               |  12 +
 Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc |   1 +
 Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf |  18 +-
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf |  45 ++++
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h   | 138 ++++++++++
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c   | 281 ++++++++++++++++++++
 8 files changed, 501 insertions(+), 3 deletions(-)
 create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
 create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h
 create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c

-- 
1.9.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#60655): https://edk2.groups.io/g/devel/message/60655
Mute This Topic: https://groups.io/mt/74646952/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

[edk2-devel] [edk2-platforms] [PATCH v3 0/2] Add USB driver support
Posted by Meenakshi Aggarwal 3 years, 9 months ago
This patchset implement USB driver for DWC3 controller and enable
USB for LX2160A Platform.

Changes in v2:
	- Indentation changes
	- Incorporated review comments
	- create EndOfDxe event and initialize USB in EndOfDxe
	  callback function.

Changes in v3:
	- Passing Usb initialization function as init function
	  of RegisterNonDiscoverableMmioDevice()

Meenakshi Aggarwal (2):
  Silicon/NXP: Add DWC3 USB controller initialization driver
  Platform/NXP:LX2160: Enable support of USB controller

 Silicon/NXP/NxpQoriqLs.dec                   |   5 +
 Silicon/NXP/LX2160A/LX2160A.dsc.inc          |   4 +
 Silicon/NXP/NxpQoriqLs.dsc.inc               |  12 +
 Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc |   1 +
 Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf |  18 +-
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf |  45 ++++
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h   | 138 ++++++++++
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c   | 275 ++++++++++++++++++++
 8 files changed, 495 insertions(+), 3 deletions(-)
 create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
 create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h
 create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c

-- 
1.9.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62313): https://edk2.groups.io/g/devel/message/62313
Mute This Topic: https://groups.io/mt/75403794/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [edk2-platforms] [PATCH v3 0/2] Add USB driver support
Posted by Leif Lindholm 3 years, 9 months ago
On Fri, Jul 10, 2020 at 01:33:54 +0530, Meenakshi Aggarwal wrote:
> This patchset implement USB driver for DWC3 controller and enable
> USB for LX2160A Platform.
> 
> Changes in v2:
> 	- Indentation changes
> 	- Incorporated review comments
> 	- create EndOfDxe event and initialize USB in EndOfDxe
> 	  callback function.
> 
> Changes in v3:
> 	- Passing Usb initialization function as init function
> 	  of RegisterNonDiscoverableMmioDevice()
> 
> Meenakshi Aggarwal (2):
>   Silicon/NXP: Add DWC3 USB controller initialization driver
>   Platform/NXP:LX2160: Enable support of USB controller

For series:
Reviewed-by: Leif Lindholm <leif@nuviainc.com>

However, in future, please rebase patches onto current master before
sumitting later revisions. This set conflicted with 7c552c1a2611
("Platform/NXP: LX2160aRdbPkg: Enable PlatformDxe driver") which was
pushed on 3 July.

Pushed (together with SATA series previously reviewed) as:
b972f17b329a..7de21b6aa3e0

>  Silicon/NXP/NxpQoriqLs.dec                   |   5 +
>  Silicon/NXP/LX2160A/LX2160A.dsc.inc          |   4 +
>  Silicon/NXP/NxpQoriqLs.dsc.inc               |  12 +
>  Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc |   1 +
>  Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf |  18 +-
>  Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf |  45 ++++
>  Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h   | 138 ++++++++++
>  Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c   | 275 ++++++++++++++++++++
>  8 files changed, 495 insertions(+), 3 deletions(-)
>  create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
>  create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h
>  create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c
> 
> -- 
> 1.9.1
> 

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#63252): https://edk2.groups.io/g/devel/message/63252
Mute This Topic: https://groups.io/mt/75403794/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

Re: [edk2-devel] [edk2-platforms] [PATCH v3 0/2] Add USB driver support
Posted by Meenakshi Aggarwal (OSS) 3 years, 8 months ago
Thanks Leif,

We will take care of same in future patches.

> -----Original Message-----
> From: Leif Lindholm <leif@nuviainc.com>
> Sent: Friday, July 24, 2020 10:17 PM
> To: Meenakshi Aggarwal (OSS) <meenakshi.aggarwal@oss.nxp.com>
> Cc: ard.biesheuvel@arm.com; michael.d.kinney@intel.com;
> devel@edk2.groups.io; Varun Sethi <V.Sethi@nxp.com>
> Subject: Re: [edk2-platforms] [PATCH v3 0/2] Add USB driver support
> 
> On Fri, Jul 10, 2020 at 01:33:54 +0530, Meenakshi Aggarwal wrote:
> > This patchset implement USB driver for DWC3 controller and enable USB
> > for LX2160A Platform.
> >
> > Changes in v2:
> > 	- Indentation changes
> > 	- Incorporated review comments
> > 	- create EndOfDxe event and initialize USB in EndOfDxe
> > 	  callback function.
> >
> > Changes in v3:
> > 	- Passing Usb initialization function as init function
> > 	  of RegisterNonDiscoverableMmioDevice()
> >
> > Meenakshi Aggarwal (2):
> >   Silicon/NXP: Add DWC3 USB controller initialization driver
> >   Platform/NXP:LX2160: Enable support of USB controller
> 
> For series:
> Reviewed-by: Leif Lindholm <leif@nuviainc.com>
> 
> However, in future, please rebase patches onto current master before
> sumitting later revisions. This set conflicted with 7c552c1a2611
> ("Platform/NXP: LX2160aRdbPkg: Enable PlatformDxe driver") which was
> pushed on 3 July.
> 
> Pushed (together with SATA series previously reviewed) as:
> b972f17b329a..7de21b6aa3e0
> 
> >  Silicon/NXP/NxpQoriqLs.dec                   |   5 +
> >  Silicon/NXP/LX2160A/LX2160A.dsc.inc          |   4 +
> >  Silicon/NXP/NxpQoriqLs.dsc.inc               |  12 +
> >  Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc |   1 +
> >  Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf |  18 +-
> > Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf |  45 ++++
> >  Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h   | 138 ++++++++++
> >  Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c   | 275
> ++++++++++++++++++++
> >  8 files changed, 495 insertions(+), 3 deletions(-)  create mode
> > 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
> >  create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h
> >  create mode 100644 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c
> >
> > --
> > 1.9.1
> >

-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#63298): https://edk2.groups.io/g/devel/message/63298
Mute This Topic: https://groups.io/mt/75403794/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

[edk2-devel] [edk2-platforms] [PATCH v3 1/2] Silicon/NXP: Add DWC3 USB controller initialization driver
Posted by Meenakshi Aggarwal 3 years, 9 months ago
From: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>

Add support of DWC3 controller driver which performs
DWC3 controller initialization and register itself as
NonDiscoverableMmioDevice

Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
---
 Silicon/NXP/NxpQoriqLs.dec                   |   5 +
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf |  45 ++++
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h   | 138 ++++++++++
 Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c   | 275 ++++++++++++++++++++
 4 files changed, 463 insertions(+)

diff --git a/Silicon/NXP/NxpQoriqLs.dec b/Silicon/NXP/NxpQoriqLs.dec
index d4d3057af509..72c1744fc934 100644
--- a/Silicon/NXP/NxpQoriqLs.dec
+++ b/Silicon/NXP/NxpQoriqLs.dec
@@ -36,6 +36,11 @@ [PcdsFixedAtBuild.common]
   gNxpQoriqLsTokenSpaceGuid.PcdPcieLutBase|0x0|UINT32|0x00000502
   gNxpQoriqLsTokenSpaceGuid.PcdPcieLutDbg|0x0|UINT32|0x00000503
 
+  # Pcds for USB
+  gNxpQoriqLsTokenSpaceGuid.PcdUsbBaseAddr|0x0|UINT64|0x00000510
+  gNxpQoriqLsTokenSpaceGuid.PcdUsbSize|0x0|UINT32|0x00000511
+  gNxpQoriqLsTokenSpaceGuid.PcdNumUsbController|0|UINT32|0x00000512
+
 [PcdsDynamic.common]
   gNxpQoriqLsTokenSpaceGuid.PcdPciCfgShiftEnable|FALSE|BOOLEAN|0x00000600
   gNxpQoriqLsTokenSpaceGuid.PcdPciLsGen4Ctrl|FALSE|BOOLEAN|0x00000601
diff --git a/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf b/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
new file mode 100644
index 000000000000..ea7532b4324b
--- /dev/null
+++ b/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
@@ -0,0 +1,45 @@
+#  UsbHcd.inf
+#
+#  Copyright 2017, 2020 NXP
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+#
+
+[Defines]
+  INF_VERSION                     = 0x0001001A
+  BASE_NAME                       = UsbHcdDxe
+  FILE_GUID                       = 196e7c2a-37b2-4b85-8683-718588952449
+  MODULE_TYPE                     = DXE_DRIVER
+  VERSION_STRING                  = 1.0
+  ENTRY_POINT                     = InitializeUsbHcd
+
+[Sources.common]
+  UsbHcd.c
+  UsbHcd.h
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+  Silicon/NXP/NxpQoriqLs.dec
+
+[LibraryClasses]
+  BaseLib
+  BaseMemoryLib
+  DebugLib
+  IoLib
+  MemoryAllocationLib
+  NonDiscoverableDeviceRegistrationLib
+  UefiBootServicesTableLib
+  UefiDriverEntryPoint
+
+[FixedPcd]
+  gNxpQoriqLsTokenSpaceGuid.PcdNumUsbController
+  gNxpQoriqLsTokenSpaceGuid.PcdUsbBaseAddr
+  gNxpQoriqLsTokenSpaceGuid.PcdUsbSize
+
+[Guids]
+  gEfiEndOfDxeEventGroupGuid
+
+[Depex]
+  TRUE
diff --git a/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h b/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h
new file mode 100644
index 000000000000..cd9f9ad80125
--- /dev/null
+++ b/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.h
@@ -0,0 +1,138 @@
+/** @file
+
+  Copyright 2017, 2020 NXP
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef USB_HCD_H_
+#define USB_HCD_H_
+
+#include <Base.h>
+
+/* Global constants */
+#define DWC3_GSNPSID_MASK                      0xffff0000
+#define DWC3_SYNOPSYS_ID                       0x55330000
+#define DWC3_RELEASE_MASK                      0xffff
+#define DWC3_REG_OFFSET                        0xC100
+#define DWC3_RELEASE_190a                      0x190a
+
+/* Global Configuration Register */
+#define DWC3_GCTL_U2RSTECN                     BIT16
+#define DWC3_GCTL_PRTCAPDIR(N)                 ((N) << 12)
+#define DWC3_GCTL_PRTCAP_HOST                  1
+#define DWC3_GCTL_PRTCAP_OTG                   3
+#define DWC3_GCTL_CORESOFTRESET                BIT11
+#define DWC3_GCTL_SCALEDOWN(N)                 ((N) << 4)
+#define DWC3_GCTL_SCALEDOWN_MASK               DWC3_GCTL_SCALEDOWN(3)
+#define DWC3_GCTL_DISSCRAMBLE                  BIT3
+#define DWC3_GCTL_DSBLCLKGTNG                  BIT0
+
+/* Global HWPARAMS1 Register */
+#define DWC3_GHWPARAMS1_EN_PWROPT(N)           (((N) & (3 << 24)) >> 24)
+#define DWC3_GHWPARAMS1_EN_PWROPT_CLK          1
+
+/* Global USB2 PHY Configuration Register */
+#define DWC3_GUSB2PHYCFG_PHYSOFTRST            BIT31
+
+/* Global USB3 PIPE Control Register */
+#define DWC3_GUSB3PIPECTL_PHYSOFTRST           BIT31
+
+/* Global Frame Length Adjustment Register */
+#define GFLADJ_30MHZ_REG_SEL                   BIT7
+#define GFLADJ_30MHZ(N)                        ((N) & 0x3f)
+#define GFLADJ_30MHZ_DEFAULT                   0x20
+
+/* Default to the FSL XHCI defines */
+#define USB3_ENABLE_BEAT_BURST                 0xF
+#define USB3_ENABLE_BEAT_BURST_MASK            0xFF
+#define USB3_SET_BEAT_BURST_LIMIT              0xF00
+
+typedef struct {
+  UINT32 GEvntAdrLo;
+  UINT32 GEvntAdrHi;
+  UINT32 GEvntSiz;
+  UINT32 GEvntCount;
+} G_EVENT_BUFFER;
+
+typedef struct {
+  UINT32 DDepCmdPar2;
+  UINT32 DDepCmdPar1;
+  UINT32 DDepCmdPar0;
+  UINT32 DDepCmd;
+} D_PHYSICAL_EP;
+
+typedef struct {
+  UINT32 GSBusCfg0;
+  UINT32 GSBusCfg1;
+  UINT32 GTxThrCfg;
+  UINT32 GRxThrCfg;
+  UINT32 GCtl;
+  UINT32 Res1;
+  UINT32 GSts;
+  UINT32 Res2;
+  UINT32 GSnpsId;
+  UINT32 GGpio;
+  UINT32 GUid;
+  UINT32 GUctl;
+  UINT64 GBusErrAddr;
+  UINT64 GPrtbImap;
+  UINT32 GHwParams0;
+  UINT32 GHwParams1;
+  UINT32 GHwParams2;
+  UINT32 GHwParams3;
+  UINT32 GHwParams4;
+  UINT32 GHwParams5;
+  UINT32 GHwParams6;
+  UINT32 GHwParams7;
+  UINT32 GDbgFifoSpace;
+  UINT32 GDbgLtssm;
+  UINT32 GDbgLnmcc;
+  UINT32 GDbgBmu;
+  UINT32 GDbgLspMux;
+  UINT32 GDbgLsp;
+  UINT32 GDbgEpInfo0;
+  UINT32 GDbgEpInfo1;
+  UINT64 GPrtbImapHs;
+  UINT64 GPrtbImapFs;
+  UINT32 Res3[28];
+  UINT32 GUsb2PhyCfg[16];
+  UINT32 GUsb2I2cCtl[16];
+  UINT32 GUsb2PhyAcc[16];
+  UINT32 GUsb3PipeCtl[16];
+  UINT32 GTxFifoSiz[32];
+  UINT32 GRxFifoSiz[32];
+  G_EVENT_BUFFER GEvntBuf[32];
+  UINT32 GHwParams8;
+  UINT32 Res4[11];
+  UINT32 GFLAdj;
+  UINT32 Res5[51];
+  UINT32 DCfg;
+  UINT32 DCtl;
+  UINT32 DEvten;
+  UINT32 DSts;
+  UINT32 DGCmdPar;
+  UINT32 DGCmd;
+  UINT32 Res6[2];
+  UINT32 DAlepena;
+  UINT32 Res7[55];
+  D_PHYSICAL_EP DPhyEpCmd[32];
+  UINT32 Res8[128];
+  UINT32 OCfg;
+  UINT32 OCtl;
+  UINT32 OEvt;
+  UINT32 OEvtEn;
+  UINT32 OSts;
+  UINT32 Res9[3];
+  UINT32 AdpCfg;
+  UINT32 AdpCtl;
+  UINT32 AdpEvt;
+  UINT32 AdpEvten;
+  UINT32 BcCfg;
+  UINT32 Res10;
+  UINT32 BcEvt;
+  UINT32 BcEvten;
+} DWC3;
+
+#endif
diff --git a/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c b/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c
new file mode 100644
index 000000000000..8efb5c4f16c6
--- /dev/null
+++ b/Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.c
@@ -0,0 +1,275 @@
+/** @file
+
+  Copyright 2017, 2020 NXP
+
+  SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <Library/BaseLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IoLib.h>
+#include <Library/NonDiscoverableDeviceRegistrationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+#include "UsbHcd.h"
+
+STATIC
+VOID
+XhciSetBeatBurstLength (
+  IN  UINTN  UsbReg
+  )
+{
+  DWC3       *Dwc3Reg;
+
+  Dwc3Reg = (VOID *)(UsbReg + DWC3_REG_OFFSET);
+
+  MmioAndThenOr32 ((UINTN)&Dwc3Reg->GSBusCfg0, ~USB3_ENABLE_BEAT_BURST_MASK,
+    USB3_ENABLE_BEAT_BURST);
+
+  MmioOr32 ((UINTN)&Dwc3Reg->GSBusCfg1, USB3_SET_BEAT_BURST_LIMIT);
+}
+
+STATIC
+VOID
+Dwc3SetFladj (
+  IN  DWC3   *Dwc3Reg,
+  IN  UINT32 Val
+  )
+{
+  MmioOr32 ((UINTN)&Dwc3Reg->GFLAdj, GFLADJ_30MHZ_REG_SEL |
+    GFLADJ_30MHZ (Val));
+}
+
+STATIC
+VOID
+Dwc3SetMode (
+  IN  DWC3   *Dwc3Reg,
+  IN  UINT32 Mode
+  )
+{
+  MmioAndThenOr32 ((UINTN)&Dwc3Reg->GCtl,
+    ~(DWC3_GCTL_PRTCAPDIR (DWC3_GCTL_PRTCAP_OTG)),
+    DWC3_GCTL_PRTCAPDIR (Mode));
+}
+
+/**
+  This function issues phy reset and core soft reset
+
+  @param  Dwc3Reg      Pointer to DWC3 register.
+
+**/
+STATIC
+VOID
+Dwc3CoreSoftReset (
+  IN  DWC3   *Dwc3Reg
+  )
+{
+  //
+  // Put core in reset before resetting PHY
+  //
+  MmioOr32 ((UINTN)&Dwc3Reg->GCtl, DWC3_GCTL_CORESOFTRESET);
+
+  //
+  // Assert USB2 PHY reset
+  //
+  MmioOr32 ((UINTN)&Dwc3Reg->GUsb3PipeCtl[0], DWC3_GUSB3PIPECTL_PHYSOFTRST);
+
+  //
+  // Assert USB3 PHY reset
+  //
+  MmioOr32 ((UINTN)&Dwc3Reg->GUsb2PhyCfg, DWC3_GUSB2PHYCFG_PHYSOFTRST);
+
+  MemoryFence ();
+
+  //
+  // Clear USB3 PHY reset
+  //
+  MmioAnd32 ((UINTN)&Dwc3Reg->GUsb3PipeCtl[0], ~DWC3_GUSB3PIPECTL_PHYSOFTRST);
+
+  //
+  // Clear USB2 PHY reset
+  //
+  MmioAnd32 ((UINTN)&Dwc3Reg->GUsb2PhyCfg, ~DWC3_GUSB2PHYCFG_PHYSOFTRST);
+
+  MemoryFence ();
+
+  //
+  // Take core out of reset, PHYs are stable now
+  //
+  MmioAnd32 ((UINTN)&Dwc3Reg->GCtl, ~DWC3_GCTL_CORESOFTRESET);
+}
+
+/**
+  This function performs low-level initialization of DWC3 Core
+
+  @param  Dwc3Reg      Pointer to DWC3 register.
+
+**/
+STATIC
+EFI_STATUS
+Dwc3CoreInit (
+  IN  DWC3   *Dwc3Reg
+  )
+{
+  UINT32     Revision;
+  UINT32     Reg;
+  UINTN      Dwc3Hwparams1;
+
+  Revision = MmioRead32 ((UINTN)&Dwc3Reg->GSnpsId);
+  //
+  // This should read as 0x5533, ascii of U3(DWC_usb3) followed by revision num
+  //
+  if ((Revision & DWC3_GSNPSID_MASK) != DWC3_SYNOPSYS_ID) {
+    DEBUG ((DEBUG_ERROR,"This is not a DesignWare USB3 DRD Core.\n"));
+    return EFI_NOT_FOUND;
+  }
+
+  Dwc3CoreSoftReset (Dwc3Reg);
+
+  Reg = MmioRead32 ((UINTN)&Dwc3Reg->GCtl);
+  Reg &= ~DWC3_GCTL_SCALEDOWN_MASK;
+  Reg &= ~DWC3_GCTL_DISSCRAMBLE;
+
+  Dwc3Hwparams1 = MmioRead32 ((UINTN)&Dwc3Reg->GHwParams1);
+
+  if (DWC3_GHWPARAMS1_EN_PWROPT (Dwc3Hwparams1) ==
+      DWC3_GHWPARAMS1_EN_PWROPT_CLK) {
+    Reg &= ~DWC3_GCTL_DSBLCLKGTNG;
+  } else {
+    DEBUG ((DEBUG_WARN,"No power optimization available.\n"));
+  }
+
+  if ((Revision & DWC3_RELEASE_MASK) < DWC3_RELEASE_190a) {
+    Reg |= DWC3_GCTL_U2RSTECN;
+  }
+
+  MmioWrite32 ((UINTN)&Dwc3Reg->GCtl, Reg);
+
+  return EFI_SUCCESS;
+}
+
+STATIC
+EFI_STATUS
+XhciCoreInit (
+  IN  UINTN  UsbReg
+  )
+{
+  EFI_STATUS Status;
+  DWC3       *Dwc3Reg;
+
+  Dwc3Reg = (VOID *)(UsbReg + DWC3_REG_OFFSET);
+
+  Status = Dwc3CoreInit (Dwc3Reg);
+  if (EFI_ERROR (Status)) {
+    DEBUG ((DEBUG_ERROR, "Dwc3CoreInit Failed for controller 0x%x (0x%r) \n",
+      UsbReg, Status));
+
+    return Status;
+  }
+
+  Dwc3SetMode (Dwc3Reg, DWC3_GCTL_PRTCAP_HOST);
+
+  Dwc3SetFladj (Dwc3Reg, GFLADJ_30MHZ_DEFAULT);
+
+  return Status;
+}
+
+NON_DISCOVERABLE_DEVICE_INIT
+EFIAPI
+InitializeUsbController (
+  IN  UINTN  UsbReg
+  )
+{
+  EFI_STATUS Status;
+
+  Status = XhciCoreInit (UsbReg);
+
+  if (EFI_ERROR (Status)) {
+    DEBUG ((DEBUG_ERROR, "USB Controller init Failed for %d (0x%r)\n",
+      UsbReg, Status));
+    return (VOID *)EFI_DEVICE_ERROR;
+  }
+
+  //
+  // Change beat burst and outstanding pipelined transfers requests
+  //
+  XhciSetBeatBurstLength (UsbReg);
+
+  return EFI_SUCCESS;
+}
+
+/**
+  This function gets registered as a callback to perform USB controller intialization
+
+  @param  Event         Event whose notification function is being invoked.
+  @param  Context       Pointer to the notification function's context.
+
+**/
+VOID
+EFIAPI
+UsbEndOfDxeCallback (
+  IN EFI_EVENT  Event,
+  IN VOID       *Context
+  )
+{
+  EFI_STATUS    Status;
+  UINT32        NumUsbController;
+  UINT32        ControllerAddr;
+  UINT32        Index;
+
+  gBS->CloseEvent (Event);
+
+  NumUsbController = PcdGet32 (PcdNumUsbController);
+
+  for (Index = 0; Index < NumUsbController; Index++) {
+    ControllerAddr = PcdGet64 (PcdUsbBaseAddr) +
+                      (Index * PcdGet32 (PcdUsbSize));
+
+    Status = RegisterNonDiscoverableMmioDevice (
+               NonDiscoverableDeviceTypeXhci,
+               NonDiscoverableDeviceDmaTypeNonCoherent,
+               InitializeUsbController (ControllerAddr),
+               NULL,
+               1,
+               ControllerAddr, PcdGet32 (PcdUsbSize)
+             );
+
+    if (EFI_ERROR (Status)) {
+      DEBUG ((DEBUG_ERROR, "Failed to register USB device 0x%x, error 0x%r \n",
+        ControllerAddr, Status));
+    }
+  }
+}
+
+/**
+  The Entry Point of module. It follows the standard UEFI driver model.
+
+  @param[in] ImageHandle   The firmware allocated handle for the EFI image.
+  @param[in] SystemTable   A pointer to the EFI System Table.
+
+  @retval EFI_SUCCESS      The entry point is executed successfully.
+  @retval other            Some error occurs when executing this entry point.
+
+**/
+EFI_STATUS
+EFIAPI
+InitializeUsbHcd (
+  IN EFI_HANDLE            ImageHandle,
+  IN EFI_SYSTEM_TABLE      *SystemTable
+  )
+{
+  EFI_STATUS               Status;
+  EFI_EVENT                EndOfDxeEvent;
+
+  Status = gBS->CreateEventEx (
+                  EVT_NOTIFY_SIGNAL,
+                  TPL_CALLBACK,
+                  UsbEndOfDxeCallback,
+                  NULL,
+                  &gEfiEndOfDxeEventGroupGuid,
+                  &EndOfDxeEvent
+                  );
+
+  return Status;
+}
-- 
1.9.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62315): https://edk2.groups.io/g/devel/message/62315
Mute This Topic: https://groups.io/mt/75403796/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-

[edk2-devel] [edk2-platforms] [PATCH v3 2/2] Platform/NXP:LX2160: Enable support of USB controller
Posted by Meenakshi Aggarwal 3 years, 9 months ago
From: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>

- Enable support of USB drives on lx2160 RDB board.
- LX2160 has DWC3 controller
- Increase FD size to accomodate USB driver.

Signed-off-by: Meenakshi Aggarwal <meenakshi.aggarwal@nxp.com>
---
 Silicon/NXP/LX2160A/LX2160A.dsc.inc          |  4 ++++
 Silicon/NXP/NxpQoriqLs.dsc.inc               | 12 ++++++++++++
 Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc |  1 +
 Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 18 +++++++++++++++---
 4 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/Silicon/NXP/LX2160A/LX2160A.dsc.inc b/Silicon/NXP/LX2160A/LX2160A.dsc.inc
index af22b4dd973c..55dd3b5442eb 100644
--- a/Silicon/NXP/LX2160A/LX2160A.dsc.inc
+++ b/Silicon/NXP/LX2160A/LX2160A.dsc.inc
@@ -36,6 +36,10 @@ [PcdsFixedAtBuild.common]
   gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|0
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x21C0000
 
+  gNxpQoriqLsTokenSpaceGuid.PcdUsbBaseAddr|0x3100000
+  gNxpQoriqLsTokenSpaceGuid.PcdUsbSize|0x10000
+  gNxpQoriqLsTokenSpaceGuid.PcdNumUsbController|2
+
 [PcdsFeatureFlag]
   gNxpQoriqLsTokenSpaceGuid.PcdI2cErratumA009203|TRUE
 
diff --git a/Silicon/NXP/NxpQoriqLs.dsc.inc b/Silicon/NXP/NxpQoriqLs.dsc.inc
index ee639d552483..1f0f272da6c7 100644
--- a/Silicon/NXP/NxpQoriqLs.dsc.inc
+++ b/Silicon/NXP/NxpQoriqLs.dsc.inc
@@ -366,6 +366,18 @@ [Components.common]
   FatPkg/EnhancedFatDxe/Fat.inf
 
   #
+  # USB
+  #
+
+  MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
+  MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
+  MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
+  MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
+  MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
+
+  MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf
+
+  #
   # Bds
   #
   MdeModulePkg/Universal/DevicePathDxe/DevicePathDxe.inf
diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc
index 9b3e0386c13e..ec27a1a219a5 100644
--- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc
+++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc
@@ -43,4 +43,5 @@ [Components.common]
     gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvModeEnable|TRUE
   }
 
+  Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
  ##
diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf
index eec1c0774a86..5cb809e8b3a0 100644
--- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf
+++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf
@@ -23,10 +23,10 @@
 
 [FD.LX2160ARDB_EFI]
 BaseAddress   = 0x82000000|gArmTokenSpaceGuid.PcdFdBaseAddress  #The base address of the FLASH Device.
-Size          = 0x00140000|gArmTokenSpaceGuid.PcdFdSize         #The size in bytes of the FLASH Device
+Size          = 0x00160000|gArmTokenSpaceGuid.PcdFdSize         #The size in bytes of the FLASH Device
 ErasePolarity = 1
 BlockSize     = 0x10000
-NumBlocks     = 0x14
+NumBlocks     = 0x16
 
 ################################################################################
 #
@@ -43,7 +43,7 @@ [FD.LX2160ARDB_EFI]
 # RegionType <FV, DATA, or FILE>
 #
 ################################################################################
-0x00000000|0x00140000
+0x00000000|0x00160000
 gArmTokenSpaceGuid.PcdFvBaseAddress|gArmTokenSpaceGuid.PcdFvSize
 FV = FVMAIN_COMPACT
 
@@ -120,6 +120,18 @@ [FV.FvMain]
   INF FatPkg/EnhancedFatDxe/Fat.inf
   INF MdeModulePkg/Universal/Disk/UnicodeCollation/EnglishDxe/EnglishDxe.inf
 
+  INF MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceDxe.inf
+
+  #
+  # USB Support
+  #
+  INF MdeModulePkg/Bus/Pci/UhciDxe/UhciDxe.inf
+  INF MdeModulePkg/Bus/Pci/EhciDxe/EhciDxe.inf
+  INF MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
+  INF MdeModulePkg/Bus/Usb/UsbBusDxe/UsbBusDxe.inf
+  INF MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassStorageDxe.inf
+
+  INF Silicon/NXP/Drivers/UsbHcdInitDxe/UsbHcd.inf
   #
   # UEFI application (Shell Embedded Boot Loader)
   #
-- 
1.9.1


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.

View/Reply Online (#62314): https://edk2.groups.io/g/devel/message/62314
Mute This Topic: https://groups.io/mt/75403795/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-