mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'mips-20221030' of https://github.com/philmd/qemu into staging
MIPS patches queue - Convert nanoMIPS disassembler from C++ to C (Milica Lazarevic) - Consolidate VT82xx/PIIX south bridges (Bernhard Beschow) - Remove unused MAX_IDE_BUS definition (Zoltan Balaton) - Fix branch displacement for BEQZC/BNEZC (David Daney) - Don't set link_up for Boston's xilinx-pcie (Jiaxun Yang) - Use bootloader API to set BAR registers in Malta (Jiaxun Yang) # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmNfpO8ACgkQ4+MsLN6t # wN76og/+LMuTYYRkhETZyw3v5sTAexU0kmXyf/xMZ8PLi37Al2ia3qxo70qTh34m # P2bbpCC46xzLCVY4s/84pb1lgpANNJNMIHwUni9HL4cTPPR7muKqpUOTEVh6Ghcq # Zb2+e7yTKpIgvwDcIQEzU74gDyCcJoAo4LcLRVtuXer6olQsYsmlUqr3gg+Oy5kI # zuJxOxZRoAP4H/ausGPg8oves28S3fVsw9J1x5p7vlzGt1Kx/i1XilSuGXI3H/79 # 0tgofUYkyFQRjxPLlE9OeYVwAo8gLFWwnkw/AOjHSOgGUsj/7yJXORm0ng/vQOqS # j5036BHxmhYyEVL8aJAc7fvb4/m6walsXJItThqJ/JXphdAXi17fCCn0Wf9jqGrr # io4Gm5qZI1bO/1orTaQywZTCjSi3pcuM0NxLZ/Qf7CVoXvNcddpDrSlyD3ILz9cq # XqyaKQJ3kLvWTpJ6kZknl3s4kGnnMZw+2lZlusrSjrI4QnXmgoGLiSTRPxny1qQ0 # NaqAnys0Skn0fJ002na3lJgo4mzxzN+zEzMHsbB+RZv9JB2lIwQBm+zXDFHhb9Zv # H0UFowi5lhJUjIZ5+bl4wtT2XoM4HM1YxU66a0t4SktMnKvBPCVBLUSj74Qdl1K8 # 7e2SvWB2ovNgscwek/srk1TT+yf7a6CmAraATSm0Fm/kxT5xa/Y= # =EqI/ # -----END PGP SIGNATURE----- # gpg: Signature made Mon 31 Oct 2022 06:35:27 EDT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] # Primary key fingerprint: FAAB E75E 1291 7221 DCFD 6BB2 E3E3 2C2C DEAD C0DE * tag 'mips-20221030' of https://github.com/philmd/qemu: (55 commits) hw/mips/malta: Use bootloader helper to set BAR registers hw/mips: Use bl_gen_kernel_jump to generate bootloaders hw/mips/bootloader: Allow bl_gen_jump_kernel to optionally set register hw/mips/boston: Don't set link_up for xilinx-pcie hw/isa/piix4: Move pci_ide_create_devs() call to board code hw/isa/piix4: Add missing initialization hw/isa/Kconfig: Fix dependencies of piix4 southbridge hw/mips/malta: Reuse dev variable hw/isa/piix3: Remove unused include hw/ide/piix: Introduce TYPE_ macros for PIIX IDE controllers hw/isa/piix4: Rename wrongly named method hw/isa/piix3: Prefer pci_address_space() over get_system_memory() hw/isa/piix3: Modernize reset handling hw/isa/piix3: Add size constraints to rcr_ops hw/isa/piix3: Remove extra ';' outside of functions hw/i386/pc: Create DMA controllers in south bridges disas/mips: Fix branch displacement for BEQZC and BNEZC disas/nanomips: Rename nanomips.cpp to nanomips.c disas/nanomips: Remove argument passing by ref disas/nanomips: Replace Cpp enums for C enums ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
@@ -23,7 +23,6 @@ CONFIG_APM=y
|
||||
CONFIG_I8257=y
|
||||
CONFIG_PIIX4=y
|
||||
CONFIG_IDE_ISA=y
|
||||
CONFIG_IDE_PIIX=y
|
||||
CONFIG_PFLASH_CFI01=y
|
||||
CONFIG_I8259=y
|
||||
CONFIG_MC146818RTC=y
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Default configuration for mips64el-softmmu
|
||||
|
||||
include ../mips-softmmu/common.mak
|
||||
CONFIG_IDE_VIA=y
|
||||
CONFIG_FULOONG=y
|
||||
CONFIG_LOONGSON3V=y
|
||||
CONFIG_ATI_VGA=y
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ common_ss.add(when: 'CONFIG_HPPA_DIS', if_true: files('hppa.c'))
|
||||
common_ss.add(when: 'CONFIG_M68K_DIS', if_true: files('m68k.c'))
|
||||
common_ss.add(when: 'CONFIG_MICROBLAZE_DIS', if_true: files('microblaze.c'))
|
||||
common_ss.add(when: 'CONFIG_MIPS_DIS', if_true: files('mips.c'))
|
||||
common_ss.add(when: 'CONFIG_NANOMIPS_DIS', if_true: files('nanomips.cpp'))
|
||||
common_ss.add(when: 'CONFIG_NANOMIPS_DIS', if_true: files('nanomips.c'))
|
||||
common_ss.add(when: 'CONFIG_NIOS2_DIS', if_true: files('nios2.c'))
|
||||
common_ss.add(when: 'CONFIG_RISCV_DIS', if_true: files('riscv.c'))
|
||||
common_ss.add(when: 'CONFIG_SH4_DIS', if_true: files('sh4.c'))
|
||||
|
||||
+10
-2
@@ -20,6 +20,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/bitops.h"
|
||||
#include "disas/dis-asm.h"
|
||||
|
||||
/* mips.h. Mips opcode list for GDB, the GNU debugger.
|
||||
@@ -1334,9 +1335,9 @@ const struct mips_opcode mips_builtin_opcodes[] =
|
||||
{"balc", "+p", 0xe8000000, 0xfc000000, UBD|WR_31, 0, I32R6},
|
||||
{"bc", "+p", 0xc8000000, 0xfc000000, UBD|WR_31, 0, I32R6},
|
||||
{"jic", "t,o", 0xd8000000, 0xffe00000, UBD|RD_t, 0, I32R6},
|
||||
{"beqzc", "s,+p", 0xd8000000, 0xfc000000, CBD|RD_s, 0, I32R6},
|
||||
{"beqzc", "s,+q", 0xd8000000, 0xfc000000, CBD|RD_s, 0, I32R6},
|
||||
{"jialc", "t,o", 0xf8000000, 0xffe00000, UBD|RD_t, 0, I32R6},
|
||||
{"bnezc", "s,+p", 0xf8000000, 0xfc000000, CBD|RD_s, 0, I32R6},
|
||||
{"bnezc", "s,+q", 0xf8000000, 0xfc000000, CBD|RD_s, 0, I32R6},
|
||||
{"beqzalc", "s,t,p", 0x20000000, 0xffe00000, CBD|RD_s|RD_t, 0, I32R6},
|
||||
{"bovc", "s,t,p", 0x20000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
|
||||
{"beqc", "s,t,p", 0x20000000, 0xfc000000, CBD|RD_s|RD_t, 0, I32R6},
|
||||
@@ -4462,6 +4463,13 @@ print_insn_args (const char *d,
|
||||
(*info->print_address_func) (info->target, info);
|
||||
break;
|
||||
|
||||
case 'q':
|
||||
/* Sign extend the displacement with 21 bits. */
|
||||
delta = sextract32(l, OP_SH_DELTA, 21);
|
||||
info->target = (delta << 2) + pc + INSNLEN;
|
||||
(*info->print_address_func) (info->target, info);
|
||||
break;
|
||||
|
||||
case 't': /* Coprocessor 0 reg name */
|
||||
(*info->fprintf_func) (info->stream, "%s",
|
||||
mips_cp0_names[(l >> OP_SH_RT) &
|
||||
|
||||
+3898
-4288
File diff suppressed because it is too large
Load Diff
-1076
File diff suppressed because it is too large
Load Diff
@@ -20,8 +20,6 @@
|
||||
#include "qemu/datadir.h"
|
||||
#include "net/net.h"
|
||||
|
||||
#define MAX_IDE_BUS 2
|
||||
|
||||
static uint64_t cpu_alpha_superpage_to_phys(void *opaque, uint64_t addr)
|
||||
{
|
||||
if (((addr >> 41) & 3) == 2) {
|
||||
|
||||
@@ -30,8 +30,6 @@
|
||||
#include "qemu/log.h"
|
||||
#include "net/net.h"
|
||||
|
||||
#define MAX_IDE_BUS 2
|
||||
|
||||
#define MIN_SEABIOS_HPPA_VERSION 6 /* require at least this fw version */
|
||||
|
||||
#define HPA_POWER_BUTTON (FIRMWARE_END - 0x10)
|
||||
|
||||
@@ -47,7 +47,6 @@
|
||||
#include "multiboot.h"
|
||||
#include "hw/rtc/mc146818rtc.h"
|
||||
#include "hw/intc/i8259.h"
|
||||
#include "hw/dma/i8257.h"
|
||||
#include "hw/timer/i8254.h"
|
||||
#include "hw/input/i8042.h"
|
||||
#include "hw/irq.h"
|
||||
@@ -1320,8 +1319,6 @@ void pc_basic_device_init(struct PCMachineState *pcms,
|
||||
pcspk_init(pcms->pcspk, isa_bus, pit);
|
||||
}
|
||||
|
||||
i8257_dma_init(isa_bus, 0);
|
||||
|
||||
/* Super I/O */
|
||||
pc_superio_init(isa_bus, create_fdctrl, pcms->i8042_enabled,
|
||||
pcms->vmport != ON_OFF_AUTO_ON);
|
||||
|
||||
+4
-1
@@ -26,6 +26,7 @@
|
||||
#include CONFIG_DEVICES
|
||||
|
||||
#include "qemu/units.h"
|
||||
#include "hw/dma/i8257.h"
|
||||
#include "hw/loader.h"
|
||||
#include "hw/i386/x86.h"
|
||||
#include "hw/i386/pc.h"
|
||||
@@ -39,6 +40,7 @@
|
||||
#include "hw/usb.h"
|
||||
#include "net/net.h"
|
||||
#include "hw/ide/pci.h"
|
||||
#include "hw/ide/piix.h"
|
||||
#include "hw/irq.h"
|
||||
#include "sysemu/kvm.h"
|
||||
#include "hw/kvm/clock.h"
|
||||
@@ -225,6 +227,7 @@ static void pc_init1(MachineState *machine,
|
||||
pci_bus = NULL;
|
||||
isa_bus = isa_bus_new(NULL, get_system_memory(), system_io,
|
||||
&error_abort);
|
||||
i8257_dma_init(isa_bus, 0);
|
||||
pcms->hpet_enabled = false;
|
||||
}
|
||||
isa_bus_irqs(isa_bus, x86ms->gsi);
|
||||
@@ -257,7 +260,7 @@ static void pc_init1(MachineState *machine,
|
||||
if (pcmc->pci_enabled) {
|
||||
PCIDevice *dev;
|
||||
|
||||
dev = pci_create_simple(pci_bus, piix3_devfn + 1, "piix3-ide");
|
||||
dev = pci_create_simple(pci_bus, piix3_devfn + 1, TYPE_PIIX3_IDE);
|
||||
pci_ide_create_devs(dev);
|
||||
idebus[0] = qdev_get_child_bus(&dev->qdev, "ide.0");
|
||||
idebus[1] = qdev_get_child_bus(&dev->qdev, "ide.1");
|
||||
|
||||
+3
-2
@@ -36,6 +36,7 @@
|
||||
#include "sysemu/blockdev.h"
|
||||
#include "sysemu/dma.h"
|
||||
|
||||
#include "hw/ide/piix.h"
|
||||
#include "hw/ide/pci.h"
|
||||
#include "trace.h"
|
||||
|
||||
@@ -202,7 +203,7 @@ static void piix3_ide_class_init(ObjectClass *klass, void *data)
|
||||
}
|
||||
|
||||
static const TypeInfo piix3_ide_info = {
|
||||
.name = "piix3-ide",
|
||||
.name = TYPE_PIIX3_IDE,
|
||||
.parent = TYPE_PCI_IDE,
|
||||
.class_init = piix3_ide_class_init,
|
||||
};
|
||||
@@ -224,7 +225,7 @@ static void piix4_ide_class_init(ObjectClass *klass, void *data)
|
||||
}
|
||||
|
||||
static const TypeInfo piix4_ide_info = {
|
||||
.name = "piix4-ide",
|
||||
.name = TYPE_PIIX4_IDE,
|
||||
.parent = TYPE_PCI_IDE,
|
||||
.class_init = piix4_ide_class_init,
|
||||
};
|
||||
|
||||
+1
-1
@@ -230,7 +230,7 @@ static void via_ide_class_init(ObjectClass *klass, void *data)
|
||||
}
|
||||
|
||||
static const TypeInfo via_ide_info = {
|
||||
.name = "via-ide",
|
||||
.name = TYPE_VIA_IDE,
|
||||
.parent = TYPE_PCI_IDE,
|
||||
.class_init = via_ide_class_init,
|
||||
};
|
||||
|
||||
@@ -33,13 +33,20 @@ config PC87312
|
||||
|
||||
config PIIX3
|
||||
bool
|
||||
select I8257
|
||||
select ISA_BUS
|
||||
|
||||
config PIIX4
|
||||
bool
|
||||
# For historical reasons, SuperIO devices are created in the board
|
||||
# for PIIX4.
|
||||
select ACPI_PIIX4
|
||||
select I8254
|
||||
select I8257
|
||||
select I8259
|
||||
select IDE_PIIX
|
||||
select ISA_BUS
|
||||
select MC146818RTC
|
||||
select USB_UHCI
|
||||
|
||||
config VT82C686
|
||||
@@ -53,6 +60,7 @@ config VT82C686
|
||||
select I8254
|
||||
select I8257
|
||||
select I8259
|
||||
select IDE_VIA
|
||||
select MC146818RTC
|
||||
select PARALLEL
|
||||
|
||||
@@ -67,6 +75,7 @@ config LPC_ICH9
|
||||
bool
|
||||
# For historical reasons, SuperIO devices are created in the board
|
||||
# for ICH9.
|
||||
select I8257
|
||||
select ISA_BUS
|
||||
select ACPI_SMBUS
|
||||
select ACPI_X86_ICH
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
#include "qapi/error.h"
|
||||
#include "qapi/visitor.h"
|
||||
#include "qemu/range.h"
|
||||
#include "hw/dma/i8257.h"
|
||||
#include "hw/isa/isa.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/irq.h"
|
||||
@@ -722,6 +723,8 @@ static void ich9_lpc_realize(PCIDevice *d, Error **errp)
|
||||
qdev_init_gpio_out_named(dev, lpc->gsi, ICH9_GPIO_GSI, GSI_NUM_PINS);
|
||||
|
||||
isa_bus_irqs(isa_bus, lpc->gsi);
|
||||
|
||||
i8257_dma_init(isa_bus, 0);
|
||||
}
|
||||
|
||||
static bool ich9_rst_cnt_needed(void *opaque)
|
||||
|
||||
+17
-11
@@ -25,12 +25,11 @@
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/range.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/dma/i8257.h"
|
||||
#include "hw/southbridge/piix.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/isa/isa.h"
|
||||
#include "hw/xen/xen.h"
|
||||
#include "sysemu/xen.h"
|
||||
#include "sysemu/reset.h"
|
||||
#include "sysemu/runstate.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "hw/acpi/acpi_aml_interface.h"
|
||||
@@ -155,9 +154,9 @@ static void piix3_write_config_xen(PCIDevice *dev,
|
||||
piix3_write_config(dev, address, val, len);
|
||||
}
|
||||
|
||||
static void piix3_reset(void *opaque)
|
||||
static void piix3_reset(DeviceState *dev)
|
||||
{
|
||||
PIIX3State *d = opaque;
|
||||
PIIX3State *d = PIIX3_PCI_DEVICE(dev);
|
||||
uint8_t *pci_conf = d->dev.config;
|
||||
|
||||
pci_conf[0x04] = 0x07; /* master, memory and I/O */
|
||||
@@ -289,15 +288,21 @@ static uint64_t rcr_read(void *opaque, hwaddr addr, unsigned len)
|
||||
static const MemoryRegionOps rcr_ops = {
|
||||
.read = rcr_read,
|
||||
.write = rcr_write,
|
||||
.endianness = DEVICE_LITTLE_ENDIAN
|
||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
.impl = {
|
||||
.min_access_size = 1,
|
||||
.max_access_size = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static void pci_piix3_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
PIIX3State *d = PIIX3_PCI_DEVICE(dev);
|
||||
ISABus *isa_bus;
|
||||
|
||||
if (!isa_bus_new(DEVICE(d), get_system_memory(),
|
||||
pci_address_space_io(dev), errp)) {
|
||||
isa_bus = isa_bus_new(DEVICE(d), pci_address_space(dev),
|
||||
pci_address_space_io(dev), errp);
|
||||
if (!isa_bus) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -306,7 +311,7 @@ static void pci_piix3_realize(PCIDevice *dev, Error **errp)
|
||||
memory_region_add_subregion_overlap(pci_address_space_io(dev),
|
||||
PIIX_RCR_IOPORT, &d->rcr_mem, 1);
|
||||
|
||||
qemu_register_reset(piix3_reset, d);
|
||||
i8257_dma_init(isa_bus, 0);
|
||||
}
|
||||
|
||||
static void build_pci_isa_aml(AcpiDevAmlIf *adev, Aml *scope)
|
||||
@@ -328,6 +333,7 @@ static void pci_piix3_class_init(ObjectClass *klass, void *data)
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
AcpiDevAmlIfClass *adevc = ACPI_DEV_AML_IF_CLASS(klass);
|
||||
|
||||
dc->reset = piix3_reset;
|
||||
dc->desc = "ISA bridge";
|
||||
dc->vmsd = &vmstate_piix3;
|
||||
dc->hotpluggable = false;
|
||||
@@ -370,7 +376,7 @@ static void piix3_realize(PCIDevice *dev, Error **errp)
|
||||
pci_bus_irqs(pci_bus, piix3_set_irq, pci_slot_get_pirq,
|
||||
piix3, PIIX_NUM_PIRQS);
|
||||
pci_bus_set_route_irq_fn(pci_bus, piix3_route_intx_pin_to_irq);
|
||||
};
|
||||
}
|
||||
|
||||
static void piix3_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
@@ -405,7 +411,7 @@ static void piix3_xen_realize(PCIDevice *dev, Error **errp)
|
||||
*/
|
||||
pci_bus_irqs(pci_bus, xen_piix3_set_irq, xen_pci_slot_get_pirq,
|
||||
piix3, XEN_PIIX_NUM_PIRQS);
|
||||
};
|
||||
}
|
||||
|
||||
static void piix3_xen_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
@@ -413,7 +419,7 @@ static void piix3_xen_class_init(ObjectClass *klass, void *data)
|
||||
|
||||
k->config_write = piix3_write_config_xen;
|
||||
k->realize = piix3_xen_realize;
|
||||
};
|
||||
}
|
||||
|
||||
static const TypeInfo piix3_xen_info = {
|
||||
.name = TYPE_PIIX3_XEN_DEVICE,
|
||||
|
||||
+6
-4
@@ -28,6 +28,7 @@
|
||||
#include "hw/irq.h"
|
||||
#include "hw/southbridge/piix.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/ide/piix.h"
|
||||
#include "hw/isa/isa.h"
|
||||
#include "hw/intc/i8259.h"
|
||||
#include "hw/dma/i8257.h"
|
||||
@@ -139,9 +140,11 @@ static void piix4_isa_reset(DeviceState *dev)
|
||||
pci_conf[0xab] = 0x00;
|
||||
pci_conf[0xac] = 0x00;
|
||||
pci_conf[0xae] = 0x00;
|
||||
|
||||
d->rcr = 0;
|
||||
}
|
||||
|
||||
static int piix4_ide_post_load(void *opaque, int version_id)
|
||||
static int piix4_post_load(void *opaque, int version_id)
|
||||
{
|
||||
PIIX4State *s = opaque;
|
||||
|
||||
@@ -156,7 +159,7 @@ static const VMStateDescription vmstate_piix4 = {
|
||||
.name = "PIIX4",
|
||||
.version_id = 3,
|
||||
.minimum_version_id = 2,
|
||||
.post_load = piix4_ide_post_load,
|
||||
.post_load = piix4_post_load,
|
||||
.fields = (VMStateField[]) {
|
||||
VMSTATE_PCI_DEVICE(dev, PIIX4State),
|
||||
VMSTATE_UINT8_V(rcr, PIIX4State, 3),
|
||||
@@ -254,7 +257,6 @@ static void piix4_realize(PCIDevice *dev, Error **errp)
|
||||
if (!qdev_realize(DEVICE(&s->ide), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
pci_ide_create_devs(PCI_DEVICE(&s->ide));
|
||||
|
||||
/* USB */
|
||||
qdev_prop_set_int32(DEVICE(&s->uhci), "addr", dev->devfn + 2);
|
||||
@@ -277,7 +279,7 @@ static void piix4_init(Object *obj)
|
||||
PIIX4State *s = PIIX4_PCI_DEVICE(obj);
|
||||
|
||||
object_initialize_child(obj, "rtc", &s->rtc, TYPE_MC146818_RTC);
|
||||
object_initialize_child(obj, "ide", &s->ide, "piix4-ide");
|
||||
object_initialize_child(obj, "ide", &s->ide, TYPE_PIIX4_IDE);
|
||||
object_initialize_child(obj, "uhci", &s->uhci, "piix4-usb-uhci");
|
||||
|
||||
object_initialize_child(obj, "pm", &s->pm, TYPE_PIIX4_PM);
|
||||
|
||||
+97
-23
@@ -17,11 +17,13 @@
|
||||
#include "hw/isa/vt82c686.h"
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/ide/pci.h"
|
||||
#include "hw/isa/isa.h"
|
||||
#include "hw/isa/superio.h"
|
||||
#include "hw/intc/i8259.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/dma/i8257.h"
|
||||
#include "hw/usb/hcd-uhci.h"
|
||||
#include "hw/timer/i8254.h"
|
||||
#include "hw/rtc/mc146818rtc.h"
|
||||
#include "migration/vmstate.h"
|
||||
@@ -248,6 +250,8 @@ static const ViaPMInitInfo vt82c686b_pm_init_info = {
|
||||
.device_id = PCI_DEVICE_ID_VIA_82C686B_PM,
|
||||
};
|
||||
|
||||
#define TYPE_VT82C686B_PM "vt82c686b-pm"
|
||||
|
||||
static const TypeInfo vt82c686b_pm_info = {
|
||||
.name = TYPE_VT82C686B_PM,
|
||||
.parent = TYPE_VIA_PM,
|
||||
@@ -259,6 +263,8 @@ static const ViaPMInitInfo vt8231_pm_init_info = {
|
||||
.device_id = PCI_DEVICE_ID_VIA_8231_PM,
|
||||
};
|
||||
|
||||
#define TYPE_VT8231_PM "vt8231-pm"
|
||||
|
||||
static const TypeInfo vt8231_pm_info = {
|
||||
.name = TYPE_VT8231_PM,
|
||||
.parent = TYPE_VIA_PM,
|
||||
@@ -543,8 +549,13 @@ struct ViaISAState {
|
||||
PCIDevice dev;
|
||||
qemu_irq cpu_intr;
|
||||
qemu_irq *isa_irqs;
|
||||
ISABus *isa_bus;
|
||||
ViaSuperIOState *via_sio;
|
||||
ViaSuperIOState via_sio;
|
||||
RTCState rtc;
|
||||
PCIIDEState ide;
|
||||
UHCIState uhci[2];
|
||||
ViaPMState pm;
|
||||
PCIDevice ac97;
|
||||
PCIDevice mc97;
|
||||
};
|
||||
|
||||
static const VMStateDescription vmstate_via = {
|
||||
@@ -557,10 +568,23 @@ static const VMStateDescription vmstate_via = {
|
||||
}
|
||||
};
|
||||
|
||||
static void via_isa_init(Object *obj)
|
||||
{
|
||||
ViaISAState *s = VIA_ISA(obj);
|
||||
|
||||
object_initialize_child(obj, "rtc", &s->rtc, TYPE_MC146818_RTC);
|
||||
object_initialize_child(obj, "ide", &s->ide, TYPE_VIA_IDE);
|
||||
object_initialize_child(obj, "uhci1", &s->uhci[0], TYPE_VT82C686B_USB_UHCI);
|
||||
object_initialize_child(obj, "uhci2", &s->uhci[1], TYPE_VT82C686B_USB_UHCI);
|
||||
object_initialize_child(obj, "ac97", &s->ac97, TYPE_VIA_AC97);
|
||||
object_initialize_child(obj, "mc97", &s->mc97, TYPE_VIA_MC97);
|
||||
}
|
||||
|
||||
static const TypeInfo via_isa_info = {
|
||||
.name = TYPE_VIA_ISA,
|
||||
.parent = TYPE_PCI_DEVICE,
|
||||
.instance_size = sizeof(ViaISAState),
|
||||
.instance_init = via_isa_init,
|
||||
.abstract = true,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
{ INTERFACE_CONVENTIONAL_PCI_DEVICE },
|
||||
@@ -584,24 +608,74 @@ static void via_isa_realize(PCIDevice *d, Error **errp)
|
||||
{
|
||||
ViaISAState *s = VIA_ISA(d);
|
||||
DeviceState *dev = DEVICE(d);
|
||||
PCIBus *pci_bus = pci_get_bus(d);
|
||||
qemu_irq *isa_irq;
|
||||
ISABus *isa_bus;
|
||||
int i;
|
||||
|
||||
qdev_init_gpio_out(dev, &s->cpu_intr, 1);
|
||||
isa_irq = qemu_allocate_irqs(via_isa_request_i8259_irq, s, 1);
|
||||
s->isa_bus = isa_bus_new(dev, get_system_memory(), pci_address_space_io(d),
|
||||
&error_fatal);
|
||||
s->isa_irqs = i8259_init(s->isa_bus, *isa_irq);
|
||||
isa_bus_irqs(s->isa_bus, s->isa_irqs);
|
||||
i8254_pit_init(s->isa_bus, 0x40, 0, NULL);
|
||||
i8257_dma_init(s->isa_bus, 0);
|
||||
mc146818_rtc_init(s->isa_bus, 2000, NULL);
|
||||
isa_bus = isa_bus_new(dev, pci_address_space(d), pci_address_space_io(d),
|
||||
errp);
|
||||
|
||||
if (!isa_bus) {
|
||||
return;
|
||||
}
|
||||
|
||||
s->isa_irqs = i8259_init(isa_bus, *isa_irq);
|
||||
isa_bus_irqs(isa_bus, s->isa_irqs);
|
||||
i8254_pit_init(isa_bus, 0x40, 0, NULL);
|
||||
i8257_dma_init(isa_bus, 0);
|
||||
|
||||
/* RTC */
|
||||
qdev_prop_set_int32(DEVICE(&s->rtc), "base_year", 2000);
|
||||
if (!qdev_realize(DEVICE(&s->rtc), BUS(isa_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
isa_connect_gpio_out(ISA_DEVICE(&s->rtc), 0, s->rtc.isairq);
|
||||
|
||||
for (i = 0; i < PCI_CONFIG_HEADER_SIZE; i++) {
|
||||
if (i < PCI_COMMAND || i >= PCI_REVISION_ID) {
|
||||
d->wmask[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Super I/O */
|
||||
if (!qdev_realize(DEVICE(&s->via_sio), BUS(isa_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Function 1: IDE */
|
||||
qdev_prop_set_int32(DEVICE(&s->ide), "addr", d->devfn + 1);
|
||||
if (!qdev_realize(DEVICE(&s->ide), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Functions 2-3: USB Ports */
|
||||
for (i = 0; i < ARRAY_SIZE(s->uhci); i++) {
|
||||
qdev_prop_set_int32(DEVICE(&s->uhci[i]), "addr", d->devfn + 2 + i);
|
||||
if (!qdev_realize(DEVICE(&s->uhci[i]), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* Function 4: Power Management */
|
||||
qdev_prop_set_int32(DEVICE(&s->pm), "addr", d->devfn + 4);
|
||||
if (!qdev_realize(DEVICE(&s->pm), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Function 5: AC97 Audio */
|
||||
qdev_prop_set_int32(DEVICE(&s->ac97), "addr", d->devfn + 5);
|
||||
if (!qdev_realize(DEVICE(&s->ac97), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* Function 6: MC97 Modem */
|
||||
qdev_prop_set_int32(DEVICE(&s->mc97), "addr", d->devfn + 6);
|
||||
if (!qdev_realize(DEVICE(&s->mc97), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* TYPE_VT82C686B_ISA */
|
||||
@@ -615,7 +689,7 @@ static void vt82c686b_write_config(PCIDevice *d, uint32_t addr,
|
||||
pci_default_write_config(d, addr, val, len);
|
||||
if (addr == 0x85) {
|
||||
/* BIT(1): enable or disable superio config io ports */
|
||||
via_superio_io_enable(s->via_sio, val & BIT(1));
|
||||
via_superio_io_enable(&s->via_sio, val & BIT(1));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -639,13 +713,12 @@ static void vt82c686b_isa_reset(DeviceState *dev)
|
||||
pci_conf[0x77] = 0x10; /* GPIO Control 1/2/3/4 */
|
||||
}
|
||||
|
||||
static void vt82c686b_realize(PCIDevice *d, Error **errp)
|
||||
static void vt82c686b_init(Object *obj)
|
||||
{
|
||||
ViaISAState *s = VIA_ISA(d);
|
||||
ViaISAState *s = VIA_ISA(obj);
|
||||
|
||||
via_isa_realize(d, errp);
|
||||
s->via_sio = VIA_SUPERIO(isa_create_simple(s->isa_bus,
|
||||
TYPE_VT82C686B_SUPERIO));
|
||||
object_initialize_child(obj, "sio", &s->via_sio, TYPE_VT82C686B_SUPERIO);
|
||||
object_initialize_child(obj, "pm", &s->pm, TYPE_VT82C686B_PM);
|
||||
}
|
||||
|
||||
static void vt82c686b_class_init(ObjectClass *klass, void *data)
|
||||
@@ -653,7 +726,7 @@ static void vt82c686b_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
|
||||
k->realize = vt82c686b_realize;
|
||||
k->realize = via_isa_realize;
|
||||
k->config_write = vt82c686b_write_config;
|
||||
k->vendor_id = PCI_VENDOR_ID_VIA;
|
||||
k->device_id = PCI_DEVICE_ID_VIA_82C686B_ISA;
|
||||
@@ -670,6 +743,7 @@ static const TypeInfo vt82c686b_isa_info = {
|
||||
.name = TYPE_VT82C686B_ISA,
|
||||
.parent = TYPE_VIA_ISA,
|
||||
.instance_size = sizeof(ViaISAState),
|
||||
.instance_init = vt82c686b_init,
|
||||
.class_init = vt82c686b_class_init,
|
||||
};
|
||||
|
||||
@@ -684,7 +758,7 @@ static void vt8231_write_config(PCIDevice *d, uint32_t addr,
|
||||
pci_default_write_config(d, addr, val, len);
|
||||
if (addr == 0x50) {
|
||||
/* BIT(2): enable or disable superio config io ports */
|
||||
via_superio_io_enable(s->via_sio, val & BIT(2));
|
||||
via_superio_io_enable(&s->via_sio, val & BIT(2));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -703,13 +777,12 @@ static void vt8231_isa_reset(DeviceState *dev)
|
||||
pci_conf[0x6b] = 0x01; /* Fast IR I/O Base */
|
||||
}
|
||||
|
||||
static void vt8231_realize(PCIDevice *d, Error **errp)
|
||||
static void vt8231_init(Object *obj)
|
||||
{
|
||||
ViaISAState *s = VIA_ISA(d);
|
||||
ViaISAState *s = VIA_ISA(obj);
|
||||
|
||||
via_isa_realize(d, errp);
|
||||
s->via_sio = VIA_SUPERIO(isa_create_simple(s->isa_bus,
|
||||
TYPE_VT8231_SUPERIO));
|
||||
object_initialize_child(obj, "sio", &s->via_sio, TYPE_VT8231_SUPERIO);
|
||||
object_initialize_child(obj, "pm", &s->pm, TYPE_VT8231_PM);
|
||||
}
|
||||
|
||||
static void vt8231_class_init(ObjectClass *klass, void *data)
|
||||
@@ -717,7 +790,7 @@ static void vt8231_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
|
||||
k->realize = vt8231_realize;
|
||||
k->realize = via_isa_realize;
|
||||
k->config_write = vt8231_write_config;
|
||||
k->vendor_id = PCI_VENDOR_ID_VIA;
|
||||
k->device_id = PCI_DEVICE_ID_VIA_8231_ISA;
|
||||
@@ -734,6 +807,7 @@ static const TypeInfo vt8231_isa_info = {
|
||||
.name = TYPE_VT8231_ISA,
|
||||
.parent = TYPE_VIA_ISA,
|
||||
.instance_size = sizeof(ViaISAState),
|
||||
.instance_init = vt8231_init,
|
||||
.class_init = vt8231_class_init,
|
||||
};
|
||||
|
||||
|
||||
+21
-7
@@ -165,15 +165,29 @@ void bl_gen_jump_to(uint32_t **p, target_ulong jump_addr)
|
||||
bl_gen_nop(p); /* delay slot */
|
||||
}
|
||||
|
||||
void bl_gen_jump_kernel(uint32_t **p, target_ulong sp, target_ulong a0,
|
||||
target_ulong a1, target_ulong a2, target_ulong a3,
|
||||
void bl_gen_jump_kernel(uint32_t **p,
|
||||
bool set_sp, target_ulong sp,
|
||||
bool set_a0, target_ulong a0,
|
||||
bool set_a1, target_ulong a1,
|
||||
bool set_a2, target_ulong a2,
|
||||
bool set_a3, target_ulong a3,
|
||||
target_ulong kernel_addr)
|
||||
{
|
||||
bl_gen_load_ulong(p, BL_REG_SP, sp);
|
||||
bl_gen_load_ulong(p, BL_REG_A0, a0);
|
||||
bl_gen_load_ulong(p, BL_REG_A1, a1);
|
||||
bl_gen_load_ulong(p, BL_REG_A2, a2);
|
||||
bl_gen_load_ulong(p, BL_REG_A3, a3);
|
||||
if (set_sp) {
|
||||
bl_gen_load_ulong(p, BL_REG_SP, sp);
|
||||
}
|
||||
if (set_a0) {
|
||||
bl_gen_load_ulong(p, BL_REG_A0, a0);
|
||||
}
|
||||
if (set_a1) {
|
||||
bl_gen_load_ulong(p, BL_REG_A1, a1);
|
||||
}
|
||||
if (set_a2) {
|
||||
bl_gen_load_ulong(p, BL_REG_A2, a2);
|
||||
}
|
||||
if (set_a3) {
|
||||
bl_gen_load_ulong(p, BL_REG_A3, a3);
|
||||
}
|
||||
|
||||
bl_gen_jump_to(p, kernel_addr);
|
||||
}
|
||||
|
||||
+8
-6
@@ -352,7 +352,10 @@ static void gen_firmware(uint32_t *p, hwaddr kernel_entry, hwaddr fdt_addr)
|
||||
* a2/$6 = 0
|
||||
* a3/$7 = 0
|
||||
*/
|
||||
bl_gen_jump_kernel(&p, 0, (int32_t)-2, fdt_addr, 0, 0, kernel_entry);
|
||||
bl_gen_jump_kernel(&p,
|
||||
true, 0, true, (int32_t)-2,
|
||||
true, fdt_addr, true, 0, true, 0,
|
||||
kernel_entry);
|
||||
}
|
||||
|
||||
static const void *boston_fdt_filter(void *opaque, const void *fdt_orig,
|
||||
@@ -425,7 +428,7 @@ static inline XilinxPCIEHost *
|
||||
xilinx_pcie_init(MemoryRegion *sys_mem, uint32_t bus_nr,
|
||||
hwaddr cfg_base, uint64_t cfg_size,
|
||||
hwaddr mmio_base, uint64_t mmio_size,
|
||||
qemu_irq irq, bool link_up)
|
||||
qemu_irq irq)
|
||||
{
|
||||
DeviceState *dev;
|
||||
MemoryRegion *cfg, *mmio;
|
||||
@@ -437,7 +440,6 @@ xilinx_pcie_init(MemoryRegion *sys_mem, uint32_t bus_nr,
|
||||
qdev_prop_set_uint64(dev, "cfg_size", cfg_size);
|
||||
qdev_prop_set_uint64(dev, "mmio_base", mmio_base);
|
||||
qdev_prop_set_uint64(dev, "mmio_size", mmio_size);
|
||||
qdev_prop_set_bit(dev, "link_up", link_up);
|
||||
|
||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
||||
|
||||
@@ -730,21 +732,21 @@ static void boston_mach_init(MachineState *machine)
|
||||
boston_memmap[BOSTON_PCIE0].size,
|
||||
boston_memmap[BOSTON_PCIE0_MMIO].base,
|
||||
boston_memmap[BOSTON_PCIE0_MMIO].size,
|
||||
get_cps_irq(&s->cps, 2), false);
|
||||
get_cps_irq(&s->cps, 2));
|
||||
|
||||
xilinx_pcie_init(sys_mem, 1,
|
||||
boston_memmap[BOSTON_PCIE1].base,
|
||||
boston_memmap[BOSTON_PCIE1].size,
|
||||
boston_memmap[BOSTON_PCIE1_MMIO].base,
|
||||
boston_memmap[BOSTON_PCIE1_MMIO].size,
|
||||
get_cps_irq(&s->cps, 1), false);
|
||||
get_cps_irq(&s->cps, 1));
|
||||
|
||||
pcie2 = xilinx_pcie_init(sys_mem, 2,
|
||||
boston_memmap[BOSTON_PCIE2].base,
|
||||
boston_memmap[BOSTON_PCIE2].size,
|
||||
boston_memmap[BOSTON_PCIE2_MMIO].base,
|
||||
boston_memmap[BOSTON_PCIE2_MMIO].size,
|
||||
get_cps_irq(&s->cps, 0), true);
|
||||
get_cps_irq(&s->cps, 0));
|
||||
|
||||
platreg = g_new(MemoryRegion, 1);
|
||||
memory_region_init_io(platreg, NULL, &boston_platreg_ops, s,
|
||||
|
||||
+20
-28
@@ -49,7 +49,6 @@
|
||||
|
||||
/* Fuloong 2e has a 512k flash: Winbond W39L040AP70Z */
|
||||
#define BIOS_SIZE (512 * KiB)
|
||||
#define MAX_IDE_BUS 2
|
||||
|
||||
/*
|
||||
* PMON is not part of qemu and released with BSD license, anyone
|
||||
@@ -180,8 +179,12 @@ static void write_bootloader(CPUMIPSState *env, uint8_t *base,
|
||||
/* Second part of the bootloader */
|
||||
p = (uint32_t *)(base + 0x040);
|
||||
|
||||
bl_gen_jump_kernel(&p, ENVP_VADDR - 64, 2, ENVP_VADDR, ENVP_VADDR + 8,
|
||||
loaderparams.ram_size, kernel_addr);
|
||||
bl_gen_jump_kernel(&p,
|
||||
true, ENVP_VADDR - 64,
|
||||
true, 2, true, ENVP_VADDR,
|
||||
true, ENVP_VADDR + 8,
|
||||
true, loaderparams.ram_size,
|
||||
kernel_addr);
|
||||
}
|
||||
|
||||
static void main_cpu_reset(void *opaque)
|
||||
@@ -196,29 +199,6 @@ static void main_cpu_reset(void *opaque)
|
||||
}
|
||||
}
|
||||
|
||||
static void vt82c686b_southbridge_init(PCIBus *pci_bus, int slot, qemu_irq intc,
|
||||
I2CBus **i2c_bus)
|
||||
{
|
||||
PCIDevice *dev;
|
||||
|
||||
dev = pci_create_simple_multifunction(pci_bus, PCI_DEVFN(slot, 0), true,
|
||||
TYPE_VT82C686B_ISA);
|
||||
qdev_connect_gpio_out(DEVICE(dev), 0, intc);
|
||||
|
||||
dev = pci_create_simple(pci_bus, PCI_DEVFN(slot, 1), "via-ide");
|
||||
pci_ide_create_devs(dev);
|
||||
|
||||
pci_create_simple(pci_bus, PCI_DEVFN(slot, 2), "vt82c686b-usb-uhci");
|
||||
pci_create_simple(pci_bus, PCI_DEVFN(slot, 3), "vt82c686b-usb-uhci");
|
||||
|
||||
dev = pci_create_simple(pci_bus, PCI_DEVFN(slot, 4), TYPE_VT82C686B_PM);
|
||||
*i2c_bus = I2C_BUS(qdev_get_child_bus(DEVICE(dev), "i2c"));
|
||||
|
||||
/* Audio support */
|
||||
pci_create_simple(pci_bus, PCI_DEVFN(slot, 5), TYPE_VIA_AC97);
|
||||
pci_create_simple(pci_bus, PCI_DEVFN(slot, 6), TYPE_VIA_MC97);
|
||||
}
|
||||
|
||||
/* Network support */
|
||||
static void network_init(PCIBus *pci_bus)
|
||||
{
|
||||
@@ -315,8 +295,20 @@ static void mips_fuloong2e_init(MachineState *machine)
|
||||
pci_bus = bonito_init((qemu_irq *)&(env->irq[2]));
|
||||
|
||||
/* South bridge -> IP5 */
|
||||
vt82c686b_southbridge_init(pci_bus, FULOONG2E_VIA_SLOT, env->irq[5],
|
||||
&smbus);
|
||||
pci_dev = pci_create_simple_multifunction(pci_bus,
|
||||
PCI_DEVFN(FULOONG2E_VIA_SLOT, 0),
|
||||
true, TYPE_VT82C686B_ISA);
|
||||
object_property_add_alias(OBJECT(machine), "rtc-time",
|
||||
object_resolve_path_component(OBJECT(pci_dev),
|
||||
"rtc"),
|
||||
"date");
|
||||
qdev_connect_gpio_out(DEVICE(pci_dev), 0, env->irq[5]);
|
||||
|
||||
dev = DEVICE(object_resolve_path_component(OBJECT(pci_dev), "ide"));
|
||||
pci_ide_create_devs(PCI_DEVICE(dev));
|
||||
|
||||
dev = DEVICE(object_resolve_path_component(OBJECT(pci_dev), "pm"));
|
||||
smbus = I2C_BUS(qdev_get_child_bus(dev, "i2c"));
|
||||
|
||||
/* GPU */
|
||||
if (vga_interface_type != VGA_NONE) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user