From 9610c8abd2d278a957b1b586390b8c928980e79b Mon Sep 17 00:00:00 2001 From: Tony Lindgren Date: Thu, 6 Aug 2015 22:09:40 -0700 Subject: [PATCH 1/2] ARM: OMAP2+: Fix power domain operations regression caused by 81xx I managed to mess up omap3 power domain operations with commit 7c80a3f89c51 ("ARM: OMAP2+: Add custom prwdm_operations for 81xx to support dm814x"), by default we should keep on using the omap3_pwrdm_operations, only 81xx needs custom handling. This causes omap3 PM to break so we won't hit off mode any longer causing idle power consumption go up from less than 10mW to over 50 mW. Fixs: 7c80a3f89c51 ("ARM: OMAP2+: Add custom prwdm_operations for 81xx to support dm814x") Signed-off-by: Tony Lindgren --- arch/arm/mach-omap2/powerdomains3xxx_data.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-omap2/powerdomains3xxx_data.c b/arch/arm/mach-omap2/powerdomains3xxx_data.c index 7829d274e037b..d31c495175c1a 100644 --- a/arch/arm/mach-omap2/powerdomains3xxx_data.c +++ b/arch/arm/mach-omap2/powerdomains3xxx_data.c @@ -580,7 +580,9 @@ void __init omap3xxx_powerdomains_init(void) if (!cpu_is_omap34xx() && !cpu_is_ti81xx()) return; - pwrdm_register_platform_funcs(&ti81xx_pwrdm_operations); + /* Only 81xx needs custom pwrdm_operations */ + if (!cpu_is_ti81xx()) + pwrdm_register_platform_funcs(&omap3_pwrdm_operations);; rev = omap_rev(); @@ -588,9 +590,11 @@ void __init omap3xxx_powerdomains_init(void) pwrdm_register_pwrdms(powerdomains_am35x); } else if (rev == TI8148_REV_ES1_0 || rev == TI8148_REV_ES2_0 || rev == TI8148_REV_ES2_1) { + pwrdm_register_platform_funcs(&ti81xx_pwrdm_operations); pwrdm_register_pwrdms(powerdomains_ti814x); } else if (rev == TI8168_REV_ES1_0 || rev == TI8168_REV_ES1_1 || rev == TI8168_REV_ES2_0 || rev == TI8168_REV_ES2_1) { + pwrdm_register_platform_funcs(&ti81xx_pwrdm_operations); pwrdm_register_pwrdms(powerdomains_ti816x); } else { pwrdm_register_pwrdms(powerdomains_omap3430_common); From ed293d1ad2b0c28b6abc3bd728b07754bc00f1cd Mon Sep 17 00:00:00 2001 From: Rob Herring Date: Sun, 12 Jul 2015 09:26:45 -0500 Subject: [PATCH 2/2] memory: kill off set_irq_flags usage set_irq_flags is ARM specific with custom flags which have genirq equivalents. Convert drivers to use the genirq interfaces directly, so we can kill off set_irq_flags. The translation of flags is as follows: IRQF_VALID -> !IRQ_NOREQUEST IRQF_PROBE -> !IRQ_NOPROBE IRQF_NOAUTOEN -> IRQ_NOAUTOEN For IRQs managed by an irqdomain, the irqdomain core code handles clearing and setting IRQ_NOREQUEST already, so there is no need to do this in .map() functions and we can simply remove the set_irq_flags calls. Some users also set IRQ_NOPROBE and this has been maintained although it is not clear that is really needed. There appears to be a great deal of blind copy and paste of this code. Signed-off-by: Rob Herring Acked-by: Roger Quadros Cc: linux-omap@vger.kernel.org Signed-off-by: Tony Lindgren --- drivers/memory/omap-gpmc.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c index 3a27a84ad3ec3..972209977e4ef 100644 --- a/drivers/memory/omap-gpmc.c +++ b/drivers/memory/omap-gpmc.c @@ -1176,8 +1176,8 @@ static int gpmc_setup_irq(void) gpmc_client_irq[i].irq = gpmc_irq_start + i; irq_set_chip_and_handler(gpmc_client_irq[i].irq, &gpmc_irq_chip, handle_simple_irq); - set_irq_flags(gpmc_client_irq[i].irq, - IRQF_VALID | IRQF_NOAUTOEN); + irq_modify_status(gpmc_client_irq[i].irq, IRQ_NOREQUEST, + IRQ_NOAUTOEN); } /* Disable interrupts */ @@ -1200,7 +1200,6 @@ static int gpmc_free_irq(void) for (i = 0; i < GPMC_NR_IRQ; i++) { irq_set_handler(gpmc_client_irq[i].irq, NULL); irq_set_chip(gpmc_client_irq[i].irq, &no_irq_chip); - irq_modify_status(gpmc_client_irq[i].irq, 0, 0); } irq_free_descs(gpmc_irq_start, GPMC_NR_IRQ);