Commit Graph

133 Commits

Author SHA1 Message Date
Magnus Damm
ad2a8e7ea4 sh: pfc: Add GPIO IRQ support
Add GPIO IRQ support to the shared PFC code in drivers/sh/pfc.c

The enums pointed out by a certain GPIO will be matched against
a table for IRQ to enum mappings.

Only the shared PFC code is updated by this patch. SoC specific
changes are also needed to allow platforms to make use of this
feature.

Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-10-28 15:03:52 +09:00
Magnus Damm
c63bcc6ff1 sh: pfc: get_config_reg() shift clean up
Clean up the f_width shift code in get_config_reg().

Reported-by: Ryusuke Sakato <ryusuke.sakato.bx@renesas.com>
Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-10-28 14:39:26 +09:00
Magnus Damm
52e3124f24 sh: intc: Add IRQ trigger bit field check
R-Mobile SoCs such as sh73a0 include PINT blocks in INTC
that come with 2-bit IRQ trigger support. Add code to make
sure the bit width is checked so 4-bit only modes like for
instance EDGE_BOTH will fail for PINT.

Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-10-28 14:39:24 +09:00
Paul Mundt
e80ca144ea Merge branch 'common/core' into sh-latest 2011-08-08 16:33:54 +09:00
Linus Torvalds
e10b87d2b5 Merge branch 'sh-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-3.x
* 'sh-latest' of git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-3.x: (39 commits)
  SH: static should be at beginning of declaration
  sh: move CLKDEV_xxx_ID macro to sh_clk.h
  sh: clock-shx3: add CLKDEV_ICK_ID for cleanup
  sh: clock-sh7786: add CLKDEV_ICK_ID for cleanup
  sh: clock-sh7785: add CLKDEV_ICK_ID for cleanup
  sh: clock-sh7757: add CLKDEV_ICK_ID for cleanup
  sh: clock-sh7366: add CLKDEV_ICK_ID for cleanup
  sh: clock-sh7343: add CLKDEV_ICK_ID for cleanup
  sh: clock-sh7722: add CLKDEV_ICK_ID for cleanup
  sh: clock-sh7724: add CLKDEV_ICK_ID for cleanup
  sh: clock-sh7366: modify I2C clock settings
  sh: clock-sh7343: modify I2C clock settings
  sh: clock-sh7723: modify I2C clock settings
  sh: clock-sh7722: modify I2C clock settings
  sh: clock-sh7724: modify I2C clock settings
  serial: sh-sci: Fix up pretty name printing for port IRQs.
  serial: sh-sci: Kill off per-port enable/disable callbacks.
  serial: sh-sci: Add missing module description/author bits.
  serial: sh-sci: Regtype probing doesn't need to be fatal.
  sh: Tidy up pre-clkdev clk_get() error handling.
  ...
2011-08-01 06:10:16 -10:00
Magnus Damm
9a14a92c93 sh: intc: enable both edges GPIO interrupts on sh7372
IRQ-capable GPIOs on sh7372 can be configured to produce interrupts on
both edges.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Acked-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-07-21 16:53:24 +09:00
Al Viro
12520c438f switch assorted clock drivers to debugfs_remove_recursive()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2011-07-20 20:47:51 -04:00
Paul Mundt
225ca45c3c sh: clkfwk: Convert to IS_ERR_OR_NULL.
Trivial cleanup.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-06-24 17:35:40 +09:00
Magnus Damm
794d78fea5 drivers: sh: late disabling of clocks V2
This V2 patch changes the clock disabling behavior during boot.
Two different changes are made:

1) Delay disabling of clocks until late in the boot process.
   This fixes an existing issue where in-use clocks without
   software reference are disabled by mistake during boot.
   One example of this is the handling of the Mackerel serial
   console output that shares clock with the I2C controller.

2) Write out the "disabled" state to the hardware for clocks
   that not have been used by the kernel. In other words,
   make sure so far unused clocks actually get turned off.

Signed-off-by: Magnus Damm <damm@opensource.se>
Acked-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-06-24 16:27:07 +09:00
Magnus Damm
583af252ab drivers: sh: resume enabled clocks fix
Extend the SH / SH-Mobile ARM clock framework to only
resume clocks that have been enabled.

Without this fix divide-by-zero is triggering on sh7372
FSIDIV during system wide resume of Suspend-to-RAM.

