summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* sh: Bail out early on PCI resource conflicts.Paul Mundt2010-01-291-13/+9
| | | | | | | | Presently we just call in to request_resource() for the ioport and iomem resources without checking for errors. This has already hidden a couple of bugs, so add some error handling in for good measure. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Reworked SH7780 PCI initialization.Paul Mundt2010-01-295-145/+102
| | | | | | | | | | | This consolidates the PCI initialization code for all of the pci-sh7780 users, and sets up the memory window dynamically as opposed to using hardcoded window positions. A number of bugs were fixed at the same time, including the PIO handling and master abort timeout settings being incorrect. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Kill off deprecated fixed PCI memory window accessors.Paul Mundt2010-01-292-29/+0
| | | | | | | This kills off the deprected fixed memory range accessors for the cases of non-translatable ioremapping. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Kill off superfluous sh_bios references from compressed loader.Paul Mundt2010-01-282-23/+0
| | | | | | | | | | | | | | The VBR value needs to be initialized in order for any of the bios trapping to work, and as we don't do that until slightly later in the boot process, this has no real chance of working. The only reason for using this in the past was due to the fact that early serial initialization wasn't possible, but now that early sh-sci is supported by everyone, there's no longer any reason to support the sh_bios hacks in the first place. Given that, we just kill off the references completely. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Fix up the ioremap_fixed() build for nommu.Paul Mundt2010-01-281-18/+18
| | | | | | arch/sh/kernel/setup.c:455: error: implicit declaration of function 'ioremap_fixed_init' Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Fix up read-only variable assignment in pcibios_align_resource().Paul Mundt2010-01-281-3/+1
| | | | | | arch/sh/drivers/pci/pci.c:167: error: assignment of read-only location '*res' Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Quiet noisy coherent DMA unmapping on R2D.Paul Mundt2010-01-281-2/+0
| | | | | | | | | IRQs are re-enabled at a later stage when doing the unmapping on R2D via the sm501 USB coherent DMA, resulting in the irqs_disabled() check producing considerable noise for this configuration. Just kill off the check, which was blindly copied from x86 anyways. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: mach-titan: Kill off unused PIO port mangling.Paul Mundt2010-01-285-136/+3
| | | | | | | | Nothing is using this, kill it off. Fixing up access sizes can be done with trapped I/O for anyone wanting to make use of this for devices that need it, everything else is already pure MMIO. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: fixed cmpxchg gRB versionGiuseppe CAVALLARO2010-01-271-4/+3
| | | | | | | | | | | | | | | | | This patch fixes a bug within the cmpxchg GRB version. A problem was notices while running some tests to stress the priority inheritance, for example pi_stress (http://rt.wiki.kernel.org/index.php/PI_Mutex_Test). Also, without this patch, after applying the latest work to consolidate atomic_cmpxchg() definitions (commit: 8c0b8139c87cfe8b95c6e763b4ca3190aa9b1ad0) the Kernel doesn't boot at all. Signed-off-by: Giuseppe Cavallaro <peppe.cavallaro@st.com> Signed-off-by: Stuart Menefy <stuart.menefy@st.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: kmemleak support.Chris Smith2010-01-272-4/+4
| | | | | | | Enables support for kmemleak on sh. Signed-off-by: Chris Smith <chris.smith@st.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Optimize runtime disabling of trapped I/O.Paul Mundt2010-01-271-0/+2
| | | | | | | | | | | Presently trapped I/O is only registered if it's not explicitly disabled for the platforms that select it openly. From the fault path this runs through an address lookup before figuring out that nothing matches and falls back through the error path, but we can forego the lookup completely by testing if it's been explicitly disabled. This provides a measurable speedup for things like qemu that rely on runtime disabling. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: flag ctrl_in/outX as __deprecated.Paul Mundt2010-01-261-10/+45
| | | | | | | | These routines are unsuitable for cross-platform use and no new code should be using them, flag them as deprecated in order to give drivers sufficient time to migrate over. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Mass ctrl_in/outX to __raw_read/writeX conversion.Paul Mundt2010-01-26115-698/+698
| | | | | | | | | | | The old ctrl in/out routines are non-portable and unsuitable for cross-platform use. While drivers/sh has already been sanitized, there is still quite a lot of code that is not. This converts the arch/sh/ bits over, which permits us to flag the routines as deprecated whilst still building with -Werror for the architecture code, and to ensure that future users are not added. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Conserve fixmap slots when IOREMAP_FIXED=n.Paul Mundt2010-01-211-0/+2
| | | | | | | | Presently the IOREMAP_FIXED fixmaps are always defined, even if the platform isn't capable of supporting it. Since we already have an ifdef for it, ifdef the entries, too. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Kill off the special uncached section and fixmap.Paul Mundt2010-01-2115-39/+20
| | | | | | | | Now that cached_to_uncached works as advertized in 32-bit mode and we're never going to be able to map < 16MB anyways, there's no need for the special uncached section. Kill it off. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Track the uncached mapping size.Paul Mundt2010-01-213-8/+24
| | | | | | | | | This provides a variable for tracking the uncached mapping size, and uses it for pretty printing the uncached lowmem range. Beyond this, we'll also be building on top of this for figuring out from where the remainder of P2 becomes usable when constructing unrelated mappings. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Rework P2 to only include kernel text.Paul Mundt2010-01-211-77/+92
| | | | | | | | | | | | | | | | This effectively neutralizes P2 by getting rid of P1 identity mapping for all available memory and instead only establishes a single unbuffered PMB entry (16MB -- the smallest available) that covers the kernel. As using segmentation for abusing caching attributes in drivers is no longer supported (and there are no drivers that can be enabled in 32-bit mode that do this), this provides us with all of the uncached access needs by the kernel itself. Drivers and their ilk need to specify their caching attributes when remapping through page tables, as usual. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: initial PMB mapping iteration by helper macro.Paul Mundt2010-01-211-147/+60
| | | | | | | | | All of the cached/uncached mapping setup is duplicated for each size, and also misses out on the 16MB case. Rather than duplicating the same iter code for that we just consolidate it in to a helper macro that builds an iter for each size. The 16MB case is then trivially bolted on at the end. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: pretty print virtual memory map on boot.Paul Mundt2010-01-201-2/+36
| | | | | | | | | This cribs the pretty printing from arch/x86/mm/init_32.c to dump the virtual memory layout on boot. This is primarily intended as a debugging aid, given that the newer CPUs have full control over their address space and as such have little to nothing in common with the legacy layout. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: mach-sdk7786: Probe system FPGA area mapping.Paul Mundt2010-01-203-4/+50
| | | | | | | | | | | | | This implements dynamic probing for the system FPGA. The system reset controller contains a fixed magic read word in order to identify the FPGA. This just utilizes a simple loop that scans across all of the fixed physical areas (area 0 through area 6) to locate the FPGA. The FPGA also contains register information detailing the area mappings and chip select settings for all of the other blocks, so this needs to be done before we can set up anything else. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Correct iounmap fixmap teardown.Paul Mundt2010-01-201-7/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | iounmap_fixed() had a couple of bugs in it that caused it to effectively fail at life. The total number of pages to unmap factored in the mapping offset and aligned up to the next page boundary, which doesn't match the ioremap_fixed() behaviour. When ioremap_fixed() pegs a slot, the address in the mapping data already contains the offset displacement, and the size is recorded verbatim given that we're only interested in total number of pages required. As such, we need to calculate the total number from the original size in the unmap path as well. At the same time, there was also an off-by-1 problem in the fixmap index calculation which has also been corrected. Previously subsequent remaps of an identical fixmap index would trigger the pte_ERROR() in set_pte_phys(): arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506). arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506). arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506). arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506). arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506). arch/sh/mm/init.c:77: bad pte 8053ffb0(0000781003fff506). With this patch in place, the iounmap-driven fixmap teardown actually does what it's supposed to do. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: mach-sdk7786: reset controller reboot support.Paul Mundt2010-01-201-0/+8
| | | | | | | This wires up the machine_ops reboot call to use the system reset controller. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: machine_ops based reboot support.Paul Mundt2010-01-2011-90/+156
| | | | | | | | | | This provides a machine_ops-based reboot interface loosely cloned from x86, and converts the native sh32 and sh64 cases over to it. Necessary both for tying in SMP support and also enabling platforms like SDK7786 to add support for their microcontroller-based power managers. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Make 29/32-bit mode check helper generally available.Paul Mundt2010-01-204-14/+14
| | | | | | | | Presently __in_29bit_mode() is only defined for the PMB case, but it's also easily derived from the CONFIG_29BIT and CONFIG_32BIT && CONFIG_PMB=n cases. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: mach-sdk7786: Split out FPGA IRQ controller setup.Paul Mundt2010-01-204-38/+59
| | | | | | | | This moves out the FPGA IRQ controller setup code to its own file, in preparation for switching off of IRL mode and having it provide its own irq_chip. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: mach-sdk7786: FPGA updates.Paul Mundt2010-01-204-70/+159
| | | | | | | | | | | | This does a bit of refactoring of the FPGA management code. The primary FPGA initialization is moved out to its own file in preparation for implementing some of the more complex capabilities, a complete set of register definitions is provided, and all of the existing users in the board code are moved over to use the new interface instead of setting up overlapping mappings. This also corrects the FPGA size, which previously was chomped off at the SDIF control register. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Handle SH-4 FPU variants with broken CVR values.Paul Mundt2010-01-201-2/+3
| | | | | | | | | Usually we can look to the CVR to work out whether we have an FPU or not. Unfortunately not all parts comply with this, so just set the flag manually for all SH-4 parts and clear it on the only SH-4 that doesn't have one (SH4-501). Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: update PFC to allow any enum in MARK listsMagnus Damm2010-01-201-5/+32
| | | | | | | | | | | This patch updates the PFC code with some clarifying comments together with a functional change. The change allows function type of GPIO to select any type of enum in their MARK lists. Without this patch only function type of enums are allowed in MARK lists. Signed-off-by: Magnus Damm <damm@opensource.se> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Shut up noisy IOREMAP_FIXED=n build.Paul Mundt2010-01-201-1/+2
| | | | | | | The ioremap_fixed() stub neglected to provide a return value, resulting in a fairly noisy build. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: support SIU sourcing from external clock on sh7722Guennadi Liakhovetski2010-01-193-7/+116
| | | | | | | | | | Implement .set_rate() for all SH "div4 clocks," .enable(), .disable(), and .set_parent() for those, that support them. This allows, among other uses, reparenting of SIU clocks to the external source, and enabling and disabling of the IrDA clock on sh7722. Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Fix up sdk7780 and urquell builds.Paul Mundt2010-01-192-2/+2
| | | | | | | These two got broken in the heartbeat private data conversion, fix them up. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: urquell: Handle EXTAL configuration here, too.Paul Mundt2010-01-191-1/+24
| | | | | | | urquell happens to use the same mode pins and EXTAL configuration as SDK7786, so just copy it over. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: mach-sdk7786: Detect/configure/propagate EXTAL.Paul Mundt2010-01-191-0/+23
| | | | | | | | | | | | This uses the mode pins exposed through the FPGA to work out whether we're driven from EXTAL or not and does the appropriate setup and propagation through the clock framework. This will also -EINVAL out for anyone adding in their own oscillators, forcing proper configuration with the clock framework instead of proceeding on with bogus clock values. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: SH7786 clock framework rewrite.Paul Mundt2010-01-192-99/+91
| | | | | | | | | This rewrites the SH7786 clock framework support completely. It's reworked to provide all of the DIV4 and MSTP function clocks. This brings it in line with the current clock framework code and lets us drop SH7786 from the list of CPUs that require legacy CPG handling. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh64: Fixup build breakage from breakpoint handler rename.Paul Mundt2010-01-192-3/+4
| | | | | | | The breakpoint handler was renamed on sh32, but sh64 was overlooked in the conversion. Fix it up now. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh64: Use the shared FPU state restorer.Paul Mundt2010-01-193-62/+8
| | | | | | | This kills off the sh64-specific state restorer and switches over to the generic one. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh64: Fix up PC casting in unaligned fixup notifier with 32bit ABI.Paul Mundt2010-01-191-2/+2
| | | | | | | | | | | | | | | | | Presently the build bails with the following: CC arch/sh/mm/alignment.o cc1: warnings being treated as errors arch/sh/mm/alignment.c: In function 'unaligned_fixups_notify': arch/sh/mm/alignment.c:69: warning: cast to pointer from integer of different size arch/sh/mm/alignment.c:74: warning: cast to pointer from integer of different size make[2]: *** [arch/sh/mm/alignment.o] Error 1 This is due to the fact that regs->pc is always 64-bit, while the pointer size depends on the ABI. Wrapping through instruction_pointer() takes care of the appropriate casting for both configurations. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh64: Fix up the build for the thread_xstate changes.Paul Mundt2010-01-198-41/+43
| | | | | | | This updates the sh64 processor info with the sh32 changes in order to tie in to the generic task_xstate management code. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Kill off now bogus fixmap/page wiring documentation.Paul Mundt2010-01-191-15/+0
| | | | | | | | | The plans for _PAGE_WIRED were detailed in a comment with the fixmap code, but as it's now all taken care of, we no longer have any reason for keeping it around, particularly since it's no longer accurate. Kill it off. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Split out MMUCR.URB based entry wiring in to shared helper.Paul Mundt2010-01-196-176/+124
| | | | | | | | | | | Presently this is duplicated between tlb-sh4 and tlb-pteaex. Split the helpers out in to a generic tlb-urb that can be used by any parts equipped with MMUCR.URB. At the same time, move the SH-5 code out-of-line, as we require single global state for DTLB entry wiring. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Provide a dummy _PAGE_WIRED flag for non-X2TLB parts.Paul Mundt2010-01-191-2/+2
| | | | | | | | This provides a dummy value for legacy parts which permits the entry wiring to be open-coded. The compiler takes care of optimizing the entry wiring away in these cases. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Limit ioremap_prot() to 32bit pgprot parts.Paul Mundt2010-01-192-1/+3
| | | | | | | | | | | | | Presently ioremap_prot() uses an unsigned long to pass the pgprot value around. This results in the upper half of the pgprot being chomped when using 64-bit pgprots on a 32-bit ABI (X2TLB and SH-5). As the only users of ioremap_prot() are presently legacy parts, this doesn't cause too much of an issue. In the future when the interface is converted to use pgprot_t directly this can be re-enabled for the other parts, too. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Convert p3_ioremap() users to ioremap_prot().Paul Mundt2010-01-194-5/+4
| | | | | | | This kills off the ancient p3_ioremap(), converting over to the more generic ioremap_prot() instead. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Kill off duplicate address alignment in ioremap_fixed().Paul Mundt2010-01-193-22/+8
| | | | | | | | This is already taken care of in the top-level ioremap, and now that no one should be calling ioremap_fixed() directly we can simply throw the mapping displacement in as an additional argument. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Prevent 64-bit pgprot clobbering across ioremap implementations.Paul Mundt2010-01-196-33/+41
| | | | | | | | | | | | | Presently 'flags' gets passed around a lot between the various ioremap helpers and implementations, which is only 32-bits. In the X2TLB case we use 64-bit pgprots which presently results in the upper 32bits being chopped off (which handily include our read/write/exec permissions). As such, we convert everything internally to using pgprot_t directly and simply convert over with pgprot_val() where needed. With this in place, transparent fixmap utilization for early ioremap works as expected. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Flag __ioremap_caller() __init_refok.Paul Mundt2010-01-181-2/+3
| | | | | | | | The mem_init_done test makes sure that this path is only entered in __init cases, so leaving ioremap_fixed() as __init and flagging the caller __init_refok is sufficient. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Handle unmapping of fixed slots transparently in iounmap().Paul Mundt2010-01-181-0/+6
| | | | | | | | | iounmap() should balance whatever is done by ioremap(). Presently ioremap() can do any of fixed mappings, PMB mappings, or page table mappings. Presently only the latter two are handled through the standard unmap path, so tie in the fixed unmapping, too. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Make iounmap_fixed() return success/failure for iounmap() path.Paul Mundt2010-01-182-4/+10
| | | | | | | | This converts iounmap_fixed() to return success/error if it handled the unmap request or not. At the same time, drop the __init label, as this can be called in to later. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Merge _32/_64 ioremap implementations.Paul Mundt2010-01-183-48/+1
| | | | | | | There is nothing of interest in the _64 version anymore, so the _32 one can be renamed and used unconditionally. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
* sh: Fixup the IOREMAP_FIXED=n build.Paul Mundt2010-01-181-0/+9
| | | | | | | | Presently the fixed ioremap API is only defined when CONFIG_IOREMAP_FIXED is set. As we want to call in to it unconditionally, provide a stubbed out interface. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
OpenPOWER on IntegriCloud