Re: [PATCH 5/6] MIPS: implement architecture dependent 'pci_remap_iospace()'
From: Sergio Paracuellos <sergio.paracuellos@gmail.com>
Date: 2021-09-25 18:09:17
Also in:
linux-mips, linux-pci, lkml
From: Sergio Paracuellos <sergio.paracuellos@gmail.com>
Date: 2021-09-25 18:09:17
Also in:
linux-mips, linux-pci, lkml
Hi Arnd, On Sat, Sep 25, 2021 at 7:32 PM Arnd Bergmann [off-list ref] wrote:
On Fri, Sep 24, 2021 at 11:11 PM Sergio Paracuellos [off-list ref] wrote:quoted
To make PCI IO work we need to properly virtually map IO cpu physical address and set this virtual address as the address of the first PCI IO port which is set using function 'set_io_port_base()'. Signed-off-by: Sergio Paracuellos <sergio.paracuellos@gmail.com>Acked-by: Arnd Bergmann <arnd@arndb.de>
Thanks!
quoted
+int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr) +{ + size_t size = (res->end - res->start) + 1; + unsigned long vaddr = (unsigned long)ioremap(phys_addr, size); + + set_io_port_base(vaddr); + return 0; +}It might be good to check that res->start is zero here, otherwise the io_port_base would be off. That could happen if you ever have more than one bridge.
Do you mean something like the following?
int pci_remap_iospace(const struct resource *res, phys_addr_t phys_addr)
{
unsigned long vaddr;
size_t size;
if (res->start != 0) {
// Should I WARN_ONCE or just show an error/warning message??
WARN_ONCE(1, "resource start must be zero\n");
return -ENODEV;
}
size = (res->end - res->start) + 1;
vaddr = (unsigned long)ioremap(phys_addr, size);
return 0;
}
Thanks,
Sergio Paracuellos
Arnd