On 11/12/14 14:30, Gabriel Somlo wrote:
> On Wed, 12 Nov 2014 12:23:04 +0100, Laszlo Ersek <ler...@redhat.com> wrote:
>> On 11/11/14 22:34, Gabriel Somlo wrote:
>>> On Sun, Nov 09, 2014 at 10:13:54AM -0800, Jordan Justen wrote:
>>>> On 2014-11-08 14:02:00, Gabriel L. Somlo wrote:
>>>>> +  //
>>>>> +  // Check to see if the Power Management Base Address is already enabled
>>>>> +  //
>>>>> +  if ((PciRead8 (PmRegMisc) & PMIOSE) == 0) {
>>>>> +    //
>>>>> +    // If the Power Management Base Address is not programmed,
>>>>> +    // then program the Power Management Base Address from a PCD.
>>>>> +    //
>>>>> +    PciAndThenOr32 (Pmba, (UINT32) ~0xFFC0, PcdGet16 
>>>>> (PcdAcpiPmBaseAddress));
>>>>> +
>>>>> +    //
>>>>> +    // Enable PMBA I/O port decodes in PMREGMISC
>>>>> +    //
>>>>> +    PciOr8 (PmRegMisc, PMIOSE);
>>>>
>>>> Wouldn't the 'Rom' version program this during SEC?
>>>>
>>>> I don't think we should access the PCD in BaseAcpiTimerLib.
>>>
>>> I seem to remember someone earlier in the thread mentioning that it's
>>> possible for SEC *not* to run, in which case it's PEI's job to enable
>>> PMBA. Laszlo ? :)
>>
>> SEC always runs, but whether or not SEC depends on TimerLib is
>> conditional on -D SOURCE_DEBUG_ENABLE. If it is absent, then the debug
>> agent is not pulled in (*), and then SEC doesn't inherit the TimerLib
>> dependency, and the BaseRomAcpiTimerLib constructor won't run in SEC.
> 
> Ah, I remember now :)
> 
>> (*) Meaning, DebugAgentLib is resolved to DebugAgentLibNull as opposed
>> to SecPeiDebugAgentLib.
>>
>> Please see
>> <http://thread.gmane.org/gmane.comp.bios.tianocore.devel/10859/focus=10897>.
>>
>> Jordan -- can you please go through that message, and see if you agree.
>> If we disagree on points in that message, we need to sort out that
>> first; otherwise we'll jerk Gabriel in different directions.
> 
> So, before I even touched anything, PMBA was being enabled either from
> AcpiTimerLib.c, or from PlatformPei/Platform.c, in MiscInitialization().
> 
> Commit d3a24ff5 removed a prior "mPmba" global from AcpiTimerLib.c to
> make it work when used from SEC due to SOURCE_DEBUG_ENABLE being set.
> 
> So basically there appear to be three ways for PMBA to require being
> enabled, of which SEC is an infrequent (but possible) one.

Correct. (a) If you use source level debugging, then SEC will include
TimerLib, whose constructor will enable PM during SEC.

Otherwise, PM will be enabled by either (b) PlatformPei (which doesn't
use TimerLib, but has explicit code for PM enablement), or, if another
PEIM that depends on TimerLib gets dispatched before PlatformPei, then
(c) by TimerLib's constructor again, running as part of that PEIM.

Thanks
Laszlo

------------------------------------------------------------------------------
Comprehensive Server Monitoring with Site24x7.
Monitor 10 servers for $9/Month.
Get alerted through email, SMS, voice calls or mobile push notifications.
Take corrective actions from your mobile device.
http://pubads.g.doubleclick.net/gampad/clk?id=154624111&iu=/4140/ostg.clktrk
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to