* [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup
@ 2025-04-29 17:03 Rakesh Jeyasingh
2025-04-29 17:03 ` [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling Rakesh Jeyasingh
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Rakesh Jeyasingh @ 2025-04-29 17:03 UTC (permalink / raw)
To: qemu-devel; +Cc: pbonzini, philmd, thuth, balaton, rakeshjb010
Changes since v4:
1.Introduced needs_bswap() helper for clean endianness logic
2.use the existing pci_host_data_le_ops.read/write from hw/pci/pci_host.c
v4:https://patchew.org/QEMU/20250331184820.34673-1-rakeshjb010@gmail.com/
Rakesh Jeyasingh (2):
hw/pci-host/gt64120: Fix endianness handling
hw/pci-host: Remove unused pci_host_data_be_ops
hw/pci-host/gt64120.c | 82 ++++++++++++++++++++++----------------
hw/pci/pci_host.c | 6 ---
include/hw/pci-host/dino.h | 4 --
include/hw/pci/pci_host.h | 1 -
4 files changed, 48 insertions(+), 45 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 7+ messages in thread* [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling 2025-04-29 17:03 [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup Rakesh Jeyasingh @ 2025-04-29 17:03 ` Rakesh Jeyasingh 2025-05-17 5:25 ` Rakesh Jeyasingh 2025-05-22 11:32 ` Michael Tokarev 2025-04-29 17:03 ` [PATCH v5 2/2] hw/pci-host: Remove unused pci_host_data_be_ops Rakesh Jeyasingh 2025-05-16 18:14 ` [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup Thomas Huth 2 siblings, 2 replies; 7+ messages in thread From: Rakesh Jeyasingh @ 2025-04-29 17:03 UTC (permalink / raw) To: qemu-devel; +Cc: pbonzini, philmd, thuth, balaton, rakeshjb010 The GT-64120 PCI controller requires special handling where: 1. Host bridge(bus 0 ,device 0) must never be byte-swapped 2. Other devices follow MByteSwap bit in GT_PCI0_CMD The previous implementation incorrectly swapped all accesses, breaking host bridge detection (lspci -d 11ab:4620). Changes made: 1. Removed gt64120_update_pci_cfgdata_mapping() and moved data_mem initialization to gt64120_realize() for cleaner setup 2. Implemented custom read/write handlers that: - Preserve host bridge accesses (extract32(config_reg,11,13)==0) - apply swapping only for non-bridge devices in big-endian mode Fixes: 145e2198 ("hw/mips/gt64xxx_pci: Endian-swap using PCI_HOST_BRIDGE MemoryRegionOps") Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2826 Signed-off-by: Rakesh Jeyasingh <rakeshjb010@gmail.com> --- hw/pci-host/gt64120.c | 82 +++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 34 deletions(-) diff --git a/hw/pci-host/gt64120.c b/hw/pci-host/gt64120.c index 56a6ef93b7..ecb203a3d0 100644 --- a/hw/pci-host/gt64120.c +++ b/hw/pci-host/gt64120.c @@ -320,38 +320,6 @@ static void gt64120_isd_mapping(GT64120State *s) memory_region_transaction_commit(); } -static void gt64120_update_pci_cfgdata_mapping(GT64120State *s) -{ - /* Indexed on MByteSwap bit, see Table 158: PCI_0 Command, Offset: 0xc00 */ - static const MemoryRegionOps *pci_host_data_ops[] = { - &pci_host_data_be_ops, &pci_host_data_le_ops - }; - PCIHostState *phb = PCI_HOST_BRIDGE(s); - - memory_region_transaction_begin(); - - /* - * The setting of the MByteSwap bit and MWordSwap bit in the PCI Internal - * Command Register determines how data transactions from the CPU to/from - * PCI are handled along with the setting of the Endianness bit in the CPU - * Configuration Register. See: - * - Table 16: 32-bit PCI Transaction Endianness - * - Table 158: PCI_0 Command, Offset: 0xc00 - */ - - if (memory_region_is_mapped(&phb->data_mem)) { - memory_region_del_subregion(&s->ISD_mem, &phb->data_mem); - object_unparent(OBJECT(&phb->data_mem)); - } - memory_region_init_io(&phb->data_mem, OBJECT(phb), - pci_host_data_ops[s->regs[GT_PCI0_CMD] & 1], - s, "pci-conf-data", 4); - memory_region_add_subregion_overlap(&s->ISD_mem, GT_PCI0_CFGDATA << 2, - &phb->data_mem, 1); - - memory_region_transaction_commit(); -} - static void gt64120_pci_mapping(GT64120State *s) { memory_region_transaction_begin(); @@ -645,7 +613,6 @@ static void gt64120_writel(void *opaque, hwaddr addr, case GT_PCI0_CMD: case GT_PCI1_CMD: s->regs[saddr] = val & 0x0401fc0f; - gt64120_update_pci_cfgdata_mapping(s); break; case GT_PCI0_TOR: case GT_PCI0_BS_SCS10: @@ -1024,6 +991,48 @@ static const MemoryRegionOps isd_mem_ops = { }, }; +static bool bswap(const GT64120State *s) +{ + PCIHostState *phb = PCI_HOST_BRIDGE(s); + /*check for bus == 0 && device == 0, Bits 11:15 = Device , Bits 16:23 = Bus*/ + bool is_phb_dev0 = extract32(phb->config_reg, 11, 13) == 0; + bool le_mode = FIELD_EX32(s->regs[GT_PCI0_CMD], GT_PCI0_CMD, MByteSwap); + /* Only swap for non-bridge devices in big-endian mode */ + return !le_mode && !is_phb_dev0; +} + +static uint64_t gt64120_pci_data_read(void *opaque, hwaddr addr, unsigned size) +{ + GT64120State *s = opaque; + uint64_t val = pci_host_data_le_ops.read(opaque, addr, size); + + if (bswap(s)) { + val = bswap32(val); + } + return val; +} + +static void gt64120_pci_data_write(void *opaque, hwaddr addr, + uint64_t val, unsigned size) +{ + GT64120State *s = opaque; + + if (bswap(s)) { + val = bswap32(val); + } + pci_host_data_le_ops.write(opaque, addr, val, size); +} + +static const MemoryRegionOps gt64120_pci_data_ops = { + .read = gt64120_pci_data_read, + .write = gt64120_pci_data_write, + .endianness = DEVICE_LITTLE_ENDIAN, + .valid = { + .min_access_size = 4, + .max_access_size = 4, + }, +}; + static void gt64120_reset(DeviceState *dev) { GT64120State *s = GT64120_PCI_HOST_BRIDGE(dev); @@ -1178,7 +1187,6 @@ static void gt64120_reset(DeviceState *dev) gt64120_isd_mapping(s); gt64120_pci_mapping(s); - gt64120_update_pci_cfgdata_mapping(s); } static void gt64120_realize(DeviceState *dev, Error **errp) @@ -1202,6 +1210,12 @@ static void gt64120_realize(DeviceState *dev, Error **errp) memory_region_add_subregion_overlap(&s->ISD_mem, GT_PCI0_CFGADDR << 2, &phb->conf_mem, 1); + memory_region_init_io(&phb->data_mem, OBJECT(phb), + >64120_pci_data_ops, + s, "pci-conf-data", 4); + memory_region_add_subregion_overlap(&s->ISD_mem, GT_PCI0_CFGDATA << 2, + &phb->data_mem, 1); + /* * The whole address space decoded by the GT-64120A doesn't generate -- 2.43.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling 2025-04-29 17:03 ` [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling Rakesh Jeyasingh @ 2025-05-17 5:25 ` Rakesh Jeyasingh 2025-05-17 14:16 ` Paolo Bonzini 2025-05-22 11:32 ` Michael Tokarev 1 sibling, 1 reply; 7+ messages in thread From: Rakesh Jeyasingh @ 2025-05-17 5:25 UTC (permalink / raw) To: qemu-devel Cc: Paolo Bonzini, Philippe Mathieu-Daudé, thuth, BALATON Zoltan [-- Attachment #1: Type: text/plain, Size: 5997 bytes --] On Tue, Apr 29, 2025 at 10:34 PM Rakesh Jeyasingh <rakeshjb010@gmail.com> wrote: > The GT-64120 PCI controller requires special handling where: > 1. Host bridge(bus 0 ,device 0) must never be byte-swapped > 2. Other devices follow MByteSwap bit in GT_PCI0_CMD > > The previous implementation incorrectly swapped all accesses, breaking > host bridge detection (lspci -d 11ab:4620). > > Changes made: > 1. Removed gt64120_update_pci_cfgdata_mapping() and moved data_mem > initialization > to gt64120_realize() for cleaner setup > 2. Implemented custom read/write handlers that: > - Preserve host bridge accesses (extract32(config_reg,11,13)==0) > - apply swapping only for non-bridge devices in big-endian mode > > Fixes: 145e2198 ("hw/mips/gt64xxx_pci: Endian-swap using PCI_HOST_BRIDGE > MemoryRegionOps") > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2826 > > Signed-off-by: Rakesh Jeyasingh <rakeshjb010@gmail.com> > --- > hw/pci-host/gt64120.c | 82 +++++++++++++++++++++++++------------------ > 1 file changed, 48 insertions(+), 34 deletions(-) > > diff --git a/hw/pci-host/gt64120.c b/hw/pci-host/gt64120.c > index 56a6ef93b7..ecb203a3d0 100644 > --- a/hw/pci-host/gt64120.c > +++ b/hw/pci-host/gt64120.c > @@ -320,38 +320,6 @@ static void gt64120_isd_mapping(GT64120State *s) > memory_region_transaction_commit(); > } > > -static void gt64120_update_pci_cfgdata_mapping(GT64120State *s) > -{ > - /* Indexed on MByteSwap bit, see Table 158: PCI_0 Command, Offset: > 0xc00 */ > - static const MemoryRegionOps *pci_host_data_ops[] = { > - &pci_host_data_be_ops, &pci_host_data_le_ops > - }; > - PCIHostState *phb = PCI_HOST_BRIDGE(s); > - > - memory_region_transaction_begin(); > - > - /* > - * The setting of the MByteSwap bit and MWordSwap bit in the PCI > Internal > - * Command Register determines how data transactions from the CPU > to/from > - * PCI are handled along with the setting of the Endianness bit in > the CPU > - * Configuration Register. See: > - * - Table 16: 32-bit PCI Transaction Endianness > - * - Table 158: PCI_0 Command, Offset: 0xc00 > - */ > - > - if (memory_region_is_mapped(&phb->data_mem)) { > - memory_region_del_subregion(&s->ISD_mem, &phb->data_mem); > - object_unparent(OBJECT(&phb->data_mem)); > - } > - memory_region_init_io(&phb->data_mem, OBJECT(phb), > - pci_host_data_ops[s->regs[GT_PCI0_CMD] & 1], > - s, "pci-conf-data", 4); > - memory_region_add_subregion_overlap(&s->ISD_mem, GT_PCI0_CFGDATA << 2, > - &phb->data_mem, 1); > - > - memory_region_transaction_commit(); > -} > - > static void gt64120_pci_mapping(GT64120State *s) > { > memory_region_transaction_begin(); > @@ -645,7 +613,6 @@ static void gt64120_writel(void *opaque, hwaddr addr, > case GT_PCI0_CMD: > case GT_PCI1_CMD: > s->regs[saddr] = val & 0x0401fc0f; > - gt64120_update_pci_cfgdata_mapping(s); > break; > case GT_PCI0_TOR: > case GT_PCI0_BS_SCS10: > @@ -1024,6 +991,48 @@ static const MemoryRegionOps isd_mem_ops = { > }, > }; > > +static bool bswap(const GT64120State *s) > +{ > + PCIHostState *phb = PCI_HOST_BRIDGE(s); > + /*check for bus == 0 && device == 0, Bits 11:15 = Device , Bits 16:23 > = Bus*/ > + bool is_phb_dev0 = extract32(phb->config_reg, 11, 13) == 0; > + bool le_mode = FIELD_EX32(s->regs[GT_PCI0_CMD], GT_PCI0_CMD, > MByteSwap); > + /* Only swap for non-bridge devices in big-endian mode */ > + return !le_mode && !is_phb_dev0; > +} > + > +static uint64_t gt64120_pci_data_read(void *opaque, hwaddr addr, unsigned > size) > +{ > + GT64120State *s = opaque; > + uint64_t val = pci_host_data_le_ops.read(opaque, addr, size); > Hi , I just noticed that I made a mistake in the declaring data length of read val. In previous commits declared as uint32_t (as I think the PCI controller handles 32-bit values, while MemoryRegionOps uses uint64_t returns) Should i consider: 1.sending corrected patch(hoping it not yet merged) 2.or any suggestion on fixing it? > + > + if (bswap(s)) { > + val = bswap32(val); > + } > + return val; > +} > + > +static void gt64120_pci_data_write(void *opaque, hwaddr addr, > + uint64_t val, unsigned size) > +{ > + GT64120State *s = opaque; > + > + if (bswap(s)) { > + val = bswap32(val); > + } > + pci_host_data_le_ops.write(opaque, addr, val, size); > +} > + > +static const MemoryRegionOps gt64120_pci_data_ops = { > + .read = gt64120_pci_data_read, > + .write = gt64120_pci_data_write, > + .endianness = DEVICE_LITTLE_ENDIAN, > + .valid = { > + .min_access_size = 4, > + .max_access_size = 4, > + }, > +}; > + > static void gt64120_reset(DeviceState *dev) > { > GT64120State *s = GT64120_PCI_HOST_BRIDGE(dev); > @@ -1178,7 +1187,6 @@ static void gt64120_reset(DeviceState *dev) > > gt64120_isd_mapping(s); > gt64120_pci_mapping(s); > - gt64120_update_pci_cfgdata_mapping(s); > } > > static void gt64120_realize(DeviceState *dev, Error **errp) > @@ -1202,6 +1210,12 @@ static void gt64120_realize(DeviceState *dev, Error > **errp) > memory_region_add_subregion_overlap(&s->ISD_mem, GT_PCI0_CFGADDR << 2, > &phb->conf_mem, 1); > > + memory_region_init_io(&phb->data_mem, OBJECT(phb), > + >64120_pci_data_ops, > + s, "pci-conf-data", 4); > + memory_region_add_subregion_overlap(&s->ISD_mem, GT_PCI0_CFGDATA << 2, > + &phb->data_mem, 1); > + > > /* > * The whole address space decoded by the GT-64120A doesn't generate > -- > 2.43.0 > > [-- Attachment #2: Type: text/html, Size: 7406 bytes --] ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling 2025-05-17 5:25 ` Rakesh Jeyasingh @ 2025-05-17 14:16 ` Paolo Bonzini 0 siblings, 0 replies; 7+ messages in thread From: Paolo Bonzini @ 2025-05-17 14:16 UTC (permalink / raw) To: Rakesh Jeyasingh, qemu-devel Cc: Philippe Mathieu-Daudé, thuth, BALATON Zoltan On 5/17/25 07:25, Rakesh Jeyasingh wrote: > > > On Tue, Apr 29, 2025 at 10:34 PM Rakesh Jeyasingh <rakeshjb010@gmail.com > <mailto:rakeshjb010@gmail.com>> wrote: > > The GT-64120 PCI controller requires special handling where: > 1. Host bridge(bus 0 ,device 0) must never be byte-swapped > 2. Other devices follow MByteSwap bit in GT_PCI0_CMD > > The previous implementation incorrectly swapped all accesses, breaking > host bridge detection (lspci -d 11ab:4620). > > Changes made: > 1. Removed gt64120_update_pci_cfgdata_mapping() and moved data_mem > initialization > to gt64120_realize() for cleaner setup > 2. Implemented custom read/write handlers that: > - Preserve host bridge accesses (extract32(config_reg,11,13)==0) > - apply swapping only for non-bridge devices in big-endian mode > > Fixes: 145e2198 ("hw/mips/gt64xxx_pci: Endian-swap using > PCI_HOST_BRIDGE MemoryRegionOps") > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2826 > <https://gitlab.com/qemu-project/qemu/-/issues/2826> > > Signed-off-by: Rakesh Jeyasingh <rakeshjb010@gmail.com > <mailto:rakeshjb010@gmail.com>> > --- > hw/pci-host/gt64120.c | 82 +++++++++++++++++++++++++------------------ > 1 file changed, 48 insertions(+), 34 deletions(-) > > diff --git a/hw/pci-host/gt64120.c b/hw/pci-host/gt64120.c > index 56a6ef93b7..ecb203a3d0 100644 > --- a/hw/pci-host/gt64120.c > +++ b/hw/pci-host/gt64120.c > @@ -320,38 +320,6 @@ static void gt64120_isd_mapping(GT64120State *s) > memory_region_transaction_commit(); > } > > -static void gt64120_update_pci_cfgdata_mapping(GT64120State *s) > -{ > - /* Indexed on MByteSwap bit, see Table 158: PCI_0 Command, > Offset: 0xc00 */ > - static const MemoryRegionOps *pci_host_data_ops[] = { > - &pci_host_data_be_ops, &pci_host_data_le_ops > - }; > - PCIHostState *phb = PCI_HOST_BRIDGE(s); > - > - memory_region_transaction_begin(); > - > - /* > - * The setting of the MByteSwap bit and MWordSwap bit in the > PCI Internal > - * Command Register determines how data transactions from the > CPU to/from > - * PCI are handled along with the setting of the Endianness bit > in the CPU > - * Configuration Register. See: > - * - Table 16: 32-bit PCI Transaction Endianness > - * - Table 158: PCI_0 Command, Offset: 0xc00 > - */ > - > - if (memory_region_is_mapped(&phb->data_mem)) { > - memory_region_del_subregion(&s->ISD_mem, &phb->data_mem); > - object_unparent(OBJECT(&phb->data_mem)); > - } > - memory_region_init_io(&phb->data_mem, OBJECT(phb), > - pci_host_data_ops[s->regs[GT_PCI0_CMD] & 1], > - s, "pci-conf-data", 4); > - memory_region_add_subregion_overlap(&s->ISD_mem, > GT_PCI0_CFGDATA << 2, > - &phb->data_mem, 1); > - > - memory_region_transaction_commit(); > -} > - > static void gt64120_pci_mapping(GT64120State *s) > { > memory_region_transaction_begin(); > @@ -645,7 +613,6 @@ static void gt64120_writel(void *opaque, hwaddr > addr, > case GT_PCI0_CMD: > case GT_PCI1_CMD: > s->regs[saddr] = val & 0x0401fc0f; > - gt64120_update_pci_cfgdata_mapping(s); > break; > case GT_PCI0_TOR: > case GT_PCI0_BS_SCS10: > @@ -1024,6 +991,48 @@ static const MemoryRegionOps isd_mem_ops = { > }, > }; > > +static bool bswap(const GT64120State *s) > +{ > + PCIHostState *phb = PCI_HOST_BRIDGE(s); > + /*check for bus == 0 && device == 0, Bits 11:15 = Device , Bits > 16:23 = Bus*/ > + bool is_phb_dev0 = extract32(phb->config_reg, 11, 13) == 0; > + bool le_mode = FIELD_EX32(s->regs[GT_PCI0_CMD], GT_PCI0_CMD, > MByteSwap); > + /* Only swap for non-bridge devices in big-endian mode */ > + return !le_mode && !is_phb_dev0; > +} > + > +static uint64_t gt64120_pci_data_read(void *opaque, hwaddr addr, > unsigned size) > +{ > + GT64120State *s = opaque; > + uint64_t val = pci_host_data_le_ops.read(opaque, addr, size); > > Hi , I just noticed that I made a mistake in the declaring data length > of read val. In previous commits declared as uint32_t (as I think the > PCI controller handles 32-bit values, while MemoryRegionOps uses > uint64_t returns) > Should i consider: > 1.sending corrected patch(hoping it not yet merged) > 2.or any suggestion on fixing it? It works with uint64_t as well, no worries. But I can also change it (I haven't applied the patch yet because I was expecting someone else to do it, but I will pick it up now). Paolo ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling 2025-04-29 17:03 ` [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling Rakesh Jeyasingh 2025-05-17 5:25 ` Rakesh Jeyasingh @ 2025-05-22 11:32 ` Michael Tokarev 1 sibling, 0 replies; 7+ messages in thread From: Michael Tokarev @ 2025-05-22 11:32 UTC (permalink / raw) To: Rakesh Jeyasingh, qemu-devel Cc: pbonzini, philmd, thuth, balaton, qemu-stable On 29.04.2025 20:03, Rakesh Jeyasingh wrote: > The GT-64120 PCI controller requires special handling where: > 1. Host bridge(bus 0 ,device 0) must never be byte-swapped > 2. Other devices follow MByteSwap bit in GT_PCI0_CMD > > The previous implementation incorrectly swapped all accesses, breaking > host bridge detection (lspci -d 11ab:4620). > > Changes made: > 1. Removed gt64120_update_pci_cfgdata_mapping() and moved data_mem initialization > to gt64120_realize() for cleaner setup > 2. Implemented custom read/write handlers that: > - Preserve host bridge accesses (extract32(config_reg,11,13)==0) > - apply swapping only for non-bridge devices in big-endian mode > > Fixes: 145e2198 ("hw/mips/gt64xxx_pci: Endian-swap using PCI_HOST_BRIDGE MemoryRegionOps") > Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2826 > Signed-off-by: Rakesh Jeyasingh <rakeshjb010@gmail.com> This seems to be qemu-stable material. I picked this one up for 9.2 and 10.0, please let me know if I shouldn't. Thanks, /mjt ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 2/2] hw/pci-host: Remove unused pci_host_data_be_ops 2025-04-29 17:03 [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup Rakesh Jeyasingh 2025-04-29 17:03 ` [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling Rakesh Jeyasingh @ 2025-04-29 17:03 ` Rakesh Jeyasingh 2025-05-16 18:14 ` [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup Thomas Huth 2 siblings, 0 replies; 7+ messages in thread From: Rakesh Jeyasingh @ 2025-04-29 17:03 UTC (permalink / raw) To: qemu-devel; +Cc: pbonzini, philmd, thuth, balaton, rakeshjb010 pci_host_data_be_ops became unused after endianness fixes Suggested-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Rakesh Jeyasingh <rakeshjb010@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- hw/pci/pci_host.c | 6 ------ include/hw/pci-host/dino.h | 4 ---- include/hw/pci/pci_host.h | 1 - 3 files changed, 11 deletions(-) diff --git a/hw/pci/pci_host.c b/hw/pci/pci_host.c index abe83bbab8..7179d99178 100644 --- a/hw/pci/pci_host.c +++ b/hw/pci/pci_host.c @@ -217,12 +217,6 @@ const MemoryRegionOps pci_host_data_le_ops = { .endianness = DEVICE_LITTLE_ENDIAN, }; -const MemoryRegionOps pci_host_data_be_ops = { - .read = pci_host_data_read, - .write = pci_host_data_write, - .endianness = DEVICE_BIG_ENDIAN, -}; - static bool pci_host_needed(void *opaque) { PCIHostState *s = opaque; diff --git a/include/hw/pci-host/dino.h b/include/hw/pci-host/dino.h index fd7975c798..5dc8cdf610 100644 --- a/include/hw/pci-host/dino.h +++ b/include/hw/pci-host/dino.h @@ -109,10 +109,6 @@ static const uint32_t reg800_keep_bits[DINO800_REGS] = { struct DinoState { PCIHostState parent_obj; - /* - * PCI_CONFIG_ADDR is parent_obj.config_reg, via pci_host_conf_be_ops, - * so that we can map PCI_CONFIG_DATA to pci_host_data_be_ops. - */ uint32_t config_reg_dino; /* keep original copy, including 2 lowest bits */ uint32_t iar0; diff --git a/include/hw/pci/pci_host.h b/include/hw/pci/pci_host.h index e52d8ec2cd..954dd446fa 100644 --- a/include/hw/pci/pci_host.h +++ b/include/hw/pci/pci_host.h @@ -68,6 +68,5 @@ uint32_t pci_data_read(PCIBus *s, uint32_t addr, unsigned len); extern const MemoryRegionOps pci_host_conf_le_ops; extern const MemoryRegionOps pci_host_conf_be_ops; extern const MemoryRegionOps pci_host_data_le_ops; -extern const MemoryRegionOps pci_host_data_be_ops; #endif /* PCI_HOST_H */ -- 2.43.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup 2025-04-29 17:03 [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup Rakesh Jeyasingh 2025-04-29 17:03 ` [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling Rakesh Jeyasingh 2025-04-29 17:03 ` [PATCH v5 2/2] hw/pci-host: Remove unused pci_host_data_be_ops Rakesh Jeyasingh @ 2025-05-16 18:14 ` Thomas Huth 2 siblings, 0 replies; 7+ messages in thread From: Thomas Huth @ 2025-05-16 18:14 UTC (permalink / raw) To: Rakesh Jeyasingh, qemu-devel, philmd; +Cc: pbonzini, balaton On 29/04/2025 19.03, Rakesh Jeyasingh wrote: > Changes since v4: > 1.Introduced needs_bswap() helper for clean endianness logic > 2.use the existing pci_host_data_le_ops.read/write from hw/pci/pci_host.c > > v4:https://patchew.org/QEMU/20250331184820.34673-1-rakeshjb010@gmail.com/ > > Rakesh Jeyasingh (2): > hw/pci-host/gt64120: Fix endianness handling > hw/pci-host: Remove unused pci_host_data_be_ops > > hw/pci-host/gt64120.c | 82 ++++++++++++++++++++++---------------- > hw/pci/pci_host.c | 6 --- > include/hw/pci-host/dino.h | 4 -- > include/hw/pci/pci_host.h | 1 - > 4 files changed, 48 insertions(+), 45 deletions(-) Thanks for tackling this ... I gave it a try on both, little and big endian host and it seems to work as expected now. Series Tested-by: Thomas Huth <thuth@redhat.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2025-05-22 11:33 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-04-29 17:03 [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup Rakesh Jeyasingh 2025-04-29 17:03 ` [PATCH v5 1/2] hw/pci-host/gt64120: Fix endianness handling Rakesh Jeyasingh 2025-05-17 5:25 ` Rakesh Jeyasingh 2025-05-17 14:16 ` Paolo Bonzini 2025-05-22 11:32 ` Michael Tokarev 2025-04-29 17:03 ` [PATCH v5 2/2] hw/pci-host: Remove unused pci_host_data_be_ops Rakesh Jeyasingh 2025-05-16 18:14 ` [PATCH v5 0/2] GT64120 PCI endianness fixes and cleanup Thomas Huth
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.