aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSantosh Shilimkar <santosh.shilimkar@ti.com>2013-07-31 22:12:01 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2013-10-31 10:49:29 -0400
commit26ba47b18318abe7dadbe9294a611c0e932651d8 (patch)
treeab542f22462c683920457069bf95893252f42538
parent8e0cb8a1f6acf673ef9ab573087020ebafa8da51 (diff)
ARM: 7805/1: mm: change max*pfn to include the physical offset of memory
Most of the kernel code assumes that max*pfn is maximum pfns because the physical start of memory is expected to be PFN0. Since this assumption is not true on ARM architectures, the meaning of max*pfn is number of memory pages. This is done to keep drivers happy which are making use of of these variable to calculate the dma bounce limit using dma_mask. Now since we have a architecture override possibility for DMAable maximum pfns, lets make meaning of max*pfns as maximum pnfs on ARM as well. Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Will Deacon <will.deacon@arm.com> Cc: Nicolas Pitre <nicolas.pitre@linaro.org> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/include/asm/dma-mapping.h8
-rw-r--r--arch/arm/mm/init.c10
2 files changed, 12 insertions, 6 deletions
diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h
index 5b579b951503..863cd84eb1a2 100644
--- a/arch/arm/include/asm/dma-mapping.h
+++ b/arch/arm/include/asm/dma-mapping.h
@@ -64,6 +64,7 @@ static inline dma_addr_t virt_to_dma(struct device *dev, void *addr)
64{ 64{
65 return (dma_addr_t)__virt_to_bus((unsigned long)(addr)); 65 return (dma_addr_t)__virt_to_bus((unsigned long)(addr));
66} 66}
67
67#else 68#else
68static inline dma_addr_t pfn_to_dma(struct device *dev, unsigned long pfn) 69static inline dma_addr_t pfn_to_dma(struct device *dev, unsigned long pfn)
69{ 70{
@@ -86,6 +87,13 @@ static inline dma_addr_t virt_to_dma(struct device *dev, void *addr)
86} 87}
87#endif 88#endif
88 89
90/* The ARM override for dma_max_pfn() */
91static inline unsigned long dma_max_pfn(struct device *dev)
92{
93 return PHYS_PFN_OFFSET + dma_to_pfn(dev, *dev->dma_mask);
94}
95#define dma_max_pfn(dev) dma_max_pfn(dev)
96
89/* 97/*
90 * DMA errors are defined by all-bits-set in the DMA address. 98 * DMA errors are defined by all-bits-set in the DMA address.
91 */ 99 */
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 8aab24f35a5e..d50533c2b409 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -426,12 +426,10 @@ void __init bootmem_init(void)
426 * This doesn't seem to be used by the Linux memory manager any 426 * This doesn't seem to be used by the Linux memory manager any
427 * more, but is used by ll_rw_block. If we can get rid of it, we 427 * more, but is used by ll_rw_block. If we can get rid of it, we
428 * also get rid of some of the stuff above as well. 428 * also get rid of some of the stuff above as well.
429 *
430 * Note: max_low_pfn and max_pfn reflect the number of _pages_ in
431 * the system, not the maximum PFN.
432 */ 429 */
433 max_low_pfn = max_low - PHYS_PFN_OFFSET; 430 min_low_pfn = min;
434 max_pfn = max_high - PHYS_PFN_OFFSET; 431 max_low_pfn = max_low;
432 max_pfn = max_high;
435} 433}
436 434
437/* 435/*
@@ -537,7 +535,7 @@ static inline void free_area_high(unsigned long pfn, unsigned long end)
537static void __init free_highpages(void) 535static void __init free_highpages(void)
538{ 536{
539#ifdef CONFIG_HIGHMEM 537#ifdef CONFIG_HIGHMEM
540 unsigned long max_low = max_low_pfn + PHYS_PFN_OFFSET; 538 unsigned long max_low = max_low_pfn;
541 struct memblock_region *mem, *res; 539 struct memblock_region *mem, *res;
542 540
543 /* set highmem page free */ 541 /* set highmem page free */