aboutsummaryrefslogtreecommitdiff
path: root/arch/sh
AgeCommit message (Collapse)Author
2009-08-23Merge branches 'sh/hwblk' and 'sh/pm-runtime'Paul Mundt
2009-08-23sh: drop static UIO clocks for sh7722, sh7723 and sh7724Magnus Damm
The Runtime PM patch for UIO driver implements coarse grained dynamic power management for UIO devices. With that patch in place we can get rid of the static clock configuration. Which in turn makes it possible for cpuidle to enter deeper sleep. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-23sh: let ARCH_SHMOBILE select PM and PM_RUNTIMEMagnus Damm
With the Runtime PM driver changes in place, we must have Runtime PM support in place. Otherwise there is no way to enable clocks to the Runtime PM enabled hardware blocks. This patch makes Runtime PM mandatory on SuperH Mobile. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-23sh: Fix section mismatch in platform bus notifier.Paul Mundt
The runtime PM for SH-Mobile code had platform_bus_notify() as __devinit, which is rather bogus. Kill off the annotation, which subsequently silences the section mismatch warnings. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-23sh: Runtime PM for SuperH Mobile platform bus devicesMagnus Damm
This patch is V3 of the SuperH Mobile Runtime PM platform bus implentation matching Rafael's Runtime PM v16. The code gets invoked from the SuperH specific Runtime PM platform bus functions that override the weak symbols for: - platform_pm_runtime_suspend() - platform_pm_runtime_resume() - platform_pm_runtime_idle() This Runtime PM implementation performs two levels of power management. At the time of platform bus runtime suspend the clock to the device is stopped instantly. Later on if all devices within the power domain has their clocks stopped then the device driver ->runtime_suspend() callbacks are used to save hardware register state for each device. Device driver ->runtime_suspend() calls are scheduled from cpuidle context using platform_pm_runtime_suspend_idle(). When all devices have been fully suspended the processor is allowed to enter deep sleep from cpuidle. The runtime resume operation turns on clocks and also restores registers if needed. It is worth noting that the devices start in a suspended state and the device driver is responsible for calling runtime resume before accessing the actual hardware. In this particular platform bus implementation runtime resume is not allowed from interrupt context. Runtime suspend is however allowed from interrupt context as long as the synchronous functions are avoided. [ updated for v17 -- PFM. ] Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-22sh: unwinder: cacheline align slab cache objects.Paul Mundt
The CIE and FDE structs are big enough and accessed regularly enough in certain configurations to make cacheline alignment useful. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-22Merge branch 'sh/dwarf-unwinder'Paul Mundt
Conflicts: arch/sh/kernel/cpu/sh3/entry.S
2009-08-22sh64: dummy unwinder BUG wrappers.Paul Mundt
sh64 does not yet support GENERIC_BUG, but still wants unwinder support. Alias UNWINDER_BUG and UNWINDER_BUG_ON to their BUG counterparts until the conversion to GENERIC_BUG is completed. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-22sh: unwinder: Use a special bug flag for unwinder traps.Paul Mundt
This simplifies the unwinder trap handling, dropping the use of the special trapa vector and simply piggybacking on top of the BUG support. A new BUGFLAG_UNWINDER is added for flagging the unwinder fault, before continuing on with regular BUG dispatch. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-22Merge branch 'sh/dwarf-unwinder' of git://github.com/mfleming/linux-2.6 into ↵Paul Mundt
sh/dwarf-unwinder
2009-08-22sh: Export unwind_stack() to satisfy modular oprofile.Paul Mundt
If the oprofile code is built as a module, unwind_stack() as used by the oprofile backtrace code is not available, causing build breakage. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-21sh: Handle the DWARF op, DW_CFA_undefinedMatt Fleming
Allow a DWARF register to have an undefined value. When applied to the DWARF return address register this lets lets us label a function as having no direct caller, e.g. kernel_thread_helper(). Signed-off-by: Matt Fleming <matt@console-pimps.org>
2009-08-21sh: Fix bug calculating the end of the FDE instructionsMatt Fleming
The 'end' member of struct dwarf_fde denotes one byte past the end of the CFA instruction stream for an FDE. The value of 'end' was being calcualted incorrectly, it was being set too high. This resulted in dwarf_cfa_execute_insns() interpreting data past the end of valid instructions, thus causing all sorts of weird crashes. Signed-off-by: Matt Fleming <matt@console-pimps.org>
2009-08-21sh: Setup the frame pointer in handle_interruptMatt Fleming
When CONFIG_DWARF_UNWINDER is enabled setup r14 in handle_interrupt, so that we can figure out what function was running when we were interrupted. Signed-off-by: Matt Fleming <matt@console-pimps.org>
2009-08-21sh: unwinder: Introduce UNWINDER_BUG() and UNWINDER_BUG_ON()Matt Fleming
We can't assume that if we execute the unwinder code and the unwinder was already running that it has faulted. Clearly two kernel threads can invoke the unwinder at the same time and may be running simultaneously. The previous approach used BUG() and BUG_ON() in the unwinder code to detect whether the unwinder was incapable of unwinding the stack, and that the next available unwinder should be used instead. A better approach is to explicitly invoke a trap handler to switch unwinders when the current unwinder cannot continue. Signed-off-by: Matt Fleming <matt@console-pimps.org>
2009-08-21sh: unwinder: Set the flags for DW_CFA_val_offset ops as DWARF_VAL_OFFSETMatt Fleming
The handling of DW_CFA_val_offset ops was incorrectly using the DWARF_REG_OFFSET flag but the register's value cannot be calculated using the DWARF_REG_OFFSET method. Create a new flag to indicate that a different method must be used to calculate the register's value even though there is no implementation for DWARF_VAL_OFFSET yet; it's mainly just a place holder. Signed-off-by: Matt Fleming <matt@console-pimps.org>
2009-08-21sh: unwinder: Fix memory leak and create our own kmem cacheMatt Fleming
Plug a memory leak in dwarf_unwinder_dump() where we didn't free the memory that we had previously allocated for the DWARF frames and DWARF registers. Now is also a opportune time to implement our own mempool and kmem cache. It's a good idea to have a certain number of frame and register objects in reserve at all times, so that we are guaranteed to have our allocation satisfied even when memory is scarce. Since we have pools to allocate from we can implement the registers for each frame as a linked list as opposed to a sparsely populated array. Whilst it's true that the lookup time for a linked list is larger than for arrays, there's only usually a maximum of 8 registers per frame. So the overhead isn't that much of a concern. Signed-off-by: Matt Fleming <matt@console-pimps.org>
2009-08-21sh: Add initial support for SH7757 CPU subtypeYoshihiro Shimoda
Signed-off-by: Yoshihiro Shimoda <shimoda.yoshihiro@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-21sh: update kfr2r09 defconfigMagnus Damm
Update the kfr2r09 defconfig with support for LCDC and USB gadget. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-21sh: add kfr2r09 romimage defconfigMagnus Damm
Add romImage defconfig for the kfr2r09 board. This defconfig should be used to build the kernel based boot loader. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-21sh: jump to p1 during boot on kfr2r09Magnus Damm
Add a P1 jump to the the kfr2r09 romimage code. With this patch applied the initial zImage assembly code will run with instruction cache enabled. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-21sh: invalidate icache and tlbs during boot on kfr2r09Magnus Damm
Add instruction cache and TLB invalidation code for the the kfr2r09 romimage target. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-21sh: i2c compile fix for kfr2r09Magnus Damm
Fix the kfr2r09 board code so it compiles if CONFIG_I2C=n. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-20sh: enable rtc-ds1302 in snapgear_defconfig.Paul Mundt
This is the only board that presently supports this rtc, so make sure it is enabled by default to get some build coverage. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-20sh: DSP save/restore ordering and a0 sign extension fixups.Paul Mundt
As an excellent indicator of how much testing the DSP code gets, a couple of rather glaring bugs in the DSP save/restore paths were found: - In the DSP restore case a0 needs to be popped off before a0g, or the value of a0g is clobbered by the MSB of a0 in the case of sign extension. - Beyond that, the save and restore orders were out of sync, so this fixes that up as well. At the same time, we switch over to using movs.l for both the save and restore of the general DSP registers as opposed to using sts.l (which was initially put in place to work around a bug in ancient binutils versions which the kernel no longer supports). Reported-by: Chee Soon Yip <yip.cheesoon@renesas.com> Cc: Chu Lih Kwek <kwek.chulih@renesas.com>, Cc: General Lai <general.lai@renesas.com>, Cc: Robert Cozens <Robert.Cozens@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-20sh: Better description of SH-4 PTEA register update.Michael Trimarchi
Signed-off-by: Michael Trimarchi <trimarchimichael@yahoo.it> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-20sh: Fix up the CONFIG_FTRACE_SYSCALLS=n build.Paul Mundt
-tip can't be bothered keeping interfaces stable long enough for anyone to use them without having their builds broken without notification, so just ifdef around the problematic symbols until the new interfaces become available upstream. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-20Merge branch 'sh/r8a66597-udc'Paul Mundt
2009-08-20sh: add r8a66597 usb1 gadget to the se7724 boardMagnus Damm
Add USB gadget support for port CN26 on the Solution Engine 7724 board. The r8a66597-udc driver is hooked up as a platform device and some registers are configured to enable the USB in gadget mode. The hardware driving the USB port is the on-chip USB1 block in the sh7724 processor configured as USB gadget controller. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-20sh: add r8a66597 usb0 gadget to the kfr2r09 boardMagnus Damm
Add USB gadget support for port YC301 on the KFR2R09 board. The r8a66597-udc driver is hooked up as a platform device, clocks are enabled via I2C and some registers are configured to enable the USB in gadget mode. The hardware driving the USB port is the on-chip USB0 block in the sh7724 processor configured as USB gadget controller. This board is using external hardware to detect USB hotplug events and allows the processor to dynamically start and stop clocks. This well thought out hardware feature is unused at this point and plug and play is unfortunately unsupported. To properly support all hardware features the USB gadget stack may need some adjustment. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-20sh: Add mach-types entry for EcoVec board.Paul Mundt
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-20sh: Add EcoVec (SH7724) board supportKuninori Morimoto
This adds preliminary support for the EcoVec board. Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-19sh: Add SH7724 support to NR_ONCHIP_DMA_CHANNELSKuninori Morimoto
This patch also update help comment Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-19sh: USB0 resource area fix for ms7724seKuninori Morimoto
Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-18sh: Prevent heartbeat from scribbling over non-LED bits.Kuninori Morimoto
While most platforms implement LED banks in sets of 8/16/32, some use different configurations. This adds a LED mask to the heartbeat platform data to allow platforms to constrain the bitmap, which is otherwise derived from the register size. Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-18sh: clkfwk: Support additional IFC divisor on SH7724.Kuninori Morimoto
This patch updates the FRQCRA.IFC divisor values for SH7724. Despite not being initially documented, the / 3 mode is also support for the IFC division. Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-18sh: mach-kfr2409: add FLLFRQ value for PLL correction.Kuninori Morimoto
FLLFRQ setting is needed to use correct PLL clock for kfr2409. Signed-off-by: Kuninori Morimoto <morimoto.kuninori@renesas.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-18sh: Add a few missing irqflags tracing markers.Matt Fleming
save_regs contains an SR modification without an irqflags annotation, which resulted in a missing TRACE_IRQS_OFF in the interrupt exception path on SH-3/SH4. I've also moved the TRACE_IRQS_OFF/ON annotation when returning from the interrupt to just before we call __restore_all. This seems like the most logical place to put this because the annotation is for when we restore the SR register so we should delay the annotation until as last as possible. We were also missing a TRACE_IRQS_OFF in resume_kernel when CONFIG_PREEMPT is enabled. The end result is that this fixes up the lockdep engine debugging support with CONFIG_PREEMPT enabled on all SH-3/4 parts. Signed-off-by: Matt Fleming <matt@console-pimps.org> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-18sh: SuperH Mobile Software Standby support for cpuidleMagnus Damm
This patch adds "SuperH Mobile Standby Mode [SF]" to the list of cpuidle sleep modes. If the software latency requirements from cpuidle are met together with fulfilled hardware requirements then deep sleep modes can be entered. Tested on sh7722 and sh7724 with "Sleep Mode", "Sleep Mode + SF" and "Software Standby Mode + SF" together with a multimedia work load and flood ping without packet drop. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-18sh: rework SuperH Mobile sleep code exception handlingMagnus Damm
This patch updates the exception handling in the sleep code for SuperH Mobile. With the patch applied the sleep code always rewrites the VBR and resumes from the exception vector, re-initializes hardware and jumps straight to the original interrupt vector. Tested on sh7722 and sh7724 with "Sleep Mode", "Sleep Mode + SF" and "Software Standby Mode + SF" with CONFIG_SUSPEND. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-17sh: unwinder: Move initialization to early_initcall() and tidy up locking.Paul Mundt
This moves the initialization over to an early_initcall(). This fixes up some lockdep interaction issues. At the same time, kill off some superfluous locking in the init path. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-16sh: Add support for DWARF GNU extensionsMatt Fleming
Also, remove the "fix" to DW_CFA_def_cfa_register where we reset the frame's cfa_offset to 0. This action is incorrect when handling DW_CFA_def_cfa_register as the DWARF spec specifically states that the previous contents of cfa_offset should be used with the new register. The reason that I thought cfa_offset should be reset to 0 was because it was being assigned a bogus value prior to executing the DW_CFA_def_cfa_register op. It turns out that the bogus cfa_offset value came from interpreting .cfi_escape pseudo-ops (those used by the GNU extensions) as CFA_DW_def_cfa ops. Signed-off-by: Matt Fleming <matt@console-pimps.org>
2009-08-16sh: Try again at getting the initial return address for an unwindMatt Fleming
The previous hack for calculating the return address for the first frame we unwind (dwarf_unwinder_dump) didn't always work. The problem was that it assumed once it read the rule for calculating the return address, there would be no new rules for calculating it. This isn't true because the way in which the CFA is calculated can change as you progress through a function and the return address is figured out using the CFA. Therefore, the way to calculate the return address can change. So, instead of using some offset from the beginning of dwarf_unwind_stack which is just a flakey approach, and instead of executing instructions from the FDE until the return address is setup, we now figure out the pc in dwarf_unwind_stack() just before we call dwarf_cfa_execute_insns(). Signed-off-by: Matt Fleming <matt@console-pimps.org>
2009-08-16sh: Merge the _32/_64 variants of arch/sh/kernel/Makefile.Paul Mundt
This uses the BITS export as per x86 in order to allow the same Makefile to be used. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-15sh: Runtime PM pdev hwblk - kfr2r09 LCDCMagnus Damm
This patch simply adds LCDC hwblk_id data for the kfr2r09 board. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-15Merge branch 'master' into sh/hwblkPaul Mundt
2009-08-15Merge branch 'sh/stable-updates'Paul Mundt
2009-08-15sh: sh7724 ddr self-refresh changesMagnus Damm
This patch updates the SuperH Mobile sleep assembly code with support for DBSC memory controller found in the sh7724 processor. Without this fix the memory hooked up to the sh7724 processor will never enter self-refresh mode before suspending to ram. The effect of this is that the memory contents most likeley will be lost upon resume which may or may not be what you want. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-15sh: use in-soc KEYSC on se7724Magnus Damm
This patch updates the Solution Engine 7724 board code to use in-SoC KEYSC resources for the keyboard platform device. Using the in-SoC key scan controller fixes a crash-during-resume issue. Without this patch the KEYSC hardware block located in the board specific FPGA is used together with an external IRQ which is routed through the FPGA and handled by some board specific demux code. This board specific FPGA interrupt code does not implement desc->set_wake() so the enable_irq_wake() call in the sh_keysc driver will fail at suspend-to-ram time and the disable_irq_wake() will bomb out when resuming. Changing the platform data to use the in-SoC KEYSC hardware makes the se7724 board support code less special which is a good thing. Also, the board specific KEYSC pin setup code selects in-SoC pin functions already which makes the current FPGA platform device data look like a typo. Signed-off-by: Magnus Damm <damm@igel.co.jp> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2009-08-15sh: Set the cfa_offset to 0 if we see a DW_CFA_def_cfa_register opMatt Fleming
The way that the CFA is calculated can change as we progress through a function. If we see a DW_CFA_def_cfa_register op we need to reset the frame's cfa_offset value which may have been previously setup. Signed-off-by: Matt Fleming <matt@console-pimps.org> Signed-off-by: Paul Mundt <lethal@linux-sh.org>