machine.c (b57e3e9785271a20b00f43d469b3011d0127e565) | machine.c (bfdf22bc769a56d8e1fe7c72a28ef05c0a6d8596) |
---|---|
1/* 2 * QEMU HPPA hardware system emulator. 3 * Copyright 2018 Helge Deller <deller@gmx.de> 4 */ 5 6#include "qemu/osdep.h" 7#include "qemu-common.h" 8#include "cpu.h" --- 83 unchanged lines hidden (view full) --- 92static FWCfgState *create_fw_cfg(MachineState *ms) 93{ 94 FWCfgState *fw_cfg; 95 uint64_t val; 96 97 fw_cfg = fw_cfg_init_mem(FW_CFG_IO_BASE, FW_CFG_IO_BASE + 4); 98 fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, ms->smp.cpus); 99 fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, HPPA_MAX_CPUS); | 1/* 2 * QEMU HPPA hardware system emulator. 3 * Copyright 2018 Helge Deller <deller@gmx.de> 4 */ 5 6#include "qemu/osdep.h" 7#include "qemu-common.h" 8#include "cpu.h" --- 83 unchanged lines hidden (view full) --- 92static FWCfgState *create_fw_cfg(MachineState *ms) 93{ 94 FWCfgState *fw_cfg; 95 uint64_t val; 96 97 fw_cfg = fw_cfg_init_mem(FW_CFG_IO_BASE, FW_CFG_IO_BASE + 4); 98 fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, ms->smp.cpus); 99 fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, HPPA_MAX_CPUS); |
100 fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, ram_size); | 100 fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, ms->ram_size); |
101 102 val = cpu_to_le64(MIN_SEABIOS_HPPA_VERSION); 103 fw_cfg_add_file(fw_cfg, "/etc/firmware-min-version", 104 g_memdup(&val, sizeof(val)), sizeof(val)); 105 106 val = cpu_to_le64(HPPA_TLB_ENTRIES); 107 fw_cfg_add_file(fw_cfg, "/etc/cpu/tlb_entries", 108 g_memdup(&val, sizeof(val)), sizeof(val)); --- 174 unchanged lines hidden (view full) --- 283 exit(1); 284 } 285 286 /* Load the initrd image high in memory. 287 Mirror the algorithm used by palo: 288 (1) Due to sign-extension problems and PDC, 289 put the initrd no higher than 1G. 290 (2) Reserve 64k for stack. */ | 101 102 val = cpu_to_le64(MIN_SEABIOS_HPPA_VERSION); 103 fw_cfg_add_file(fw_cfg, "/etc/firmware-min-version", 104 g_memdup(&val, sizeof(val)), sizeof(val)); 105 106 val = cpu_to_le64(HPPA_TLB_ENTRIES); 107 fw_cfg_add_file(fw_cfg, "/etc/cpu/tlb_entries", 108 g_memdup(&val, sizeof(val)), sizeof(val)); --- 174 unchanged lines hidden (view full) --- 283 exit(1); 284 } 285 286 /* Load the initrd image high in memory. 287 Mirror the algorithm used by palo: 288 (1) Due to sign-extension problems and PDC, 289 put the initrd no higher than 1G. 290 (2) Reserve 64k for stack. */ |
291 initrd_base = MIN(ram_size, 1 * GiB); | 291 initrd_base = MIN(machine->ram_size, 1 * GiB); |
292 initrd_base = initrd_base - 64 * KiB; 293 initrd_base = (initrd_base - initrd_size) & TARGET_PAGE_MASK; 294 295 if (initrd_base < kernel_high) { 296 error_report("kernel and initial ram disk too large!"); 297 exit(1); 298 } 299 --- 11 unchanged lines hidden (view full) --- 311 kernel_entry = boot_menu ? 1 : 0; 312 cpu[0]->env.gr[24] = machine->boot_order[0]; 313 } 314 315 /* We jump to the firmware entry routine and pass the 316 * various parameters in registers. After firmware initialization, 317 * firmware will start the Linux kernel with ramdisk and cmdline. 318 */ | 292 initrd_base = initrd_base - 64 * KiB; 293 initrd_base = (initrd_base - initrd_size) & TARGET_PAGE_MASK; 294 295 if (initrd_base < kernel_high) { 296 error_report("kernel and initial ram disk too large!"); 297 exit(1); 298 } 299 --- 11 unchanged lines hidden (view full) --- 311 kernel_entry = boot_menu ? 1 : 0; 312 cpu[0]->env.gr[24] = machine->boot_order[0]; 313 } 314 315 /* We jump to the firmware entry routine and pass the 316 * various parameters in registers. After firmware initialization, 317 * firmware will start the Linux kernel with ramdisk and cmdline. 318 */ |
319 cpu[0]->env.gr[26] = ram_size; | 319 cpu[0]->env.gr[26] = machine->ram_size; |
320 cpu[0]->env.gr[25] = kernel_entry; 321 322 /* tell firmware how many SMP CPUs to present in inventory table */ 323 cpu[0]->env.gr[21] = smp_cpus; 324 325 /* tell firmware fw_cfg port */ 326 cpu[0]->env.gr[19] = FW_CFG_IO_BASE; 327} --- 9 unchanged lines hidden (view full) --- 337 * Monarch CPU will initialize firmware, secondary CPUs 338 * will enter a small idle look and wait for rendevouz. */ 339 for (i = 0; i < smp_cpus; i++) { 340 cpu_set_pc(CPU(cpu[i]), firmware_entry); 341 cpu[i]->env.gr[5] = CPU_HPA + i * 0x1000; 342 } 343 344 /* already initialized by machine_hppa_init()? */ | 320 cpu[0]->env.gr[25] = kernel_entry; 321 322 /* tell firmware how many SMP CPUs to present in inventory table */ 323 cpu[0]->env.gr[21] = smp_cpus; 324 325 /* tell firmware fw_cfg port */ 326 cpu[0]->env.gr[19] = FW_CFG_IO_BASE; 327} --- 9 unchanged lines hidden (view full) --- 337 * Monarch CPU will initialize firmware, secondary CPUs 338 * will enter a small idle look and wait for rendevouz. */ 339 for (i = 0; i < smp_cpus; i++) { 340 cpu_set_pc(CPU(cpu[i]), firmware_entry); 341 cpu[i]->env.gr[5] = CPU_HPA + i * 0x1000; 342 } 343 344 /* already initialized by machine_hppa_init()? */ |
345 if (cpu[0]->env.gr[26] == ram_size) { | 345 if (cpu[0]->env.gr[26] == ms->ram_size) { |
346 return; 347 } 348 | 346 return; 347 } 348 |
349 cpu[0]->env.gr[26] = ram_size; | 349 cpu[0]->env.gr[26] = ms->ram_size; |
350 cpu[0]->env.gr[25] = 0; /* no firmware boot menu */ 351 cpu[0]->env.gr[24] = 'c'; 352 /* gr22/gr23 unused, no initrd while reboot. */ 353 cpu[0]->env.gr[21] = smp_cpus; 354 /* tell firmware fw_cfg port */ 355 cpu[0]->env.gr[19] = FW_CFG_IO_BASE; 356} 357 --- 17 unchanged lines hidden --- | 350 cpu[0]->env.gr[25] = 0; /* no firmware boot menu */ 351 cpu[0]->env.gr[24] = 'c'; 352 /* gr22/gr23 unused, no initrd while reboot. */ 353 cpu[0]->env.gr[21] = smp_cpus; 354 /* tell firmware fw_cfg port */ 355 cpu[0]->env.gr[19] = FW_CFG_IO_BASE; 356} 357 --- 17 unchanged lines hidden --- |