On 01/08/16 04:10, Shannon Zhao wrote:
> 
> 
> On 2016/1/7 22:25, Laszlo Ersek wrote:
>> On 01/07/16 10:31, Shannon Zhao wrote:
>>>>
>>>>
>>>> On 2016/1/7 16:16, Ard Biesheuvel wrote:
>>>>>> On 7 January 2016 at 03:47, Shannon Zhao <zhaoshengl...@huawei.com> 
>>>>>> wrote:
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I notice that when booting with DTS UEFI will disable RTC device 
>>>>>>>>>> PL031
>>>>>>>>>> in the DTS by following codes. And it turns out that only rtc-efi 
>>>>>>>>>> shows
>>>>>>>>>> up in guest.
>>>>>>>>>>
>>>>>>>>>> //
>>>>>>>>>> // UEFI takes ownership of the RTC hardware, and exposes its 
>>>>>>>>>> functionality
>>>>>>>>>> // through the UEFI Runtime Services GetTime, SetTime, etc. This 
>>>>>>>>>> means we
>>>>>>>>>> // need to disable it in the device tree to prevent the OS from
>>>>>>>>>> attaching its
>>>>>>>>>> // device driver as well.
>>>>>>>>>> //
>>>>>>>>>> if ((RtcNode != -1) &&
>>>>>>>>>>     fdt_setprop_string (DeviceTreeBase, RtcNode, "status",
>>>>>>>>>>         "disabled") != 0) {
>>>>>>>>>>   DEBUG ((EFI_D_WARN, "Failed to set PL031 status to 'disabled'\n"));
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> But when booting with ACPI, there are two RTC devices, rtc-efi and
>>>>>>>>>> PL031(PL031 shows up when kenrel PL031 driver adds support to probe 
>>>>>>>>>> it
>>>>>>>>>> via ACPI). And I didn't see any codes in UEFI to handle the RTC node 
>>>>>>>>>> in
>>>>>>>>>> ACPI table.
>>>>>>>>>>
>>>>>>>>>> I think it's hard to modify the DSDT table in UEFI since there is 
>>>>>>>>>> not a
>>>>>>>>>> ACPI lib like libfdt. But for consistency, does it need to handle it 
>>>>>>>>>> too
>>>>>>>>>> when booting with ACPI?
>>>>>>>>>>
>>>>>> Yes, it should. I didn't spot this before, or I would have said 
>>>>>> something.
>>>>>>
>>>>>> As long as the firmware is driving the RTC, the OS should not be able
>>>>>> to attach its driver directly, ACPI or DT alike.
>>>>
>>>> Is there a way to parse DSDT in UEFI or other ways we could use to mask
>>>> the RTC device? I think maybe we could use the STAO table or something
>>>> like it which is added by ACPI 6.0.
>> Let's see what ways there are for booting an ARM / AARCH64 guest
>> ("virt") machine type:
>>
>> (1) QEMU's builtin (minimal) firmware, and nothing else. There is
>> nothing to *consume* ACPI.
>>
>> (2) QEMU's builtin (minimal) firmware, and a directly booted kernel
>> (-kernel option). The kernel gets only a DTB -- there is no
>> architecturally defined way to expose ACPI to the kernel.
>>
>> (3) explicit firmware (-bios or -pflash option), and whatever gets
>> booted by the firmware. Firmware here means UEFI, period. The guest OS
>> gets both DTB and ACPI (unless disabled by -no-acpi).
>>
>> (4) explicit firmware (-bios or -pflash opton) plus an immediately
>> booted fw_cfg kernel (i.e. -kernel option as well). Firmware again means
>> UEFI, the guest OS gets again both DTB and ACPI (unless disabled by
>> -no-acpi).
>>
>> So here's what I suggest:
>>
>> - modify QEMU to drop the RTC device specification from *both* the DTB
>> and the ACPI generator *if* an explicit firmware is passed (with -bios
>> or -pflash). Because this means UEFI, and UEFI will take control of the
>> RTC. Cases (1) and (2) are unaffected, and cases (3) and (4) are handled
>> correctly.
>>
>> - modify ArmVirtPkg to remove the above quoted disabling -- QEMU should
>> handle it for the DTB as well.
>>
>> See QEMU commit 07abe45c4814, and the "arm_boot_info.firmware_loaded"
>> field -- that could be used to control the DTB and ACPI generators.
> 
> I'm a bit worried that this way is a little UEFI specific. If there is
> another firmware in the future which has a different way to handle RTC,
> this will not work. Or I'm over worried?

How long did it take ARM (the architecture) to grow *one* standardized
firmware? :)

Anyhow, I guess a -machine sub-option could be introduced (later) that
controls the generation of the RTC ACPI device directly. (For now, the
default should be as described above, I think.)

Thanks
Laszlo

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to