* [PATCH 02/30] video/omap: fix dependencies
From: Tomi Valkeinen @ 2011-10-03 6:53 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-3-git-send-email-arnd@arndb.de>
Hi Arnd,
On Sun, 2011-10-02 at 16:45 +0200, Arnd Bergmann wrote:
> The lcd_2430sdp and lcd_ldp drivers depend on TWL4030, which is not
> well expressed in the Kconfig. Create new configuration options for
> these in order to describe the dependencies correctly.
>
> In some cases, the driver cannot be a loadable module, so better
> force it to be built-in.
>
> While we're at it, simplify the Makefile syntax.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
> ---
> drivers/video/omap/Kconfig | 41 +++++++++++++++++++++++++---
> drivers/video/omap/Makefile | 64 ++++++++++++++++++++-----------------------
> 2 files changed, 67 insertions(+), 38 deletions(-)
I have ported lcd_2430sdp and lcd_ldp drivers (and also other OMAP2/3
panel drivers, except N800) to the newer omapdss driver
(drivers/video/omap2), and the code is in my for-next branch
(git://gitorious.org/linux-omap-dss2/linux.git for-next).
I have also worked on removing OMAP2/3 support from the old omapfb
driver, thus making it OMAP1 fb driver. This code is not yet ready, and
won't make it in the next merge window.
Your patch will conflict with both of those changes. Is it ok for you to
drop this patch, and I'll make a new one on top of my changes to clean
up the Makefile in a similar way than you did? The new patch wouldn't
make it in the next merge window, though, but I don't think this patch
is fixing any bigger bug, so perhaps it's not so urgent.
Tomi
^ permalink raw reply
* [alsa-devel] [PATCH 5/6] ASoC: samsung: fix Kconfig dependencies
From: Sangbeom Kim @ 2011-10-03 6:48 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <3289863.m6ULFZUV3p@wuerfel>
Hi,
On Mon, Oct 03, 2011 at 6:15:03AM , Arnd Bergmann wrote:
> It's a bug that I only observed on exynos4, and it could be that
> this patch didn't actually solve it in the end. I'll drop it for
> now and do a better report when the problem comes back.
Could you please explain problem which observed on exynos4?
If possible, I want to check it too.
Thanks
Sangbeom.
^ permalink raw reply
* [PATCH 20/30] media/omap_vout: disable driver for now
From: Archit Taneja @ 2011-10-03 6:09 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-21-git-send-email-arnd@arndb.de>
Hi Arnd,
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> This driver was broken by 8cff88c5d "OMAP: DSS2: remove update_mode
> from omapdss":
>
> /home/arnd/linux-arm/drivers/media/video/omap/omap_vout.c: In function 'omap_vout_probe':
> /home/arnd/linux-arm/drivers/media/video/omap/omap_vout.c:2202:15: error: 'struct omap_dss_driver' has no member
> named 'set_update_mode'
> /home/arnd/linux-arm/drivers/media/video/omap/omap_vout.c:2203:12: error: 'struct omap_dss_driver' has no member
> named 'set_update_mode'
> /home/arnd/linux-arm/drivers/media/video/omap/omap_vout.c:2204:8: error: 'OMAP_DSS_UPDATE_MANUAL' undeclared (first
> use in this function)
> /home/arnd/linux-arm/drivers/media/video/omap/omap_vout.c:2204:8: note: each undeclared identifier is reported only
> once for each function it appears in
> /home/arnd/linux-arm/drivers/media/video/omap/omap_vout.c:2206:15: error: 'struct omap_dss_driver' has no member
> named 'set_update_mode'
> /home/arnd/linux-arm/drivers/media/video/omap/omap_vout.c:2207:12: error: 'struct omap_dss_driver' has no member
> named 'set_update_mode'
> /home/arnd/linux-arm/drivers/media/video/omap/omap_vout.c:2208:8: error: 'OMAP_DSS_UPDATE_AUTO' undeclared (first use
> in this function)
> make[3]: *** [drivers/media/video/omap/omap_vout.o] Error 1
> make[2]: *** [drivers/media/video/omap] Error 2
> make[1]: *** [drivers/media/video/] Error 2
> make: *** [sub-make] Error 2
A fix for this is already in the master branch of Mauro's tree:
git://linuxtv.org/media_tree.git
with the commit id:
5ebbf72dc51bd3b481aa91fea37a7157da5fc548
I am guessing this would during the 3.2 merge window.
Regards,
Archit
>
> Let's disable it for now.
>
> Signed-off-by: Arnd Bergmann<arnd@arndb.de>
> Cc: Mauro Carvalho Chehab<mchehab@infradead.org>
> Cc: Archit Taneja<archit@ti.com>
> Cc: Amber Jain<amber@ti.com>
> Cc: Vaibhav Hiremath<hvaibhav@ti.com>
> ---
> drivers/media/video/omap/Kconfig | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/media/video/omap/Kconfig b/drivers/media/video/omap/Kconfig
> index 390ab09..ee21f36 100644
> --- a/drivers/media/video/omap/Kconfig
> +++ b/drivers/media/video/omap/Kconfig
> @@ -4,6 +4,7 @@ config VIDEO_OMAP2_VOUT_VRFB
> config VIDEO_OMAP2_VOUT
> tristate "OMAP2/OMAP3 V4L2-Display driver"
> depends on ARCH_OMAP2 || ARCH_OMAP3
> + depends on BROKEN # broken by 8cff88c5da "OMAP: DSS2: remove update_mode from omapdss"
> select VIDEOBUF_GEN
> select VIDEOBUF_DMA_CONTIG
> select OMAP2_DSS
^ permalink raw reply
* [PATCH v6 02/16] OMAP2+: hwmod: Add API to check IO PAD wakeup status
From: Govindraj @ 2011-10-03 5:56 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <4E8946BD.1010108@ti.com>
On Mon, Oct 3, 2011 at 10:53 AM, Rajendra Nayak <rnayak@ti.com> wrote:
> On Monday 03 October 2011 10:30 AM, Govindraj wrote:
>>
>> Thanks for the review,
>>
>>
>> On Sat, Oct 1, 2011 at 8:03 PM, Rajendra Nayak<rnayak@ti.com> ?wrote:
>>>
>>> On Friday 30 September 2011 04:31 PM, Govindraj.R wrote:
>>>>
>>>> Add API to determine IO-PAD wakeup event status for a given
>>>> hwmod dynamic_mux pad.
>>>>
>>>> Wake up event set will be cleared on pad mux_read.
>>>
>>> Are these api's even getting used in this series?
>>
>> Used in Tero's irq_chaining patches.
>
> So shouldn't this patch be part of his series instead?
Yes it is. Part of his v9-series.
--
Thanks,
Govindraj.R
>
>>
>> http://lkml.org/lkml/2011/9/23/121
>>
>> --
>> Thanks,
>> Govindraj.R
>>
>>
>>>
>>>>
>>>> Signed-off-by: Govindraj.R<govindraj.raja@ti.com>
>>>> ---
>>>> ?arch/arm/mach-omap2/mux.c ? ? ? ? ? ? ? ? ? ?| ? 30
>>>> ++++++++++++++++++++++++++
>>>> ?arch/arm/mach-omap2/mux.h ? ? ? ? ? ? ? ? ? ?| ? 13 +++++++++++
>>>> ?arch/arm/mach-omap2/omap_hwmod.c ? ? ? ? ? ? | ? ?7 ++++++
>>>> ?arch/arm/plat-omap/include/plat/omap_hwmod.h | ? ?1 +
>>>> ?4 files changed, 51 insertions(+), 0 deletions(-)
>>>>
>>>> diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
>>>> index 655e948..fb75aae 100644
>>>> --- a/arch/arm/mach-omap2/mux.c
>>>> +++ b/arch/arm/mach-omap2/mux.c
>>>> @@ -351,6 +351,36 @@ err1:
>>>> ? ? ? ?return NULL;
>>>> ?}
>>>>
>>>> +/**
>>>> + * omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup
>>>> + * @hmux: ? ? ? ? ? ? ?Pads for a hwmod
>>>> + *
>>>> + * Gets the wakeup status of given pad from omap-hwmod.
>>>> + * Returns true if wakeup capability is set and wakeup event occurred.
>>>> + * Returns false if wakeup event has not occurred or pads are not
>>>> available.
>>>> + */
>>>> +bool omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux)
>>>> +{
>>>> + ? ? ? int i;
>>>> + ? ? ? unsigned int val;
>>>> + ? ? ? u8 ret = false;
>>>> +
>>>> + ? ? ? for (i = 0; i< ? ?hmux->nr_pads; i++) {
>>>> + ? ? ? ? ? ? ? struct omap_device_pad *pad =&hmux->pads[i];
>>>> +
>>>> + ? ? ? ? ? ? ? if (pad->flags& ? ?OMAP_DEVICE_PAD_WAKEUP) {
>>>> + ? ? ? ? ? ? ? ? ? ? ? val = omap_mux_read(pad->partition,
>>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pad->mux->reg_offset);
>>>> + ? ? ? ? ? ? ? ? ? ? ? if (val& ? ?OMAP_WAKEUP_EVENT) {
>>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ret = true;
>>>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
>>>> + ? ? ? ? ? ? ? ? ? ? ? }
>>>> + ? ? ? ? ? ? ? }
>>>> + ? ? ? }
>>>> +
>>>> + ? ? ? return ret;
>>>> +}
>>>> +
>>>> ?/* Assumes the calling function takes care of locking */
>>>> ?void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
>>>> ?{
>>>> diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
>>>> index 2132308..8b2150a 100644
>>>> --- a/arch/arm/mach-omap2/mux.h
>>>> +++ b/arch/arm/mach-omap2/mux.h
>>>> @@ -225,8 +225,21 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads,
>>>> int nr_pads);
>>>> ? */
>>>> ?void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
>>>>
>>>> +/**
>>>> + * omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup
>>>> + * @hmux: ? ? ? ? ? ? ?Pads for a hwmod
>>>> + *
>>>> + * Called only from omap_hwmod.c, do not use.
>>>> + */
>>>> +bool omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux);
>>>> ?#else
>>>>
>>>> +static inline bool
>>>> +omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux)
>>>> +{
>>>> + ? ? ? return 0;
>>>> +}
>>>> +
>>>> ?static inline int omap_mux_init_gpio(int gpio, int val)
>>>> ?{
>>>> ? ? ? ?return 0;
>>>> diff --git a/arch/arm/mach-omap2/omap_hwmod.c
>>>> b/arch/arm/mach-omap2/omap_hwmod.c
>>>> index e751dd9..a8b24d7 100644
>>>> --- a/arch/arm/mach-omap2/omap_hwmod.c
>>>> +++ b/arch/arm/mach-omap2/omap_hwmod.c
>>>> @@ -2724,3 +2724,10 @@ int omap_hwmod_no_setup_reset(struct omap_hwmod
>>>> *oh)
>>>>
>>>> ? ? ? ?return 0;
>>>> ?}
>>>> +
>>>> +int omap_hwmod_pad_get_wakeup_status(struct omap_hwmod *oh)
>>>> +{
>>>> + ? ? ? if (oh&& ? ?oh->mux)
>>>> + ? ? ? ? ? ? ? return omap_hwmod_mux_get_wake_status(oh->mux);
>>>> + ? ? ? return -EINVAL;
>>>> +}
>>>> diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>>> b/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>>> index 0e329ca..9a6195c 100644
>>>> --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>>> +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>>> @@ -607,6 +607,7 @@ u32 omap_hwmod_get_context_loss_count(struct
>>>> omap_hwmod *oh);
>>>>
>>>> ?int omap_hwmod_no_setup_reset(struct omap_hwmod *oh);
>>>>
>>>> +int omap_hwmod_pad_get_wakeup_status(struct omap_hwmod *oh);
>>>> ?/*
>>>> ? * Chip variant-specific hwmod init routines - XXX should be converted
>>>> ? * to use initcalls once the initial boot ordering is straightened out
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-serial"
>>> in
>>> the body of a message to majordomo at vger.kernel.org
>>> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>>>
>
>
^ permalink raw reply
* [PATCH 28/30] ARM: omap: select CPU_FREQ_TABLE where needed
From: Santosh Shilimkar @ 2011-10-03 5:39 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-29-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> The omap platform requires CPU_FREQ_TABLE support to be enabled for its
> CPU_FREQ implementations, so automatically select that when CPU_FREQ
> is enabled.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> arch/arm/plat-omap/Kconfig | 5 +++++
> 1 files changed, 5 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/plat-omap/Kconfig b/arch/arm/plat-omap/Kconfig
> index bb8f4a6..f7ef9f4 100644
> --- a/arch/arm/plat-omap/Kconfig
> +++ b/arch/arm/plat-omap/Kconfig
> @@ -217,6 +217,11 @@ config OMAP_PM_NOOP
>
> endchoice
>
> +config OMAP_CPU_FREQ
> + def_bool "y"
> + depends on CPU_FREQ
> + select CPU_FREQ_TABLE
> +
> endmenu
With CPUFREQ series from Kevin [1], I don't think we need this any-more.
More so, I didn't find OMAP_CPU_FREQ is being used anywhere on mainline.
Regards
Santosh
[1] http://www.mail-archive.com/linux-omap at vger.kernel.org/msg56288.html
^ permalink raw reply
* [PATCH 30/30] ARM: omap2: select ARM_AMBA for OMAP3_EMU
From: Santosh Shilimkar @ 2011-10-03 5:31 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-31-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:16 PM, Arnd Bergmann wrote:
> OMAP3_EMU needs OC_ETM, which needs ARM_AMBA. Since the latter
> dependency is getting turned from a 'select' into a 'depends',
> omap has to select ARM_AMBA itself in order to have a correct
> dependency chain. Alternatively, we could change OMAP3_EMU
> to have a 'depends on OC_ETM' instead of selecting it.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 27/30] ARM: omap: select L2X0 cache on omap4
From: Santosh Shilimkar @ 2011-10-03 5:29 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-28-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> The cache controller needs to be enabled for the
> cortex-a9 specific errata that are also selected
> to work.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 26/30] ARM: omap: add board autoselection
From: Santosh Shilimkar @ 2011-10-03 5:28 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-27-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> At least one board file needs to be selected to successfully build
> a kernel, so this one adds logic to the omap Kconfig file to
> pick one default board file when all others are disabled. Since
> the available boards depend on the SoC family (omap2/3/4) being
> selected first, this adds one default for each family.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> arch/arm/mach-omap2/Kconfig | 39 +++++++++++++++++++++++++++++++++++++++
> 1 files changed, 39 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> index 3c9fb89..fd0ab18 100644
> --- a/arch/arm/mach-omap2/Kconfig
> +++ b/arch/arm/mach-omap2/Kconfig
> @@ -120,6 +120,45 @@ config MACH_OMAP_GENERIC
> depends on ARCH_OMAP2
> default y
>
> +config MACH_OMAP_AUTO_BOARD
> + def_bool y
> + depends on !MACH_OMAP2_TUSB6010
> + depends on !MACH_OMAP_H4
> + depends on !MACH_OMAP_APOLLON
> + depends on !MACH_OMAP_APOLLON
> + depends on !MACH_OMAP_2430SDP
> + depends on !MACH_OMAP3_BEAGLE
> + depends on !MACH_DEVKIT8000
> + depends on !MACH_OMAP_LDP
> + depends on !MACH_OMAP3530_LV_SOM
> + depends on !MACH_OMAP3_TORPEDO
> + depends on !MACH_OVERO
> + depends on !MACH_OMAP3EVM
> + depends on !MACH_OMAP3517EVM
> + depends on !MACH_CRANEBOARD
> + depends on !MACH_OMAP3_PANDORA
> + depends on !MACH_OMAP3_TOUCHBOOK
> + depends on !MACH_NOKIA_N8X0
> + depends on !MACH_NOKIA_RM680
> + depends on !MACH_NOKIA_RX51
> + depends on !MACH_OMAP_ZOOM2
> + depends on !MACH_OMAP_ZOOM3
> + depends on !MACH_CM_T35
> + depends on !MACH_CM_T3517
> + depends on !MACH_IGEP0020
> + depends on !MACH_IGEP0030
> + depends on !MACH_SBC3530
> + depends on !MACH_OMAP_3630SDP
> + depends on !MACH_TI8168EVM
> + depends on !MACH_OMAP4_PANDA
Do we need all above 'depends on *' ?
Even if they get selected for one of the below
ARCH along with default machine, build should be happy.
Right ?
> + select MACH_OMAP_GENERIC if ARCH_OMAP2
> + select MACH_OMAP_3430SDP if ARCH_OMAP3 && !ARCH_OMAP2
> + select MACH_OMAP_4430SDP if ARCH_OMAP4 && !ARCH_OMAP3 && !ARCH_OMAP2
This is fine.
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH] mx5: modify pm and idle
From: Shawn Guo @ 2011-10-03 5:24 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317364642-22956-1-git-send-email-jason77.wang@gmail.com>
On Fri, Sep 30, 2011 at 02:37:22PM +0800, Hui Wang wrote:
> Two problems exist in the current i.MX5 pm suspend/resume and idle
> functions. The first is the current i.MX5 suspend routine will call
> tzic_enable_wake(1) to set wake source, this will set all enabled
> irq as wake source rather than those wake capable. The second
> is i.MX5 idle will call mx5_cpu_lp_set() to prepare enter low power
> mode, but it forgets to call wfi instruction to enter this mode.
>
> To fix these two problems, using generic irq chip pm interface and
> adding a new function mx5_arch_idle().
>
> Signed-off-by: Hui Wang <jason77.wang@gmail.com>
> ---
On imx51 babbage:
Tested-by: Shawn Guo <shawn.guo@linaro.org>
A couple of minor comments though:
This patch conflicts with patches on imx-cleanup. But Sascha may be
able to take care of it.
>
> This patch is basing on the latest imx-features branch.
>
> This patch is validated on the i.MX51 PDK board (CPU revision 2.0).
>
> Since both pm suspend/resume and idle has close relation with
> mx5_cpu_lp_set() and tzic_enable_wake(), i choose to use one patch
> instead of independent two to address existing problems.
>
> arch/arm/mach-mx5/system.c | 24 +++++++++++++++--
> arch/arm/plat-mxc/include/mach/mxc.h | 2 +-
> arch/arm/plat-mxc/include/mach/system.h | 3 +-
> arch/arm/plat-mxc/tzic.c | 42 ++++++++++++++++++++++---------
> 4 files changed, 54 insertions(+), 17 deletions(-)
>
> diff --git a/arch/arm/mach-mx5/system.c b/arch/arm/mach-mx5/system.c
> index 76ae8dc..92bf341 100644
> --- a/arch/arm/mach-mx5/system.c
> +++ b/arch/arm/mach-mx5/system.c
> @@ -10,11 +10,17 @@
> * http://www.opensource.org/licenses/gpl-license.html
> * http://www.gnu.org/copyleft/gpl.html
> */
> +#include <linux/suspend.h>
> +#include <linux/clk.h>
> #include <linux/platform_device.h>
> #include <linux/io.h>
> #include <mach/hardware.h>
> +#include <mach/common.h>
> +
> #include "crm_regs.h"
>
> +static struct clk *gpc_dvfs_clk;
> +
> /* set cpu low power mode before WFI instruction. This function is called
> * mx5 because it can be used for mx50, mx51, and mx53.*/
> void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode)
> @@ -54,9 +60,6 @@ void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode)
> stop_mode = 1;
> }
> arm_srpgcr |= MXC_SRPGCR_PCR;
> -
> - if (tzic_enable_wake(1) != 0)
> - return;
> break;
> case STOP_POWER_ON:
> ccm_clpcr |= 0x2 << MXC_CCM_CLPCR_LPM_OFFSET;
> @@ -82,3 +85,18 @@ void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode)
> __raw_writel(empgc1, MXC_SRPG_EMPGC1_SRPGCR);
> }
> }
> +
> +void mx5_arch_idle(void)
> +{
> + if (gpc_dvfs_clk == NULL)
> + gpc_dvfs_clk = clk_get(NULL, "gpc_dvfs");
> +
> + /* gpc clock is needed for SRPG */
> + clk_enable(gpc_dvfs_clk);
> + mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
> + if (tzic_enable_wake() != 0)
> + goto exit;
> + cpu_do_idle();
> +exit:
> + clk_disable(gpc_dvfs_clk);
Bad indentation on entire function block (should be 1 tab rather than 2)
Regards,
Shawn
> +}
> diff --git a/arch/arm/plat-mxc/include/mach/mxc.h b/arch/arm/plat-mxc/include/mach/mxc.h
> index 0987923..c4d324a 100644
> --- a/arch/arm/plat-mxc/include/mach/mxc.h
> +++ b/arch/arm/plat-mxc/include/mach/mxc.h
> @@ -182,7 +182,7 @@ struct cpu_op {
> u32 cpu_rate;
> };
>
> -int tzic_enable_wake(int is_idle);
> +int tzic_enable_wake(void);
> enum mxc_cpu_pwr_mode {
> WAIT_CLOCKED, /* wfi only */
> WAIT_UNCLOCKED, /* WAIT */
> diff --git a/arch/arm/plat-mxc/include/mach/system.h b/arch/arm/plat-mxc/include/mach/system.h
> index 51f02a9..5b6f991 100644
> --- a/arch/arm/plat-mxc/include/mach/system.h
> +++ b/arch/arm/plat-mxc/include/mach/system.h
> @@ -21,6 +21,7 @@
> #include <mach/common.h>
>
> extern void mx5_cpu_lp_set(enum mxc_cpu_pwr_mode mode);
> +extern void mx5_arch_idle(void);
>
> static inline void arch_idle(void)
> {
> @@ -51,7 +52,7 @@ static inline void arch_idle(void)
> "mcr p15, 0, %0, c1, c0, 0\n"
> : "=r" (reg));
> } else if (cpu_is_mx51())
> - mx5_cpu_lp_set(WAIT_UNCLOCKED_POWER_OFF);
> + mx5_arch_idle();
> else
> cpu_do_idle();
> }
> diff --git a/arch/arm/plat-mxc/tzic.c b/arch/arm/plat-mxc/tzic.c
> index e993a18..bd73910 100644
> --- a/arch/arm/plat-mxc/tzic.c
> +++ b/arch/arm/plat-mxc/tzic.c
> @@ -72,14 +72,35 @@ static int tzic_set_irq_fiq(unsigned int irq, unsigned int type)
> #define tzic_set_irq_fiq NULL
> #endif
>
> -static unsigned int *wakeup_intr[4];
> -
> static struct mxc_extra_irq tzic_extra_irq = {
> #ifdef CONFIG_FIQ
> .set_irq_fiq = tzic_set_irq_fiq,
> #endif
> };
>
> +#ifdef CONFIG_PM
> +static void tzic_irq_suspend(struct irq_data *d)
> +{
> + struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
> + int idx = gc->irq_base >> 5;
> +
> + __raw_writel(gc->wake_active, tzic_base + TZIC_WAKEUP0(idx));
> +}
> +
> +static void tzic_irq_resume(struct irq_data *d)
> +{
> + struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d);
> + int idx = gc->irq_base >> 5;
> +
> + __raw_writel(__raw_readl(tzic_base + TZIC_ENSET0(idx)),
> + tzic_base + TZIC_WAKEUP0(idx));
> +}
> +
> +#else
> +#define tzic_irq_suspend NULL
> +#define tzic_irq_resume NULL
> +#endif
> +
> static __init void tzic_init_gc(unsigned int irq_start)
> {
> struct irq_chip_generic *gc;
> @@ -90,12 +111,13 @@ static __init void tzic_init_gc(unsigned int irq_start)
> handle_level_irq);
> gc->private = &tzic_extra_irq;
> gc->wake_enabled = IRQ_MSK(32);
> - wakeup_intr[idx] = &gc->wake_active;
>
> ct = gc->chip_types;
> ct->chip.irq_mask = irq_gc_mask_disable_reg;
> ct->chip.irq_unmask = irq_gc_unmask_enable_reg;
> ct->chip.irq_set_wake = irq_gc_set_wake;
> + ct->chip.irq_suspend = tzic_irq_suspend;
> + ct->chip.irq_resume = tzic_irq_resume;
> ct->regs.disable = TZIC_ENCLEAR0(idx);
> ct->regs.enable = TZIC_ENSET0(idx);
>
> @@ -166,23 +188,19 @@ void __init tzic_init_irq(void __iomem *irqbase)
> /**
> * tzic_enable_wake() - enable wakeup interrupt
> *
> - * @param is_idle 1 if called in idle loop (ENSET0 register);
> - * 0 to be used when called from low power entry
> * @return 0 if successful; non-zero otherwise
> */
> -int tzic_enable_wake(int is_idle)
> +int tzic_enable_wake(void)
> {
> - unsigned int i, v;
> + unsigned int i;
>
> __raw_writel(1, tzic_base + TZIC_DSMINT);
> if (unlikely(__raw_readl(tzic_base + TZIC_DSMINT) == 0))
> return -EAGAIN;
>
> - for (i = 0; i < 4; i++) {
> - v = is_idle ? __raw_readl(tzic_base + TZIC_ENSET0(i)) :
> - *wakeup_intr[i];
> - __raw_writel(v, tzic_base + TZIC_WAKEUP0(i));
> - }
> + for (i = 0; i < 4; i++)
> + __raw_writel(__raw_readl(tzic_base + TZIC_ENSET0(i)),
> + tzic_base + TZIC_WAKEUP0(i));
>
> return 0;
> }
> --
> 1.7.6
^ permalink raw reply
* [PATCH v6 02/16] OMAP2+: hwmod: Add API to check IO PAD wakeup status
From: Rajendra Nayak @ 2011-10-03 5:23 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <CAAL8m4zLz4kv+nNPKHD6zKG0pdXifXpmWiHnLAyn_bq228qHXA@mail.gmail.com>
On Monday 03 October 2011 10:30 AM, Govindraj wrote:
> Thanks for the review,
>
>
> On Sat, Oct 1, 2011 at 8:03 PM, Rajendra Nayak<rnayak@ti.com> wrote:
>> On Friday 30 September 2011 04:31 PM, Govindraj.R wrote:
>>>
>>> Add API to determine IO-PAD wakeup event status for a given
>>> hwmod dynamic_mux pad.
>>>
>>> Wake up event set will be cleared on pad mux_read.
>>
>> Are these api's even getting used in this series?
>
> Used in Tero's irq_chaining patches.
So shouldn't this patch be part of his series instead?
>
> http://lkml.org/lkml/2011/9/23/121
>
> --
> Thanks,
> Govindraj.R
>
>
>>
>>>
>>> Signed-off-by: Govindraj.R<govindraj.raja@ti.com>
>>> ---
>>> arch/arm/mach-omap2/mux.c | 30
>>> ++++++++++++++++++++++++++
>>> arch/arm/mach-omap2/mux.h | 13 +++++++++++
>>> arch/arm/mach-omap2/omap_hwmod.c | 7 ++++++
>>> arch/arm/plat-omap/include/plat/omap_hwmod.h | 1 +
>>> 4 files changed, 51 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
>>> index 655e948..fb75aae 100644
>>> --- a/arch/arm/mach-omap2/mux.c
>>> +++ b/arch/arm/mach-omap2/mux.c
>>> @@ -351,6 +351,36 @@ err1:
>>> return NULL;
>>> }
>>>
>>> +/**
>>> + * omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup
>>> + * @hmux: Pads for a hwmod
>>> + *
>>> + * Gets the wakeup status of given pad from omap-hwmod.
>>> + * Returns true if wakeup capability is set and wakeup event occurred.
>>> + * Returns false if wakeup event has not occurred or pads are not
>>> available.
>>> + */
>>> +bool omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux)
>>> +{
>>> + int i;
>>> + unsigned int val;
>>> + u8 ret = false;
>>> +
>>> + for (i = 0; i< hmux->nr_pads; i++) {
>>> + struct omap_device_pad *pad =&hmux->pads[i];
>>> +
>>> + if (pad->flags& OMAP_DEVICE_PAD_WAKEUP) {
>>> + val = omap_mux_read(pad->partition,
>>> + pad->mux->reg_offset);
>>> + if (val& OMAP_WAKEUP_EVENT) {
>>> + ret = true;
>>> + break;
>>> + }
>>> + }
>>> + }
>>> +
>>> + return ret;
>>> +}
>>> +
>>> /* Assumes the calling function takes care of locking */
>>> void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
>>> {
>>> diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
>>> index 2132308..8b2150a 100644
>>> --- a/arch/arm/mach-omap2/mux.h
>>> +++ b/arch/arm/mach-omap2/mux.h
>>> @@ -225,8 +225,21 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads,
>>> int nr_pads);
>>> */
>>> void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
>>>
>>> +/**
>>> + * omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup
>>> + * @hmux: Pads for a hwmod
>>> + *
>>> + * Called only from omap_hwmod.c, do not use.
>>> + */
>>> +bool omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux);
>>> #else
>>>
>>> +static inline bool
>>> +omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux)
>>> +{
>>> + return 0;
>>> +}
>>> +
>>> static inline int omap_mux_init_gpio(int gpio, int val)
>>> {
>>> return 0;
>>> diff --git a/arch/arm/mach-omap2/omap_hwmod.c
>>> b/arch/arm/mach-omap2/omap_hwmod.c
>>> index e751dd9..a8b24d7 100644
>>> --- a/arch/arm/mach-omap2/omap_hwmod.c
>>> +++ b/arch/arm/mach-omap2/omap_hwmod.c
>>> @@ -2724,3 +2724,10 @@ int omap_hwmod_no_setup_reset(struct omap_hwmod
>>> *oh)
>>>
>>> return 0;
>>> }
>>> +
>>> +int omap_hwmod_pad_get_wakeup_status(struct omap_hwmod *oh)
>>> +{
>>> + if (oh&& oh->mux)
>>> + return omap_hwmod_mux_get_wake_status(oh->mux);
>>> + return -EINVAL;
>>> +}
>>> diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>> b/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>> index 0e329ca..9a6195c 100644
>>> --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>> +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h
>>> @@ -607,6 +607,7 @@ u32 omap_hwmod_get_context_loss_count(struct
>>> omap_hwmod *oh);
>>>
>>> int omap_hwmod_no_setup_reset(struct omap_hwmod *oh);
>>>
>>> +int omap_hwmod_pad_get_wakeup_status(struct omap_hwmod *oh);
>>> /*
>>> * Chip variant-specific hwmod init routines - XXX should be converted
>>> * to use initcalls once the initial boot ordering is straightened out
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-serial" in
>> the body of a message to majordomo at vger.kernel.org
>> More majordomo info at http://vger.kernel.org/majordomo-info.html
>>
^ permalink raw reply
* [PATCH v2] OMAP2PLUS: DSS: Ensure DSS works correctly if display is enabled in bootloader
From: Archit Taneja @ 2011-10-03 5:22 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <alpine.DEB.2.00.1110022237171.4611@utopia.booyaka.com>
Hi Paul,
On Monday 03 October 2011 10:15 AM, Paul Walmsley wrote:
> Hi
>
> some comments:
>
> On Mon, 12 Sep 2011, Archit Taneja wrote:
>
>> Resetting DISPC when a DISPC output is enabled causes the DSS to go into an
>> inconsistent state. Thus if the bootloader has enabled a display, the hwmod code
>> cannot reset the DISPC module just like that, but the outputs need to be
>> disabled first.
>>
>> Add function dispc_disable_outputs() which disables all active overlay manager
>> and ensure all frame transfers are completed.
>>
>> Modify omap_dss_reset() to call this function and clear DSS_CONTROL,
>> DSS_SDI_CONTROL and DSS_PLL_CONTROL so that DSS is in a clean state when the
>> DSS2 driver starts.
>>
>> This resolves the hang issue(caused by a L3 error during boot) seen on the
>> beagle board C3, which has a factory bootloader that enables display. The issue
>> is resolved with this patch.
>>
>> Acked-by: Tomi Valkeinen<tomi.valkeinen@ti.com>
>> Tested-by: R, Sricharan<r.sricharan@ti.com>
>> Signed-off-by: Archit Taneja<archit@ti.com>
>> ---
>> v2:
>>
>> - Added more info in the commit message, fixed some typos.
>>
>> The patch depends on a HWMOD patch series which has been posted by Tomi, it can
>> be tested by applying over the following branch:
>>
>> https://gitorious.org/linux-omap-dss2/linux/commits/master
>>
>> arch/arm/mach-omap2/display.c | 110 +++++++++++++++++++++++++++++++++++++++++
>> 1 files changed, 110 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
>> index 93db7c1..eab81f4 100644
>> --- a/arch/arm/mach-omap2/display.c
>> +++ b/arch/arm/mach-omap2/display.c
>> @@ -30,6 +30,30 @@
>>
>> #include "control.h"
>>
>> +#define DISPC_BASE_OMAP2 0x48050400
>> +#define DISPC_BASE_OMAP4 0x48041000
>
> These should definitely not be needed -- they can be obtained from the
> hwmod data and there is clearly something wrong if any IP block addresses
> exist outside of those data files.
The reason we had to do this was because the function omap_dss_reset()
is tied to the dss hwmod and not dispc hwmod. Hence, we don't have DISPC
related info through the hwmod struct available through omap_dss_reset().
It would have been easy(and more sensible) if we had tied the code in
dispc_disable_outputs() to a custom reset function for the dispc hwmod
directly, but that unfortunately breaks some functionality. The current
omap_dss_reset() function does this:
- enable DSS opt clocks to complete power on reset.
- see if the power on reset is completed by reading DSS_SYSNCONG
- disable DSS opt clocks
If we don't do the things done in dispc_disable_outputs() before
disabling DSS opt clocks, we would be in trouble.
Hence, there is a need to access DISPC registers in the dss hwmod
itself, this forced us to create the base macros and the use of
omap_readl/writel functions.
I considered changing the order in which the hwmods are registered, i.e
dispc first and dss later, but that didn't seem right
Could you suggest how we could go about this? Is there a way to access
dispc hwmod's data in dss hwmod's custom reset function?
I agree with all the other comments and things you have done in the
patch you made. Thanks for the thorough review and the patch, i'll keep
these comments in mind for future.
Regards,
Archit
>
>> +
>> +#define DISPC_REG(base, offset) (base + offset)
>> +
>> +#define DISPC_CONTROL 0x0040
>> +#define DISPC_CONTROL2 0x0238
>> +#define DISPC_IRQSTATUS 0x0018
>> +
>> +#define DSS_SYSCONFIG 0x10
>> +#define DSS_SYSSTATUS 0x14
>> +#define DSS_CONTROL 0x40
>> +#define DSS_SDI_CONTROL 0x44
>> +#define DSS_PLL_CONTROL 0x48
>> +
>> +#define LCD_EN_MASK (0x1<< 0)
>> +#define DIGIT_EN_MASK (0x1<< 1)
>> +
>> +#define FRAMEDONE_IRQ_SHIFT 0
>> +#define EVSYNC_EVEN_IRQ_SHIFT 2
>> +#define EVSYNC_ODD_IRQ_SHIFT 3
>> +#define FRAMEDONE2_IRQ_SHIFT 22
>> +#define FRAMEDONETV_IRQ_SHIFT 24
>> +
>> static struct platform_device omap_display_device = {
>> .name = "omapdss",
>> .id = -1,
>> @@ -182,6 +206,78 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
>> return r;
>> }
>>
>> +static void dispc_disable_outputs(void)
>> +{
>> + u32 val, irq_mask, base;
>> + bool lcd_en, digit_en, lcd2_en = false;
>> + int i, num_mgrs;
>> +
>> + if (cpu_is_omap44xx()) {
>> + base = DISPC_BASE_OMAP4;
>> + num_mgrs = 3;
>> + } else {
>> + base = DISPC_BASE_OMAP2;
>> + num_mgrs = 2;
>> + }
>
> base should not be needed here. The num_mgrs should come from the hwmod
> data. We're trying to get rid of cpu_is_omap*() functions wherever
> possible.
>
>> +
>> + /* store value of LCDENABLE and DIGITENABLE bits */
>> + val = omap_readl(DISPC_REG(base, DISPC_CONTROL));
>
> omap_{read,write}l() are deprecated and should no longer be used. This
> code can use omap_hwmod_{read,write}() instead. You can pass the struct
> omap_hwmod * into this function from the caller.
>
>> + lcd_en = val& LCD_EN_MASK;
>> + digit_en = val& DIGIT_EN_MASK;
>> +
>> + /* store value of LCDENABLE for LCD2 */
>> + if (num_mgrs> 2) {
>> + val = omap_readl(DISPC_REG(base, DISPC_CONTROL2));
>> + lcd2_en = val& LCD_EN_MASK;
>> + }
>> +
>> + /*
>> + * If any manager was enabled, we need to disable it before DSS clocks
>> + * are disabled or DISPC module is reset
>> + */
>> + if (lcd_en || digit_en || lcd2_en) {
>
> Rather than this massive if block, please test the inverse condition and
> bail out early. This avoids unnecessary indentation levels that make code
> harder to read.
>
>> + irq_mask = (lcd_en ? 1 : 0)<< FRAMEDONE_IRQ_SHIFT;
>> +
>> + if (cpu_is_omap44xx())
>> + irq_mask |= (digit_en ? 1 : 0)<< FRAMEDONETV_IRQ_SHIFT;
>> + else
>> + irq_mask |= (digit_en ? 1 : 0)<< EVSYNC_EVEN_IRQ_SHIFT |
>> + (digit_en ? 1 : 0)<< EVSYNC_ODD_IRQ_SHIFT;
>
> Rather than a cpu_is_omap*() test, the presence of a working FRAMEDONETV
> interrupt bit should be passed through the hwmod data.
>
>> +
>> + irq_mask |= (lcd2_en ? 1 : 0)<< FRAMEDONE2_IRQ_SHIFT;
>> +
>> + /*
>> + * clear any previous FRAMEDONE, FRAMEDONETV, EVSYNC_EVEN/ODD
>> + * or FRAMEDONE2 interrupts
>> + */
>> + omap_writel(irq_mask, DISPC_REG(base, DISPC_IRQSTATUS));
>> +
>> + /* disable LCD and TV managers */
>> + val = omap_readl(DISPC_REG(base, DISPC_CONTROL));
>> + val&= ~(LCD_EN_MASK | DIGIT_EN_MASK);
>> + omap_writel(val, DISPC_REG(base, DISPC_CONTROL));
>> +
>> + /* disable LCD2 manager */
>> + if (num_mgrs> 2) {
>> + val = omap_readl(DISPC_REG(base, DISPC_CONTROL2));
>> + val&= ~LCD_EN_MASK;
>> + omap_writel(val, DISPC_REG(base, DISPC_CONTROL2));
>> + }
>> +
>> + i = 0;
>> + while ((omap_readl(DISPC_REG(base, DISPC_IRQSTATUS))& irq_mask) !=
>> + irq_mask) {
>> + i++;
>> + if (i> 100) {
>
> Please hoist this constant up to the top of this file, and use a macro
> with a comment.
>
>> + printk(KERN_ERR "didn't get FRAMEDONE1/2 or TV"
>> + " interrupt\n");
>
> pr_err() is shorter and better here.
>
>> + break;
>> + }
>> + mdelay(1);
>> + }
>> + }
>> +}
>> +
>> #define MAX_MODULE_SOFTRESET_WAIT 10000
>> int omap_dss_reset(struct omap_hwmod *oh)
>> {
>> @@ -198,6 +294,20 @@ int omap_dss_reset(struct omap_hwmod *oh)
>> if (oc->_clk)
>> clk_enable(oc->_clk);
>>
>> + dispc_disable_outputs();
>
> Pass the struct omap_hwmod *oh in here.
>
>> +
>> + /* clear SDI registers */
>> + if (cpu_is_omap3430()) {
>> + omap_hwmod_write(0x0, oh, DSS_SDI_CONTROL);
>> + omap_hwmod_write(0x0, oh, DSS_PLL_CONTROL);
>> + }
>> +
>> + /*
>> + * clear DSS_CONTROL register to switch DSS clock sources to
>> + * PRCM clock, if any
>> + */
>> + omap_hwmod_write(0x0, oh, DSS_CONTROL);
>> +
>> omap_test_timeout((omap_hwmod_read(oh, oh->class->sysc->syss_offs)
>> & SYSS_RESETDONE_MASK),
>> MAX_MODULE_SOFTRESET_WAIT, c);
>> --
>> 1.7.1
>
> In the interest of expediency, I've made the above changes to the patch --
> updated patch below. The following Compile-tested only, so could you
> review it please and make sure I haven't broken anything? For future
> patches, please keep the comments above in mind.
>
> thanks,
>
>
> - Paul
>
> From: Archit Taneja<archit@ti.com>
> Date: Mon, 12 Sep 2011 12:38:26 +0530
> Subject: [PATCH 1/2] ARM: OMAP2PLUS: DSS: Ensure DSS works correctly if
> display is enabled in bootloader
>
> Resetting DISPC when a DISPC output is enabled causes the DSS to go into an
> inconsistent state. Thus if the bootloader has enabled a display, the hwmod code
> cannot reset the DISPC module just like that, but the outputs need to be
> disabled first.
>
> Add function dispc_disable_outputs() which disables all active overlay manager
> and ensure all frame transfers are completed.
>
> Modify omap_dss_reset() to call this function and clear DSS_CONTROL,
> DSS_SDI_CONTROL and DSS_PLL_CONTROL so that DSS is in a clean state when the
> DSS2 driver starts.
>
> This resolves the hang issue(caused by a L3 error during boot) seen on the
> beagle board C3, which has a factory bootloader that enables display. The issue
> is resolved with this patch.
>
> Acked-by: Tomi Valkeinen<tomi.valkeinen@ti.com>
> Tested-by: R, Sricharan<r.sricharan@ti.com>
> Signed-off-by: Archit Taneja<archit@ti.com>
> [paul at pwsan.com: restructured code, removed omap_{read,write}l(), removed
> cpu_is_omap*() calls and converted to dev_attr]
> Signed-off-by: Paul Walmsley<paul@pwsan.com>
> ---
> arch/arm/mach-omap2/display.c | 118 ++++++++++++++++++++++++++
> arch/arm/mach-omap2/display.h | 29 ++++++
> arch/arm/mach-omap2/omap_hwmod_2420_data.c | 1 +
> arch/arm/mach-omap2/omap_hwmod_2430_data.c | 1 +
> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 1 +
> arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 6 ++
> arch/arm/mach-omap2/omap_hwmod_common_data.c | 4 +
> arch/arm/mach-omap2/omap_hwmod_common_data.h | 4 +
> 8 files changed, 164 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/mach-omap2/display.h
>
> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
> index cdb675a..fcd2c3a 100644
> --- a/arch/arm/mach-omap2/display.c
> +++ b/arch/arm/mach-omap2/display.c
> @@ -28,6 +28,33 @@
> #include<plat/omap-pm.h>
> #include<plat/common.h>
>
> +#include "display.h"
> +
> +#define DISPC_CONTROL 0x0040
> +#define DISPC_CONTROL2 0x0238
> +#define DISPC_IRQSTATUS 0x0018
> +
> +#define DSS_SYSCONFIG 0x10
> +#define DSS_SYSSTATUS 0x14
> +#define DSS_CONTROL 0x40
> +#define DSS_SDI_CONTROL 0x44
> +#define DSS_PLL_CONTROL 0x48
> +
> +#define LCD_EN_MASK (0x1<< 0)
> +#define DIGIT_EN_MASK (0x1<< 1)
> +
> +#define FRAMEDONE_IRQ_SHIFT 0
> +#define EVSYNC_EVEN_IRQ_SHIFT 2
> +#define EVSYNC_ODD_IRQ_SHIFT 3
> +#define FRAMEDONE2_IRQ_SHIFT 22
> +#define FRAMEDONETV_IRQ_SHIFT 24
> +
> +/*
> + * FRAMEDONE_IRQ_TIMEOUT: how long (in milliseconds) to wait during DISPC
> + * reset before deciding that something has gone wrong
> + */
> +#define FRAMEDONE_IRQ_TIMEOUT 100
> +
> static struct platform_device omap_display_device = {
> .name = "omapdss",
> .id = -1,
> @@ -128,6 +155,83 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
> return r;
> }
>
> +static void dispc_disable_outputs(struct omap_hwmod *oh)
> +{
> + u32 v, irq_mask = 0;
> + bool lcd_en, digit_en, lcd2_en = false;
> + int i;
> + struct omap_dss_dispc_dev_attr *da;
> +
> + if (!oh->dev_attr) {
> + pr_err("display: could not disable outputs during reset due to missing dev_attr\n");
> + return;
> + }
> +
> + da = (struct omap_dss_dispc_dev_attr *)oh->dev_attr;
> +
> + /* store value of LCDENABLE and DIGITENABLE bits */
> + v = omap_hwmod_read(oh, DISPC_CONTROL);
> + lcd_en = v& LCD_EN_MASK;
> + digit_en = v& DIGIT_EN_MASK;
> +
> + /* store value of LCDENABLE for LCD2 */
> + if (da->manager_count> 2) {
> + v = omap_hwmod_read(oh, DISPC_CONTROL2);
> + lcd2_en = v& LCD_EN_MASK;
> + }
> +
> + if (!(lcd_en | digit_en | lcd2_en))
> + return; /* no managers currently enabled */
> +
> + /*
> + * If any manager was enabled, we need to disable it before
> + * DSS clocks are disabled or DISPC module is reset
> + */
> + if (lcd_en)
> + irq_mask |= 1<< FRAMEDONE_IRQ_SHIFT;
> +
> + if (digit_en) {
> + if (da->has_framedonetv_irq) {
> + irq_mask |= 1<< FRAMEDONETV_IRQ_SHIFT;
> + } else {
> + irq_mask |= 1<< EVSYNC_EVEN_IRQ_SHIFT |
> + 1<< EVSYNC_ODD_IRQ_SHIFT;
> + }
> + }
> +
> + if (lcd2_en)
> + irq_mask |= 1<< FRAMEDONE2_IRQ_SHIFT;
> +
> + /*
> + * clear any previous FRAMEDONE, FRAMEDONETV,
> + * EVSYNC_EVEN/ODD or FRAMEDONE2 interrupts
> + */
> + omap_hwmod_write(irq_mask, oh, DISPC_IRQSTATUS);
> +
> + /* disable LCD and TV managers */
> + v = omap_hwmod_read(oh, DISPC_CONTROL);
> + v&= ~(LCD_EN_MASK | DIGIT_EN_MASK);
> + omap_hwmod_write(v, oh, DISPC_CONTROL);
> +
> + /* disable LCD2 manager */
> + if (da->manager_count> 2) {
> + v = omap_hwmod_read(oh, DISPC_CONTROL2);
> + v&= ~LCD_EN_MASK;
> + omap_hwmod_write(v, oh, DISPC_CONTROL2);
> + }
> +
> + i = 0;
> + while ((omap_hwmod_read(oh, DISPC_IRQSTATUS)& irq_mask) !=
> + irq_mask) {
> + i++;
> + if (i> FRAMEDONE_IRQ_TIMEOUT) {
> + pr_err("didn't get FRAMEDONE1/2 or TV interrupt\n");
> + break;
> + }
> + mdelay(1);
> + }
> +}
> +
> #define MAX_MODULE_SOFTRESET_WAIT 10000
> int omap_dss_reset(struct omap_hwmod *oh)
> {
> @@ -144,6 +248,20 @@ int omap_dss_reset(struct omap_hwmod *oh)
> if (oc->_clk)
> clk_enable(oc->_clk);
>
> + dispc_disable_outputs(oh);
> +
> + /* clear SDI registers */
> + if (cpu_is_omap3430()) {
> + omap_hwmod_write(0x0, oh, DSS_SDI_CONTROL);
> + omap_hwmod_write(0x0, oh, DSS_PLL_CONTROL);
> + }
> +
> + /*
> + * clear DSS_CONTROL register to switch DSS clock sources to
> + * PRCM clock, if any
> + */
> + omap_hwmod_write(0x0, oh, DSS_CONTROL);
> +
> omap_test_timeout((omap_hwmod_read(oh, oh->class->sysc->syss_offs)
> & SYSS_RESETDONE_MASK),
> MAX_MODULE_SOFTRESET_WAIT, c);
> diff --git a/arch/arm/mach-omap2/display.h b/arch/arm/mach-omap2/display.h
> new file mode 100644
> index 0000000..b871b01
> --- /dev/null
> +++ b/arch/arm/mach-omap2/display.h
> @@ -0,0 +1,29 @@
> +/*
> + * display.h - OMAP2+ integration-specific DSS header
> + *
> + * Copyright (C) 2011 Texas Instruments, Inc.
> + *
> + * 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.
> + *
> + * 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, see<http://www.gnu.org/licenses/>.
> + */
> +
> +#ifndef __ARCH_ARM_MACH_OMAP2_DISPLAY_H
> +#define __ARCH_ARM_MACH_OMAP2_DISPLAY_H
> +
> +#include<linux/kernel.h>
> +
> +struct omap_dss_dispc_dev_attr {
> + u8 manager_count;
> + bool has_framedonetv_irq;
> +};
> +
> +#endif
> diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> index 09d9395..8e32cb3 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> @@ -945,6 +945,7 @@ static struct omap_hwmod omap2420_dss_dispc_hwmod = {
> .slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
> .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> .flags = HWMOD_NO_IDLEST,
> + .dev_attr =&omap2_3_dss_dispc_dev_attr
> };
>
> /* l4_core -> dss_rfbi */
> diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> index 67aff19..6e8ef12 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> @@ -1005,6 +1005,7 @@ static struct omap_hwmod omap2430_dss_dispc_hwmod = {
> .slaves_cnt = ARRAY_SIZE(omap2430_dss_dispc_slaves),
> .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> .flags = HWMOD_NO_IDLEST,
> + .dev_attr =&omap2_3_dss_dispc_dev_attr
> };
>
> /* l4_core -> dss_rfbi */
> diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> index 4a02cc3..12988fe 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> @@ -1465,6 +1465,7 @@ static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
> CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
> CHIP_GE_OMAP3630ES1_1),
> .flags = HWMOD_NO_IDLEST,
> + .dev_attr =&omap2_3_dss_dispc_dev_attr
> };
>
> /*
> diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> index 7a7489e..17adfb3 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
> @@ -1345,6 +1345,11 @@ static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
> { }
> };
>
> +static struct omap_dss_dispc_dev_attr omap44xx_dss_dispc_dev_attr = {
> + .manager_count = 3,
> + .has_framedonetv_irq = 1
> +};
> +
> /* l4_per -> dss_dispc */
> static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
> .master =&omap44xx_l4_per_hwmod,
> @@ -1376,6 +1381,7 @@ static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
> .slaves = omap44xx_dss_dispc_slaves,
> .slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
> .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
> + .dev_attr =&omap44xx_dss_dispc_dev_attr
> };
>
> /*
> diff --git a/arch/arm/mach-omap2/omap_hwmod_common_data.c b/arch/arm/mach-omap2/omap_hwmod_common_data.c
> index de832eb..51e5418 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_common_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_common_data.c
> @@ -49,3 +49,7 @@ struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2 = {
> .srst_shift = SYSC_TYPE2_SOFTRESET_SHIFT,
> };
>
> +struct omap_dss_dispc_dev_attr omap2_3_dss_dispc_dev_attr = {
> + .manager_count = 2,
> + .has_framedonetv_irq = 0
> +};
> diff --git a/arch/arm/mach-omap2/omap_hwmod_common_data.h b/arch/arm/mach-omap2/omap_hwmod_common_data.h
> index 39a7c37..ad5d8f0 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_common_data.h
> +++ b/arch/arm/mach-omap2/omap_hwmod_common_data.h
> @@ -16,6 +16,8 @@
>
> #include<plat/omap_hwmod.h>
>
> +#include "display.h"
> +
> /* Common address space across OMAP2xxx */
> extern struct omap_hwmod_addr_space omap2xxx_uart1_addr_space[];
> extern struct omap_hwmod_addr_space omap2xxx_uart2_addr_space[];
> @@ -111,4 +113,6 @@ extern struct omap_hwmod_class omap2xxx_dma_hwmod_class;
> extern struct omap_hwmod_class omap2xxx_mailbox_hwmod_class;
> extern struct omap_hwmod_class omap2xxx_mcspi_class;
>
> +extern struct omap_dss_dispc_dev_attr omap2_3_dss_dispc_dev_attr;
> +
> #endif
> --
> 1.7.6.3
>
>
^ permalink raw reply
* [PATCH 25/30] ARM: OMAP depends on MMU
From: Santosh Shilimkar @ 2011-10-03 5:21 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-26-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> There is no way to build OMAP kernels without an MMU
> at this point because of dependencies on MMU-only functions.
>
> As long as nobody is interested in fixing this, let's just disable
> this platforms for nommu kernels.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 24/30] ARM: omap2+: ensure that one of omap2/3/4 is selected
From: Santosh Shilimkar @ 2011-10-03 5:20 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-25-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> Random configurations can fail if none of the omap families
> in mach-omap2 is selected. This patch automatically selects
> omap2 if the user has not made any other choice.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
OMAP4 would have been a better default but am fine with
OMAP2 too.
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 23/30] ARM: omap2: select twl4030 support on boards that need it
From: Santosh Shilimkar @ 2011-10-03 5:19 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-24-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> These three boards unconditionally use the twl4030 driver
> from the board-zoom-display.c file. Make sure that the driver
> is always there.
> We also need to select the I2C core so we are able to build
> that driver.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
> arch/arm/mach-omap2/Kconfig | 6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
> index 57b66d5..4deeade 100644
> --- a/arch/arm/mach-omap2/Kconfig
> +++ b/arch/arm/mach-omap2/Kconfig
> @@ -253,6 +253,8 @@ config MACH_OMAP_ZOOM2
> select SERIAL_CORE_CONSOLE
> select SERIAL_8250_CONSOLE
> select REGULATOR_FIXED_VOLTAGE
> + select TWL4030_CORE
> + select I2C
>
Another option to ensure I2C is selected when
TWL* drivers are selected is let it depends
on I2C. That wat we can avoid patching every
machine entry with I2C option.
Not a strong opinion though.
Regards
Santosh
^ permalink raw reply
* [PATCH 14/30] ARM: omap2: irq.c is always needed
From: Santosh Shilimkar @ 2011-10-03 5:14 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-15-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> The Makefile only includes irq.o for omap2 and omap3, but it's in
> fact also required to build omap4-only kernels.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
That should not be the case. Why do you think it is needed for OMAP4 ?
There is nothing in this file which OMAP4 needs since it makes
use of GIC and wakeupgen for it's interrupt handling.
Regards
Santosh
^ permalink raw reply
* [PATCH 13/30] ARM: omap2+: fix omap_hdq_init compilation
From: Santosh Shilimkar @ 2011-10-03 5:11 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-14-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> The definition of the device must depend on the hardware
> we run on, not on the kernel configuration.
>
> arch/arm/mach-omap2/devices.c:624:13: error: 'OMAP_HDQ_BASE' undeclared here (not in a function)
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 07/30] ARM: omap: fix visibility of omap2_mbox_iva_priv
From: Santosh Shilimkar @ 2011-10-03 5:08 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-8-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> map2_mbox_iva_priv is used on multiple omap2 socs but is hidden
> in an outdated #ifdef that is specific to a single soc.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 05/30] ARM: omap: enable building omap2 without omap2420/2430
From: Santosh Shilimkar @ 2011-10-03 5:07 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-6-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> Kconfig allows selecting CONFIG_OMAP2 but no specific SOC, the options
> being omap2420 and omap2430, but that leads to a build error when
> omap3 or omap4 are also enabled and the MULTI_OMAP2 symbol is
> undefined.
>
> This adds another clause to plat/multi.h, mainly to allow all
> possible randconfig combinations to build cleanly.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 06/30] ARM: omap: fix build with CONFIG_I2C_OMAP disabled
From: Santosh Shilimkar @ 2011-10-03 5:06 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-7-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> We must not reference omap_i2c_reset if the file defining it
> does not get built.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 00/30] ARM/omap: omap specific randconfig fixes
From: Santosh Shilimkar @ 2011-10-03 5:05 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-1-git-send-email-arnd@arndb.de>
Arnd,
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> Hi Tony,
>
> I've mentioned these patches before, and now I've managed to
> go through them again and clean them enough for submission.
>
> If nobody has any objections, I would like to send them to
> Linus in the coming merge window, otherwise it would be nice
> if you could pick the ones that look good to you and send
> me a pull request. If any of these look like they should be
> backported to stable kernels, please tell me and I'll add
> a cc:stable at k.o tag.
>
> The entire set is also available from
> git pull git://git.linaro.org/people/arnd/arm-soc.git randconfig/omap
>
> but I have not yet pulled them into the for-next branch.
>
Do you have any scripts to create these randconfigs ?
These are useful to run on newer set of patches also to get all
builds right first place.
Regards
Santosh
^ permalink raw reply
* [PATCH v6 02/16] OMAP2+: hwmod: Add API to check IO PAD wakeup status
From: Govindraj @ 2011-10-03 5:00 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <4E8724D7.6060907@ti.com>
Thanks for the review,
On Sat, Oct 1, 2011 at 8:03 PM, Rajendra Nayak <rnayak@ti.com> wrote:
> On Friday 30 September 2011 04:31 PM, Govindraj.R wrote:
>>
>> Add API to determine IO-PAD wakeup event status for a given
>> hwmod dynamic_mux pad.
>>
>> Wake up event set will be cleared on pad mux_read.
>
> Are these api's even getting used in this series?
Used in Tero's irq_chaining patches.
http://lkml.org/lkml/2011/9/23/121
--
Thanks,
Govindraj.R
>
>>
>> Signed-off-by: Govindraj.R<govindraj.raja@ti.com>
>> ---
>> ?arch/arm/mach-omap2/mux.c ? ? ? ? ? ? ? ? ? ?| ? 30
>> ++++++++++++++++++++++++++
>> ?arch/arm/mach-omap2/mux.h ? ? ? ? ? ? ? ? ? ?| ? 13 +++++++++++
>> ?arch/arm/mach-omap2/omap_hwmod.c ? ? ? ? ? ? | ? ?7 ++++++
>> ?arch/arm/plat-omap/include/plat/omap_hwmod.h | ? ?1 +
>> ?4 files changed, 51 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
>> index 655e948..fb75aae 100644
>> --- a/arch/arm/mach-omap2/mux.c
>> +++ b/arch/arm/mach-omap2/mux.c
>> @@ -351,6 +351,36 @@ err1:
>> ? ? ? ?return NULL;
>> ?}
>>
>> +/**
>> + * omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup
>> + * @hmux: ? ? ? ? ? ? ?Pads for a hwmod
>> + *
>> + * Gets the wakeup status of given pad from omap-hwmod.
>> + * Returns true if wakeup capability is set and wakeup event occurred.
>> + * Returns false if wakeup event has not occurred or pads are not
>> available.
>> + */
>> +bool omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux)
>> +{
>> + ? ? ? int i;
>> + ? ? ? unsigned int val;
>> + ? ? ? u8 ret = false;
>> +
>> + ? ? ? for (i = 0; i< ?hmux->nr_pads; i++) {
>> + ? ? ? ? ? ? ? struct omap_device_pad *pad =&hmux->pads[i];
>> +
>> + ? ? ? ? ? ? ? if (pad->flags& ?OMAP_DEVICE_PAD_WAKEUP) {
>> + ? ? ? ? ? ? ? ? ? ? ? val = omap_mux_read(pad->partition,
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pad->mux->reg_offset);
>> + ? ? ? ? ? ? ? ? ? ? ? if (val& ?OMAP_WAKEUP_EVENT) {
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ret = true;
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;
>> + ? ? ? ? ? ? ? ? ? ? ? }
>> + ? ? ? ? ? ? ? }
>> + ? ? ? }
>> +
>> + ? ? ? return ret;
>> +}
>> +
>> ?/* Assumes the calling function takes care of locking */
>> ?void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state)
>> ?{
>> diff --git a/arch/arm/mach-omap2/mux.h b/arch/arm/mach-omap2/mux.h
>> index 2132308..8b2150a 100644
>> --- a/arch/arm/mach-omap2/mux.h
>> +++ b/arch/arm/mach-omap2/mux.h
>> @@ -225,8 +225,21 @@ omap_hwmod_mux_init(struct omap_device_pad *bpads,
>> int nr_pads);
>> ? */
>> ?void omap_hwmod_mux(struct omap_hwmod_mux_info *hmux, u8 state);
>>
>> +/**
>> + * omap_hwmod_mux_get_wake_status - omap hwmod check pad wakeup
>> + * @hmux: ? ? ? ? ? ? ?Pads for a hwmod
>> + *
>> + * Called only from omap_hwmod.c, do not use.
>> + */
>> +bool omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux);
>> ?#else
>>
>> +static inline bool
>> +omap_hwmod_mux_get_wake_status(struct omap_hwmod_mux_info *hmux)
>> +{
>> + ? ? ? return 0;
>> +}
>> +
>> ?static inline int omap_mux_init_gpio(int gpio, int val)
>> ?{
>> ? ? ? ?return 0;
>> diff --git a/arch/arm/mach-omap2/omap_hwmod.c
>> b/arch/arm/mach-omap2/omap_hwmod.c
>> index e751dd9..a8b24d7 100644
>> --- a/arch/arm/mach-omap2/omap_hwmod.c
>> +++ b/arch/arm/mach-omap2/omap_hwmod.c
>> @@ -2724,3 +2724,10 @@ int omap_hwmod_no_setup_reset(struct omap_hwmod
>> *oh)
>>
>> ? ? ? ?return 0;
>> ?}
>> +
>> +int omap_hwmod_pad_get_wakeup_status(struct omap_hwmod *oh)
>> +{
>> + ? ? ? if (oh&& ?oh->mux)
>> + ? ? ? ? ? ? ? return omap_hwmod_mux_get_wake_status(oh->mux);
>> + ? ? ? return -EINVAL;
>> +}
>> diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h
>> b/arch/arm/plat-omap/include/plat/omap_hwmod.h
>> index 0e329ca..9a6195c 100644
>> --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h
>> +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h
>> @@ -607,6 +607,7 @@ u32 omap_hwmod_get_context_loss_count(struct
>> omap_hwmod *oh);
>>
>> ?int omap_hwmod_no_setup_reset(struct omap_hwmod *oh);
>>
>> +int omap_hwmod_pad_get_wakeup_status(struct omap_hwmod *oh);
>> ?/*
>> ? * Chip variant-specific hwmod init routines - XXX should be converted
>> ? * to use initcalls once the initial boot ordering is straightened out
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-serial" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply
* [PATCH 04/30] ARM: omap: add missing __devexit_p() annotations
From: Santosh Shilimkar @ 2011-10-03 4:59 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-5-git-send-email-arnd@arndb.de>
On Sunday 02 October 2011 08:15 PM, Arnd Bergmann wrote:
> Drivers that refer to a __devexit function in an operations
> structure need to annotate that pointer with __devexit_p so
> replace it with a NULL pointer when the section gets discarded.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> ---
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
^ permalink raw reply
* [PATCH 19/30] tty/serial/omap: console can only be built-in
From: Govindraj @ 2011-10-03 4:53 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1317566760-25681-20-git-send-email-arnd@arndb.de>
On Sun, Oct 2, 2011 at 8:15 PM, Arnd Bergmann <arnd@arndb.de> wrote:
> When the omap serial driver is built as a module, we must
> not allow the console driver to be selected, because consoles
> can not be loadable modules.
Agree.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
> Cc: Govindraj.R <govindraj.raja@ti.com>
Acked-by: Govindraj.R <govindraj.raja@ti.com>
> ---
> ?drivers/tty/serial/Kconfig | ? ?2 +-
> ?1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/tty/serial/Kconfig b/drivers/tty/serial/Kconfig
> index 4dcb37bb..eb04b2f 100644
> --- a/drivers/tty/serial/Kconfig
> +++ b/drivers/tty/serial/Kconfig
> @@ -1346,7 +1346,7 @@ config SERIAL_OMAP
>
> ?config SERIAL_OMAP_CONSOLE
> ? ? ? ?bool "Console on OMAP serial port"
> - ? ? ? depends on SERIAL_OMAP
> + ? ? ? depends on SERIAL_OMAP=y
> ? ? ? ?select SERIAL_CORE_CONSOLE
> ? ? ? ?help
> ? ? ? ? ?Select this option if you would like to use omap serial port as
> --
> 1.7.5.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at ?http://www.tux.org/lkml/
>
^ permalink raw reply
* [PATCH v2] OMAP2PLUS: DSS: Ensure DSS works correctly if display is enabled in bootloader
From: Paul Walmsley @ 2011-10-03 4:45 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <1315811306-11001-1-git-send-email-archit@ti.com>
Hi
some comments:
On Mon, 12 Sep 2011, Archit Taneja wrote:
> Resetting DISPC when a DISPC output is enabled causes the DSS to go into an
> inconsistent state. Thus if the bootloader has enabled a display, the hwmod code
> cannot reset the DISPC module just like that, but the outputs need to be
> disabled first.
>
> Add function dispc_disable_outputs() which disables all active overlay manager
> and ensure all frame transfers are completed.
>
> Modify omap_dss_reset() to call this function and clear DSS_CONTROL,
> DSS_SDI_CONTROL and DSS_PLL_CONTROL so that DSS is in a clean state when the
> DSS2 driver starts.
>
> This resolves the hang issue(caused by a L3 error during boot) seen on the
> beagle board C3, which has a factory bootloader that enables display. The issue
> is resolved with this patch.
>
> Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
> Tested-by: R, Sricharan <r.sricharan@ti.com>
> Signed-off-by: Archit Taneja <archit@ti.com>
> ---
> v2:
>
> - Added more info in the commit message, fixed some typos.
>
> The patch depends on a HWMOD patch series which has been posted by Tomi, it can
> be tested by applying over the following branch:
>
> https://gitorious.org/linux-omap-dss2/linux/commits/master
>
> arch/arm/mach-omap2/display.c | 110 +++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 110 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
> index 93db7c1..eab81f4 100644
> --- a/arch/arm/mach-omap2/display.c
> +++ b/arch/arm/mach-omap2/display.c
> @@ -30,6 +30,30 @@
>
> #include "control.h"
>
> +#define DISPC_BASE_OMAP2 0x48050400
> +#define DISPC_BASE_OMAP4 0x48041000
These should definitely not be needed -- they can be obtained from the
hwmod data and there is clearly something wrong if any IP block addresses
exist outside of those data files.
> +
> +#define DISPC_REG(base, offset) (base + offset)
> +
> +#define DISPC_CONTROL 0x0040
> +#define DISPC_CONTROL2 0x0238
> +#define DISPC_IRQSTATUS 0x0018
> +
> +#define DSS_SYSCONFIG 0x10
> +#define DSS_SYSSTATUS 0x14
> +#define DSS_CONTROL 0x40
> +#define DSS_SDI_CONTROL 0x44
> +#define DSS_PLL_CONTROL 0x48
> +
> +#define LCD_EN_MASK (0x1 << 0)
> +#define DIGIT_EN_MASK (0x1 << 1)
> +
> +#define FRAMEDONE_IRQ_SHIFT 0
> +#define EVSYNC_EVEN_IRQ_SHIFT 2
> +#define EVSYNC_ODD_IRQ_SHIFT 3
> +#define FRAMEDONE2_IRQ_SHIFT 22
> +#define FRAMEDONETV_IRQ_SHIFT 24
> +
> static struct platform_device omap_display_device = {
> .name = "omapdss",
> .id = -1,
> @@ -182,6 +206,78 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
> return r;
> }
>
> +static void dispc_disable_outputs(void)
> +{
> + u32 val, irq_mask, base;
> + bool lcd_en, digit_en, lcd2_en = false;
> + int i, num_mgrs;
> +
> + if (cpu_is_omap44xx()) {
> + base = DISPC_BASE_OMAP4;
> + num_mgrs = 3;
> + } else {
> + base = DISPC_BASE_OMAP2;
> + num_mgrs = 2;
> + }
base should not be needed here. The num_mgrs should come from the hwmod
data. We're trying to get rid of cpu_is_omap*() functions wherever
possible.
> +
> + /* store value of LCDENABLE and DIGITENABLE bits */
> + val = omap_readl(DISPC_REG(base, DISPC_CONTROL));
omap_{read,write}l() are deprecated and should no longer be used. This
code can use omap_hwmod_{read,write}() instead. You can pass the struct
omap_hwmod * into this function from the caller.
> + lcd_en = val & LCD_EN_MASK;
> + digit_en = val & DIGIT_EN_MASK;
> +
> + /* store value of LCDENABLE for LCD2 */
> + if (num_mgrs > 2) {
> + val = omap_readl(DISPC_REG(base, DISPC_CONTROL2));
> + lcd2_en = val & LCD_EN_MASK;
> + }
> +
> + /*
> + * If any manager was enabled, we need to disable it before DSS clocks
> + * are disabled or DISPC module is reset
> + */
> + if (lcd_en || digit_en || lcd2_en) {
Rather than this massive if block, please test the inverse condition and
bail out early. This avoids unnecessary indentation levels that make code
harder to read.
> + irq_mask = (lcd_en ? 1 : 0) << FRAMEDONE_IRQ_SHIFT;
> +
> + if (cpu_is_omap44xx())
> + irq_mask |= (digit_en ? 1 : 0) << FRAMEDONETV_IRQ_SHIFT;
> + else
> + irq_mask |= (digit_en ? 1 : 0) << EVSYNC_EVEN_IRQ_SHIFT |
> + (digit_en ? 1 : 0) << EVSYNC_ODD_IRQ_SHIFT;
Rather than a cpu_is_omap*() test, the presence of a working FRAMEDONETV
interrupt bit should be passed through the hwmod data.
> +
> + irq_mask |= (lcd2_en ? 1 : 0) << FRAMEDONE2_IRQ_SHIFT;
> +
> + /*
> + * clear any previous FRAMEDONE, FRAMEDONETV, EVSYNC_EVEN/ODD
> + * or FRAMEDONE2 interrupts
> + */
> + omap_writel(irq_mask, DISPC_REG(base, DISPC_IRQSTATUS));
> +
> + /* disable LCD and TV managers */
> + val = omap_readl(DISPC_REG(base, DISPC_CONTROL));
> + val &= ~(LCD_EN_MASK | DIGIT_EN_MASK);
> + omap_writel(val, DISPC_REG(base, DISPC_CONTROL));
> +
> + /* disable LCD2 manager */
> + if (num_mgrs > 2) {
> + val = omap_readl(DISPC_REG(base, DISPC_CONTROL2));
> + val &= ~LCD_EN_MASK;
> + omap_writel(val, DISPC_REG(base, DISPC_CONTROL2));
> + }
> +
> + i = 0;
> + while ((omap_readl(DISPC_REG(base, DISPC_IRQSTATUS)) & irq_mask) !=
> + irq_mask) {
> + i++;
> + if (i > 100) {
Please hoist this constant up to the top of this file, and use a macro
with a comment.
> + printk(KERN_ERR "didn't get FRAMEDONE1/2 or TV"
> + " interrupt\n");
pr_err() is shorter and better here.
> + break;
> + }
> + mdelay(1);
> + }
> + }
> +}
> +
> #define MAX_MODULE_SOFTRESET_WAIT 10000
> int omap_dss_reset(struct omap_hwmod *oh)
> {
> @@ -198,6 +294,20 @@ int omap_dss_reset(struct omap_hwmod *oh)
> if (oc->_clk)
> clk_enable(oc->_clk);
>
> + dispc_disable_outputs();
Pass the struct omap_hwmod *oh in here.
> +
> + /* clear SDI registers */
> + if (cpu_is_omap3430()) {
> + omap_hwmod_write(0x0, oh, DSS_SDI_CONTROL);
> + omap_hwmod_write(0x0, oh, DSS_PLL_CONTROL);
> + }
> +
> + /*
> + * clear DSS_CONTROL register to switch DSS clock sources to
> + * PRCM clock, if any
> + */
> + omap_hwmod_write(0x0, oh, DSS_CONTROL);
> +
> omap_test_timeout((omap_hwmod_read(oh, oh->class->sysc->syss_offs)
> & SYSS_RESETDONE_MASK),
> MAX_MODULE_SOFTRESET_WAIT, c);
> --
> 1.7.1
In the interest of expediency, I've made the above changes to the patch --
updated patch below. The following Compile-tested only, so could you
review it please and make sure I haven't broken anything? For future
patches, please keep the comments above in mind.
thanks,
- Paul
From: Archit Taneja <archit@ti.com>
Date: Mon, 12 Sep 2011 12:38:26 +0530
Subject: [PATCH 1/2] ARM: OMAP2PLUS: DSS: Ensure DSS works correctly if
display is enabled in bootloader
Resetting DISPC when a DISPC output is enabled causes the DSS to go into an
inconsistent state. Thus if the bootloader has enabled a display, the hwmod code
cannot reset the DISPC module just like that, but the outputs need to be
disabled first.
Add function dispc_disable_outputs() which disables all active overlay manager
and ensure all frame transfers are completed.
Modify omap_dss_reset() to call this function and clear DSS_CONTROL,
DSS_SDI_CONTROL and DSS_PLL_CONTROL so that DSS is in a clean state when the
DSS2 driver starts.
This resolves the hang issue(caused by a L3 error during boot) seen on the
beagle board C3, which has a factory bootloader that enables display. The issue
is resolved with this patch.
Acked-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Tested-by: R, Sricharan <r.sricharan@ti.com>
Signed-off-by: Archit Taneja <archit@ti.com>
[paul at pwsan.com: restructured code, removed omap_{read,write}l(), removed
cpu_is_omap*() calls and converted to dev_attr]
Signed-off-by: Paul Walmsley <paul@pwsan.com>
---
arch/arm/mach-omap2/display.c | 118 ++++++++++++++++++++++++++
arch/arm/mach-omap2/display.h | 29 ++++++
arch/arm/mach-omap2/omap_hwmod_2420_data.c | 1 +
arch/arm/mach-omap2/omap_hwmod_2430_data.c | 1 +
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 1 +
arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 6 ++
arch/arm/mach-omap2/omap_hwmod_common_data.c | 4 +
arch/arm/mach-omap2/omap_hwmod_common_data.h | 4 +
8 files changed, 164 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-omap2/display.h
diff --git a/arch/arm/mach-omap2/display.c b/arch/arm/mach-omap2/display.c
index cdb675a..fcd2c3a 100644
--- a/arch/arm/mach-omap2/display.c
+++ b/arch/arm/mach-omap2/display.c
@@ -28,6 +28,33 @@
#include <plat/omap-pm.h>
#include <plat/common.h>
+#include "display.h"
+
+#define DISPC_CONTROL 0x0040
+#define DISPC_CONTROL2 0x0238
+#define DISPC_IRQSTATUS 0x0018
+
+#define DSS_SYSCONFIG 0x10
+#define DSS_SYSSTATUS 0x14
+#define DSS_CONTROL 0x40
+#define DSS_SDI_CONTROL 0x44
+#define DSS_PLL_CONTROL 0x48
+
+#define LCD_EN_MASK (0x1 << 0)
+#define DIGIT_EN_MASK (0x1 << 1)
+
+#define FRAMEDONE_IRQ_SHIFT 0
+#define EVSYNC_EVEN_IRQ_SHIFT 2
+#define EVSYNC_ODD_IRQ_SHIFT 3
+#define FRAMEDONE2_IRQ_SHIFT 22
+#define FRAMEDONETV_IRQ_SHIFT 24
+
+/*
+ * FRAMEDONE_IRQ_TIMEOUT: how long (in milliseconds) to wait during DISPC
+ * reset before deciding that something has gone wrong
+ */
+#define FRAMEDONE_IRQ_TIMEOUT 100
+
static struct platform_device omap_display_device = {
.name = "omapdss",
.id = -1,
@@ -128,6 +155,83 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
return r;
}
+static void dispc_disable_outputs(struct omap_hwmod *oh)
+{
+ u32 v, irq_mask = 0;
+ bool lcd_en, digit_en, lcd2_en = false;
+ int i;
+ struct omap_dss_dispc_dev_attr *da;
+
+ if (!oh->dev_attr) {
+ pr_err("display: could not disable outputs during reset due to missing dev_attr\n");
+ return;
+ }
+
+ da = (struct omap_dss_dispc_dev_attr *)oh->dev_attr;
+
+ /* store value of LCDENABLE and DIGITENABLE bits */
+ v = omap_hwmod_read(oh, DISPC_CONTROL);
+ lcd_en = v & LCD_EN_MASK;
+ digit_en = v & DIGIT_EN_MASK;
+
+ /* store value of LCDENABLE for LCD2 */
+ if (da->manager_count > 2) {
+ v = omap_hwmod_read(oh, DISPC_CONTROL2);
+ lcd2_en = v & LCD_EN_MASK;
+ }
+
+ if (!(lcd_en | digit_en | lcd2_en))
+ return; /* no managers currently enabled */
+
+ /*
+ * If any manager was enabled, we need to disable it before
+ * DSS clocks are disabled or DISPC module is reset
+ */
+ if (lcd_en)
+ irq_mask |= 1 << FRAMEDONE_IRQ_SHIFT;
+
+ if (digit_en) {
+ if (da->has_framedonetv_irq) {
+ irq_mask |= 1 << FRAMEDONETV_IRQ_SHIFT;
+ } else {
+ irq_mask |= 1 << EVSYNC_EVEN_IRQ_SHIFT |
+ 1 << EVSYNC_ODD_IRQ_SHIFT;
+ }
+ }
+
+ if (lcd2_en)
+ irq_mask |= 1 << FRAMEDONE2_IRQ_SHIFT;
+
+ /*
+ * clear any previous FRAMEDONE, FRAMEDONETV,
+ * EVSYNC_EVEN/ODD or FRAMEDONE2 interrupts
+ */
+ omap_hwmod_write(irq_mask, oh, DISPC_IRQSTATUS);
+
+ /* disable LCD and TV managers */
+ v = omap_hwmod_read(oh, DISPC_CONTROL);
+ v &= ~(LCD_EN_MASK | DIGIT_EN_MASK);
+ omap_hwmod_write(v, oh, DISPC_CONTROL);
+
+ /* disable LCD2 manager */
+ if (da->manager_count > 2) {
+ v = omap_hwmod_read(oh, DISPC_CONTROL2);
+ v &= ~LCD_EN_MASK;
+ omap_hwmod_write(v, oh, DISPC_CONTROL2);
+ }
+
+ i = 0;
+ while ((omap_hwmod_read(oh, DISPC_IRQSTATUS) & irq_mask) !=
+ irq_mask) {
+ i++;
+ if (i > FRAMEDONE_IRQ_TIMEOUT) {
+ pr_err("didn't get FRAMEDONE1/2 or TV interrupt\n");
+ break;
+ }
+ mdelay(1);
+ }
+}
+
#define MAX_MODULE_SOFTRESET_WAIT 10000
int omap_dss_reset(struct omap_hwmod *oh)
{
@@ -144,6 +248,20 @@ int omap_dss_reset(struct omap_hwmod *oh)
if (oc->_clk)
clk_enable(oc->_clk);
+ dispc_disable_outputs(oh);
+
+ /* clear SDI registers */
+ if (cpu_is_omap3430()) {
+ omap_hwmod_write(0x0, oh, DSS_SDI_CONTROL);
+ omap_hwmod_write(0x0, oh, DSS_PLL_CONTROL);
+ }
+
+ /*
+ * clear DSS_CONTROL register to switch DSS clock sources to
+ * PRCM clock, if any
+ */
+ omap_hwmod_write(0x0, oh, DSS_CONTROL);
+
omap_test_timeout((omap_hwmod_read(oh, oh->class->sysc->syss_offs)
& SYSS_RESETDONE_MASK),
MAX_MODULE_SOFTRESET_WAIT, c);
diff --git a/arch/arm/mach-omap2/display.h b/arch/arm/mach-omap2/display.h
new file mode 100644
index 0000000..b871b01
--- /dev/null
+++ b/arch/arm/mach-omap2/display.h
@@ -0,0 +1,29 @@
+/*
+ * display.h - OMAP2+ integration-specific DSS header
+ *
+ * Copyright (C) 2011 Texas Instruments, Inc.
+ *
+ * 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.
+ *
+ * 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __ARCH_ARM_MACH_OMAP2_DISPLAY_H
+#define __ARCH_ARM_MACH_OMAP2_DISPLAY_H
+
+#include <linux/kernel.h>
+
+struct omap_dss_dispc_dev_attr {
+ u8 manager_count;
+ bool has_framedonetv_irq;
+};
+
+#endif
diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
index 09d9395..8e32cb3 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -945,6 +945,7 @@ static struct omap_hwmod omap2420_dss_dispc_hwmod = {
.slaves_cnt = ARRAY_SIZE(omap2420_dss_dispc_slaves),
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
.flags = HWMOD_NO_IDLEST,
+ .dev_attr = &omap2_3_dss_dispc_dev_attr
};
/* l4_core -> dss_rfbi */
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
index 67aff19..6e8ef12 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
@@ -1005,6 +1005,7 @@ static struct omap_hwmod omap2430_dss_dispc_hwmod = {
.slaves_cnt = ARRAY_SIZE(omap2430_dss_dispc_slaves),
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
.flags = HWMOD_NO_IDLEST,
+ .dev_attr = &omap2_3_dss_dispc_dev_attr
};
/* l4_core -> dss_rfbi */
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index 4a02cc3..12988fe 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -1465,6 +1465,7 @@ static struct omap_hwmod omap3xxx_dss_dispc_hwmod = {
CHIP_GE_OMAP3430ES2 | CHIP_IS_OMAP3630ES1 |
CHIP_GE_OMAP3630ES1_1),
.flags = HWMOD_NO_IDLEST,
+ .dev_attr = &omap2_3_dss_dispc_dev_attr
};
/*
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 7a7489e..17adfb3 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -1345,6 +1345,11 @@ static struct omap_hwmod_addr_space omap44xx_dss_dispc_addrs[] = {
{ }
};
+static struct omap_dss_dispc_dev_attr omap44xx_dss_dispc_dev_attr = {
+ .manager_count = 3,
+ .has_framedonetv_irq = 1
+};
+
/* l4_per -> dss_dispc */
static struct omap_hwmod_ocp_if omap44xx_l4_per__dss_dispc = {
.master = &omap44xx_l4_per_hwmod,
@@ -1376,6 +1381,7 @@ static struct omap_hwmod omap44xx_dss_dispc_hwmod = {
.slaves = omap44xx_dss_dispc_slaves,
.slaves_cnt = ARRAY_SIZE(omap44xx_dss_dispc_slaves),
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+ .dev_attr = &omap44xx_dss_dispc_dev_attr
};
/*
diff --git a/arch/arm/mach-omap2/omap_hwmod_common_data.c b/arch/arm/mach-omap2/omap_hwmod_common_data.c
index de832eb..51e5418 100644
--- a/arch/arm/mach-omap2/omap_hwmod_common_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_common_data.c
@@ -49,3 +49,7 @@ struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2 = {
.srst_shift = SYSC_TYPE2_SOFTRESET_SHIFT,
};
+struct omap_dss_dispc_dev_attr omap2_3_dss_dispc_dev_attr = {
+ .manager_count = 2,
+ .has_framedonetv_irq = 0
+};
diff --git a/arch/arm/mach-omap2/omap_hwmod_common_data.h b/arch/arm/mach-omap2/omap_hwmod_common_data.h
index 39a7c37..ad5d8f0 100644
--- a/arch/arm/mach-omap2/omap_hwmod_common_data.h
+++ b/arch/arm/mach-omap2/omap_hwmod_common_data.h
@@ -16,6 +16,8 @@
#include <plat/omap_hwmod.h>
+#include "display.h"
+
/* Common address space across OMAP2xxx */
extern struct omap_hwmod_addr_space omap2xxx_uart1_addr_space[];
extern struct omap_hwmod_addr_space omap2xxx_uart2_addr_space[];
@@ -111,4 +113,6 @@ extern struct omap_hwmod_class omap2xxx_dma_hwmod_class;
extern struct omap_hwmod_class omap2xxx_mailbox_hwmod_class;
extern struct omap_hwmod_class omap2xxx_mcspi_class;
+extern struct omap_dss_dispc_dev_attr omap2_3_dss_dispc_dev_attr;
+
#endif
--
1.7.6.3
^ permalink raw reply related
* [PATCH] ARM: EXYNOS: Add ARCH_EXYNOS and reorganize arch/arm/mach-exynos
From: Kyungmin Park @ 2011-10-03 4:02 UTC (permalink / raw)
To: linux-arm-kernel
In-Reply-To: <001f01cc80e5$3abd1c80$b0375580$%kim@samsung.com>
Hi,
I'm afraid to change machine directory name again. mach-s5pv310 ->
mach-exynos4 -> mach-exynos.
As I remember linus blamed the renaming the file names are happened
frequently at ARM
Thank you,
Kyungmin Park
2011/10/2 Kukjin Kim <kgene.kim@samsung.com>:
> The arch/arm/mach-exynos4 directory (CONFIG_ARCH_EXYNOS4) has
> made for plaforms based on EXYNOS4 SoCs. But since upcoming
> Samsung's SoCs such as EXYNOS5 (ARM Cortex A15) can reuse most
> codes in current mach-exynos4, one mach-exynos directory will
> be used for them.
>
> This patch changes to CONFIG_ARCH_EXYNOS (arch/arm/mach-exynos)
> but keeps original CONFIG_ARCH_EXYNOS4 in mach-exynos/Kconfig to
> avoid changing in driver side.
>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: Russell King <rmk+kernel@arm.linux.org.uk>
> Signed-off-by: Kukjin Kim <kgene.kim@samsung.com>
> ---
> NOTE: The codes for upcoming SoCs will be implemented soon.
>
> ?arch/arm/Kconfig ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?8 +-
> ?arch/arm/Makefile ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?2 +-
> ?arch/arm/configs/exynos4_defconfig ? ? ? ? ? ? ? ? | ? ?7 +--
> ?arch/arm/{mach-exynos4 => mach-exynos}/Kconfig ? ? | ? 41 +++++++++---
> ?arch/arm/{mach-exynos4 => mach-exynos}/Makefile ? ?| ? ?8 +-
> ?.../{mach-exynos4 => mach-exynos}/Makefile.boot ? ?| ? ?0
> ?.../clock-exynos4210.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../clock-exynos4212.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/clock.c ? ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/cpu.c ? ? ? | ? 69 +++++++++++---------
> ?arch/arm/{mach-exynos4 => mach-exynos}/cpuidle.c ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/dev-ahci.c ?| ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/dev-audio.c | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/dev-dwmci.c | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/dev-pd.c ? ?| ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/dev-sysmmu.c | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/dma.c ? ? ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/headsmp.S ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/hotplug.c ? | ? ?0
> ?.../include/mach/debug-macro.S ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/dma.h ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/dwmci.h ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/entry-macro.S ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/exynos4-clock.h ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/gpio.h ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/hardware.h ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/io.h ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/irqs.h ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/map.h ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? 32 ++++++----
> ?.../include/mach/memory.h ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/pm-core.h ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/pmu.h ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/regs-audss.h ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/regs-clock.h ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/regs-gpio.h ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/regs-irq.h ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/regs-mct.h ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/regs-mem.h ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/regs-pmu.h ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/regs-sysmmu.h ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/regs-usb-phy.h ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/sysmmu.h ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/system.h ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/timex.h ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../include/mach/uncompress.h ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?.../include/mach/vmalloc.h ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/init.c ? ? ?| ? ?0
> ?.../{mach-exynos4 => mach-exynos}/irq-combiner.c ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/irq-eint.c ?| ? ?0
> ?.../mach-armlex4210.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/mach-nuri.c | ? ?0
> ?.../{mach-exynos4 => mach-exynos}/mach-origen.c ? ?| ? ?0
> ?.../{mach-exynos4 => mach-exynos}/mach-smdk4x12.c ?| ? ?0
> ?.../{mach-exynos4 => mach-exynos}/mach-smdkv310.c ?| ? ?0
> ?.../mach-universal_c210.c ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/mct.c ? ? ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/platsmp.c ? | ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/pm.c ? ? ? ?| ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/pmu.c ? ? ? | ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-fimc.c | ? ?0
> ?.../{mach-exynos4 => mach-exynos}/setup-fimd0.c ? ?| ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-i2c0.c | ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-i2c1.c | ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-i2c2.c | ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-i2c3.c | ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-i2c4.c | ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-i2c5.c | ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-i2c6.c | ? ?0
> ?.../arm/{mach-exynos4 => mach-exynos}/setup-i2c7.c | ? ?0
> ?.../{mach-exynos4 => mach-exynos}/setup-keypad.c ? | ? ?0
> ?.../setup-sdhci-gpio.c ? ? ? ? ? ? ? ? ? ? ? ? ? ? | ? ?0
> ?.../{mach-exynos4 => mach-exynos}/setup-sdhci.c ? ?| ? ?0
> ?.../{mach-exynos4 => mach-exynos}/setup-usb-phy.c ?| ? ?0
> ?arch/arm/{mach-exynos4 => mach-exynos}/sleep.S ? ? | ? ?0
> ?arch/arm/plat-s5p/Kconfig ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?2 +-
> ?arch/arm/plat-s5p/cpu.c ? ? ? ? ? ? ? ? ? ? ? ? ? ?| ? ?6 +-
> ?arch/arm/plat-samsung/include/plat/exynos4.h ? ? ? | ? ?6 +-
> ?77 files changed, 104 insertions(+), 77 deletions(-)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/Kconfig (91%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/Makefile (89%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/Makefile.boot (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/clock-exynos4210.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/clock-exynos4212.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/clock.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/cpu.c (91%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/cpuidle.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/dev-ahci.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/dev-audio.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/dev-dwmci.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/dev-pd.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/dev-sysmmu.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/dma.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/headsmp.S (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/hotplug.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/debug-macro.S (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/dma.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/dwmci.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/entry-macro.S (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/exynos4-clock.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/gpio.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/hardware.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/io.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/irqs.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/map.h (93%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/memory.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/pm-core.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/pmu.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-audss.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-clock.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-gpio.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-irq.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-mct.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-mem.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-pmu.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-sysmmu.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/regs-usb-phy.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/sysmmu.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/system.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/timex.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/uncompress.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/include/mach/vmalloc.h (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/init.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/irq-combiner.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/irq-eint.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/mach-armlex4210.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/mach-nuri.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/mach-origen.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/mach-smdk4x12.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/mach-smdkv310.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/mach-universal_c210.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/mct.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/platsmp.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/pm.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/pmu.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-fimc.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-fimd0.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-i2c0.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-i2c1.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-i2c2.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-i2c3.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-i2c4.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-i2c5.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-i2c6.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-i2c7.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-keypad.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-sdhci-gpio.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-sdhci.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/setup-usb-phy.c (100%)
> ?rename arch/arm/{mach-exynos4 => mach-exynos}/sleep.S (100%)
>
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index bea81d0..21dbf01 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -781,8 +781,8 @@ config ARCH_S5PV210
> ? ? ? ?help
> ? ? ? ? ?Samsung S5PV210/S5PC110 series based systems
>
> -config ARCH_EXYNOS4
> - ? ? ? bool "Samsung EXYNOS4"
> +config ARCH_EXYNOS
> + ? ? ? bool "SAMSUNG EXYNOS"
> ? ? ? ?select CPU_V7
> ? ? ? ?select ARCH_SPARSEMEM_ENABLE
> ? ? ? ?select ARCH_HAS_HOLES_MEMORYMODEL
> @@ -795,7 +795,7 @@ config ARCH_EXYNOS4
> ? ? ? ?select HAVE_S3C2410_I2C if I2C
> ? ? ? ?select HAVE_S3C2410_WATCHDOG if WATCHDOG
> ? ? ? ?help
> - ? ? ? ? Samsung EXYNOS4 series based systems
> + ? ? ? ? Support for SAMSUNG's EXYNOS SoCs (EXYNOS4/5)
>
> ?config ARCH_SHARK
> ? ? ? ?bool "Shark"
> @@ -1021,7 +1021,7 @@ source "arch/arm/mach-s5pc100/Kconfig"
>
> ?source "arch/arm/mach-s5pv210/Kconfig"
>
> -source "arch/arm/mach-exynos4/Kconfig"
> +source "arch/arm/mach-exynos/Kconfig"
>
> ?source "arch/arm/mach-shmobile/Kconfig"
>
> diff --git a/arch/arm/Makefile b/arch/arm/Makefile
> index 70c424e..289439e 100644
> --- a/arch/arm/Makefile
> +++ b/arch/arm/Makefile
> @@ -177,7 +177,7 @@ machine-$(CONFIG_ARCH_S3C64XX) ? ? ? ? ? ? ?:= s3c64xx
> ?machine-$(CONFIG_ARCH_S5P64X0) ? ? ? ? := s5p64x0
> ?machine-$(CONFIG_ARCH_S5PC100) ? ? ? ? := s5pc100
> ?machine-$(CONFIG_ARCH_S5PV210) ? ? ? ? := s5pv210
> -machine-$(CONFIG_ARCH_EXYNOS4) ? ? ? ? := exynos4
> +machine-$(CONFIG_ARCH_EXYNOS4) ? ? ? ? := exynos
> ?machine-$(CONFIG_ARCH_SA1100) ? ? ? ? ?:= sa1100
> ?machine-$(CONFIG_ARCH_SHARK) ? ? ? ? ? := shark
> ?machine-$(CONFIG_ARCH_SHMOBILE) ? ? ? ?:= shmobile
> diff --git a/arch/arm/configs/exynos4_defconfig b/arch/arm/configs/exynos4_defconfig
> index cd40bb5..b0d3c13 100644
> --- a/arch/arm/configs/exynos4_defconfig
> +++ b/arch/arm/configs/exynos4_defconfig
> @@ -4,10 +4,9 @@ CONFIG_KALLSYMS_ALL=y
> ?CONFIG_MODULES=y
> ?CONFIG_MODULE_UNLOAD=y
> ?# CONFIG_BLK_DEV_BSG is not set
> -CONFIG_ARCH_EXYNOS4=y
> +CONFIG_ARCH_EXYNOS=y
> ?CONFIG_S3C_LOWLEVEL_UART_PORT=1
> ?CONFIG_MACH_SMDKC210=y
> -CONFIG_MACH_SMDKV310=y
> ?CONFIG_MACH_ARMLEX4210=y
> ?CONFIG_MACH_UNIVERSAL_C210=y
> ?CONFIG_MACH_NURI=y
> @@ -16,7 +15,6 @@ CONFIG_NO_HZ=y
> ?CONFIG_HIGH_RES_TIMERS=y
> ?CONFIG_SMP=y
> ?CONFIG_NR_CPUS=2
> -CONFIG_HOTPLUG_CPU=y
> ?CONFIG_PREEMPT=y
> ?CONFIG_AEABI=y
> ?CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc mem=256M"
> @@ -61,12 +59,9 @@ CONFIG_DETECT_HUNG_TASK=y
> ?CONFIG_DEBUG_RT_MUTEXES=y
> ?CONFIG_DEBUG_SPINLOCK=y
> ?CONFIG_DEBUG_MUTEXES=y
> -CONFIG_DEBUG_SPINLOCK_SLEEP=y
> ?CONFIG_DEBUG_INFO=y
> -# CONFIG_RCU_CPU_STALL_DETECTOR is not set
> ?CONFIG_SYSCTL_SYSCALL_CHECK=y
> ?CONFIG_DEBUG_USER=y
> -CONFIG_DEBUG_ERRORS=y
> ?CONFIG_DEBUG_LL=y
> ?CONFIG_EARLY_PRINTK=y
> ?CONFIG_DEBUG_S3C_UART=1
> diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-exynos/Kconfig
> similarity index 91%
> rename from arch/arm/mach-exynos4/Kconfig
> rename to arch/arm/mach-exynos/Kconfig
> index 6dfde07..999989e 100644
> --- a/arch/arm/mach-exynos4/Kconfig
> +++ b/arch/arm/mach-exynos/Kconfig
> @@ -1,4 +1,4 @@
> -# arch/arm/mach-exynos4/Kconfig
> +# arch/arm/mach-exynos/Kconfig
> ?#
> ?# Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
> ?# ? ? ? ? ? ? ?http://www.samsung.com/
> @@ -7,21 +7,42 @@
>
> ?# Configuration options for the EXYNOS4
>
> -if ARCH_EXYNOS4
> +if ARCH_EXYNOS
> +
> +menu "SAMSUNG EXYNOS SoCs Support"
> +
> +choice
> + ? ? ? prompt "EXYNOS System Type"
> + ? ? ? default ARCH_EXYNOS4
> +
> +config ARCH_EXYNOS4
> + ? ? ? bool "SAMSUNG EXYNOS4"
> + ? ? ? help
> + ? ? ? ? Samsung EXYNOS4 SoCs based systems
> +
> +endchoice
> +
> +comment "EXYNOS SoCs"
>
> ?config CPU_EXYNOS4210
> - ? ? ? bool
> + ? ? ? bool "SAMSUNG EXYNOS4210"
> + ? ? ? default y
> + ? ? ? depends on ARCH_EXYNOS4
> ? ? ? ?select SAMSUNG_DMADEV
> ? ? ? ?help
> ? ? ? ? ?Enable EXYNOS4210 CPU support
>
> ?config SOC_EXYNOS4212
> - ? ? ? bool
> + ? ? ? bool "SAMSUNG EXYNOS4212"
> + ? ? ? default y
> + ? ? ? depends on ARCH_EXYNOS4
> ? ? ? ?help
> ? ? ? ? ?Enable EXYNOS4212 SoC support
>
> ?config SOC_EXYNOS4412
> - ? ? ? bool
> + ? ? ? bool "SAMSUNG EXYNOS4412"
> + ? ? ? default y
> + ? ? ? depends on ARCH_EXYNOS4
> ? ? ? ?help
> ? ? ? ? ?Enable EXYNOS4412 SoC support
>
> @@ -119,7 +140,7 @@ config EXYNOS4_SETUP_USB_PHY
>
> ?# machine support
>
> -menu "EXYNOS4 Machines"
> +if ARCH_EXYNOS4
>
> ?comment "EXYNOS4210 Boards"
>
> @@ -286,12 +307,11 @@ config MACH_SMDK4412
> ? ? ? ?select MACH_SMDK4212
> ? ? ? ?help
> ? ? ? ? ?Machine support for Samsung SMDK4412
> +endif
>
> -endmenu
> -
> -comment "Configuration for HSMMC bus width"
> +if ARCH_EXYNOS4
>
> -menu "Use 8-bit bus width"
> +comment "Configuration for HSMMC 8-bit bus width"
>
> ?config EXYNOS4_SDHCI_CH0_8BIT
> ? ? ? ?bool "Channel 0 with 8-bit bus"
> @@ -304,6 +324,7 @@ config EXYNOS4_SDHCI_CH2_8BIT
> ? ? ? ?help
> ? ? ? ? ?Support HSMMC Channel 2 8-bit bus.
> ? ? ? ? ?If selected, Channel 3 is disabled.
> +endif
>
> ?endmenu
>
> diff --git a/arch/arm/mach-exynos4/Makefile b/arch/arm/mach-exynos/Makefile
> similarity index 89%
> rename from arch/arm/mach-exynos4/Makefile
> rename to arch/arm/mach-exynos/Makefile
> index c9b2e1f..fa715eb 100644
> --- a/arch/arm/mach-exynos4/Makefile
> +++ b/arch/arm/mach-exynos/Makefile
> @@ -1,4 +1,4 @@
> -# arch/arm/mach-exynos4/Makefile
> +# arch/arm/mach-exynos/Makefile
> ?#
> ?# Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
> ?# ? ? ? ? ? ? ?http://www.samsung.com/
> @@ -12,8 +12,8 @@ obj- ? ? ? ? ? ? ? ? ? ? ? ? ?:=
>
> ?# Core support for EXYNOS4 system
>
> -obj-$(CONFIG_ARCH_EXYNOS4) ? ? += cpu.o init.o clock.o irq-combiner.o
> -obj-$(CONFIG_ARCH_EXYNOS4) ? ? += setup-i2c0.o irq-eint.o dma.o pmu.o
> +obj-$(CONFIG_ARCH_EXYNOS) ? ? ?+= cpu.o init.o clock.o irq-combiner.o setup-i2c0.o
> +obj-$(CONFIG_ARCH_EXYNOS4) ? ? += irq-eint.o dma.o pmu.o
> ?obj-$(CONFIG_CPU_EXYNOS4210) ? += clock-exynos4210.o
> ?obj-$(CONFIG_SOC_EXYNOS4212) ? += clock-exynos4212.o
> ?obj-$(CONFIG_PM) ? ? ? ? ? ? ? += pm.o sleep.o
> @@ -39,7 +39,7 @@ obj-$(CONFIG_MACH_SMDK4412) ? ? ? ? ? += mach-smdk4x12.o
>
> ?# device support
>
> -obj-y ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?+= dev-audio.o
> +obj-$(CONFIG_ARCH_EXYNOS4) ? ? ? ? ? ? += dev-audio.o
> ?obj-$(CONFIG_EXYNOS4_DEV_AHCI) ? ? ? ? += dev-ahci.o
> ?obj-$(CONFIG_EXYNOS4_DEV_PD) ? ? ? ? ? += dev-pd.o
> ?obj-$(CONFIG_EXYNOS4_DEV_SYSMMU) ? ? ? += dev-sysmmu.o
> diff --git a/arch/arm/mach-exynos4/Makefile.boot b/arch/arm/mach-exynos/Makefile.boot
> similarity index 100%
> rename from arch/arm/mach-exynos4/Makefile.boot
> rename to arch/arm/mach-exynos/Makefile.boot
> diff --git a/arch/arm/mach-exynos4/clock-exynos4210.c b/arch/arm/mach-exynos/clock-exynos4210.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/clock-exynos4210.c
> rename to arch/arm/mach-exynos/clock-exynos4210.c
> diff --git a/arch/arm/mach-exynos4/clock-exynos4212.c b/arch/arm/mach-exynos/clock-exynos4212.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/clock-exynos4212.c
> rename to arch/arm/mach-exynos/clock-exynos4212.c
> diff --git a/arch/arm/mach-exynos4/clock.c b/arch/arm/mach-exynos/clock.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/clock.c
> rename to arch/arm/mach-exynos/clock.c
> diff --git a/arch/arm/mach-exynos4/cpu.c b/arch/arm/mach-exynos/cpu.c
> similarity index 91%
> rename from arch/arm/mach-exynos4/cpu.c
> rename to arch/arm/mach-exynos/cpu.c
> index 5b1765b..90ec247 100644
> --- a/arch/arm/mach-exynos4/cpu.c
> +++ b/arch/arm/mach-exynos/cpu.c
> @@ -1,4 +1,4 @@
> -/* linux/arch/arm/mach-exynos4/cpu.c
> +/* linux/arch/arm/mach-exynos/cpu.c
> ?*
> ?* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
> ?* ? ? ? ? ? ? http://www.samsung.com
> @@ -40,28 +40,47 @@ extern int combiner_init(unsigned int combiner_nr, void __iomem *base,
> ?extern void combiner_cascade_irq(unsigned int combiner_nr, unsigned int irq);
>
> ?/* Initial IO mappings */
> -static struct map_desc exynos4_iodesc[] __initdata = {
> +static struct map_desc exynos_iodesc[] __initdata = {
> ? ? ? ?{
> ? ? ? ? ? ? ? ?.virtual ? ? ? ?= (unsigned long)S5P_VA_SYSTIMER,
> - ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_SYSTIMER),
> + ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS_PA_SYSTIMER),
> ? ? ? ? ? ? ? ?.length ? ? ? ? = SZ_4K,
> - ? ? ? ? ? ? ? .type ? ? ? ? ? = MT_DEVICE,
> - ? ? ? }, {
> - ? ? ? ? ? ? ? .virtual ? ? ? ?= (unsigned long)S5P_VA_CMU,
> - ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_CMU),
> - ? ? ? ? ? ? ? .length ? ? ? ? = SZ_128K,
> ? ? ? ? ? ? ? ?.type ? ? ? ? ? = MT_DEVICE,
> ? ? ? ?}, {
> ? ? ? ? ? ? ? ?.virtual ? ? ? ?= (unsigned long)S5P_VA_PMU,
> - ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_PMU),
> + ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS_PA_PMU),
> ? ? ? ? ? ? ? ?.length ? ? ? ? = SZ_64K,
> ? ? ? ? ? ? ? ?.type ? ? ? ? ? = MT_DEVICE,
> ? ? ? ?}, {
> ? ? ? ? ? ? ? ?.virtual ? ? ? ?= (unsigned long)S5P_VA_COMBINER_BASE,
> - ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_COMBINER),
> + ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS_PA_COMBINER),
> ? ? ? ? ? ? ? ?.length ? ? ? ? = SZ_4K,
> ? ? ? ? ? ? ? ?.type ? ? ? ? ? = MT_DEVICE,
> ? ? ? ?}, {
> + ? ? ? ? ? ? ? .virtual ? ? ? ?= (unsigned long)S5P_VA_GIC_CPU,
> + ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS_PA_GIC_CPU),
> + ? ? ? ? ? ? ? .length ? ? ? ? = SZ_64K,
> + ? ? ? ? ? ? ? .type ? ? ? ? ? = MT_DEVICE,
> + ? ? ? }, {
> + ? ? ? ? ? ? ? .virtual ? ? ? ?= (unsigned long)S5P_VA_GIC_DIST,
> + ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS_PA_GIC_DIST),
> + ? ? ? ? ? ? ? .length ? ? ? ? = SZ_64K,
> + ? ? ? ? ? ? ? .type ? ? ? ? ? = MT_DEVICE,
> + ? ? ? }, {
> + ? ? ? ? ? ? ? .virtual ? ? ? ?= (unsigned long)S3C_VA_UART,
> + ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(S3C_PA_UART),
> + ? ? ? ? ? ? ? .length ? ? ? ? = SZ_512K,
> + ? ? ? ? ? ? ? .type ? ? ? ? ? = MT_DEVICE,
> + ? ? ? },
> +};
> +
> +static struct map_desc exynos4_iodesc[] __initdata = {
> + ? ? ? {
> + ? ? ? ? ? ? ? .virtual ? ? ? ?= (unsigned long)S5P_VA_CMU,
> + ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_CMU),
> + ? ? ? ? ? ? ? .length ? ? ? ? = SZ_128K,
> + ? ? ? ? ? ? ? .type ? ? ? ? ? = MT_DEVICE,
> + ? ? ? }, {
> ? ? ? ? ? ? ? ?.virtual ? ? ? ?= (unsigned long)S5P_VA_COREPERI_BASE,
> ? ? ? ? ? ? ? ?.pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_COREPERI),
> ? ? ? ? ? ? ? ?.length ? ? ? ? = SZ_8K,
> @@ -92,11 +111,6 @@ static struct map_desc exynos4_iodesc[] __initdata = {
> ? ? ? ? ? ? ? ?.length ? ? ? ? = SZ_4K,
> ? ? ? ? ? ? ? ?.type ? ? ? ? ? = MT_DEVICE,
> ? ? ? ?}, {
> - ? ? ? ? ? ? ? .virtual ? ? ? ?= (unsigned long)S3C_VA_UART,
> - ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(S3C_PA_UART),
> - ? ? ? ? ? ? ? .length ? ? ? ? = SZ_512K,
> - ? ? ? ? ? ? ? .type ? ? ? ? ? = MT_DEVICE,
> - ? ? ? }, {
> ? ? ? ? ? ? ? ?.virtual ? ? ? ?= (unsigned long)S5P_VA_SROMC,
> ? ? ? ? ? ? ? ?.pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_SROMC),
> ? ? ? ? ? ? ? ?.length ? ? ? ? = SZ_4K,
> @@ -106,16 +120,6 @@ static struct map_desc exynos4_iodesc[] __initdata = {
> ? ? ? ? ? ? ? ?.pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_HSPHY),
> ? ? ? ? ? ? ? ?.length ? ? ? ? = SZ_4K,
> ? ? ? ? ? ? ? ?.type ? ? ? ? ? = MT_DEVICE,
> - ? ? ? }, {
> - ? ? ? ? ? ? ? .virtual ? ? ? ?= (unsigned long)S5P_VA_GIC_CPU,
> - ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_GIC_CPU),
> - ? ? ? ? ? ? ? .length ? ? ? ? = SZ_64K,
> - ? ? ? ? ? ? ? .type ? ? ? ? ? = MT_DEVICE,
> - ? ? ? }, {
> - ? ? ? ? ? ? ? .virtual ? ? ? ?= (unsigned long)S5P_VA_GIC_DIST,
> - ? ? ? ? ? ? ? .pfn ? ? ? ? ? ?= __phys_to_pfn(EXYNOS4_PA_GIC_DIST),
> - ? ? ? ? ? ? ? .length ? ? ? ? = SZ_64K,
> - ? ? ? ? ? ? ? .type ? ? ? ? ? = MT_DEVICE,
> ? ? ? ?},
> ?};
>
> @@ -137,7 +141,7 @@ static struct map_desc exynos4_iodesc1[] __initdata = {
> ? ? ? ?},
> ?};
>
> -static void exynos4_idle(void)
> +static void exynos_idle(void)
> ?{
> ? ? ? ?if (!need_resched())
> ? ? ? ? ? ? ? ?cpu_do_idle();
> @@ -151,12 +155,13 @@ static void exynos4_sw_reset(void)
> ?}
>
> ?/*
> - * exynos4_map_io
> + * exynos_map_io
> ?*
> ?* register the standard cpu IO areas
> ?*/
> ?void __init exynos4_map_io(void)
> ?{
> + ? ? ? iotable_init(exynos_iodesc, ARRAY_SIZE(exynos_iodesc));
> ? ? ? ?iotable_init(exynos4_iodesc, ARRAY_SIZE(exynos4_iodesc));
>
> ? ? ? ?if (soc_is_exynos4210() && samsung_rev() == EXYNOS4210_REV_0)
> @@ -250,7 +255,6 @@ static int __init exynos4_core_init(void)
> ?{
> ? ? ? ?return sysdev_class_register(&exynos4_sysclass);
> ?}
> -
> ?core_initcall(exynos4_core_init);
>
> ?#ifdef CONFIG_CACHE_L2X0
> @@ -279,15 +283,16 @@ static int __init exynos4_l2x0_cache_init(void)
> ?early_initcall(exynos4_l2x0_cache_init);
> ?#endif
>
> -int __init exynos4_init(void)
> +int __init exynos_init(void)
> ?{
> - ? ? ? printk(KERN_INFO "EXYNOS4: Initializing architecture\n");
> + ? ? ? printk(KERN_INFO "EXYNOS: Initializing architecture\n");
>
> ? ? ? ?/* set idle function */
> - ? ? ? pm_idle = exynos4_idle;
> + ? ? ? pm_idle = exynos_idle;
>
> ? ? ? ?/* set sw_reset function */
> - ? ? ? s5p_reset_hook = exynos4_sw_reset;
> + ? ? ? if (soc_is_exynos4210() || soc_is_exynos4212() || soc_is_exynos4412())
> + ? ? ? ? ? ? ? s5p_reset_hook = exynos4_sw_reset;
>
> ? ? ? ?return sysdev_register(&exynos4_sysdev);
> ?}
> diff --git a/arch/arm/mach-exynos4/cpuidle.c b/arch/arm/mach-exynos/cpuidle.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/cpuidle.c
> rename to arch/arm/mach-exynos/cpuidle.c
> diff --git a/arch/arm/mach-exynos4/dev-ahci.c b/arch/arm/mach-exynos/dev-ahci.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/dev-ahci.c
> rename to arch/arm/mach-exynos/dev-ahci.c
> diff --git a/arch/arm/mach-exynos4/dev-audio.c b/arch/arm/mach-exynos/dev-audio.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/dev-audio.c
> rename to arch/arm/mach-exynos/dev-audio.c
> diff --git a/arch/arm/mach-exynos4/dev-dwmci.c b/arch/arm/mach-exynos/dev-dwmci.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/dev-dwmci.c
> rename to arch/arm/mach-exynos/dev-dwmci.c
> diff --git a/arch/arm/mach-exynos4/dev-pd.c b/arch/arm/mach-exynos/dev-pd.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/dev-pd.c
> rename to arch/arm/mach-exynos/dev-pd.c
> diff --git a/arch/arm/mach-exynos4/dev-sysmmu.c b/arch/arm/mach-exynos/dev-sysmmu.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/dev-sysmmu.c
> rename to arch/arm/mach-exynos/dev-sysmmu.c
> diff --git a/arch/arm/mach-exynos4/dma.c b/arch/arm/mach-exynos/dma.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/dma.c
> rename to arch/arm/mach-exynos/dma.c
> diff --git a/arch/arm/mach-exynos4/headsmp.S b/arch/arm/mach-exynos/headsmp.S
> similarity index 100%
> rename from arch/arm/mach-exynos4/headsmp.S
> rename to arch/arm/mach-exynos/headsmp.S
> diff --git a/arch/arm/mach-exynos4/hotplug.c b/arch/arm/mach-exynos/hotplug.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/hotplug.c
> rename to arch/arm/mach-exynos/hotplug.c
> diff --git a/arch/arm/mach-exynos4/include/mach/debug-macro.S b/arch/arm/mach-exynos/include/mach/debug-macro.S
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/debug-macro.S
> rename to arch/arm/mach-exynos/include/mach/debug-macro.S
> diff --git a/arch/arm/mach-exynos4/include/mach/dma.h b/arch/arm/mach-exynos/include/mach/dma.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/dma.h
> rename to arch/arm/mach-exynos/include/mach/dma.h
> diff --git a/arch/arm/mach-exynos4/include/mach/dwmci.h b/arch/arm/mach-exynos/include/mach/dwmci.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/dwmci.h
> rename to arch/arm/mach-exynos/include/mach/dwmci.h
> diff --git a/arch/arm/mach-exynos4/include/mach/entry-macro.S b/arch/arm/mach-exynos/include/mach/entry-macro.S
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/entry-macro.S
> rename to arch/arm/mach-exynos/include/mach/entry-macro.S
> diff --git a/arch/arm/mach-exynos4/include/mach/exynos4-clock.h b/arch/arm/mach-exynos/include/mach/exynos4-clock.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/exynos4-clock.h
> rename to arch/arm/mach-exynos/include/mach/exynos4-clock.h
> diff --git a/arch/arm/mach-exynos4/include/mach/gpio.h b/arch/arm/mach-exynos/include/mach/gpio.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/gpio.h
> rename to arch/arm/mach-exynos/include/mach/gpio.h
> diff --git a/arch/arm/mach-exynos4/include/mach/hardware.h b/arch/arm/mach-exynos/include/mach/hardware.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/hardware.h
> rename to arch/arm/mach-exynos/include/mach/hardware.h
> diff --git a/arch/arm/mach-exynos4/include/mach/io.h b/arch/arm/mach-exynos/include/mach/io.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/io.h
> rename to arch/arm/mach-exynos/include/mach/io.h
> diff --git a/arch/arm/mach-exynos4/include/mach/irqs.h b/arch/arm/mach-exynos/include/mach/irqs.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/irqs.h
> rename to arch/arm/mach-exynos/include/mach/irqs.h
> diff --git a/arch/arm/mach-exynos4/include/mach/map.h b/arch/arm/mach-exynos/include/mach/map.h
> similarity index 93%
> rename from arch/arm/mach-exynos4/include/mach/map.h
> rename to arch/arm/mach-exynos/include/mach/map.h
> index 918a979..058541d 100644
> --- a/arch/arm/mach-exynos4/include/mach/map.h
> +++ b/arch/arm/mach-exynos/include/mach/map.h
> @@ -1,4 +1,4 @@
> -/* linux/arch/arm/mach-exynos4/include/mach/map.h
> +/* linux/arch/arm/mach-exynos/include/mach/map.h
> ?*
> ?* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
> ?* ? ? ? ? ? ? http://www.samsung.com/
> @@ -145,39 +145,45 @@
> ?#define S3C_PA_IIC5 ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_IIC(5)
> ?#define S3C_PA_IIC6 ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_IIC(6)
> ?#define S3C_PA_IIC7 ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_IIC(7)
> -#define SAMSUNG_PA_ADC ? ? ? ? ? ? ? ? EXYNOS4_PA_ADC
> -#define SAMSUNG_PA_ADC1 ? ? ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_ADC1
> ?#define S3C_PA_RTC ? ? ? ? ? ? ? ? ? ? EXYNOS4_PA_RTC
> ?#define S3C_PA_WDT ? ? ? ? ? ? ? ? ? ? EXYNOS4_PA_WATCHDOG
> +#define S3C_PA_UART ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_UART
>
> ?#define S5P_PA_CHIPID ? ? ? ? ? ? ? ? ?EXYNOS4_PA_CHIPID
> +#define S5P_PA_EHCI ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_EHCI
> ?#define S5P_PA_FIMC0 ? ? ? ? ? ? ? ? ? EXYNOS4_PA_FIMC0
> ?#define S5P_PA_FIMC1 ? ? ? ? ? ? ? ? ? EXYNOS4_PA_FIMC1
> ?#define S5P_PA_FIMC2 ? ? ? ? ? ? ? ? ? EXYNOS4_PA_FIMC2
> ?#define S5P_PA_FIMC3 ? ? ? ? ? ? ? ? ? EXYNOS4_PA_FIMC3
> +#define S5P_PA_FIMD0 ? ? ? ? ? ? ? ? ? EXYNOS4_PA_FIMD0
> +#define S5P_PA_HDMI ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_HDMI
> +#define S5P_PA_IIC_HDMIPHY ? ? ? ? ? ? EXYNOS4_PA_IIC_HDMIPHY
> +#define S5P_PA_MFC ? ? ? ? ? ? ? ? ? ? EXYNOS4_PA_MFC
> ?#define S5P_PA_MIPI_CSIS0 ? ? ? ? ? ? ?EXYNOS4_PA_MIPI_CSIS0
> ?#define S5P_PA_MIPI_CSIS1 ? ? ? ? ? ? ?EXYNOS4_PA_MIPI_CSIS1
> -#define S5P_PA_FIMD0 ? ? ? ? ? ? ? ? ? EXYNOS4_PA_FIMD0
> +#define S5P_PA_MIXER ? ? ? ? ? ? ? ? ? EXYNOS4_PA_MIXER
> ?#define S5P_PA_ONENAND ? ? ? ? ? ? ? ? EXYNOS4_PA_ONENAND
> ?#define S5P_PA_ONENAND_DMA ? ? ? ? ? ? EXYNOS4_PA_ONENAND_DMA
> +#define S5P_PA_SDO ? ? ? ? ? ? ? ? ? ? EXYNOS4_PA_SDO
> ?#define S5P_PA_SDRAM ? ? ? ? ? ? ? ? ? EXYNOS4_PA_SDRAM
> ?#define S5P_PA_SROMC ? ? ? ? ? ? ? ? ? EXYNOS4_PA_SROMC
> -#define S5P_PA_MFC ? ? ? ? ? ? ? ? ? ? EXYNOS4_PA_MFC
> ?#define S5P_PA_SYSCON ? ? ? ? ? ? ? ? ?EXYNOS4_PA_SYSCON
> ?#define S5P_PA_TIMER ? ? ? ? ? ? ? ? ? EXYNOS4_PA_TIMER
> -#define S5P_PA_EHCI ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_EHCI
> -
> -#define S5P_PA_SDO ? ? ? ? ? ? ? ? ? ? EXYNOS4_PA_SDO
> ?#define S5P_PA_VP ? ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_VP
> -#define S5P_PA_MIXER ? ? ? ? ? ? ? ? ? EXYNOS4_PA_MIXER
> -#define S5P_PA_HDMI ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_HDMI
> -#define S5P_PA_IIC_HDMIPHY ? ? ? ? ? ? EXYNOS4_PA_IIC_HDMIPHY
>
> +#define SAMSUNG_PA_ADC ? ? ? ? ? ? ? ? EXYNOS4_PA_ADC
> +#define SAMSUNG_PA_ADC1 ? ? ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_ADC1
> ?#define SAMSUNG_PA_KEYPAD ? ? ? ? ? ? ?EXYNOS4_PA_KEYPAD
>
> -/* UART */
> +#define EXYNOS_PA_COMBINER ? ? ? ? ? ? EXYNOS4_PA_COMBINER
> +#define EXYNOS_PA_GIC_CPU ? ? ? ? ? ? ?EXYNOS4_PA_GIC_CPU
> +#define EXYNOS_PA_GIC_DIST ? ? ? ? ? ? EXYNOS4_PA_GIC_DIST
> +#define EXYNOS_PA_PMU ? ? ? ? ? ? ? ? ?EXYNOS4_PA_PMU
> +#define EXYNOS_PA_SYSTIMER ? ? ? ? ? ? EXYNOS4_PA_SYSTIMER
>
> -#define S3C_PA_UART ? ? ? ? ? ? ? ? ? ?EXYNOS4_PA_UART
> +/* Compatibility UART */
> +
> +#define S3C_VA_UARTx(x) ? ? ? ? ? ? ? ? ? ? ? ?(S3C_VA_UART + ((x) * S3C_UART_OFFSET))
>
> ?#define S5P_PA_UART(x) ? ? ? ? ? ? ? ? (S3C_PA_UART + ((x) * S3C_UART_OFFSET))
> ?#define S5P_PA_UART0 ? ? ? ? ? ? ? ? ? S5P_PA_UART(0)
> diff --git a/arch/arm/mach-exynos4/include/mach/memory.h b/arch/arm/mach-exynos/include/mach/memory.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/memory.h
> rename to arch/arm/mach-exynos/include/mach/memory.h
> diff --git a/arch/arm/mach-exynos4/include/mach/pm-core.h b/arch/arm/mach-exynos/include/mach/pm-core.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/pm-core.h
> rename to arch/arm/mach-exynos/include/mach/pm-core.h
> diff --git a/arch/arm/mach-exynos4/include/mach/pmu.h b/arch/arm/mach-exynos/include/mach/pmu.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/pmu.h
> rename to arch/arm/mach-exynos/include/mach/pmu.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-audss.h b/arch/arm/mach-exynos/include/mach/regs-audss.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-audss.h
> rename to arch/arm/mach-exynos/include/mach/regs-audss.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-clock.h b/arch/arm/mach-exynos/include/mach/regs-clock.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-clock.h
> rename to arch/arm/mach-exynos/include/mach/regs-clock.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-gpio.h b/arch/arm/mach-exynos/include/mach/regs-gpio.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-gpio.h
> rename to arch/arm/mach-exynos/include/mach/regs-gpio.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-irq.h b/arch/arm/mach-exynos/include/mach/regs-irq.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-irq.h
> rename to arch/arm/mach-exynos/include/mach/regs-irq.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-mct.h b/arch/arm/mach-exynos/include/mach/regs-mct.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-mct.h
> rename to arch/arm/mach-exynos/include/mach/regs-mct.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-mem.h b/arch/arm/mach-exynos/include/mach/regs-mem.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-mem.h
> rename to arch/arm/mach-exynos/include/mach/regs-mem.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-pmu.h b/arch/arm/mach-exynos/include/mach/regs-pmu.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-pmu.h
> rename to arch/arm/mach-exynos/include/mach/regs-pmu.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-sysmmu.h b/arch/arm/mach-exynos/include/mach/regs-sysmmu.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-sysmmu.h
> rename to arch/arm/mach-exynos/include/mach/regs-sysmmu.h
> diff --git a/arch/arm/mach-exynos4/include/mach/regs-usb-phy.h b/arch/arm/mach-exynos/include/mach/regs-usb-phy.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/regs-usb-phy.h
> rename to arch/arm/mach-exynos/include/mach/regs-usb-phy.h
> diff --git a/arch/arm/mach-exynos4/include/mach/sysmmu.h b/arch/arm/mach-exynos/include/mach/sysmmu.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/sysmmu.h
> rename to arch/arm/mach-exynos/include/mach/sysmmu.h
> diff --git a/arch/arm/mach-exynos4/include/mach/system.h b/arch/arm/mach-exynos/include/mach/system.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/system.h
> rename to arch/arm/mach-exynos/include/mach/system.h
> diff --git a/arch/arm/mach-exynos4/include/mach/timex.h b/arch/arm/mach-exynos/include/mach/timex.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/timex.h
> rename to arch/arm/mach-exynos/include/mach/timex.h
> diff --git a/arch/arm/mach-exynos4/include/mach/uncompress.h b/arch/arm/mach-exynos/include/mach/uncompress.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/uncompress.h
> rename to arch/arm/mach-exynos/include/mach/uncompress.h
> diff --git a/arch/arm/mach-exynos4/include/mach/vmalloc.h b/arch/arm/mach-exynos/include/mach/vmalloc.h
> similarity index 100%
> rename from arch/arm/mach-exynos4/include/mach/vmalloc.h
> rename to arch/arm/mach-exynos/include/mach/vmalloc.h
> diff --git a/arch/arm/mach-exynos4/init.c b/arch/arm/mach-exynos/init.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/init.c
> rename to arch/arm/mach-exynos/init.c
> diff --git a/arch/arm/mach-exynos4/irq-combiner.c b/arch/arm/mach-exynos/irq-combiner.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/irq-combiner.c
> rename to arch/arm/mach-exynos/irq-combiner.c
> diff --git a/arch/arm/mach-exynos4/irq-eint.c b/arch/arm/mach-exynos/irq-eint.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/irq-eint.c
> rename to arch/arm/mach-exynos/irq-eint.c
> diff --git a/arch/arm/mach-exynos4/mach-armlex4210.c b/arch/arm/mach-exynos/mach-armlex4210.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/mach-armlex4210.c
> rename to arch/arm/mach-exynos/mach-armlex4210.c
> diff --git a/arch/arm/mach-exynos4/mach-nuri.c b/arch/arm/mach-exynos/mach-nuri.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/mach-nuri.c
> rename to arch/arm/mach-exynos/mach-nuri.c
> diff --git a/arch/arm/mach-exynos4/mach-origen.c b/arch/arm/mach-exynos/mach-origen.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/mach-origen.c
> rename to arch/arm/mach-exynos/mach-origen.c
> diff --git a/arch/arm/mach-exynos4/mach-smdk4x12.c b/arch/arm/mach-exynos/mach-smdk4x12.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/mach-smdk4x12.c
> rename to arch/arm/mach-exynos/mach-smdk4x12.c
> diff --git a/arch/arm/mach-exynos4/mach-smdkv310.c b/arch/arm/mach-exynos/mach-smdkv310.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/mach-smdkv310.c
> rename to arch/arm/mach-exynos/mach-smdkv310.c
> diff --git a/arch/arm/mach-exynos4/mach-universal_c210.c b/arch/arm/mach-exynos/mach-universal_c210.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/mach-universal_c210.c
> rename to arch/arm/mach-exynos/mach-universal_c210.c
> diff --git a/arch/arm/mach-exynos4/mct.c b/arch/arm/mach-exynos/mct.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/mct.c
> rename to arch/arm/mach-exynos/mct.c
> diff --git a/arch/arm/mach-exynos4/platsmp.c b/arch/arm/mach-exynos/platsmp.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/platsmp.c
> rename to arch/arm/mach-exynos/platsmp.c
> diff --git a/arch/arm/mach-exynos4/pm.c b/arch/arm/mach-exynos/pm.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/pm.c
> rename to arch/arm/mach-exynos/pm.c
> diff --git a/arch/arm/mach-exynos4/pmu.c b/arch/arm/mach-exynos/pmu.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/pmu.c
> rename to arch/arm/mach-exynos/pmu.c
> diff --git a/arch/arm/mach-exynos4/setup-fimc.c b/arch/arm/mach-exynos/setup-fimc.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-fimc.c
> rename to arch/arm/mach-exynos/setup-fimc.c
> diff --git a/arch/arm/mach-exynos4/setup-fimd0.c b/arch/arm/mach-exynos/setup-fimd0.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-fimd0.c
> rename to arch/arm/mach-exynos/setup-fimd0.c
> diff --git a/arch/arm/mach-exynos4/setup-i2c0.c b/arch/arm/mach-exynos/setup-i2c0.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-i2c0.c
> rename to arch/arm/mach-exynos/setup-i2c0.c
> diff --git a/arch/arm/mach-exynos4/setup-i2c1.c b/arch/arm/mach-exynos/setup-i2c1.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-i2c1.c
> rename to arch/arm/mach-exynos/setup-i2c1.c
> diff --git a/arch/arm/mach-exynos4/setup-i2c2.c b/arch/arm/mach-exynos/setup-i2c2.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-i2c2.c
> rename to arch/arm/mach-exynos/setup-i2c2.c
> diff --git a/arch/arm/mach-exynos4/setup-i2c3.c b/arch/arm/mach-exynos/setup-i2c3.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-i2c3.c
> rename to arch/arm/mach-exynos/setup-i2c3.c
> diff --git a/arch/arm/mach-exynos4/setup-i2c4.c b/arch/arm/mach-exynos/setup-i2c4.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-i2c4.c
> rename to arch/arm/mach-exynos/setup-i2c4.c
> diff --git a/arch/arm/mach-exynos4/setup-i2c5.c b/arch/arm/mach-exynos/setup-i2c5.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-i2c5.c
> rename to arch/arm/mach-exynos/setup-i2c5.c
> diff --git a/arch/arm/mach-exynos4/setup-i2c6.c b/arch/arm/mach-exynos/setup-i2c6.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-i2c6.c
> rename to arch/arm/mach-exynos/setup-i2c6.c
> diff --git a/arch/arm/mach-exynos4/setup-i2c7.c b/arch/arm/mach-exynos/setup-i2c7.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-i2c7.c
> rename to arch/arm/mach-exynos/setup-i2c7.c
> diff --git a/arch/arm/mach-exynos4/setup-keypad.c b/arch/arm/mach-exynos/setup-keypad.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-keypad.c
> rename to arch/arm/mach-exynos/setup-keypad.c
> diff --git a/arch/arm/mach-exynos4/setup-sdhci-gpio.c b/arch/arm/mach-exynos/setup-sdhci-gpio.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-sdhci-gpio.c
> rename to arch/arm/mach-exynos/setup-sdhci-gpio.c
> diff --git a/arch/arm/mach-exynos4/setup-sdhci.c b/arch/arm/mach-exynos/setup-sdhci.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-sdhci.c
> rename to arch/arm/mach-exynos/setup-sdhci.c
> diff --git a/arch/arm/mach-exynos4/setup-usb-phy.c b/arch/arm/mach-exynos/setup-usb-phy.c
> similarity index 100%
> rename from arch/arm/mach-exynos4/setup-usb-phy.c
> rename to arch/arm/mach-exynos/setup-usb-phy.c
> diff --git a/arch/arm/mach-exynos4/sleep.S b/arch/arm/mach-exynos/sleep.S
> similarity index 100%
> rename from arch/arm/mach-exynos4/sleep.S
> rename to arch/arm/mach-exynos/sleep.S
> diff --git a/arch/arm/plat-s5p/Kconfig b/arch/arm/plat-s5p/Kconfig
> index f9241a7..4e98f09 100644
> --- a/arch/arm/plat-s5p/Kconfig
> +++ b/arch/arm/plat-s5p/Kconfig
> @@ -7,7 +7,7 @@
>
> ?config PLAT_S5P
> ? ? ? ?bool
> - ? ? ? depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS4)
> + ? ? ? depends on (ARCH_S5P64X0 || ARCH_S5PC100 || ARCH_S5PV210 || ARCH_EXYNOS)
> ? ? ? ?default y
> ? ? ? ?select ARM_VIC if !ARCH_EXYNOS4
> ? ? ? ?select ARM_GIC if ARCH_EXYNOS4
> diff --git a/arch/arm/plat-s5p/cpu.c b/arch/arm/plat-s5p/cpu.c
> index 7b0a28f..a56959e 100644
> --- a/arch/arm/plat-s5p/cpu.c
> +++ b/arch/arm/plat-s5p/cpu.c
> @@ -75,7 +75,7 @@ static struct cpu_table cpu_ids[] __initdata = {
> ? ? ? ? ? ? ? ?.map_io ? ? ? ? = exynos4_map_io,
> ? ? ? ? ? ? ? ?.init_clocks ? ?= exynos4_init_clocks,
> ? ? ? ? ? ? ? ?.init_uarts ? ? = exynos4_init_uarts,
> - ? ? ? ? ? ? ? .init ? ? ? ? ? = exynos4_init,
> + ? ? ? ? ? ? ? .init ? ? ? ? ? = exynos_init,
> ? ? ? ? ? ? ? ?.name ? ? ? ? ? = name_exynos4210,
> ? ? ? ?}, {
> ? ? ? ? ? ? ? ?.idcode ? ? ? ? = EXYNOS4212_CPU_ID,
> @@ -83,7 +83,7 @@ static struct cpu_table cpu_ids[] __initdata = {
> ? ? ? ? ? ? ? ?.map_io ? ? ? ? = exynos4_map_io,
> ? ? ? ? ? ? ? ?.init_clocks ? ?= exynos4_init_clocks,
> ? ? ? ? ? ? ? ?.init_uarts ? ? = exynos4_init_uarts,
> - ? ? ? ? ? ? ? .init ? ? ? ? ? = exynos4_init,
> + ? ? ? ? ? ? ? .init ? ? ? ? ? = exynos_init,
> ? ? ? ? ? ? ? ?.name ? ? ? ? ? = name_exynos4212,
> ? ? ? ?}, {
> ? ? ? ? ? ? ? ?.idcode ? ? ? ? = EXYNOS4412_CPU_ID,
> @@ -91,7 +91,7 @@ static struct cpu_table cpu_ids[] __initdata = {
> ? ? ? ? ? ? ? ?.map_io ? ? ? ? = exynos4_map_io,
> ? ? ? ? ? ? ? ?.init_clocks ? ?= exynos4_init_clocks,
> ? ? ? ? ? ? ? ?.init_uarts ? ? = exynos4_init_uarts,
> - ? ? ? ? ? ? ? .init ? ? ? ? ? = exynos4_init,
> + ? ? ? ? ? ? ? .init ? ? ? ? ? = exynos_init,
> ? ? ? ? ? ? ? ?.name ? ? ? ? ? = name_exynos4412,
> ? ? ? ?},
> ?};
> diff --git a/arch/arm/plat-samsung/include/plat/exynos4.h b/arch/arm/plat-samsung/include/plat/exynos4.h
> index 20d73bf..f546e88 100644
> --- a/arch/arm/plat-samsung/include/plat/exynos4.h
> +++ b/arch/arm/plat-samsung/include/plat/exynos4.h
> @@ -18,8 +18,8 @@ extern void exynos4210_register_clocks(void);
> ?extern void exynos4212_register_clocks(void);
> ?extern void exynos4_setup_clocks(void);
>
> -#ifdef CONFIG_ARCH_EXYNOS4
> -extern ?int exynos4_init(void);
> +#ifdef CONFIG_ARCH_EXYNOS
> +extern ?int exynos_init(void);
> ?extern void exynos4_init_irq(void);
> ?extern void exynos4_map_io(void);
> ?extern void exynos4_init_clocks(int xtal);
> @@ -31,5 +31,5 @@ extern struct sys_timer exynos4_timer;
> ?#define exynos4_init_clocks NULL
> ?#define exynos4_init_uarts NULL
> ?#define exynos4_map_io NULL
> -#define exynos4_init NULL
> +#define exynos_init NULL
> ?#endif
> --
> 1.7.1
>
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at ?http://vger.kernel.org/majordomo-info.html
>
^ 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