powerpc: Minor cleanups of kernel virt address space definitions
Make FIXADDR_TOP a compile time constant and cleanup a couple of definitions relative to the layout of the kernel address space on ppc32. We also print out that layout at boot time for debugging purposes. This is a pre-requisite for properly fixing non-coherent DMA allocactions. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
This commit is contained in:
parent
b16e7766d6
commit
f637a49e50
@ -14,8 +14,6 @@
|
|||||||
#ifndef _ASM_FIXMAP_H
|
#ifndef _ASM_FIXMAP_H
|
||||||
#define _ASM_FIXMAP_H
|
#define _ASM_FIXMAP_H
|
||||||
|
|
||||||
extern unsigned long FIXADDR_TOP;
|
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
@ -24,6 +22,8 @@ extern unsigned long FIXADDR_TOP;
|
|||||||
#include <asm/kmap_types.h>
|
#include <asm/kmap_types.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define FIXADDR_TOP ((unsigned long)(-PAGE_SIZE))
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Here we define all the compile-time 'special' virtual
|
* Here we define all the compile-time 'special' virtual
|
||||||
* addresses. The point is to have a constant address at
|
* addresses. The point is to have a constant address at
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
extern unsigned long va_to_phys(unsigned long address);
|
extern unsigned long va_to_phys(unsigned long address);
|
||||||
extern pte_t *va_to_pte(unsigned long address);
|
extern pte_t *va_to_pte(unsigned long address);
|
||||||
extern unsigned long ioremap_bot, ioremap_base;
|
extern unsigned long ioremap_bot;
|
||||||
|
|
||||||
#ifdef CONFIG_44x
|
#ifdef CONFIG_44x
|
||||||
extern int icache_44x_need_flush;
|
extern int icache_44x_need_flush;
|
||||||
@ -55,9 +55,27 @@ extern int icache_44x_need_flush;
|
|||||||
#define pgd_ERROR(e) \
|
#define pgd_ERROR(e) \
|
||||||
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
|
printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This is the bottom of the PKMAP area with HIGHMEM or an arbitrary
|
||||||
|
* value (for now) on others, from where we can start layout kernel
|
||||||
|
* virtual space that goes below PKMAP and FIXMAP
|
||||||
|
*/
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
#define KVIRT_TOP PKMAP_BASE
|
||||||
|
#else
|
||||||
|
#define KVIRT_TOP (0xfe000000UL) /* for now, could be FIXMAP_BASE ? */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ioremap_bot starts at that address. Early ioremaps move down from there,
|
||||||
|
* until mem_init() at which point this becomes the top of the vmalloc
|
||||||
|
* and ioremap space
|
||||||
|
*/
|
||||||
|
#define IOREMAP_TOP KVIRT_TOP
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Just any arbitrary offset to the start of the vmalloc VM area: the
|
* Just any arbitrary offset to the start of the vmalloc VM area: the
|
||||||
* current 64MB value just means that there will be a 64MB "hole" after the
|
* current 16MB value just means that there will be a 64MB "hole" after the
|
||||||
* physical memory until the kernel virtual memory starts. That means that
|
* physical memory until the kernel virtual memory starts. That means that
|
||||||
* any out-of-bounds memory accesses will hopefully be caught.
|
* any out-of-bounds memory accesses will hopefully be caught.
|
||||||
* The vmalloc() routines leaves a hole of 4kB between each vmalloced
|
* The vmalloc() routines leaves a hole of 4kB between each vmalloced
|
||||||
|
@ -168,12 +168,8 @@ void __init MMU_init(void)
|
|||||||
ppc_md.progress("MMU:mapin", 0x301);
|
ppc_md.progress("MMU:mapin", 0x301);
|
||||||
mapin_ram();
|
mapin_ram();
|
||||||
|
|
||||||
#ifdef CONFIG_HIGHMEM
|
/* Initialize early top-down ioremap allocator */
|
||||||
ioremap_base = PKMAP_BASE;
|
ioremap_bot = IOREMAP_TOP;
|
||||||
#else
|
|
||||||
ioremap_base = 0xfe000000UL; /* for now, could be 0xfffff000 */
|
|
||||||
#endif /* CONFIG_HIGHMEM */
|
|
||||||
ioremap_bot = ioremap_base;
|
|
||||||
|
|
||||||
/* Map in I/O resources */
|
/* Map in I/O resources */
|
||||||
if (ppc_md.progress)
|
if (ppc_md.progress)
|
||||||
|
@ -380,6 +380,19 @@ void __init mem_init(void)
|
|||||||
bsssize >> 10,
|
bsssize >> 10,
|
||||||
initsize >> 10);
|
initsize >> 10);
|
||||||
|
|
||||||
|
#ifdef CONFIG_PPC32
|
||||||
|
pr_info("Kernel virtual memory layout:\n");
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : fixmap\n", FIXADDR_START, FIXADDR_TOP);
|
||||||
|
#ifdef CONFIG_HIGHMEM
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : highmem PTEs\n",
|
||||||
|
PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP));
|
||||||
|
#endif /* CONFIG_HIGHMEM */
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : early ioremap\n",
|
||||||
|
ioremap_bot, IOREMAP_TOP);
|
||||||
|
pr_info(" * 0x%08lx..0x%08lx : vmalloc & ioremap\n",
|
||||||
|
VMALLOC_START, VMALLOC_END);
|
||||||
|
#endif /* CONFIG_PPC32 */
|
||||||
|
|
||||||
mem_init_done = 1;
|
mem_init_done = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,8 +399,6 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
|
|||||||
#endif /* CONFIG_DEBUG_PAGEALLOC */
|
#endif /* CONFIG_DEBUG_PAGEALLOC */
|
||||||
|
|
||||||
static int fixmaps;
|
static int fixmaps;
|
||||||
unsigned long FIXADDR_TOP = (-PAGE_SIZE);
|
|
||||||
EXPORT_SYMBOL(FIXADDR_TOP);
|
|
||||||
|
|
||||||
void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags)
|
void __set_fixmap (enum fixed_addresses idx, phys_addr_t phys, pgprot_t flags)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user