Message ID | 1637139795-3032-1-git-send-email-yangtiezhu@loongson.cn (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | MIPS: Do not define pci_remap_iospace() under MACH_LOONGSON64 | expand |
On Wed, Nov 17, 2021 at 05:03:15PM +0800, Tiezhu Yang wrote: > After commit 9f76779f2418 ("MIPS: implement architecture-specific > 'pci_remap_iospace()'"), there exists the following warning on the > Loongson64 platform: > > loongson-pci 1a000000.pci: IO 0x0018020000..0x001803ffff -> 0x0000020000 > loongson-pci 1a000000.pci: MEM 0x0040000000..0x007fffffff -> 0x0040000000 > ------------[ cut here ]------------ > WARNING: CPU: 2 PID: 1 at arch/mips/pci/pci-generic.c:55 pci_remap_iospace+0x84/0x90 > resource start address is not zero > ... > Call Trace: > [<ffffffff8020dc78>] show_stack+0x40/0x120 > [<ffffffff80cf4a0c>] dump_stack_lvl+0x58/0x74 > [<ffffffff8023a0b0>] __warn+0xe0/0x110 > [<ffffffff80cee02c>] warn_slowpath_fmt+0xa4/0xd0 > [<ffffffff80cecf24>] pci_remap_iospace+0x84/0x90 > [<ffffffff807f9864>] devm_pci_remap_iospace+0x5c/0xb8 > [<ffffffff808121b0>] devm_of_pci_bridge_init+0x178/0x1f8 > [<ffffffff807f4000>] devm_pci_alloc_host_bridge+0x78/0x98 > [<ffffffff80819454>] loongson_pci_probe+0x34/0x160 > [<ffffffff809203cc>] platform_probe+0x6c/0xe0 > [<ffffffff8091d5d4>] really_probe+0xbc/0x340 > [<ffffffff8091d8f0>] __driver_probe_device+0x98/0x110 > [<ffffffff8091d9b8>] driver_probe_device+0x50/0x118 > [<ffffffff8091dea0>] __driver_attach+0x80/0x118 > [<ffffffff8091b280>] bus_for_each_dev+0x80/0xc8 > [<ffffffff8091c6d8>] bus_add_driver+0x130/0x210 > [<ffffffff8091ead4>] driver_register+0x8c/0x150 > [<ffffffff80200a8c>] do_one_initcall+0x54/0x288 > [<ffffffff811a5320>] kernel_init_freeable+0x27c/0x2e4 > [<ffffffff80cfc380>] kernel_init+0x2c/0x134 > [<ffffffff80205a2c>] ret_from_kernel_thread+0x14/0x1c > ---[ end trace e4a0efe10aa5cce6 ]--- > loongson-pci 1a000000.pci: error -19: failed to map resource [io 0x20000-0x3ffff] > > We can see that the resource start address is 0x0000020000, because > the ISA Bridge used the zero address which is defined in the dts file > arch/mips/boot/dts/loongson/ls7a-pch.dtsi: > > ISA Bridge: /bus@10000000/isa@18000000 > IO 0x0000000018000000..0x000000001801ffff -> 0x0000000000000000 > > The architecture-independent function pci_remap_iospace() works well > for Loongson64, so just do not define architecture-specific function > pci_remap_iospace() under MACH_LOONGSON64. > > Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> > --- > arch/mips/include/asm/pci.h | 2 ++ > arch/mips/pci/pci-generic.c | 2 ++ > 2 files changed, 4 insertions(+) > > diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h > index 421231f..5d647cb 100644 > --- a/arch/mips/include/asm/pci.h > +++ b/arch/mips/include/asm/pci.h > @@ -21,8 +21,10 @@ > #include <linux/of.h> > > #ifdef CONFIG_PCI_DRIVERS_GENERIC > +#ifndef CONFIG_MACH_LOONGSON64 > #define pci_remap_iospace pci_remap_iospace > #endif > +#endif I prefer a version without new CONFIG_MACH_LOONGSON64 ifdefery. Something like: diff --git a/arch/mips/include/asm/mach-ralink/spaces.h b/arch/mips/include/asm/mach-ralink/spaces.h index 05d14c21c417..f7af11ea2d61 100644 --- a/arch/mips/include/asm/mach-ralink/spaces.h +++ b/arch/mips/include/asm/mach-ralink/spaces.h @@ -6,5 +6,7 @@ #define PCI_IOSIZE SZ_64K #define IO_SPACE_LIMIT (PCI_IOSIZE - 1) +#define pci_remap_iospace pci_remap_iospace + #include <asm/mach-generic/spaces.h> #endif diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h index 421231f55935..9ffc8192adae 100644 --- a/arch/mips/include/asm/pci.h +++ b/arch/mips/include/asm/pci.h @@ -20,10 +20,6 @@ #include <linux/list.h> #include <linux/of.h> -#ifdef CONFIG_PCI_DRIVERS_GENERIC -#define pci_remap_iospace pci_remap_iospace -#endif - #ifdef CONFIG_PCI_DRIVERS_LEGACY /* diff --git a/arch/mips/pci/pci-generic.c b/arch/mips/pci/pci-generic.c index 18eb8a453a86..d2d68bac3d25 100644 --- a/arch/mips/pci/pci-generic.c +++ b/arch/mips/pci/pci-generic.c @@ -47,6 +47,7 @@ void pcibios_fixup_bus(struct pci_bus *bus) pci_read_bridge_bases(bus); } +#ifdef pci_remap_iospace int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) { unsigned long vaddr; @@ -60,3 +61,4 @@ int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) set_io_port_base(vaddr); return 0; } +#endif Thomas.
Hi Thomas, Sorry I totally missed this patch. On Wed, Dec 8, 2021 at 5:04 AM Thomas Bogendoerfer <tsbogend@alpha.franken.de> wrote: > > On Wed, Nov 17, 2021 at 05:03:15PM +0800, Tiezhu Yang wrote: > > After commit 9f76779f2418 ("MIPS: implement architecture-specific > > 'pci_remap_iospace()'"), there exists the following warning on the > > Loongson64 platform: > > > > loongson-pci 1a000000.pci: IO 0x0018020000..0x001803ffff -> 0x0000020000 > > loongson-pci 1a000000.pci: MEM 0x0040000000..0x007fffffff -> 0x0040000000 > > ------------[ cut here ]------------ > > WARNING: CPU: 2 PID: 1 at arch/mips/pci/pci-generic.c:55 pci_remap_iospace+0x84/0x90 > > resource start address is not zero > > ... > > Call Trace: > > [<ffffffff8020dc78>] show_stack+0x40/0x120 > > [<ffffffff80cf4a0c>] dump_stack_lvl+0x58/0x74 > > [<ffffffff8023a0b0>] __warn+0xe0/0x110 > > [<ffffffff80cee02c>] warn_slowpath_fmt+0xa4/0xd0 > > [<ffffffff80cecf24>] pci_remap_iospace+0x84/0x90 > > [<ffffffff807f9864>] devm_pci_remap_iospace+0x5c/0xb8 > > [<ffffffff808121b0>] devm_of_pci_bridge_init+0x178/0x1f8 > > [<ffffffff807f4000>] devm_pci_alloc_host_bridge+0x78/0x98 > > [<ffffffff80819454>] loongson_pci_probe+0x34/0x160 > > [<ffffffff809203cc>] platform_probe+0x6c/0xe0 > > [<ffffffff8091d5d4>] really_probe+0xbc/0x340 > > [<ffffffff8091d8f0>] __driver_probe_device+0x98/0x110 > > [<ffffffff8091d9b8>] driver_probe_device+0x50/0x118 > > [<ffffffff8091dea0>] __driver_attach+0x80/0x118 > > [<ffffffff8091b280>] bus_for_each_dev+0x80/0xc8 > > [<ffffffff8091c6d8>] bus_add_driver+0x130/0x210 > > [<ffffffff8091ead4>] driver_register+0x8c/0x150 > > [<ffffffff80200a8c>] do_one_initcall+0x54/0x288 > > [<ffffffff811a5320>] kernel_init_freeable+0x27c/0x2e4 > > [<ffffffff80cfc380>] kernel_init+0x2c/0x134 > > [<ffffffff80205a2c>] ret_from_kernel_thread+0x14/0x1c > > ---[ end trace e4a0efe10aa5cce6 ]--- > > loongson-pci 1a000000.pci: error -19: failed to map resource [io 0x20000-0x3ffff] > > > > We can see that the resource start address is 0x0000020000, because > > the ISA Bridge used the zero address which is defined in the dts file > > arch/mips/boot/dts/loongson/ls7a-pch.dtsi: > > > > ISA Bridge: /bus@10000000/isa@18000000 > > IO 0x0000000018000000..0x000000001801ffff -> 0x0000000000000000 > > > > The architecture-independent function pci_remap_iospace() works well > > for Loongson64, so just do not define architecture-specific function > > pci_remap_iospace() under MACH_LOONGSON64. > > > > Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> > > --- > > arch/mips/include/asm/pci.h | 2 ++ > > arch/mips/pci/pci-generic.c | 2 ++ > > 2 files changed, 4 insertions(+) > > > > diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h > > index 421231f..5d647cb 100644 > > --- a/arch/mips/include/asm/pci.h > > +++ b/arch/mips/include/asm/pci.h > > @@ -21,8 +21,10 @@ > > #include <linux/of.h> > > > > #ifdef CONFIG_PCI_DRIVERS_GENERIC > > +#ifndef CONFIG_MACH_LOONGSON64 > > #define pci_remap_iospace pci_remap_iospace > > #endif > > +#endif I am not sure but maybe just remove the WARN_ON and the if from the implementation allow also this platform to work with specific MIPS helper? The only problem I initially see is that the loongson64 puts isa bridge resource in 0x0 and thus the warning appears. I have to mention because I don't know other MIPS based SoCs with PCI but 'pci_remap_iospace()' should properly fit all of them... Is a kind of generic implementation using MIPS 'set_io_port_base()' and 'ioremap()' for properly remapping things... > > I prefer a version without new CONFIG_MACH_LOONGSON64 ifdefery. Something > like: > > > diff --git a/arch/mips/include/asm/mach-ralink/spaces.h b/arch/mips/include/asm/mach-ralink/spaces.h > index 05d14c21c417..f7af11ea2d61 100644 > --- a/arch/mips/include/asm/mach-ralink/spaces.h > +++ b/arch/mips/include/asm/mach-ralink/spaces.h > @@ -6,5 +6,7 @@ > #define PCI_IOSIZE SZ_64K > #define IO_SPACE_LIMIT (PCI_IOSIZE - 1) > > +#define pci_remap_iospace pci_remap_iospace > + > #include <asm/mach-generic/spaces.h> > #endif > diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h > index 421231f55935..9ffc8192adae 100644 > --- a/arch/mips/include/asm/pci.h > +++ b/arch/mips/include/asm/pci.h > @@ -20,10 +20,6 @@ > #include <linux/list.h> > #include <linux/of.h> > > -#ifdef CONFIG_PCI_DRIVERS_GENERIC > -#define pci_remap_iospace pci_remap_iospace > -#endif > - > #ifdef CONFIG_PCI_DRIVERS_LEGACY > > /* > diff --git a/arch/mips/pci/pci-generic.c b/arch/mips/pci/pci-generic.c > index 18eb8a453a86..d2d68bac3d25 100644 > --- a/arch/mips/pci/pci-generic.c > +++ b/arch/mips/pci/pci-generic.c > @@ -47,6 +47,7 @@ void pcibios_fixup_bus(struct pci_bus *bus) > pci_read_bridge_bases(bus); > } > > +#ifdef pci_remap_iospace > int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) > { > unsigned long vaddr; > @@ -60,3 +61,4 @@ int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) > set_io_port_base(vaddr); > return 0; > } > +#endif I agree this is cleaner than the CONFIG_MACH_LOONGSON64 ifdef stuff. I have tested this changes in mt7621 ralink platform and all seem to work, so in case you want to include this, feel free to add my: Tested-by: Sergio Paracuellos <sergio.paracuellos@gmail.com> Acked-by: Sergio Paracuellos <sergio.paracuellos@gmail.com> Thomas, if you prefer me to send this as a more formal PATCH, please let me know. Best regards, Sergio Paracuellos > > Thomas. > > -- > Crap can work. Given enough thrust pigs will fly, but it's not necessarily a > good idea. [ RFC1925, 2.3 ]
On Wed, Dec 08, 2021 at 02:47:56PM +0100, Sergio Paracuellos wrote: > > -#endif > > - > > #ifdef CONFIG_PCI_DRIVERS_LEGACY > > > > /* > > diff --git a/arch/mips/pci/pci-generic.c b/arch/mips/pci/pci-generic.c > > index 18eb8a453a86..d2d68bac3d25 100644 > > --- a/arch/mips/pci/pci-generic.c > > +++ b/arch/mips/pci/pci-generic.c > > @@ -47,6 +47,7 @@ void pcibios_fixup_bus(struct pci_bus *bus) > > pci_read_bridge_bases(bus); > > } > > > > +#ifdef pci_remap_iospace > > int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) > > { > > unsigned long vaddr; > > @@ -60,3 +61,4 @@ int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) > > set_io_port_base(vaddr); > > return 0; > > } > > +#endif > > I agree this is cleaner than the CONFIG_MACH_LOONGSON64 ifdef stuff. I > have tested this changes in mt7621 ralink platform and all seem to > work, so in case you want to include this, feel free to add my: thank you for testing. > Tested-by: Sergio Paracuellos <sergio.paracuellos@gmail.com> > Acked-by: Sergio Paracuellos <sergio.paracuellos@gmail.com> > > Thomas, if you prefer me to send this as a more formal PATCH, please > let me know. Thiezhu already did, I'll add your tags the new patch. Thomas.
On Thu, Dec 9, 2021 at 10:26 AM Thomas Bogendoerfer <tsbogend@alpha.franken.de> wrote: > > On Wed, Dec 08, 2021 at 02:47:56PM +0100, Sergio Paracuellos wrote: > > > -#endif > > > - > > > #ifdef CONFIG_PCI_DRIVERS_LEGACY > > > > > > /* > > > diff --git a/arch/mips/pci/pci-generic.c b/arch/mips/pci/pci-generic.c > > > index 18eb8a453a86..d2d68bac3d25 100644 > > > --- a/arch/mips/pci/pci-generic.c > > > +++ b/arch/mips/pci/pci-generic.c > > > @@ -47,6 +47,7 @@ void pcibios_fixup_bus(struct pci_bus *bus) > > > pci_read_bridge_bases(bus); > > > } > > > > > > +#ifdef pci_remap_iospace > > > int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) > > > { > > > unsigned long vaddr; > > > @@ -60,3 +61,4 @@ int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) > > > set_io_port_base(vaddr); > > > return 0; > > > } > > > +#endif > > > > I agree this is cleaner than the CONFIG_MACH_LOONGSON64 ifdef stuff. I > > have tested this changes in mt7621 ralink platform and all seem to > > work, so in case you want to include this, feel free to add my: > > thank you for testing. > > > Tested-by: Sergio Paracuellos <sergio.paracuellos@gmail.com> > > Acked-by: Sergio Paracuellos <sergio.paracuellos@gmail.com> > > > > Thomas, if you prefer me to send this as a more formal PATCH, please > > let me know. > > Thiezhu already did, I'll add your tags the new patch. Perfect, thanks! Best regards, Sergio Paracuellos > > Thomas. > > -- > Crap can work. Given enough thrust pigs will fly, but it's not necessarily a > good idea. [ RFC1925, 2.3 ]
diff --git a/arch/mips/include/asm/pci.h b/arch/mips/include/asm/pci.h index 421231f..5d647cb 100644 --- a/arch/mips/include/asm/pci.h +++ b/arch/mips/include/asm/pci.h @@ -21,8 +21,10 @@ #include <linux/of.h> #ifdef CONFIG_PCI_DRIVERS_GENERIC +#ifndef CONFIG_MACH_LOONGSON64 #define pci_remap_iospace pci_remap_iospace #endif +#endif #ifdef CONFIG_PCI_DRIVERS_LEGACY diff --git a/arch/mips/pci/pci-generic.c b/arch/mips/pci/pci-generic.c index 18eb8a4..6f18071 100644 --- a/arch/mips/pci/pci-generic.c +++ b/arch/mips/pci/pci-generic.c @@ -47,6 +47,7 @@ void pcibios_fixup_bus(struct pci_bus *bus) pci_read_bridge_bases(bus); } +#ifndef CONFIG_MACH_LOONGSON64 int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) { unsigned long vaddr; @@ -60,3 +61,4 @@ int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) set_io_port_base(vaddr); return 0; } +#endif
After commit 9f76779f2418 ("MIPS: implement architecture-specific 'pci_remap_iospace()'"), there exists the following warning on the Loongson64 platform: loongson-pci 1a000000.pci: IO 0x0018020000..0x001803ffff -> 0x0000020000 loongson-pci 1a000000.pci: MEM 0x0040000000..0x007fffffff -> 0x0040000000 ------------[ cut here ]------------ WARNING: CPU: 2 PID: 1 at arch/mips/pci/pci-generic.c:55 pci_remap_iospace+0x84/0x90 resource start address is not zero ... Call Trace: [<ffffffff8020dc78>] show_stack+0x40/0x120 [<ffffffff80cf4a0c>] dump_stack_lvl+0x58/0x74 [<ffffffff8023a0b0>] __warn+0xe0/0x110 [<ffffffff80cee02c>] warn_slowpath_fmt+0xa4/0xd0 [<ffffffff80cecf24>] pci_remap_iospace+0x84/0x90 [<ffffffff807f9864>] devm_pci_remap_iospace+0x5c/0xb8 [<ffffffff808121b0>] devm_of_pci_bridge_init+0x178/0x1f8 [<ffffffff807f4000>] devm_pci_alloc_host_bridge+0x78/0x98 [<ffffffff80819454>] loongson_pci_probe+0x34/0x160 [<ffffffff809203cc>] platform_probe+0x6c/0xe0 [<ffffffff8091d5d4>] really_probe+0xbc/0x340 [<ffffffff8091d8f0>] __driver_probe_device+0x98/0x110 [<ffffffff8091d9b8>] driver_probe_device+0x50/0x118 [<ffffffff8091dea0>] __driver_attach+0x80/0x118 [<ffffffff8091b280>] bus_for_each_dev+0x80/0xc8 [<ffffffff8091c6d8>] bus_add_driver+0x130/0x210 [<ffffffff8091ead4>] driver_register+0x8c/0x150 [<ffffffff80200a8c>] do_one_initcall+0x54/0x288 [<ffffffff811a5320>] kernel_init_freeable+0x27c/0x2e4 [<ffffffff80cfc380>] kernel_init+0x2c/0x134 [<ffffffff80205a2c>] ret_from_kernel_thread+0x14/0x1c ---[ end trace e4a0efe10aa5cce6 ]--- loongson-pci 1a000000.pci: error -19: failed to map resource [io 0x20000-0x3ffff] We can see that the resource start address is 0x0000020000, because the ISA Bridge used the zero address which is defined in the dts file arch/mips/boot/dts/loongson/ls7a-pch.dtsi: ISA Bridge: /bus@10000000/isa@18000000 IO 0x0000000018000000..0x000000001801ffff -> 0x0000000000000000 The architecture-independent function pci_remap_iospace() works well for Loongson64, so just do not define architecture-specific function pci_remap_iospace() under MACH_LOONGSON64. Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn> --- arch/mips/include/asm/pci.h | 2 ++ arch/mips/pci/pci-generic.c | 2 ++ 2 files changed, 4 insertions(+)