From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757904Ab2HHJBy (ORCPT ); Wed, 8 Aug 2012 05:01:54 -0400 Received: from ogre.sisk.pl ([193.178.161.156]:48330 "EHLO ogre.sisk.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757893Ab2HHJBK (ORCPT ); Wed, 8 Aug 2012 05:01:10 -0400 From: "Rafael J. Wysocki" To: "Linux-sh list" Subject: [PATCH 4/4] PM / shmobile: Specify device latencies for Mackerel devices directly Date: Wed, 8 Aug 2012 00:29:16 +0200 User-Agent: KMail/1.13.6 (Linux/3.5.0+; KDE/4.6.0; x86_64; ; ) Cc: Linux PM list , LKML , Magnus Damm References: <201207212349.18294.rjw@sisk.pl> <201208080026.01738.rjw@sisk.pl> In-Reply-To: <201208080026.01738.rjw@sisk.pl> MIME-Version: 1.0 Content-Type: Text/Plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <201208080029.16394.rjw@sisk.pl> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The results of adaptive latency computations in GENPD_DEV_TIMED_CALLBACK() show that the start/stop and save/restore state latencies of all devices on the Mackerel board I have tried are a little below 250 us. Therefore, if the 250 us is used as the common initial value of the latency fields in struct gpd_timing_data for all devices on Mackerel, the latency values will never have to change at run time and there won't be any overhead related to re-computation of the corresponding PM QoS data. Signed-off-by: Rafael J. Wysocki --- arch/arm/mach-shmobile/board-mackerel.c | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) Index: linux/arch/arm/mach-shmobile/board-mackerel.c =================================================================== --- linux.orig/arch/arm/mach-shmobile/board-mackerel.c +++ linux/arch/arm/mach-shmobile/board-mackerel.c @@ -1407,8 +1407,15 @@ static struct i2c_board_info i2c1_device #define GPIO_PORT168CR 0xE60520A8 #define SRCR4 0xe61580bc #define USCCR1 0xE6058144 +#define DEV_LATENCY_NS 250000 static void __init mackerel_init(void) { + struct gpd_timing_data latencies = { + .stop_latency_ns = DEV_LATENCY_NS, + .start_latency_ns = DEV_LATENCY_NS, + .save_state_latency_ns = DEV_LATENCY_NS, + .restore_state_latency_ns = DEV_LATENCY_NS, + }; u32 srcr4; struct clk *clk; @@ -1623,20 +1630,20 @@ static void __init mackerel_init(void) platform_add_devices(mackerel_devices, ARRAY_SIZE(mackerel_devices)); - rmobile_add_device_to_domain("A4LC", &lcdc_device); - rmobile_add_device_to_domain("A4LC", &hdmi_lcdc_device); - rmobile_add_device_to_domain("A4LC", &meram_device); - rmobile_add_device_to_domain("A4MP", &fsi_device); - rmobile_add_device_to_domain("A3SP", &usbhs0_device); - rmobile_add_device_to_domain("A3SP", &usbhs1_device); - rmobile_add_device_to_domain("A3SP", &nand_flash_device); - rmobile_add_device_to_domain("A3SP", &sh_mmcif_device); - rmobile_add_device_to_domain("A3SP", &sdhi0_device); + rmobile_add_device_to_domain_td("A4LC", &lcdc_device, &latencies); + rmobile_add_device_to_domain_td("A4LC", &hdmi_lcdc_device, &latencies); + rmobile_add_device_to_domain_td("A4LC", &meram_device, &latencies); + rmobile_add_device_to_domain_td("A4MP", &fsi_device, &latencies); + rmobile_add_device_to_domain_td("A3SP", &usbhs0_device, &latencies); + rmobile_add_device_to_domain_td("A3SP", &usbhs1_device, &latencies); + rmobile_add_device_to_domain_td("A3SP", &nand_flash_device, &latencies); + rmobile_add_device_to_domain_td("A3SP", &sh_mmcif_device, &latencies); + rmobile_add_device_to_domain_td("A3SP", &sdhi0_device, &latencies); #if !defined(CONFIG_MMC_SH_MMCIF) && !defined(CONFIG_MMC_SH_MMCIF_MODULE) - rmobile_add_device_to_domain("A3SP", &sdhi1_device); + rmobile_add_device_to_domain_td("A3SP", &sdhi1_device, &latencies); #endif - rmobile_add_device_to_domain("A3SP", &sdhi2_device); - rmobile_add_device_to_domain("A4R", &ceu_device); + rmobile_add_device_to_domain_td("A3SP", &sdhi2_device, &latencies); + rmobile_add_device_to_domain_td("A4R", &ceu_device, &latencies); hdmi_init_pm_clock(); sh7372_pm_init();