aboutsummaryrefslogtreecommitdiff
path: root/arch/sh/mm
AgeCommit message (Collapse)AuthorFilesLines
2010-01-17sh: Tidy up non-translatable checks in iounmap path.Paul Mundt1-4/+24
This tidies up the iounmap path with consolidated checks for nontranslatable mappings. This is in preparation of unifying the implementations. Signed-off-by: Paul Mundt <[email protected]>
2010-01-16sh: Use ioremap_fixed() to implement SH-5 ioremap()Matt Fleming1-283/+4
Use the fixmap-based memory mapping implementation for SH-5's ioremap() functions and delete the old static allocator that was borrowed from sparc. Signed-off-by: Matt Fleming <[email protected]>
2010-01-16sh: Add fixed ioremap supportMatt Fleming3-0/+149
Some devices need to be ioremap'd and accessed very early in the boot process. It is not possible to use the standard ioremap() function in this case because that requires kmalloc()'ing some virtual address space and kmalloc() may not be available so early in boot. This patch provides fixmap mappings that allow physical address ranges to be remapped into the kernel address space during the early boot stages. Signed-off-by: Matt Fleming <[email protected]>
2010-01-16sh: Generalise the pte handling code for the fixmap pathMatt Fleming1-4/+40
Generalise the code for setting and clearing pte's and allow TLB entries to be pinned and unpinned if the _PAGE_WIRED flag is present. Signed-off-by: Matt Fleming <[email protected]>
2010-01-16sh: Acquire some more page flags for SH-5.Matt Fleming1-1/+1
We need some more page flags to hook up _PAGE_WIRED (and eventually other things). So use the unused PTE bits above the PPN field as no implementations use these for anything currently. Now that we have _PAGE_WIRED let's provide the SH-5 functions for wiring up TLB entries. Signed-off-by: Matt Fleming <[email protected]>
2010-01-16sh: New extended page flag to wire/unwire TLB entriesMatt Fleming2-0/+132
Provide a new extended page flag, _PAGE_WIRED and an SH4 implementation for wiring TLB entries and use it in the fixmap code path so that we can wire the fixmap TLB entry. Signed-off-by: Matt Fleming <[email protected]>
2010-01-15sh: Guard against early IPIs in flush_cache_all().Paul Mundt1-2/+11
flush_cache_all() gets called in to when we do some early ioremapping. Unfortunately on SDK7786 the interrupt controller itself requires ioremapping, leading to a bit of a chicken and egg scenario. For now, don't bother with IPI crosscalls if there aren't any other CPUs online. Signed-off-by: Paul Mundt <[email protected]>
2010-01-13sh: default to extended TLB support.Paul Mundt2-32/+6
All SH-X2 and SH-X3 parts support an extended TLB mode, which has been left as experimental since support was originally merged. Now that it's had some time to stabilize and get some exposure to various platforms, we can drop it as an option and default enable it across the board. This is also good future proofing for newer parts that will drop support for the legacy TLB mode completely. This will also force 3-level page tables for all newer parts, which is necessary both for the varying page sizes and larger memories. Signed-off-by: Paul Mundt <[email protected]>
2010-01-13sh: fixed PMB mode refactoring.Paul Mundt3-65/+67
This introduces some much overdue chainsawing of the fixed PMB support. fixed PMB was introduced initially to work around the fact that dynamic PMB mode was relatively broken, though they were never intended to converge. The main areas where there are differences are whether the system is booted in 29-bit mode or 32-bit mode, and whether legacy mappings are to be preserved. Any system booting in true 32-bit mode will not care about legacy mappings, so these are roughly decoupled. Regardless of the entry point, PMB and 32BIT are directly related as far as the kernel is concerned, so we also switch back to having one select the other. With legacy mappings iterated through and applied in the initialization path it's now possible to finally merge the two implementations and permit dynamic remapping overtop of remaining entries regardless of whether boot mappings are crafted by hand or inherited from the boot loader. Signed-off-by: Paul Mundt <[email protected]>
2010-01-12sh: Always provide thread_info allocators.Paul Mundt1-29/+0
Presently the thread_info allocators are special cased, depending on THREAD_SHIFT < PAGE_SHIFT. This provides a sensible definition for them regardless of configuration, in preparation for extended CPU state. Signed-off-by: Paul Mundt <[email protected]>
2010-01-12sh: Split out the unaligned counters and user bits.Paul Mundt2-1/+160
This splits out the unaligned access counters and userspace bits in to their own generic interface, which will allow them to be wired up on sh64 too. Signed-off-by: Paul Mundt <[email protected]>
2010-01-06sh: Fix up nommu build for out-of-line pgtable changes.Paul Mundt1-0/+4
pgtable_cache_init() has been moved out-of-line, so we also need a dummy definition for it on nommu to fix up the build. Signed-off-by: Paul Mundt <[email protected]>
2010-01-05Merge branch 'sh/pgtable' of git://github.com/mfleming/linux-2.6Paul Mundt4-13/+63
2010-01-04Merge branch 'sh/stable-updates'Paul Mundt1-4/+3
2010-01-04sh: Don't default enable PMB support.Paul Mundt1-1/+0
This has the adverse effect of converting many 29bit configs to 32bit mode, while this is a change that needs to be done manually for each platform. Turn it off by default in order to cut down on spurious bug reports. Signed-off-by: Paul Mundt <[email protected]>
2010-01-04sh: Disable PMB for SH4AL-DSP CPUs.Paul Mundt1-3/+3
While the PMB is available on SH-4A parts, SH4AL-DSP parts exclude it altogether. As such, explicitly disable PMB support for these parts. If this changes in the future for newer subtypes, this will have to be made more fine-grained. Signed-off-by: Paul Mundt <[email protected]>
2010-01-02sh: Move page table allocation out of lineMatt Fleming2-1/+58
We also switched away from quicklists and instead moved to slab caches. After benchmarking both implementations the difference is negligible. The slab caches suit us better though because the size of a pgd table is just 4 entries when we're using a 3-level page table layout and quicklists always deal with pages. Signed-off-by: Matt Fleming <[email protected]>
2010-01-02sh: Optimise flush_dcache_page() on SH4Matt Fleming1-10/+3
If the page is not mapped into any process's address space then aliases cannot exist in the cache. So reduce the amount of flushing we perform. Signed-off-by: Matt Fleming <[email protected]>
2010-01-02sh: Correct the PTRS_PER_PMD and PMD_SHIFT valuesMatt Fleming1-2/+2
The previous expressions were wrong which made free_pmd_range() explode when using anything other than 4KB pages (which is why 8KB and 64KB pages were disabled with the 3-level page table layout). The problem was that pmd_offset() was returning an index of non-zero when it should have been returning 0. This non-zero offset was used to calculate the address of the pmd table to free in free_pmd_range(), which ended up trying to free an object that was not aligned on a page boundary. Now 3-level page tables should work with 4KB, 8KB and 64KB pages. Signed-off-by: Matt Fleming <[email protected]>
2009-12-24Merge branches 'sh/g3-prep' and 'sh/stable-updates'Paul Mundt1-6/+2
2009-12-24sh: Ensure all PG_dcache_dirty pages are written back.Markus Pietrek1-6/+2
With some of the cache rework an address aliasing optimization was added, but this managed to fail on certain mappings resulting in pages with PG_dcache_dirty set never writing back their dcache lines. This patch reverts to the earlier behaviour of simply always writing back when the dirty bit is set. Signed-off-by: Markus Pietrek <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-12-17sh: Definitions for 3-level page table layoutMatt Fleming3-3/+30
If using 64-bit PTEs and 4K pages then each page table has 512 entries (as opposed to 1024 entries with 32-bit PTEs). Unlike MIPS, SH follows the convention that all structures in the page table (pgd_t, pmd_t, pgprot_t, etc) must be the same size. Therefore, 64-bit PTEs require 64-bit PGD entries, etc. Using 2-levels of page tables and 64-bit PTEs it is only possible to map 1GB of virtual address space. In order to map all 4GB of virtual address space we need to adopt a 3-level page table layout. This actually works out better for CONFIG_SUPERH32 because we only waste 2 PGD entries on the P1 and P2 areas (which are untranslated) instead of 256. Signed-off-by: Matt Fleming <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-12-15Merge branch 'master' of ↵Paul Mundt1-1/+2
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
2009-12-14sh: wire up vmallocinfo support in ioremap() implementations.Paul Mundt2-8/+8
This wires up the caller information for the ioremap VMA, which allows for more helpful caller tracking via /proc/vmallocinfo. Follows the x86 and powerpc changes of the same nature. Signed-off-by: Paul Mundt <[email protected]>
2009-12-11fix broken aliasing checks for MAP_FIXED on sparc32, mips, arm and shAl Viro1-1/+2
We want addr - (pgoff << PAGE_SHIFT) consistently coloured... Acked-by: Paul Mundt <[email protected]> Acked-by: Hugh Dickins <[email protected]> Signed-off-by: Al Viro <[email protected]>
2009-12-09sh: NUMA lmb fixesMagnus Damm1-2/+11
This patch updates the NUMA version of setup_memory() with UMA code changes and also modifies the last argument to lmb_alloc_base() to use an address instead of pfn. Signed-off-by: Magnus Damm <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-12-09sh: fix size calculation for NUMA node 0Magnus Damm1-1/+1
Fix the NUMA size calculation for node 0. Do the same as the UMA version of setup_memory() and use address instead of pfn when calculating the size. Signed-off-by: Magnus Damm <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-12-09sh: Can't compare physical and virtual addresses for aliasesMatt Fleming1-2/+1
It does not make sense to compare virtual and physical addresses for aliasing, only virtual addresses can be compared for aliases. Signed-off-by: Matt Fleming <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-12-04sh: Drop associative writes for SH-4 cache flushes.Matt Fleming1-2/+2
When flushing/invalidating the icache/dcache via the memory-mapped IC/OC address arrays, the associative bit should only be used in conjunction with virtual addresses. However, we currently flush cache lines based on physical address, so stop using the associative bit. It is a better strategy to use non-associative writes (and physical tags) for flushing the caches anyway, because flushing by virtual address (as with the A-bit set) requires a valid TLB entry for that virtual address. If one does not exist in the TLB no exception is generated and the flush is silently ignored. This is also future-proofing for SH-4A parts which are gradually phasing out associative writes to the cache array due to the aforementioned case of certain flushes silently turning in to nops. Signed-off-by: Matt Fleming <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-12-04sh: Partial revert of copy/clear_user_highpage() optimizations.Paul Mundt1-53/+13
These still require more testing, so revert them for now. We keep the off-by-1 in the fixmap colouring and drop the rest. Signed-off-by: Paul Mundt <[email protected]>
2009-11-24sh: Improve performance of SH4 versions of copy/clear_user_highpageStuart Menefy1-13/+53
The previous implementation of clear_user_highpage and copy_user_highpage checked to see if there was a D-cache aliasing issue between the user and kernel mappings of a page, but if there was they always did a flush with writeback on the dirtied kernel alias. However as we now have the ability to map a page into kernel space with the same cache colour as the user mapping, there is no need to write back this data. Currently we also invalidate the kernel alias as a precaution, however I'm not sure if this is actually required. Also correct the definition of FIX_CMAP_END so that the mappings created by kmap_coherent() are actually at the correct colour. Signed-off-by: Stuart Menefy <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-11-12sh64: Fix up reworked cache op build.Paul Mundt2-2/+6
This gets the build fixed up for the sh64 cache enabled case. Disabling still needs further abstraction for independent I/D-cache disabling. Signed-off-by: Paul Mundt <[email protected]>
2009-11-11sh: Enable PMB support for all SH-4A CPUs.Paul Mundt1-5/+3
Presently the PMB options were limited to a number of CPUs they were tested with, but it is generally available on all SH-4A CPUs, so just drop the subtype conditionals. Signed-off-by: Paul Mundt <[email protected]>
2009-11-09Merge branch 'sh/stable-updates'Paul Mundt1-1/+4
2009-11-09sh: Account for cache aliases in flush_icache_range()Matt Fleming1-1/+4
The icache may also contain aliases so we must account for them just like we do when manipulating the dcache. We usually get away with aliases in the icache because the instructions that are read from memory are read-only, i.e. they never change. However, the place where this bites us is when the code has been modified. Signed-off-by: Matt Fleming <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-11-04sh: Make sure indexes are positiveRoel Kluin1-1/+1
The indexes are signed, make sure they are not negative when we read array elements. Signed-off-by: Roel Kluin <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-10-30sh: Do not apply virt_to_phys() to a physical addressMatt Fleming1-2/+1
The variable 'phys' already contains the physical address to flush. It is not a virtual address and should not be passed to virt_to_phys(). Signed-off-by: Matt Fleming <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-10-27Merge branch 'sh/stable-updates'Paul Mundt1-1/+1
2009-10-27sh: Bump up dma_ops initialization far earlier in the boot process.Paul Mundt2-2/+11
Presently this was tacked on to the dma debug init bits from fs_initcall(), which is far too late for devices setting up their own per-device coherent areas. Throw this in the beginning of mem_init(), as per the x86 iommu allocation. Signed-off-by: Paul Mundt <[email protected]>
2009-10-27sh64: cache flush symbol exports.Paul Mundt1-0/+6
These were previously hidden in sh_ksyms_32, despite also being needed for sh64 now that the cache.c code is shared. Signed-off-by: Paul Mundt <[email protected]>
2009-10-27sh: Fix hugetlbfs dependencies for SH-3 && MMU configurations.Paul Mundt1-1/+1
The hugetlb dependencies presently depend on SUPERH && MMU while the hugetlb page size definitions depend on CPU_SH4 or CPU_SH5. This unfortunately allows SH-3 + MMU configurations to enable hugetlbfs without a corresponding HPAGE_SHIFT definition, resulting in the build blowing up. As SH-3 doesn't support variable page sizes, we tighten up the dependenies a bit to prevent hugetlbfs from being enabled. These days we also have a shiny new SYS_SUPPORTS_HUGETLBFS, so switch to using that rather than adding to the list of corner cases in fs/Kconfig. Reported-by: Kristoffer Ericson <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-10-26sh: Add dma-mapping support for dma_alloc/free_coherent() overrides.Paul Mundt1-17/+5
This moves the current dma_alloc/free_coherent() calls to a generic variant and plugs them in for the nommu default. Other variants can override the defaults in the dma mapping ops directly. Signed-off-by: Paul Mundt <[email protected]>
2009-10-20sh: Convert to asm-generic/dma-mapping-common.hPaul Mundt1-0/+6
This converts the old DMA mapping support to the new generic dma-mapping-common.h abstraction. Signed-off-by: Paul Mundt <[email protected]>
2009-10-16sh: Support SCHED_MC for SH-X3 multi-cores.Paul Mundt1-0/+9
This enables SCHED_MC support for SH-X3 multi-cores. Presently this is just a simple wrapper around the possible map, but this allows for tying in support for some of the more exotic NUMA clusters where we can actually do something with the topology. Signed-off-by: Paul Mundt <[email protected]>
2009-10-16Merge branch 'sh/stable-updates'Paul Mundt2-14/+22
Conflicts: arch/sh/mm/cache-sh4.c
2009-10-16sh: disabled cache handling fix.Magnus Damm1-0/+10
Add code to handle the cache disabled case. Fixes breakage introduced by 37443ef3f0406e855e169c87ae3f4ffb4b6ff635 ("sh: Migrate SH-4 cacheflush ops to function pointers."). Without this patch configuring caches off with CONFIG_CACHE_OFF=y makes kfr2r09 and migo-r lock up in fbdev deferred io or early user space. Signed-off-by: Magnus Damm <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-10-16sh: Fix up single page flushing to use PAGE_SIZE.Valentin Sitdikov1-12/+10
Presently The SH-4 cache flushing code uses flush_cache_4096() for most of the real flushing work, which breaks down to a fixed 4096 unroll and increment. Not only is this sub-optimal for larger page sizes, it's also uncovered a bug in sh4_flush_dcache_page() when large page sizes are used and we have no cache aliases -- resulting in only a part of the page's D-cache lines being written back. Signed-off-by: Valentin Sitdikov <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-10-13Merge branch 'sh/stable-updates'Paul Mundt1-1/+1
2009-10-13sh: force dcache flush if dcache_dirty bit set.Paul Mundt1-1/+1
This too follows the ARM change, given that the issue at hand applies to all platforms that implement lazy D-cache writeback. This fixes up the case when a page mapping disappears between the flush_dcache_page() call (when PG_dcache_dirty is set for the page) and the update_mmu_cache() call -- such as in the case of swap cache being freed early. This kills off the mapping test in update_mmu_cache() and switches to simply testing for PG_dcache_dirty. Reported-by: Nitin Gupta <[email protected]> Reported-by: Hugh Dickins <[email protected]> Signed-off-by: Paul Mundt <[email protected]>
2009-10-10sh: Fold fixed-PMB support into dynamic PMB supportMatt Fleming3-52/+61
The initialisation process differs for CONFIG_PMB and for CONFIG_PMB_FIXED. For CONFIG_PMB_FIXED we need to register the PMB entries that were allocated by the bootloader. Signed-off-by: Matt Fleming <[email protected]> Signed-off-by: Paul Mundt <[email protected]>