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