diff mbox series

[09/12] hw/hppa: Export machine name, BTLBs, power-button address via fw_cfg

Message ID 20231014195719.151397-10-deller@kernel.org (mailing list archive)
State New, archived
Headers show
Series target/hppa: Add emulation of a C3700 HP-PARISC workstation | expand

Commit Message

Helge Deller Oct. 14, 2023, 7:57 p.m. UTC
From: Helge Deller <deller@gmx.de>

Provide necessary info to SeaBIOS-hppa.

Signed-off-by: Helge Deller <deller@gmx.de>
---
 hw/hppa/machine.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

Comments

Philippe Mathieu-Daudé Oct. 16, 2023, 1:48 p.m. UTC | #1
Hi Helge,

On 14/10/23 21:57, deller@kernel.org wrote:
> From: Helge Deller <deller@gmx.de>
> 
> Provide necessary info to SeaBIOS-hppa.
> 
> Signed-off-by: Helge Deller <deller@gmx.de>
> ---
>   hw/hppa/machine.c | 19 ++++++++++++++++++-
>   1 file changed, 18 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
> index c6d8deffcf..be0caf4675 100644
> --- a/hw/hppa/machine.c
> +++ b/hw/hppa/machine.c
> @@ -37,6 +37,7 @@
>   
>   #define enable_lasi_lan()       0
>   
> +static PCIBus *pci_bus;

I don't understand what this unassigned variable is doing here.

>   static void hppa_powerdown_req(Notifier *n, void *opaque)
>   {
> @@ -123,6 +124,8 @@ static FWCfgState *create_fw_cfg(MachineState *ms)
>       FWCfgState *fw_cfg;
>       uint64_t val;
>       const char qemu_version[] = QEMU_VERSION;
> +    MachineClass *mc = MACHINE_GET_CLASS(ms);
> +    int len;
>   
>       fw_cfg = fw_cfg_init_mem(FW_CFG_IO_BASE, FW_CFG_IO_BASE + 4);
>       fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, ms->smp.cpus);
> @@ -137,8 +140,20 @@ static FWCfgState *create_fw_cfg(MachineState *ms)
>       fw_cfg_add_file(fw_cfg, "/etc/cpu/tlb_entries",
>                       g_memdup(&val, sizeof(val)), sizeof(val));
>   
> +    val = cpu_to_le64(HPPA_BTLB_ENTRIES);
> +    fw_cfg_add_file(fw_cfg, "/etc/cpu/btlb_entries",
> +                    g_memdup(&val, sizeof(val)), sizeof(val));
> +
> +    len = strlen(mc->name) + 1;
> +    fw_cfg_add_file(fw_cfg, "/etc/hppa/machine",
> +                    g_memdup(mc->name, len), len);
> +
>       val = cpu_to_le64(HPA_POWER_BUTTON);
> -    fw_cfg_add_file(fw_cfg, "/etc/power-button-addr",
> +    fw_cfg_add_file(fw_cfg, "/etc/hppa/power-button-addr",
> +                    g_memdup(&val, sizeof(val)), sizeof(val));
> +
> +    val = cpu_to_le64(CPU_HPA + 24);
> +    fw_cfg_add_file(fw_cfg, "/etc/hppa/DebugOutputPort",
>                       g_memdup(&val, sizeof(val)), sizeof(val));
>   
>       fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, ms->boot_config.order[0]);
> @@ -148,6 +163,8 @@ static FWCfgState *create_fw_cfg(MachineState *ms)
>                       g_memdup(qemu_version, sizeof(qemu_version)),
>                       sizeof(qemu_version));
>   
> +    fw_cfg_add_extra_pci_roots(pci_bus, fw_cfg);

IIUC you have a MachineState pointer, so you can resolve the bus
from there, or in all qomtree using:

   object_resolve_path_type("", TYPE_PCI_BUS, ...);

>       return fw_cfg;
>   }
>
diff mbox series

Patch

diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index c6d8deffcf..be0caf4675 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -37,6 +37,7 @@ 
 
 #define enable_lasi_lan()       0
 
+static PCIBus *pci_bus;
 
 static void hppa_powerdown_req(Notifier *n, void *opaque)
 {
@@ -123,6 +124,8 @@  static FWCfgState *create_fw_cfg(MachineState *ms)
     FWCfgState *fw_cfg;
     uint64_t val;
     const char qemu_version[] = QEMU_VERSION;
+    MachineClass *mc = MACHINE_GET_CLASS(ms);
+    int len;
 
     fw_cfg = fw_cfg_init_mem(FW_CFG_IO_BASE, FW_CFG_IO_BASE + 4);
     fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, ms->smp.cpus);
@@ -137,8 +140,20 @@  static FWCfgState *create_fw_cfg(MachineState *ms)
     fw_cfg_add_file(fw_cfg, "/etc/cpu/tlb_entries",
                     g_memdup(&val, sizeof(val)), sizeof(val));
 
+    val = cpu_to_le64(HPPA_BTLB_ENTRIES);
+    fw_cfg_add_file(fw_cfg, "/etc/cpu/btlb_entries",
+                    g_memdup(&val, sizeof(val)), sizeof(val));
+
+    len = strlen(mc->name) + 1;
+    fw_cfg_add_file(fw_cfg, "/etc/hppa/machine",
+                    g_memdup(mc->name, len), len);
+
     val = cpu_to_le64(HPA_POWER_BUTTON);
-    fw_cfg_add_file(fw_cfg, "/etc/power-button-addr",
+    fw_cfg_add_file(fw_cfg, "/etc/hppa/power-button-addr",
+                    g_memdup(&val, sizeof(val)), sizeof(val));
+
+    val = cpu_to_le64(CPU_HPA + 24);
+    fw_cfg_add_file(fw_cfg, "/etc/hppa/DebugOutputPort",
                     g_memdup(&val, sizeof(val)), sizeof(val));
 
     fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, ms->boot_config.order[0]);
@@ -148,6 +163,8 @@  static FWCfgState *create_fw_cfg(MachineState *ms)
                     g_memdup(qemu_version, sizeof(qemu_version)),
                     sizeof(qemu_version));
 
+    fw_cfg_add_extra_pci_roots(pci_bus, fw_cfg);
+
     return fw_cfg;
 }