Any help from maintainers in reviewing this MdeModulePkg patch please?

Thanks,
--Samer

-----Original Message-----
From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Pankaj Bansal 
via Groups.Io
Sent: Wednesday, February 19, 2020 8:32 AM
To: Jian J Wang <jian.j.w...@intel.com>; Hao A Wu <hao.a...@intel.com>; Ray Ni 
<ray...@intel.com>; Maurice Ma <maurice...@intel.com>; Guo Dong 
<guo.d...@intel.com>; Benjamin You <benjamin....@intel.com>; Leif Lindholm 
<l...@nuviainc.com>; Meenakshi Aggarwal (meenakshi.aggar...@nxp.com) 
<meenakshi.aggar...@nxp.com>; V Sethi (v.se...@nxp.com) <v.se...@nxp.com>
Cc: devel@edk2.groups.io; Pankaj Bansal <pankaj.ban...@nxp.com>
Subject: [edk2-devel] [PATCH 1/1] MdeModulePkg: UART Dynamic clock freq Support

From: Pankaj Bansal <pankaj.ban...@nxp.com>

Some platform support dynamic clocking, which is controlled by some jumper 
setting or hardware registers. Result of that is that PCD PcdSerialClockRate 
would need to be updated for frequency change.

This patch implements support for dynamic frequency for Uart.

This patch implements default lib, which is using Pcd. Platform which needs 
dynamic clocking needs implement SerialUartClockLib

This patch is based on ArmPlatformPkg/Library/PL011UartClockLib

Signed-off-by: Pankaj Bansal <pankaj.ban...@nxp.com>
---
 .../Include/Library/SerialUartClockLib.h      | 21 +++++++++++++++
 .../BaseSerialPortLib16550.c                  |  9 ++++---
 .../BaseSerialPortLib16550.inf                |  2 +-
 .../BaseSerialUartClockLib.c                  | 24 +++++++++++++++++
 .../BaseSerialUartClockLib.inf                | 27 +++++++++++++++++++
 MdeModulePkg/MdeModulePkg.dsc                 |  2 ++
 SourceLevelDebugPkg/SourceLevelDebugPkg.dsc   |  1 +
 UefiPayloadPkg/UefiPayloadPkgIa32.dsc         |  1 +
 UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc      |  1 +
 9 files changed, 83 insertions(+), 5 deletions(-)  create mode 100644 
MdeModulePkg/Include/Library/SerialUartClockLib.h
 create mode 100644 
MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib.c
 create mode 100644 
MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib.inf

diff --git a/MdeModulePkg/Include/Library/SerialUartClockLib.h 
b/MdeModulePkg/Include/Library/SerialUartClockLib.h
new file mode 100644
index 000000000000..b6b16f71d4cf
--- /dev/null
+++ b/MdeModulePkg/Include/Library/SerialUartClockLib.h
@@ -0,0 +1,21 @@
+/** @file
+*
+*  Copyright 2020 NXP
+*
+*  SPDX-License-Identifier: BSD-2-Clause-Patent
+*
+**/
+
+#ifndef SERIAL_UART_CLOCK_LIB_H__
+#define SERIAL_UART_CLOCK_LIB_H__
+
+/**
+  Return clock in for Uart IP
+**/
+UINT32
+EFIAPI
+BaseSerialPortGetClock (
+  VOID
+  );
+
+#endif
diff --git 
a/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c 
b/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c
index 9cb50dd80d56..2e0c05d5789e 100644
--- a/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.c
+++ b/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550
+++ .c
@@ -16,6 +16,7 @@
 #include <Library/IoLib.h>
 #include <Library/PciLib.h>
 #include <Library/PlatformHookLib.h>
+#include <Library/SerialUartClockLib.h>
 #include <Library/BaseLib.h>

 //