Signed-off-by: Magnus Damm <damm@opensource.se>
Reviewed-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-06-14 15:15:25 +09:00
Paul Mundt
972b1943be Merge branch 'sh/genirq-threading' into sh-latest 2011-05-23 11:36:14 +09:00
Paul Mundt
442f56d917 sh: intc: Set virtual IRQs as nothread.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-04-27 14:35:44 +09:00
Kuninori Morimoto
52c10ad22b sh: clkfwk: fixup clk_rate_table_build parameter in div6 clock
div6 clock should not use arch_flags for clk_rate_table_build,
because SH_CLK_DIV6_EXT doesn't care .arch_flags.
clk->freq_table[] will be all CPUFREQ_ENTRY_INVALID without this patch.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Cc: stable@kernel.org
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-04-18 18:33:31 +09:00
Thomas Gleixner
286b9bfe8e sh: Fix irq cleanup fallout
I missed that coccinelle does not fix up header files by default.

Reported-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Paul Mundt <lethal@linux-sh.org>
Cc: <lethal@linux-sh.org>
2011-03-30 00:15:49 +02:00
Thomas Gleixner
fcb8918fd2 sh: Convert to new function names
Scripted with coccinelle.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2011-03-29 14:48:13 +02:00
Thomas Gleixner
a821b2793e sh: Use the proper accessor functions
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2011-03-29 14:48:13 +02:00
Rafael J. Wysocki
a696b89c58 sh: Use struct syscore_ops instead of sysdevs
Convert the SuperH clocks framework and shared interrupt handling
code to using struct syscore_ops instead of a sysdev classes and
sysdevs for power managment.

This reduces the code size significantly and simplifies it.  The
optimizations causing things not to be restored after creating a
hibernation image are removed, but they might lead to undesirable
effects during resume from hibernation (e.g. the clocks would be left
as the boot kernel set them, which might be not the same way as the
hibernated kernel had seen them before the hibernation).

This also is necessary for removing sysdevs from the kernel entirely
in the future.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-03-23 18:57:37 +09:00
Magnus Damm
8a5a778665 sh: update INTC to clear IRQ sense valid flag
Clear the valid flag is in the INTC code.
Without this fix bit 7 of the sense register
is mistakenly set.

Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2011-01-19 19:02:35 +09:00
Alexey Dobriyan
57cc7215b7 headers: kobject.h redux
Remove kobject.h from files which don't need it, notably,
sched.h and fs.h.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2011-01-10 08:51:44 -08:00
Paul Mundt
30f2ba3801 sh: intc: Initialize radix tree gfp mask explicitly.
Presently the root node is initialized by way of kzalloc on the parent
data structure, which by chance happens to do the bulk of what an
explicit initialization does with GFP_NOWAIT semantics. This however is
more by luck than by design, and as we ideally want to permit radix node
allocations access to the emergency pools anyways, add in the proper
initializer with the desired mask.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-12-24 19:38:37 +09:00
Paul Mundt
dfcd6e4389 Merge branch 'common/clkfwk' into sh-fixes-for-linus 2010-11-19 16:43:23 +09:00
Paul Mundt
f278ea849e sh: clkfwk: Build fix for non-legacy CPG changes.
The disabling of the init op for non-legacy clocks neglected to do the
same in the core clock framework, resulting in a build failure. Fix it
up.

Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-19 16:40:35 +09:00
Paul Mundt
849653372d Merge branch 'common/clkfwk' into sh-fixes-for-linus 2010-11-16 10:11:20 +09:00
Paul Mundt
35a96c739f sh: clkfwk: Kill off now unused algo_id in set_rate op.
Now that clk_set_rate_ex() is gone, there is also no way to get at rate
setting algo id, which is now also completely unused. Kill it off before
new clock ops start using it.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-15 18:25:17 +09:00
Paul Mundt
9a1683d1dd sh: clkfwk: Kill off unused clk_set_rate_ex().
With the refactoring of the SH7722 clock framework some time ago this
abstraction has become unecessary. Kill it off before anyone else gets
the bright idea to start using it.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-15 18:25:12 +09:00
Paul Mundt
6318af900c sh: intc: Fix up build failure introduced by radix tree changes.
The radix tree retry logic got a bit of an overhaul and subsequently
broke the virtual IRQ subgroup build. Simply switch over to
radix_tree_deref_retry() as per the filemap changes, which the virq
lookup logic was modelled after in the first place.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-15 14:30:30 +09:00
Paul Mundt
ed10b490ea sh: clkfwk: fix up compiler warnings.
CC      drivers/sh/clk/core.o
drivers/sh/clk/core.c: In function 'clk_round_parent':
drivers/sh/clk/core.c:574: warning: format '%lu' expects type 'long unsigned int', but argument 2 has type 'unsigned int'
drivers/sh/clk/core.c:594: warning: format '%lu' expects type 'long unsigned int', but argument 2 has type 'unsigned int'

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-10 18:02:25 +09:00
Paul Mundt
21e1426628 Merge branches 'sh/pio-death', 'sh/nommu', 'sh/clkfwk', 'sh/core' and 'sh/intc-extension' into sh-fixes-for-linus 2010-11-08 09:42:43 +09:00
Paul Mundt
a766b29790 sh: clkfwk: Fix up checkpatch warnings.
The clk_round_parent() change introduced various checkpatch warnings,
tidy them up.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-08 09:40:23 +09:00
Guennadi Liakhovetski
6af26c6c99 sh: add clk_round_parent() to optimize parent clock rate
Sometimes it is possible and reasonable to adjust the parent clock rate to
improve precision of the child clock, e.g., if the child clock has no siblings.
clk_round_parent() is a new addition to the SH clock-framework API, that
implements such an optimization for child clocks with divisors, taking all
integer values in a range.

Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-08 09:35:26 +09:00
Paul Mundt
20f95e0b22 sh: intc: Update for single IRQ reservation helper.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-01 16:10:48 -04:00
Paul Mundt
5aefa34fad sh: clkfwk: Fix up rate rounding error handling.
According to the linux/clk.h definition we should be handing back an
errno value or a valid rate. This fixes up the case where 0 can be
returned for invalid frequencies or cases where rounding has no
selectable candidate.

