On 12 July 2016 at 15:07, Laszlo Ersek <ler...@redhat.com> wrote:
> On 07/12/16 15:00, Ard Biesheuvel wrote:
>> Redefine the reference to PcdSystemMemoryBase in HighMemDxe.inf as
>> a plain [Pcd] rather than [FixedPcd] (and fix up the code as
>> appropriate). This allows us to align ArmVirtQemuKernel with
>> ArmVirtQemu, given that the former uses a patchable PCD not a fixed
>> PCD.
>>
>> Contributed-under: TianoCore Contribution Agreement 1.0
>> Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
>> ---
>>
>> Apologies for the sloppiness on my part, but at least I caught it in time :-)
>>
>> This change is required before we can start using HighMemDxe in
>> ArmVirtQemuKernel.
>>
>>  ArmVirtPkg/HighMemDxe/HighMemDxe.c   | 2 +-
>>  ArmVirtPkg/HighMemDxe/HighMemDxe.inf | 2 +-
>>  2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/ArmVirtPkg/HighMemDxe/HighMemDxe.c 
>> b/ArmVirtPkg/HighMemDxe/HighMemDxe.c
>> index 4963164fbd8a..7fd7e8e9a539 100644
>> --- a/ArmVirtPkg/HighMemDxe/HighMemDxe.c
>> +++ b/ArmVirtPkg/HighMemDxe/HighMemDxe.c
>> @@ -74,7 +74,7 @@ InitializeHighMemDxe (
>>          CurBase = fdt64_to_cpu (((UINT64 *)RegProp)[0]);
>>          CurSize = fdt64_to_cpu (((UINT64 *)RegProp)[1]);
>>
>> -        if (FixedPcdGet64 (PcdSystemMemoryBase) != CurBase) {
>> +        if (PcdGet64 (PcdSystemMemoryBase) != CurBase) {
>>            Status = gDS->AddMemorySpace (
>>                            EfiGcdMemoryTypeSystemMemory,
>>                            CurBase, CurSize,
>> diff --git a/ArmVirtPkg/HighMemDxe/HighMemDxe.inf 
>> b/ArmVirtPkg/HighMemDxe/HighMemDxe.inf
>> index 2b397626a450..ae632a8bee93 100644
>> --- a/ArmVirtPkg/HighMemDxe/HighMemDxe.inf
>> +++ b/ArmVirtPkg/HighMemDxe/HighMemDxe.inf
>> @@ -45,7 +45,7 @@ [LibraryClasses]
>>  [Guids]
>>    gFdtHobGuid
>>
>> -[FixedPcd]
>> +[Pcd]
>>    gArmTokenSpaceGuid.PcdSystemMemoryBase
>>
>>  [Depex]
>>
>
> Reviewed-by: Laszlo Ersek <ler...@redhat.com>
>

Thanks.

> You might also want to port this driver to FdtClientProtocol down the
> road :)
>

Indeed, I realized the same when looking at the code. Another problem
is that this code assumes that each DT node with device_type=memory
describes a single range in its 'reg' property, but in reality, a
single node can describe several disjoint regions. As
Documentation/devicetree/booting-without-of.txt in the linux repo puts
it:

"""
[...]
You can either create a single node with all memory ranges in its reg
property, or you can create several nodes, as you wish.
[...]

Required properties:

- device_type : has to be "memory"
- reg : This property contains all the physical memory ranges of your
board. It's a list of addresses/sizes concatenated together, with the
number of cells of each defined by the #address-cells and #size-cells
of the root node.
"""

The problem is that I am not exactly sure under which circumstances
QEMU produces disjoint memory regions, so I have no simple way of
testing this.

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

Reply via email to