Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp2938526ybl; Fri, 20 Dec 2019 00:55:12 -0800 (PST) X-Google-Smtp-Source: APXvYqwY76xZI4g/wiQN5+3CLB2kxCIrSXXGsSYGg+OnFo2dxXsGAa5hEM4RxxM4PV3uk2hOn6r0 X-Received: by 2002:a9d:133:: with SMTP id 48mr13402759otu.15.1576832112265; Fri, 20 Dec 2019 00:55:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576832112; cv=none; d=google.com; s=arc-20160816; b=Zymn013zkBsvDlezrJATgSu3YEgj569HbI6SIqNTDFHXfZH/58Y8lsm3F7X5BtQgsY /IOHCyAjWv0kETXfTQCn6fECy6FjtYbTahsz5HNDfoJtvGLsGfqzvRC4a2o17LoymCYS 94HwwaGeOONICDHR5mwgwOWvfaLKyYN/LSGekzQyLkTl6zJcYbBc7JwQx3u9LQ5zQbnm 5/4t1IjNarJRJLWUQzW4ZceOf1pev1idCtaSDe46B1jyKYI8YYuXoZYcMt3uDmy7pKdQ yOQ8CEE0zdaXGZw+o0UQpaf1VM2aq1wX1CToqhEEVUSXLGYsU+XUk7jv8rNFovRUEsef h6wQ== 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:dkim-signature; bh=PcfeG+pEnfqZoplyh2mJwZoDJP91nvCA5+R9QZfb4uA=; b=Njdvq8yiUwHPsZ8wyHtlRMahEuB7ZAkSwbceHRKbir7Otxd5M7/jnuBwBeFTPmbg2Y jf0+gxt/52tTD5dz+SM7PFZyT3vMD73b/mt7JSPkFMezV7FG2YouNZFFG202Xkucavbf nbtuLUfrt6ladTLOUQiiDldUdSqQFw7f8RA+WHZkAn9nEouUsXCZwLNF81Yx3n+O1LFf 8asYSWAk+IBPl5dhtU4JkMdQBWHsQqjmpnqQ4YWMb+PoDsIOyGp7ksTISHA/YHLWPsG2 oK/W9nwWBj71eBwFNQS0w2mh7MDYwQqNvGY0RHFc9v0mDv1OqUTvGasqke9VIoxC9qp8 uvSQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=N1KquULS; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=st.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u130si4588973oif.94.2019.12.20.00.55.00; Fri, 20 Dec 2019 00:55:12 -0800 (PST) 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; dkim=pass header.i=@st.com header.s=STMicroelectronics header.b=N1KquULS; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=st.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727197AbfLTIyU (ORCPT + 99 others); Fri, 20 Dec 2019 03:54:20 -0500 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:58588 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727135AbfLTIyU (ORCPT ); Fri, 20 Dec 2019 03:54:20 -0500 Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx08-00178001.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id xBK8qWWY020203; Fri, 20 Dec 2019 09:54:03 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=st.com; h=subject : to : cc : references : from : message-id : date : mime-version : in-reply-to : content-type : content-transfer-encoding; s=STMicroelectronics; bh=PcfeG+pEnfqZoplyh2mJwZoDJP91nvCA5+R9QZfb4uA=; b=N1KquULSGmOYmnS1gNcYj7SIWIGei/ZPj5GLEQISsGjGE7+qTS7qDIoNKDMDr0wtsB65 XSBhmPVGWOkYTjcinSparSn/id3AjzTBcEB0jTn44rYhQX28YuplXJv23FUNQIFmReLH m3p5OMdeeXGXMJrt+xOfCBFxVE7oGCyiCh4C8akv3Kqs4TxGdN3MQm0HznNyGBr1eL2A dcWe/WQSRw0GvClEa+rAYSVngVfhC/br/PW/h/YUH1U0ObXcqibKC4Nko9uLpGGIavX0 rJAqk0GU90LTltDoki9mBywai1nMvuJCb9q2a9BZ1+v6XAmlKbIA6U37qmDGhtO9S27t IQ== Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2wvqgq5x7j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 20 Dec 2019 09:54:03 +0100 Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 1B709100034; Fri, 20 Dec 2019 09:54:03 +0100 (CET) Received: from Webmail-eu.st.com (sfhdag5node3.st.com [10.75.127.15]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 09494220841; Fri, 20 Dec 2019 09:54:03 +0100 (CET) Received: from [10.201.23.55] (10.75.127.46) by SFHDAG5NODE3.st.com (10.75.127.15) with Microsoft SMTP Server (TLS) id 15.0.1473.3; Fri, 20 Dec 2019 09:54:02 +0100 Subject: Re: [PATCH] mfd: stm32-timers: Use dma_request_chan() instead dma_request_slave_channel() To: Peter Ujfalusi , , , CC: , , , , Benjamin GAIGNARD References: <20191217105240.25648-1-peter.ujfalusi@ti.com> From: Fabrice Gasnier Message-ID: Date: Fri, 20 Dec 2019 09:54:01 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.9.0 MIME-Version: 1.0 In-Reply-To: <20191217105240.25648-1-peter.ujfalusi@ti.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.75.127.46] X-ClientProxiedBy: SFHDAG8NODE2.st.com (10.75.127.23) To SFHDAG5NODE3.st.com (10.75.127.15) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.95,18.0.572 definitions=2019-12-19_08:2019-12-17,2019-12-19 signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/17/19 11:52 AM, Peter Ujfalusi wrote: > dma_request_slave_channel() is a wrapper on top of dma_request_chan() > eating up the error code. > > By using dma_request_chan() directly the driver can support deferred > probing against DMA. > > Signed-off-by: Peter Ujfalusi > --- > drivers/mfd/stm32-timers.c | 31 ++++++++++++++++++++++--------- > 1 file changed, 22 insertions(+), 9 deletions(-) > > diff --git a/drivers/mfd/stm32-timers.c b/drivers/mfd/stm32-timers.c > index efcd4b980c94..34747e8a4a40 100644 > --- a/drivers/mfd/stm32-timers.c > +++ b/drivers/mfd/stm32-timers.c > @@ -167,10 +167,11 @@ static void stm32_timers_get_arr_size(struct stm32_timers *ddata) > regmap_write(ddata->regmap, TIM_ARR, 0x0); > } > > -static void stm32_timers_dma_probe(struct device *dev, > +static int stm32_timers_dma_probe(struct device *dev, > struct stm32_timers *ddata) > { > int i; > + int ret = 0; > char name[4]; > > init_completion(&ddata->dma.completion); > @@ -179,14 +180,22 @@ static void stm32_timers_dma_probe(struct device *dev, > /* Optional DMA support: get valid DMA channel(s) or NULL */ > for (i = STM32_TIMERS_DMA_CH1; i <= STM32_TIMERS_DMA_CH4; i++) { > snprintf(name, ARRAY_SIZE(name), "ch%1d", i + 1); > - ddata->dma.chans[i] = dma_request_slave_channel(dev, name); > + ddata->dma.chans[i] = dma_request_chan(dev, name); > } > - ddata->dma.chans[STM32_TIMERS_DMA_UP] = > - dma_request_slave_channel(dev, "up"); > - ddata->dma.chans[STM32_TIMERS_DMA_TRIG] = > - dma_request_slave_channel(dev, "trig"); > - ddata->dma.chans[STM32_TIMERS_DMA_COM] = > - dma_request_slave_channel(dev, "com"); > + ddata->dma.chans[STM32_TIMERS_DMA_UP] = dma_request_chan(dev, "up"); > + ddata->dma.chans[STM32_TIMERS_DMA_TRIG] = dma_request_chan(dev, "trig"); > + ddata->dma.chans[STM32_TIMERS_DMA_COM] = dma_request_chan(dev, "com"); > + > + for (i = STM32_TIMERS_DMA_CH1; i < STM32_TIMERS_MAX_DMAS; i++) { > + if (IS_ERR(ddata->dma.chans[i])) { > + if (PTR_ERR(ddata->dma.chans[i]) == -EPROBE_DEFER)> + ret = -EPROBE_DEFER; Hi Peter, Thanks for the patch, As the DMA is optional, I'd rather prefer to check explicitly there's no device, and return any other error case, basically: if (PTR_ERR(ddata->dma.chans[i]) != -ENODEV) return PTR_ERR(ddata->dma.chans[i]); > + > + ddata->dma.chans[i] = NULL; > + } > + } > + > + return ret; With that, return 0 here. > } > > static void stm32_timers_dma_remove(struct device *dev, > @@ -230,7 +239,11 @@ static int stm32_timers_probe(struct platform_device *pdev) > > stm32_timers_get_arr_size(ddata); > > - stm32_timers_dma_probe(dev, ddata); > + ret = stm32_timers_dma_probe(dev, ddata); > + if (ret) { > + stm32_timers_dma_remove(dev, ddata); With that, stm32_timers_dma_remove() likely need to be updated: - if (ddata->dma.chans[i]) + if (!IS_ERR_OR_NULL(ddata->dma.chans[i])) dma_release_channel(ddata->dma.chans[i]); Best regards, Fabrice > + return ret; > + } > > platform_set_drvdata(pdev, ddata); > >