Reported-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-11-01 15:30:31 -04:00
Paul Mundt
63111a3a70 sh: intc: switch irq_desc iteration to new active IRQ iterator.
There's no need to iterative over every single irq_desc when we can
already work out which IRQs have a backing descriptor via the shiny new
for_each_active_irq(). Switch to that instead.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-28 11:36:31 +09:00
Paul Mundt
26599a94dc sh: intc: irq_data conversion.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-27 15:42:10 +09:00
Paul Mundt
c053784454 sh: maple: ctrl_in/outX to __raw_read/writeX conversion.
The ctrl_xxx routines are deprecated, switch over to the __raw_xxx
versions.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-27 14:34:41 +09:00
Paul Mundt
38ab13441c sh: Switch dynamic IRQ creation to generic irq allocator.
Now that the genirq code provides an IRQ bitmap of its own and the
necessary API to manipulate it, there's no need to keep our own version
around anymore.

In the process we kill off some unused IRQ reservation code, with future
users now having to tie in to the genirq API as normal.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-26 16:05:08 +09:00
Thomas Gleixner
c4318baf00 sh: Sanitize sparse irq
Switch over to the new allocator functions.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-26 15:01:52 +09:00
Paul Mundt
de9186c257 sh: clkfwk: Shuffle around to match the intc split up.
This shuffles the clock framework code around to a drivers/sh/clk subdir,
to follow the intc split up. This will make it easier to subsequently
break things out as well as plug in different helpers for non-CPG users.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-18 21:32:58 +09:00
Kuninori Morimoto
c2590f4a8d sh: clkfwk: modify for_each_frequency end condition
The end condition of for_each_frequency should care about
both clk_rate_table_round and clk_rate_div_range_round,
and using "correct max size" is a natural idea in later function.
To avoid data over flow, this patch didn't modify
clk_rate_div_range_round side as .max = div_max + 1.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-18 20:33:10 +09:00
Paul Mundt
e5690e0dcf sh: clkfwk: Fix fault in frequency iterator.
When updating the iterator macro an old argument assignment was used on
the initial assignment causing a fault on the table rounding. Fix it up.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-16 00:51:05 +09:00
Paul Mundt
8e122db61c sh: clkfwk: Add a helper for rate rounding by divisor ranges.
This adds a new clk_rate_div_range_round() for implementing rate rounding
by divisor ranges. This can be used trivially by clocks that support
arbitrary ranged divisors without the need for rate table construction.

This should only be used by clocks that both have large divisor ranges in
addition to clocks that will never be arbitrarily scaled, as the lack of
a backing frequency table will prevent cpufreq from being able to do much
of anything with them.

