VirtualBox

Ignore:
Timestamp:
Aug 14, 2024 1:16:30 PM (6 months ago)
Author:
vboxsync
Message:

Devices/EFI/FirmwareNew: Merge edk2-stable-202405 and make it build on aarch64, bugref:4643

Location:
trunk/src/VBox/Devices/EFI/FirmwareNew
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/EFI/FirmwareNew

  • trunk/src/VBox/Devices/EFI/FirmwareNew/UefiCpuPkg/CpuTimerDxeRiscV64/CpuTimerDxeRiscV64.inf

    r101291 r105670  
    4242
    4343[Pcd]
     44  gEfiMdePkgTokenSpaceGuid.PcdRiscVFeatureOverride           ## CONSUMES
    4445  gUefiCpuPkgTokenSpaceGuid.PcdCpuCoreCrystalClockFrequency  ## CONSUMES
    4546
  • trunk/src/VBox/Devices/EFI/FirmwareNew/UefiCpuPkg/CpuTimerDxeRiscV64/Timer.c

    r101291 r105670  
    4444STATIC UINT64  mTimerPeriod     = 0;
    4545STATIC UINT64  mLastPeriodStart = 0;
     46
     47//
     48// Sstc support
     49//
     50STATIC BOOLEAN  mSstcEnabled = FALSE;
     51
     52/**
     53  Program the timer.
     54
     55  Program either using stimecmp (when Sstc extension is enabled) or using SBI
     56  TIME call.
     57
     58  @param NextValue             Core tick value the timer should expire.
     59**/
     60STATIC
     61VOID
     62RiscVProgramTimer (
     63  UINT64  NextValue
     64  )
     65{
     66  if (mSstcEnabled) {
     67    RiscVSetSupervisorTimeCompareRegister (NextValue);
     68  } else {
     69    SbiSetTimer (NextValue);
     70  }
     71}
     72
     73/**
     74  Check whether Sstc is enabled in PCD.
     75
     76**/
     77STATIC
     78BOOLEAN
     79RiscVIsSstcEnabled (
     80  VOID
     81  )
     82{
     83  return ((PcdGet64 (PcdRiscVFeatureOverride) & RISCV_CPU_FEATURE_SSTC_BITMASK) != 0);
     84}
    4685
    4786/**
     
    95134                       1000000u
    96135                       );  // convert to tick
    97   SbiSetTimer (PeriodStart);
     136  RiscVProgramTimer (PeriodStart);
    98137  RiscVEnableTimerInterrupt (); // enable SMode timer int
    99138  gBS->RestoreTPL (OriginalTPL);
     
    198237                       1000000u
    199238                       ); // convert to tick
    200   SbiSetTimer (PeriodStart);
    201 
     239  RiscVProgramTimer (PeriodStart);
    202240  mCpu->EnableInterrupt (mCpu);
    203241  RiscVEnableTimerInterrupt (); // enable SMode timer int
     
    283321  mTimerNotifyFunction = NULL;
    284322
     323  if (RiscVIsSstcEnabled ()) {
     324    mSstcEnabled = TRUE;
     325    DEBUG ((DEBUG_INFO, "TimerDriverInitialize: Timer interrupt is via Sstc extension\n"));
     326  }
     327
    285328  //
    286329  // Make sure the Timer Architectural Protocol is not already installed in the system
  • trunk/src/VBox/Devices/EFI/FirmwareNew/UefiCpuPkg/CpuTimerDxeRiscV64/Timer.h

    r101291 r105670  
    2626//
    2727#define DEFAULT_TIMER_TICK_DURATION  100000
     28
     29#define RISCV_CPU_FEATURE_SSTC_BITMASK  BIT1
    2830
    2931extern VOID
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette