From patchwork Tue Aug 26 15:03:34 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sudeep Holla X-Patchwork-Id: 36038 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-pd0-f199.google.com (mail-pd0-f199.google.com [209.85.192.199]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id F04F220551 for ; Tue, 26 Aug 2014 15:05:31 +0000 (UTC) Received: by mail-pd0-f199.google.com with SMTP id v10sf113971111pde.2 for ; Tue, 26 Aug 2014 08:05:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:from:to:subject:date:message-id :in-reply-to:references:cc:precedence:list-id:list-unsubscribe :list-archive:list-post:list-help:list-subscribe:mime-version:sender :errors-to:x-original-sender:x-original-authentication-results :mailing-list:content-type:content-transfer-encoding; bh=+H3h7oosxvqpZYRnIKqbKSVSr00RtqCI3fsZd5BeO6I=; b=kb9nNLXhTmCjdbyeDNkDXccVbUQKi9D/0H2/TrdWCsosc/7VHGCIYygTN8U7dYXiRl gxy8JVcO5Zys8GBxB+c2ajRR626e7aaBFXXbrVd0MHQQPeI7fme9NvsVz1UPND1n5Ks7 A9jkglUmgBVQ+dr4O/bZRPRuQAQdQTxO9Zxksf8QFHzW4JZxuRft7ICupHAC9V0BS+/3 gWrVCdt/Oz/HO7K181VX3FEjhQ4PeMTznJvuCthLE/q/Mfl1/n+XxjDierQTAa7Px8s9 SzpXUB120fi2rAgJqqxqcjs3xt0tfirmuUucN64m3o1cAWYkpKkZv6TY1H5fU09SpOZC E/iw== X-Gm-Message-State: ALoCoQlkwV5Y+XgRJHhJ46ddnu1ZqPT8LR4vPqMyM8qDrPOQk3EHaNqIDBcmdaCn4DrOdKOm/IZE X-Received: by 10.66.141.48 with SMTP id rl16mr18063792pab.1.1409065531258; Tue, 26 Aug 2014 08:05:31 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.140.25.148 with SMTP id 20ls2538806qgt.86.gmail; Tue, 26 Aug 2014 08:05:31 -0700 (PDT) X-Received: by 10.236.132.243 with SMTP id o79mr43184197yhi.71.1409065531113; Tue, 26 Aug 2014 08:05:31 -0700 (PDT) Received: from mail-yk0-f170.google.com (mail-yk0-f170.google.com [209.85.160.170]) by mx.google.com with ESMTPS id l26si2631034yha.156.2014.08.26.08.05.31 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 26 Aug 2014 08:05:31 -0700 (PDT) Received-SPF: pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.160.170 as permitted sender) client-ip=209.85.160.170; Received: by mail-yk0-f170.google.com with SMTP id 9so11527347ykp.29 for ; Tue, 26 Aug 2014 08:05:31 -0700 (PDT) X-Received: by 10.220.163.69 with SMTP id z5mr24501941vcx.10.1409065530995; Tue, 26 Aug 2014 08:05:30 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patch@linaro.org Received: by 10.221.45.67 with SMTP id uj3csp206757vcb; Tue, 26 Aug 2014 08:05:30 -0700 (PDT) X-Received: by 10.68.69.3 with SMTP id a3mr38520880pbu.94.1409065529948; Tue, 26 Aug 2014 08:05:29 -0700 (PDT) Received: from bombadil.infradead.org (bombadil.infradead.org. [2001:1868:205::9]) by mx.google.com with ESMTPS id en1si4981629pbb.43.2014.08.26.08.05.29 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 26 Aug 2014 08:05:29 -0700 (PDT) Received-SPF: none (google.com: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org does not designate permitted sender hosts) client-ip=2001:1868:205::9; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1XMIHq-00057d-Dq; Tue, 26 Aug 2014 15:03:54 +0000 Received: from fw-tnat.cambridge.arm.com ([217.140.96.21] helo=cam-smtp0.cambridge.arm.com) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1XMIHl-0004oE-Ft for linux-arm-kernel@lists.infradead.org; Tue, 26 Aug 2014 15:03:50 +0000 Received: from e103737-lin.cambridge.arm.com (e103737-lin.cambridge.arm.com [10.1.207.61]) by cam-smtp0.cambridge.arm.com (8.13.8/8.13.8) with ESMTP id s7QF3H64024351; Tue, 26 Aug 2014 16:03:20 +0100 From: Sudeep Holla To: ALKML Subject: [PATCH 1/2] GICv3: refactor gic_enable_redist to support both enabling and disabling Date: Tue, 26 Aug 2014 16:03:34 +0100 Message-Id: <1409065415-20176-2-git-send-email-sudeep.holla@arm.com> X-Mailer: git-send-email 1.8.3.2 In-Reply-To: <1409065415-20176-1-git-send-email-sudeep.holla@arm.com> References: <1409065415-20176-1-git-send-email-sudeep.holla@arm.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140826_080350_023294_CEA3FD3C X-CRM114-Status: GOOD ( 14.12 ) X-Spam-Score: -2.3 (--) X-Spam-Report: SpamAssassin version 3.4.0 on bombadil.infradead.org summary: Content analysis details: (-2.3 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at http://www.dnswl.org/, medium trust [217.140.96.21 listed in list.dnswl.org] 0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay domain -0.0 SPF_PASS SPF: sender matches SPF record Cc: Marc Zyngier , Thomas Gleixner , Lorenzo Pieralisi , Jason Cooper , Sudeep Holla X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: , List-Help: , List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patch=linaro.org@lists.infradead.org X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: sudeep.holla@arm.com X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain of patch+caf_=patchwork-forward=linaro.org@linaro.org designates 209.85.160.170 as permitted sender) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org X-Google-Group-Id: 836684582541 From: Sudeep Holla Currently gic_enable_redist configures the redistributors to never assert WakeRequest signal. However when powering down the processors with wake-up enabled(i.e suspend), we need to configure it to assert that signal. This patch extends gic_enable_redist so that the redistributor can be configure to assert WakeRequest and hold interrupts as pending. This is useful in suspending the processors. This patch also adds check to make sure GICR_WAKER is accessible when configuring it. Cc: Lorenzo Pieralisi Signed-off-by: Sudeep Holla [maz: removed reference to GICD_CTLR.DS and added read-back of GICR_WAKER to check that it is not RAZ/WI] Signed-off-by: Marc Zyngier --- drivers/irqchip/irq-gic-v3.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index 57eaa5a0b1e3..37062ba6704b 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -155,7 +155,7 @@ static void gic_enable_sre(void) pr_err("GIC: unable to set SRE (disabled at EL2), panic ahead\n"); } -static void gic_enable_redist(void) +static void gic_enable_redist(bool enable) { void __iomem *rbase; u32 count = 1000000; /* 1s! */ @@ -163,20 +163,30 @@ static void gic_enable_redist(void) rbase = gic_data_rdist_rd_base(); - /* Wake up this CPU redistributor */ val = readl_relaxed(rbase + GICR_WAKER); - val &= ~GICR_WAKER_ProcessorSleep; + if (enable) + /* Wake up this CPU redistributor */ + val &= ~GICR_WAKER_ProcessorSleep; + else + val |= GICR_WAKER_ProcessorSleep; writel_relaxed(val, rbase + GICR_WAKER); - while (readl_relaxed(rbase + GICR_WAKER) & GICR_WAKER_ChildrenAsleep) { - count--; - if (!count) { - pr_err_ratelimited("redist didn't wake up...\n"); - return; - } + if (!enable) { /* Check that GICR_WAKER is writeable */ + val = readl_relaxed(rbase + GICR_WAKER); + if (!(val & GICR_WAKER_ProcessorSleep)) + return; /* No PM support in this redistributor */ + } + + while (count--) { + val = readl_relaxed(rbase + GICR_WAKER); + if (enable ^ (val & GICR_WAKER_ChildrenAsleep)) + break; cpu_relax(); udelay(1); }; + if (!count) + pr_err_ratelimited("redistributor failed to %s...\n", + enable ? "wakeup" : "sleep"); } /* @@ -381,7 +391,7 @@ static void gic_cpu_init(void) if (gic_populate_rdist()) return; - gic_enable_redist(); + gic_enable_redist(true); rbase = gic_data_rdist_sgi_base();