Skip to content

Commit 9c050b6

Browse files
committed
Merge remote-tracking branch 'remotes/philmd/tags/mips-20211018' into staging
MIPS patches queue Hardware emulation: - Generate FDT blob for Boston machine (Jiaxun) - VIA chipset cleanups (Zoltan) TCG: - Use tcg_constant() in Compact branch and MSA opcodes - Restrict nanoMIPS DSP MULT[U] opcode accumulator to Rel6 - Fix DEXTRV_S.H DSP opcode - Remove unused TCG temporary for some DSP opcodes # gpg: Signature made Sun 17 Oct 2021 03:50:57 PM PDT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <[email protected]>" [full] * remotes/philmd/tags/mips-20211018: via-ide: Avoid using isa_get_irq() vt82c686: Add a method to VIA_ISA to raise ISA interrupts vt82c686: Move common code to via_isa_realize via-ide: Set user_creatable to false target/mips: Remove unused TCG temporary in gen_mipsdsp_accinsn() target/mips: Fix DEXTRV_S.H DSP opcode target/mips: Use tcg_constant_tl() in gen_compute_compact_branch() target/mips: Use explicit extract32() calls in gen_msa_i5() target/mips: Use tcg_constant_i32() in gen_msa_3rf() target/mips: Use tcg_constant_i32() in gen_msa_2r() target/mips: Use tcg_constant_i32() in gen_msa_2rf() target/mips: Use tcg_constant_i32() in gen_msa_elm_df() target/mips: Remove unused register from MSA 2R/2RF instruction format hw/mips/boston: Add FDT generator hw/mips/boston: Allow loading elf kernel and dtb hw/mips/boston: Massage memory map information target/mips: Check nanoMIPS DSP MULT[U] accumulator with Release 6 Signed-off-by: Richard Henderson <[email protected]>
2 parents c148a05 + 2792cf2 commit 9c050b6

File tree

7 files changed

+415
-110
lines changed

7 files changed

+415
-110
lines changed

hw/ide/via.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
#include "migration/vmstate.h"
3030
#include "qemu/module.h"
3131
#include "sysemu/dma.h"
32-
32+
#include "hw/isa/vt82c686.h"
3333
#include "hw/ide/pci.h"
3434
#include "trace.h"
3535

@@ -112,7 +112,7 @@ static void via_ide_set_irq(void *opaque, int n, int level)
112112
d->config[0x70 + n * 8] &= ~0x80;
113113
}
114114

115-
qemu_set_irq(isa_get_irq(NULL, 14 + n), level);
115+
via_isa_set_irq(pci_get_function_0(d), 14 + n, level);
116116
}
117117

118118
static void via_ide_reset(DeviceState *dev)
@@ -217,6 +217,9 @@ static void via_ide_class_init(ObjectClass *klass, void *data)
217217

218218
dc->reset = via_ide_reset;
219219
dc->vmsd = &vmstate_ide_pci;
220+
/* Reason: only works as function of VIA southbridge */
221+
dc->user_creatable = false;
222+
220223
k->realize = via_ide_realize;
221224
k->exit = via_ide_exitfn;
222225
k->vendor_id = PCI_VENDOR_ID_VIA;

hw/isa/vt82c686.c

Lines changed: 37 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -542,6 +542,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(ViaISAState, VIA_ISA)
542542
struct ViaISAState {
543543
PCIDevice dev;
544544
qemu_irq cpu_intr;
545+
qemu_irq *isa_irqs;
546+
ISABus *isa_bus;
545547
ViaSuperIOState *via_sio;
546548
};
547549

@@ -566,12 +568,42 @@ static const TypeInfo via_isa_info = {
566568
},
567569
};
568570

571+
void via_isa_set_irq(PCIDevice *d, int n, int level)
572+
{
573+
ViaISAState *s = VIA_ISA(d);
574+
qemu_set_irq(s->isa_irqs[n], level);
575+
}
576+
569577
static void via_isa_request_i8259_irq(void *opaque, int irq, int level)
570578
{
571579
ViaISAState *s = opaque;
572580
qemu_set_irq(s->cpu_intr, level);
573581
}
574582

