]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ArmVirtPkg/FdtClientDxe: report address and size cell count directly
authorArd Biesheuvel <ard.biesheuvel@linaro.org>
Thu, 15 Sep 2016 13:15:14 +0000 (14:15 +0100)
committerArd Biesheuvel <ard.biesheuvel@linaro.org>
Thu, 15 Sep 2016 14:31:24 +0000 (15:31 +0100)
The FDT client protocol methods dealing with "reg" properties return
the size of a "reg" element. Currently, we have hardcoded this as '8',
since #address-cells == #size-cells == 2 in most cases. However, for
different values, have a single 'reg' element size is not unambiguous,
since - however unlikely - if #address-cells != #size-cells, we do not
know which is which.

So before adding more methods to the protocol, fix up this oversight.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
ArmVirtPkg/FdtClientDxe/FdtClientDxe.c
ArmVirtPkg/Include/Protocol/FdtClient.h
ArmVirtPkg/Library/ArmVirtGicArchLib/ArmVirtGicArchLib.c
ArmVirtPkg/Library/QemuFwCfgLib/QemuFwCfgLib.c
ArmVirtPkg/XenAcpiPlatformDxe/XenAcpiPlatformDxe.c
ArmVirtPkg/XenioFdtDxe/XenioFdtDxe.c

index 2063a597323b6cccd2d089324af73907a2c84982..382e9af6bf845d9b9f434a737a6903f4495a3813 100644 (file)
@@ -159,7 +159,8 @@ FindCompatibleNodeReg (
   IN  FDT_CLIENT_PROTOCOL     *This,\r
   IN  CONST CHAR8             *CompatibleString,\r
   OUT CONST VOID              **Reg,\r
-  OUT UINT32                  *RegElemSize,\r
+  OUT UINTN                   *AddressCells,\r
+  OUT UINTN                   *SizeCells,\r
   OUT UINT32                  *RegSize\r
   )\r
 {\r
@@ -185,7 +186,8 @@ FindCompatibleNodeReg (
     return EFI_NOT_FOUND;\r
   }\r
 \r
-  *RegElemSize = 8;\r
+  *AddressCells = 2;\r
+  *SizeCells = 2;\r
 \r
   return EFI_SUCCESS;\r
 }\r
index 79a8f3ce1b5d2b86a82b9bc040e9c70a11df9b7b..b593c7441426c7d5bbd3299b94c7bc41feeefa0f 100644 (file)
@@ -80,7 +80,8 @@ EFI_STATUS
   IN  FDT_CLIENT_PROTOCOL     *This,\r
   IN  CONST CHAR8             *CompatibleString,\r
   OUT CONST VOID              **Reg,\r
-  OUT UINT32                  *RegElemSize,\r
+  OUT UINTN                   *AddressCells,\r
+  OUT UINTN                   *SizeCells,\r
   OUT UINT32                  *RegSize\r
   );\r
 \r
