IXP4xx: Indirect PCI MMIO compile failure

Krzysztof Halasa khc at pm.waw.pl
Sat Nov 14 18:37:14 EST 2009


Russell King - ARM Linux <linux at arm.linux.org.uk> writes:

>>  static inline void __indirect_iounmap(void __iomem *addr)
>>  {
>> -	if ((__force u32)addr >= VMALLOC_START)
>> +	if (!is_pci_memory(__force u32)addr)
>
> So here you're testing a virtual address against a pci address.

There is 1:1 mapping on IXP4xx with indirect PCI MMIO:

static inline void __iomem *
__ixp4xx_ioremap(unsigned long addr, size_t size, unsigned int mtype)
{
        if((addr < PCIBIOS_MIN_MEM) || (addr > 0x4fffffff))
                return __arm_ioremap(addr, size, mtype);

        return (void __iomem *)addr;
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}

The __iomem *addr is not really a pointer, it's just a cookie which can
only be passed to the indirect routines.
-- 
Krzysztof Halasa



More information about the linux-arm-kernel mailing list