@@ -501,8 +502,8 @@ SerialPortInitialize (
   // Calculate divisor for baud generator
   //    Ref_Clk_Rate / Baud_Rate / 16
   //
-  Divisor = PcdGet32 (PcdSerialClockRate) / (PcdGet32 (PcdSerialBaudRate) * 
16);
-  if ((PcdGet32 (PcdSerialClockRate) % (PcdGet32 (PcdSerialBaudRate) * 16)) >= 
PcdGet32 (PcdSerialBaudRate) * 8) {
+  Divisor = BaseSerialPortGetClock () / (PcdGet32 (PcdSerialBaudRate) *
+ 16);  if ((BaseSerialPortGetClock () % (PcdGet32 (PcdSerialBaudRate) *
+ 16)) >= PcdGet32 (PcdSerialBaudRate) * 8) {
     Divisor++;
   }

@@ -1080,8 +1081,8 @@ SerialPortSetAttributes (
   // Calculate divisor for baud generator
   //    Ref_Clk_Rate / Baud_Rate / 16
   //
-  Divisor = PcdGet32 (PcdSerialClockRate) / (SerialBaudRate * 16);
-  if ((PcdGet32 (PcdSerialClockRate) % (SerialBaudRate * 16)) >= 
SerialBaudRate * 8) {
+  Divisor = BaseSerialPortGetClock () / (SerialBaudRate * 16);  if
+ ((BaseSerialPortGetClock () % (SerialBaudRate * 16)) >= SerialBaudRate
+ * 8) {
     Divisor++;
   }

diff --git 
a/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf 
b/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
index 8b4ae3f1d4ee..b4c16504f211 100644
--- a/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
+++ b/MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550
+++ .inf
@@ -24,6 +24,7 @@ [LibraryClasses]
   IoLib
   PlatformHookLib
   PciLib
+  SerialUartClockLib

 [Sources]
   BaseSerialPortLib16550.c
@@ -37,7 +38,6 @@ [Pcd]
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialBaudRate                ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialLineControl             ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialFifoControl             ## CONSUMES
-  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate               ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialPciDeviceInfo           ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialExtendedTxFifoSize      ## CONSUMES
   gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterStride          ## CONSUMES
diff --git 
a/MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib.c 
b/MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib.c
new file mode 100644
index 000000000000..7a0d0427cc4e
--- /dev/null
+++ b/MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib
+++ .c
@@ -0,0 +1,24 @@
+/** @file
+*
+*  Copyright 2020 NXP
+*
+*  SPDX-License-Identifier: BSD-2-Clause-Patent
+*
+**/
+
+#include <Base.h>
+#include <Library/PcdLib.h>
+
+/**
+  Return clock in for Uart IP
+
+  @return Pcd PcdSerialClockRate
+**/
+UINT32
+EFIAPI
+BaseSerialPortGetClock (
+  VOID
+  )
+{
+  return PcdGet32 (PcdSerialClockRate); }
diff --git 
a/MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib.inf 
b/MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib.inf
new file mode 100644
index 000000000000..91ba69436ed6
--- /dev/null
+++ b/MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib
+++ .inf
@@ -0,0 +1,27 @@
+#/* @file
+#  Copyright 2020 NXP
+#
+#  SPDX-License-Identifier: BSD-2-Clause-Patent # #*/
+
+[Defines]
+  INF_VERSION                    = 0x0001001A
+  BASE_NAME                      = BaseSerialUartClockLib
+  FILE_GUID                      = fa65495e-d3c8-4ea3-9737-994e9ccbaf11
+  MODULE_TYPE                    = BASE
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = SerialUartClockLib
+
+[Packages]
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[Sources.common]
+  BaseSerialUartClockLib.c
+
+[LibraryClasses]
+  PcdLib
+
+[Pcd]
+  gEfiMdeModulePkgTokenSpaceGuid.PcdSerialClockRate               ## CONSUMES
diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc 
index f7dbb27ce25d..d581ca797b3b 100644
--- a/MdeModulePkg/MdeModulePkg.dsc
+++ b/MdeModulePkg/MdeModulePkg.dsc
@@ -65,6 +65,7 @@ [LibraryClasses]
   UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
   
SecurityManagementLib|MdeModulePkg/Library/DxeSecurityManagementLib/DxeSecurityManagementLib.inf
   TimerLib|MdePkg/Library/BaseTimerLibNullTemplate/BaseTimerLibNullTemplate.inf
+
+ SerialUartClockLib|MdeModulePkg/Library/BaseSerialUartClockLib/BaseSer
+ ialUartClockLib.inf
   SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
   CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
   PcdLib|MdePkg/Library/BasePcdLibNull/BasePcdLibNull.inf
@@ -292,6 +293,7 @@ [Components]
   MdeModulePkg/Library/DxeReportStatusCodeLib/DxeReportStatusCodeLib.inf
   
MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeReportStatusCodeLib.inf
   MdeModulePkg/Library/RuntimeResetSystemLib/RuntimeResetSystemLib.inf
+
+ MdeModulePkg/Library/BaseSerialUartClockLib/BaseSerialUartClockLib.inf
   MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
   MdeModulePkg/Library/BasePlatformHookLibNull/BasePlatformHookLibNull.inf
   
MdeModulePkg/Library/DxeDebugPrintErrorLevelLib/DxeDebugPrintErrorLevelLib.inf
diff --git a/SourceLevelDebugPkg/SourceLevelDebugPkg.dsc 
b/SourceLevelDebugPkg/SourceLevelDebugPkg.dsc
index a1a1b81d03cb..c0ad88f26341 100644
--- a/SourceLevelDebugPkg/SourceLevelDebugPkg.dsc
+++ b/SourceLevelDebugPkg/SourceLevelDebugPkg.dsc
@@ -33,6 +33,7 @@ [LibraryClasses.common]
   
SynchronizationLib|MdePkg/Library/BaseSynchronizationLib/BaseSynchronizationLib.inf
   LocalApicLib|UefiCpuPkg/Library/BaseXApicLib/BaseXApicLib.inf
   
PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
+
+ SerialUartClockLib|MdeModulePkg/Library/BaseSerialUartClockLib/BaseSer
+ ialUartClockLib.inf
   
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
   
PeCoffExtraActionLib|SourceLevelDebugPkg/Library/PeCoffExtraActionLibDebug/PeCoffExtraActionLibDebug.inf
   
TimerLib|UefiCpuPkg/Library/SecPeiDxeTimerLibUefiCpu/SecPeiDxeTimerLibUefiCpu.inf
diff --git a/UefiPayloadPkg/UefiPayloadPkgIa32.dsc 
b/UefiPayloadPkg/UefiPayloadPkgIa32.dsc
index d52945442e0e..a556a32b272c 100644
--- a/UefiPayloadPkg/UefiPayloadPkgIa32.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkgIa32.dsc
@@ -174,6 +174,7 @@ [LibraryClasses]
   #
   TimerLib|UefiPayloadPkg/Library/AcpiTimerLib/AcpiTimerLib.inf
   ResetSystemLib|UefiPayloadPkg/Library/ResetSystemLib/ResetSystemLib.inf
+
+ SerialUartClockLib|MdeModulePkg/Library/BaseSerialUartClockLib/BaseSer
+ ialUartClockLib.inf
   
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
   PlatformHookLib|UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
   
PlatformBootManagerLib|UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
diff --git a/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc 
b/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc
index 0736cd995476..7e86375fe57d 100644
--- a/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc
+++ b/UefiPayloadPkg/UefiPayloadPkgIa32X64.dsc
@@ -175,6 +175,7 @@ [LibraryClasses]
   #
   TimerLib|UefiPayloadPkg/Library/AcpiTimerLib/AcpiTimerLib.inf
   ResetSystemLib|UefiPayloadPkg/Library/ResetSystemLib/ResetSystemLib.inf
+
+ SerialUartClockLib|MdeModulePkg/Library/BaseSerialUartClockLib/BaseSer
+ ialUartClockLib.inf
   
SerialPortLib|MdeModulePkg/Library/BaseSerialPortLib16550/BaseSerialPortLib16550.inf
   PlatformHookLib|UefiPayloadPkg/Library/PlatformHookLib/PlatformHookLib.inf
   
PlatformBootManagerLib|UefiPayloadPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
--
2.17.1




IMPORTANT NOTICE: The contents of this email and any attachments are 
confidential and may also be privileged. If you are not the intended recipient, 
please notify the sender immediately and do not disclose the contents to any 
other person, use it for any purpose, or store or copy the information in any 
medium. Thank you.

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

View/Reply Online (#55990): https://edk2.groups.io/g/devel/message/55990
Mute This Topic: https://groups.io/mt/71393886/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub  [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to