[RFC PATCH 03/11] arm: omap: device: create a device for system control module
Konstantin Baydarov
kbaidarov at dev.rtsoft.ru
Tue May 29 09:39:54 EDT 2012
Hi.
On 05/25/2012 12:25 PM, Eduardo Valentin wrote:
> From: Kishon Vijay Abraham I <kishon at ti.com>
>
> Extracts the device data from hwmod database and create a platform device
> using omap device build.
>
> The device build is done during postcore_initcall.
>
> Signed-off-by: Kishon Vijay Abraham I <kishon at ti.com>
> Signed-off-by: Eduardo Valentin <eduardo.valentin at ti.com>
> ---
> arch/arm/mach-omap2/devices.c | 26 ++++++++++++++++++++++++++
> 1 files changed, 26 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
> index 152c266..9332673 100644
> --- a/arch/arm/mach-omap2/devices.c
> +++ b/arch/arm/mach-omap2/devices.c
> @@ -40,6 +40,32 @@
> #define L3_MODULES_MAX_LEN 12
> #define L3_MODULES 3
>
> +static int omap_init_control(void)
> +{
> + struct omap_hwmod *oh;
> + struct platform_device *pdev;
> + const char *oh_name, *name;
> +
> + oh_name = "ctrl_module_core";
> + name = "omap-control-core";
> +
> + oh = omap_hwmod_lookup(oh_name);
> + if (!oh) {
> + pr_err("Could not lookup hwmod for %s\n", oh_name);
> + return PTR_ERR(oh);
> + }
> +
> + pdev = omap_device_build(name, -1, oh, NULL, 0, NULL, 0, true);
I noticed that control module omap device is created and configured according to following idle flags:
static struct omap_hwmod_class_sysconfig omap44xx_ctrl_module_sysc = {
.rev_offs = 0x0000,
.sysc_offs = 0x0010,
.sysc_flags = SYSC_HAS_SIDLEMODE,
.idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART |
SIDLE_SMART_WKUP),
.sysc_fields = &omap_hwmod_sysc_type2,
};
IIUC, ".idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART | SIDLE_SMART_WKUP)" means that CONTROL_GEN_CORE idlemode will be set to
"0x2,0x3: Clock is automatically gated when there is no access to the Control Module through L4-interconnect". See CONTROL_GEN_CORE_SYSCONFIG register.
So IIUC theoretically CONTROL_GEN_CORE module clock can be automatically gated. Recalling that CONTROL_GEN_CORE module has an THERMAL_ALERT interrupt that is used by the bandgap driver, I'm wondering if the THERMAL_ALERT interrupt will be fired when CONTROL_GEN_CORE module clock is gated?
Probably bandgap driver should set CONTROL_GEN_CORE idle mode to SIDLE_NO, to prevent loosing THERMAL_ALERT interrupt?
BR,
Konstantin Baydarov.
> + if (IS_ERR(pdev)) {
> + pr_err("Could not build omap_device for %s %s\n",
> + name, oh_name);
> + return PTR_ERR(pdev);
> + }
> +
> + return 0;
> +}
> +postcore_initcall(omap_init_control);
> +
> static int __init omap3_l3_init(void)
> {
> struct omap_hwmod *oh;
More information about the linux-arm-kernel
mailing list