From: Jan Kiszka <[email protected]>

Signed-off-by: Jan Kiszka <[email protected]>
---
 configs/arm64/amd-seattle-inmate-demo.c       |  8 ++-
 configs/arm64/amd-seattle-linux-demo.c        | 11 +++-
 configs/arm64/amd-seattle.c                   | 29 +++++++++-
 configs/arm64/espressobin-inmate-demo.c       | 10 ++--
 configs/arm64/espressobin-linux-demo.c        | 10 ++--
 configs/arm64/espressobin.c                   | 13 +++--
 configs/arm64/foundation-v8-inmate-demo.c     |  8 ++-
 configs/arm64/foundation-v8-linux-demo.c      | 11 +++-
 configs/arm64/foundation-v8.c                 | 17 +++++-
 configs/arm64/hikey-inmate-demo.c             | 10 ++--
 configs/arm64/hikey-linux-demo.c              | 13 +++--
 configs/arm64/hikey.c                         | 31 +++++++++--
 configs/arm64/imx8dxl-inmate-demo.c           |  8 ++-
 configs/arm64/imx8dxl.c                       | 13 +++--
 configs/arm64/imx8mm-inmate-demo.c            |  8 ++-
 configs/arm64/imx8mm-linux-demo.c             | 11 +++-
 configs/arm64/imx8mm.c                        | 19 +++++--
 configs/arm64/imx8mn-inmate-demo.c            |  8 ++-
 configs/arm64/imx8mn-linux-demo.c             | 11 +++-
 configs/arm64/imx8mn.c                        | 19 +++++--
 configs/arm64/imx8mp-inmate-demo.c            |  8 ++-
 configs/arm64/imx8mp-linux-demo.c             | 11 +++-
 configs/arm64/imx8mp.c                        | 19 +++++--
 configs/arm64/imx8mq-inmate-demo.c            |  8 ++-
 configs/arm64/imx8mq-linux-demo.c             | 11 +++-
 configs/arm64/imx8mq.c                        | 19 +++++--
 configs/arm64/imx8qm-inmate-demo.c            |  8 ++-
 configs/arm64/imx8qm-linux-demo.c             | 11 +++-
 configs/arm64/imx8qm.c                        | 25 +++++++--
 configs/arm64/jetson-tx1-inmate-demo.c        |  8 ++-
 configs/arm64/jetson-tx1-linux-demo.c         | 11 +++-
 configs/arm64/jetson-tx1.c                    | 17 +++++-
 configs/arm64/jetson-tx2-inmate-demo.c        |  8 ++-
 configs/arm64/jetson-tx2.c                    | 17 +++++-
 configs/arm64/k3-am625-sk-inmate-demo.c       |  8 ++-
 configs/arm64/k3-am625-sk-linux-demo.c        | 11 +++-
 configs/arm64/k3-am625-sk.c                   | 17 +++++-
 configs/arm64/k3-am654-idk-inmate-demo.c      |  8 ++-
 configs/arm64/k3-am654-idk-linux-demo.c       | 11 +++-
 configs/arm64/k3-am654-idk.c                  | 17 +++++-
 configs/arm64/k3-j7200-evm-inmate-demo.c      |  8 ++-
 configs/arm64/k3-j7200-evm-linux-demo.c       |  8 ++-
 configs/arm64/k3-j7200-evm.c                  | 11 +++-
 configs/arm64/k3-j721e-evm-inmate-demo.c      |  8 ++-
 configs/arm64/k3-j721e-evm-linux-demo.c       |  8 ++-
 configs/arm64/k3-j721e-evm.c                  | 11 +++-
 configs/arm64/ls1028a-rdb-inmate-demo.c       |  8 ++-
 configs/arm64/ls1028a-rdb-linux-demo.c        |  8 ++-
 configs/arm64/ls1028a-rdb.c                   | 13 +++--
 configs/arm64/ls1043a-rdb-dpaa-linux-demo.c   | 11 +++-
 configs/arm64/ls1043a-rdb-inmate-demo.c       |  8 ++-
 configs/arm64/ls1043a-rdb-linux-demo.c        | 11 +++-
 configs/arm64/ls1043a-rdb.c                   | 19 +++++--
 configs/arm64/ls1046a-rdb-inmate-demo.c       |  8 ++-
 configs/arm64/ls1046a-rdb-linux-demo.c        | 11 +++-
 configs/arm64/ls1046a-rdb.c                   | 19 +++++--
 configs/arm64/ls1088a-rdb-inmate-demo.c       |  8 ++-
 configs/arm64/ls1088a-rdb-linux-demo.c        | 11 +++-
 configs/arm64/ls1088a-rdb.c                   | 29 +++++++++-
 configs/arm64/ls2088a-rdb-inmate-demo.c       |  8 ++-
 configs/arm64/ls2088a-rdb-linux-demo.c        | 11 +++-
 configs/arm64/ls2088a-rdb.c                   | 29 +++++++++-
 configs/arm64/macchiatobin-inmate-demo.c      | 10 ++--
 configs/arm64/macchiatobin-linux-demo.c       | 13 +++--
 configs/arm64/macchiatobin.c                  | 19 +++++--
 .../arm64/miriac-sbc-ls1046a-inmate-demo.c    |  8 ++-
 configs/arm64/miriac-sbc-ls1046a-linux-demo.c | 11 +++-
 configs/arm64/miriac-sbc-ls1046a.c            | 17 +++++-
 configs/arm64/pine64-plus-inmate-demo.c       |  8 ++-
 configs/arm64/pine64-plus-linux-demo.c        | 11 +++-
 configs/arm64/pine64-plus.c                   | 17 +++++-
 configs/arm64/qemu-arm64-inmate-demo.c        | 10 ++--
 configs/arm64/qemu-arm64-linux-demo.c         | 13 +++--
 configs/arm64/qemu-arm64-zephyr-demo.c        | 11 +++-
 configs/arm64/qemu-arm64.c                    | 55 +++++++++++++++++--
 configs/arm64/renesas-r8a774a1-inmate-demo.c  |  8 ++-
 configs/arm64/renesas-r8a774a1-linux-demo.c   | 17 +++++-
 configs/arm64/renesas-r8a774a1.c              | 23 +++++++-
 configs/arm64/rpi4-inmate-demo.c              | 10 ++--
 configs/arm64/rpi4-linux-demo.c               | 13 +++--
 configs/arm64/rpi4.c                          | 19 +++++--
 configs/arm64/ultra96-inmate-demo.c           | 10 ++--
 configs/arm64/ultra96-linux-demo.c            | 13 +++--
 configs/arm64/ultra96.c                       | 19 +++++--
 configs/arm64/zynqmp-zcu102-inmate-demo.c     | 10 ++--
 configs/arm64/zynqmp-zcu102-linux-demo-2.c    | 10 ++--
 configs/arm64/zynqmp-zcu102-linux-demo.c      | 13 +++--
 configs/arm64/zynqmp-zcu102.c                 | 19 +++++--
 88 files changed, 879 insertions(+), 295 deletions(-)

