91 lines
2.6 KiB
C
91 lines
2.6 KiB
C
/*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*
|
|
* Portions Copyright (C) Cisco Systems, Inc.
|
|
*/
|
|
#ifndef __ASM_MACH_POWERTV_IOREMAP_H
|
|
#define __ASM_MACH_POWERTV_IOREMAP_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
#define LOW_MEM_BOUNDARY_PHYS 0x20000000
|
|
#define LOW_MEM_BOUNDARY_MASK (~(LOW_MEM_BOUNDARY_PHYS - 1))
|
|
|
|
/*
|
|
* The bus addresses are different than the physical addresses that
|
|
* the processor sees by an offset. This offset varies by ASIC
|
|
* version. Define a variable to hold the offset and some macros to
|
|
* make the conversion simpler. */
|
|
extern unsigned long phys_to_bus_offset;
|
|
|
|
#ifdef CONFIG_HIGHMEM
|
|
#define MEM_GAP_PHYS 0x60000000
|
|
/*
|
|
* TODO: We will use the hard code for conversion between physical and
|
|
* bus until the bootloader releases their device tree to us.
|
|
*/
|
|
#define phys_to_bus(x) (((x) < LOW_MEM_BOUNDARY_PHYS) ? \
|
|
((x) + phys_to_bus_offset) : (x))
|
|
#define bus_to_phys(x) (((x) < MEM_GAP_PHYS_ADDR) ? \
|
|
((x) - phys_to_bus_offset) : (x))
|
|
#else
|
|
#define phys_to_bus(x) ((x) + phys_to_bus_offset)
|
|
#define bus_to_phys(x) ((x) - phys_to_bus_offset)
|
|
#endif
|
|
|
|
/*
|
|
* Determine whether the address we are given is for an ASIC device
|
|
* Params: addr Address to check
|
|
* Returns: Zero if the address is not for ASIC devices, non-zero
|
|
* if it is.
|
|
*/
|
|
static inline int asic_is_device_addr(phys_t addr)
|
|
{
|
|
return !((phys_t)addr & (phys_t) LOW_MEM_BOUNDARY_MASK);
|
|
}
|
|
|
|
/*
|
|
* Determine whether the address we are given is external RAM mappable
|
|
* into KSEG1.
|
|
* Params: addr Address to check
|
|
* Returns: Zero if the address is not for external RAM and
|
|
*/
|
|
static inline int asic_is_lowmem_ram_addr(phys_t addr)
|
|
{
|
|
/*
|
|
* The RAM always starts at the following address in the processor's
|
|
* physical address space
|
|
*/
|
|
static const phys_t phys_ram_base = 0x10000000;
|
|
phys_t bus_ram_base;
|
|
|
|
bus_ram_base = phys_to_bus_offset + phys_ram_base;
|
|
|
|
return addr >= bus_ram_base &&
|
|
addr < (bus_ram_base + (LOW_MEM_BOUNDARY_PHYS - phys_ram_base));
|
|
}
|
|
|
|
/*
|
|
* Allow physical addresses to be fixed up to help peripherals located
|
|
* outside the low 32-bit range -- generic pass-through version.
|
|
*/
|
|
static inline phys_t fixup_bigphys_addr(phys_t phys_addr, phys_t size)
|
|
{
|
|
return phys_addr;
|
|
}
|
|
|
|
static inline void __iomem *plat_ioremap(phys_t offset, unsigned long size,
|
|
unsigned long flags)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline int plat_iounmap(const volatile void __iomem *addr)
|
|
{
|
|
return 0;
|
|
}
|
|
#endif /* __ASM_MACH_POWERTV_IOREMAP_H */
|