* [PATCHv2] Input: omap4-keypad: Add pinctrl support
From: Linus Walleij @ 2012-11-01 8:54 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <87obji8kta.fsf@deeprootsystems.com>
On Wed, Oct 31, 2012 at 9:10 PM, Kevin Hilman
<khilman@deeprootsystems.com>wrote:
> Linus Walleij <linus.walleij@linaro.org> writes:
>
> > piece of hardware, this would be the right thing to do,
> > and I think the in-kernel examples are all "simple",
> > e.g. arch/arm/mach-omap2/powerdomain* is all about
> > power domains and nothing else,
>
> FYI... that code isn't the same as PM domain.
This sort of points to a core problem here. Our terminologies are
ambiguous that we cannot understand each others code. As long
as <linux/pm_domain.h> begins:
/*
* pm_domain.h - Definitions and headers related to device power domains.
*
But arguably that should just be patched (I think there are a few
remnants in the code still implying that these things are only about
power).
> That code is for the
> *hardware* powerdomains, not the software concept of "PM domain." In
> OMAP, PM domain is implmented at the omap_device level. And omap_device
> is the abstraction of an IP block that knows about all the PM related
> register settings, clocks, HW powerdomain, voltage domain, PM related
> pin-muxing etc. etc. All of these things are abstracted in an
> omap_device, so that the PM domain implementation for OMAP looks rather
> simple (c.f. omap_device_pm_domain in arch/arm/plat-omap/omap_device.c.)
>
OK following now...
> > I think the lesser of two evils is the distributed approach,
>
The pinctrl examples I've seen mentioned so far are all PM related
> (sleep, idle, wakeup, etc.) so to me I think they still belong in
> PM domains (and that's how we handle the PM related pins in OMAP.)
>
Well, the pinctrl grabbers in these drivers are using these states also
for platforms that do not even select CONFIG_PM. For example
mach-nomadik is quite happy that the PL011 driver is thusly
muxing in its pins. And would require refactoring to use PM
domains.
So basically this requirement comes down to:
- When dealing with a SoC IP block driver
- That need to multiplex pins
- Then your SoC must select CONFIG_PM and
CONFIG_PM_RUNTIME and
CONFIG_PM_GENERIC_DOMAINS and implement
proper domain handling hooks.
Is this correct? And for Mark, Dmitry, does this correspond to
your view?
It's actually something that needs to be acknowledged by the
ARM SoC maintainers, because they will be the ones telling
all subarch maintainers to go implement full PM handling
with these three frameworks whenever an SoC driver want
to handle pins.
Bascially all subsystem maintainers dealing with embedded
SoCs need to be aligned on this as well...
And IIUC not only pins but also silicon block clocks?
I can surely fix these for "my" systems, but it really needs
to be enforced widely or it will be a mess.
> > I worry that the per-SoC power domain implementation
> > which will live in arch/arm/mach-* as of today will become
> > the new board file problem, overburdening the arch/* tree.
> > Maybe I'm mistaken as to the size of these things,
> > but just doing ls arch/arm/mach-omap2/powerdomain*
> > makes me start worrying.
>
> Yes, I agree that this means more code/data in arch/arm/mach-*, but
> IMO, that's really where it belongs. It really is SoC integration
> details, and driver should really not know about it.
OK we need feedback from ARM SoC on this.
Yours,
Linus Walleij
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20121101/74f1295c/attachment-0001.html>
^ permalink raw reply
* Fwd: [PATCHv2] Input: omap4-keypad: Add pinctrl support
From: Linus Walleij @ 2012-11-01 8:56 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CACRpkdbCk9+HSBPtfT-1dO8paSRYJ5VXX_0SxiyxgrObnJEvmQ@mail.gmail.com>
On Wed, Oct 31, 2012 at 9:10 PM, Kevin Hilman
<khilman@deeprootsystems.com> wrote:
> Linus Walleij <linus.walleij@linaro.org> writes:
>
> > piece of hardware, this would be the right thing to do,
> > and I think the in-kernel examples are all "simple",
> > e.g. arch/arm/mach-omap2/powerdomain* is all about
> > power domains and nothing else,
>
> FYI... that code isn't the same as PM domain.
This sort of points to a core problem here. Our terminologies are
ambiguous that we cannot understand each others code. As long
as <linux/pm_domain.h> begins:
/*
* pm_domain.h - Definitions and headers related to device power domains.
*
But arguably that should just be patched (I think there are a few
remnants in the code still implying that these things are only about
power).
>
> That code is for the
> *hardware* powerdomains, not the software concept of "PM domain." In
> OMAP, PM domain is implmented at the omap_device level. And omap_device
> is the abstraction of an IP block that knows about all the PM related
> register settings, clocks, HW powerdomain, voltage domain, PM related
> pin-muxing etc. etc. All of these things are abstracted in an
> omap_device, so that the PM domain implementation for OMAP looks rather
> simple (c.f. omap_device_pm_domain in arch/arm/plat-omap/omap_device.c.)
OK following now...
>
> > I think the lesser of two evils is the distributed approach,
>
> The pinctrl examples I've seen mentioned so far are all PM related
>
> (sleep, idle, wakeup, etc.) so to me I think they still belong in
> PM domains (and that's how we handle the PM related pins in OMAP.)
Well, the pinctrl grabbers in these drivers are using these states also
for platforms that do not even select CONFIG_PM. For example
mach-nomadik is quite happy that the PL011 driver is thusly
muxing in its pins. And would require refactoring to use PM
domains.
So basically this requirement comes down to:
- When dealing with a SoC IP block driver
- That need to multiplex pins
- Then your SoC must select CONFIG_PM and
CONFIG_PM_RUNTIME and
CONFIG_PM_GENERIC_DOMAINS and implement
proper domain handling hooks.
Is this correct? And for Mark, Dmitry, does this correspond to
your view?
It's actually something that needs to be acknowledged by the
ARM SoC maintainers, because they will be the ones telling
all subarch maintainers to go implement full PM handling
with these three frameworks whenever an SoC driver want
to handle pins.
Bascially all subsystem maintainers dealing with embedded
SoCs need to be aligned on this as well...
And IIUC not only pins but also silicon block clocks?
I can surely fix these for "my" systems, but it really needs
to be enforced widely or it will be a mess.
>
> > I worry that the per-SoC power domain implementation
> > which will live in arch/arm/mach-* as of today will become
> > the new board file problem, overburdening the arch/* tree.
> > Maybe I'm mistaken as to the size of these things,
> > but just doing ls arch/arm/mach-omap2/powerdomain*
> > makes me start worrying.
>
> Yes, I agree that this means more code/data in arch/arm/mach-*, but
> IMO, that's really where it belongs. It really is SoC integration
> details, and driver should really not know about it.
OK we need feedback from ARM SoC on this.
Yours,
Linus Walleij
^ permalink raw reply
* [PATCH] ARM: plat-versatile: move FPGA irq driver to drivers/irqchip
From: Linus Walleij @ 2012-11-01 9:00 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <5091CA18.7020905@gmail.com>
On Thu, Nov 1, 2012 at 2:02 AM, Rob Herring <robherring2@gmail.com> wrote:
> On 10/31/2012 04:31 PM, Linus Walleij wrote:
>> rename arch/arm/plat-versatile/include/plat/fpga-irq.h => include/linux/platform_data/irq-versatile-fpga.h (100%)
>
> I think include/linux/irqchip/ is the right place.
OK I'll fix.
> Ideally we would not
> need the header at all. You can remove some of the function declarations
> if you base this on Thomas Petazzoni's series to have a common init
> function for DT and also move the fpga_handle_irq init into the
> fpga_irq_init function.
Sounds like a separate patch but surely we can do this. Is Thomas'
stuff on a branch somewhere that I can then rebase upon to get
it upstream? I was planning to get this series as such to the
ARM SoC maintainers soon-ish.
Yours,
Linus Walleij
^ permalink raw reply
* [PATCH] ARM: plat-versatile: move FPGA irq driver to drivers/irqchip
From: Thomas Petazzoni @ 2012-11-01 9:12 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CACRpkda06BbFOiX1WSqNLM-R5Es-Nd6btUNq2mMDuH7s3jA2cw@mail.gmail.com>
Linus,
On Thu, 1 Nov 2012 10:00:19 +0100, Linus Walleij wrote:
> Sounds like a separate patch but surely we can do this. Is Thomas'
> stuff on a branch somewhere that I can then rebase upon to get
> it upstream? I was planning to get this series as such to the
> ARM SoC maintainers soon-ish.
Not at the moment. But do you want me to put that in a branch, and
agglomerate all the related patches (posted by Rob for GIC/VIC and by
you for the FPGA IRQ controller), and then later send a pull request to
Arnd with those changes?
Also, again, the whole point of the initial infrastructure in
drivers/irqchip/ was to avoid adding per-driver header files in
include/linux/irqchip/, so there should at least be a long term plan on
how to remove those headers file, either by moving more platforms to
DT, or my extending the irqchip infrastructure to cover more features.
Best regards,
Thomas
--
Thomas Petazzoni, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
^ permalink raw reply
* [PATCH v2 2/5] ARM: gic: remove direct use of gic_raise_softirq
From: Santosh Shilimkar @ 2012-11-01 9:24 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351695517-5636-3-git-send-email-robherring2@gmail.com>
On Wednesday 31 October 2012 08:28 PM, Rob Herring wrote:
> From: Rob Herring <rob.herring@calxeda.com>
>
> In preparation of moving gic code to drivers/irqchip, remove the direct
> platform dependencies on gic_raise_softirq. Move the setup of
> smp_cross_call into the gic code. Now that all platforms are using IPI#0
> for core wakeup, create a common wakeup ipi function.
>
> Signed-off-by: Rob Herring <rob.herring@calxeda.com>
> Cc: Russell King <linux@arm.linux.org.uk>
> Cc: Kukjin Kim <kgene.kim@samsung.com>
> Cc: Rob Herring <rob.herring@calxeda.com>
> Cc: Sascha Hauer <kernel@pengutronix.de>
> Cc: David Brown <davidb@codeaurora.org>
> Cc: Daniel Walker <dwalker@fifo99.com>
> Cc: Bryan Huntsman <bryanh@codeaurora.org>
> Cc: Tony Lindgren <tony@atomide.com>
> Cc: Paul Mundt <lethal@linux-sh.org>
> Cc: Magnus Damm <magnus.damm@gmail.com>
> Cc: Viresh Kumar <viresh.linux@gmail.com>
> Cc: Shiraz Hashim <shiraz.hashim@st.com>
> Cc: Stephen Warren <swarren@wwwdotorg.org>
> Cc: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> ---
[...]
> arch/arm/mach-omap2/omap-smp.c | 4 +---
For OMAP specific change..
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 01/15] ARM: clps711x: Load serial driver from boards
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
Currently serial driver for CLPS711X is autoloaded if it compiled in kernel.
Since we may have multiple platforms into single kernel we should avoid
this. This patch removes this trick and adds registration of serial driver
into board support code.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/autcpu12.c | 6 +++---
arch/arm/mach-clps711x/cdb89712.c | 9 ++++++++-
arch/arm/mach-clps711x/clep7312.c | 9 +++++++--
arch/arm/mach-clps711x/edb7211.c | 11 +++++++++--
arch/arm/mach-clps711x/fortunet.c | 9 ++++++++-
arch/arm/mach-clps711x/p720t.c | 11 +++++++++--
drivers/tty/serial/clps711x.c | 16 ----------------
7 files changed, 44 insertions(+), 27 deletions(-)
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c
index 214547b..f4f122d 100644
--- a/arch/arm/mach-clps711x/autcpu12.c
+++ b/arch/arm/mach-clps711x/autcpu12.c
@@ -68,16 +68,16 @@ static struct platform_device autcpu12_nvram_pdev __initdata = {
static void __init autcpu12_init(void)
{
+ platform_device_register_simple("uart-clps711x", 0, NULL, 0);
platform_device_register(&autcpu12_nvram_pdev);
}
MACHINE_START(AUTCPU12, "autronix autcpu12")
/* Maintainer: Thomas Gleixner */
.atag_offset = 0x20000,
- .init_machine = autcpu12_init,
.map_io = autcpu12_map_io,
+ .init_machine = autcpu12_init,
.init_irq = clps711x_init_irq,
- .timer = &clps711x_timer,
.restart = clps711x_restart,
+ .timer = &clps711x_timer,
MACHINE_END
-
diff --git a/arch/arm/mach-clps711x/cdb89712.c b/arch/arm/mach-clps711x/cdb89712.c
index d90d25c..5a03888 100644
--- a/arch/arm/mach-clps711x/cdb89712.c
+++ b/arch/arm/mach-clps711x/cdb89712.c
@@ -23,6 +23,7 @@
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/io.h>
+#include <linux/platform_device.h>
#include <mach/hardware.h>
#include <asm/pgtable.h>
@@ -53,11 +54,17 @@ static void __init cdb89712_map_io(void)
iotable_init(cdb89712_io_desc, ARRAY_SIZE(cdb89712_io_desc));
}
+static void __init cdb89712_init(void)
+{
+ platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+}
+
MACHINE_START(CDB89712, "Cirrus-CDB89712")
/* Maintainer: Ray Lehtiniemi */
.atag_offset = 0x100,
.map_io = cdb89712_map_io,
+ .init_machine = cdb89712_init,
.init_irq = clps711x_init_irq,
- .timer = &clps711x_timer,
.restart = clps711x_restart,
+ .timer = &clps711x_timer,
MACHINE_END
diff --git a/arch/arm/mach-clps711x/clep7312.c b/arch/arm/mach-clps711x/clep7312.c
index dbc7842..0301b2c 100644
--- a/arch/arm/mach-clps711x/clep7312.c
+++ b/arch/arm/mach-clps711x/clep7312.c
@@ -18,6 +18,7 @@
#include <linux/init.h>
#include <linux/types.h>
#include <linux/string.h>
+#include <linux/platform_device.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
@@ -33,14 +34,18 @@ fixup_clep7312(struct tag *tags, char **cmdline, struct meminfo *mi)
mi->bank[0].size = 0x01000000;
}
+static void __init clep7312_init(void)
+{
+ platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+}
MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312")
/* Maintainer: Nobody */
.atag_offset = 0x0100,
.fixup = fixup_clep7312,
.map_io = clps711x_map_io,
+ .init_machine = clep7312_init,
.init_irq = clps711x_init_irq,
- .timer = &clps711x_timer,
.restart = clps711x_restart,
+ .timer = &clps711x_timer,
MACHINE_END
-
diff --git a/arch/arm/mach-clps711x/edb7211.c b/arch/arm/mach-clps711x/edb7211.c
index 88f4690..119610b 100644
--- a/arch/arm/mach-clps711x/edb7211.c
+++ b/arch/arm/mach-clps711x/edb7211.c
@@ -10,6 +10,7 @@
#include <linux/init.h>
#include <linux/memblock.h>
#include <linux/types.h>
+#include <linux/platform_device.h>
#include <asm/setup.h>
#include <asm/mach/map.h>
@@ -76,13 +77,19 @@ fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi)
mi->nr_banks = 2;
}
+static void __init edb7211_init(void)
+{
+ platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+}
+
MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
/* Maintainer: Jon McClintock */
.atag_offset = VIDEORAM_SIZE + 0x100,
.fixup = fixup_edb7211,
- .map_io = edb7211_map_io,
.reserve = edb7211_reserve,
+ .map_io = edb7211_map_io,
+ .init_machine = edb7211_init,
.init_irq = clps711x_init_irq,
- .timer = &clps711x_timer,
.restart = clps711x_restart,
+ .timer = &clps711x_timer,
MACHINE_END
diff --git a/arch/arm/mach-clps711x/fortunet.c b/arch/arm/mach-clps711x/fortunet.c
index 3a3f0b7..a7f8305 100644
--- a/arch/arm/mach-clps711x/fortunet.c
+++ b/arch/arm/mach-clps711x/fortunet.c
@@ -22,6 +22,7 @@
#include <linux/types.h>
#include <linux/init.h>
#include <linux/initrd.h>
+#include <linux/platform_device.h>
#include <mach/hardware.h>
#include <asm/setup.h>
@@ -72,11 +73,17 @@ fortunet_fixup(struct tag *tags, char **cmdline, struct meminfo *mi)
*mi = memmap;
}
+static void __init fortunet_init(void)
+{
+ platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+}
+
MACHINE_START(FORTUNET, "ARM-FortuNet")
/* Maintainer: FortuNet Inc. */
.fixup = fortunet_fixup,
.map_io = clps711x_map_io,
+ .init_machine = fortunet_init,
.init_irq = clps711x_init_irq,
- .timer = &clps711x_timer,
.restart = clps711x_restart,
+ .timer = &clps711x_timer,
MACHINE_END
diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c
index dd89950..96d54d4 100644
--- a/arch/arm/mach-clps711x/p720t.c
+++ b/arch/arm/mach-clps711x/p720t.c
@@ -25,6 +25,7 @@
#include <linux/io.h>
#include <linux/slab.h>
#include <linux/leds.h>
+#include <linux/platform_device.h>
#include <mach/hardware.h>
#include <asm/pgtable.h>
@@ -161,13 +162,19 @@ static int __init p720t_leds_init(void)
fs_initcall(p720t_leds_init);
#endif
+static void __init p720t_init(void)
+{
+ platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+}
+
MACHINE_START(P720T, "ARM-Prospector720T")
/* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */
.atag_offset = 0x100,
.fixup = fixup_p720t,
- .init_early = p720t_init_early,
.map_io = p720t_map_io,
+ .init_early = p720t_init_early,
+ .init_machine = p720t_init,
.init_irq = clps711x_init_irq,
- .timer = &clps711x_timer,
.restart = clps711x_restart,
+ .timer = &clps711x_timer,
MACHINE_END
diff --git a/drivers/tty/serial/clps711x.c b/drivers/tty/serial/clps711x.c
index a0a6db5..06f0e91 100644
--- a/drivers/tty/serial/clps711x.c
+++ b/drivers/tty/serial/clps711x.c
@@ -516,22 +516,6 @@ static struct platform_driver clps711x_uart_driver = {
};
module_platform_driver(clps711x_uart_driver);
-static struct platform_device clps711x_uart_device = {
- .name = UART_CLPS711X_NAME,
-};
-
-static int __init uart_clps711x_init(void)
-{
- return platform_device_register(&clps711x_uart_device);
-}
-module_init(uart_clps711x_init);
-
-static void __exit uart_clps711x_exit(void)
-{
- platform_device_unregister(&clps711x_uart_device);
-}
-module_exit(uart_clps711x_exit);
-
MODULE_AUTHOR("Deep Blue Solutions Ltd");
MODULE_DESCRIPTION("CLPS711X serial driver");
MODULE_LICENSE("GPL");
--
1.7.8.6
^ permalink raw reply related
* [PATCH 02/15] ARM: clps711x: Using platform_driver for ethernet device
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
This patch removes static mappings for ethernet devices. Now we will use
platform_driver for ethernet devices.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/Kconfig | 2 -
arch/arm/mach-clps711x/autcpu12.c | 27 ++++++++++------------
arch/arm/mach-clps711x/cdb89712.c | 29 +++++++++--------------
arch/arm/mach-clps711x/edb7211.c | 19 ++++++++++-----
arch/arm/mach-clps711x/include/mach/autcpu12.h | 3 --
arch/arm/mach-clps711x/include/mach/hardware.h | 11 ---------
6 files changed, 36 insertions(+), 55 deletions(-)
diff --git a/arch/arm/mach-clps711x/Kconfig b/arch/arm/mach-clps711x/Kconfig
index 263242d..2d00165 100644
--- a/arch/arm/mach-clps711x/Kconfig
+++ b/arch/arm/mach-clps711x/Kconfig
@@ -10,7 +10,6 @@ config ARCH_AUTCPU12
config ARCH_CDB89712
bool "CDB89712"
- select ISA
help
This is an evaluation board from Cirrus for the CS89712 processor.
The board includes 2 serial ports, Ethernet, IRDA, and expansion
@@ -25,7 +24,6 @@ config ARCH_EDB7211
bool "EDB7211"
select ARCH_SELECT_MEMORY_MODEL
select ARCH_SPARSEMEM_ENABLE
- select ISA
help
Say Y here if you intend to run this kernel on a Cirrus Logic EDB-7211
evaluation board.
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c
index f4f122d..d845dea 100644
--- a/arch/arm/mach-clps711x/autcpu12.c
+++ b/arch/arm/mach-clps711x/autcpu12.c
@@ -24,6 +24,7 @@
#include <linux/mm.h>
#include <linux/io.h>
#include <linux/ioport.h>
+#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <mach/hardware.h>
@@ -39,21 +40,13 @@
#include "common.h"
-static struct map_desc autcpu12_io_desc[] __initdata = {
- /* Memory-mapped extra io and CS8900A Ethernet chip */
- {
- .virtual = IO_ADDRESS(AUTCPU12_PHYS_CS8900A),
- .pfn = __phys_to_pfn(AUTCPU12_PHYS_CS8900A),
- .length = SZ_1M,
- .type = MT_DEVICE
- }
-};
+#define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300)
+#define AUTCPU12_CS8900_IRQ (IRQ_EINT3)
-void __init autcpu12_map_io(void)
-{
- clps711x_map_io();
- iotable_init(autcpu12_io_desc, ARRAY_SIZE(autcpu12_io_desc));
-}
+static struct resource autcpu12_cs8900_resource[] __initdata = {
+ DEFINE_RES_MEM(AUTCPU12_CS8900_BASE, SZ_1K),
+ DEFINE_RES_IRQ(AUTCPU12_CS8900_IRQ),
+};
static struct resource autcpu12_nvram_resource[] __initdata = {
DEFINE_RES_MEM_NAMED(AUTCPU12_PHYS_NVRAM, SZ_128K, "SRAM"),
@@ -69,13 +62,17 @@ static struct platform_device autcpu12_nvram_pdev __initdata = {
static void __init autcpu12_init(void)
{
platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+
+ platform_device_register_simple("cs89x0", 0, autcpu12_cs8900_resource,
+ ARRAY_SIZE(autcpu12_cs8900_resource));
+
platform_device_register(&autcpu12_nvram_pdev);
}
MACHINE_START(AUTCPU12, "autronix autcpu12")
/* Maintainer: Thomas Gleixner */
.atag_offset = 0x20000,
- .map_io = autcpu12_map_io,
+ .map_io = clps711x_map_io,
.init_machine = autcpu12_init,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
diff --git a/arch/arm/mach-clps711x/cdb89712.c b/arch/arm/mach-clps711x/cdb89712.c
index 5a03888..695ca70 100644
--- a/arch/arm/mach-clps711x/cdb89712.c
+++ b/arch/arm/mach-clps711x/cdb89712.c
@@ -23,6 +23,7 @@
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/io.h>
+#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <mach/hardware.h>
@@ -35,34 +36,26 @@
#include "common.h"
-/*
- * Map the CS89712 Ethernet port. That should be moved to the
- * ethernet driver, perhaps.
- */
-static struct map_desc cdb89712_io_desc[] __initdata = {
- {
- .virtual = IO_ADDRESS(ETHER_PHYS_BASE),
- .pfn = __phys_to_pfn(ETHER_PHYS_BASE),
- .length = ETHER_SIZE,
- .type = MT_DEVICE
- }
-};
+#define CDB89712_CS8900_BASE (CS2_PHYS_BASE + 0x300)
+#define CDB89712_CS8900_IRQ (IRQ_EINT3)
-static void __init cdb89712_map_io(void)
-{
- clps711x_map_io();
- iotable_init(cdb89712_io_desc, ARRAY_SIZE(cdb89712_io_desc));
-}
+static struct resource cdb89712_cs8900_resource[] __initdata = {
+ DEFINE_RES_MEM(CDB89712_CS8900_BASE, SZ_1K),
+ DEFINE_RES_IRQ(CDB89712_CS8900_IRQ),
+};
static void __init cdb89712_init(void)
{
platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+
+ platform_device_register_simple("cs89x0", 0, cdb89712_cs8900_resource,
+ ARRAY_SIZE(cdb89712_cs8900_resource));
}
MACHINE_START(CDB89712, "Cirrus-CDB89712")
/* Maintainer: Ray Lehtiniemi */
.atag_offset = 0x100,
- .map_io = cdb89712_map_io,
+ .map_io = clps711x_map_io,
.init_machine = cdb89712_init,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
diff --git a/arch/arm/mach-clps711x/edb7211.c b/arch/arm/mach-clps711x/edb7211.c
index 119610b..7eaaafa 100644
--- a/arch/arm/mach-clps711x/edb7211.c
+++ b/arch/arm/mach-clps711x/edb7211.c
@@ -10,6 +10,7 @@
#include <linux/init.h>
#include <linux/memblock.h>
#include <linux/types.h>
+#include <linux/interrupt.h>
#include <linux/platform_device.h>
#include <asm/setup.h>
@@ -21,7 +22,15 @@
#include "common.h"
-#define VIDEORAM_SIZE SZ_128K
+#define VIDEORAM_SIZE SZ_128K
+
+#define EDB7211_CS8900_BASE (CS2_PHYS_BASE + 0x300)
+#define EDB7211_CS8900_IRQ (IRQ_EINT3)
+
+static struct resource edb7211_cs8900_resource[] __initdata = {
+ DEFINE_RES_MEM(EDB7211_CS8900_BASE, SZ_1K),
+ DEFINE_RES_IRQ(EDB7211_CS8900_IRQ),
+};
static struct map_desc edb7211_io_desc[] __initdata = {
{ /* Memory-mapped extra keyboard row */
@@ -29,11 +38,6 @@ static struct map_desc edb7211_io_desc[] __initdata = {
.pfn = __phys_to_pfn(EP7211_PHYS_EXTKBD),
.length = SZ_1M,
.type = MT_DEVICE,
- }, { /* CS8900A Ethernet chip */
- .virtual = IO_ADDRESS(EP7211_PHYS_CS8900A),
- .pfn = __phys_to_pfn(EP7211_PHYS_CS8900A),
- .length = SZ_1M,
- .type = MT_DEVICE,
}, { /* Flash bank 0 */
.virtual = IO_ADDRESS(EP7211_PHYS_FLASH1),
.pfn = __phys_to_pfn(EP7211_PHYS_FLASH1),
@@ -80,6 +84,9 @@ fixup_edb7211(struct tag *tags, char **cmdline, struct meminfo *mi)
static void __init edb7211_init(void)
{
platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+
+ platform_device_register_simple("cs89x0", 0, edb7211_cs8900_resource,
+ ARRAY_SIZE(edb7211_cs8900_resource));
}
MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
diff --git a/arch/arm/mach-clps711x/include/mach/autcpu12.h b/arch/arm/mach-clps711x/include/mach/autcpu12.h
index f95ce6f..b077abd 100644
--- a/arch/arm/mach-clps711x/include/mach/autcpu12.h
+++ b/arch/arm/mach-clps711x/include/mach/autcpu12.h
@@ -20,9 +20,6 @@
#ifndef __ASM_ARCH_AUTCPU12_H
#define __ASM_ARCH_AUTCPU12_H
-/* The CS8900A ethernet chip has its I/O registers wired to chip select 2 */
-#define AUTCPU12_PHYS_CS8900A CS2_PHYS_BASE
-
/*
* The flash bank is wired to chip select 0
*/
diff --git a/arch/arm/mach-clps711x/include/mach/hardware.h b/arch/arm/mach-clps711x/include/mach/hardware.h
index 0a3df25..bd919e7 100644
--- a/arch/arm/mach-clps711x/include/mach/hardware.h
+++ b/arch/arm/mach-clps711x/include/mach/hardware.h
@@ -64,22 +64,11 @@
#define CS7_PHYS_BASE (0x00000000)
#endif
-#if defined (CONFIG_ARCH_CDB89712)
-
-#define ETHER_PHYS_BASE CS2_PHYS_BASE
-#define ETHER_SIZE 0x1000
-
-#endif
-
-
#if defined (CONFIG_ARCH_EDB7211)
/* The extra 8 lines of the keyboard matrix are wired to chip select 3 */
#define EP7211_PHYS_EXTKBD CS3_PHYS_BASE
-/* The CS8900A ethernet chip has its I/O registers wired to chip select 2 */
-#define EP7211_PHYS_CS8900A CS2_PHYS_BASE
-
/* The two flash banks are wired to chip selects 0 and 1 */
#define EP7211_PHYS_FLASH1 CS0_PHYS_BASE
#define EP7211_PHYS_FLASH2 CS1_PHYS_BASE
--
1.7.8.6
^ permalink raw reply related
* [PATCH 03/15] ARM: clps711x: p720t: Using "leds-gpio" driver for LED control
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Instead of manually create LED class device, we will use "leds-gpio"
driver for LED control.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/common.h | 3 +
arch/arm/mach-clps711x/p720t.c | 79 ++++++++++++--------------------------
2 files changed, 28 insertions(+), 54 deletions(-)
diff --git a/arch/arm/mach-clps711x/common.h b/arch/arm/mach-clps711x/common.h
index fc0f065..83cfece 100644
--- a/arch/arm/mach-clps711x/common.h
+++ b/arch/arm/mach-clps711x/common.h
@@ -4,6 +4,9 @@
* Common bits.
*/
+#define CLPS711X_NR_GPIO (4 * 8 + 3)
+#define CLPS711X_GPIO(port,bit) ((port) * 8 + (bit))
+
struct sys_timer;
extern void clps711x_map_io(void);
diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c
index 96d54d4..7a96312 100644
--- a/arch/arm/mach-clps711x/p720t.c
+++ b/arch/arm/mach-clps711x/p720t.c
@@ -39,6 +39,8 @@
#include "common.h"
+#define GPIO_USERLED CLPS711X_GPIO(3, 0)
+
/*
* Map the P720T system PLD. It occupies two address spaces:
* 0x10000000 and 0x10400000. We map both regions as one.
@@ -104,67 +106,35 @@ static void __init p720t_init_early(void)
}
}
-/*
- * LED controled by CPLD
- */
-#if defined(CONFIG_NEW_LEDS) && defined(CONFIG_LEDS_CLASS)
-static void p720t_led_set(struct led_classdev *cdev,
- enum led_brightness b)
-{
- u8 reg = clps_readb(PDDR);
-
- if (b != LED_OFF)
- reg |= 0x1;
- else
- reg &= ~0x1;
-
- clps_writeb(reg, PDDR);
-}
+static struct gpio_led p720t_gpio_leds[] = {
+ {
+ .name = "User LED",
+ .default_trigger = "heartbeat",
+ .gpio = GPIO_USERLED,
+ },
+};
-static enum led_brightness p720t_led_get(struct led_classdev *cdev)
-{
- u8 reg = clps_readb(PDDR);
+static struct gpio_led_platform_data p720t_gpio_led_pdata = {
+ .leds = p720t_gpio_leds,
+ .num_leds = ARRAY_SIZE(p720t_gpio_leds),
+};
- return (reg & 0x1) ? LED_FULL : LED_OFF;
-}
+static struct platform_device p720t_gpio_led_pdev = {
+ .name = "leds-gpio",
+ .id = -1,
+ .dev = {
+ .platform_data = &p720t_gpio_led_pdata,
+ },
+};
-static int __init p720t_leds_init(void)
+static void __init p720t_init(void)
{
-
- struct led_classdev *cdev;
- int ret;
-
- if (!machine_is_p720t())
- return -ENODEV;
-
- cdev = kzalloc(sizeof(*cdev), GFP_KERNEL);
- if (!cdev)
- return -ENOMEM;
-
- cdev->name = "p720t:0";
- cdev->brightness_set = p720t_led_set;
- cdev->brightness_get = p720t_led_get;
- cdev->default_trigger = "heartbeat";
-
- ret = led_classdev_register(NULL, cdev);
- if (ret < 0) {
- kfree(cdev);
- return ret;
- }
-
- return 0;
+ platform_device_register_simple("uart-clps711x", 0, NULL, 0);
}
-/*
- * Since we may have triggers on any subsystem, defer registration
- * until after subsystem_init.
- */
-fs_initcall(p720t_leds_init);
-#endif
-
-static void __init p720t_init(void)
+static void __init p720t_init_late(void)
{
- platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+ platform_device_register(&p720t_gpio_led_pdev);
}
MACHINE_START(P720T, "ARM-Prospector720T")
@@ -174,6 +144,7 @@ MACHINE_START(P720T, "ARM-Prospector720T")
.map_io = p720t_map_io,
.init_early = p720t_init_early,
.init_machine = p720t_init,
+ .init_late = p720t_init_late,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
--
1.7.8.6
^ permalink raw reply related
* [PATCH 04/15] ARM: clps711x: Transform clps711x-framebuffer to platform driver and use it
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
clps711x-framebuffer driver needs to be updated and this is a first step
to make it better. With this patch we are loading clps711x-framebuffer as
a platform device.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/autcpu12.c | 2 ++
arch/arm/mach-clps711x/edb7211.c | 2 ++
arch/arm/mach-clps711x/p720t.c | 2 ++
drivers/video/clps711xfb.c | 21 +++++++++++++++------
4 files changed, 21 insertions(+), 6 deletions(-)
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c
index d845dea..c20c30a 100644
--- a/arch/arm/mach-clps711x/autcpu12.c
+++ b/arch/arm/mach-clps711x/autcpu12.c
@@ -63,6 +63,8 @@ static void __init autcpu12_init(void)
{
platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+ platform_device_register_simple("video-clps711x", 0, NULL, 0);
+
platform_device_register_simple("cs89x0", 0, autcpu12_cs8900_resource,
ARRAY_SIZE(autcpu12_cs8900_resource));
diff --git a/arch/arm/mach-clps711x/edb7211.c b/arch/arm/mach-clps711x/edb7211.c
index 7eaaafa..ef87c43 100644
--- a/arch/arm/mach-clps711x/edb7211.c
+++ b/arch/arm/mach-clps711x/edb7211.c
@@ -85,6 +85,8 @@ static void __init edb7211_init(void)
{
platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+ platform_device_register_simple("video-clps711x", 0, NULL, 0);
+
platform_device_register_simple("cs89x0", 0, edb7211_cs8900_resource,
ARRAY_SIZE(edb7211_cs8900_resource));
}
diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c
index 7a96312..b6e2032 100644
--- a/arch/arm/mach-clps711x/p720t.c
+++ b/arch/arm/mach-clps711x/p720t.c
@@ -130,6 +130,8 @@ static struct platform_device p720t_gpio_led_pdev = {
static void __init p720t_init(void)
{
platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+
+ platform_device_register_simple("video-clps711x", 0, NULL, 0);
}
static void __init p720t_init_late(void)
diff --git a/drivers/video/clps711xfb.c b/drivers/video/clps711xfb.c
index f994c8b..2ccbb9b 100644
--- a/drivers/video/clps711xfb.c
+++ b/drivers/video/clps711xfb.c
@@ -270,7 +270,7 @@ static const struct file_operations backlight_proc_fops = {
.write = backlight_proc_write,
};
-static void __init clps711x_guess_lcd_params(struct fb_info *info)
+static void __devinit clps711x_guess_lcd_params(struct fb_info *info)
{
unsigned int lcdcon, syscon, size;
unsigned long phys_base = PAGE_OFFSET;
@@ -358,7 +358,7 @@ static void __init clps711x_guess_lcd_params(struct fb_info *info)
info->fix.type = FB_TYPE_PACKED_PIXELS;
}
-int __init clps711xfb_init(void)
+static int __devinit clps711x_fb_probe(struct platform_device *pdev)
{
int err = -ENOMEM;
@@ -410,7 +410,7 @@ int __init clps711xfb_init(void)
out: return err;
}
-static void __exit clps711xfb_exit(void)
+static int __devexit clps711x_fb_remove(struct platform_device *pdev)
{
unregister_framebuffer(cfb);
kfree(cfb);
@@ -422,11 +422,20 @@ static void __exit clps711xfb_exit(void)
PLD_LCDEN = 0;
PLD_PWR &= ~(PLD_S4_ON|PLD_S3_ON|PLD_S2_ON|PLD_S1_ON);
}
+
+ return 0;
}
-module_init(clps711xfb_init);
-module_exit(clps711xfb_exit);
+static struct platform_driver clps711x_fb_driver = {
+ .driver = {
+ .name = "video-clps711x",
+ .owner = THIS_MODULE,
+ },
+ .probe = clps711x_fb_probe,
+ .remove = __devexit_p(clps711x_fb_remove),
+};
+module_platform_driver(clps711x_fb_driver);
MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
-MODULE_DESCRIPTION("CLPS711x framebuffer driver");
+MODULE_DESCRIPTION("CLPS711X framebuffer driver");
MODULE_LICENSE("GPL");
--
1.7.8.6
^ permalink raw reply related
* [PATCH 05/15] ARM: clps711x: p720t: Unneeded inclusion of head-sa1100.S removed
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/boot/compressed/Makefile | 5 -----
1 files changed, 0 insertions(+), 5 deletions(-)
diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index 537208f..5cad8a6 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -45,11 +45,6 @@ ifeq ($(CONFIG_ARCH_SHARK),y)
OBJS += head-shark.o ofw-shark.o
endif
-ifeq ($(CONFIG_ARCH_P720T),y)
-# Borrow this code from SA1100
-OBJS += head-sa1100.o
-endif
-
ifeq ($(CONFIG_ARCH_SA1100),y)
OBJS += head-sa1100.o
endif
--
1.7.8.6
^ permalink raw reply related
* [PATCH 06/15] ARM: clps711x: Always select AUTO_ZRELADDR for a platform
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/Kconfig | 1 +
arch/arm/mach-clps711x/Makefile.boot | 1 -
2 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 9f04ca6..95103a1 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -370,6 +370,7 @@ config ARCH_CNS3XXX
config ARCH_CLPS711X
bool "Cirrus Logic CLPS711x/EP721x/EP731x-based"
select ARCH_REQUIRE_GPIOLIB
+ select AUTO_ZRELADDR
select CLKDEV_LOOKUP
select COMMON_CLK
select CPU_ARM720T
diff --git a/arch/arm/mach-clps711x/Makefile.boot b/arch/arm/mach-clps711x/Makefile.boot
index 9398e85..eba77d3 100644
--- a/arch/arm/mach-clps711x/Makefile.boot
+++ b/arch/arm/mach-clps711x/Makefile.boot
@@ -1,5 +1,4 @@
# The standard locations for stuff on CLPS711x type processors
- zreladdr-y += 0xc0028000
params_phys-y := 0xc0000100
# Should probably have some agreement on these...
initrd_phys-$(CONFIG_ARCH_P720T) := 0xc0400000
--
1.7.8.6
^ permalink raw reply related
* [PATCH 07/15] ARM: clps711x: cdb89712: Special driver for handling memory is removed
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
This patch provide migration to using "physmap-flash" and "mtd-ram"
drivers instead of using special driver for handling memory.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/cdb89712.c | 85 +++++++
arch/arm/mach-clps711x/include/mach/hardware.h | 3 +
drivers/mtd/maps/Kconfig | 7 -
drivers/mtd/maps/Makefile | 1 -
drivers/mtd/maps/cdb89712.c | 278 ------------------------
5 files changed, 88 insertions(+), 286 deletions(-)
delete mode 100644 drivers/mtd/maps/cdb89712.c
diff --git a/arch/arm/mach-clps711x/cdb89712.c b/arch/arm/mach-clps711x/cdb89712.c
index 695ca70..27c9f91 100644
--- a/arch/arm/mach-clps711x/cdb89712.c
+++ b/arch/arm/mach-clps711x/cdb89712.c
@@ -26,6 +26,10 @@
#include <linux/interrupt.h>
#include <linux/platform_device.h>
+#include <linux/mtd/physmap.h>
+#include <linux/mtd/plat-ram.h>
+#include <linux/mtd/partitions.h>
+
#include <mach/hardware.h>
#include <asm/pgtable.h>
#include <asm/page.h>
@@ -44,10 +48,91 @@ static struct resource cdb89712_cs8900_resource[] __initdata = {
DEFINE_RES_IRQ(CDB89712_CS8900_IRQ),
};
+static struct mtd_partition cdb89712_flash_partitions[] __initdata = {
+ {
+ .name = "Flash",
+ .offset = 0,
+ .size = MTDPART_SIZ_FULL,
+ },
+};
+
+static struct physmap_flash_data cdb89712_flash_pdata __initdata = {
+ .width = 4,
+ .probe_type = "map_rom",
+ .parts = cdb89712_flash_partitions,
+ .nr_parts = ARRAY_SIZE(cdb89712_flash_partitions),
+};
+
+static struct resource cdb89712_flash_resources[] __initdata = {
+ DEFINE_RES_MEM(CS0_PHYS_BASE, SZ_8M),
+};
+
+static struct platform_device cdb89712_flash_pdev __initdata = {
+ .name = "physmap-flash",
+ .id = 0,
+ .resource = cdb89712_flash_resources,
+ .num_resources = ARRAY_SIZE(cdb89712_flash_resources),
+ .dev = {
+ .platform_data = &cdb89712_flash_pdata,
+ },
+};
+
+static struct mtd_partition cdb89712_bootrom_partitions[] __initdata = {
+ {
+ .name = "BootROM",
+ .offset = 0,
+ .size = MTDPART_SIZ_FULL,
+ },
+};
+
+static struct physmap_flash_data cdb89712_bootrom_pdata __initdata = {
+ .width = 4,
+ .probe_type = "map_rom",
+ .parts = cdb89712_bootrom_partitions,
+ .nr_parts = ARRAY_SIZE(cdb89712_bootrom_partitions),
+};
+
+static struct resource cdb89712_bootrom_resources[] __initdata = {
+ DEFINE_RES_NAMED(CS7_PHYS_BASE, SZ_128, "BOOTROM", IORESOURCE_MEM |
+ IORESOURCE_CACHEABLE | IORESOURCE_READONLY),
+};
+
+static struct platform_device cdb89712_bootrom_pdev __initdata = {
+ .name = "physmap-flash",
+ .id = 1,
+ .resource = cdb89712_bootrom_resources,
+ .num_resources = ARRAY_SIZE(cdb89712_bootrom_resources),
+ .dev = {
+ .platform_data = &cdb89712_bootrom_pdata,
+ },
+};
+
+static struct platdata_mtd_ram cdb89712_sram_pdata __initdata = {
+ .bankwidth = 4,
+};
+
+static struct resource cdb89712_sram_resources[] __initdata = {
+ DEFINE_RES_MEM(CLPS711X_SRAM_BASE, CLPS711X_SRAM_SIZE),
+};
+
+static struct platform_device cdb89712_sram_pdev __initdata = {
+ .name = "mtd-ram",
+ .id = 0,
+ .resource = cdb89712_sram_resources,
+ .num_resources = ARRAY_SIZE(cdb89712_sram_resources),
+ .dev = {
+ .platform_data = &cdb89712_sram_pdata,
+ },
+};
+
static void __init cdb89712_init(void)
{
platform_device_register_simple("uart-clps711x", 0, NULL, 0);
+ platform_device_register(&cdb89712_flash_pdev);
+ platform_device_register(&cdb89712_bootrom_pdev);
+ platform_device_register(&cdb89712_sram_pdev);
+
platform_device_register_simple("cs89x0", 0, cdb89712_cs8900_resource,
ARRAY_SIZE(cdb89712_cs8900_resource));
}
diff --git a/arch/arm/mach-clps711x/include/mach/hardware.h b/arch/arm/mach-clps711x/include/mach/hardware.h
index bd919e7..5a278cb 100644
--- a/arch/arm/mach-clps711x/include/mach/hardware.h
+++ b/arch/arm/mach-clps711x/include/mach/hardware.h
@@ -64,6 +64,9 @@
#define CS7_PHYS_BASE (0x00000000)
#endif
+#define CLPS711X_SRAM_BASE CS6_PHYS_BASE
+#define CLPS711X_SRAM_SIZE (48 * 1024)
+
#if defined (CONFIG_ARCH_EDB7211)
/* The extra 8 lines of the keyboard matrix are wired to chip select 3 */
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
index 2e47c2e..df30486 100644
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -324,13 +324,6 @@ config MTD_SOLUTIONENGINE
This enables access to the flash chips on the Hitachi SolutionEngine and
similar boards. Say 'Y' if you are building a kernel for such a board.
-config MTD_CDB89712
- tristate "Cirrus CDB89712 evaluation board mappings"
- depends on MTD_CFI && ARCH_CDB89712
- help
- This enables access to the flash or ROM chips on the CDB89712 board.
- If you have such a board, say 'Y'.
-
config MTD_SA1100
tristate "CFI Flash device mapped on StrongARM SA11x0"
depends on MTD_CFI && ARCH_SA1100
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
index deb43e9..a0240ed 100644
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -7,7 +7,6 @@ obj-$(CONFIG_MTD) += map_funcs.o
endif
# Chip mappings
-obj-$(CONFIG_MTD_CDB89712) += cdb89712.o
obj-$(CONFIG_MTD_CFI_FLAGADM) += cfi_flagadm.o
obj-$(CONFIG_MTD_DC21285) += dc21285.o
obj-$(CONFIG_MTD_DILNETPC) += dilnetpc.o
diff --git a/drivers/mtd/maps/cdb89712.c b/drivers/mtd/maps/cdb89712.c
deleted file mode 100644
index c29cbf8..0000000
--- a/drivers/mtd/maps/cdb89712.c
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Flash on Cirrus CDB89712
- *
- */
-
-#include <linux/module.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/ioport.h>
-#include <linux/init.h>
-#include <asm/io.h>
-#include <mach/hardware.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/map.h>
-#include <linux/mtd/partitions.h>
-
-/* dynamic ioremap() areas */
-#define FLASH_START 0x00000000
-#define FLASH_SIZE 0x800000
-#define FLASH_WIDTH 4
-
-#define SRAM_START 0x60000000
-#define SRAM_SIZE 0xc000
-#define SRAM_WIDTH 4
-
-#define BOOTROM_START 0x70000000
-#define BOOTROM_SIZE 0x80
-#define BOOTROM_WIDTH 4
-
-
-static struct mtd_info *flash_mtd;
-
-struct map_info cdb89712_flash_map = {
- .name = "flash",
- .size = FLASH_SIZE,
- .bankwidth = FLASH_WIDTH,
- .phys = FLASH_START,
-};
-
-struct resource cdb89712_flash_resource = {
- .name = "Flash",
- .start = FLASH_START,
- .end = FLASH_START + FLASH_SIZE - 1,
- .flags = IORESOURCE_IO | IORESOURCE_BUSY,
-};
-
-static int __init init_cdb89712_flash (void)
-{
- int err;
-
- if (request_resource (&ioport_resource, &cdb89712_flash_resource)) {
- printk(KERN_NOTICE "Failed to reserve Cdb89712 FLASH space\n");
- err = -EBUSY;
- goto out;
- }
-
- cdb89712_flash_map.virt = ioremap(FLASH_START, FLASH_SIZE);
- if (!cdb89712_flash_map.virt) {
- printk(KERN_NOTICE "Failed to ioremap Cdb89712 FLASH space\n");
- err = -EIO;
- goto out_resource;
- }
- simple_map_init(&cdb89712_flash_map);
- flash_mtd = do_map_probe("cfi_probe", &cdb89712_flash_map);
- if (!flash_mtd) {
- flash_mtd = do_map_probe("map_rom", &cdb89712_flash_map);
- if (flash_mtd)
- flash_mtd->erasesize = 0x10000;
- }
- if (!flash_mtd) {
- printk("FLASH probe failed\n");
- err = -ENXIO;
- goto out_ioremap;
- }
-
- flash_mtd->owner = THIS_MODULE;
-
- if (mtd_device_register(flash_mtd, NULL, 0)) {
- printk("FLASH device addition failed\n");
- err = -ENOMEM;
- goto out_probe;
- }
-
- return 0;
-
-out_probe:
- map_destroy(flash_mtd);
- flash_mtd = 0;
-out_ioremap:
- iounmap((void *)cdb89712_flash_map.virt);
-out_resource:
- release_resource (&cdb89712_flash_resource);
-out:
- return err;
-}
-
-
-
-
-
-static struct mtd_info *sram_mtd;
-
-struct map_info cdb89712_sram_map = {
- .name = "SRAM",
- .size = SRAM_SIZE,
- .bankwidth = SRAM_WIDTH,
- .phys = SRAM_START,
-};
-
-struct resource cdb89712_sram_resource = {
- .name = "SRAM",
- .start = SRAM_START,
- .end = SRAM_START + SRAM_SIZE - 1,
- .flags = IORESOURCE_IO | IORESOURCE_BUSY,
-};
-
-static int __init init_cdb89712_sram (void)
-{
- int err;
-
- if (request_resource (&ioport_resource, &cdb89712_sram_resource)) {
- printk(KERN_NOTICE "Failed to reserve Cdb89712 SRAM space\n");
- err = -EBUSY;
- goto out;
- }
-
- cdb89712_sram_map.virt = ioremap(SRAM_START, SRAM_SIZE);
- if (!cdb89712_sram_map.virt) {
- printk(KERN_NOTICE "Failed to ioremap Cdb89712 SRAM space\n");
- err = -EIO;
- goto out_resource;
- }
- simple_map_init(&cdb89712_sram_map);
- sram_mtd = do_map_probe("map_ram", &cdb89712_sram_map);
- if (!sram_mtd) {
- printk("SRAM probe failed\n");
- err = -ENXIO;
- goto out_ioremap;
- }
-
- sram_mtd->owner = THIS_MODULE;
- sram_mtd->erasesize = 16;
-
- if (mtd_device_register(sram_mtd, NULL, 0)) {
- printk("SRAM device addition failed\n");
- err = -ENOMEM;
- goto out_probe;
- }
-
- return 0;
-
-out_probe:
- map_destroy(sram_mtd);
- sram_mtd = 0;
-out_ioremap:
- iounmap((void *)cdb89712_sram_map.virt);
-out_resource:
- release_resource (&cdb89712_sram_resource);
-out:
- return err;
-}
-
-
-
-
-
-
-
-static struct mtd_info *bootrom_mtd;
-
-struct map_info cdb89712_bootrom_map = {
- .name = "BootROM",
- .size = BOOTROM_SIZE,
- .bankwidth = BOOTROM_WIDTH,
- .phys = BOOTROM_START,
-};
-
-struct resource cdb89712_bootrom_resource = {
- .name = "BootROM",
- .start = BOOTROM_START,
- .end = BOOTROM_START + BOOTROM_SIZE - 1,
- .flags = IORESOURCE_IO | IORESOURCE_BUSY,
-};
-
-static int __init init_cdb89712_bootrom (void)
-{
- int err;
-
- if (request_resource (&ioport_resource, &cdb89712_bootrom_resource)) {
- printk(KERN_NOTICE "Failed to reserve Cdb89712 BOOTROM space\n");
- err = -EBUSY;
- goto out;
- }
-
- cdb89712_bootrom_map.virt = ioremap(BOOTROM_START, BOOTROM_SIZE);
- if (!cdb89712_bootrom_map.virt) {
- printk(KERN_NOTICE "Failed to ioremap Cdb89712 BootROM space\n");
- err = -EIO;
- goto out_resource;
- }
- simple_map_init(&cdb89712_bootrom_map);
- bootrom_mtd = do_map_probe("map_rom", &cdb89712_bootrom_map);
- if (!bootrom_mtd) {
- printk("BootROM probe failed\n");
- err = -ENXIO;
- goto out_ioremap;
- }
-
- bootrom_mtd->owner = THIS_MODULE;
- bootrom_mtd->erasesize = 0x10000;
-
- if (mtd_device_register(bootrom_mtd, NULL, 0)) {
- printk("BootROM device addition failed\n");
- err = -ENOMEM;
- goto out_probe;
- }
-
- return 0;
-
-out_probe:
- map_destroy(bootrom_mtd);
- bootrom_mtd = 0;
-out_ioremap:
- iounmap((void *)cdb89712_bootrom_map.virt);
-out_resource:
- release_resource (&cdb89712_bootrom_resource);
-out:
- return err;
-}
-
-
-
-
-
-static int __init init_cdb89712_maps(void)
-{
-
- printk(KERN_INFO "Cirrus CDB89712 MTD mappings:\n Flash 0x%x at 0x%x\n SRAM 0x%x at 0x%x\n BootROM 0x%x at 0x%x\n",
- FLASH_SIZE, FLASH_START, SRAM_SIZE, SRAM_START, BOOTROM_SIZE, BOOTROM_START);
-
- init_cdb89712_flash();
- init_cdb89712_sram();
- init_cdb89712_bootrom();
-
- return 0;
-}
-
-
-static void __exit cleanup_cdb89712_maps(void)
-{
- if (sram_mtd) {
- mtd_device_unregister(sram_mtd);
- map_destroy(sram_mtd);
- iounmap((void *)cdb89712_sram_map.virt);
- release_resource (&cdb89712_sram_resource);
- }
-
- if (flash_mtd) {
- mtd_device_unregister(flash_mtd);
- map_destroy(flash_mtd);
- iounmap((void *)cdb89712_flash_map.virt);
- release_resource (&cdb89712_flash_resource);
- }
-
- if (bootrom_mtd) {
- mtd_device_unregister(bootrom_mtd);
- map_destroy(bootrom_mtd);
- iounmap((void *)cdb89712_bootrom_map.virt);
- release_resource (&cdb89712_bootrom_resource);
- }
-}
-
-module_init(init_cdb89712_maps);
-module_exit(cleanup_cdb89712_maps);
-
-MODULE_AUTHOR("Ray L");
-MODULE_DESCRIPTION("ARM CDB89712 map driver");
-MODULE_LICENSE("GPL");
--
1.7.8.6
^ permalink raw reply related
* [PATCH 08/15] ARM: clps711x: Implement usage "SPARSE_IRQ" kernel option for a platform
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/Kconfig | 1 +
arch/arm/mach-clps711x/autcpu12.c | 1 +
arch/arm/mach-clps711x/cdb89712.c | 1 +
arch/arm/mach-clps711x/clep7312.c | 1 +
arch/arm/mach-clps711x/common.h | 1 +
arch/arm/mach-clps711x/edb7211.c | 1 +
arch/arm/mach-clps711x/fortunet.c | 1 +
arch/arm/mach-clps711x/include/mach/clps711x.h | 21 +++++++++++
arch/arm/mach-clps711x/include/mach/irqs.h | 46 ------------------------
arch/arm/mach-clps711x/p720t.c | 1 +
10 files changed, 29 insertions(+), 46 deletions(-)
delete mode 100644 arch/arm/mach-clps711x/include/mach/irqs.h
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 95103a1..34ca399 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -376,6 +376,7 @@ config ARCH_CLPS711X
select CPU_ARM720T
select GENERIC_CLOCKEVENTS
select NEED_MACH_MEMORY_H
+ select SPARSE_IRQ
help
Support for Cirrus Logic 711x/721x/731x based boards.
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c
index c20c30a..6a4752b 100644
--- a/arch/arm/mach-clps711x/autcpu12.c
+++ b/arch/arm/mach-clps711x/autcpu12.c
@@ -76,6 +76,7 @@ MACHINE_START(AUTCPU12, "autronix autcpu12")
.atag_offset = 0x20000,
.map_io = clps711x_map_io,
.init_machine = autcpu12_init,
+ .nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
diff --git a/arch/arm/mach-clps711x/cdb89712.c b/arch/arm/mach-clps711x/cdb89712.c
index 27c9f91..a526715 100644
--- a/arch/arm/mach-clps711x/cdb89712.c
+++ b/arch/arm/mach-clps711x/cdb89712.c
@@ -142,6 +142,7 @@ MACHINE_START(CDB89712, "Cirrus-CDB89712")
.atag_offset = 0x100,
.map_io = clps711x_map_io,
.init_machine = cdb89712_init,
+ .nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
diff --git a/arch/arm/mach-clps711x/clep7312.c b/arch/arm/mach-clps711x/clep7312.c
index 0301b2c..c76363f 100644
--- a/arch/arm/mach-clps711x/clep7312.c
+++ b/arch/arm/mach-clps711x/clep7312.c
@@ -45,6 +45,7 @@ MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312")
.fixup = fixup_clep7312,
.map_io = clps711x_map_io,
.init_machine = clep7312_init,
+ .nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
diff --git a/arch/arm/mach-clps711x/common.h b/arch/arm/mach-clps711x/common.h
index 83cfece..9757b3e 100644
--- a/arch/arm/mach-clps711x/common.h
+++ b/arch/arm/mach-clps711x/common.h
@@ -4,6 +4,7 @@
* Common bits.
*/
+#define CLPS711X_NR_IRQS (30)
#define CLPS711X_NR_GPIO (4 * 8 + 3)
#define CLPS711X_GPIO(port,bit) ((port) * 8 + (bit))
diff --git a/arch/arm/mach-clps711x/edb7211.c b/arch/arm/mach-clps711x/edb7211.c
index ef87c43..43a502b 100644
--- a/arch/arm/mach-clps711x/edb7211.c
+++ b/arch/arm/mach-clps711x/edb7211.c
@@ -98,6 +98,7 @@ MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
.reserve = edb7211_reserve,
.map_io = edb7211_map_io,
.init_machine = edb7211_init,
+ .nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
diff --git a/arch/arm/mach-clps711x/fortunet.c b/arch/arm/mach-clps711x/fortunet.c
index a7f8305..dca69c3 100644
--- a/arch/arm/mach-clps711x/fortunet.c
+++ b/arch/arm/mach-clps711x/fortunet.c
@@ -83,6 +83,7 @@ MACHINE_START(FORTUNET, "ARM-FortuNet")
.fixup = fortunet_fixup,
.map_io = clps711x_map_io,
.init_machine = fortunet_init,
+ .nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
diff --git a/arch/arm/mach-clps711x/include/mach/clps711x.h b/arch/arm/mach-clps711x/include/mach/clps711x.h
index aee352c..1f4728d 100644
--- a/arch/arm/mach-clps711x/include/mach/clps711x.h
+++ b/arch/arm/mach-clps711x/include/mach/clps711x.h
@@ -277,4 +277,25 @@
#define MEMCFG_WAITSTATE_2_0 (14 << 2)
#define MEMCFG_WAITSTATE_1_0 (15 << 2)
+/* INTSR1 Interrupts */
+#define IRQ_CSINT (4)
+#define IRQ_EINT1 (5)
+#define IRQ_EINT2 (6)
+#define IRQ_EINT3 (7)
+#define IRQ_TC1OI (8)
+#define IRQ_TC2OI (9)
+#define IRQ_RTCMI (10)
+#define IRQ_TINT (11)
+#define IRQ_UTXINT1 (12)
+#define IRQ_URXINT1 (13)
+#define IRQ_UMSINT (14)
+#define IRQ_SSEOTI (15)
+
+/* INTSR2 Interrupts */
+#define IRQ_KBDINT (16 + 0)
+#define IRQ_SS2RX (16 + 1)
+#define IRQ_SS2TX (16 + 2)
+#define IRQ_UTXINT2 (16 + 12)
+#define IRQ_URXINT2 (16 + 13)
+
#endif /* __MACH_CLPS711X_H */
diff --git a/arch/arm/mach-clps711x/include/mach/irqs.h b/arch/arm/mach-clps711x/include/mach/irqs.h
deleted file mode 100644
index 1ea56db..0000000
--- a/arch/arm/mach-clps711x/include/mach/irqs.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * arch/arm/mach-clps711x/include/mach/irqs.h
- *
- * Copyright (C) 2000 Deep Blue Solutions Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-/*
- * Interrupts from INTSR1
- */
-#define IRQ_CSINT 4
-#define IRQ_EINT1 5
-#define IRQ_EINT2 6
-#define IRQ_EINT3 7
-#define IRQ_TC1OI 8
-#define IRQ_TC2OI 9
-#define IRQ_RTCMI 10
-#define IRQ_TINT 11
-#define IRQ_UTXINT1 12
-#define IRQ_URXINT1 13
-#define IRQ_UMSINT 14
-#define IRQ_SSEOTI 15
-
-/*
- * Interrupts from INTSR2
- */
-#define IRQ_KBDINT (16+0) /* bit 0 */
-#define IRQ_SS2RX (16+1) /* bit 1 */
-#define IRQ_SS2TX (16+2) /* bit 2 */
-#define IRQ_UTXINT2 (16+12) /* bit 12 */
-#define IRQ_URXINT2 (16+13) /* bit 13 */
-
-#define NR_IRQS 30
diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c
index b6e2032..4383ad8 100644
--- a/arch/arm/mach-clps711x/p720t.c
+++ b/arch/arm/mach-clps711x/p720t.c
@@ -147,6 +147,7 @@ MACHINE_START(P720T, "ARM-Prospector720T")
.init_early = p720t_init_early,
.init_machine = p720t_init,
.init_late = p720t_init_late,
+ .nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
--
1.7.8.6
^ permalink raw reply related
* [PATCH 09/15] ARM: clps711x: Implement usage "MULTI_IRQ_HANDLER" kernel option for a platform
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/Kconfig | 1 +
arch/arm/mach-clps711x/autcpu12.c | 1 +
arch/arm/mach-clps711x/cdb89712.c | 1 +
arch/arm/mach-clps711x/clep7312.c | 1 +
arch/arm/mach-clps711x/common.c | 39 ++++++++++++++++
arch/arm/mach-clps711x/common.h | 3 +-
arch/arm/mach-clps711x/edb7211.c | 1 +
arch/arm/mach-clps711x/fortunet.c | 1 +
arch/arm/mach-clps711x/include/mach/entry-macro.S | 51 ---------------------
arch/arm/mach-clps711x/p720t.c | 1 +
10 files changed, 48 insertions(+), 52 deletions(-)
delete mode 100644 arch/arm/mach-clps711x/include/mach/entry-macro.S
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 34ca399..2ee4b14 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -375,6 +375,7 @@ config ARCH_CLPS711X
select COMMON_CLK
select CPU_ARM720T
select GENERIC_CLOCKEVENTS
+ select MULTI_IRQ_HANDLER
select NEED_MACH_MEMORY_H
select SPARSE_IRQ
help
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c
index 6a4752b..8f9b2e0 100644
--- a/arch/arm/mach-clps711x/autcpu12.c
+++ b/arch/arm/mach-clps711x/autcpu12.c
@@ -78,6 +78,7 @@ MACHINE_START(AUTCPU12, "autronix autcpu12")
.init_machine = autcpu12_init,
.nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
+ .handle_irq = clps711x_handle_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
MACHINE_END
diff --git a/arch/arm/mach-clps711x/cdb89712.c b/arch/arm/mach-clps711x/cdb89712.c
index a526715..88de144 100644
--- a/arch/arm/mach-clps711x/cdb89712.c
+++ b/arch/arm/mach-clps711x/cdb89712.c
@@ -144,6 +144,7 @@ MACHINE_START(CDB89712, "Cirrus-CDB89712")
.init_machine = cdb89712_init,
.nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
+ .handle_irq = clps711x_handle_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
MACHINE_END
diff --git a/arch/arm/mach-clps711x/clep7312.c b/arch/arm/mach-clps711x/clep7312.c
index c76363f..a6b808c 100644
--- a/arch/arm/mach-clps711x/clep7312.c
+++ b/arch/arm/mach-clps711x/clep7312.c
@@ -47,6 +47,7 @@ MACHINE_START(CLEP7212, "Cirrus Logic 7212/7312")
.init_machine = clep7312_init,
.nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
+ .handle_irq = clps711x_handle_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
MACHINE_END
diff --git a/arch/arm/mach-clps711x/common.c b/arch/arm/mach-clps711x/common.c
index 286d6e6..3cc0380 100644
--- a/arch/arm/mach-clps711x/common.c
+++ b/arch/arm/mach-clps711x/common.c
@@ -29,6 +29,7 @@
#include <linux/clockchips.h>
#include <linux/clk-provider.h>
+#include <asm/exception.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <asm/system_misc.h>
@@ -191,6 +192,44 @@ void __init clps711x_init_irq(void)
}
}
+inline u32 fls16(u32 x)
+{
+ u32 r = 15;
+
+ if (!(x & 0xff00)) {
+ x <<= 8;
+ r -= 8;
+ }
+ if (!(x & 0xf000)) {
+ x <<= 4;
+ r -= 4;
+ }
+ if (!(x & 0xc000)) {
+ x <<= 2;
+ r -= 2;
+ }
+ if (!(x & 0x8000))
+ r--;
+
+ return r;
+}
+
+asmlinkage void __exception_irq_entry clps711x_handle_irq(struct pt_regs *regs)
+{
+ u32 irqstat;
+ void __iomem *base = CLPS711X_VIRT_BASE;
+
+ irqstat = readl_relaxed(base + INTSR1) & readl_relaxed(base + INTMR1);
+ if (irqstat) {
+ handle_IRQ(fls16(irqstat), regs);
+ return;
+ }
+
+ irqstat = readl_relaxed(base + INTSR2) & readl_relaxed(base + INTMR2);
+ if (likely(irqstat))
+ handle_IRQ(fls16(irqstat) + 16, regs);
+}
+
static void clps711x_clockevent_set_mode(enum clock_event_mode mode,
struct clock_event_device *evt)
{
diff --git a/arch/arm/mach-clps711x/common.h b/arch/arm/mach-clps711x/common.h
index 9757b3e..9d3e9db 100644
--- a/arch/arm/mach-clps711x/common.h
+++ b/arch/arm/mach-clps711x/common.h
@@ -12,5 +12,6 @@ struct sys_timer;
extern void clps711x_map_io(void);
extern void clps711x_init_irq(void);
-extern struct sys_timer clps711x_timer;
+extern void clps711x_handle_irq(struct pt_regs *regs);
extern void clps711x_restart(char mode, const char *cmd);
+extern struct sys_timer clps711x_timer;
diff --git a/arch/arm/mach-clps711x/edb7211.c b/arch/arm/mach-clps711x/edb7211.c
index 43a502b..5a43160 100644
--- a/arch/arm/mach-clps711x/edb7211.c
+++ b/arch/arm/mach-clps711x/edb7211.c
@@ -100,6 +100,7 @@ MACHINE_START(EDB7211, "CL-EDB7211 (EP7211 eval board)")
.init_machine = edb7211_init,
.nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
+ .handle_irq = clps711x_handle_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
MACHINE_END
diff --git a/arch/arm/mach-clps711x/fortunet.c b/arch/arm/mach-clps711x/fortunet.c
index dca69c3..72c3745 100644
--- a/arch/arm/mach-clps711x/fortunet.c
+++ b/arch/arm/mach-clps711x/fortunet.c
@@ -85,6 +85,7 @@ MACHINE_START(FORTUNET, "ARM-FortuNet")
.init_machine = fortunet_init,
.nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
+ .handle_irq = clps711x_handle_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
MACHINE_END
diff --git a/arch/arm/mach-clps711x/include/mach/entry-macro.S b/arch/arm/mach-clps711x/include/mach/entry-macro.S
deleted file mode 100644
index 56e5c2c..0000000
--- a/arch/arm/mach-clps711x/include/mach/entry-macro.S
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * arch/arm/mach-clps711x/include/mach/entry-macro.S
- *
- * Low-level IRQ helper macros for CLPS711X-based platforms
- *
- * This file is licensed under the terms of the GNU General Public
- * License version 2. This program is licensed "as is" without any
- * warranty of any kind, whether express or implied.
- */
-#include <mach/hardware.h>
-
- .macro get_irqnr_preamble, base, tmp
- .endm
-
-#if (INTSR2 - INTSR1) != (INTMR2 - INTMR1)
-#error INTSR stride != INTMR stride
-#endif
-
- .macro get_irqnr_and_base, irqnr, stat, base, mask
- mov \base, #CLPS711X_VIRT_BASE
- ldr \stat, [\base, #INTSR1]
- ldr \mask, [\base, #INTMR1]
- mov \irqnr, #4
- mov \mask, \mask, lsl #16
- and \stat, \stat, \mask, lsr #16
- movs \stat, \stat, lsr #4
- bne 1001f
-
- add \base, \base, #INTSR2 - INTSR1
- ldr \stat, [\base, #INTSR1]
- ldr \mask, [\base, #INTMR1]
- mov \irqnr, #16
- mov \mask, \mask, lsl #16
- and \stat, \stat, \mask, lsr #16
-
-1001: tst \stat, #255
- addeq \irqnr, \irqnr, #8
- moveq \stat, \stat, lsr #8
- tst \stat, #15
- addeq \irqnr, \irqnr, #4
- moveq \stat, \stat, lsr #4
- tst \stat, #3
- addeq \irqnr, \irqnr, #2
- moveq \stat, \stat, lsr #2
- tst \stat, #1
- addeq \irqnr, \irqnr, #1
- moveq \stat, \stat, lsr #1
- tst \stat, #1 @ bit 0 should be set
- .endm
-
-
diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/p720t.c
index 4383ad8..0b329c3 100644
--- a/arch/arm/mach-clps711x/p720t.c
+++ b/arch/arm/mach-clps711x/p720t.c
@@ -149,6 +149,7 @@ MACHINE_START(P720T, "ARM-Prospector720T")
.init_late = p720t_init_late,
.nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
+ .handle_irq = clps711x_handle_irq,
.restart = clps711x_restart,
.timer = &clps711x_timer,
MACHINE_END
--
1.7.8.6
^ permalink raw reply related
* [PATCH 10/15] ARM: clps711x: Add FIQ interrupt handling
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
CLPS711X-target CPU can have a several FIQ interrupts. With this patch
we adds handling for a one which will be used for ALSA PCM later.
Since FIQ have a separate handler we only add "mask" and "unmask" calls
which will used for enable/disable_irq functions.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/common.c | 37 ++++++++++++++++++++++-
arch/arm/mach-clps711x/common.h | 2 +-
arch/arm/mach-clps711x/include/mach/clps711x.h | 3 ++
3 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/arch/arm/mach-clps711x/common.c b/arch/arm/mach-clps711x/common.c
index 3cc0380..c5d0c63 100644
--- a/arch/arm/mach-clps711x/common.c
+++ b/arch/arm/mach-clps711x/common.c
@@ -30,6 +30,7 @@
#include <linux/clk-provider.h>
#include <asm/exception.h>
+#include <asm/mach/irq.h>
#include <asm/mach/map.h>
#include <asm/mach/time.h>
#include <asm/system_misc.h>
@@ -91,7 +92,7 @@ static void int1_unmask(struct irq_data *d)
}
static struct irq_chip int1_chip = {
- .name = "Interrupt Vector 1 ",
+ .name = "Interrupt Vector 1",
.irq_ack = int1_ack,
.irq_eoi = int1_eoi,
.irq_mask = int1_mask,
@@ -128,13 +129,37 @@ static void int2_unmask(struct irq_data *d)
}
static struct irq_chip int2_chip = {
- .name = "Interrupt Vector 2 ",
+ .name = "Interrupt Vector 2",
.irq_ack = int2_ack,
.irq_eoi = int2_eoi,
.irq_mask = int2_mask,
.irq_unmask = int2_unmask,
};
+static void int3_mask(struct irq_data *d)
+{
+ u32 intmr3;
+
+ intmr3 = clps_readl(INTMR3);
+ intmr3 &= ~(1 << (d->irq - 32));
+ clps_writel(intmr3, INTMR3);
+}
+
+static void int3_unmask(struct irq_data *d)
+{
+ u32 intmr3;
+
+ intmr3 = clps_readl(INTMR3);
+ intmr3 |= 1 << (d->irq - 32);
+ clps_writel(intmr3, INTMR3);
+}
+
+static struct irq_chip int3_chip = {
+ .name = "Interrupt Vector 3",
+ .irq_mask = int3_mask,
+ .irq_unmask = int3_unmask,
+};
+
struct clps711x_irqdesc {
int nr;
struct irq_chip *chip;
@@ -190,6 +215,14 @@ void __init clps711x_init_irq(void)
set_irq_flags(clps711x_irqdescs[i].nr,
IRQF_VALID | IRQF_PROBE);
}
+
+ if (IS_ENABLED(CONFIG_FIQ)) {
+ irq_set_chip_and_handler(IRQ_DAIINT, &int3_chip,
+ handle_bad_irq);
+ set_irq_flags(IRQ_DAIINT,
+ IRQF_VALID | IRQF_PROBE | IRQF_NOAUTOEN);
+ init_FIQ(0);
+ }
}
inline u32 fls16(u32 x)
diff --git a/arch/arm/mach-clps711x/common.h b/arch/arm/mach-clps711x/common.h
index 9d3e9db..d12d647 100644
--- a/arch/arm/mach-clps711x/common.h
+++ b/arch/arm/mach-clps711x/common.h
@@ -4,7 +4,7 @@
* Common bits.
*/
-#define CLPS711X_NR_IRQS (30)
+#define CLPS711X_NR_IRQS (33)
#define CLPS711X_NR_GPIO (4 * 8 + 3)
#define CLPS711X_GPIO(port,bit) ((port) * 8 + (bit))
diff --git a/arch/arm/mach-clps711x/include/mach/clps711x.h b/arch/arm/mach-clps711x/include/mach/clps711x.h
index 1f4728d..01d1b95 100644
--- a/arch/arm/mach-clps711x/include/mach/clps711x.h
+++ b/arch/arm/mach-clps711x/include/mach/clps711x.h
@@ -298,4 +298,7 @@
#define IRQ_UTXINT2 (16 + 12)
#define IRQ_URXINT2 (16 + 13)
+/* INTSR3 Interrupts */
+#define IRQ_DAIINT (32 + 0)
+
#endif /* __MACH_CLPS711X_H */
--
1.7.8.6
^ permalink raw reply related
* [PATCH 11/15] ARM: clps711x: Unused empty "ACK" calls for IRQ-chips removed
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/common.c | 10 ----------
1 files changed, 0 insertions(+), 10 deletions(-)
diff --git a/arch/arm/mach-clps711x/common.c b/arch/arm/mach-clps711x/common.c
index c5d0c63..14beac5 100644
--- a/arch/arm/mach-clps711x/common.c
+++ b/arch/arm/mach-clps711x/common.c
@@ -66,10 +66,6 @@ static void int1_mask(struct irq_data *d)
clps_writel(intmr1, INTMR1);
}
-static void int1_ack(struct irq_data *d)
-{
-}
-
static void int1_eoi(struct irq_data *d)
{
switch (d->irq) {
@@ -93,7 +89,6 @@ static void int1_unmask(struct irq_data *d)
static struct irq_chip int1_chip = {
.name = "Interrupt Vector 1",
- .irq_ack = int1_ack,
.irq_eoi = int1_eoi,
.irq_mask = int1_mask,
.irq_unmask = int1_unmask,
@@ -108,10 +103,6 @@ static void int2_mask(struct irq_data *d)
clps_writel(intmr2, INTMR2);
}
-static void int2_ack(struct irq_data *d)
-{
-}
-
static void int2_eoi(struct irq_data *d)
{
switch (d->irq) {
@@ -130,7 +121,6 @@ static void int2_unmask(struct irq_data *d)
static struct irq_chip int2_chip = {
.name = "Interrupt Vector 2",
- .irq_ack = int2_ack,
.irq_eoi = int2_eoi,
.irq_mask = int2_mask,
.irq_unmask = int2_unmask,
--
1.7.8.6
^ permalink raw reply related
* [PATCH 12/15] ARM: clps711x: autcpu12: Special driver for handling NAND memory is removed
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
This patch provide migration to using "gpio-nand" and "basic-mmio-gpio"
drivers instead of using special driver for handling NAND memory.
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/autcpu12.c | 99 ++++++++++
arch/arm/mach-clps711x/include/mach/autcpu12.h | 10 -
drivers/mtd/nand/Kconfig | 7 -
drivers/mtd/nand/Makefile | 1 -
drivers/mtd/nand/autcpu12.c | 237 ------------------------
5 files changed, 99 insertions(+), 255 deletions(-)
delete mode 100644 drivers/mtd/nand/autcpu12.c
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/autcpu12.c
index 8f9b2e0..8e2f61b 100644
--- a/arch/arm/mach-clps711x/autcpu12.c
+++ b/arch/arm/mach-clps711x/autcpu12.c
@@ -23,9 +23,13 @@
#include <linux/string.h>
#include <linux/mm.h>
#include <linux/io.h>
+#include <linux/gpio.h>
#include <linux/ioport.h>
#include <linux/interrupt.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mtd/nand-gpio.h>
#include <linux/platform_device.h>
+#include <linux/basic_mmio_gpio.h>
#include <mach/hardware.h>
#include <asm/sizes.h>
@@ -43,6 +47,15 @@
#define AUTCPU12_CS8900_BASE (CS2_PHYS_BASE + 0x300)
#define AUTCPU12_CS8900_IRQ (IRQ_EINT3)
+#define AUTCPU12_SMC_BASE (CS1_PHYS_BASE + 0x06000000)
+#define AUTCPU12_SMC_SEL_BASE (AUTCPU12_SMC_BASE + 0x10)
+
+#define AUTCPU12_MMGPIO_BASE (CLPS711X_NR_GPIO)
+#define AUTCPU12_SMC_NCE (AUTCPU12_MMGPIO_BASE + 0) /* Bit 0 */
+#define AUTCPU12_SMC_RDY CLPS711X_GPIO(1, 2)
+#define AUTCPU12_SMC_ALE CLPS711X_GPIO(1, 3)
+#define AUTCPU12_SMC_CLE CLPS711X_GPIO(1, 3)
+
static struct resource autcpu12_cs8900_resource[] __initdata = {
DEFINE_RES_MEM(AUTCPU12_CS8900_BASE, SZ_1K),
DEFINE_RES_IRQ(AUTCPU12_CS8900_IRQ),
@@ -59,6 +72,81 @@ static struct platform_device autcpu12_nvram_pdev __initdata = {
.num_resources = ARRAY_SIZE(autcpu12_nvram_resource),
};
+static struct resource autcpu12_nand_resource[] __initdata = {
+ DEFINE_RES_MEM(AUTCPU12_SMC_BASE, SZ_16),
+};
+
+static struct mtd_partition autcpu12_nand_parts[] __initdata = {
+ {
+ .name = "AUTCPU12 flash partition 1",
+ .offset = 0,
+ .size = SZ_8M,
+ },
+ {
+ .name = "AUTCPU12 flash partition 2",
+ .offset = MTDPART_OFS_APPEND,
+ .size = MTDPART_SIZ_FULL,
+ },
+};
+
+static void __init autcpu12_adjust_parts(struct gpio_nand_platdata *pdata,
+ size_t sz)
+{
+ switch (sz) {
+ case SZ_16M:
+ case SZ_32M:
+ break;
+ case SZ_64M:
+ case SZ_128M:
+ pdata->parts[0].size = SZ_16M;
+ break;
+ default:
+ pr_warn("Unsupported SmartMedia device size %u\n", sz);
+ break;
+ }
+}
+
+static struct gpio_nand_platdata autcpu12_nand_pdata __initdata = {
+ .gpio_rdy = AUTCPU12_SMC_RDY,
+ .gpio_nce = AUTCPU12_SMC_NCE,
+ .gpio_ale = AUTCPU12_SMC_ALE,
+ .gpio_cle = AUTCPU12_SMC_CLE,
+ .gpio_nwp = -1,
+ .chip_delay = 20,
+ .parts = autcpu12_nand_parts,
+ .num_parts = ARRAY_SIZE(autcpu12_nand_parts),
+ .adjust_parts = autcpu12_adjust_parts,
+};
+
+static struct platform_device autcpu12_nand __initdata = {
+ .name = "gpio-nand",
+ .id = -1,
+ .resource = autcpu12_nand_resource,
+ .num_resources = ARRAY_SIZE(autcpu12_nand_resource),
+ .dev = {
+ .platform_data = &autcpu12_nand_pdata,
+ },
+};
+
+static struct resource autcpu12_mmgpio_resource[] __initdata = {
+ DEFINE_RES_MEM_NAMED(AUTCPU12_SMC_SEL_BASE, SZ_1, "dat"),
+};
+
+static struct bgpio_pdata autcpu12_mmgpio_pdata __initdata = {
+ .base = AUTCPU12_MMGPIO_BASE,
+ .ngpio = 8,
+};
+
+static struct platform_device autcpu12_mmgpio __initdata = {
+ .name = "basic-mmio-gpio",
+ .id = -1,
+ .resource = autcpu12_mmgpio_resource,
+ .num_resources = ARRAY_SIZE(autcpu12_mmgpio_resource),
+ .dev = {
+ .platform_data = &autcpu12_mmgpio_pdata,
+ },
+};
+
static void __init autcpu12_init(void)
{
platform_device_register_simple("uart-clps711x", 0, NULL, 0);
@@ -68,14 +156,25 @@ static void __init autcpu12_init(void)
platform_device_register_simple("cs89x0", 0, autcpu12_cs8900_resource,
ARRAY_SIZE(autcpu12_cs8900_resource));
+ platform_device_register(&autcpu12_mmgpio);
+
platform_device_register(&autcpu12_nvram_pdev);
}
+static void __init autcpu12_init_late(void)
+{
+ if (IS_ENABLED(MTD_NAND_GPIO) && IS_ENABLED(GPIO_GENERIC_PLATFORM)) {
+ /* We are need both drivers to handle NAND */
+ platform_device_register(&autcpu12_nand);
+ }
+}
+
MACHINE_START(AUTCPU12, "autronix autcpu12")
/* Maintainer: Thomas Gleixner */
.atag_offset = 0x20000,
.map_io = clps711x_map_io,
.init_machine = autcpu12_init,
+ .init_late = autcpu12_init_late,
.nr_irqs = CLPS711X_NR_IRQS,
.init_irq = clps711x_init_irq,
.handle_irq = clps711x_handle_irq,
diff --git a/arch/arm/mach-clps711x/include/mach/autcpu12.h b/arch/arm/mach-clps711x/include/mach/autcpu12.h
index b077abd..0452f5f 100644
--- a/arch/arm/mach-clps711x/include/mach/autcpu12.h
+++ b/arch/arm/mach-clps711x/include/mach/autcpu12.h
@@ -40,8 +40,6 @@
#define AUTCPU12_PHYS_CSAUX1 CS1_PHYS_BASE +0x04000000 /* physical */
-#define AUTCPU12_PHYS_SMC CS1_PHYS_BASE +0x06000000 /* physical */
-
#define AUTCPU12_PHYS_CAN CS1_PHYS_BASE +0x08000000 /* physical */
#define AUTCPU12_PHYS_TOUCH CS1_PHYS_BASE +0x0A000000 /* physical */
@@ -50,14 +48,6 @@
#define AUTCPU12_PHYS_LPT CS1_PHYS_BASE +0x0E000000 /* physical */
-/*
-* defines for smartmedia card access
-*/
-#define AUTCPU12_SMC_RDY (1<<2)
-#define AUTCPU12_SMC_ALE (1<<3)
-#define AUTCPU12_SMC_CLE (1<<4)
-#define AUTCPU12_SMC_PORT_OFFSET PBDR
-#define AUTCPU12_SMC_SELECT_OFFSET 0x10
/*
* defines for lcd contrast
*/
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
index a803d9b..7aff98a 100644
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -49,13 +49,6 @@ config MTD_NAND_MUSEUM_IDS
NAND chips (page size 256 byte, erase size 4-8KiB). The IDs
of these chips were reused by later, larger chips.
-config MTD_NAND_AUTCPU12
- tristate "SmartMediaCard on autronix autcpu12 board"
- depends on ARCH_AUTCPU12
- help
- This enables the driver for the autronix autcpu12 board to
- access the SmartMediaCard.
-
config MTD_NAND_DENALI
tristate "Support Denali NAND controller"
help
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
index 44fca05..d2bd10b 100644
--- a/drivers/mtd/nand/Makefile
+++ b/drivers/mtd/nand/Makefile
@@ -11,7 +11,6 @@ obj-$(CONFIG_MTD_SM_COMMON) += sm_common.o
obj-$(CONFIG_MTD_NAND_CAFE) += cafe_nand.o
obj-$(CONFIG_MTD_NAND_SPIA) += spia.o
obj-$(CONFIG_MTD_NAND_AMS_DELTA) += ams-delta.o
-obj-$(CONFIG_MTD_NAND_AUTCPU12) += autcpu12.o
obj-$(CONFIG_MTD_NAND_DENALI) += denali.o
obj-$(CONFIG_MTD_NAND_DENALI_PCI) += denali_pci.o
obj-$(CONFIG_MTD_NAND_DENALI_DT) += denali_dt.o
diff --git a/drivers/mtd/nand/autcpu12.c b/drivers/mtd/nand/autcpu12.c
deleted file mode 100644
index 04769a4..0000000
--- a/drivers/mtd/nand/autcpu12.c
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * drivers/mtd/autcpu12.c
- *
- * Copyright (c) 2002 Thomas Gleixner <tgxl@linutronix.de>
- *
- * Derived from drivers/mtd/spia.c
- * Copyright (C) 2000 Steven J. Hill (sjhill at realitydiluted.com)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * Overview:
- * This is a device driver for the NAND flash device found on the
- * autronix autcpu12 board, which is a SmartMediaCard. It supports
- * 16MiB, 32MiB and 64MiB cards.
- *
- *
- * 02-12-2002 TG Cleanup of module params
- *
- * 02-20-2002 TG adjusted for different rd/wr address support
- * added support for read device ready/busy line
- * added page_cache
- *
- * 10-06-2002 TG 128K card support added
- */
-
-#include <linux/slab.h>
-#include <linux/init.h>
-#include <linux/module.h>
-#include <linux/mtd/mtd.h>
-#include <linux/mtd/nand.h>
-#include <linux/mtd/partitions.h>
-#include <asm/io.h>
-#include <mach/hardware.h>
-#include <asm/sizes.h>
-#include <mach/autcpu12.h>
-
-/*
- * MTD structure for AUTCPU12 board
- */
-static struct mtd_info *autcpu12_mtd = NULL;
-static void __iomem *autcpu12_fio_base;
-
-/*
- * Define partitions for flash devices
- */
-static struct mtd_partition partition_info16k[] = {
- { .name = "AUTCPU12 flash partition 1",
- .offset = 0,
- .size = 8 * SZ_1M },
- { .name = "AUTCPU12 flash partition 2",
- .offset = 8 * SZ_1M,
- .size = 8 * SZ_1M },
-};
-
-static struct mtd_partition partition_info32k[] = {
- { .name = "AUTCPU12 flash partition 1",
- .offset = 0,
- .size = 8 * SZ_1M },
- { .name = "AUTCPU12 flash partition 2",
- .offset = 8 * SZ_1M,
- .size = 24 * SZ_1M },
-};
-
-static struct mtd_partition partition_info64k[] = {
- { .name = "AUTCPU12 flash partition 1",
- .offset = 0,
- .size = 16 * SZ_1M },
- { .name = "AUTCPU12 flash partition 2",
- .offset = 16 * SZ_1M,
- .size = 48 * SZ_1M },
-};
-
-static struct mtd_partition partition_info128k[] = {
- { .name = "AUTCPU12 flash partition 1",
- .offset = 0,
- .size = 16 * SZ_1M },
- { .name = "AUTCPU12 flash partition 2",
- .offset = 16 * SZ_1M,
- .size = 112 * SZ_1M },
-};
-
-#define NUM_PARTITIONS16K 2
-#define NUM_PARTITIONS32K 2
-#define NUM_PARTITIONS64K 2
-#define NUM_PARTITIONS128K 2
-/*
- * hardware specific access to control-lines
- *
- * ALE bit 4 autcpu12_pedr
- * CLE bit 5 autcpu12_pedr
- * NCE bit 0 fio_ctrl
- *
- */
-static void autcpu12_hwcontrol(struct mtd_info *mtd, int cmd,
- unsigned int ctrl)
-{
- struct nand_chip *chip = mtd->priv;
-
- if (ctrl & NAND_CTRL_CHANGE) {
- void __iomem *addr;
- unsigned char bits;
-
- bits = clps_readb(AUTCPU12_SMC_PORT_OFFSET) & ~0x30;
- bits |= (ctrl & NAND_CLE) << 4;
- bits |= (ctrl & NAND_ALE) << 2;
- clps_writeb(bits, AUTCPU12_SMC_PORT_OFFSET);
-
- addr = autcpu12_fio_base + AUTCPU12_SMC_SELECT_OFFSET;
- writeb((readb(addr) & ~0x1) | (ctrl & NAND_NCE), addr);
- }
-
- if (cmd != NAND_CMD_NONE)
- writeb(cmd, chip->IO_ADDR_W);
-}
-
-/*
- * read device ready pin
- */
-int autcpu12_device_ready(struct mtd_info *mtd)
-{
- return clps_readb(AUTCPU12_SMC_PORT_OFFSET) & AUTCPU12_SMC_RDY;
-}
-
-/*
- * Main initialization routine
- */
-static int __init autcpu12_init(void)
-{
- struct nand_chip *this;
- int err = 0;
-
- /* Allocate memory for MTD device structure and private data */
- autcpu12_mtd = kmalloc(sizeof(struct mtd_info) + sizeof(struct nand_chip),
- GFP_KERNEL);
- if (!autcpu12_mtd) {
- printk("Unable to allocate AUTCPU12 NAND MTD device structure.\n");
- err = -ENOMEM;
- goto out;
- }
-
- /* map physical address */
- autcpu12_fio_base = ioremap(AUTCPU12_PHYS_SMC, SZ_1K);
- if (!autcpu12_fio_base) {
- printk("Ioremap autcpu12 SmartMedia Card failed\n");
- err = -EIO;
- goto out_mtd;
- }
-
- /* Get pointer to private data */
- this = (struct nand_chip *)(&autcpu12_mtd[1]);
-
- /* Initialize structures */
- memset(autcpu12_mtd, 0, sizeof(struct mtd_info));
- memset(this, 0, sizeof(struct nand_chip));
-
- /* Link the private data with the MTD structure */
- autcpu12_mtd->priv = this;
- autcpu12_mtd->owner = THIS_MODULE;
-
- /* Set address of NAND IO lines */
- this->IO_ADDR_R = autcpu12_fio_base;
- this->IO_ADDR_W = autcpu12_fio_base;
- this->cmd_ctrl = autcpu12_hwcontrol;
- this->dev_ready = autcpu12_device_ready;
- /* 20 us command delay time */
- this->chip_delay = 20;
- this->ecc.mode = NAND_ECC_SOFT;
-
- /* Enable the following for a flash based bad block table */
- /*
- this->bbt_options = NAND_BBT_USE_FLASH;
- */
- this->bbt_options = NAND_BBT_USE_FLASH;
-
- /* Scan to find existence of the device */
- if (nand_scan(autcpu12_mtd, 1)) {
- err = -ENXIO;
- goto out_ior;
- }
-
- /* Register the partitions */
- switch (autcpu12_mtd->size) {
- case SZ_16M:
- mtd_device_register(autcpu12_mtd, partition_info16k,
- NUM_PARTITIONS16K);
- break;
- case SZ_32M:
- mtd_device_register(autcpu12_mtd, partition_info32k,
- NUM_PARTITIONS32K);
- break;
- case SZ_64M:
- mtd_device_register(autcpu12_mtd, partition_info64k,
- NUM_PARTITIONS64K);
- break;
- case SZ_128M:
- mtd_device_register(autcpu12_mtd, partition_info128k,
- NUM_PARTITIONS128K);
- break;
- default:
- printk("Unsupported SmartMedia device\n");
- err = -ENXIO;
- goto out_ior;
- }
- goto out;
-
- out_ior:
- iounmap(autcpu12_fio_base);
- out_mtd:
- kfree(autcpu12_mtd);
- out:
- return err;
-}
-
-module_init(autcpu12_init);
-
-/*
- * Clean up routine
- */
-static void __exit autcpu12_cleanup(void)
-{
- /* Release resources, unregister device */
- nand_release(autcpu12_mtd);
-
- /* unmap physical address */
- iounmap(autcpu12_fio_base);
-
- /* Free the MTD device structure */
- kfree(autcpu12_mtd);
-}
-
-module_exit(autcpu12_cleanup);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>");
-MODULE_DESCRIPTION("Glue layer for SmartMediaCard on autronix autcpu12");
--
1.7.8.6
^ permalink raw reply related
* [PATCH 13/15] ARM: clps711x: Rename board files to match functionality
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/mach-clps711x/Makefile | 12 ++++++------
.../mach-clps711x/{autcpu12.c => board-autcpu12.c} | 0
.../mach-clps711x/{cdb89712.c => board-cdb89712.c} | 0
.../mach-clps711x/{clep7312.c => board-clep7312.c} | 0
.../mach-clps711x/{edb7211.c => board-edb7211.c} | 0
.../mach-clps711x/{fortunet.c => board-fortunet.c} | 0
arch/arm/mach-clps711x/{p720t.c => board-p720t.c} | 0
7 files changed, 6 insertions(+), 6 deletions(-)
rename arch/arm/mach-clps711x/{autcpu12.c => board-autcpu12.c} (100%)
rename arch/arm/mach-clps711x/{cdb89712.c => board-cdb89712.c} (100%)
rename arch/arm/mach-clps711x/{clep7312.c => board-clep7312.c} (100%)
rename arch/arm/mach-clps711x/{edb7211.c => board-edb7211.c} (100%)
rename arch/arm/mach-clps711x/{fortunet.c => board-fortunet.c} (100%)
rename arch/arm/mach-clps711x/{p720t.c => board-p720t.c} (100%)
diff --git a/arch/arm/mach-clps711x/Makefile b/arch/arm/mach-clps711x/Makefile
index 9cf2d1c..992995a 100644
--- a/arch/arm/mach-clps711x/Makefile
+++ b/arch/arm/mach-clps711x/Makefile
@@ -9,9 +9,9 @@ obj-m :=
obj-n :=
obj- :=
-obj-$(CONFIG_ARCH_AUTCPU12) += autcpu12.o
-obj-$(CONFIG_ARCH_CDB89712) += cdb89712.o
-obj-$(CONFIG_ARCH_CLEP7312) += clep7312.o
-obj-$(CONFIG_ARCH_EDB7211) += edb7211.o
-obj-$(CONFIG_ARCH_FORTUNET) += fortunet.o
-obj-$(CONFIG_ARCH_P720T) += p720t.o
+obj-$(CONFIG_ARCH_AUTCPU12) += board-autcpu12.o
+obj-$(CONFIG_ARCH_CDB89712) += board-cdb89712.o
+obj-$(CONFIG_ARCH_CLEP7312) += board-clep7312.o
+obj-$(CONFIG_ARCH_EDB7211) += board-edb7211.o
+obj-$(CONFIG_ARCH_FORTUNET) += board-fortunet.o
+obj-$(CONFIG_ARCH_P720T) += board-p720t.o
diff --git a/arch/arm/mach-clps711x/autcpu12.c b/arch/arm/mach-clps711x/board-autcpu12.c
similarity index 100%
rename from arch/arm/mach-clps711x/autcpu12.c
rename to arch/arm/mach-clps711x/board-autcpu12.c
diff --git a/arch/arm/mach-clps711x/cdb89712.c b/arch/arm/mach-clps711x/board-cdb89712.c
similarity index 100%
rename from arch/arm/mach-clps711x/cdb89712.c
rename to arch/arm/mach-clps711x/board-cdb89712.c
diff --git a/arch/arm/mach-clps711x/clep7312.c b/arch/arm/mach-clps711x/board-clep7312.c
similarity index 100%
rename from arch/arm/mach-clps711x/clep7312.c
rename to arch/arm/mach-clps711x/board-clep7312.c
diff --git a/arch/arm/mach-clps711x/edb7211.c b/arch/arm/mach-clps711x/board-edb7211.c
similarity index 100%
rename from arch/arm/mach-clps711x/edb7211.c
rename to arch/arm/mach-clps711x/board-edb7211.c
diff --git a/arch/arm/mach-clps711x/fortunet.c b/arch/arm/mach-clps711x/board-fortunet.c
similarity index 100%
rename from arch/arm/mach-clps711x/fortunet.c
rename to arch/arm/mach-clps711x/board-fortunet.c
diff --git a/arch/arm/mach-clps711x/p720t.c b/arch/arm/mach-clps711x/board-p720t.c
similarity index 100%
rename from arch/arm/mach-clps711x/p720t.c
rename to arch/arm/mach-clps711x/board-p720t.c
--
1.7.8.6
^ permalink raw reply related
* [PATCH 14/15] ARM: clps711x: Update defconfig due latest changes and new kernel symbols
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
arch/arm/configs/clps711x_defconfig | 30 +++++++++++++++++++++---------
1 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/arch/arm/configs/clps711x_defconfig b/arch/arm/configs/clps711x_defconfig
index 86209d1..1cd94c3 100644
--- a/arch/arm/configs/clps711x_defconfig
+++ b/arch/arm/configs/clps711x_defconfig
@@ -1,10 +1,14 @@
-CONFIG_EXPERIMENTAL=y
+CONFIG_KERNEL_LZMA=y
CONFIG_SYSVIPC=y
CONFIG_LOG_BUF_SHIFT=14
CONFIG_BLK_DEV_INITRD=y
+CONFIG_RD_LZMA=y
CONFIG_EMBEDDED=y
+CONFIG_SLOB=y
+CONFIG_JUMP_LABEL=y
+# CONFIG_LBDAF is not set
CONFIG_PARTITION_ADVANCED=y
-# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_IOSCHED_CFQ is not set
CONFIG_ARCH_CLPS711X=y
CONFIG_ARCH_AUTCPU12=y
CONFIG_ARCH_CDB89712=y
@@ -12,8 +16,10 @@ CONFIG_ARCH_CLEP7312=y
CONFIG_ARCH_EDB7211=y
CONFIG_ARCH_P720T=y
CONFIG_ARCH_FORTUNET=y
+CONFIG_AEABI=y
CONFIG_ZBOOT_ROM_TEXT=0x0
CONFIG_ZBOOT_ROM_BSS=0x0
+# CONFIG_COREDUMP is not set
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
@@ -22,6 +28,7 @@ CONFIG_INET=y
CONFIG_IRDA=y
CONFIG_IRTTY_SIR=y
CONFIG_EP7211_DONGLE=y
+# CONFIG_WIRELESS is not set
CONFIG_MTD=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=y
@@ -31,24 +38,21 @@ CONFIG_MTD_JEDECPROBE=y
CONFIG_MTD_CFI_INTELEXT=y
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_CFI_STAA=y
-CONFIG_MTD_CDB89712=y
CONFIG_MTD_AUTCPU12=y
CONFIG_MTD_PLATRAM=y
-CONFIG_BLK_DEV_RAM=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_GPIO=y
CONFIG_NETDEVICES=y
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_AMD is not set
+# CONFIG_NET_CADENCE is not set
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_NET_VENDOR_CHELSIO is not set
CONFIG_CS89x0=y
+CONFIG_CS89x0_PLATFORM=y
# CONFIG_NET_VENDOR_FARADAY is not set
-# CONFIG_NET_VENDOR_FUJITSU is not set
-# CONFIG_NET_VENDOR_HP is not set
# CONFIG_NET_VENDOR_INTEL is not set
# CONFIG_NET_VENDOR_MARVELL is not set
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
-# CONFIG_NET_VENDOR_RACAL is not set
# CONFIG_NET_VENDOR_SEEQ is not set
# CONFIG_NET_VENDOR_SMSC is not set
# CONFIG_NET_VENDOR_STMICRO is not set
@@ -59,14 +63,22 @@ CONFIG_CS89x0=y
# CONFIG_VT is not set
CONFIG_SERIAL_CLPS711X_CONSOLE=y
# CONFIG_HW_RANDOM is not set
+CONFIG_SPI=y
+CONFIG_GPIO_GENERIC_PLATFORM=y
# CONFIG_HWMON is not set
CONFIG_FB=y
CONFIG_FB_CLPS711X=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_PLATFORM=y
# CONFIG_USB_SUPPORT is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_EXT2_FS=y
+CONFIG_CRAMFS=y
CONFIG_MINIX_FS=y
# CONFIG_NETWORK_FILESYSTEMS is not set
# CONFIG_FTRACE is not set
--
1.7.8.6
^ permalink raw reply related
* [PATCH 15/15] MAINTAINERS: Add ARM CLPS711X entry
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Signed-off-by: Alexander Shiyan <shc_work@mail.ru>
---
MAINTAINERS | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/MAINTAINERS b/MAINTAINERS
index 307d822..1cc6a09 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -707,6 +707,12 @@ S: Maintained
F: arch/arm/mach-cns3xxx/
T: git git://git.infradead.org/users/cbou/linux-cns3xxx.git
+ARM/CIRRUS LOGIC CLPS711X ARM ARCHITECTURE
+M: Alexander Shiyan <shc_work@mail.ru>
+L: linux-arm-kernel at lists.infradead.org (moderated for non-subscribers)
+S: Odd Fixes
+F: arch/arm/mach-clps711x/
+
ARM/CIRRUS LOGIC EP93XX ARM ARCHITECTURE
M: Hartley Sweeten <hsweeten@visionengravers.com>
M: Ryan Mallon <rmallon@gmail.com>
--
1.7.8.6
^ permalink raw reply related
* [PATCH 00/15] ARM: Patchset for CLPS711X
From: Alexander Shiyan @ 2012-11-01 9:26 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1351762006-27368-1-git-send-email-shc_work@mail.ru>
Here is a next small patchset for a CLPS711X-target.
The main direction of this patchset - approaching the platform to the
possibility of using configurations with multiple platforms in a single
kernel. Added support of the majority of the necessary kernel symbol.
Also part of the driver code used only for the platform was moved to the
board code and converted to the use of standard drivers.
Alexander Shiyan (15):
ARM: clps711x: Load serial driver from boards
ARM: clps711x: Using platform_driver for ethernet device
ARM: clps711x: p720t: Using "leds-gpio" driver for LED control
ARM: clps711x: Transform clps711x-framebuffer to platform driver and
use it
ARM: clps711x: p720t: Unneeded inclusion of head-sa1100.S removed
ARM: clps711x: Always select AUTO_ZRELADDR for a platform
ARM: clps711x: cdb89712: Special driver for handling memory is
removed
ARM: clps711x: Implement usage "SPARSE_IRQ" kernel option for a
platform
ARM: clps711x: Implement usage "MULTI_IRQ_HANDLER" kernel option for
a platform
ARM: clps711x: Add FIQ interrupt handling
ARM: clps711x: Unused empty "ACK" calls for IRQ-chips removed
ARM: clps711x: autcpu12: Special driver for handling NAND memory is
removed
ARM: clps711x: Rename board files to match functionality
ARM: clps711x: Update defconfig due latest changes and new kernel
symbols
MAINTAINERS: Add ARM CLPS711X entry
MAINTAINERS | 6 +
arch/arm/Kconfig | 3 +
arch/arm/boot/compressed/Makefile | 5 -
arch/arm/configs/clps711x_defconfig | 30 ++-
arch/arm/mach-clps711x/Kconfig | 2 -
arch/arm/mach-clps711x/Makefile | 12 +-
arch/arm/mach-clps711x/Makefile.boot | 1 -
arch/arm/mach-clps711x/autcpu12.c | 83 ------
arch/arm/mach-clps711x/board-autcpu12.c | 183 +++++++++++++
arch/arm/mach-clps711x/board-cdb89712.c | 150 +++++++++++
.../mach-clps711x/{clep7312.c => board-clep7312.c} | 11 +-
.../mach-clps711x/{edb7211.c => board-edb7211.c} | 34 ++-
.../mach-clps711x/{fortunet.c => board-fortunet.c} | 11 +-
arch/arm/mach-clps711x/{p720t.c => board-p720t.c} | 82 +++----
arch/arm/mach-clps711x/cdb89712.c | 63 -----
arch/arm/mach-clps711x/common.c | 86 ++++++-
arch/arm/mach-clps711x/common.h | 7 +-
arch/arm/mach-clps711x/include/mach/autcpu12.h | 13 -
arch/arm/mach-clps711x/include/mach/clps711x.h | 24 ++
arch/arm/mach-clps711x/include/mach/entry-macro.S | 51 ----
arch/arm/mach-clps711x/include/mach/hardware.h | 12 +-
arch/arm/mach-clps711x/include/mach/irqs.h | 46 ----
drivers/mtd/maps/Kconfig | 7 -
drivers/mtd/maps/Makefile | 1 -
drivers/mtd/maps/cdb89712.c | 278 --------------------
drivers/mtd/nand/Kconfig | 7 -
drivers/mtd/nand/Makefile | 1 -
drivers/mtd/nand/autcpu12.c | 237 -----------------
drivers/tty/serial/clps711x.c | 16 --
drivers/video/clps711xfb.c | 21 +-
30 files changed, 567 insertions(+), 916 deletions(-)
delete mode 100644 arch/arm/mach-clps711x/autcpu12.c
create mode 100644 arch/arm/mach-clps711x/board-autcpu12.c
create mode 100644 arch/arm/mach-clps711x/board-cdb89712.c
rename arch/arm/mach-clps711x/{clep7312.c => board-clep7312.c} (85%)
rename arch/arm/mach-clps711x/{edb7211.c => board-edb7211.c} (75%)
rename arch/arm/mach-clps711x/{fortunet.c => board-fortunet.c} (89%)
rename arch/arm/mach-clps711x/{p720t.c => board-p720t.c} (74%)
delete mode 100644 arch/arm/mach-clps711x/cdb89712.c
delete mode 100644 arch/arm/mach-clps711x/include/mach/entry-macro.S
delete mode 100644 arch/arm/mach-clps711x/include/mach/irqs.h
delete mode 100644 drivers/mtd/maps/cdb89712.c
delete mode 100644 drivers/mtd/nand/autcpu12.c
--
1.7.8.6
^ permalink raw reply
* [PATCH 4/4] arm/dts: am33xx: Add CPSW and MDIO module nodes for AM33XX
From: Cousson, Benoit @ 2012-11-01 9:28 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <20121101074508.GA2637@netboy.at.omicron.at>
On 11/1/2012 8:45 AM, Richard Cochran wrote:
> On Wed, Oct 31, 2012 at 04:17:27PM +0100, Benoit Cousson wrote:
>>> + compatible = "ti,cpsw";
>>> + ti,hwmods = "cpgmac0";
>>> + cpdma_channels = <8>;
>>> + host_port_no = <0>;
>>> + cpdma_reg_ofs = <0x800>;
>>> + cpdma_sram_ofs = <0xa00>;
>>> + ale_reg_ofs = <0xd00>;
>>> + ale_entries = <1024>;
>>> + host_port_reg_ofs = <0x108>;
>>> + hw_stats_reg_ofs = <0x900>;
>>> + bd_ram_ofs = <0x2000>;
>>> + bd_ram_size = <0x2000>;
>>> + no_bd_ram = <0>;
>>> + rx_descs = <64>;
>>> + mac_control = <0x20>;
>>
>> Do you have to store all these data in the DTS? Cannot it be in the driver?
>>
>> Do you expect to have several instance of the same IP with different
>> parameters here?
>
> As I understand it, there are only two different layouts for the CPSW,
> the one in the dm814x and the one in the am335x. So I think it would
> work to put only the version register offet in the DT, and the let the
> driver figure out the rest from there.
Yes, that's indeed better. We did that for other IPs already (GPIO, I2C...)
> But if TI is planning on reordering the registers with each new
> silicon revision, again and again, then it might make sense to keep
> the offsets in the DT.
Yeah, let's assume they will do a better job in the future.
All these offset registers information does belong to the driver, and
even if the HW change a lot, I still rather hide that in the driver.
It will always be cleaner, most efficient, and will reduce the size if
the blob.
> [ I really wonder why the hardware people think that reshuffling the
> register layout constitutes an improvement. ]
I've been wondering that for ten years :-(
I'm always hoping it will be better some day.
Regards,
Benoit
^ permalink raw reply
* [PATCH RESEND] ARM: pxa27x_keypad: clear pending interrupts on keypad config
From: Haojian Zhuang @ 2012-11-01 9:35 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <87r4oiwin8.fsf@free.fr>
On Mon, Oct 29, 2012 at 2:34 AM, Robert Jarzmik <robert.jarzmik@free.fr> wrote:
> Vasily Khoruzhick <anarsoul@gmail.com> writes:
>
>> It behaves correctly, it just can't handle last keypress (because it's
>> booting Linux).
>> Even if it would be possible to fix this issue in bootloader it's
>> always nice to keep driver
>> failure-proof, so it does not fail even if bootloader left something
>> in non-consistent state.
> True.
> Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
>
> --
> Robert
Applied
Thanks
Haojian
^ permalink raw reply
* [RFC PATCH] ARM: OMAP4: ID: Improve features detection and check
From: Ivan Khoronzhuk @ 2012-11-01 10:23 UTC (permalink / raw)
To: linux-arm-kernel
Replaces several flags bearing the same meaning. There is no need
to set flags due to different omap types here, it can be checked
in appropriate places as well.
Cc: Tony Lindgren <tony@atomide.com>
Cc: Russell King <linux@arm.linux.org.uk>
Cc: linux-omap at vger.kernel.org
Cc: linux-arm-kernel at lists.infradead.org
Cc: linux-kernel at vger.kernel.org
Signed-off-by: Ivan Khoronzhuk <ivan.khoronzhuk@ti.com>
---
arch/arm/mach-omap2/id.c | 25 +++++++------------------
arch/arm/mach-omap2/soc.h | 8 ++------
2 files changed, 9 insertions(+), 24 deletions(-)
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c
index cf2362c..3c47a19 100644
--- a/arch/arm/mach-omap2/id.c
+++ b/arch/arm/mach-omap2/id.c
@@ -28,6 +28,9 @@
#include "soc.h"
#include "control.h"
+#define OMAP4_SILICON_TYPE_STANDARD 0x01
+#define OMAP4_SILICON_TYPE_PERFORMANCE 0x02
+
static unsigned int omap_revision;
static const char *cpu_rev;
u32 omap_features;
@@ -273,25 +276,11 @@ void __init omap4xxx_check_features(void)
{
u32 si_type;
- if (cpu_is_omap443x())
- omap_features |= OMAP4_HAS_MPU_1GHZ;
-
+ si_type =
+ (read_tap_reg(OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1) >> 16) & 0x03;
- if (cpu_is_omap446x()) {
- si_type =
- read_tap_reg(OMAP4_CTRL_MODULE_CORE_STD_FUSE_PROD_ID_1);
- switch ((si_type & (3 << 16)) >> 16) {
- case 2:
- /* High performance device */
- omap_features |= OMAP4_HAS_MPU_1_5GHZ;
- break;
- case 1:
- default:
- /* Standard device */
- omap_features |= OMAP4_HAS_MPU_1_2GHZ;
- break;
- }
- }
+ if (si_type == OMAP4_SILICON_TYPE_PERFORMANCE)
+ omap_features = OMAP4_HAS_PERF_SILICON;
}
void __init ti81xx_check_features(void)
diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h
index 0700964..f31d907 100644
--- a/arch/arm/mach-omap2/soc.h
+++ b/arch/arm/mach-omap2/soc.h
@@ -435,9 +435,7 @@ extern u32 omap_features;
#define OMAP3_HAS_IO_WAKEUP BIT(6)
#define OMAP3_HAS_SDRC BIT(7)
#define OMAP3_HAS_IO_CHAIN_CTRL BIT(8)
-#define OMAP4_HAS_MPU_1GHZ BIT(9)
-#define OMAP4_HAS_MPU_1_2GHZ BIT(10)
-#define OMAP4_HAS_MPU_1_5GHZ BIT(11)
+#define OMAP4_HAS_PERF_SILICON BIT(9)
#define OMAP3_HAS_FEATURE(feat,flag) \
@@ -465,9 +463,7 @@ static inline unsigned int omap4_has_ ##feat(void) \
return omap_features & OMAP4_HAS_ ##flag; \
} \
-OMAP4_HAS_FEATURE(mpu_1ghz, MPU_1GHZ)
-OMAP4_HAS_FEATURE(mpu_1_2ghz, MPU_1_2GHZ)
-OMAP4_HAS_FEATURE(mpu_1_5ghz, MPU_1_5GHZ)
+OMAP4_HAS_FEATURE(perf_silicon, PERF_SILICON)
#endif /* __ASSEMBLY__ */
--
1.7.9.5
^ permalink raw reply related
* [PATCH v3 01/11] clk: davinci - add main PLL clock driver
From: Sekhar Nori @ 2012-11-01 11:01 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <50912BCE.5000401@ti.com>
On 10/31/2012 7:16 PM, Murali Karicheri wrote:
> On 10/31/2012 08:29 AM, Sekhar Nori wrote:
>>> + /*
>>> + * if fixed_multiplier is non zero, multiply pllm value by this
>>> + * value.
>>> + */
>>> + if (pll_data->fixed_multiplier)
>>> + mult = pll_data->fixed_multiplier *
>>> + (mult & pll_data->pllm_mask);
>>> + else
>>> + mult = (mult & pll_data->pllm_mask) + 1;
>> Hmm, this is interpreting the 'mult' register field differently in both
>> cases. In one case it is 'actual multiplier - 1' and in other case it is
>> the 'actual multiplier' itself. Can we be sure that the mult register
>> definition will change whenever there is a fixed multiplier in the PLL
>> block? I don't think any of the existing DaVinci devices have a fixed
>> multiplier. Is this on keystone?
> Read section 6.4.3 (PLL Mode) in DM365 documentation (SPRUFG5a.pdf) that
> states PLL multiplies the clock by 2x the value in the PLLM. In the old
> code this is handled by a if cpu_is_* macro that we can't use in the
> driver. So this is represented by a fixed_multiplier that can be set to
> 2 for DM365 and zero on other SoCs.
Thanks for the clarification.
Regards,
Sekhar
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox