Lines Matching +full:suspend +full:- +full:to +full:- +full:ram

2  * Generic Loongson-3 Platform support
4 * Copyright (c) 2018-2020 Huacai Chen (chenhc@lemote.com)
5 * Copyright (c) 2018-2020 Jiaxun Yang <jiaxun.yang@flygoat.com>
22 * Generic virtualized PC Platform based on Loongson-3 CPU (MIPS64R2 with
32 #include "hw/char/serial-mm.h"
45 #include "hw/pci-host/gpex.h"
52 #include "qemu/error-report.h"
59 * Loongson-3's virtual machine BIOS can be obtained here:
60 * 1, https://github.com/loongson-community/firmware-nonfree
104 #define TYPE_LOONGSON_MACHINE MACHINE_TYPE_NAME("loongson3-virt")
184 bp->efi.smbios.vers = cpu_to_le16(1); in init_boot_param()
185 init_reset_system(&(bp->reset_system)); in init_boot_param()
187 init_loongson_params(&(bp->efi.smbios.lp), p, cpu_count, processor_id, in init_boot_param()
260 /* Suspend */ in init_boot_rom()
285 static const uint8_t suspend[6] = {128, 0, 0, 129, 128, 128}; in fw_conf_init() local
290 fw_cfg_add_i16(fw_cfg, FW_CFG_NB_CPUS, (uint16_t)current_machine->smp.cpus); in fw_conf_init()
291 fw_cfg_add_i16(fw_cfg, FW_CFG_MAX_CPUS, (uint16_t)current_machine->smp.max_cpus); in fw_conf_init()
296 fw_cfg_add_file(fw_cfg, "etc/system-states", in fw_conf_init()
297 g_memdup2(suspend, sizeof(suspend)), sizeof(suspend)); in fw_conf_init()
323 ret += (1 + snprintf(cmdline_buf + ret, 256 - ret, "g")); in set_prom_cmdline()
328 ret += (1 + snprintf(cmdline_buf + ret, 256 - ret, in set_prom_cmdline()
333 ret += (1 + snprintf(cmdline_buf + ret, 256 - ret, "%s", in set_prom_cmdline()
379 error_report("memory too small for initial ram disk '%s'", in load_kernel()
386 loaderparams.ram_size - initrd_offset); in load_kernel()
389 if (initrd_size == (target_ulong) -1) { in load_kernel()
390 error_report("could not load initial ram disk '%s'", in load_kernel()
405 CPUMIPSState *env = &cpu->env; in generic_cpu_reset()
410 env->CP0_Status &= ~((1 << CP0St_BEV) | (1 << CP0St_ERL)); in generic_cpu_reset()
420 CPUMIPSState *env = &cpu->env; in main_cpu_reset()
422 env->active_tc.gpr[4] = loaderparams.a0; in main_cpu_reset()
423 env->active_tc.gpr[5] = loaderparams.a1; in main_cpu_reset()
424 env->active_tc.gpr[6] = loaderparams.a2; in main_cpu_reset()
425 env->active_tc.PC = loaderparams.kernel_entry; in main_cpu_reset()
442 pci_bus = PCI_HOST_BRIDGE(dev)->bus; in loongson3_virt_devices_init()
444 s->ecam_alias = g_new0(MemoryRegion, 1); in loongson3_virt_devices_init()
446 memory_region_init_alias(s->ecam_alias, OBJECT(dev), "pcie-ecam", in loongson3_virt_devices_init()
450 s->ecam_alias); in loongson3_virt_devices_init()
452 s->mmio_alias = g_new0(MemoryRegion, 1); in loongson3_virt_devices_init()
454 memory_region_init_alias(s->mmio_alias, OBJECT(dev), "pcie-mmio", in loongson3_virt_devices_init()
459 s->mmio_alias); in loongson3_virt_devices_init()
461 s->pio_alias = g_new0(MemoryRegion, 1); in loongson3_virt_devices_init()
462 memory_region_init_alias(s->pio_alias, OBJECT(dev), "pcie-pio", in loongson3_virt_devices_init()
466 virt_memmap[VIRT_PCIE_PIO].base, s->pio_alias); in loongson3_virt_devices_init()
478 if (defaults_enabled() && object_class_by_name("pci-ohci")) { in loongson3_virt_devices_init()
481 pci_create_simple(pci_bus, -1, "pci-ohci"); in loongson3_virt_devices_init()
484 usb_create_simple(usb_bus, "usb-kbd"); in loongson3_virt_devices_init()
485 usb_create_simple(usb_bus, "usb-tablet"); in loongson3_virt_devices_init()
488 pci_init_nic_devices(pci_bus, mc->default_nic); in loongson3_virt_devices_init()
500 const char *kernel_cmdline = machine->kernel_cmdline; in mips_loongson3_virt_init()
501 const char *kernel_filename = machine->kernel_filename; in mips_loongson3_virt_init()
502 const char *initrd_filename = machine->initrd_filename; in mips_loongson3_virt_init()
503 ram_addr_t ram_size = machine->ram_size; in mips_loongson3_virt_init()
506 MemoryRegion *ram = g_new(MemoryRegion, 1); in mips_loongson3_virt_init() local
513 if (!machine->cpu_type) { in mips_loongson3_virt_init()
514 machine->cpu_type = MIPS_CPU_TYPE_NAME("Loongson-3A1000"); in mips_loongson3_virt_init()
516 if (!cpu_type_supports_isa(machine->cpu_type, INSN_LOONGSON3A)) { in mips_loongson3_virt_init()
517 error_report("Loongson-3/TCG needs a Loongson-3 series cpu"); in mips_loongson3_virt_init()
521 if (!machine->cpu_type) { in mips_loongson3_virt_init()
522 machine->cpu_type = MIPS_CPU_TYPE_NAME("Loongson-3A4000"); in mips_loongson3_virt_init()
524 if (!strstr(machine->cpu_type, "Loongson-3A4000")) { in mips_loongson3_virt_init()
525 error_report("Loongson-3/KVM needs cpu type Loongson-3A4000"); in mips_loongson3_virt_init()
531 error_report("Loongson-3 machine needs at least 512MB memory"); in mips_loongson3_virt_init()
538 * devices to emulate this feature. in mips_loongson3_virt_init()
548 qdev_prop_set_uint32(ipi, "num-cpu", machine->smp.cpus); in mips_loongson3_virt_init()
568 cpuclk = clock_new(OBJECT(machine), "cpu-refclk"); in mips_loongson3_virt_init()
571 for (i = machine->smp.cpus - 1; i >= 0; --i) { in mips_loongson3_virt_init()
577 cpu = mips_cpu_create_with_clock(machine->cpu_type, cpuclk, false); in mips_loongson3_virt_init()
587 qdev_connect_gpio_out(ipi, i, cpu->env.irq[6]); in mips_loongson3_virt_init()
591 if (ase_lcsr_available(&MIPS_CPU(cpu)->env)) { in mips_loongson3_virt_init()
596 memory_region_add_subregion(&MIPS_CPU(cpu)->env.iocsr.mr, in mips_loongson3_virt_init()
598 s->core_iocsr[i] = core_iocsr; in mips_loongson3_virt_init()
602 continue; /* Only node-0 can be connected to LIOINTC */ in mips_loongson3_virt_init()
608 pin, cpu->env.irq[ip + 2]); in mips_loongson3_virt_init()
611 assert(cpu); /* This variable points to the first created cpu. */ in mips_loongson3_virt_init()
613 /* Allocate RAM/BIOS, 0x00000000~0x10000000 is alias of 0x80000000~0x90000000 */ in mips_loongson3_virt_init()
616 memory_region_init_alias(ram, NULL, "loongson3.lowmem", in mips_loongson3_virt_init()
617 machine->ram, 0, virt_memmap[VIRT_LOWMEM].size); in mips_loongson3_virt_init()
623 virt_memmap[VIRT_LOWMEM].base, ram); in mips_loongson3_virt_init()
627 virt_memmap[VIRT_HIGHMEM].base, machine->ram); in mips_loongson3_virt_init()
633 * Please use -L to set the BIOS path and -bios to set bios name. in mips_loongson3_virt_init()
642 loaderparams.kernel_entry = load_kernel(&cpu->env); in mips_loongson3_virt_init()
645 init_boot_param(machine->smp.cpus, cpu->env.CP0_PRid); in mips_loongson3_virt_init()
648 machine->firmware ?: LOONGSON3_BIOSNAME); in mips_loongson3_virt_init()
655 bios_size = -1; in mips_loongson3_virt_init()
660 error_report("Could not load MIPS bios '%s'", machine->firmware); in mips_loongson3_virt_init()
674 mc->desc = "Loongson-3 Virtualization Platform"; in loongson3v_machine_class_init()
675 mc->init = mips_loongson3_virt_init; in loongson3v_machine_class_init()
676 mc->block_default_type = IF_IDE; in loongson3v_machine_class_init()
677 mc->max_cpus = LOONGSON_MAX_VCPUS; in loongson3v_machine_class_init()
678 mc->default_ram_id = "loongson3.highram"; in loongson3v_machine_class_init()
679 mc->default_ram_size = 1600 * MiB; in loongson3v_machine_class_init()
680 mc->default_nic = "virtio-net-pci"; in loongson3v_machine_class_init()