2005-04-16 22:20:36 +00:00
|
|
|
/*
|
2008-08-02 09:55:55 +00:00
|
|
|
* arch/arm/include/asm/map.h
|
2005-04-16 22:20:36 +00:00
|
|
|
*
|
|
|
|
* Copyright (C) 1999-2000 Russell King
|
|
|
|
*
|
|
|
|
* This program is free software; you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
|
|
* published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* Page table mapping constructs and function prototypes
|
|
|
|
*/
|
2012-03-01 00:10:58 +00:00
|
|
|
#ifndef __ASM_MACH_MAP_H
|
|
|
|
#define __ASM_MACH_MAP_H
|
|
|
|
|
2007-05-05 19:59:27 +00:00
|
|
|
#include <asm/io.h>
|
|
|
|
|
2005-04-16 22:20:36 +00:00
|
|
|
struct map_desc {
|
|
|
|
unsigned long virtual;
|
2005-10-28 14:19:11 +00:00
|
|
|
unsigned long pfn;
|
2005-04-16 22:20:36 +00:00
|
|
|
unsigned long length;
|
|
|
|
unsigned int type;
|
|
|
|
};
|
|
|
|
|
2008-09-07 11:42:51 +00:00
|
|
|
/* types 0-3 are defined in asm/io.h */
|
2008-11-09 11:18:36 +00:00
|
|
|
#define MT_UNCACHED 4
|
|
|
|
#define MT_CACHECLEAN 5
|
|
|
|
#define MT_MINICLEAN 6
|
|
|
|
#define MT_LOW_VECTORS 7
|
|
|
|
#define MT_HIGH_VECTORS 8
|
|
|
|
#define MT_MEMORY 9
|
|
|
|
#define MT_ROM 10
|
[ARM] 5422/1: ARM: MMU: add a Non-cacheable Normal executable memory type
This patch adds a Non-cacheable Normal ARM executable memory type,
MT_MEMORY_NONCACHED.
On OMAP3, this is used for rapid dynamic voltage/frequency scaling in
the VDD2 voltage domain. OMAP3's SDRAM controller (SDRC) is in the
VDD2 voltage domain, and its clock frequency must change along with
voltage. The SDRC clock change code cannot run from SDRAM itself,
since SDRAM accesses are paused during the clock change. So the
current implementation of the DVFS code executes from OMAP on-chip
SRAM, aka "OCM RAM."
If the OCM RAM pages are marked as Cacheable, the ARM cache controller
will attempt to flush dirty cache lines to the SDRC, so it can fill
those lines with OCM RAM instruction code. The problem is that the
SDRC is paused during DVFS, and so any SDRAM access causes the ARM MPU
subsystem to hang.
TI's original solution to this problem was to mark the OCM RAM
sections as Strongly Ordered memory, thus preventing caching. This is
overkill: since the memory is marked as non-bufferable, OCM RAM writes
become needlessly slow. The idea of "Strongly Ordered SRAM" is also
conceptually disturbing. Previous LAKML list discussion is here:
http://www.spinics.net/lists/arm-kernel/msg54312.html
This memory type MT_MEMORY_NONCACHED is used for OCM RAM by a future
patch.
Cc: Richard Woodruff <r-woodruff2@ti.com>
Signed-off-by: Paul Walmsley <paul@pwsan.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2009-03-12 19:11:43 +00:00
|
|
|
#define MT_MEMORY_NONCACHED 11
|
2010-07-12 20:50:59 +00:00
|
|
|
#define MT_MEMORY_DTCM 12
|
|
|
|
#define MT_MEMORY_ITCM 13
|
2011-06-28 19:42:56 +00:00
|
|
|
#define MT_MEMORY_SO 14
|
2011-12-29 12:09:51 +00:00
|
|
|
#define MT_MEMORY_DMA_READY 15
|
2007-05-05 19:28:16 +00:00
|
|
|
|
2006-06-24 16:34:50 +00:00
|
|
|
#ifdef CONFIG_MMU
|
2005-04-16 22:20:36 +00:00
|
|
|
extern void iotable_init(struct map_desc *, int);
|
2012-03-01 00:10:58 +00:00
|
|
|
extern void vm_reserve_area_early(unsigned long addr, unsigned long size,
|
|
|
|
void *caller);
|
2009-01-28 19:32:08 +00:00
|
|
|
|
ARM: implement debug_ll_io_init()
When using DEBUG_LL, the UART's (or other HW's) registers are mapped
into early page tables based on the results of assembly macro addruart.
Later, when the page tables are replaced, the same virtual address must
remain valid. Historically, this has been ensured by using defines from
<mach/iomap.h> in both the implementation of addruart, and the machine's
.map_io() function. However, with the move to single zImage, we wish to
remove <mach/iomap.h>. To enable this, the macro addruart may be used
when constructing the late page tables too; addruart is exposed as a
C function debug_ll_addr(), and used to set up the required mapping in
debug_ll_io_init(), which may called on an opt-in basis from a machine's
.map_io() function.
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
[swarren: Mask map.virtual with PAGE_MASK. Checked for NULL results from
debug_ll_addr (e.g. when selected UART isn't valid). Fixed compile when
either !CONFIG_DEBUG_LL or CONFIG_DEBUG_SEMIHOSTING.]
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Olof Johansson <olof@lixom.net>
2012-10-22 17:42:54 +00:00
|
|
|
#ifdef CONFIG_DEBUG_LL
|
|
|
|
extern void debug_ll_addr(unsigned long *paddr, unsigned long *vaddr);
|
|
|
|
extern void debug_ll_io_init(void);
|
|
|
|
#else
|
|
|
|
static inline void debug_ll_io_init(void) {}
|
|
|
|
#endif
|
|
|
|
|
2009-01-28 19:32:08 +00:00
|
|
|
struct mem_type;
|
|
|
|
extern const struct mem_type *get_mem_type(unsigned int type);
|
|
|
|
/*
|
|
|
|
* external interface to remap single page with appropriate type
|
|
|
|
*/
|
|
|
|
extern int ioremap_page(unsigned long virt, unsigned long phys,
|
|
|
|
const struct mem_type *mtype);
|
2006-06-24 16:34:50 +00:00
|
|
|
#else
|
|
|
|
#define iotable_init(map,num) do { } while (0)
|
2012-03-01 00:10:58 +00:00
|
|
|
#define vm_reserve_area_early(a,s,c) do { } while (0)
|
|
|
|
#endif
|
|
|
|
|
2006-06-24 16:34:50 +00:00
|
|
|
#endif
|