diff --git a/configs/arm64/amd-seattle-inmate-demo.c 
b/configs/arm64/amd-seattle-inmate-demo.c
index c5b8b1f9..9b82e070 100644
--- a/configs/arm64/amd-seattle-inmate-demo.c
+++ b/configs/arm64/amd-seattle-inmate-demo.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x10,
+               {
+                       .phys_id = 0x0200,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/amd-seattle-linux-demo.c 
b/configs/arm64/amd-seattle-linux-demo.c
index 7ddcaa45..8f8671a4 100644
--- a/configs/arm64/amd-seattle-linux-demo.c
+++ b/configs/arm64/amd-seattle-linux-demo.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[12];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -30,7 +30,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -44,7 +44,12 @@ struct {
        },
 
        .cpus = {
-               0xc0,
+               {
+                       .phys_id = 0x0300,
+               },
+               {
+                       .phys_id = 0x0301,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/amd-seattle.c b/configs/arm64/amd-seattle.c
index 7a65d9ad..97127ff6 100644
--- a/configs/arm64/amd-seattle.c
+++ b/configs/arm64/amd-seattle.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[8];
        struct jailhouse_memory mem_regions[20];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[3];
@@ -53,7 +53,7 @@ struct {
                .root_cell = {
                        .name = "amd-seattle",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -61,7 +61,30 @@ struct {
        },
 
        .cpus = {
-               0xff,
+               {
+                       .phys_id = 0x0000,
+               },
+               {
+                       .phys_id = 0x0001,
+               },
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
+               {
+                       .phys_id = 0x0200,
+               },
+               {
+                       .phys_id = 0x0201,
+               },
+               {
+                       .phys_id = 0x0300,
+               },
+               {
+                       .phys_id = 0x0301,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/espressobin-inmate-demo.c 
b/configs/arm64/espressobin-inmate-demo.c
index b93d8cdb..d6a19ecd 100644
--- a/configs/arm64/espressobin-inmate-demo.c
+++ b/configs/arm64/espressobin-inmate-demo.c
@@ -4,7 +4,7 @@
  * Configuration for demo inmate on Marvell ESPRESSObin board:
  * 1 CPU, 64K RAM, 1 serial port
  *
- * Copyright (c) Siemens AG, 2017
+ * Copyright (c) Siemens AG, 2017-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/espressobin-linux-demo.c 
b/configs/arm64/espressobin-linux-demo.c
index 3f3806ed..801917b2 100644
--- a/configs/arm64/espressobin-linux-demo.c
+++ b/configs/arm64/espressobin-linux-demo.c
@@ -4,7 +4,7 @@
  * Configuration for linux-demo inmate on ESPRESSObin:
  * 1 CPU, 128M RAM, serial port
  *
- * Copyright (c) Siemens AG, 2014-2017
+ * Copyright (c) Siemens AG, 2014-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -30,7 +30,7 @@ struct {
                .name = "ESPRESSObin-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -46,7 +46,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/espressobin.c b/configs/arm64/espressobin.c
index dc03ac80..0d7e50c6 100644
--- a/configs/arm64/espressobin.c
+++ b/configs/arm64/espressobin.c
@@ -3,7 +3,7 @@
  *
  * Configuration for Marvell ESPRESSObin board
  *
- * Copyright (c) Siemens AG, 2017
+ * Copyright (c) Siemens AG, 2017-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[7];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -55,7 +55,7 @@ struct {
                .root_cell = {
                        .name = "ESPRESSObin",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -65,7 +65,12 @@ struct {
        },
 
        .cpus = {
-               0x3,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/foundation-v8-inmate-demo.c 
b/configs/arm64/foundation-v8-inmate-demo.c
index bd4e7751..3dfaf92c 100644
--- a/configs/arm64/foundation-v8-inmate-demo.c
+++ b/configs/arm64/foundation-v8-inmate-demo.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/foundation-v8-linux-demo.c 
b/configs/arm64/foundation-v8-linux-demo.c
index c101628c..25ce37c2 100644
--- a/configs/arm64/foundation-v8-linux-demo.c
+++ b/configs/arm64/foundation-v8-linux-demo.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[3];
        struct jailhouse_irqchip irqchips[1];
 } __attribute__((packed)) config = {
@@ -29,7 +29,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 1,
                .num_pci_devices = 0,
@@ -43,7 +43,12 @@ struct {
        },
 
        .cpus = {
-               0xc, /* 2nd and 3rd CPUs */
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        /* Physical memory map:
diff --git a/configs/arm64/foundation-v8.c b/configs/arm64/foundation-v8.c
index c32424a0..9dccda0d 100644
--- a/configs/arm64/foundation-v8.c
+++ b/configs/arm64/foundation-v8.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[9];
        struct jailhouse_irqchip irqchips[3];
 } __attribute__((packed)) config = {
@@ -54,14 +54,25 @@ struct {
                .root_cell = {
                        .name = "foundation-v8",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                },
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/hikey-inmate-demo.c 
b/configs/arm64/hikey-inmate-demo.c
index f7e62178..41d23c33 100644
--- a/configs/arm64/hikey-inmate-demo.c
+++ b/configs/arm64/hikey-inmate-demo.c
@@ -4,7 +4,7 @@
  * Configuration for demo inmate on LeMaker HiKey board, 2GiB:
  * 1 CPU, 64K RAM, 1 serial port
  *
- * Copyright (c) Siemens AG, 2016
+ * Copyright (c) Siemens AG, 2016-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x10,
+               {
+                       .phys_id = 0x0100,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/hikey-linux-demo.c b/configs/arm64/hikey-linux-demo.c
index d3dcd7c4..5701d6f3 100644
--- a/configs/arm64/hikey-linux-demo.c
+++ b/configs/arm64/hikey-linux-demo.c
@@ -4,7 +4,7 @@
  * Configuration for linux-demo inmate on HiKey:
  * 1 CPU, 128M RAM, serial port 3
  *
- * Copyright (c) Siemens AG, 2014-2016
+ * Copyright (c) Siemens AG, 2014-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -30,7 +30,7 @@ struct {
                .name = "hikey-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -46,7 +46,12 @@ struct {
        },
 
        .cpus = {
-               0xc0,
+               {
+                       .phys_id = 0x0102,
+               },
+               {
+                       .phys_id = 0x0103,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/hikey.c b/configs/arm64/hikey.c
index 996f5340..a574778b 100644
--- a/configs/arm64/hikey.c
+++ b/configs/arm64/hikey.c
@@ -3,7 +3,7 @@
  *
  * Configuration for LeMaker HiKey board, 2 GB
  *
- * Copyright (c) Siemens AG, 2016
+ * Copyright (c) Siemens AG, 2016-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[8];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -54,7 +54,7 @@ struct {
                .root_cell = {
                        .name = "HiKey",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -64,7 +64,30 @@ struct {
        },
 
        .cpus = {
-               0xff,
+               {
+                       .phys_id = 0x0000,
+               },
+               {
+                       .phys_id = 0x0001,
+               },
+               {
+                       .phys_id = 0x0002,
+               },
+               {
+                       .phys_id = 0x0003,
+               },
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
+               {
+                       .phys_id = 0x0102,
+               },
+               {
+                       .phys_id = 0x0103,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8dxl-inmate-demo.c 
b/configs/arm64/imx8dxl-inmate-demo.c
index 3d2296d7..6aa1c03a 100644
--- a/configs/arm64/imx8dxl-inmate-demo.c
+++ b/configs/arm64/imx8dxl-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
 #else
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 #endif
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -41,7 +41,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8dxl.c b/configs/arm64/imx8dxl.c
index 77c0b5a1..d70abadb 100644
--- a/configs/arm64/imx8dxl.c
+++ b/configs/arm64/imx8dxl.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[15];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[2];
@@ -50,16 +50,21 @@ struct {
                },
                .root_cell = {
                        .name = "imx8dxl",
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        .vpci_irq_base = 2, /* Not include 32 base */
                },
        },
 
        .cpus = {
-               0x3,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mm-inmate-demo.c 
b/configs/arm64/imx8mm-inmate-demo.c
index ef4f187a..c81598ae 100644
--- a/configs/arm64/imx8mm-inmate-demo.c
+++ b/configs/arm64/imx8mm-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mm-linux-demo.c 
b/configs/arm64/imx8mm-linux-demo.c
index f3cc312c..dfb80877 100644
--- a/configs/arm64/imx8mm-linux-demo.c
+++ b/configs/arm64/imx8mm-linux-demo.c
@@ -20,7 +20,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[15];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -32,7 +32,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -40,7 +40,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mm.c b/configs/arm64/imx8mm.c
index 966d94b0..096b7ab2 100644
--- a/configs/arm64/imx8mm.c
+++ b/configs/arm64/imx8mm.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[16];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[2];
@@ -59,16 +59,27 @@ struct {
                .root_cell = {
                        .name = "imx8mm",
 
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        .vpci_irq_base = 51, /* Not include 32 base */
                },
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mn-inmate-demo.c 
b/configs/arm64/imx8mn-inmate-demo.c
index e3f04f07..fa65c97f 100644
--- a/configs/arm64/imx8mn-inmate-demo.c
+++ b/configs/arm64/imx8mn-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -43,7 +43,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mn-linux-demo.c 
b/configs/arm64/imx8mn-linux-demo.c
index cdbb5481..1c0180a5 100644
--- a/configs/arm64/imx8mn-linux-demo.c
+++ b/configs/arm64/imx8mn-linux-demo.c
@@ -20,7 +20,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[15];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -32,7 +32,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -40,7 +40,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mn.c b/configs/arm64/imx8mn.c
index e47e7ad1..880875db 100644
--- a/configs/arm64/imx8mn.c
+++ b/configs/arm64/imx8mn.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[16];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[2];
@@ -54,16 +54,27 @@ struct {
                .root_cell = {
                        .name = "imx8mm",
 
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        .vpci_irq_base = 123, /* Not include 32 base */
                },
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mp-inmate-demo.c 
b/configs/arm64/imx8mp-inmate-demo.c
index e5355833..0ec8c937 100644
--- a/configs/arm64/imx8mp-inmate-demo.c
+++ b/configs/arm64/imx8mp-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -43,7 +43,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mp-linux-demo.c 
b/configs/arm64/imx8mp-linux-demo.c
index d208714c..d822f99d 100644
--- a/configs/arm64/imx8mp-linux-demo.c
+++ b/configs/arm64/imx8mp-linux-demo.c
@@ -20,7 +20,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[23];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[4];
@@ -32,7 +32,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -40,7 +40,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mp.c b/configs/arm64/imx8mp.c
index ec94fc6e..6e6983b6 100644
--- a/configs/arm64/imx8mp.c
+++ b/configs/arm64/imx8mp.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[23];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[4];
@@ -54,17 +54,28 @@ struct {
                .root_cell = {
                        .name = "imx8mp",
 
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        /* gpt5/4/3/2 not used by root cell */
                        .vpci_irq_base = 51, /* Not include 32 base */
                },
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mq-inmate-demo.c 
b/configs/arm64/imx8mq-inmate-demo.c
index cbb3a01e..6af2d7e6 100644
--- a/configs/arm64/imx8mq-inmate-demo.c
+++ b/configs/arm64/imx8mq-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mq-linux-demo.c 
b/configs/arm64/imx8mq-linux-demo.c
index 04aea30d..dc4ffc6f 100644
--- a/configs/arm64/imx8mq-linux-demo.c
+++ b/configs/arm64/imx8mq-linux-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[15];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -27,7 +27,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -35,7 +35,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8mq.c b/configs/arm64/imx8mq.c
index e51683ae..27cbeba9 100644
--- a/configs/arm64/imx8mq.c
+++ b/configs/arm64/imx8mq.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[14];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[2];
@@ -54,16 +54,27 @@ struct {
                .root_cell = {
                        .name = "imx8mq",
 
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        .vpci_irq_base = 51, /* Not include 32 base */
                },
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8qm-inmate-demo.c 
b/configs/arm64/imx8qm-inmate-demo.c
index effd7b80..959e458c 100644
--- a/configs/arm64/imx8qm-inmate-demo.c
+++ b/configs/arm64/imx8qm-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8qm-linux-demo.c 
b/configs/arm64/imx8qm-linux-demo.c
index b0e8eaf5..c6ddb5ec 100644
--- a/configs/arm64/imx8qm-linux-demo.c
+++ b/configs/arm64/imx8qm-linux-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[18];
        struct jailhouse_irqchip irqchips[4];
        struct jailhouse_pci_device pci_devices[2];
@@ -28,7 +28,7 @@ struct {
                .name = "imx8qm-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_stream_ids = ARRAY_SIZE(config.stream_ids),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
@@ -37,7 +37,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/imx8qm.c b/configs/arm64/imx8qm.c
index 9cb3c278..85482917 100644
--- a/configs/arm64/imx8qm.c
+++ b/configs/arm64/imx8qm.c
@@ -16,7 +16,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[6];
        struct jailhouse_memory mem_regions[15];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[2];
@@ -68,11 +68,11 @@ struct {
                .root_cell = {
                        .name = "imx8qm",
 
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_stream_ids = ARRAY_SIZE(config.stream_ids),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        /*
                         * vpci_irq_base not include base 32
                         */
@@ -81,7 +81,24 @@ struct {
        },
 
        .cpus = {
-               0x3f,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
+               {
+                       .phys_id = 4,
+               },
+               {
+                       .phys_id = 5,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/jetson-tx1-inmate-demo.c 
b/configs/arm64/jetson-tx1-inmate-demo.c
index 8b13148d..3ea95ae1 100644
--- a/configs/arm64/jetson-tx1-inmate-demo.c
+++ b/configs/arm64/jetson-tx1-inmate-demo.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
                .name = "jetson-tx1-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
 
                .console = {
@@ -40,7 +40,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/jetson-tx1-linux-demo.c 
b/configs/arm64/jetson-tx1-linux-demo.c
index ec303535..9ab5f6ec 100644
--- a/configs/arm64/jetson-tx1-linux-demo.c
+++ b/configs/arm64/jetson-tx1-linux-demo.c
@@ -24,7 +24,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -37,7 +37,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                         JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -55,7 +55,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/jetson-tx1.c b/configs/arm64/jetson-tx1.c
index 8d1b9cc4..f34af92b 100644
--- a/configs/arm64/jetson-tx1.c
+++ b/configs/arm64/jetson-tx1.c
@@ -20,7 +20,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[46];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -58,7 +58,7 @@ struct {
                },
                .root_cell = {
                        .name = "Jetson-TX1",
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -68,7 +68,18 @@ struct {
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
 
diff --git a/configs/arm64/jetson-tx2-inmate-demo.c 
b/configs/arm64/jetson-tx2-inmate-demo.c
index 98d3a27d..84fef9b3 100644
--- a/configs/arm64/jetson-tx2-inmate-demo.c
+++ b/configs/arm64/jetson-tx2-inmate-demo.c
@@ -13,7 +13,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -23,7 +23,7 @@ struct {
                .name = "jetson-tx2-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
 
                .console = {
@@ -35,7 +35,9 @@ struct {
        },
 
        .cpus = {
-               0x1,
+               {
+                       .phys_id = 0x0101,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/jetson-tx2.c b/configs/arm64/jetson-tx2.c
index c4078d90..453d543b 100644
--- a/configs/arm64/jetson-tx2.c
+++ b/configs/arm64/jetson-tx2.c
@@ -23,7 +23,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[60];
        struct jailhouse_irqchip irqchips[3];
 } __attribute__((packed)) config = {
@@ -56,14 +56,25 @@ struct {
                },
                .root_cell = {
                        .name = "Jetson-TX2",
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                },
        },
 
        .cpus = {
-               0x39,
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
+               {
+                       .phys_id = 0x0102,
+               },
+               {
+                       .phys_id = 0x0103,
+               },
        },
 
 
diff --git a/configs/arm64/k3-am625-sk-inmate-demo.c 
b/configs/arm64/k3-am625-sk-inmate-demo.c
index 38d146a9..dccbeac1 100644
--- a/configs/arm64/k3-am625-sk-inmate-demo.c
+++ b/configs/arm64/k3-am625-sk-inmate-demo.c
@@ -20,7 +20,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -30,7 +30,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -45,7 +45,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 0x0001,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-am625-sk-linux-demo.c 
b/configs/arm64/k3-am625-sk-linux-demo.c
index 37b42b5e..43af5d97 100644
--- a/configs/arm64/k3-am625-sk-linux-demo.c
+++ b/configs/arm64/k3-am625-sk-linux-demo.c
@@ -22,7 +22,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[18];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[2];
@@ -34,7 +34,7 @@ struct {
                .name = "k3-am625-sk-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -51,7 +51,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 0x0002,
+               },
+               {
+                       .phys_id = 0x0003,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-am625-sk.c b/configs/arm64/k3-am625-sk.c
index 4c77e7fe..0a7c2282 100644
--- a/configs/arm64/k3-am625-sk.c
+++ b/configs/arm64/k3-am625-sk.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[31];
        struct jailhouse_irqchip irqchips[5];
        struct jailhouse_pci_device pci_devices[2];
@@ -53,7 +53,7 @@ struct {
                .root_cell = {
                        .name = "k3-am625-sk",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -62,7 +62,18 @@ struct {
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0x0000,
+               },
+               {
+                       .phys_id = 0x0001,
+               },
+               {
+                       .phys_id = 0x0002,
+               },
+               {
+                       .phys_id = 0x0003,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-am654-idk-inmate-demo.c 
b/configs/arm64/k3-am654-idk-inmate-demo.c
index 73e4f051..20c3a19d 100644
--- a/configs/arm64/k3-am654-idk-inmate-demo.c
+++ b/configs/arm64/k3-am654-idk-inmate-demo.c
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -29,7 +29,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -44,7 +44,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 0x0001,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-am654-idk-linux-demo.c 
b/configs/arm64/k3-am654-idk-linux-demo.c
index ac7a75d0..58dee5f2 100644
--- a/configs/arm64/k3-am654-idk-linux-demo.c
+++ b/configs/arm64/k3-am654-idk-linux-demo.c
@@ -22,7 +22,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[19];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[2];
@@ -34,7 +34,7 @@ struct {
                .name = "k3-am654-idk-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -51,7 +51,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-am654-idk.c b/configs/arm64/k3-am654-idk.c
index 544ca50b..4376b49f 100644
--- a/configs/arm64/k3-am654-idk.c
+++ b/configs/arm64/k3-am654-idk.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[25];
        struct jailhouse_irqchip irqchips[5];
        struct jailhouse_pci_device pci_devices[2];
@@ -53,7 +53,7 @@ struct {
                .root_cell = {
                        .name = "k3-am654-idk",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -62,7 +62,18 @@ struct {
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0x0000,
+               },
+               {
+                       .phys_id = 0x0001,
+               },
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-j7200-evm-inmate-demo.c 
b/configs/arm64/k3-j7200-evm-inmate-demo.c
index eea1cb5a..bc312f6c 100644
--- a/configs/arm64/k3-j7200-evm-inmate-demo.c
+++ b/configs/arm64/k3-j7200-evm-inmate-demo.c
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[7];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -31,7 +31,7 @@ struct {
                .name = "k3-j7200 inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 1,
                .num_pci_devices = 1,
@@ -48,7 +48,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-j7200-evm-linux-demo.c 
b/configs/arm64/k3-j7200-evm-linux-demo.c
index 28d6e361..7a2b082e 100644
--- a/configs/arm64/k3-j7200-evm-linux-demo.c
+++ b/configs/arm64/k3-j7200-evm-linux-demo.c
@@ -22,7 +22,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[19];
        struct jailhouse_irqchip irqchips[3];
        struct jailhouse_pci_device pci_devices[2];
@@ -35,7 +35,7 @@ struct {
                .name = "k3-j7200-evm-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -52,7 +52,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-j7200-evm.c b/configs/arm64/k3-j7200-evm.c
index afa54b2b..4d7b9502 100644
--- a/configs/arm64/k3-j7200-evm.c
+++ b/configs/arm64/k3-j7200-evm.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[32];
        struct jailhouse_irqchip irqchips[6];
        struct jailhouse_pci_device pci_devices[2];
@@ -71,7 +71,7 @@ struct {
                .root_cell = {
                        .name = "k3-j7200-evm",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -81,7 +81,12 @@ struct {
        },
 
        .cpus = {
-               0x3,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-j721e-evm-inmate-demo.c 
b/configs/arm64/k3-j721e-evm-inmate-demo.c
index cf4026d9..b60ec081 100644
--- a/configs/arm64/k3-j721e-evm-inmate-demo.c
+++ b/configs/arm64/k3-j721e-evm-inmate-demo.c
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[7];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -31,7 +31,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 1,
                .num_pci_devices = 1,
@@ -48,7 +48,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-j721e-evm-linux-demo.c 
b/configs/arm64/k3-j721e-evm-linux-demo.c
index ff7b23a7..f51af1d7 100644
--- a/configs/arm64/k3-j721e-evm-linux-demo.c
+++ b/configs/arm64/k3-j721e-evm-linux-demo.c
@@ -23,7 +23,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[22];
        struct jailhouse_irqchip irqchips[4];
        struct jailhouse_pci_device pci_devices[2];
@@ -36,7 +36,7 @@ struct {
                .name = "k3-j721e-evm-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -53,7 +53,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/k3-j721e-evm.c b/configs/arm64/k3-j721e-evm.c
index 3a1c4a6d..6cfb21b9 100644
--- a/configs/arm64/k3-j721e-evm.c
+++ b/configs/arm64/k3-j721e-evm.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[40];
        struct jailhouse_irqchip irqchips[6];
        struct jailhouse_pci_device pci_devices[2];
@@ -84,7 +84,7 @@ struct {
                .root_cell = {
                        .name = "k3-j721e-evm",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -94,7 +94,12 @@ struct {
        },
 
        .cpus = {
-               0x3,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1028a-rdb-inmate-demo.c 
b/configs/arm64/ls1028a-rdb-inmate-demo.c
index 1b1bedc1..4345dfe0 100644
--- a/configs/arm64/ls1028a-rdb-inmate-demo.c
+++ b/configs/arm64/ls1028a-rdb-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[7];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -43,7 +43,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1028a-rdb-linux-demo.c 
b/configs/arm64/ls1028a-rdb-linux-demo.c
index c965fa4f..9c9f4e26 100644
--- a/configs/arm64/ls1028a-rdb-linux-demo.c
+++ b/configs/arm64/ls1028a-rdb-linux-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[13];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -27,7 +27,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -35,7 +35,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1028a-rdb.c b/configs/arm64/ls1028a-rdb.c
index 2feec366..624a8d10 100644
--- a/configs/arm64/ls1028a-rdb.c
+++ b/configs/arm64/ls1028a-rdb.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[76];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -51,16 +51,21 @@ struct {
                },
                .root_cell = {
                        .name = "ls1028a",
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        .vpci_irq_base = 50 - 32,
                },
        },
 
        .cpus = {
-               0x3,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1043a-rdb-dpaa-linux-demo.c 
b/configs/arm64/ls1043a-rdb-dpaa-linux-demo.c
index 028ddf49..871854da 100644
--- a/configs/arm64/ls1043a-rdb-dpaa-linux-demo.c
+++ b/configs/arm64/ls1043a-rdb-dpaa-linux-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[23];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -27,7 +27,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -35,7 +35,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1043a-rdb-inmate-demo.c 
b/configs/arm64/ls1043a-rdb-inmate-demo.c
index 53a65e3c..fbdaaa5d 100644
--- a/configs/arm64/ls1043a-rdb-inmate-demo.c
+++ b/configs/arm64/ls1043a-rdb-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -43,7 +43,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1043a-rdb-linux-demo.c 
b/configs/arm64/ls1043a-rdb-linux-demo.c
index 30be3538..34b6a620 100644
--- a/configs/arm64/ls1043a-rdb-linux-demo.c
+++ b/configs/arm64/ls1043a-rdb-linux-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[16];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -27,7 +27,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -35,7 +35,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1043a-rdb.c b/configs/arm64/ls1043a-rdb.c
index e1d3c48e..39d7fa81 100644
--- a/configs/arm64/ls1043a-rdb.c
+++ b/configs/arm64/ls1043a-rdb.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[61];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -53,16 +53,27 @@ struct {
                },
                .root_cell = {
                        .name = "ls1043a",
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        .vpci_irq_base = 67 - 32, /* Not include 32 base */
                },
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1046a-rdb-inmate-demo.c 
b/configs/arm64/ls1046a-rdb-inmate-demo.c
index b98051da..a5108a76 100644
--- a/configs/arm64/ls1046a-rdb-inmate-demo.c
+++ b/configs/arm64/ls1046a-rdb-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -43,7 +43,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1046a-rdb-linux-demo.c 
b/configs/arm64/ls1046a-rdb-linux-demo.c
index a2efa1b3..03f61b81 100644
--- a/configs/arm64/ls1046a-rdb-linux-demo.c
+++ b/configs/arm64/ls1046a-rdb-linux-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[16];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -27,7 +27,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -35,7 +35,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1046a-rdb.c b/configs/arm64/ls1046a-rdb.c
index e104ee28..bf27df1f 100644
--- a/configs/arm64/ls1046a-rdb.c
+++ b/configs/arm64/ls1046a-rdb.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[64];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -53,16 +53,27 @@ struct {
                },
                .root_cell = {
                        .name = "ls1046a",
-                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
+                       .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        .vpci_irq_base = 67 - 32, /* Not include 32 base */
                },
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1088a-rdb-inmate-demo.c 
b/configs/arm64/ls1088a-rdb-inmate-demo.c
index 226ff2e8..39090261 100644
--- a/configs/arm64/ls1088a-rdb-inmate-demo.c
+++ b/configs/arm64/ls1088a-rdb-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -43,7 +43,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 0x1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1088a-rdb-linux-demo.c 
b/configs/arm64/ls1088a-rdb-linux-demo.c
index d98d6ca1..fd98bde8 100644
--- a/configs/arm64/ls1088a-rdb-linux-demo.c
+++ b/configs/arm64/ls1088a-rdb-linux-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[14];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -27,7 +27,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -35,7 +35,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 0x2,
+               },
+               {
+                       .phys_id = 0x3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls1088a-rdb.c b/configs/arm64/ls1088a-rdb.c
index d73703ae..e2dfc54c 100644
--- a/configs/arm64/ls1088a-rdb.c
+++ b/configs/arm64/ls1088a-rdb.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[8];
        struct jailhouse_memory mem_regions[63];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -54,8 +54,8 @@ struct {
                },
                .root_cell = {
                        .name = "ls1088a",
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .vpci_irq_base = 114 - 32,
@@ -63,7 +63,30 @@ struct {
        },
 
        .cpus = {
-               0xff,
+               {
+                       .phys_id = 0x0,
+               },
+               {
+                       .phys_id = 0x1,
+               },
+               {
+                       .phys_id = 0x2,
+               },
+               {
+                       .phys_id = 0x3,
+               },
+               {
+                       .phys_id = 0x100,
+               },
+               {
+                       .phys_id = 0x101,
+               },
+               {
+                       .phys_id = 0x102,
+               },
+               {
+                       .phys_id = 0x103,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls2088a-rdb-inmate-demo.c 
b/configs/arm64/ls2088a-rdb-inmate-demo.c
index bdc069ef..3234b489 100644
--- a/configs/arm64/ls2088a-rdb-inmate-demo.c
+++ b/configs/arm64/ls2088a-rdb-inmate-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[7];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -27,7 +27,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -43,7 +43,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 0x1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls2088a-rdb-linux-demo.c 
b/configs/arm64/ls2088a-rdb-linux-demo.c
index 2a531a48..8619a1a0 100644
--- a/configs/arm64/ls2088a-rdb-linux-demo.c
+++ b/configs/arm64/ls2088a-rdb-linux-demo.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[13];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -27,7 +27,7 @@ struct {
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -35,7 +35,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 0x100,
+               },
+               {
+                       .phys_id = 0x101,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ls2088a-rdb.c b/configs/arm64/ls2088a-rdb.c
index d84ba10b..58393b01 100644
--- a/configs/arm64/ls2088a-rdb.c
+++ b/configs/arm64/ls2088a-rdb.c
@@ -15,7 +15,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[8];
        struct jailhouse_memory mem_regions[70];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -54,8 +54,8 @@ struct {
                },
                .root_cell = {
                        .name = "ls2088a",
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
-                       .cpu_set_size = sizeof(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .vpci_irq_base = 160 - 32,
@@ -63,7 +63,30 @@ struct {
        },
 
        .cpus = {
-               0xff,
+               {
+                       .phys_id = 0x0,
+               },
+               {
+                       .phys_id = 0x1,
+               },
+               {
+                       .phys_id = 0x100,
+               },
+               {
+                       .phys_id = 0x101,
+               },
+               {
+                       .phys_id = 0x200,
+               },
+               {
+                       .phys_id = 0x201,
+               },
+               {
+                       .phys_id = 0x300,
+               },
+               {
+                       .phys_id = 0x301,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/macchiatobin-inmate-demo.c 
b/configs/arm64/macchiatobin-inmate-demo.c
index 92d74b98..64e0e9bb 100644
--- a/configs/arm64/macchiatobin-inmate-demo.c
+++ b/configs/arm64/macchiatobin-inmate-demo.c
@@ -4,7 +4,7 @@
  * Configuration for demo inmate on Marvell MACCHIATObin board:
  * 1 CPU, 64K RAM, 1 serial port
  *
- * Copyright (c) Siemens AG, 2017-2018
+ * Copyright (c) Siemens AG, 2017-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 0x0001,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/macchiatobin-linux-demo.c 
b/configs/arm64/macchiatobin-linux-demo.c
index 5ed76c91..1c3a6104 100644
--- a/configs/arm64/macchiatobin-linux-demo.c
+++ b/configs/arm64/macchiatobin-linux-demo.c
@@ -4,7 +4,7 @@
  * Configuration for linux-demo inmate on MACCHIATObin:
  * 2 CPUs, 128M RAM, serial port
  *
- * Copyright (c) Siemens AG, 2014-2018
+ * Copyright (c) Siemens AG, 2014-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[9];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -31,7 +31,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                        JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -47,7 +47,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/macchiatobin.c b/configs/arm64/macchiatobin.c
index f8e078e2..97293248 100644
--- a/configs/arm64/macchiatobin.c
+++ b/configs/arm64/macchiatobin.c
@@ -3,7 +3,7 @@
  *
  * Configuration for Marvell MACCHIATObin board
  *
- * Copyright (c) Siemens AG, 2017-2018
+ * Copyright (c) Siemens AG, 2017-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -57,7 +57,7 @@ struct {
                .root_cell = {
                        .name = "MACCHIATObin",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -67,7 +67,18 @@ struct {
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0x0000,
+               },
+               {
+                       .phys_id = 0x0001,
+               },
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/miriac-sbc-ls1046a-inmate-demo.c 
b/configs/arm64/miriac-sbc-ls1046a-inmate-demo.c
index 630eb589..c9d2bfb6 100644
--- a/configs/arm64/miriac-sbc-ls1046a-inmate-demo.c
+++ b/configs/arm64/miriac-sbc-ls1046a-inmate-demo.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/miriac-sbc-ls1046a-linux-demo.c 
b/configs/arm64/miriac-sbc-ls1046a-linux-demo.c
index e925797a..c2236312 100644
--- a/configs/arm64/miriac-sbc-ls1046a-linux-demo.c
+++ b/configs/arm64/miriac-sbc-ls1046a-linux-demo.c
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -32,7 +32,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                        JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -48,7 +48,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/miriac-sbc-ls1046a.c 
b/configs/arm64/miriac-sbc-ls1046a.c
index fc4493e8..00d77048 100644
--- a/configs/arm64/miriac-sbc-ls1046a.c
+++ b/configs/arm64/miriac-sbc-ls1046a.c
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[55];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -59,7 +59,7 @@ struct {
                .root_cell = {
                        .name = "miriac SBC-LS1046A",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -69,7 +69,18 @@ struct {
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/pine64-plus-inmate-demo.c 
b/configs/arm64/pine64-plus-inmate-demo.c
index 7cb6fbfc..923cf5a6 100644
--- a/configs/arm64/pine64-plus-inmate-demo.c
+++ b/configs/arm64/pine64-plus-inmate-demo.c
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -29,7 +29,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
@@ -44,7 +44,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/pine64-plus-linux-demo.c 
b/configs/arm64/pine64-plus-linux-demo.c
index 50b75b40..e6aeb2cf 100644
--- a/configs/arm64/pine64-plus-linux-demo.c
+++ b/configs/arm64/pine64-plus-linux-demo.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[13];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -31,7 +31,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                         JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -47,7 +47,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/pine64-plus.c b/configs/arm64/pine64-plus.c
index bc2f524e..f77fc192 100644
--- a/configs/arm64/pine64-plus.c
+++ b/configs/arm64/pine64-plus.c
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[43];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -56,7 +56,7 @@ struct {
                .root_cell = {
                        .name = "Pine64-Plus",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
@@ -66,7 +66,18 @@ struct {
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/qemu-arm64-inmate-demo.c 
b/configs/arm64/qemu-arm64-inmate-demo.c
index 3246c7d6..34a4efdb 100644
--- a/configs/arm64/qemu-arm64-inmate-demo.c
+++ b/configs/arm64/qemu-arm64-inmate-demo.c
@@ -4,7 +4,7 @@
  * Configuration for demo inmate on QEMU arm64 virtual target
  * 1 CPU, 64K RAM, 1 serial port
  *
- * Copyright (c) Siemens AG, 2017
+ * Copyright (c) Siemens AG, 2017-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -30,7 +30,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -46,7 +46,9 @@ struct {
        },
 
        .cpus = {
-               0b0010,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/qemu-arm64-linux-demo.c 
b/configs/arm64/qemu-arm64-linux-demo.c
index 258b1850..1e21161f 100644
--- a/configs/arm64/qemu-arm64-linux-demo.c
+++ b/configs/arm64/qemu-arm64-linux-demo.c
@@ -4,7 +4,7 @@
  * Configuration for linux-demo inmate on QEMU arm64:
  * 2 CPUs, 128M RAM, serial port
  *
- * Copyright (c) Siemens AG, 2014-2017
+ * Copyright (c) Siemens AG, 2014-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[13];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -31,7 +31,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                        JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -47,7 +47,12 @@ struct {
        },
 
        .cpus = {
-               0b1100,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/qemu-arm64-zephyr-demo.c 
b/configs/arm64/qemu-arm64-zephyr-demo.c
index a4ae1dfa..d7cf29cc 100644
--- a/configs/arm64/qemu-arm64-zephyr-demo.c
+++ b/configs/arm64/qemu-arm64-zephyr-demo.c
@@ -20,7 +20,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[13];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -33,7 +33,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                        JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -50,7 +50,12 @@ struct {
        },
 
        .cpus = {
-               0x3,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/qemu-arm64.c b/configs/arm64/qemu-arm64.c
index e58c7db6..519115eb 100644
--- a/configs/arm64/qemu-arm64.c
+++ b/configs/arm64/qemu-arm64.c
@@ -3,7 +3,7 @@
  *
  * Configuration for QEMU arm64 virtual target, 1G RAM, 16 cores
  *
- * Copyright (c) Siemens AG, 2017
+ * Copyright (c) Siemens AG, 2017-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[16];
        struct jailhouse_memory mem_regions[12];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -55,7 +55,7 @@ struct {
                .root_cell = {
                        .name = "qemu-arm64",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -65,7 +65,54 @@ struct {
        },
 
        .cpus = {
-               0xffff,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
+               {
+                       .phys_id = 4,
+               },
+               {
+                       .phys_id = 5,
+               },
+               {
+                       .phys_id = 6,
+               },
+               {
+                       .phys_id = 7,
+               },
+               {
+                       .phys_id = 8,
+               },
+               {
+                       .phys_id = 9,
+               },
+               {
+                       .phys_id = 10,
+               },
+               {
+                       .phys_id = 11,
+               },
+               {
+                       .phys_id = 12,
+               },
+               {
+                       .phys_id = 13,
+               },
+               {
+                       .phys_id = 14,
+               },
+               {
+                       .phys_id = 15,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/renesas-r8a774a1-inmate-demo.c 
b/configs/arm64/renesas-r8a774a1-inmate-demo.c
index f571a587..b25bad2d 100644
--- a/configs/arm64/renesas-r8a774a1-inmate-demo.c
+++ b/configs/arm64/renesas-r8a774a1-inmate-demo.c
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[1];
@@ -31,7 +31,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                         JAILHOUSE_CELL_VIRTUAL_CONSOLE_ACTIVE,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -48,7 +48,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 0x0001,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/renesas-r8a774a1-linux-demo.c 
b/configs/arm64/renesas-r8a774a1-linux-demo.c
index bbd3ae16..9f1abce6 100644
--- a/configs/arm64/renesas-r8a774a1-linux-demo.c
+++ b/configs/arm64/renesas-r8a774a1-linux-demo.c
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[16];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -32,7 +32,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                         JAILHOUSE_CELL_VIRTUAL_CONSOLE_ACTIVE,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -49,7 +49,18 @@ struct {
        },
 
        .cpus = {
-               0x3c,
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
+               {
+                       .phys_id = 0x0102,
+               },
+               {
+                       .phys_id = 0x0103,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/renesas-r8a774a1.c b/configs/arm64/renesas-r8a774a1.c
index bbcbb6d2..69841e35 100644
--- a/configs/arm64/renesas-r8a774a1.c
+++ b/configs/arm64/renesas-r8a774a1.c
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[6];
        struct jailhouse_memory mem_regions[157];
        struct jailhouse_irqchip irqchips[4];
        struct jailhouse_pci_device pci_devices[2];
@@ -56,7 +56,7 @@ struct {
                },
                .root_cell = {
                        .name = "Renesas HopeRun HiHope RZ/G2M",
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -66,7 +66,24 @@ struct {
        },
 
        .cpus = {
-               0x3f,
+               {
+                       .phys_id = 0x0000,
+               },
+               {
+                       .phys_id = 0x0001,
+               },
+               {
+                       .phys_id = 0x0100,
+               },
+               {
+                       .phys_id = 0x0101,
+               },
+               {
+                       .phys_id = 0x0102,
+               },
+               {
+                       .phys_id = 0x0103,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/rpi4-inmate-demo.c b/configs/arm64/rpi4-inmate-demo.c
index 311c036b..5cbb495b 100644
--- a/configs/arm64/rpi4-inmate-demo.c
+++ b/configs/arm64/rpi4-inmate-demo.c
@@ -4,7 +4,7 @@
  * Configuration for demo inmate on Raspberry Pi 4:
  * 1 CPU, 64K RAM, serial port 0
  *
- * Copyright (c) Siemens AG, 2020
+ * Copyright (c) Siemens AG, 2020-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -30,7 +30,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -46,7 +46,9 @@ struct {
        },
 
        .cpus = {
-               0b0010,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/rpi4-linux-demo.c b/configs/arm64/rpi4-linux-demo.c
index d818c5c5..0078f007 100644
--- a/configs/arm64/rpi4-linux-demo.c
+++ b/configs/arm64/rpi4-linux-demo.c
@@ -4,7 +4,7 @@
  * Configuration for linux-demo inmate on Raspberry Pi 4:
  * 2 CPUs, 128M RAM, serial port
  *
- * Copyright (c) Siemens AG, 2014-2020
+ * Copyright (c) Siemens AG, 2014-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[13];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -31,7 +31,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                        JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -47,7 +47,12 @@ struct {
        },
 
        .cpus = {
-               0b1100,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/rpi4.c b/configs/arm64/rpi4.c
index a41c4545..a3812afa 100644
--- a/configs/arm64/rpi4.c
+++ b/configs/arm64/rpi4.c
@@ -3,7 +3,7 @@
  *
  * Test configuration for Raspberry Pi 4 (quad-core Cortex-A72, 1GB, 2GB, 4GB 
or 8GB RAM)
  *
- * Copyright (c) Siemens AG, 2020
+ * Copyright (c) Siemens AG, 2020-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[14];
        struct jailhouse_irqchip irqchips[2];
        struct jailhouse_pci_device pci_devices[2];
@@ -57,7 +57,7 @@ struct {
                .root_cell = {
                        .name = "Raspberry-Pi4",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -67,7 +67,18 @@ struct {
        },
 
        .cpus = {
-               0b1111,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ultra96-inmate-demo.c 
b/configs/arm64/ultra96-inmate-demo.c
index a94d03c5..b766396f 100644
--- a/configs/arm64/ultra96-inmate-demo.c
+++ b/configs/arm64/ultra96-inmate-demo.c
@@ -4,7 +4,7 @@
  * Configuration for demo inmate on Avnet Ultra96 board:
  * 1 CPU, 64K RAM, 1 serial port
  *
- * Copyright (c) Siemens AG, 2016-2020
+ * Copyright (c) Siemens AG, 2016-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[8];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[1];
@@ -30,7 +30,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -46,7 +46,9 @@ struct {
        },
 
        .cpus = {
-               0b0010,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ultra96-linux-demo.c 
b/configs/arm64/ultra96-linux-demo.c
index 6b4ce7cb..b324e932 100644
--- a/configs/arm64/ultra96-linux-demo.c
+++ b/configs/arm64/ultra96-linux-demo.c
@@ -4,7 +4,7 @@
  * Configuration for linux-demo inmate on Avnet Ultra96 board:
  * 2 CPUs, 128M RAM, serial port 2
  *
- * Copyright (c) Siemens AG, 2014-2020
+ * Copyright (c) Siemens AG, 2014-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[13];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -30,7 +30,7 @@ struct {
                .name = "Ultra96-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -46,7 +46,12 @@ struct {
        },
 
        .cpus = {
-               0b1100,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/ultra96.c b/configs/arm64/ultra96.c
index b8829741..ea54d09f 100644
--- a/configs/arm64/ultra96.c
+++ b/configs/arm64/ultra96.c
@@ -3,7 +3,7 @@
  *
  * Configuration for Avnet Ultra96 board
  *
- * Copyright (c) Siemens AG, 2016-2020
+ * Copyright (c) Siemens AG, 2016-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -17,7 +17,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[12];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -64,7 +64,7 @@ struct {
                .root_cell = {
                        .name = "Ultra96",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -75,7 +75,18 @@ struct {
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/zynqmp-zcu102-inmate-demo.c 
b/configs/arm64/zynqmp-zcu102-inmate-demo.c
index 9f47a402..748d7fba 100644
--- a/configs/arm64/zynqmp-zcu102-inmate-demo.c
+++ b/configs/arm64/zynqmp-zcu102-inmate-demo.c
@@ -4,7 +4,7 @@
  * Configuration for demo inmate on Xilinx ZynqMP ZCU102 eval board:
  * 1 CPU, 64K RAM, 1 serial port
  *
- * Copyright (c) Siemens AG, 2016
+ * Copyright (c) Siemens AG, 2016-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[3];
 } __attribute__((packed)) config = {
        .cell = {
@@ -28,7 +28,7 @@ struct {
                .name = "inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = 0,
                .num_pci_devices = 0,
@@ -42,7 +42,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/zynqmp-zcu102-linux-demo-2.c 
b/configs/arm64/zynqmp-zcu102-linux-demo-2.c
index 3905f5bd..5943400c 100644
--- a/configs/arm64/zynqmp-zcu102-linux-demo-2.c
+++ b/configs/arm64/zynqmp-zcu102-linux-demo-2.c
@@ -4,7 +4,7 @@
  * Configuration for 2nd linux-demo inmate on ZynqMP ZCU102:
  * 1 CPU, 112M RAM
  *
- * Copyright (c) Siemens AG, 2014-2016
+ * Copyright (c) Siemens AG, 2014-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[1];
        struct jailhouse_memory mem_regions[11];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -31,7 +31,7 @@ struct {
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG |
                         JAILHOUSE_CELL_VIRTUAL_CONSOLE_PERMITTED,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -47,7 +47,9 @@ struct {
        },
 
        .cpus = {
-               0x2,
+               {
+                       .phys_id = 1,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/zynqmp-zcu102-linux-demo.c 
b/configs/arm64/zynqmp-zcu102-linux-demo.c
index 1d8e00a3..b6561f1e 100644
--- a/configs/arm64/zynqmp-zcu102-linux-demo.c
+++ b/configs/arm64/zynqmp-zcu102-linux-demo.c
@@ -4,7 +4,7 @@
  * Configuration for linux-demo inmate on ZynqMP ZCU102:
  * 2 CPUs, 128M RAM, serial port 2
  *
- * Copyright (c) Siemens AG, 2014-2016
+ * Copyright (c) Siemens AG, 2014-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -18,7 +18,7 @@
 
 struct {
        struct jailhouse_cell_desc cell;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[2];
        struct jailhouse_memory mem_regions[12];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -30,7 +30,7 @@ struct {
                .name = "ZynqMP-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
-               .cpu_set_size = sizeof(config.cpus),
+               .num_cpus = ARRAY_SIZE(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                .num_irqchips = ARRAY_SIZE(config.irqchips),
                .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -46,7 +46,12 @@ struct {
        },
 
        .cpus = {
-               0xc,
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
diff --git a/configs/arm64/zynqmp-zcu102.c b/configs/arm64/zynqmp-zcu102.c
index 750c9b6d..f94a0cd6 100644
--- a/configs/arm64/zynqmp-zcu102.c
+++ b/configs/arm64/zynqmp-zcu102.c
@@ -3,7 +3,7 @@
  *
  * Configuration for Xilinx ZynqMP ZCU102 eval board
  *
- * Copyright (c) Siemens AG, 2016
+ * Copyright (c) Siemens AG, 2016-2022
  *
  * Authors:
  *  Jan Kiszka <[email protected]>
@@ -19,7 +19,7 @@
 
 struct {
        struct jailhouse_system header;
-       __u64 cpus[1];
+       struct jailhouse_cpu cpus[4];
        struct jailhouse_memory mem_regions[13];
        struct jailhouse_irqchip irqchips[1];
        struct jailhouse_pci_device pci_devices[2];
@@ -65,7 +65,7 @@ struct {
                .root_cell = {
                        .name = "ZynqMP-ZCU102",
 
-                       .cpu_set_size = sizeof(config.cpus),
+                       .num_cpus = ARRAY_SIZE(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
                        .num_irqchips = ARRAY_SIZE(config.irqchips),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
@@ -76,7 +76,18 @@ struct {
        },
 
        .cpus = {
-               0xf,
+               {
+                       .phys_id = 0,
+               },
+               {
+                       .phys_id = 1,
+               },
+               {
+                       .phys_id = 2,
+               },
+               {
+                       .phys_id = 3,
+               },
        },
 
        .mem_regions = {
-- 
2.40.1

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jailhouse-dev/20230519204033.643200-19-ralf.ramsauer%40oth-regensburg.de.

Reply via email to