2005-04-17 06:20:36 +08:00
|
|
|
/*
|
2008-08-02 17:55:55 +08:00
|
|
|
* arch/arm/include/asm/map.h
|
2005-04-17 06:20:36 +08: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 08:10:58 +08:00
|
|
|
#ifndef __ASM_MACH_MAP_H
|
|
|
|
#define __ASM_MACH_MAP_H
|
|
|
|
|
2007-05-06 03:59:27 +08:00
|
|
|
#include <asm/io.h>
|
|
|
|
|
2005-04-17 06:20:36 +08:00
|
|
|
struct map_desc {
|
|
|
|
unsigned long virtual;
|
2005-10-28 22:19:11 +08:00
|
|
|
unsigned long pfn;
|
2005-04-17 06:20:36 +08:00
|
|
|
unsigned long length;
|
|
|
|
unsigned int type;
|
|
|
|
};
|
|
|
|
|
2008-09-07 19:42:51 +08:00
|
|
|
/* types 0-3 are defined in asm/io.h */
|
2008-11-09 19:18:36 +08: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-13 03:11:43 +08:00
|
|
|
#define MT_MEMORY_NONCACHED 11
|
2010-07-13 04:50:59 +08:00
|
|
|
#define MT_MEMORY_DTCM 12
|
|
|
|
#define MT_MEMORY_ITCM 13
|
2011-06-29 03:42:56 +08:00
|
|
|
#define MT_MEMORY_SO 14
|
2011-12-29 20:09:51 +08:00
|
|
|
#define MT_MEMORY_DMA_READY 15
|
2007-05-06 03:28:16 +08:00
|
|
|
|
2006-06-25 00:34:50 +08:00
|
|
|
#ifdef CONFIG_MMU
|
2005-04-17 06:20:36 +08:00
|
|
|
extern void iotable_init(struct map_desc *, int);
|
2012-03-01 08:10:58 +08:00
|
|
|
extern void vm_reserve_area_early(unsigned long addr, unsigned long size,
|
|
|
|
void *caller);
|
2009-01-29 03:32:08 +08: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-25 00:34:50 +08:00
|
|
|
#else
|
|
|
|
#define iotable_init(map,num) do { } while (0)
|
2012-03-01 08:10:58 +08:00
|
|
|
#define vm_reserve_area_early(a,s,c) do { } while (0)
|
|
|
|
#endif
|
|
|
|
|
2006-06-25 00:34:50 +08:00
|
|
|
#endif
|