Reviewed-by: Liming Gao <gaolim...@byosoft.com.cn>

> -----邮件原件-----
> 发件人: Xianglei Cai <xianglei....@intel.com>
> 发送时间: 2024年4月15日 14:34
> 收件人: devel@edk2.groups.io
> 抄送: Xianglei Cai <xianglei....@intel.com>; Ray Ni <ray...@intel.com>;
> Liming Gao <gaolim...@byosoft.com.cn>; Krzysztof Lewandowski
> <krzysztof.lewandow...@intel.com>; Jenny Huang <jenny.hu...@intel.com>;
> More Shih <more.s...@intel.com>; Ian Chiu <ian.c...@intel.com>
> 主题: [PATCH V3 1/1] MdeModulePkg/XhciDxe: Add PCD for the delay of
> HCRST
> 
> https://bugzilla.tianocore.org/show_bug.cgi?id=4727
> 
> Recently some of XHCI host controllers require to have
> extra 1ms delay before accessing any MMIO register
> during reset. PHY transition from P3 to P0 can take
> around 1.3ms and the xHCI reset can take around 1.5ms.
> Add PCD to control the delay, the default is 2 ms.
> 
> Cc: Ray Ni                   <ray...@intel.com>
> Cc: Liming Gao               <gaolim...@byosoft.com.cn>
> Cc: Krzysztof Lewandowski    <krzysztof.lewandow...@intel.com>
> Cc: Jenny Huang              <jenny.hu...@intel.com>
> Cc: More Shih                <more.s...@intel.com>
> Cc: Ian Chiu                 <ian.c...@intel.com>
> Signed-off-by: Xianglei Cai <xianglei....@intel.com>
> Reviewed-by: Krzysztof Lewandowski <krzysztof.lewandow...@intel.com>
> ---
>  MdeModulePkg/Bus/Pci/XhciDxe/Xhci.h      | 1 +
>  MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf | 4 ++++
>  MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c   | 2 +-
>  MdeModulePkg/MdeModulePkg.dec            | 5 +++++
>  4 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.h
> b/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.h
> index 44016758724c..c9a12095c29e 100644
> --- a/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.h
> +++ b/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.h
> @@ -28,6 +28,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
>  #include <Library/DebugLib.h>
>  #include <Library/ReportStatusCodeLib.h>
>  #include <Library/TimerLib.h>
> +#include <Library/PcdLib.h>
> 
>  #include <IndustryStandard/Pci.h>
> 
> diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
> b/MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
> index 18ef87916ae4..e6c1ac8a6346 100644
> --- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
> +++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciDxe.inf
> @@ -56,6 +56,7 @@
>    DebugLib
>    ReportStatusCodeLib
>    TimerLib
> +  PcdLib
> 
>  [Guids]
>    gEfiEventExitBootServicesGuid                 ##
> SOMETIMES_CONSUMES ## Event
> @@ -64,6 +65,9 @@
>    gEfiPciIoProtocolGuid                         ## TO_START
>    gEfiUsb2HcProtocolGuid                        ## BY_START
> 
> +[Pcd]
> +  gEfiMdeModulePkgTokenSpaceGuid.PcdDelayXhciHCReset  ##
> CONSUMES
> +
>  # [Event]
>  # EVENT_TYPE_PERIODIC_TIMER       ## CONSUMES
>  #
> diff --git a/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c
> b/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c
> index 40f2f1f22766..525942a167b0 100644
> --- a/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c
> +++ b/MdeModulePkg/Bus/Pci/XhciDxe/XhciReg.c
> @@ -864,7 +864,7 @@ XhcResetHC (
>      // Otherwise there may have the timeout case happened.
>      // The below is a workaround to solve such problem.
>      //
> -    gBS->Stall (XHC_1_MILLISECOND);
> +    gBS->Stall (PcdGet16 (PcdDelayXhciHCReset));
>      Status = XhcWaitOpRegBit (Xhc, XHC_USBCMD_OFFSET,
> XHC_USBCMD_RESET, FALSE, Timeout);
> 
>      if (!EFI_ERROR (Status)) {
> diff --git a/MdeModulePkg/MdeModulePkg.dec
> b/MdeModulePkg/MdeModulePkg.dec
> index a91058e5b5df..d9e2e724df9e 100644
> --- a/MdeModulePkg/MdeModulePkg.dec
> +++ b/MdeModulePkg/MdeModulePkg.dec
> @@ -1148,6 +1148,11 @@
>    # @Prompt Enable large address image loading.
> 
> gEfiMdeModulePkgTokenSpaceGuid.PcdImageLargeAddressLoad|TRUE|BOO
> LEAN|0x30001059
> 
> +  ## Indicates time delay for XHCI registers access after it issues
HCRST.
> +  # Default is 2000, it represent delay is 2 ms.
> +  # @Prompt Delay access XHCI register after it issues HCRST (us)
> +
> gEfiMdeModulePkgTokenSpaceGuid.PcdDelayXhciHCReset|2000|UINT16|0x3
> 0001060
> +
>  [PcdsFixedAtBuild, PcdsPatchableInModule]
>    ## Dynamic type PCD can be registered callback function for Pcd setting
> action.
>    #  PcdMaxPeiPcdCallBackNumberPerPcdEntry indicates the maximum
> number of callback function
> --
> 2.42.0.windows.2





-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#117760): https://edk2.groups.io/g/devel/message/117760
Mute This Topic: https://groups.io/mt/105531090/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to