Received: by 10.213.65.68 with SMTP id h4csp1544623imn; Thu, 29 Mar 2018 06:43:16 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+/XLjM4sfRhSxkerOFzTxXn6pvYVQ37g1xg0dLn81v7nj1cRy0p1OgqlN2weFwJCrl0L8y X-Received: by 10.101.97.13 with SMTP id z13mr5544445pgu.54.1522330996871; Thu, 29 Mar 2018 06:43:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522330996; cv=none; d=google.com; s=arc-20160816; b=b34tjpKyV9bDdLYvQctIF5N17YIRjw6IXhapmGuZsDW21dRRLCh9ZYpJ9ZHMjZyJ/s ysnnWirEcN9esHsu82IUi+mQf70LFHX0xmUDL4+Pwf0ZZ5Tzx0srjMSrwD+yMk5/Mf9Q OIL1SdSPM7gnWiVfp5LxLCA1htqu5jJCucwbK5LUdYmk9SrJevDZbyBNRUqOci/ztny6 UreUa4reA+4lyiuAIX/F+YnUWSMF6RCSpt5LhrLJzj7sjwOlGf4NSDsOuN51vr1z7SCn jYRYwud99V98d3hp7pLHTJWJF/Fvyisj/BGAozbpjdRcvhIUoG9kT5MuF+wXYzN85hr8 Jurw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=MmhWC4y0pVb4r+kSBpztTJ46TYlRgFe6GjSqUQj+mXA=; b=nBt5gmX/D5eJS47ctUwuuaoJooHnSwPu/K5cPSQFR8/qEpKrLU+THPuK9cp2bYW76e Mn3sloqJxHJCoMocG89p2VmenT31pogntS1vczmpolggqaoTzgokUqxVcgiUQstMe7Dj QgNLynW5WavnsrLQoGoSXR1pAhuwM0jrGCvdjj2+AJlRTx3F5lD62KT9gvhfm/ooZssy oKXm7wzz6jGK3F7TvkB9rq+5Hpftg25PSdehL9/J85FOBS1EGZw0v0AaQHjQ6Xgiz24M 7l79v5ZRmhNIetP9TWfjhOGrfZk0Ssl1NndpdZSEIHQeTnmRRLOxxDWSP6hSHIkIHqp2 tLlA== 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 n6-v6si5920659pla.26.2018.03.29.06.43.02; Thu, 29 Mar 2018 06:43:16 -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 S1752628AbeC2Nlz (ORCPT + 99 others); Thu, 29 Mar 2018 09:41:55 -0400 Received: from mx07-00178001.pphosted.com ([62.209.51.94]:11167 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751908AbeC2Nly (ORCPT ); Thu, 29 Mar 2018 09:41:54 -0400 Received: from pps.filterd (m0046668.ppops.net [127.0.0.1]) by mx07-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w2TDdhIb011667; Thu, 29 Mar 2018 15:41:26 +0200 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx07-00178001.pphosted.com with ESMTP id 2h0vmnhhh1-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Thu, 29 Mar 2018 15:41:26 +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 7772738; Thu, 29 Mar 2018 13:41:25 +0000 (GMT) Received: from Webmail-eu.st.com (sfhdag5node3.st.com [10.75.127.15]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 392DE2CB0; Thu, 29 Mar 2018 13:41:25 +0000 (GMT) Received: from [10.48.0.167] (10.75.127.49) by SFHDAG5NODE3.st.com (10.75.127.15) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Thu, 29 Mar 2018 15:41:24 +0200 Subject: Re: [RESEND PATCH v2 4/8] mfd: stm32-timers: add support for dmas To: Lee Jones CC: , , , , , , , , , , , References: <1518602679-3064-1-git-send-email-fabrice.gasnier@st.com> <1518602679-3064-5-git-send-email-fabrice.gasnier@st.com> <20180328152251.xeh72dpeflzohn4k@dell> <106ff518-4973-5d4a-b5bf-dd58cbd8439a@st.com> <20180329125912.jgasmw75qvtlszgx@dell> From: Fabrice Gasnier Message-ID: <12d53b2e-eec4-a498-1e1f-c217161c5086@st.com> Date: Thu, 29 Mar 2018 15:41:24 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: <20180329125912.jgasmw75qvtlszgx@dell> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.75.127.49] X-ClientProxiedBy: SFHDAG5NODE2.st.com (10.75.127.14) To SFHDAG5NODE3.st.com (10.75.127.15) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-03-29_08:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/29/2018 02:59 PM, Lee Jones wrote: > On Wed, 28 Mar 2018, Fabrice Gasnier wrote: > >> On 03/28/2018 05:22 PM, Lee Jones wrote: >>> On Wed, 14 Feb 2018, Fabrice Gasnier wrote: >>> >>>> STM32 Timers can support up to 7 DMA requests: >>>> - 4 channels, update, compare and trigger. >>>> Optionally request part, or all DMAs from stm32-timers MFD core. >>>> >>>> Also add routine to implement burst reads using DMA from timer registers. >>>> This is exported. So, it can be used by child drivers, PWM capture >>>> for instance (but not limited to). >>>> >>>> Signed-off-by: Fabrice Gasnier >>>> Reviewed-by: Benjamin Gaignard >>>> --- >>>> Changes in v2: >>>> - Abstract DMA handling from child driver: move it to MFD core >>>> - Add comments on optional dma support >>>> --- >>>> drivers/mfd/stm32-timers.c | 215 ++++++++++++++++++++++++++++++++++++++- >>>> include/linux/mfd/stm32-timers.h | 27 +++++ >>>> 2 files changed, 238 insertions(+), 4 deletions(-) >>>> >>>> diff --git a/drivers/mfd/stm32-timers.c b/drivers/mfd/stm32-timers.c >>>> index a6675a4..2cdad2c 100644 >>>> --- a/drivers/mfd/stm32-timers.c >>>> +++ b/drivers/mfd/stm32-timers.c > > [...] > >>>> + struct dma_chan *dmas[STM32_TIMERS_MAX_DMAS]; >>>> + struct stm32_timers ddata; >>> >>> This looks odd to me. Why can't you expand the current ddata >>> structure? Wouldn't it be better to create a stm32_timers_dma >>> structure to place all this information in (except *dev, that should >>> live in the ddata struct), then place a reference in the existing >>> stm32_timers struct? >> >> Maybe I miss-understand you here, from what we discussed in V1: >> https://lkml.org/lkml/2018/1/23/574 >>> ... "passing in the physical address of the parent MFD into >>> a child device doesn't quite sit right with me" >> I introduced this private struct in MFD parent, and completely hide it >> from the child. >> >> So, do you suggest to add struct definition here ? But make it part of >> struct stm32_timers *ddata? >> >> And only put declaration in include/linux/mfd/stm32-timers.h: >> + struct stm32_timers_dma; >> >> struct stm32_timers { >> struct clk *clk; >> struct regmap *regmap; >> u32 max_arr; >> + struct stm32_timers_dma; >> }; > > Yes, that's the basic idea. > >> I can probably spare the *dev then... use dev->parent in child driver. > > What would you use dev->parent for? Hi Lee, This is to follow your sugestion to use *dev instead of *ddata when calling stm32_timers_dma_burst_read(), the idea is to use it on child side: stm32_timers_dma_burst_read(dev->parent,...) from pwm driver. Then there is no need to keep *dev inside ddata struct. > > [...] > >>>> +static int stm32_timers_remove(struct platform_device *pdev) >>>> +{ >>>> + struct stm32_timers *ddata = platform_get_drvdata(pdev); >>>> + struct stm32_timers_priv *priv = to_stm32_timers_priv(ddata); >>>> + >>>> + of_platform_depopulate(&pdev->dev); >>> >>> Why can't you continue using devm_*? >> >> I can use devm_of_platform_depopulate() here if you prefer, and keep >> devm_of_platform_populate() in probe. > > The point of devm_* is that you don't have to call depopulate. > > It happens automatically once this driver is unbound. Ok, so to clarify, keeping devm_ here may be a bit racy: of_platform_depopulate will happen after dma has been released (there is no devm_ variant to release dma). Only way to prevent race condition here, is to enforce of_platform_depopulate() is called before dma release (e.g. in reverse order compared to probe). Do you wish I add a comment about it ? Best Regards, Fabrice >