diff options
author | Quinn Jensen <quinn.jensen@freescale.com> | 2007-10-24 21:25:19 -0600 |
---|---|---|
committer | Quinn Jensen <quinn.jensen@freescale.com> | 2007-10-24 21:25:19 -0600 |
commit | ae800b8c0e127e6f58c00fc1aed85ec87288f212 (patch) | |
tree | 5cea30010cbffed221dd62672e2e322c57761942 | |
parent | 5f4f72844194949c73457d0943ff5d4d1bb1f3ac (diff) |
CR ENGR00050502 add custom ioremap
Patch for CR ENGR00050502: add custom ioremap function to ensure IO
register access through peripheral port. Applies to linux 2.6.22
kernel on MX platforms.
http://www.bitshrine.org/gpp/linux-2.6.22-mx-CR-ENGR00050502-add-custom-ioremap.patch
-rw-r--r-- | arch/arm/plat-mxc/io.c | 75 | ||||
-rw-r--r-- | include/asm-arm/arch-mxc/io.h | 7 | ||||
-rw-r--r-- | include/asm-arm/arch-mxc/mx27.h | 2 | ||||
-rw-r--r-- | include/asm-arm/arch-mxc/mxc.h | 5 |
4 files changed, 34 insertions, 55 deletions
diff --git a/arch/arm/plat-mxc/io.c b/arch/arm/plat-mxc/io.c index ba6cc78055df..ee42c048d72d 100644 --- a/arch/arm/plat-mxc/io.c +++ b/arch/arm/plat-mxc/io.c @@ -1,68 +1,41 @@ /* - * MX27/MX31 custom ioremap implementation. - * - * Copyright 2007 Sony Corporation. - * 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; version 2 of the License. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. + * Copyright 2007 Freescale Semiconductor, Inc. All Rights Reserved. + */ + +/* + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html */ + +/* + * mxc custom ioremap implementation. + */ + #include <linux/kernel.h> #include <linux/module.h> #include <asm/hardware.h> #include <asm/io.h> -void __iomem *__mxc_ioremap(unsigned long cookie, size_t size, - unsigned int mtype) +void *__iomem __mxc_ioremap(unsigned long cookie, size_t size, + unsigned int mtype) { - unsigned long addr; - void __iomem *retval; - - addr = IO_ADDRESS(cookie); - -#ifdef DEBUG - __print_symbol("%s ", __builtin_return_address(0)); - printk("called %s(): ", __FUNCTION__); -#endif - - if (addr != 0xdeadbeef) { - retval = (void __iomem *)addr; -#ifdef DEBUG - printk("0x%08lx -> 0x%p\n", cookie, retval); -#endif - } else { - retval = __arm_ioremap(cookie, size, mtype); -#ifdef DEBUG - printk("Not using static map: 0x%08lx -> 0x%p\n", cookie, retval); -#endif + if (mtype == MT_DEVICE && IS_MEM_DEVICE_NONSHARED(cookie)) { + mtype = MT_DEVICE_NONSHARED; } - - return retval; + return __arm_ioremap(cookie, size, mtype); } + EXPORT_SYMBOL(__mxc_ioremap); -void __mxc_iounmap(void __iomem *addr) +void __mxc_iounmap(void __iomem * addr) { - if (IS_STATIC_MAPPED((unsigned long)addr)) - return; + extern void __iounmap(volatile void __iomem * addr); + __iounmap(addr); } -EXPORT_SYMBOL(__mxc_iounmap); - - +EXPORT_SYMBOL(__mxc_iounmap); diff --git a/include/asm-arm/arch-mxc/io.h b/include/asm-arm/arch-mxc/io.h index f85abcd0e42c..e8c7b1f4cd4a 100644 --- a/include/asm-arm/arch-mxc/io.h +++ b/include/asm-arm/arch-mxc/io.h @@ -14,7 +14,7 @@ /*! * @file arch-mxc/io.h * @brief This file contains some memory mapping macros. - * @note There is no real ISA or PCI buses. But have to define these macros + * @note We don't have a PCI bus, but we have to define these macros * for some drivers to compile. * * @ingroup MSL_MX27 MSL_MX31 @@ -34,7 +34,6 @@ #define __io(a) ((void __iomem *)(a)) #define __mem_pci(a) (a) -#define __mem_isa(a) (a) /*! * Validate the pci memory address for ioremap. @@ -50,7 +49,7 @@ extern void __iomem *__mxc_ioremap(unsigned long cookie, size_t size, unsigned int mtype); extern void __mxc_iounmap(void __iomem *addr); -#define __arch_ioremap(a, s, f) __mxc_ioremap(a, s, f) -#define __arch_iounmap(a) __mxc_iounmap(a) +#define __arch_ioremap(a, s, f) __mxc_ioremap(a, s, f) +#define __arch_iounmap(a) __mxc_iounmap(a) #endif diff --git a/include/asm-arm/arch-mxc/mx27.h b/include/asm-arm/arch-mxc/mx27.h index bce0f3164e98..cd003b4eeb5f 100644 --- a/include/asm-arm/arch-mxc/mx27.h +++ b/include/asm-arm/arch-mxc/mx27.h @@ -205,6 +205,8 @@ #define PCMCIA_IO_ADDRESS(x) \ (((x) - X_MEMC_BASE_ADDR) + X_MEMC_BASE_ADDR_VIRT) +#define IS_MEM_DEVICE_NONSHARED(x) 0 + /* * MX27 ADS Interrupt numbers */ diff --git a/include/asm-arm/arch-mxc/mxc.h b/include/asm-arm/arch-mxc/mxc.h index 564297701029..209f85419460 100644 --- a/include/asm-arm/arch-mxc/mxc.h +++ b/include/asm-arm/arch-mxc/mxc.h @@ -172,6 +172,11 @@ int mxc_snoop_get_status(u32 num, u32 * statl, u32 * stath); #define DPTC_WP_SUPPORTED 17 +#ifndef IS_MEM_DEVICE_NONSHARED +/* all peripherals on MXC so far are below 0x80000000 but leave L2CC alone */ +#define IS_MEM_DEVICE_NONSHARED(x) ((x) < 0x80000000 && (x) != L2CC_BASE_ADDR) +#endif + #ifndef __ASSEMBLY__ #include <linux/types.h> struct dptc_wp { |