From patchwork Thu Jun 4 12:39:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin GAIGNARD X-Patchwork-Id: 11587873 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 118D2739 for ; Thu, 4 Jun 2020 12:40:25 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id DD655207F5 for ; Thu, 4 Jun 2020 12:40:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="a0sBJ744"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=st.com header.i=@st.com header.b="R+nb7Y4C" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org DD655207F5 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=st.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=qqlQt9bV20Ge748T3oCg9NiQtlPKiEFMmY4VqWvnvJU=; b=a0sBJ744Ctw4Fy EckOEMcaJMoHhfyw8pOa+Zw8KIomnevLT493PiXz2q/gUl/PpM1rbHwb1/Rl8IcqkXxuxcvGGYu8B FkA+tHMflGzC+L/tFD6hUtKT/lf6kODS3mLQUT+ZIxkteIQ6UYTYO0NSraQTiywnjlaE8cnN/cNvw 4vxBautLkywBtFFsrnJ2SjQjN4tVn/fw5QxuLtAvRPzfEs9cvN7vZurzXUU6B4iZvGiRHsufa5+/L z409XJlRqmDZkwkJeW9xWGAaYBD8ApvIkKZILAF6O7p6/Usl7A4+KUNdbLCXCXuR/ZilvrYyhvBvU WgD+gekuWMJ7T4JNQJfg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jgpAO-00011L-Vo; Thu, 04 Jun 2020 12:40:17 +0000 Received: from mx08-00178001.pphosted.com ([91.207.212.93] helo=mx07-00178001.pphosted.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jgpAK-0000tH-T5 for linux-arm-kernel@lists.infradead.org; Thu, 04 Jun 2020 12:40:14 +0000 Received: from pps.filterd (m0046660.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 054CWUtR006294; Thu, 4 Jun 2020 14:40:06 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=STMicroelectronics; bh=zWShjHdtkDP9KEzM3tiXokZkb+o6dSeLDNYRf6d3oDE=; b=R+nb7Y4C+6vJV56wpDtXXRYJR+cfuOq3u00kysalI5XbqnsaAhF5cL8L6zYP3JcDkwJu p0TqGmKozMMcaJLJg+1lWeYDggGWsfo4GEAe5n98i7O8QXpX681HLCrAChFh1m6yl+js vK1qPsPELc0sp8Z2hfPon6zgpnXKR6ju+RZ/MJxb0oLPcRSl/c4W7JJnpwt62UzSF+bW 06b0zkEE1h6EIAM44agyeYy/GbF6ZUaZM9Dfjybyfp6q0mmLtxK7kmX5ERiDxYaWORiR Qm8UOuLn3fr3S/dDYj4A8t8VrpvXN3hQ25eqOy13T9iQ4TmBE3mA+tsifyZ2a3FJdUbd Zw== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 31ejxauugw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 04 Jun 2020 14:40:06 +0200 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 7E956100039; Thu, 4 Jun 2020 14:40:04 +0200 (CEST) Received: from Webmail-eu.st.com (sfhdag3node3.st.com [10.75.127.9]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 4A12B2BE254; Thu, 4 Jun 2020 14:40:04 +0200 (CEST) Received: from localhost (10.75.127.50) by SFHDAG3NODE3.st.com (10.75.127.9) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Thu, 4 Jun 2020 14:39:35 +0200 From: Benjamin Gaignard To: , , , Subject: [PATCH v3 1/3] dt-bindings: media: stm32-dcmi: Add DCMI min frequency property Date: Thu, 4 Jun 2020 14:39:30 +0200 Message-ID: <20200604123932.20512-2-benjamin.gaignard@st.com> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20200604123932.20512-1-benjamin.gaignard@st.com> References: <20200604123932.20512-1-benjamin.gaignard@st.com> MIME-Version: 1.0 X-Originating-IP: [10.75.127.50] X-ClientProxiedBy: SFHDAG2NODE3.st.com (10.75.127.6) To SFHDAG3NODE3.st.com (10.75.127.9) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216, 18.0.687 definitions=2020-06-04_10:2020-06-02, 2020-06-04 signatures=0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200604_054013_467678_5E2B5F22 X-CRM114-Status: GOOD ( 12.16 ) X-Spam-Score: -0.9 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at https://www.dnswl.org/, low trust [91.207.212.93 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Benjamin Gaignard , rjw@rjwysocki.net, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, valentin.schneider@arm.com, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Document st,stm32-dcmi-min-frequency property which is used to request CPUs minimum frequency when streaming frames. Signed-off-by: Benjamin Gaignard --- Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml b/Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml index 3fe778cb5cc3..05ca85a2411a 100644 --- a/Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml +++ b/Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml @@ -44,6 +44,13 @@ properties: bindings defined in Documentation/devicetree/bindings/media/video-interfaces.txt. + st,stm32-dcmi-min-frequency: + description: DCMI minimum CPUs frequency requirement (in KHz). + allOf: + - $ref: /schemas/types.yaml#/definitions/uint32 + - minimum: 0 + - default: 0 + required: - compatible - reg @@ -71,6 +78,7 @@ examples: clock-names = "mclk"; dmas = <&dmamux1 75 0x400 0x0d>; dma-names = "tx"; + st,stm32-dcmi-min-frequency = <650000>; port { dcmi_0: endpoint { From patchwork Thu Jun 4 12:39:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin GAIGNARD X-Patchwork-Id: 11587889 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 6B6A914E3 for ; Thu, 4 Jun 2020 12:41:06 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3C0C42063A for ; Thu, 4 Jun 2020 12:41:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="LixGvaNr"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=st.com header.i=@st.com header.b="n43BdgBI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3C0C42063A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=st.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=wBGLYk3l4tJcgtK1b41rvDsRsk6hG+xWuXrFUPTV9XQ=; b=LixGvaNroEVJ0y KRnQplZHX/RtTw4xISBMVMZsPZobuE6BMT4Ms1CdhCpZFniB5Zx6fHfVM3tLGAAZSZiwVvdhfqdiZ JVAbcBemGLFsp//EWYx9BqT8MHV7E6l1/3M7LStG6Lg/dnMneuOaNSnCXTDMymuMwxF9ZAx2ophqH 8szA1ecV+g1iJMny3OTUqtEIsIvxHqKrSbOmxCWjY6tpKG/T6U0xqckpRREfpVp+cPOja/7F4fOsF Wb/GxnzEOXQDnlR1b5d5qhFzTZXnt0NDq5Y2H4x24oWlVx3S/CMHzk8vDLsMuMbSSPTsVY49KbMFE 99poT3q0lDsO1h+3E8Nw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jgpB7-0001mB-KJ; Thu, 04 Jun 2020 12:41:01 +0000 Received: from mx07-00178001.pphosted.com ([62.209.51.94]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jgpAL-0000zo-Pz for linux-arm-kernel@lists.infradead.org; Thu, 04 Jun 2020 12:40:16 +0000 Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 054CWQbL014360; Thu, 4 Jun 2020 14:40:05 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=STMicroelectronics; bh=nOT8wpxhzrsWe8nqVqTn3LV4HPvG+lPubQlfdIwx+yM=; b=n43BdgBIcJQdgKwBKWge8kwF3Sko3mEozI+LjJq2rFMzB7X+d/u97bqHsSnhEevUh3+w 7kXNykjdzrzKLiEPHkG828fysN81KMQ7uLq8//YDP/7d7cZcJnd4OcNcBkBHlIvg0/b7 UjjRhSJZ301E8pebHWgdDwBt0NQPbq8+b90iFA7P3JS2wwq2zyeHTjWvGtLmi3MKrP33 47Oxl6j6EqlekwIfqF7vqhjeRbFnUXWhraloN3vjA32tg1/k97hw7/E1wAgnhGKBNMkB KYqFlBrJ/bhK5n5W6pEOmAPe7kjFJbfvJJ2a99CzjZqKXgn/OhlwklYtAWVnrd2ZDTbN xA== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 31bcy0t9gm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 04 Jun 2020 14:40:05 +0200 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 78C27100034; Thu, 4 Jun 2020 14:40:04 +0200 (CEST) Received: from Webmail-eu.st.com (sfhdag3node3.st.com [10.75.127.9]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 4EF462BE256; Thu, 4 Jun 2020 14:40:04 +0200 (CEST) Received: from localhost (10.75.127.48) by SFHDAG3NODE3.st.com (10.75.127.9) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Thu, 4 Jun 2020 14:39:36 +0200 From: Benjamin Gaignard To: , , , Subject: [PATCH v3 2/3] media: stm32-dcmi: Set minimum cpufreq requirement Date: Thu, 4 Jun 2020 14:39:31 +0200 Message-ID: <20200604123932.20512-3-benjamin.gaignard@st.com> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20200604123932.20512-1-benjamin.gaignard@st.com> References: <20200604123932.20512-1-benjamin.gaignard@st.com> MIME-Version: 1.0 X-Originating-IP: [10.75.127.48] X-ClientProxiedBy: SFHDAG2NODE1.st.com (10.75.127.4) To SFHDAG3NODE3.st.com (10.75.127.9) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216, 18.0.687 definitions=2020-06-04_10:2020-06-02, 2020-06-04 signatures=0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200604_054014_142303_4DC779D9 X-CRM114-Status: GOOD ( 21.85 ) X-Spam-Score: -0.9 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at https://www.dnswl.org/, low trust [62.209.51.94 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Benjamin Gaignard , rjw@rjwysocki.net, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, valentin.schneider@arm.com, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Before start streaming set cpufreq minimum frequency requirement. The cpufreq governor will adapt the frequencies and we will have no latency for handling interrupts. The frequency requirement is retrieved from the device-tree node. While streaming be notified if the IRQ affinity change thanks to irq_affinity_notify callback. Signed-off-by: Benjamin Gaignard --- version 3: - add a cpumask field to track boosted CPUs - add irq_affinity_notify callback - protect cpumask field with a mutex drivers/media/platform/stm32/stm32-dcmi.c | 187 ++++++++++++++++++++++++++++-- 1 file changed, 179 insertions(+), 8 deletions(-) diff --git a/drivers/media/platform/stm32/stm32-dcmi.c b/drivers/media/platform/stm32/stm32-dcmi.c index b8931490b83b..fb6ab09eaff0 100644 --- a/drivers/media/platform/stm32/stm32-dcmi.c +++ b/drivers/media/platform/stm32/stm32-dcmi.c @@ -13,10 +13,13 @@ #include #include +#include +#include #include #include #include #include +#include #include #include #include @@ -99,6 +102,8 @@ enum state { #define OVERRUN_ERROR_THRESHOLD 3 +static DEFINE_PER_CPU(struct freq_qos_request, qos_req); + struct dcmi_graph_entity { struct v4l2_async_subdev asd; @@ -133,6 +138,7 @@ struct stm32_dcmi { struct resource *res; struct reset_control *rstc; int sequence; + int irq; struct list_head buffers; struct dcmi_buf *active; @@ -173,6 +179,11 @@ struct stm32_dcmi { struct media_device mdev; struct media_pad vid_cap_pad; struct media_pipeline pipeline; + + u32 min_frequency; + cpumask_var_t boosted; + struct irq_affinity_notify notify; + struct mutex freq_lock; }; static inline struct stm32_dcmi *notifier_to_dcmi(struct v4l2_async_notifier *n) @@ -722,6 +733,156 @@ static void dcmi_pipeline_stop(struct stm32_dcmi *dcmi) dcmi_pipeline_s_stream(dcmi, 0); } +static void dcmi_get_min_frequency(struct stm32_dcmi *dcmi) +{ + struct device_node *np = dcmi->mdev.dev->of_node; + + dcmi->min_frequency = FREQ_QOS_MIN_DEFAULT_VALUE; + + of_property_read_u32(np, "st,stm32-dcmi-min-frequency", + &dcmi->min_frequency); +} + +static void dcmi_irq_notifier_notify(struct irq_affinity_notify *notify, + const cpumask_t *mask) +{ + struct stm32_dcmi *dcmi = container_of(notify, + struct stm32_dcmi, + notify); + struct cpufreq_policy *p; + int cpu; + + mutex_lock(&dcmi->freq_lock); + /* + * For all boosted CPUs check if it is still the case + * if not remove the request + */ + for_each_cpu(cpu, dcmi->boosted) { + if (cpumask_test_cpu(cpu, mask)) + continue; + + p = cpufreq_cpu_get(cpu); + if (!p) + continue; + + freq_qos_remove_request(&per_cpu(qos_req, cpu)); + cpumask_andnot(dcmi->boosted, dcmi->boosted, p->cpus); + + cpufreq_cpu_put(p); + } + + /* + * For CPUs in the mask check if they are boosted if not add + * a request + */ + for_each_cpu(cpu, mask) { + if (cpumask_test_cpu(cpu, dcmi->boosted)) + continue; + + p = cpufreq_cpu_get(cpu); + if (!p) + continue; + + freq_qos_add_request(&p->constraints, &per_cpu(qos_req, cpu), + FREQ_QOS_MIN, dcmi->min_frequency); + cpumask_or(dcmi->boosted, dcmi->boosted, p->cpus); + cpufreq_cpu_put(p); + } + + mutex_unlock(&dcmi->freq_lock); +} + +static void dcmi_irq_notifier_release(struct kref *ref) +{ + /* + * This is required by affinity notifier. We don't have anything to + * free here. + */ +} + +static void dcmi_get_cpu_policy(struct stm32_dcmi *dcmi) +{ + struct cpufreq_policy *p; + int cpu; + + if (!alloc_cpumask_var(&dcmi->boosted, GFP_KERNEL)) + return; + + mutex_lock(&dcmi->freq_lock); + + for_each_cpu(cpu, irq_get_affinity_mask(dcmi->irq)) { + if (cpumask_test_cpu(cpu, dcmi->boosted)) + continue; + + p = cpufreq_cpu_get(cpu); + if (!p) + continue; + + freq_qos_add_request(&p->constraints, &per_cpu(qos_req, cpu), + FREQ_QOS_MIN, FREQ_QOS_MIN_DEFAULT_VALUE); + + cpumask_or(dcmi->boosted, dcmi->boosted, p->cpus); + + cpufreq_cpu_put(p); + } + + mutex_unlock(&dcmi->freq_lock); +} + +static void dcmi_put_cpu_policy(struct stm32_dcmi *dcmi) +{ + struct cpufreq_policy *p; + int cpu; + + mutex_lock(&dcmi->freq_lock); + + for_each_cpu(cpu, irq_get_affinity_mask(dcmi->irq)) { + if (!cpumask_test_cpu(cpu, dcmi->boosted)) + continue; + + p = cpufreq_cpu_get(cpu); + if (!p) + continue; + + freq_qos_remove_request(&per_cpu(qos_req, cpu)); + cpumask_andnot(dcmi->boosted, dcmi->boosted, p->cpus); + + cpufreq_cpu_put(p); + } + + free_cpumask_var(dcmi->boosted); + + mutex_unlock(&dcmi->freq_lock); +} + +static void dcmi_set_min_frequency(struct stm32_dcmi *dcmi, s32 freq) +{ + struct irq_affinity_notify *notify = &dcmi->notify; + int cpu; + + mutex_lock(&dcmi->freq_lock); + + for_each_cpu(cpu, irq_get_affinity_mask(dcmi->irq)) { + if (!cpumask_test_cpu(cpu, dcmi->boosted)) + continue; + + if (!freq_qos_request_active(&per_cpu(qos_req, cpu))) + continue; + + freq_qos_update_request(&per_cpu(qos_req, cpu), freq); + } + + mutex_unlock(&dcmi->freq_lock); + + if (freq != FREQ_QOS_MIN_DEFAULT_VALUE) { + notify->notify = dcmi_irq_notifier_notify; + notify->release = dcmi_irq_notifier_release; + irq_set_affinity_notifier(dcmi->irq, notify); + } else { + irq_set_affinity_notifier(dcmi->irq, NULL); + } +} + static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count) { struct stm32_dcmi *dcmi = vb2_get_drv_priv(vq); @@ -736,11 +897,13 @@ static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count) goto err_release_buffers; } + dcmi_set_min_frequency(dcmi, dcmi->min_frequency); + ret = media_pipeline_start(&dcmi->vdev->entity, &dcmi->pipeline); if (ret < 0) { dev_err(dcmi->dev, "%s: Failed to start streaming, media pipeline start error (%d)\n", __func__, ret); - goto err_pm_put; + goto err_drop_qos; } ret = dcmi_pipeline_start(dcmi); @@ -835,7 +998,8 @@ static int dcmi_start_streaming(struct vb2_queue *vq, unsigned int count) err_media_pipeline_stop: media_pipeline_stop(&dcmi->vdev->entity); -err_pm_put: +err_drop_qos: + dcmi_set_min_frequency(dcmi, FREQ_QOS_MIN_DEFAULT_VALUE); pm_runtime_put(dcmi->dev); err_release_buffers: @@ -863,6 +1027,8 @@ static void dcmi_stop_streaming(struct vb2_queue *vq) media_pipeline_stop(&dcmi->vdev->entity); + dcmi_set_min_frequency(dcmi, FREQ_QOS_MIN_DEFAULT_VALUE); + spin_lock_irq(&dcmi->irqlock); /* Disable interruptions */ @@ -1838,7 +2004,6 @@ static int dcmi_probe(struct platform_device *pdev) struct vb2_queue *q; struct dma_chan *chan; struct clk *mclk; - int irq; int ret = 0; match = of_match_device(of_match_ptr(stm32_dcmi_of_match), &pdev->dev); @@ -1879,9 +2044,9 @@ static int dcmi_probe(struct platform_device *pdev) dcmi->bus.bus_width = ep.bus.parallel.bus_width; dcmi->bus.data_shift = ep.bus.parallel.data_shift; - irq = platform_get_irq(pdev, 0); - if (irq <= 0) - return irq ? irq : -ENXIO; + dcmi->irq = platform_get_irq(pdev, 0); + if (dcmi->irq <= 0) + return dcmi->irq ? dcmi->irq : -ENXIO; dcmi->res = platform_get_resource(pdev, IORESOURCE_MEM, 0); if (!dcmi->res) { @@ -1895,11 +2060,12 @@ static int dcmi_probe(struct platform_device *pdev) return PTR_ERR(dcmi->regs); } - ret = devm_request_threaded_irq(&pdev->dev, irq, dcmi_irq_callback, + ret = devm_request_threaded_irq(&pdev->dev, dcmi->irq, + dcmi_irq_callback, dcmi_irq_thread, IRQF_ONESHOT, dev_name(&pdev->dev), dcmi); if (ret) { - dev_err(&pdev->dev, "Unable to request irq %d\n", irq); + dev_err(&pdev->dev, "Unable to request irq %d\n", dcmi->irq); return ret; } @@ -2022,6 +2188,9 @@ static int dcmi_probe(struct platform_device *pdev) dev_info(&pdev->dev, "Probe done\n"); + dcmi_get_min_frequency(dcmi); + dcmi_get_cpu_policy(dcmi); + platform_set_drvdata(pdev, dcmi); pm_runtime_enable(&pdev->dev); @@ -2049,6 +2218,8 @@ static int dcmi_remove(struct platform_device *pdev) pm_runtime_disable(&pdev->dev); + dcmi_put_cpu_policy(dcmi); + v4l2_async_notifier_unregister(&dcmi->notifier); v4l2_async_notifier_cleanup(&dcmi->notifier); media_entity_cleanup(&dcmi->vdev->entity); From patchwork Thu Jun 4 12:39:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Benjamin GAIGNARD X-Patchwork-Id: 11587887 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B9FFF14E3 for ; Thu, 4 Jun 2020 12:40:50 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8F2012063A for ; Thu, 4 Jun 2020 12:40:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="YwB4MpxR"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=st.com header.i=@st.com header.b="j/aGK25Z" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8F2012063A Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=st.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=7V5JwpizStS72zZVlCmxixS5OkeX3qptoJ9rQ9Py8fU=; b=YwB4MpxRQbJ008 ah+KTsNWodQ0DbpWmIkzOFxjwtQ+u5NDkTbtof8NATpivalMLDHx+X/1khPZ7F4HHnIHQsd2jzI/7 d/RUG7KvWFYDte5xH1YYzob6O/jIZP9Ly6uhfbV4e9ynW2xfPoASEH1ZCz2isuvbzSYzsYUlAiqQh An2jJRmDYQDQ3p+TJ2XHdbEQDIxp/AfIfWu4D0xBVr+g/g1682di5pqYN9YbaEZAYui6FirF0rpuX C18crC1VF1rrdy77sP93DY27u9rZqCHo6IIkXGxQnmcQ/M305iOL//w9dwpM0dgPX+fx2RhTrDEE0 Jdj6vLgQk91/dTh70gNQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jgpAo-0001Uz-FH; Thu, 04 Jun 2020 12:40:42 +0000 Received: from mx07-00178001.pphosted.com ([62.209.51.94]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jgpAL-0000zp-Py for linux-arm-kernel@lists.infradead.org; Thu, 04 Jun 2020 12:40:16 +0000 Received: from pps.filterd (m0046037.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 054CXb8J021605; Thu, 4 Jun 2020 14:40:05 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-type; s=STMicroelectronics; bh=UV2eXHMfLb4/QtK9KJPbsnZv2k9uIAuEYmQYk8262qk=; b=j/aGK25ZLhCxZMusSYwd/PwB2dHq9EqbLcvIaWk6KvoOJB568z5maZpE2tHDe/LBIb2l si5s9zn357LQpgQS8NuaJl+p5oJ5X+GnUjzgCjYDKm7lgRby8CVvu/zvsWk9i2xHAuhQ rBvgf6XUx8JbgVrF9kcoewqjxCS4WLuiN8AlDPXTohujRP9dUu0rTt8XNga5IvLWFAWk 3siv7QGKehXs8KIdhD0Qq4NZU6NyMn99epEmSf4l+tu9Y0/bLPhaU5OamvW5rG4LFGdi JLy7qiTQWRDS2F/2ANn/Thu7xRznSV1e/Dw594f8j8XDcB+QBlj/miccACk+lAYRqNEF yg== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 31bd8wa7jp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 04 Jun 2020 14:40:05 +0200 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 7C832100038; Thu, 4 Jun 2020 14:40:04 +0200 (CEST) Received: from Webmail-eu.st.com (sfhdag3node3.st.com [10.75.127.9]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 58C6C2BE257; Thu, 4 Jun 2020 14:40:04 +0200 (CEST) Received: from localhost (10.75.127.48) by SFHDAG3NODE3.st.com (10.75.127.9) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Thu, 4 Jun 2020 14:39:38 +0200 From: Benjamin Gaignard To: , , , Subject: [PATCH v3 3/3] ARM: dts: stm32: Set DCMI frequency requirement for stm32mp15x Date: Thu, 4 Jun 2020 14:39:32 +0200 Message-ID: <20200604123932.20512-4-benjamin.gaignard@st.com> X-Mailer: git-send-email 2.15.0 In-Reply-To: <20200604123932.20512-1-benjamin.gaignard@st.com> References: <20200604123932.20512-1-benjamin.gaignard@st.com> MIME-Version: 1.0 X-Originating-IP: [10.75.127.48] X-ClientProxiedBy: SFHDAG6NODE3.st.com (10.75.127.18) To SFHDAG3NODE3.st.com (10.75.127.9) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.216, 18.0.687 definitions=2020-06-04_10:2020-06-02, 2020-06-04 signatures=0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200604_054014_167996_7749363E X-CRM114-Status: GOOD ( 13.00 ) X-Spam-Score: -0.9 (/) X-Spam-Report: SpamAssassin version 3.4.4 on bombadil.infradead.org summary: Content analysis details: (-0.9 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at https://www.dnswl.org/, low trust [62.209.51.94 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Benjamin Gaignard , rjw@rjwysocki.net, linux-kernel@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, valentin.schneider@arm.com, linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org Make sure that CPUs will at least run at 650Mhz when streaming sensor frames. Signed-off-by: Benjamin Gaignard --- arch/arm/boot/dts/stm32mp151.dtsi | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/arm/boot/dts/stm32mp151.dtsi b/arch/arm/boot/dts/stm32mp151.dtsi index 3ea05ba48215..f6d7bf4f8231 100644 --- a/arch/arm/boot/dts/stm32mp151.dtsi +++ b/arch/arm/boot/dts/stm32mp151.dtsi @@ -1091,6 +1091,7 @@ clock-names = "mclk"; dmas = <&dmamux1 75 0x400 0x0d>; dma-names = "tx"; + st,stm32-dcmi-min-frequency = <650000>; status = "disabled"; };