index a1cd2da2d43a29e18b8c1fa33cd7a1f0bb0f679e..64afc4de6b4d75de43e42470ad2572cae1c35478 100644 (file)
@@ -36,7 +36,8 @@ ArmVirtGicArchLibConstructor (
   UINT32                IccSre;\r
   FDT_CLIENT_PROTOCOL   *FdtClient;\r
   CONST UINT64          *Reg;\r
-  UINT32                RegElemSize, RegSize;\r
+  UINT32                RegSize;\r
+  UINTN                 AddressCells, SizeCells;\r
   UINTN                 GicRevision;\r
   EFI_STATUS            Status;\r
   UINT64                DistBase, CpuBase, RedistBase;\r
@@ -47,11 +48,13 @@ ArmVirtGicArchLibConstructor (
 \r
   GicRevision = 2;\r
   Status = FdtClient->FindCompatibleNodeReg (FdtClient, "arm,cortex-a15-gic",\r
-                        (CONST VOID **)&Reg, &RegElemSize, &RegSize);\r
+                        (CONST VOID **)&Reg, &AddressCells, &SizeCells,\r
+                        &RegSize);\r
   if (Status == EFI_NOT_FOUND) {\r
     GicRevision = 3;\r
     Status = FdtClient->FindCompatibleNodeReg (FdtClient, "arm,gic-v3",\r
-                          (CONST VOID **)&Reg, &RegElemSize, &RegSize);\r
+                          (CONST VOID **)&Reg, &AddressCells, &SizeCells,\r
+                          &RegSize);\r
   }\r
   if (EFI_ERROR (Status)) {\r
     return Status;\r
index 377262563e3e16a34a7e71e1bd06c8794faf471b..8ecbe3fb5fe6f64d13d3e5e8f9795c31a8adf52b 100644 (file)
@@ -122,7 +122,8 @@ QemuFwCfgInitialize (
   EFI_STATUS                    Status;\r
   FDT_CLIENT_PROTOCOL           *FdtClient;\r
   CONST UINT64                  *Reg;\r
-  UINT32                        RegElemSize, RegSize;\r
+  UINT32                        RegSize;\r
+  UINTN                         AddressCells, SizeCells;\r
   UINT64                        FwCfgSelectorAddress;\r
   UINT64                        FwCfgSelectorSize;\r
   UINT64                        FwCfgDataAddress;\r
@@ -135,7 +136,8 @@ QemuFwCfgInitialize (
   ASSERT_EFI_ERROR (Status);\r
 \r
   Status = FdtClient->FindCompatibleNodeReg (FdtClient, "qemu,fw-cfg-mmio",\r
-                         (CONST VOID **)&Reg, &RegElemSize, &RegSize);\r
+                         (CONST VOID **)&Reg, &AddressCells, &SizeCells,\r
+                         &RegSize);\r
   if (EFI_ERROR (Status)) {\r
     DEBUG ((EFI_D_WARN,\r
       "%a: No 'qemu,fw-cfg-mmio' compatible DT node found (Status == %r)\n",\r
@@ -143,7 +145,8 @@ QemuFwCfgInitialize (
     return EFI_SUCCESS;\r
   }\r
 \r
-  ASSERT (RegElemSize == sizeof (UINT64));\r
+  ASSERT (AddressCells == 2);\r
+  ASSERT (SizeCells == 2);\r
   ASSERT (RegSize == 2 * sizeof (UINT64));\r
 \r
   FwCfgDataAddress     = SwapBytes64 (Reg[0]);\r
index 37aea806283e1bd873a36fa896081ff6612dc659..203946f97bf812c514fee1805eb38b9b60b30f9b 100644 (file)
@@ -45,7 +45,8 @@ GetXenArmAcpiRsdp (
   EFI_STATUS                                     Status;\r
   FDT_CLIENT_PROTOCOL                            *FdtClient;\r
   CONST UINT64                                   *Reg;\r
-  UINT32                                         RegElemSize, RegSize;\r
+  UINT32                                         RegSize;\r
+  UINTN                                          AddressCells, SizeCells;\r
   UINT64                                         RegBase;\r
   UINT8                                          Sum;\r
 \r
@@ -59,13 +60,16 @@ GetXenArmAcpiRsdp (
   ASSERT_EFI_ERROR (Status);\r
 \r
   Status = FdtClient->FindCompatibleNodeReg (FdtClient, "xen,guest-acpi",\r
-                        (CONST VOID **)&Reg, &RegElemSize, &RegSize);\r
+                        (CONST VOID **)&Reg, &AddressCells, &SizeCells,\r
+                        &RegSize);\r
   if (EFI_ERROR (Status)) {\r
     DEBUG ((EFI_D_WARN, "%a: No 'xen,guest-acpi' compatible DT node found\n",\r
       __FUNCTION__));\r
     return EFI_NOT_FOUND;\r
   }\r
 \r
+  ASSERT (AddressCells == 2);\r
+  ASSERT (SizeCells == 2);\r
   ASSERT (RegSize == 2 * sizeof (UINT64));\r
 \r
   RegBase = SwapBytes64(Reg[0]);\r
index 4a88db32170cf9c41068228c19e70c707342083e..ae012a76f5e08c16f5b9f92a27f4415fa6bbe08b 100644 (file)
@@ -31,7 +31,8 @@ InitializeXenioFdtDxe (
   EFI_STATUS            Status;\r
   FDT_CLIENT_PROTOCOL   *FdtClient;\r
   CONST UINT64          *Reg;\r
-  UINT32                RegElemSize, RegSize;\r
+  UINT32                RegSize;\r
+  UINTN                 AddressCells, SizeCells;\r
   EFI_HANDLE            Handle;\r
   UINT64                RegBase;\r
 \r
@@ -40,14 +41,17 @@ InitializeXenioFdtDxe (
   ASSERT_EFI_ERROR (Status);\r
 \r
   Status = FdtClient->FindCompatibleNodeReg (FdtClient, "xen,xen",\r
-                        (CONST VOID **)&Reg, &RegElemSize, &RegSize);\r
+                        (CONST VOID **)&Reg, &AddressCells, &SizeCells,\r
+                        &RegSize);\r
   if (EFI_ERROR (Status)) {\r
     DEBUG ((EFI_D_WARN, "%a: No 'xen,xen' compatible DT node found\n",\r
       __FUNCTION__));\r
     return EFI_UNSUPPORTED;\r
   }\r
 \r
-  ASSERT (RegSize == 16);\r
+  ASSERT (AddressCells == 2);\r
+  ASSERT (SizeCells == 2);\r
+  ASSERT (RegSize == 2 * sizeof (UINT64));\r
 \r
   //\r
   // Retrieve the reg base from this node and wire it up to the\r