From patchwork Sun May 20 22:07:20 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Lezcano X-Patchwork-Id: 8833 Return-Path: X-Original-To: patchwork@peony.canonical.com Delivered-To: patchwork@peony.canonical.com Received: from fiordland.canonical.com (fiordland.canonical.com [91.189.94.145]) by peony.canonical.com (Postfix) with ESMTP id 885BD23E63 for ; Sun, 20 May 2012 22:07:24 +0000 (UTC) Received: from mail-yx0-f180.google.com (mail-yx0-f180.google.com [209.85.213.180]) by fiordland.canonical.com (Postfix) with ESMTP id 2FF51A188D7 for ; Sun, 20 May 2012 22:07:24 +0000 (UTC) Received: by yenq6 with SMTP id q6so4762302yen.11 for ; Sun, 20 May 2012 15:07:23 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=x-forwarded-to:x-forwarded-for:delivered-to:received-spf:from:to:cc :subject:date:message-id:x-mailer:x-gm-message-state; bh=lmRhLx0B58KT642L9AkTa5M0DUt2GZuOFLGrkewGgig=; b=CBGO+WBhjPd8IksNqjYNg57H+mjgJhV/XC0ymsvGAUkFq/qvHr0qHL+LAZsFuL2u1q JdQAHrTFoBQJHJG1ri5KaDNBGB0Fe259P5+ab7wvRcounGMzqcJba2BgDtBQA8g3BrUW CGpT5o9Jk1vCg1zOwaqq8ShDaliqomr1Inxap6L4VEsHsKyPbLUeHUokWtw7TESA93Pb TcYa7ris1PjqKKuEublZv/5erjTxVQYYos9B0f6v3IvQXYhuVA5w4uoFDLj74rKcilOp 2qQ93gcSbGjNL0jHTtiL1N7DtTvJ1WhPxNBbLxtfUyogbiZcootWDO/9zvVmApwbK6Ui TdRg== Received: by 10.42.89.72 with SMTP id f8mr11252194icm.33.1337551643379; Sun, 20 May 2012 15:07:23 -0700 (PDT) X-Forwarded-To: linaro-patchwork@canonical.com X-Forwarded-For: patch@linaro.org linaro-patchwork@canonical.com Delivered-To: patches@linaro.org Received: by 10.231.35.72 with SMTP id o8csp247174ibd; Sun, 20 May 2012 15:07:22 -0700 (PDT) Received: by 10.180.82.198 with SMTP id k6mr5135069wiy.20.1337551641677; Sun, 20 May 2012 15:07:21 -0700 (PDT) Received: from mail-wg0-f50.google.com (mail-wg0-f50.google.com [74.125.82.50]) by mx.google.com with ESMTPS id n17si18535373wee.120.2012.05.20.15.07.21 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 20 May 2012 15:07:21 -0700 (PDT) Received-SPF: neutral (google.com: 74.125.82.50 is neither permitted nor denied by best guess record for domain of daniel.lezcano@linaro.org) client-ip=74.125.82.50; Authentication-Results: mx.google.com; spf=neutral (google.com: 74.125.82.50 is neither permitted nor denied by best guess record for domain of daniel.lezcano@linaro.org) smtp.mail=daniel.lezcano@linaro.org Received: by wgbds11 with SMTP id ds11so4503395wgb.31 for ; Sun, 20 May 2012 15:07:21 -0700 (PDT) Received: by 10.216.143.148 with SMTP id l20mr12286056wej.115.1337551641033; Sun, 20 May 2012 15:07:21 -0700 (PDT) Received: from localhost.localdomain (AToulouse-159-1-63-91.w92-134.abo.wanadoo.fr. [92.134.214.91]) by mx.google.com with ESMTPS id gv4sm32676477wib.8.2012.05.20.15.07.18 (version=TLSv1/SSLv3 cipher=OTHER); Sun, 20 May 2012 15:07:19 -0700 (PDT) From: Daniel Lezcano To: nsekhar@ti.com, khilman@ti.com Cc: lenb@kernel.org, davinci-linux-open-source@linux.davincidsp.com, linux-pm@lists.linux-foundation.org, patches@linaro.org, linaro-dev@lists.linaro.org Subject: [PATCH][v2] ARM: davinci: cpuidle - remove ops Date: Mon, 21 May 2012 00:07:20 +0200 Message-Id: <1337551640-5973-1-git-send-email-daniel.lezcano@linaro.org> X-Mailer: git-send-email 1.7.5.4 X-Gm-Message-State: ALoCoQn1y2YLY3P8BeG2DkcorgK3olP5sQGy+IxU46AjE/Wy2Go7olKznBWVhUuGIalRdQQJV0Vh This patch removes the ops usage because we have the index passed as parameter to the idle function and we can determine if we do WFI or memory retention. The benefit of this cleanup is the removal of: * the ops * the statedata usage because we want to get rid of it in all the drivers * extra structure definition * extra functions definition * remove macro definition using BIT(0) It also benefits the readability. Signed-off-by: Daniel Lezcano --- arch/arm/mach-davinci/cpuidle.c | 81 +++++++++++++-------------------------- 1 files changed, 27 insertions(+), 54 deletions(-) diff --git a/arch/arm/mach-davinci/cpuidle.c b/arch/arm/mach-davinci/cpuidle.c index f0f179c..1b0782a 100644 --- a/arch/arm/mach-davinci/cpuidle.c +++ b/arch/arm/mach-davinci/cpuidle.c @@ -25,35 +25,46 @@ #define DAVINCI_CPUIDLE_MAX_STATES 2 -struct davinci_ops { - void (*enter) (u32 flags); - void (*exit) (u32 flags); - u32 flags; -}; +static bool ddr2_pwdn; + +static void __iomem *ddr2_reg_base; + +static void davinci_save_ddr_power(int enter, bool pdown) +{ + u32 val; + + val = readl(ddr2_reg_base + DDR2_SDRCR_OFFSET); + + if (enter) { + if (pdown) + val |= DDR2_SRPD_BIT; + else + val &= ~DDR2_SRPD_BIT; + val |= DDR2_LPMODEN_BIT; + } else { + val &= ~(DDR2_SRPD_BIT | DDR2_LPMODEN_BIT); + } + + writel(val, ddr2_reg_base + DDR2_SDRCR_OFFSET); +} /* Actual code that puts the SoC in different idle states */ static int davinci_enter_idle(struct cpuidle_device *dev, struct cpuidle_driver *drv, int index) { - struct cpuidle_state_usage *state_usage = &dev->states_usage[index]; - struct davinci_ops *ops = cpuidle_get_statedata(state_usage); - - if (ops && ops->enter) - ops->enter(ops->flags); + if (index) + davinci_save_ddr_power(1, ddr2_pwdn); index = cpuidle_wrap_enter(dev, drv, index, arm_cpuidle_simple_enter); - if (ops && ops->exit) - ops->exit(ops->flags); + if (index) + davinci_save_ddr_power(0, ddr2_pwdn); return index; } -/* fields in davinci_ops.flags */ -#define DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN BIT(0) - static struct cpuidle_driver davinci_idle_driver = { .name = "cpuidle-davinci", .owner = THIS_MODULE, @@ -71,43 +82,6 @@ static struct cpuidle_driver davinci_idle_driver = { }; static DEFINE_PER_CPU(struct cpuidle_device, davinci_cpuidle_device); -static void __iomem *ddr2_reg_base; - -static void davinci_save_ddr_power(int enter, bool pdown) -{ - u32 val; - - val = __raw_readl(ddr2_reg_base + DDR2_SDRCR_OFFSET); - - if (enter) { - if (pdown) - val |= DDR2_SRPD_BIT; - else - val &= ~DDR2_SRPD_BIT; - val |= DDR2_LPMODEN_BIT; - } else { - val &= ~(DDR2_SRPD_BIT | DDR2_LPMODEN_BIT); - } - - __raw_writel(val, ddr2_reg_base + DDR2_SDRCR_OFFSET); -} - -static void davinci_c2state_enter(u32 flags) -{ - davinci_save_ddr_power(1, !!(flags & DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN)); -} - -static void davinci_c2state_exit(u32 flags) -{ - davinci_save_ddr_power(0, !!(flags & DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN)); -} - -static struct davinci_ops davinci_states[DAVINCI_CPUIDLE_MAX_STATES] = { - [1] = { - .enter = davinci_c2state_enter, - .exit = davinci_c2state_exit, - }, -}; static int __init davinci_cpuidle_probe(struct platform_device *pdev) { @@ -125,8 +99,7 @@ static int __init davinci_cpuidle_probe(struct platform_device *pdev) ddr2_reg_base = pdata->ddr2_ctlr_base; if (pdata->ddr2_pdown) - davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN; - cpuidle_set_statedata(&device->states_usage[1], &davinci_states[1]); + ddr2_pwdn = true; ret = cpuidle_register_driver(&davinci_idle_driver); if (ret) {