> On Jun 13, 2015, at 1:52 AM, Sharma Bhupesh <bhupesh.sha...@freescale.com> 
> wrote:
> 
> Hi,
> 
> Can some ARM expert help me with my queries below.
> 
> The overall context is that I cannot get the 'ArmPlatformPkg/Bds/Bds.c' 
> auto-timeout to trigger.
> 
> The following snippet of code shows how the timeout is created as a event 
> using the CreateEvent and SetTimer APIs.
> 
> However I cannot the SetTimer API triggering a call to the corresponding 
> TimerDriverSetTimerPeriod API inside 'ArmPkg/Drivers/TimerDxe/TimerDxe.c’
> 

It does not work that way. The DXE Core has a periodic timer at a fixed 
interval. The event based timers are implemented on top of the periodic tick in 
software. 

https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdeModulePkg/Core/Dxe/Event/Timer.c
 
<https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdeModulePkg/Core/Dxe/Event/Timer.c>
The DXE Core registers CoreTimerTick() with the gEfiTimerArchProtocolGuid

https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c
 
<https://svn.code.sf.net/p/edk2/code/trunk/edk2/MdeModulePkg/Core/Dxe/DxeMain/DxeProtocolNotify.c>
  if (CompareGuid (Entry->ProtocolGuid, &gEfiTimerArchProtocolGuid)) {
    //
    // Register the Core timer tick handler with the Timer AP
    //
    gTimer->RegisterHandler (gTimer, CoreTimerTick);
  }

Thanks,

Andrew Fish

> if (Timeout != 0xFFFF) {
>    if (Timeout > 0) {
>      // Create the waiting events (keystroke and 1sec timer)
>      gBS->CreateEvent (EVT_TIMER, 0, NULL, NULL, &WaitList[0]);
>      gBS->SetTimer (WaitList[0], TimerPeriodic, EFI_SET_TIMER_TO_SECOND);
>      WaitList[1] = gST->ConIn->WaitForKey;
> 
>      // Start the timer
>      WaitIndex = 0;
>      Print(L"The default boot selection will start in ");
>      while ((Timeout > 0) && (WaitIndex == 0)) {
>        Print(L"%3d seconds",Timeout);
>        gBS->WaitForEvent (2, WaitList, &WaitIndex);
>        if (WaitIndex == 0) {
>          Print(L"\b\b\b\b\b\b\b\b\b\b\b");
>          Timeout--;
>        }
>      }
> 
> So, I just wanted to understand if the auto-timeout during boot works on 
> Juno-Rev1 and if yes, how does it connect to the underlying ArmArchTimerLib
> 
> Please help.
> 
>> -----Original Message-----
>> From: Sharma Bhupesh-B45370
>> Sent: Wednesday, June 10, 2015 4:01 PM
>> To: edk2-devel@lists.sourceforge.net; 'olivier.mar...@arm.com'
>> Subject: AARCH64: Timer Dxe
>> 
>> Hi Olivier,
>> 
>> 1. I am looking at the 'ArmPkg/Drivers/TimerDxe/TimerDxe.c' DXE driver
>> and seeing how the timer interrupts are registered:
>> 
>>  // Install secure and Non-secure interrupt handlers
>>  // Note: Because it is not possible to determine the security state of
>> the
>>  // CPU dynamically, we just install interrupt handler for both sec and
>> non-sec
>>  // timer PPI
>>  Status = gInterrupt->RegisterInterruptSource (gInterrupt, PcdGet32
>> (PcdArmArchTimerVirtIntrNum), TimerInterruptHandler);
>>  ASSERT_EFI_ERROR (Status);
>> 
>>  Status = gInterrupt->RegisterInterruptSource (gInterrupt, PcdGet32
>> (PcdArmArchTimerHypIntrNum), TimerInterruptHandler);
>>  ASSERT_EFI_ERROR (Status);
>> 
>>  Status = gInterrupt->RegisterInterruptSource (gInterrupt, PcdGet32
>> (PcdArmArchTimerSecIntrNum), TimerInterruptHandler);
>>  ASSERT_EFI_ERROR (Status);
>> 
>>  Status = gInterrupt->RegisterInterruptSource (gInterrupt, PcdGet32
>> (PcdArmArchTimerIntrNum), TimerInterruptHandler);
>>  ASSERT_EFI_ERROR (Status);
>> 
>> I wanted to understand how the Interrupt registration changes for PPI or
>> SPI interrupt sources.
>> As usually the Virtual, Hypervisor, Physical and Physical Non-Secure
>> interrupts are PPI does the PPI number need to be defined as the PCD
>> values in the same way as linux. The Linux gicv3 documentation says
>> (Documentation/devicetree/bindings/arm/gic-v3.txt):
>> 
>> SPI interrupts are in the range [0-987]. PPI interrupts are in the range
>> [0-15].
>> 
>> 2. Also one related question is whether on Juno Rev1, you are able to get
>> the BootDelay to work via timer based events? If yes, can you please
>> share if you achieve this by using the ARMv8 generic timer or the SP804
>> timer.
>> 
> 
> Regards,
> Bhupesh
> 
> ------------------------------------------------------------------------------
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/edk2-devel

------------------------------------------------------------------------------
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to