From: Bernhard Beschow <shentey@gmail.com>
To: BALATON Zoltan <balaton@eik.bme.hu>
Cc: qemu-devel@nongnu.org, qemu-block@nongnu.org,
"Jiaxun Yang" <jiaxun.yang@flygoat.com>,
"John Snow" <jsnow@redhat.com>,
"Huacai Chen" <chenhuacai@kernel.org>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
qemu-ppc@nongnu.org
Subject: Re: [PATCH 11/13] hw/ide/sii3112: Reuse PCIIDEState::{cmd,data}_ops
Date: Sun, 23 Apr 2023 22:19:16 +0000 [thread overview]
Message-ID: <1568DC85-6305-4EE5-9F22-E3E792E36538@gmail.com> (raw)
In-Reply-To: <468a2251-0484-ab97-217c-10d965af6c67@eik.bme.hu>
Am 22. April 2023 21:10:14 UTC schrieb BALATON Zoltan <balaton@eik.bme.hu>:
>On Sat, 22 Apr 2023, Bernhard Beschow wrote:
>> Allows to unexport pci_ide_{cmd,data}_le_ops and models TYPE_SII3112_PCI as a
>> standard-compliant PCI IDE device.
>>
>> Signed-off-by: Bernhard Beschow <shentey@gmail.com>
>> ---
>> include/hw/ide/pci.h | 2 --
>> hw/ide/pci.c | 4 ++--
>> hw/ide/sii3112.c | 50 ++++++++++++++++----------------------------
>> 3 files changed, 20 insertions(+), 36 deletions(-)
>>
>> diff --git a/include/hw/ide/pci.h b/include/hw/ide/pci.h
>> index 5025df5b82..dbb4b13161 100644
>> --- a/include/hw/ide/pci.h
>> +++ b/include/hw/ide/pci.h
>> @@ -62,6 +62,4 @@ void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val);
>> extern MemoryRegionOps bmdma_addr_ioport_ops;
>> void pci_ide_create_devs(PCIDevice *dev);
>>
>> -extern const MemoryRegionOps pci_ide_cmd_le_ops;
>> -extern const MemoryRegionOps pci_ide_data_le_ops;
>> #endif
>> diff --git a/hw/ide/pci.c b/hw/ide/pci.c
>> index b2fcc00a64..97ccc75aa6 100644
>> --- a/hw/ide/pci.c
>> +++ b/hw/ide/pci.c
>> @@ -60,7 +60,7 @@ static void pci_ide_ctrl_write(void *opaque, hwaddr addr,
>> ide_ctrl_write(bus, addr + 2, data);
>> }
>>
>> -const MemoryRegionOps pci_ide_cmd_le_ops = {
>> +static const MemoryRegionOps pci_ide_cmd_le_ops = {
>> .read = pci_ide_status_read,
>> .write = pci_ide_ctrl_write,
>> .endianness = DEVICE_LITTLE_ENDIAN,
>> @@ -98,7 +98,7 @@ static void pci_ide_data_write(void *opaque, hwaddr addr,
>> }
>> }
>>
>> -const MemoryRegionOps pci_ide_data_le_ops = {
>> +static const MemoryRegionOps pci_ide_data_le_ops = {
>> .read = pci_ide_data_read,
>> .write = pci_ide_data_write,
>> .endianness = DEVICE_LITTLE_ENDIAN,
>> diff --git a/hw/ide/sii3112.c b/hw/ide/sii3112.c
>> index 0af897a9ef..9cf920369f 100644
>> --- a/hw/ide/sii3112.c
>> +++ b/hw/ide/sii3112.c
>> @@ -88,21 +88,9 @@ static uint64_t sii3112_reg_read(void *opaque, hwaddr addr,
>> val |= (d->regs[1].confstat & (1UL << 11) ? (1 << 4) : 0);
>> val |= (uint32_t)d->i.bmdma[1].status << 16;
>> break;
>> - case 0x80 ... 0x87:
>> - val = pci_ide_data_le_ops.read(&d->i.bus[0], addr - 0x80, size);
>> - break;
>> - case 0x8a:
>> - val = pci_ide_cmd_le_ops.read(&d->i.bus[0], 2, size);
>> - break;
>> case 0xa0:
>> val = d->regs[0].confstat;
>> break;
>> - case 0xc0 ... 0xc7:
>> - val = pci_ide_data_le_ops.read(&d->i.bus[1], addr - 0xc0, size);
>> - break;
>> - case 0xca:
>> - val = pci_ide_cmd_le_ops.read(&d->i.bus[1], 2, size);
>> - break;
>> case 0xe0:
>> val = d->regs[1].confstat;
>> break;
>> @@ -171,18 +159,6 @@ static void sii3112_reg_write(void *opaque, hwaddr addr,
>> case 0x0c ... 0x0f:
>> bmdma_addr_ioport_ops.write(&d->i.bmdma[1], addr - 12, val, size);
>> break;
>> - case 0x80 ... 0x87:
>> - pci_ide_data_le_ops.write(&d->i.bus[0], addr - 0x80, val, size);
>> - break;
>> - case 0x8a:
>> - pci_ide_cmd_le_ops.write(&d->i.bus[0], 2, val, size);
>> - break;
>> - case 0xc0 ... 0xc7:
>> - pci_ide_data_le_ops.write(&d->i.bus[1], addr - 0xc0, val, size);
>> - break;
>> - case 0xca:
>> - pci_ide_cmd_le_ops.write(&d->i.bus[1], 2, val, size);
>> - break;
>> case 0x100:
>> d->regs[0].scontrol = val & 0xfff;
>> if (val & 1) {
>> @@ -259,6 +235,11 @@ static void sii3112_pci_realize(PCIDevice *dev, Error **errp)
>> pci_config_set_interrupt_pin(dev->config, 1);
>> pci_set_byte(dev->config + PCI_CACHE_LINE_SIZE, 8);
>>
>> + pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_IO, &s->data_ops[0]);
>> + pci_register_bar(dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &s->cmd_ops[0]);
>> + pci_register_bar(dev, 2, PCI_BASE_ADDRESS_SPACE_IO, &s->data_ops[1]);
>> + pci_register_bar(dev, 3, PCI_BASE_ADDRESS_SPACE_IO, &s->cmd_ops[1]);
>> +
>> /* BAR5 is in PCI memory space */
>> memory_region_init_io(&d->mmio, OBJECT(d), &sii3112_reg_ops, d,
>> "sii3112.bar5", 0x200);
>> @@ -266,17 +247,22 @@ static void sii3112_pci_realize(PCIDevice *dev, Error **errp)
>>
>> /* BAR0-BAR4 are PCI I/O space aliases into BAR5 */
>
>This patch breaks the above comment
Indeed. It's now the other way around.
>but I think you should not mess with BAR0-4 at all and leave to to aliased into BAR5. These have the same registers mirrored and some guests access them via the memory mapped BAR5 while others prefer the io mapped BAR0-4 so removing these from BAR5 would break some guests.
BARs 0-3 are the PCI-native BARs and BAR4 is the BMDMA BAR which are mapped by via and cmd646 already since they support these modes. SIL3112 supports these modes as well but had custom implementations so far while ignoring the attributes of the parent class. Now that the parent class already initializes these attributes we can just reuse them here which in addition makes it very obvious that SIL3112 supports these modes.
I'll split this patch and the next one to (hopefully) make more visible what happens.
> If you want to remove something from BAR5 and map subregions implementing those instead then I think only BAR5 needs to be chnaged or I'm not getting what is happening here so a more detailed commit message would be needed.
Agreed. I'll put wording similar to above into the commit message.
>
>Was this tested? A minimal test might be booting AROS and MorphOS on sam460ex.
I tested with MorphOS on sam460ex. The second ppc test case in the cover letter was actually supposed to show this.
Best regards,
Bernhard
>
>Regards,
>BALATON Zoltan
>
>> mr = g_new(MemoryRegion, 1);
>> - memory_region_init_alias(mr, OBJECT(d), "sii3112.bar0", &d->mmio, 0x80, 8);
>> - pci_register_bar(dev, 0, PCI_BASE_ADDRESS_SPACE_IO, mr);
>> + memory_region_init_alias(mr, OBJECT(d), "sii3112.bar0", &s->data_ops[0], 0,
>> + memory_region_size(&s->data_ops[0]));
>> + memory_region_add_subregion_overlap(&d->mmio, 0x80, mr, 1);
>> mr = g_new(MemoryRegion, 1);
>> - memory_region_init_alias(mr, OBJECT(d), "sii3112.bar1", &d->mmio, 0x88, 4);
>> - pci_register_bar(dev, 1, PCI_BASE_ADDRESS_SPACE_IO, mr);
>> + memory_region_init_alias(mr, OBJECT(d), "sii3112.bar1", &s->cmd_ops[0], 0,
>> + memory_region_size(&s->cmd_ops[0]));
>> + memory_region_add_subregion_overlap(&d->mmio, 0x88, mr, 1);
>> mr = g_new(MemoryRegion, 1);
>> - memory_region_init_alias(mr, OBJECT(d), "sii3112.bar2", &d->mmio, 0xc0, 8);
>> - pci_register_bar(dev, 2, PCI_BASE_ADDRESS_SPACE_IO, mr);
>> + memory_region_init_alias(mr, OBJECT(d), "sii3112.bar2", &s->data_ops[1], 0,
>> + memory_region_size(&s->data_ops[1]));
>> + memory_region_add_subregion_overlap(&d->mmio, 0xc0, mr, 1);
>> mr = g_new(MemoryRegion, 1);
>> - memory_region_init_alias(mr, OBJECT(d), "sii3112.bar3", &d->mmio, 0xc8, 4);
>> - pci_register_bar(dev, 3, PCI_BASE_ADDRESS_SPACE_IO, mr);
>> + memory_region_init_alias(mr, OBJECT(d), "sii3112.bar3", &s->cmd_ops[1], 0,
>> + memory_region_size(&s->cmd_ops[1]));
>> + memory_region_add_subregion_overlap(&d->mmio, 0xc8, mr, 1);
>> +
>> mr = g_new(MemoryRegion, 1);
>> memory_region_init_alias(mr, OBJECT(d), "sii3112.bar4", &d->mmio, 0, 16);
>> pci_register_bar(dev, 4, PCI_BASE_ADDRESS_SPACE_IO, mr);
>>
next prev parent reply other threads:[~2023-04-23 22:20 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-22 15:07 [PATCH 00/13] Clean up PCI IDE device models Bernhard Beschow
2023-04-22 15:07 ` [PATCH 01/13] hw/ide/pci: Expose legacy interrupts as GPIOs Bernhard Beschow
2023-04-26 10:41 ` Mark Cave-Ayland
2023-04-26 19:26 ` Bernhard Beschow
2023-04-22 15:07 ` [PATCH 02/13] hw/ide/via: Implement ISA IRQ routing Bernhard Beschow
2023-04-22 17:23 ` BALATON Zoltan
2023-04-22 18:47 ` Bernhard Beschow
2023-04-22 19:21 ` BALATON Zoltan
2023-04-24 7:50 ` Bernhard Beschow
2023-04-24 10:10 ` BALATON Zoltan
2023-04-26 10:55 ` Mark Cave-Ayland
2023-04-22 15:07 ` [PATCH 03/13] hw/isa/vt82c686: Remove via_isa_set_irq() Bernhard Beschow
2023-04-26 10:55 ` Mark Cave-Ayland
2023-04-22 15:07 ` [PATCH 04/13] hw/ide: Extract IDEBus assignment into bmdma_init() Bernhard Beschow
2023-04-22 17:31 ` BALATON Zoltan
2023-04-23 17:36 ` Philippe Mathieu-Daudé
2023-04-26 10:56 ` Mark Cave-Ayland
2023-04-22 15:07 ` [PATCH 05/13] hw/ide: Extract pci_ide_class_init() Bernhard Beschow
2023-04-22 17:34 ` BALATON Zoltan
2023-04-22 18:59 ` Bernhard Beschow
2023-04-23 17:41 ` Philippe Mathieu-Daudé
2023-04-23 22:11 ` Bernhard Beschow
2023-04-23 22:23 ` BALATON Zoltan
2023-04-26 11:04 ` Mark Cave-Ayland
2023-04-26 18:32 ` Bernhard Beschow
2023-04-22 15:07 ` [PATCH 06/13] hw/ide: Extract bmdma_init_ops() Bernhard Beschow
2023-04-23 17:43 ` Philippe Mathieu-Daudé
2023-04-23 22:06 ` Bernhard Beschow
2023-04-26 11:14 ` Mark Cave-Ayland
2023-04-22 15:07 ` [PATCH 07/13] hw/ide: Extract pci_ide_{cmd, data}_le_ops initialization into base class constructor Bernhard Beschow
2023-04-23 17:46 ` [PATCH 07/13] hw/ide: Extract pci_ide_{cmd,data}_le_ops " Philippe Mathieu-Daudé
2023-04-24 7:45 ` Bernhard Beschow
2023-04-26 11:16 ` [PATCH 07/13] hw/ide: Extract pci_ide_{cmd, data}_le_ops " Mark Cave-Ayland
2023-04-22 15:07 ` [PATCH 08/13] hw/ide: Rename PCIIDEState::*_bar attributes Bernhard Beschow
2023-04-22 17:53 ` BALATON Zoltan
2023-04-26 11:21 ` Mark Cave-Ayland
2023-04-26 18:29 ` Bernhard Beschow
2023-04-27 11:07 ` Mark Cave-Ayland
2023-04-22 15:07 ` [PATCH 09/13] hw/ide/piix: Disuse isa_get_irq() Bernhard Beschow
2023-04-26 11:33 ` Mark Cave-Ayland
2023-04-26 18:25 ` Bernhard Beschow
2023-04-27 12:31 ` Mark Cave-Ayland
2023-05-13 11:53 ` Bernhard Beschow
2023-05-14 12:43 ` Mark Cave-Ayland
2023-04-22 15:07 ` [PATCH 10/13] hw/ide/piix: Reuse PCIIDEState::{cmd,data}_ops Bernhard Beschow
2023-04-26 11:37 ` Mark Cave-Ayland
2023-04-26 18:18 ` Bernhard Beschow
2023-04-26 20:14 ` Bernhard Beschow
2023-04-27 10:52 ` Mark Cave-Ayland
2023-04-27 18:15 ` Bernhard Beschow
2023-04-28 15:58 ` Bernhard Beschow
2023-04-28 17:00 ` BALATON Zoltan
2023-05-03 19:52 ` Mark Cave-Ayland
2023-05-13 12:21 ` Bernhard Beschow
2023-05-18 14:53 ` Mark Cave-Ayland
2023-05-19 17:09 ` Bernhard Beschow
2023-04-22 15:07 ` [PATCH 11/13] hw/ide/sii3112: " Bernhard Beschow
2023-04-22 21:10 ` BALATON Zoltan
2023-04-23 22:19 ` Bernhard Beschow [this message]
2023-04-23 22:38 ` BALATON Zoltan
2023-04-26 11:41 ` Mark Cave-Ayland
2023-04-26 20:24 ` Bernhard Beschow
2023-04-26 23:24 ` BALATON Zoltan
2023-04-27 11:15 ` Mark Cave-Ayland
2023-04-27 12:55 ` BALATON Zoltan
2023-05-03 20:25 ` Mark Cave-Ayland
2023-04-22 15:07 ` [PATCH 12/13] hw/ide/sii3112: Reuse PCIIDEState::bmdma_ops Bernhard Beschow
2023-04-26 11:44 ` Mark Cave-Ayland
2023-04-26 20:26 ` Bernhard Beschow
2023-04-22 15:07 ` [PATCH 13/13] hw/ide: Extract bmdma_clear_status() Bernhard Beschow
2023-04-22 21:26 ` BALATON Zoltan
2023-04-23 7:48 ` Bernhard Beschow
2023-04-23 10:40 ` BALATON Zoltan
2023-04-23 21:53 ` Bernhard Beschow
2023-04-22 22:46 ` BALATON Zoltan
2023-04-23 7:35 ` Bernhard Beschow
2023-04-26 11:48 ` Mark Cave-Ayland
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1568DC85-6305-4EE5-9F22-E3E792E36538@gmail.com \
--to=shentey@gmail.com \
--cc=balaton@eik.bme.hu \
--cc=chenhuacai@kernel.org \
--cc=jiaxun.yang@flygoat.com \
--cc=jsnow@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-ppc@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).