[edk2-devel] [edk2-platforms][PATCH 25/30] Silicon/SiFive: Use mtime CSR library
Abner Chang
abner.chang at hpe.com
Tue Oct 19 08:10:02 UTC 2021
Use mtime CSR library interface to access mtime
CSR in Timer DXE driver.
Cc: Sunil V L <sunilvl at ventanamicro.com>
Cc: Daniel Schaefer <daniel.schaefer at hpe.com>
Signed-off-by: Abner Chang <abner.chang at hpe.com>
---
.../FreedomU540HiFiveUnleashedBoard/U540.dsc | 2 ++
.../Universal/Dxe/TimerDxe/TimerDxe.inf | 1 +
.../U5SeriesPkg/Universal/Dxe/TimerDxe/Timer.c | 14 +++++---------
3 files changed, 8 insertions(+), 9 deletions(-)
diff --git a/Platform/SiFive/U5SeriesPkg/FreedomU540HiFiveUnleashedBoard/U540.dsc b/Platform/SiFive/U5SeriesPkg/FreedomU540HiFiveUnleashedBoard/U540.dsc
index 4d16adfc82..c29b36e9bb 100644
--- a/Platform/SiFive/U5SeriesPkg/FreedomU540HiFiveUnleashedBoard/U540.dsc
+++ b/Platform/SiFive/U5SeriesPkg/FreedomU540HiFiveUnleashedBoard/U540.dsc
@@ -148,6 +148,8 @@
RiscVCpuLib|Silicon/RISC-V/ProcessorPkg/Library/RiscVCpuLib/RiscVCpuLib.inf
RiscVEdk2SbiLib|Silicon/RISC-V/ProcessorPkg/Library/RiscVEdk2SbiLib/RiscVEdk2SbiLib.inf
RiscVPlatformTimerLib|Platform/SiFive/U5SeriesPkg/Library/RiscVPlatformTimerLib/RiscVPlatformTimerLib.inf
+ #MachineModeTimerLib|Silicon/RISC-V/ProcessorPkg/Library/RiscVReadMachineModeTimer/MachineModeTimerLib/MachineModeTimerLib.inf
+ MachineModeTimerLib|Silicon/RISC-V/ProcessorPkg/Library/RiscVReadMachineModeTimer/EmulatedMachineModeTimerLib/EmulatedMachineModeTimerLib.inf
CpuExceptionHandlerLib|Silicon/RISC-V/ProcessorPkg/Library/RiscVExceptionLib/CpuExceptionHandlerDxeLib.inf
diff --git a/Platform/SiFive/U5SeriesPkg/Universal/Dxe/TimerDxe/TimerDxe.inf b/Platform/SiFive/U5SeriesPkg/Universal/Dxe/TimerDxe/TimerDxe.inf
index 25cb3bb8b4..4571621a2e 100644
--- a/Platform/SiFive/U5SeriesPkg/Universal/Dxe/TimerDxe/TimerDxe.inf
+++ b/Platform/SiFive/U5SeriesPkg/Universal/Dxe/TimerDxe/TimerDxe.inf
@@ -30,6 +30,7 @@
BaseLib
DebugLib
IoLib
+ MachineModeTimerLib
RiscVCpuLib
RiscVEdk2SbiLib
UefiBootServicesTableLib
diff --git a/Platform/SiFive/U5SeriesPkg/Universal/Dxe/TimerDxe/Timer.c b/Platform/SiFive/U5SeriesPkg/Universal/Dxe/TimerDxe/Timer.c
index 065ecdda86..deb5799277 100644
--- a/Platform/SiFive/U5SeriesPkg/Universal/Dxe/TimerDxe/Timer.c
+++ b/Platform/SiFive/U5SeriesPkg/Universal/Dxe/TimerDxe/Timer.c
@@ -15,9 +15,6 @@
#include <sbi/riscv_atomic.h>
#include <U5Clint.h>
-STATIC volatile VOID * const p_mtime = (VOID *)CLINT_REG_MTIME;
-#define MTIME (*p_mtime)
-#define MTIMECMP(i) (p_mtimecmp[i])
BOOLEAN TimerHandlerReentry = FALSE;
//
@@ -73,7 +70,7 @@ TimerInterruptHandler (
// MMode timer occurred when processing
// SMode timer handler.
//
- RiscvTimer = readq_relaxed(p_mtime);
+ RiscvTimer = RiscVReadMachineTimerInterface();
SbiSetTimer (RiscvTimer += mTimerPeriod);
csr_clear(CSR_SIP, MIP_STIP);
return;
@@ -91,7 +88,7 @@ TimerInterruptHandler (
if (mTimerNotifyFunction != NULL) {
mTimerNotifyFunction (mTimerPeriod);
}
- RiscvTimer = readq_relaxed(p_mtime);
+ RiscvTimer = RiscVReadMachineTimerInterface();
SbiSetTimer (RiscvTimer += mTimerPeriod);
gBS->RestoreTPL (OriginalTPL);
csr_set(CSR_SIE, MIP_STIP); // enable SMode timer int
@@ -185,10 +182,9 @@ TimerDriverSetTimerPeriod (
return EFI_SUCCESS;
}
- mTimerPeriod = TimerPeriod / 10; // convert unit from 100ns to 1us
-
- RiscvTimer = readq_relaxed(p_mtime);
- SbiSetTimer(RiscvTimer + mTimerPeriod);
+ mTimerPeriod = TimerPeriod; // convert unit from 100ns to 1us
+ RiscvTimer = RiscVReadMachineTimerInterface();
+ SbiSetTimer(RiscvTimer + mTimerPeriod / 10);
mCpu->EnableInterrupt(mCpu);
csr_set(CSR_SIE, MIP_STIP); // enable timer int
--
2.31.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#82336): https://edk2.groups.io/g/devel/message/82336
Mute This Topic: https://groups.io/mt/86435689/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list