583+
static void via_isa_realize(PCIDevice *d, Error **errp)
584+
{
585+
ViaISAState *s = VIA_ISA(d);
586+
DeviceState *dev = DEVICE(d);
587+
qemu_irq *isa_irq;
588+
int i;
589+
590+
qdev_init_gpio_out(dev, &s->cpu_intr, 1);
591+
isa_irq = qemu_allocate_irqs(via_isa_request_i8259_irq, s, 1);
592+
s->isa_bus = isa_bus_new(dev, get_system_memory(), pci_address_space_io(d),
593+
&error_fatal);
594+
s->isa_irqs = i8259_init(s->isa_bus, *isa_irq);
595+
isa_bus_irqs(s->isa_bus, s->isa_irqs);
596+
i8254_pit_init(s->isa_bus, 0x40, 0, NULL);
597+
i8257_dma_init(s->isa_bus, 0);
598+
mc146818_rtc_init(s->isa_bus, 2000, NULL);
599+
600+
for (i = 0; i < PCI_CONFIG_HEADER_SIZE; i++) {
601+
if (i < PCI_COMMAND || i >= PCI_REVISION_ID) {
602+
d->wmask[i] = 0;
603+
}
604+
}
605+
}
606+
575607
/* TYPE_VT82C686B_ISA */
576608

577609
static void vt82c686b_write_config(PCIDevice *d, uint32_t addr,
@@ -610,27 +642,10 @@ static void vt82c686b_isa_reset(DeviceState *dev)
610642
static void vt82c686b_realize(PCIDevice *d, Error **errp)
611643
{
612644
ViaISAState *s = VIA_ISA(d);
613-
DeviceState *dev = DEVICE(d);
614-
ISABus *isa_bus;
615-
qemu_irq *isa_irq;
616-
int i;
617645

618-
qdev_init_gpio_out(dev, &s->cpu_intr, 1);
619-
isa_irq = qemu_allocate_irqs(via_isa_request_i8259_irq, s, 1);
620-
isa_bus = isa_bus_new(dev, get_system_memory(), pci_address_space_io(d),
621-
&error_fatal);
622-
isa_bus_irqs(isa_bus, i8259_init(isa_bus, *isa_irq));
623-
i8254_pit_init(isa_bus, 0x40, 0, NULL);
624-
i8257_dma_init(isa_bus, 0);
625-
s->via_sio = VIA_SUPERIO(isa_create_simple(isa_bus,
646+
via_isa_realize(d, errp);
647+
s->via_sio = VIA_SUPERIO(isa_create_simple(s->isa_bus,
626648
TYPE_VT82C686B_SUPERIO));
627-
mc146818_rtc_init(isa_bus, 2000, NULL);
628-
629-
for (i = 0; i < PCI_CONFIG_HEADER_SIZE; i++) {
630-
if (i < PCI_COMMAND || i >= PCI_REVISION_ID) {
631-
d->wmask[i] = 0;
632-
}
633-
}
634649
}
635650

636651
static void vt82c686b_class_init(ObjectClass *klass, void *data)
@@ -691,26 +706,10 @@ static void vt8231_isa_reset(DeviceState *dev)
691706
static void vt8231_realize(PCIDevice *d, Error **errp)
692707
{
693708
ViaISAState *s = VIA_ISA(d);
694-
DeviceState *dev = DEVICE(d);
695-
ISABus *isa_bus;
696-
qemu_irq *isa_irq;
697-
int i;
698-
699-
qdev_init_gpio_out(dev, &s->cpu_intr, 1);
700-
isa_irq = qemu_allocate_irqs(via_isa_request_i8259_irq, s, 1);
701-
isa_bus = isa_bus_new(dev, get_system_memory(), pci_address_space_io(d),
702-
&error_fatal);
703-
isa_bus_irqs(isa_bus, i8259_init(isa_bus, *isa_irq));
704-
i8254_pit_init(isa_bus, 0x40, 0, NULL);
705-
i8257_dma_init(isa_bus, 0);
706-
s->via_sio = VIA_SUPERIO(isa_create_simple(isa_bus, TYPE_VT8231_SUPERIO));
707-
mc146818_rtc_init(isa_bus, 2000, NULL);
708709

709-
for (i = 0; i < PCI_CONFIG_HEADER_SIZE; i++) {
710-
if (i < PCI_COMMAND || i >= PCI_REVISION_ID) {
711-
d->wmask[i] = 0;
712-
}
713-
}
710+
via_isa_realize(d, errp);
711+
s->via_sio = VIA_SUPERIO(isa_create_simple(s->isa_bus,
712+
TYPE_VT8231_SUPERIO));
714713
}
715714

716715
static void vt8231_class_init(ObjectClass *klass, void *data)

0 commit comments

Comments
 (0)