123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- /*
- * 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 */
|