Received: by 10.192.165.148 with SMTP id m20csp2339954imm; Thu, 26 Apr 2018 09:22:11 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+2Epy9QqEh+cm/RvZym5EmPfLCvJifdmnS+43ewsWwNXHMmLtfFNAmexuUyC5DFbb1CNfi X-Received: by 2002:a17:902:8c91:: with SMTP id t17-v6mr15952542plo.182.1524759731445; Thu, 26 Apr 2018 09:22:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524759731; cv=none; d=google.com; s=arc-20160816; b=B+gJHqKmx1fKkKjhvSeZ0+Ut5SZtPYHngs0/gK+oeUgzUrH2dwAMxp4LLf5Rg/Lsoi g3NOd3o3CyTlnyu7b4tYNVjENMDoueXP1xh85Owo8RDgnWjgyz2ArJn/oPPQmvxy4Fhf kzbz4R7n9+8ZsjC036b6GIM8JNDu63VF8IVXd5NLOEoAX+/hnkrCwfIwH2eVjr7188Gn cdxQx9buUlu3D4OR/tM/8a6KoT+/Tai21ohR99FU3AKxwjRRzoEJHyi7BQ4D+slznp/o D4laTE8BygmnrTfOoOE1V/R3uR4O13EBP9D/9Ueqk+f3cAzuK5NYCmhroixOgaIy3qXi m/rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=IbTDEOkoY4PriyKXu9Na8uLvEBdKRJasDsdeaV6IT5U=; b=cruIPK1KJBzhI6iLZbKETBXbilxFdxBJx3QDVPpnCrOpYYKaYBwqzjscrycqkGPJps QZSuLTn7nsoTLEFbpDYFPdMjMdB65+v6uLS0HURUBSvovsFyRdIdN1MC3KpxOBnW4XDK QO10zUH3OUr+LImxCQpJGD0dhSxqUkI+p4FZXsACHplEd4sxv2bfRjRZuZtEY63FeLl6 UndZVUWEWp1jHZeUQ4u8vmGsHX6/iU9fx1pJw6mM0xtjGDHd1ecWaD9LzRT0jrVK/2rC ZbLGudZ1SDlCbWaNW39PmR4SVaCFUj8/KhuEhEg2H3bBHrZtG3v4bZ8JhH8oftx/X/TB d64A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b2-v6si20019746pla.365.2018.04.26.09.21.57; Thu, 26 Apr 2018 09:22:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756841AbeDZQTZ (ORCPT + 99 others); Thu, 26 Apr 2018 12:19:25 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:16862 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754462AbeDZQTQ (ORCPT ); Thu, 26 Apr 2018 12:19:16 -0400 Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx08-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w3QGItGT003031; Thu, 26 Apr 2018 18:18:55 +0200 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2hfte9c7bq-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 26 Apr 2018 18:18:55 +0200 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id B16443A; Thu, 26 Apr 2018 16:18:45 +0000 (GMT) Received: from Webmail-eu.st.com (Safex1hubcas24.st.com [10.75.90.94]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 97EA45147; Thu, 26 Apr 2018 16:18:45 +0000 (GMT) Received: from SAFEX1HUBCAS21.st.com (10.75.90.44) by Safex1hubcas24.st.com (10.75.90.94) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 26 Apr 2018 18:18:45 +0200 Received: from lmecxl0923.lme.st.com (10.48.0.237) by Webmail-ga.st.com (10.75.90.48) with Microsoft SMTP Server (TLS) id 14.3.361.1; Thu, 26 Apr 2018 18:18:45 +0200 From: Ludovic Barre To: Thomas Gleixner , Jason Cooper , Marc Zyngier , Rob Herring CC: Maxime Coquelin , Alexandre Torgue , Gerald BAEZA , Loic PALLARDY , , , , "Ludovic Barre" Subject: [PATCH 08/11] irqchip: stm32: add suspend/resume support for hierarchy domain Date: Thu, 26 Apr 2018 18:18:31 +0200 Message-ID: <1524759514-12392-9-git-send-email-ludovic.Barre@st.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1524759514-12392-1-git-send-email-ludovic.Barre@st.com> References: <1524759514-12392-1-git-send-email-ludovic.Barre@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.48.0.237] X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-04-26_06:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Ludovic Barre This patch adds suspend/resume feature for exti hierarchy domain. -suspend function sets wake_active into imr of each banks -resume function restores the mask_cache interrupt into imr of each banks Signed-off-by: Ludovic Barre --- drivers/irqchip/irq-stm32-exti.c | 49 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/drivers/irqchip/irq-stm32-exti.c b/drivers/irqchip/irq-stm32-exti.c index ebf7146..5089c1e 100644 --- a/drivers/irqchip/irq-stm32-exti.c +++ b/drivers/irqchip/irq-stm32-exti.c @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -59,6 +60,8 @@ struct stm32_exti_host_data { const struct stm32_exti_drv_data *drv_data; }; +static struct stm32_exti_host_data *stm32_host_data; + static const struct stm32_exti_bank stm32f4xx_exti_b1 = { .imr_ofst = 0x00, .emr_ofst = 0x04, @@ -498,6 +501,48 @@ static int stm32_exti_h_set_affinity(struct irq_data *d, return -EINVAL; } +#ifdef CONFIG_PM +static int stm32_exti_h_suspend(void) +{ + struct stm32_exti_chip_data *chip_data; + int i; + + for (i = 0; i < stm32_host_data->drv_data->bank_nr; i++) { + chip_data = &stm32_host_data->chips_data[i]; + raw_spin_lock(&chip_data->rlock); + stm32_chip_suspend(chip_data, chip_data->wake_active); + raw_spin_unlock(&chip_data->rlock); + } + + return 0; +} + +static void stm32_exti_h_resume(void) +{ + struct stm32_exti_chip_data *chip_data; + int i; + + for (i = 0; i < stm32_host_data->drv_data->bank_nr; i++) { + chip_data = &stm32_host_data->chips_data[i]; + raw_spin_lock(&chip_data->rlock); + stm32_chip_resume(chip_data, chip_data->mask_cache); + raw_spin_unlock(&chip_data->rlock); + } +} + +static struct syscore_ops stm32_exti_h_syscore_ops = { + .suspend = stm32_exti_h_suspend, + .resume = stm32_exti_h_resume, +}; + +static void stm32_exti_h_syscore_init(void) +{ + register_syscore_ops(&stm32_exti_h_syscore_ops); +} +#else +static inline void stm32_exti_h_syscore_init(void) {} +#endif + static struct irq_chip stm32_exti_h_chip = { .name = "stm32-exti-h", .irq_eoi = stm32_exti_h_eoi, @@ -567,6 +612,8 @@ stm32_exti_host_data *stm32_exti_host_init(const struct stm32_exti_drv_data *dd, return NULL; } + stm32_host_data = host_data; + return host_data; } @@ -725,6 +772,8 @@ __init stm32_exti_hierarchy_init(const struct stm32_exti_drv_data *drv_data, goto out_unmap; } + stm32_exti_h_syscore_init(); + return 0; out_unmap: -- 2.7.4