Lines Matching +full:cpu +full:- +full:to +full:- +full:pci

3  * (C) Copyright 2018-2023 Helge Deller <deller@gmx.de>
10 #include "cpu.h"
13 #include "qemu/error-report.h"
20 #include "hw/char/serial-mm.h"
27 #include "hw/pci/pci.h"
28 #include "hw/pci/pci_device.h"
29 #include "hw/pci-host/astro.h"
30 #include "hw/pci-host/dino.h"
40 #define HPA_POWER_BUTTON (FIRMWARE_END - 0x10)
58 /* clear bit 31 to indicate that the power switch was pressed. */ in hppa_powerdown_req()
67 /* Fallback for unassigned PCI I/O operations. Avoids MCHK. */
99 NULL, "isa-io", 0x800); in hppa_isa_bus()
111 * Helper functions to emulate RTC clock and DebugOutputPort
138 rtc_ref = val - time(NULL); in io_cpu_write()
144 qemu_chr_fe_write_all(debugout->be, &ch, 1); in io_cpu_write()
170 addr &= (0x10000000 - 1); in linux_kernel_virt_to_phys()
184 static HPPACPU *cpu[HPPA_MAX_CPUS]; variable
200 int btlb_entries = HPPA_BTLB_ENTRIES(&cpu[0]->env); in create_fw_cfg()
204 fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, ms->smp.cpus); in create_fw_cfg()
206 fw_cfg_add_i64(fw_cfg, FW_CFG_RAM_SIZE, ms->ram_size); in create_fw_cfg()
209 fw_cfg_add_file(fw_cfg, "/etc/firmware-min-version", in create_fw_cfg()
212 val = cpu_to_le64(HPPA_TLB_ENTRIES - btlb_entries); in create_fw_cfg()
213 fw_cfg_add_file(fw_cfg, "/etc/cpu/tlb_entries", in create_fw_cfg()
217 fw_cfg_add_file(fw_cfg, "/etc/cpu/btlb_entries", in create_fw_cfg()
220 len = strlen(mc->name) + 1; in create_fw_cfg()
222 g_memdup2(mc->name, len), len); in create_fw_cfg()
225 fw_cfg_add_file(fw_cfg, "/etc/hppa/power-button-addr", in create_fw_cfg()
229 fw_cfg_add_file(fw_cfg, "/etc/hppa/rtc-addr", in create_fw_cfg()
236 fw_cfg_add_i16(fw_cfg, FW_CFG_BOOT_DEVICE, ms->boot_config.order[0]); in create_fw_cfg()
239 fw_cfg_add_file(fw_cfg, "/etc/qemu-version", in create_fw_cfg()
263 object_property_set_link(OBJECT(dev), "memory-as", OBJECT(addr_space), in dino_init()
276 unsigned int smp_cpus = machine->smp.cpus; in machine_HP_common_init_cpus()
283 cpu[i] = HPPA_CPU(cpu_create(machine->cpu_type)); in machine_HP_common_init_cpus()
290 if (hppa_is_pa20(&cpu[0]->env)) { in machine_HP_common_init_cpus()
292 ram_max = 0xf0000000; /* 3.75 GB (limited by 32-bit firmware) */ in machine_HP_common_init_cpus()
295 ram_max = 0xf0000000; /* 3.75 GB (32-bit CPU) */ in machine_HP_common_init_cpus()
301 g_autofree char *name = g_strdup_printf("cpu%u-io-eir", i); in machine_HP_common_init_cpus()
304 memory_region_init_io(cpu_region, OBJECT(cpu[i]), &hppa_io_eir_ops, in machine_HP_common_init_cpus()
305 cpu[i], name, 4); in machine_HP_common_init_cpus()
311 /* RTC and DebugOutputPort on CPU #0 */ in machine_HP_common_init_cpus()
313 memory_region_init_io(cpu_region, OBJECT(cpu[0]), &hppa_io_helper_ops, in machine_HP_common_init_cpus()
314 cpu[0], "cpu0-io-rtc", 2 * sizeof(uint64_t)); in machine_HP_common_init_cpus()
319 if (machine->ram_size > ram_max) { in machine_HP_common_init_cpus()
320 info_report("Max RAM size limited to %" PRIu64 " MB", ram_max / MiB); in machine_HP_common_init_cpus()
321 machine->ram_size = ram_max; in machine_HP_common_init_cpus()
323 memory_region_add_subregion_overlap(addr_space, 0, machine->ram, -1); in machine_HP_common_init_cpus()
334 const char *kernel_filename = machine->kernel_filename; in machine_HP_common_init_tail()
335 const char *kernel_cmdline = machine->kernel_cmdline; in machine_HP_common_init_tail()
336 const char *initrd_filename = machine->initrd_filename; in machine_HP_common_init_tail()
337 const char *firmware = machine->firmware; in machine_HP_common_init_tail()
347 unsigned int smp_cpus = machine->smp.cpus; in machine_HP_common_init_tail()
352 dev = DEVICE(pci_create_simple(pci_bus, -1, "lsi53c895a")); in machine_HP_common_init_tail()
357 if (machine->enable_graphics && vga_interface_type != VGA_NONE) { in machine_HP_common_init_tail()
373 pci_init_nic_devices(pci_bus, mc->default_nic); in machine_HP_common_init_tail()
376 pci_dev = pci_new(-1, "pci-serial"); in machine_HP_common_init_tail()
378 /* bind default keyboard/serial to Diva card */ in machine_HP_common_init_tail()
383 pci_config_set_vendor_id(pci_dev->config, PCI_VENDOR_ID_HP); in machine_HP_common_init_tail()
384 pci_config_set_device_id(pci_dev->config, 0x1048); in machine_HP_common_init_tail()
385 pci_set_word(&pci_dev->config[PCI_SUBSYSTEM_VENDOR_ID], PCI_VENDOR_ID_HP); in machine_HP_common_init_tail()
386 pci_set_word(&pci_dev->config[PCI_SUBSYSTEM_ID], 0x1227); /* Powerbar */ in machine_HP_common_init_tail()
388 /* create a second serial PCI card when running Astro */ in machine_HP_common_init_tail()
390 pci_dev = pci_new(-1, "pci-serial-4x"); in machine_HP_common_init_tail()
399 if (!lasi_dev && machine->enable_graphics && defaults_enabled()) { in machine_HP_common_init_tail()
402 pci_create_simple(pci_bus, -1, "pci-ohci"); in machine_HP_common_init_tail()
405 usb_create_simple(usb_bus, "usb-kbd"); in machine_HP_common_init_tail()
406 usb_create_simple(usb_bus, "usb-mouse"); in machine_HP_common_init_tail()
417 well load it directly from an ELF image. Load the 64-bit in machine_HP_common_init_tail()
418 firmware on 64-bit machines by default if not specified in machine_HP_common_init_tail()
422 firmware = lasi_dev ? "hppa-firmware.img" : "hppa-firmware64.img"; in machine_HP_common_init_tail()
439 "-0x%08" PRIx64 ", entry at 0x%08" PRIx64 ".\n", in machine_HP_common_init_tail()
451 (FIRMWARE_END - FIRMWARE_START), &error_fatal); in machine_HP_common_init_tail()
468 "-0x%08" PRIx64 ", entry at 0x%08" PRIx64 in machine_HP_common_init_tail()
473 cpu[0]->env.gr[24] = 0x4000; in machine_HP_common_init_tail()
474 pstrcpy_targphys("cmdline", cpu[0]->env.gr[24], in machine_HP_common_init_tail()
491 (1) Due to sign-extension problems and PDC, in machine_HP_common_init_tail()
494 initrd_base = MIN(machine->ram_size, 1 * GiB); in machine_HP_common_init_tail()
495 initrd_base = initrd_base - 64 * KiB; in machine_HP_common_init_tail()
496 initrd_base = (initrd_base - initrd_size) & TARGET_PAGE_MASK; in machine_HP_common_init_tail()
504 cpu[0]->env.gr[23] = initrd_base; in machine_HP_common_init_tail()
505 cpu[0]->env.gr[22] = initrd_base + initrd_size; in machine_HP_common_init_tail()
511 * mode (kernel_entry=1), and to boot from CD (gr[24]='d') in machine_HP_common_init_tail()
514 kernel_entry = machine->boot_config.has_menu ? machine->boot_config.menu : 0; in machine_HP_common_init_tail()
515 cpu[0]->env.gr[24] = machine->boot_config.order[0]; in machine_HP_common_init_tail()
518 /* We jump to the firmware entry routine and pass the in machine_HP_common_init_tail()
522 cpu[0]->env.gr[26] = machine->ram_size; in machine_HP_common_init_tail()
523 cpu[0]->env.gr[25] = kernel_entry; in machine_HP_common_init_tail()
525 /* tell firmware how many SMP CPUs to present in inventory table */ in machine_HP_common_init_tail()
526 cpu[0]->env.gr[21] = smp_cpus; in machine_HP_common_init_tail()
529 cpu[0]->env.gr[19] = FW_CFG_IO_BASE; in machine_HP_common_init_tail()
546 if (hppa_is_pa20(&cpu[0]->env)) { in machine_HP_B160L_init()
547 error_report("The HP B160L workstation requires a 32-bit " in machine_HP_B160L_init()
548 "CPU. Use '-machine C3700' instead."); in machine_HP_B160L_init()
558 /* Init Dino (PCI host bus chip). */ in machine_HP_B160L_init()
563 pci_bus = PCI_BUS(qdev_get_child_bus(dino_dev, "pci")); in machine_HP_B160L_init()
626 if (!hppa_is_pa20(&cpu[0]->env)) { in machine_HP_C3700_init()
627 error_report("The HP C3000 workstation requires a 64-bit CPU. " in machine_HP_C3700_init()
628 "Use '-machine B160L' instead."); in machine_HP_C3700_init()
632 /* Init Astro and the Elroys (PCI host bus chips). */ in machine_HP_C3700_init()
638 pci_bus = PCI_BUS(qdev_get_child_bus(DEVICE(astro->elroy[0]), "pci")); in machine_HP_C3700_init()
647 unsigned int smp_cpus = ms->smp.cpus; in hppa_machine_reset()
653 * Monarch CPU will initialize firmware, secondary CPUs in hppa_machine_reset()
656 CPUState *cs = CPU(cpu[i]); in hppa_machine_reset()
659 cpu[i]->env.psw = PSW_Q; in hppa_machine_reset()
660 cpu[i]->env.gr[5] = CPU_HPA + i * 0x1000; in hppa_machine_reset()
662 cs->exception_index = -1; in hppa_machine_reset()
663 cs->halted = 0; in hppa_machine_reset()
667 if (cpu[0]->env.gr[26] == ms->ram_size) { in hppa_machine_reset()
671 cpu[0]->env.gr[26] = ms->ram_size; in hppa_machine_reset()
672 cpu[0]->env.gr[25] = 0; /* no firmware boot menu */ in hppa_machine_reset()
673 cpu[0]->env.gr[24] = 'c'; in hppa_machine_reset()
675 cpu[0]->env.gr[21] = smp_cpus; in hppa_machine_reset()
677 cpu[0]->env.gr[19] = FW_CFG_IO_BASE; in hppa_machine_reset()
698 mc->desc = "HP B160L workstation"; in HP_B160L_machine_init_class_init()
699 mc->default_cpu_type = TYPE_HPPA_CPU; in HP_B160L_machine_init_class_init()
700 mc->valid_cpu_types = valid_cpu_types; in HP_B160L_machine_init_class_init()
701 mc->init = machine_HP_B160L_init; in HP_B160L_machine_init_class_init()
702 mc->reset = hppa_machine_reset; in HP_B160L_machine_init_class_init()
703 mc->block_default_type = IF_SCSI; in HP_B160L_machine_init_class_init()
704 mc->max_cpus = HPPA_MAX_CPUS; in HP_B160L_machine_init_class_init()
705 mc->default_cpus = 1; in HP_B160L_machine_init_class_init()
706 mc->is_default = true; in HP_B160L_machine_init_class_init()
707 mc->default_ram_size = 512 * MiB; in HP_B160L_machine_init_class_init()
708 mc->default_boot_order = "cd"; in HP_B160L_machine_init_class_init()
709 mc->default_ram_id = "ram"; in HP_B160L_machine_init_class_init()
710 mc->default_nic = "tulip"; in HP_B160L_machine_init_class_init()
712 nc->nmi_monitor_handler = hppa_nmi; in HP_B160L_machine_init_class_init()
734 mc->desc = "HP C3700 workstation"; in HP_C3700_machine_init_class_init()
735 mc->default_cpu_type = TYPE_HPPA64_CPU; in HP_C3700_machine_init_class_init()
736 mc->valid_cpu_types = valid_cpu_types; in HP_C3700_machine_init_class_init()
737 mc->init = machine_HP_C3700_init; in HP_C3700_machine_init_class_init()
738 mc->reset = hppa_machine_reset; in HP_C3700_machine_init_class_init()
739 mc->block_default_type = IF_SCSI; in HP_C3700_machine_init_class_init()
740 mc->max_cpus = HPPA_MAX_CPUS; in HP_C3700_machine_init_class_init()
741 mc->default_cpus = 1; in HP_C3700_machine_init_class_init()
742 mc->is_default = false; in HP_C3700_machine_init_class_init()
743 mc->default_ram_size = 1024 * MiB; in HP_C3700_machine_init_class_init()
744 mc->default_boot_order = "cd"; in HP_C3700_machine_init_class_init()
745 mc->default_ram_id = "ram"; in HP_C3700_machine_init_class_init()
746 mc->default_nic = "tulip"; in HP_C3700_machine_init_class_init()
748 nc->nmi_monitor_handler = hppa_nmi; in HP_C3700_machine_init_class_init()