-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This is the minimum fixmap interface expected to be implemented by architectures supporting highmem. We have a second level page table already allocated and covering 0xfff00000-0xffffffff because the exception vector page is located at 0xffff0000, and various cache tricks already use some entries above 0xffff0000. Therefore the PTEs covering 0xfff00000-0xfffeffff are free to be used. However the XScale cache flushing code already uses virtual addresses between 0xfffe0000 and 0xfffeffff. So this reserves the 0xfff00000-0xfffdffff range for fixmap stuff. The Documentation/arm/memory.txt information is updated accordingly, including the information about the actual top of DMA memory mapping region which didn't match the code. Signed-off-by: Nicolas Pitre <nico@marvell.com>
- Loading branch information
Nicolas Pitre
committed
Mar 16, 2009
1 parent
1522ac3
commit 5f0fbf9
Showing
3 changed files
with
50 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
#ifndef _ASM_FIXMAP_H | ||
#define _ASM_FIXMAP_H | ||
|
||
/* | ||
* Nothing too fancy for now. | ||
* | ||
* On ARM we already have well known fixed virtual addresses imposed by | ||
* the architecture such as the vector page which is located at 0xffff0000, | ||
* therefore a second level page table is already allocated covering | ||
* 0xfff00000 upwards. | ||
* | ||
* The cache flushing code in proc-xscale.S uses the virtual area between | ||
* 0xfffe0000 and 0xfffeffff. | ||
*/ | ||
|
||
#define FIXADDR_START 0xfff00000UL | ||
#define FIXADDR_TOP 0xfffe0000UL | ||
#define FIXADDR_SIZE (FIXADDR_TOP - FIXADDR_START) | ||
|
||
#define FIX_KMAP_BEGIN 0 | ||
#define FIX_KMAP_END (FIXADDR_SIZE >> PAGE_SHIFT) | ||
|
||
#define __fix_to_virt(x) (FIXADDR_START + ((x) << PAGE_SHIFT)) | ||
#define __virt_to_fix(x) (((x) - FIXADDR_START) >> PAGE_SHIFT) | ||
|
||
extern void __this_fixmap_does_not_exist(void); | ||
|
||
static inline unsigned long fix_to_virt(const unsigned int idx) | ||
{ | ||
if (idx >= FIX_KMAP_END) | ||
__this_fixmap_does_not_exist(); | ||
return __fix_to_virt(idx); | ||
} | ||
|
||
static inline unsigned int virt_to_fix(const unsigned long vaddr) | ||
{ | ||
BUG_ON(vaddr >= FIXADDR_TOP || vaddr < FIXADDR_START); | ||
return __virt_to_fix(vaddr); | ||
} | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters