It's a bit hard to implement it in lower layer. Since PhyInit ()
should be executed
between UFS controller enabled and UicDmeLinkStartup command.

Best Regards
Haojian

On 6 January 2017 at 15:27, Tian, Feng <[email protected]> wrote:
> Could this be done at lower layer rather than changing existing interface?
>
> Thanks
> Feng
>
> -----Original Message-----
> From: edk2-devel [mailto:[email protected]] On Behalf Of 
> Haojian Zhuang
> Sent: Friday, January 6, 2017 2:52 PM
> To: Tian, Feng <[email protected]>; [email protected]; 
> [email protected]; [email protected]
> Cc: Haojian Zhuang <[email protected]>
> Subject: [edk2] [PATCH 6/9] Ufs: add PhyInit
>
> Add PhyInit() to support designware UFS controller.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Haojian Zhuang <[email protected]>
> ---
>  MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c    | 2 ++
>  MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c | 8 ++++++++
>  MdeModulePkg/Include/Protocol/UfsHostController.h    | 7 +++++++
>  3 files changed, 17 insertions(+)
>
> diff --git a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c 
> b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
> index 7c831e9..761dc8e 100644
> --- a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
> +++ b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThru.c
> @@ -853,6 +853,8 @@ UfsPassThruDriverBindingStart (
>      goto Error;
>    }
>
> +  MicroSecondDelay (100000);
> +
>    //
>    // Get Ufs Device's Lun Info by reading Configuration Descriptor.
>    //
> diff --git a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c 
> b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c
> index 218e9f5..7c01d57 100644
> --- a/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c
> +++ b/MdeModulePkg/Bus/Ufs/UfsPassThruDxe/UfsPassThruHci.c
> @@ -2089,6 +2089,7 @@ UfsControllerInit (
>    )
>  {
>    EFI_STATUS             Status;
> +  EDKII_UFS_HOST_CONTROLLER_PROTOCOL *UfsHc;
>
>    Status = UfsEnableHostController (Private);
>    if (EFI_ERROR (Status)) {
> @@ -2096,6 +2097,13 @@ UfsControllerInit (
>      return Status;
>    }
>
> +  UfsHc  = Private->UfsHostController;
> +  Status = UfsHc->PhyInit (UfsHc);
> +  if (EFI_ERROR (Status)) {
> +    DEBUG ((EFI_D_ERROR, "UfsControllerInit: Phy Init Fails, Status = %r\n", 
> Status));
> +    return Status;
> +  }
> +
>    Status = UfsDeviceDetection (Private);
>    if (EFI_ERROR (Status)) {
>      DEBUG ((EFI_D_ERROR, "UfsControllerInit: Device Detection Fails, Status 
> = %r\n", Status)); diff --git 
> a/MdeModulePkg/Include/Protocol/UfsHostController.h 
> b/MdeModulePkg/Include/Protocol/UfsHostController.h
> index 909c981..1f3605f 100644
> --- a/MdeModulePkg/Include/Protocol/UfsHostController.h
> +++ b/MdeModulePkg/Include/Protocol/UfsHostController.h
> @@ -221,6 +221,12 @@ EFI_STATUS
>    IN OUT VOID                                      *Buffer
>    );
>
> +typedef
> +EFI_STATUS
> +(EFIAPI *EDKII_UFS_HC_PHY_INIT)(
> +  IN     EDKII_UFS_HOST_CONTROLLER_PROTOCOL        *This
> +  );
> +
>  ///
>  ///  UFS Host Controller Protocol structure.
>  ///
> @@ -233,6 +239,7 @@ struct _EDKII_UFS_HOST_CONTROLLER_PROTOCOL {
>    EDKII_UFS_HC_FLUSH                  Flush;
>    EDKII_UFS_HC_MMIO_READ_WRITE        Read;
>    EDKII_UFS_HC_MMIO_READ_WRITE        Write;
> +  EDKII_UFS_HC_PHY_INIT               PhyInit;
>  };
>
>  ///
> --
> 2.7.4
>
> _______________________________________________
> edk2-devel mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/edk2-devel
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to