From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754093AbdGXN40 (ORCPT ); Mon, 24 Jul 2017 09:56:26 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:36339 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753352AbdGXN4R (ORCPT ); Mon, 24 Jul 2017 09:56:17 -0400 From: Pierre Yves MORDRET To: Vinod Koul CC: Rob Herring , Mark Rutland , Maxime Coquelin , Alexandre TORGUE , Russell King , Dan Williams , "M'boumba Cedric Madianga" , Fabrice GASNIER , Herbert Xu , Fabien DESSENNE , Amelie DELAUNAY , "dmaengine@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v3 2/5] dmaengine: Add STM32 DMAMUX driver Thread-Topic: [PATCH v3 2/5] dmaengine: Add STM32 DMAMUX driver Thread-Index: AQHS9lJEsWaINqWfUEGtL1SBd5FJmqJfX72AgAObA4A= Date: Mon, 24 Jul 2017 13:55:10 +0000 Message-ID: <2b916330-9b65-f4d5-817f-79b66cc236b3@st.com> References: <1499343623-5964-1-git-send-email-pierre-yves.mordret@st.com> <1499343623-5964-3-git-send-email-pierre-yves.mordret@st.com> <20170722065133.GT3053@localhost> In-Reply-To: <20170722065133.GT3053@localhost> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.75.127.46] Content-Type: text/plain; charset="utf-8" Content-ID: <0F4A7EFD5F59A942A5E361513F54461D@st.com> MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-07-24_10:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by nfs id v6ODuW9a010940 On 07/22/2017 08:51 AM, Vinod Koul wrote: > On Thu, Jul 06, 2017 at 02:20:20PM +0200, Pierre-Yves MORDRET wrote: >> +static int stm32_dmamux_probe(struct platform_device *pdev) >> +{ >> + struct device_node *node = pdev->dev.of_node; >> + struct device_node *dma_node; >> + struct stm32_dmamux_data *stm32_dmamux; >> + struct resource *res; >> + void __iomem *iomem; >> + int i, ret; >> + >> + if (!node) >> + return -ENODEV; >> + >> + stm32_dmamux = devm_kzalloc(&pdev->dev, sizeof(*stm32_dmamux), >> + GFP_KERNEL); >> + if (!stm32_dmamux) >> + return -ENOMEM; >> + >> + dma_node = of_parse_phandle(node, "dma-masters", 0); >> + if (!dma_node) { >> + dev_err(&pdev->dev, "Can't get DMA master node\n"); >> + return -ENODEV; >> + } >> + >> + if (device_property_read_u32(&pdev->dev, "dma-channels", >> + &stm32_dmamux->dmamux_channels)) >> + stm32_dmamux->dmamux_channels = STM32_DMAMUX_MAX_CHANNELS; >> + >> + if (device_property_read_u32(&pdev->dev, "dma-requests", >> + &stm32_dmamux->dmamux_requests)) >> + stm32_dmamux->dmamux_requests = STM32_DMAMUX_MAX_REQUESTS; > > I think defaults should be warned here too > ok >> + >> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >> + if (!res) >> + return -ENODEV; >> + >> + iomem = devm_ioremap_resource(&pdev->dev, res); >> + if (!iomem) >> + return -ENOMEM; >> + >> + spin_lock_init(&stm32_dmamux->lock); >> + >> + stm32_dmamux->clk = devm_clk_get(&pdev->dev, NULL); >> + if (IS_ERR(stm32_dmamux->clk)) { >> + dev_info(&pdev->dev, "Missing controller clock\n"); > > Can you check for EPROBE_DEFER and print only for if that is not the error > otherwise we end up sapmming with defered probe issues > This is what you meant ? if (IS_ERR(stm32_dmamux->clk) != EPROBE_DEFER) { dev_info(&pdev->dev, "Missing controller clock\n"); return PTR_ERR(stm32_dmamux->clk); } OR if (IS_ERR(stm32_dmamux->clk)) { if (IS_ERR(stm32_dmamux->clk) != EPROBE_DEFER) dev_info(&pdev->dev, "Missing controller clock\n"); return PTR_ERR(stm32_dmamux->clk); } >> + >> +#ifndef __DMA_STM32_DMAMUX_H >> +#define __DMA_STM32_DMAMUX_H >> + >> +#if defined(CONFIG_STM32_DMAMUX) >> +int stm32_dmamux_set_config(struct device *dev, void *route_data, u32 chan_id); > > Why do we need a custom API in this case? > This API is called by DMA when a slave is requested by client. DMA can work without DMAMUX this API has been put in place to configure DMAMUX whether client is requesting a DMAMUX Channel instead of a DMA one. Thanks Py From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pierre Yves MORDRET Subject: Re: [PATCH v3 2/5] dmaengine: Add STM32 DMAMUX driver Date: Mon, 24 Jul 2017 13:55:10 +0000 Message-ID: <2b916330-9b65-f4d5-817f-79b66cc236b3@st.com> References: <1499343623-5964-1-git-send-email-pierre-yves.mordret@st.com> <1499343623-5964-3-git-send-email-pierre-yves.mordret@st.com> <20170722065133.GT3053@localhost> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170722065133.GT3053@localhost> Content-Language: en-US Content-ID: <0F4A7EFD5F59A942A5E361513F54461D-qxv4g6HH51o@public.gmane.org> Sender: devicetree-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: Vinod Koul Cc: Rob Herring , Mark Rutland , Maxime Coquelin , Alexandre TORGUE , Russell King , Dan Williams , M'boumba Cedric Madianga , Fabrice GASNIER , Herbert Xu , Fabien DESSENNE , Amelie DELAUNAY , "dmaengine-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" , "linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org" , "linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org" List-Id: devicetree@vger.kernel.org DQoNCk9uIDA3LzIyLzIwMTcgMDg6NTEgQU0sIFZpbm9kIEtvdWwgd3JvdGU6DQo+IE9uIFRodSwg SnVsIDA2LCAyMDE3IGF0IDAyOjIwOjIwUE0gKzAyMDAsIFBpZXJyZS1ZdmVzIE1PUkRSRVQgd3Jv dGU6DQo+PiArc3RhdGljIGludCBzdG0zMl9kbWFtdXhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldikNCj4+ICt7DQo+PiArCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSA9IHBkZXYt PmRldi5vZl9ub2RlOw0KPj4gKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRtYV9ub2RlOw0KPj4gKwlz dHJ1Y3Qgc3RtMzJfZG1hbXV4X2RhdGEgKnN0bTMyX2RtYW11eDsNCj4+ICsJc3RydWN0IHJlc291 cmNlICpyZXM7DQo+PiArCXZvaWQgX19pb21lbSAqaW9tZW07DQo+PiArCWludCBpLCByZXQ7DQo+ PiArDQo+PiArCWlmICghbm9kZSkNCj4+ICsJCXJldHVybiAtRU5PREVWOw0KPj4gKw0KPj4gKwlz dG0zMl9kbWFtdXggPSBkZXZtX2t6YWxsb2MoJnBkZXYtPmRldiwgc2l6ZW9mKCpzdG0zMl9kbWFt dXgpLA0KPj4gKwkJCQkgICAgR0ZQX0tFUk5FTCk7DQo+PiArCWlmICghc3RtMzJfZG1hbXV4KQ0K Pj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+PiArDQo+PiArCWRtYV9ub2RlID0gb2ZfcGFyc2VfcGhh bmRsZShub2RlLCAiZG1hLW1hc3RlcnMiLCAwKTsNCj4+ICsJaWYgKCFkbWFfbm9kZSkgew0KPj4g KwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IERNQSBtYXN0ZXIgbm9kZVxuIik7DQo+ PiArCQlyZXR1cm4gLUVOT0RFVjsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlpZiAoZGV2aWNlX3Byb3Bl cnR5X3JlYWRfdTMyKCZwZGV2LT5kZXYsICJkbWEtY2hhbm5lbHMiLA0KPj4gKwkJCQkgICAgICZz dG0zMl9kbWFtdXgtPmRtYW11eF9jaGFubmVscykpDQo+PiArCQlzdG0zMl9kbWFtdXgtPmRtYW11 eF9jaGFubmVscyA9IFNUTTMyX0RNQU1VWF9NQVhfQ0hBTk5FTFM7DQo+PiArDQo+PiArCWlmIChk ZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoJnBkZXYtPmRldiwgImRtYS1yZXF1ZXN0cyIsDQo+PiAr CQkJCSAgICAgJnN0bTMyX2RtYW11eC0+ZG1hbXV4X3JlcXVlc3RzKSkNCj4+ICsJCXN0bTMyX2Rt YW11eC0+ZG1hbXV4X3JlcXVlc3RzID0gU1RNMzJfRE1BTVVYX01BWF9SRVFVRVNUUzsNCj4gDQo+ IEkgdGhpbmsgZGVmYXVsdHMgc2hvdWxkIGJlIHdhcm5lZCBoZXJlIHRvbw0KPiANCg0Kb2sNCg0K Pj4gKw0KPj4gKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9N RU0sIDApOw0KPj4gKwlpZiAoIXJlcykNCj4+ICsJCXJldHVybiAtRU5PREVWOw0KPj4gKw0KPj4g Kwlpb21lbSA9IGRldm1faW9yZW1hcF9yZXNvdXJjZSgmcGRldi0+ZGV2LCByZXMpOw0KPj4gKwlp ZiAoIWlvbWVtKQ0KPj4gKwkJcmV0dXJuIC1FTk9NRU07DQo+PiArDQo+PiArCXNwaW5fbG9ja19p bml0KCZzdG0zMl9kbWFtdXgtPmxvY2spOw0KPj4gKw0KPj4gKwlzdG0zMl9kbWFtdXgtPmNsayA9 IGRldm1fY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsNCj4+ICsJaWYgKElTX0VSUihzdG0zMl9k bWFtdXgtPmNsaykpIHsNCj4+ICsJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNaXNzaW5nIGNvbnRy b2xsZXIgY2xvY2tcbiIpOw0KPiANCj4gQ2FuIHlvdSBjaGVjayBmb3IgRVBST0JFX0RFRkVSIGFu ZCBwcmludCBvbmx5IGZvciBpZiB0aGF0IGlzIG5vdCB0aGUgZXJyb3INCj4gb3RoZXJ3aXNlIHdl IGVuZCB1cCBzYXBtbWluZyB3aXRoIGRlZmVyZWQgcHJvYmUgaXNzdWVzDQo+IA0KDQpUaGlzIGlz IHdoYXQgeW91IG1lYW50ID8NCglpZiAoSVNfRVJSKHN0bTMyX2RtYW11eC0+Y2xrKSAhPSBFUFJP QkVfREVGRVIpIHsNCgkJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1pc3NpbmcgY29udHJvbGxlciBj bG9ja1xuIik7DQoJCXJldHVybiBQVFJfRVJSKHN0bTMyX2RtYW11eC0+Y2xrKTsNCgl9DQoNCk9S DQoNCglpZiAoSVNfRVJSKHN0bTMyX2RtYW11eC0+Y2xrKSkgew0KCQlpZiAoSVNfRVJSKHN0bTMy X2RtYW11eC0+Y2xrKSAhPSBFUFJPQkVfREVGRVIpDQoJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAi TWlzc2luZyBjb250cm9sbGVyIGNsb2NrXG4iKTsNCgkJcmV0dXJuIFBUUl9FUlIoc3RtMzJfZG1h bXV4LT5jbGspOw0KCX0NCg0KPj4gKw0KPj4gKyNpZm5kZWYgX19ETUFfU1RNMzJfRE1BTVVYX0gN Cj4+ICsjZGVmaW5lIF9fRE1BX1NUTTMyX0RNQU1VWF9IDQo+PiArDQo+PiArI2lmIGRlZmluZWQo Q09ORklHX1NUTTMyX0RNQU1VWCkNCj4+ICtpbnQgc3RtMzJfZG1hbXV4X3NldF9jb25maWcoc3Ry dWN0IGRldmljZSAqZGV2LCB2b2lkICpyb3V0ZV9kYXRhLCB1MzIgY2hhbl9pZCk7DQo+IA0KPiBX aHkgZG8gd2UgbmVlZCBhIGN1c3RvbSBBUEkgaW4gdGhpcyBjYXNlPw0KPiANCg0KVGhpcyBBUEkg aXMgY2FsbGVkIGJ5IERNQSB3aGVuIGEgc2xhdmUgaXMgcmVxdWVzdGVkIGJ5IGNsaWVudC4gRE1B IGNhbiB3b3JrDQp3aXRob3V0IERNQU1VWCB0aGlzIEFQSSBoYXMgYmVlbiBwdXQgaW4gcGxhY2Ug dG8gY29uZmlndXJlIERNQU1VWCB3aGV0aGVyIGNsaWVudA0KaXMgcmVxdWVzdGluZyBhIERNQU1V WCBDaGFubmVsIGluc3RlYWQgb2YgYSBETUEgb25lLg0KDQpUaGFua3MNClB5 -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 From: pierre-yves.mordret@st.com (Pierre Yves MORDRET) Date: Mon, 24 Jul 2017 13:55:10 +0000 Subject: [PATCH v3 2/5] dmaengine: Add STM32 DMAMUX driver In-Reply-To: <20170722065133.GT3053@localhost> References: <1499343623-5964-1-git-send-email-pierre-yves.mordret@st.com> <1499343623-5964-3-git-send-email-pierre-yves.mordret@st.com> <20170722065133.GT3053@localhost> Message-ID: <2b916330-9b65-f4d5-817f-79b66cc236b3@st.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 07/22/2017 08:51 AM, Vinod Koul wrote: > On Thu, Jul 06, 2017 at 02:20:20PM +0200, Pierre-Yves MORDRET wrote: >> +static int stm32_dmamux_probe(struct platform_device *pdev) >> +{ >> + struct device_node *node = pdev->dev.of_node; >> + struct device_node *dma_node; >> + struct stm32_dmamux_data *stm32_dmamux; >> + struct resource *res; >> + void __iomem *iomem; >> + int i, ret; >> + >> + if (!node) >> + return -ENODEV; >> + >> + stm32_dmamux = devm_kzalloc(&pdev->dev, sizeof(*stm32_dmamux), >> + GFP_KERNEL); >> + if (!stm32_dmamux) >> + return -ENOMEM; >> + >> + dma_node = of_parse_phandle(node, "dma-masters", 0); >> + if (!dma_node) { >> + dev_err(&pdev->dev, "Can't get DMA master node\n"); >> + return -ENODEV; >> + } >> + >> + if (device_property_read_u32(&pdev->dev, "dma-channels", >> + &stm32_dmamux->dmamux_channels)) >> + stm32_dmamux->dmamux_channels = STM32_DMAMUX_MAX_CHANNELS; >> + >> + if (device_property_read_u32(&pdev->dev, "dma-requests", >> + &stm32_dmamux->dmamux_requests)) >> + stm32_dmamux->dmamux_requests = STM32_DMAMUX_MAX_REQUESTS; > > I think defaults should be warned here too > ok >> + >> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); >> + if (!res) >> + return -ENODEV; >> + >> + iomem = devm_ioremap_resource(&pdev->dev, res); >> + if (!iomem) >> + return -ENOMEM; >> + >> + spin_lock_init(&stm32_dmamux->lock); >> + >> + stm32_dmamux->clk = devm_clk_get(&pdev->dev, NULL); >> + if (IS_ERR(stm32_dmamux->clk)) { >> + dev_info(&pdev->dev, "Missing controller clock\n"); > > Can you check for EPROBE_DEFER and print only for if that is not the error > otherwise we end up sapmming with defered probe issues > This is what you meant ? if (IS_ERR(stm32_dmamux->clk) != EPROBE_DEFER) { dev_info(&pdev->dev, "Missing controller clock\n"); return PTR_ERR(stm32_dmamux->clk); } OR if (IS_ERR(stm32_dmamux->clk)) { if (IS_ERR(stm32_dmamux->clk) != EPROBE_DEFER) dev_info(&pdev->dev, "Missing controller clock\n"); return PTR_ERR(stm32_dmamux->clk); } >> + >> +#ifndef __DMA_STM32_DMAMUX_H >> +#define __DMA_STM32_DMAMUX_H >> + >> +#if defined(CONFIG_STM32_DMAMUX) >> +int stm32_dmamux_set_config(struct device *dev, void *route_data, u32 chan_id); > > Why do we need a custom API in this case? > This API is called by DMA when a slave is requested by client. DMA can work without DMAMUX this API has been put in place to configure DMAMUX whether client is requesting a DMAMUX Channel instead of a DMA one. Thanks Py