c80d79d746
Current implementations define NODES_SHIFT in include/asm-xxx/numnodes.h for each arch. Its definition is sometimes configurable. Indeed, ia64 defines 5 NODES_SHIFT values in the current git tree. But it looks a bit messy. SGI-SN2(ia64) system requires 1024 nodes, and the number of nodes already has been changeable by config. Suitable node's number may be changed in the future even if it is other architecture. So, I wrote configurable node's number. This patch set defines just default value for each arch which needs multi nodes except ia64. But, it is easy to change to configurable if necessary. On ia64 the number of nodes can be already configured in generic ia64 and SN2 config. But, NODES_SHIFT is defined for DIG64 and HP'S machine too. So, I changed it so that all platforms can be configured via CONFIG_NODES_SHIFT. It would be simpler. See also: http://marc.theaimsgroup.com/?l=linux-kernel&m=114358010523896&w=2 Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com> Cc: Hirokazu Takata <takata@linux-m32r.org> Cc: "Luck, Tony" <tony.luck@intel.com> Cc: Andi Kleen <ak@muc.de> Cc: Paul Mackerras <paulus@samba.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru> Cc: Richard Henderson <rth@twiddle.net> Cc: Kyle McMartin <kyle@mcmartin.ca> Cc: Russell King <rmk@arm.linux.org.uk> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Jack Steiner <steiner@sgi.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
88 lines
2.4 KiB
C
88 lines
2.4 KiB
C
/* include/asm-arm/arch-lh7a40x/memory.h
|
|
*
|
|
* Copyright (C) 2004 Coastal Environmental Systems
|
|
*
|
|
* 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.
|
|
*
|
|
*
|
|
* Refer to <file:Documentation/arm/Sharp-LH/SDRAM> for more information.
|
|
*
|
|
*/
|
|
|
|
#ifndef __ASM_ARCH_MEMORY_H
|
|
#define __ASM_ARCH_MEMORY_H
|
|
|
|
/*
|
|
* Physical DRAM offset.
|
|
*/
|
|
#define PHYS_OFFSET UL(0xc0000000)
|
|
|
|
/*
|
|
* Virtual view <-> DMA view memory address translations
|
|
* virt_to_bus: Used to translate the virtual address to an
|
|
* address suitable to be passed to set_dma_addr
|
|
* bus_to_virt: Used to convert an address for DMA operations
|
|
* to an address that the kernel can use.
|
|
*/
|
|
#define __virt_to_bus(x) __virt_to_phys(x)
|
|
#define __bus_to_virt(x) __phys_to_virt(x)
|
|
|
|
#ifdef CONFIG_DISCONTIGMEM
|
|
|
|
/*
|
|
* Given a kernel address, find the home node of the underlying memory.
|
|
*/
|
|
|
|
# ifdef CONFIG_LH7A40X_ONE_BANK_PER_NODE
|
|
# define KVADDR_TO_NID(addr) \
|
|
( ((((unsigned long) (addr) - PAGE_OFFSET) >> 24) & 1)\
|
|
| ((((unsigned long) (addr) - PAGE_OFFSET) >> 25) & ~1))
|
|
# else /* 2 banks per node */
|
|
# define KVADDR_TO_NID(addr) \
|
|
(((unsigned long) (addr) - PAGE_OFFSET) >> 26)
|
|
# endif
|
|
|
|
/*
|
|
* Given a page frame number, convert it to a node id.
|
|
*/
|
|
|
|
# ifdef CONFIG_LH7A40X_ONE_BANK_PER_NODE
|
|
# define PFN_TO_NID(pfn) \
|
|
(((((pfn) - PHYS_PFN_OFFSET) >> (24 - PAGE_SHIFT)) & 1)\
|
|
| ((((pfn) - PHYS_PFN_OFFSET) >> (25 - PAGE_SHIFT)) & ~1))
|
|
# else /* 2 banks per node */
|
|
# define PFN_TO_NID(pfn) \
|
|
(((pfn) - PHYS_PFN_OFFSET) >> (26 - PAGE_SHIFT))
|
|
#endif
|
|
|
|
/*
|
|
* Given a kaddr, ADDR_TO_MAPBASE finds the owning node of the memory
|
|
* and return the mem_map of that node.
|
|
*/
|
|
# define ADDR_TO_MAPBASE(kaddr) NODE_MEM_MAP(KVADDR_TO_NID(kaddr))
|
|
|
|
/*
|
|
* Given a page frame number, find the owning node of the memory
|
|
* and return the mem_map of that node.
|
|
*/
|
|
# define PFN_TO_MAPBASE(pfn) NODE_MEM_MAP(PFN_TO_NID(pfn))
|
|
|
|
/*
|
|
* Given a kaddr, LOCAL_MEM_MAP finds the owning node of the memory
|
|
* and returns the index corresponding to the appropriate page in the
|
|
* node's mem_map.
|
|
*/
|
|
|
|
# ifdef CONFIG_LH7A40X_ONE_BANK_PER_NODE
|
|
# define LOCAL_MAP_NR(addr) \
|
|
(((unsigned long)(addr) & 0x003fffff) >> PAGE_SHIFT)
|
|
# else /* 2 banks per node */
|
|
# define LOCAL_MAP_NR(addr) \
|
|
(((unsigned long)(addr) & 0x01ffffff) >> PAGE_SHIFT)
|
|
# endif
|
|
|
|
#endif
|
|
|
|
#endif
|