Primarily intended for use as a ->recalc helper.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-15 18:33:24 +09:00
Paul Mundt
f586903d27 sh: clkfwk: Abstract rate rounding helper.
Presently the only assisted rate rounding is frequency table backed, but
there are cases where it's impractical to use a frequency table for
certain clocks (such as the FSIDIV case, which supports 65535 divisors),
and we wish to reuse the same rate rounding algorithm.

This breaks out the core of the rate rounding logic in to its own helper
routine and shuffles the frequency table logic around, switching to using
an iterator for the generic helper routine.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-15 18:17:35 +09:00
Paul Mundt
28085bc5de sh: clkfwk: support clock remapping.
This implements support for ioremapping of register windows that
encapsulate clock control registers used by a struct clk, with
transparent sibling inheritance.

Root clocks at the top of a given topology often encapsulate the entire
register space of all of their sibling clocks, so this mapping can be
done once and handed down. A given clock enable/disable case maps out to
a single bit in a shared register, so this prevents creating multiple
overlapping mappings.

The mapping case breaks down in to a couple of different situations:

	- Sibling clocks without a specific mapping.
	- Root clocks without a specific mapping.
	- Any of sibling/root clocks with a specific mapping.

Sibling clocks with no specified mapping will grovel up the clock chain
and install the root clock mapping unconditionally at registration time.

Root clocks without their own mappings have a dummy BSS-initialized
mapping inserted that is handed down the chain just like any other
mapping. This permits all of the sibling clock ops to read/write using
the mapping offsets without any special configuration, enabling them to
not care whether access ultimately goes through translatable or
untranslatable memory.

Any clock with its own mapping will have the window initialized at
registration time and be ready for use by its clock ops. Failure to
establish the mapping will prevent registration, so no additional sanity
checks are needed. Sibling clocks that double as parents for the moment
will not propagate their mapping down, but this is easily tunable if the
need arises.

All clock mappings are kref refcounted, with each instance of mapping
inheritance incrementing the refcount.

Tested-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-15 16:46:37 +09:00
Paul Mundt
550a1ef18a sh: use pr_fmt for clock framework, too.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-13 19:24:55 +09:00
Magnus Damm
69395396a0 sh: remove name and id from struct clk
Remove "name" and "id" from drivers/sh/ struct clk.

The struct clk members "name" and "id" are not used
now when matching is done through clkdev.

Signed-off-by: Magnus Damm <damm@opensource.se>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-13 19:23:05 +09:00
Paul Mundt
6966fed9d8 sh: intc: Fix build with IRQ balancing disabled.
The balancing stubs obviously need to be static inline..

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-06 16:44:10 +09:00
Paul Mundt
33fc1a211c sh: intc: Add missing files.
The Kconfig and Makefile were overlooked, add those in now to improve
odds of building.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-06 15:38:16 +09:00
Paul Mundt
2be6bb0c79 sh: intc: Split up the INTC code.
This splits up the sh intc core in to something more vaguely resembling
a subsystem. Most of the functionality was alread fairly well
compartmentalized, and there were only a handful of interdependencies
that needed to be resolved in the process.

This also serves as future-proofing for the genirq and sparseirq rework,
which will make some of the split out functionality wholly generic,
allowing things to be killed off in place with minimal migration pain.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-05 22:10:30 +09:00
Paul Mundt
d74310d3b1 sh: intc: Handle early lookups of subgroup IRQs.
If lookups happen while the radix node still points to a subgroup
mapping, an IRQ hasn't yet been made available for the specified id, so
error out accordingly. Once the slot is replaced with an IRQ mapping and
the tag is discarded, lookup can commence as normal.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-05 18:13:23 +09:00
Paul Mundt
c1e30ad98f sh: intc: Support virtual mappings for IRQ subgroups.
Many interrupts that share a single mask source but are on different
hardware vectors will have an associated register tied to an INTEVT that
denotes the precise cause for the interrupt exception being triggered.

This introduces the concept of IRQ subgroups in the intc core, where
a virtual IRQ map is constructed for each of the pre-defined cause bits,
and a higher level chained handler takes control of the parent INTEVT.
This enables CPUs with heavily muxed IRQ vectors (especially across
disjoint blocks) to break things out in to a series of managed chained
handlers while being able to dynamically lookup and adopt the IRQs
created for them.

This is largely an opt-in interface, requiring CPUs to manually submit
IRQs for subgroup splitting, in addition to providing identifiers in
their enum maps that can be used for lazy lookup via the radix tree.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
2010-10-05 04:47:03 +09:00