mirror of
https://github.com/torvalds/linux.git
synced 2024-12-19 01:23:20 +00:00
e5c5f2adeb
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>
63 lines
1.5 KiB
C
63 lines
1.5 KiB
C
/*
|
|
* arch/arm/include/asm/map.h
|
|
*
|
|
* 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
|
|
*/
|
|
#ifndef __ASM_MACH_MAP_H
|
|
#define __ASM_MACH_MAP_H
|
|
|
|
#include <asm/io.h>
|
|
|
|
struct map_desc {
|
|
unsigned long virtual;
|
|
unsigned long pfn;
|
|
unsigned long length;
|
|
unsigned int type;
|
|
};
|
|
|
|
/* types 0-3 are defined in asm/io.h */
|
|
#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
|
|
#define MT_MEMORY_NONCACHED 11
|
|
#define MT_MEMORY_DTCM 12
|
|
#define MT_MEMORY_ITCM 13
|
|
#define MT_MEMORY_SO 14
|
|
#define MT_MEMORY_DMA_READY 15
|
|
|
|
#ifdef CONFIG_MMU
|
|
extern void iotable_init(struct map_desc *, int);
|
|
extern void vm_reserve_area_early(unsigned long addr, unsigned long size,
|
|
void *caller);
|
|
|
|
#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
|
|
|
|
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);
|
|
#else
|
|
#define iotable_init(map,num) do { } while (0)
|
|
#define vm_reserve_area_early(a,s,c) do { } while (0)
|
|
#endif
|
|
|
|
#endif
|