Blob Blame History Raw
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Avnish Chouhan <avnish@linux.vnet.ibm.com>
Date: Mon, 27 Mar 2023 12:25:40 +0530
Subject: [PATCH] kern/ieee1275/init: Extended support in Vec5
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

This patch enables multiple options in Vec5 which are required and
solves the boot issues seen on some machines which are looking for
these specific options.

1. LPAR: Client program supports logical partitioning and
   associated hcall()s.
2. SPLPAR: Client program supports the Shared
   Processor LPAR Option.
3. DYN_RCON_MEM: Client program supports the
   “ibm,dynamic-reconfiguration-memory” property and it may be
   presented in the device tree.
4. LARGE_PAGES: Client supports pages larger than 4 KB.
5. DONATE_DCPU_CLS: Client supports donating dedicated processor cycles.
6. PCI_EXP: Client supports PCI Express implementations
   utilizing Message Signaled Interrupts (MSIs).

7. CMOC: Enables the Cooperative Memory Over-commitment Option.
8. EXT_CMO: Enables the Extended Cooperative Memory Over-commit Option.

9. ASSOC_REF: Enables “ibm,associativity” and
   “ibm,associativity-reference-points” properties.
10. AFFINITY: Enables Platform Resource Reassignment Notification.
11. NUMA: Supports NUMA Distance Lookup Table Option.

12. HOTPLUG_INTRPT: Supports Hotplug Interrupts.
13. HPT_RESIZE: Enable Hash Page Table Resize Option.

14. MAX_CPU: Defines maximum number of CPUs supported.

15. PFO_HWRNG: Supports Random Number Generator.
16. PFO_HW_COMP: Supports Compression Engine.
17. PFO_ENCRYPT: Supports Encryption Engine.

18. SUB_PROCESSORS: Supports Sub-Processors.

19. DY_MEM_V2: Client program supports the “ibm,dynamic-memory-v2” property in the
    “ibm,dynamic-reconfiguration-memory” node and it may be presented in the device tree.
20. DRC_INFO: Client program supports the “ibm,drc-info” property definition and it may be
    presented in the device tree.

Signed-off-by: Avnish Chouhan <avnish@linux.vnet.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
(cherry picked from commit 98d0df0351fbff7a4acc64c7594d538889a43e2d)
---
 grub-core/kern/ieee1275/init.c | 47 ++++++++++++++++++++++++++++++++++++------
 1 file changed, 41 insertions(+), 6 deletions(-)

diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c
index 5d79580341..3d4ad9d1f1 100644
--- a/grub-core/kern/ieee1275/init.c
+++ b/grub-core/kern/ieee1275/init.c
@@ -72,11 +72,41 @@ extern char _end[];
 grub_addr_t grub_ieee1275_original_stack;
 #endif
 
-#define LPAR     0x80
-#define SPLPAR   0x40
-#define BYTE2    (LPAR | SPLPAR)
-#define CMO      0x80
-#define MAX_CPU  256
+/* Options vector5 properties. */
+
+#define LPAR                0x80
+#define SPLPAR              0x40
+#define DYN_RCON_MEM        0x20
+#define LARGE_PAGES         0x10
+#define DONATE_DCPU_CLS     0x02
+#define PCI_EXP             0x01
+#define BYTE2               (LPAR | SPLPAR | DYN_RCON_MEM | LARGE_PAGES | DONATE_DCPU_CLS | PCI_EXP)
+
+#define CMOC                0x80
+#define EXT_CMO             0x40
+#define CMO                 (CMOC | EXT_CMO)
+
+#define ASSOC_REF           0x80
+#define AFFINITY            0x40
+#define NUMA                0x20
+#define ASSOCIATIVITY       (ASSOC_REF | AFFINITY | NUMA)
+
+#define HOTPLUG_INTRPT      0x04
+#define HPT_RESIZE          0x01
+#define BIN_OPTS            (HOTPLUG_INTRPT | HPT_RESIZE)
+
+#define MAX_CPU             256
+
+#define PFO_HWRNG           0x80000000
+#define PFO_HW_COMP         0x40000000
+#define PFO_ENCRYPT         0x20000000
+#define PLATFORM_FACILITIES (PFO_HWRNG | PFO_HW_COMP | PFO_ENCRYPT)
+
+#define SUB_PROCESSORS      1
+
+#define DY_MEM_V2           0x80
+#define DRC_INFO            0x40
+#define BYTE22              (DY_MEM_V2 | DRC_INFO)
 
 void
 grub_exit (int rc __attribute__((unused)))
@@ -519,6 +549,11 @@ struct option_vector5
   grub_uint8_t micro_checkpoint;
   grub_uint8_t reserved0;
   grub_uint32_t max_cpus;
+  grub_uint16_t base_papr;
+  grub_uint16_t mem_reference;
+  grub_uint32_t platform_facilities;
+  grub_uint8_t sub_processors;
+  grub_uint8_t byte22;
 } GRUB_PACKED;
 
 struct pvr_entry
@@ -581,7 +616,7 @@ grub_ieee1275_ibm_cas (void)
     .vec4 = 0x0001, /* set required minimum capacity % to the lowest value */
     .vec5_size = 1 + sizeof (struct option_vector5) - 2,
     .vec5 = {
-      0, BYTE2, 0, CMO, 0, 0, 0, 0, MAX_CPU
+      0, BYTE2, 0, CMO, ASSOCIATIVITY, BIN_OPTS, 0, 0, MAX_CPU, 0, 0, PLATFORM_FACILITIES, SUB_PROCESSORS, BYTE22
     }
   };