From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Ujfalusi Subject: Re: [PATCH] mmc: core: Lower max_seg_size if too high for DMA Date: Mon, 12 Nov 2018 18:48:30 +0200 Message-ID: <2099ae8d-ef53-ac6f-a25d-c1e1acc0d5f4@ti.com> References: <20181031155738.18367-1-tony@atomide.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181031155738.18367-1-tony@atomide.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Tony Lindgren , Ulf Hansson Cc: Russell King , linux-omap@vger.kernel.org, linux-mmc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Kishon Vijay Abraham I List-Id: linux-mmc@vger.kernel.org VG9ueSwKCk9uIDIwMTgtMTAtMzEgMTc6NTcsIFRvbnkgTGluZGdyZW4gd3JvdGU6Cj4gV2l0aCBD T05GSUdfRE1BX0FQSV9ERUJVR19TRyBhIGRldmljZSBtYXkgcHJvZHVjZSB0aGUgZm9sbG93aW5n IHdhcm5pbmc6Cj4gCj4gIkRNQS1BUEk6IG1hcHBpbmcgc2cgc2VnbWVudCBsb25nZXIgdGhhbiBk ZXZpY2UgY2xhaW1zIHRvIHN1cHBvcnQiCj4gCj4gV2UgZGVmYXVsdCB0byA2NEtpQiBpZiBhIERN QSBlbmdpbmUgZHJpdmVyIGRvZXMgbm90IGluaXRpYWxpemUgZG1hX3Bhcm1zCj4gYW5kIGNhbGwg ZG1hX3NldF9tYXhfc2VnX3NpemUoKS4gVGhpcyBtYXkgYmUgbG93ZXIgdGhhdCB3aGF0IG1hbnkg TU1DCj4gZHJpdmVycyBkbyB3aXRoIG1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfYmxrX3Np emUgKiBtbWMtPm1heF9ibGtfY291bnQuCj4gCj4gTGV0J3MgZG8gYSBzYW5pdHkgY2hlY2sgZm9y IG1heF9zZWdfc2l6ZSBiZWluZyBoaWdoZXIgdGhhbiB3aGF0IERNQQo+IHN1cHBvcnRzIGluIG1t Y19hZGRfaG9zdCgpIGFuZCBsb3dlciBpdCBhcyBuZWVkZWQuCgpJIHRyaWVkIHRvIGFkZHJlc3Mg aXQgd2l0aDoKCmh0dHBzOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcGF0Y2gvOTk0ODk2Ny8KaHR0 cHM6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wYXRjaC85OTQ4OTg5LwpodHRwczovL3BhdGNod29y ay5rZXJuZWwub3JnL3BhdGNoLzk5NDg5NzUvCgpidXQgaXQgaXMgYmFjayBpbiB0aGUgZHJhd2lu ZyBib2FyZCBmb3Igbm93LgoKVGhlIHByb2JsZW0gaXMgdGhhdCB3aXRoIGVETUEvU0RNQSB0aGUg c2l6ZSBsaW1pdCBpcyBub3QgYnl0ZXMsIGJ1dCB0aGUKbnVtYmVyIG9mIGJ1cnN0cy4gRGlmZmVy ZW50IGFkZHJfd2lkdGggYW5kIGJ1cnN0IGNvbWJpbmF0aW9uIHdvdWxkCnJlc3VsdCBkaWZmZXJl bnQgbWF4X3NlZ19zaXplIGFuZCBJIGNhbiBub3QgZ3Vlc3MgYmVmb3JlIHRoZSB1c2VyCnByb3Zp ZGUgdGhlICBkbWFfc2xhdmVfY29uZmlnIHZpYSBkbWFlbmdpbmVfc2xhdmVfY29uZmlnKCkuCgpJ IGhhdmUgZXhwZXJpbWVudGFsIHBhdGNoZXMgdG8gbW9kaWZ5IHRoZSBtYXhfc2VnX3NpemUgb2Yg dGhlIF9jaGFubmVsXwpwcm9hY3RpdmVseSBpbiByZXNwb25zZSBzbGF2ZV9jb25maWcgYW5kIHRo ZW4gd2Ugc2hvdWxkIGhhdmUgYW4gQVBJIHRvCnF1ZXJ5IGl0IGZyb20gdGhlIERNQSBfY2hhbm5l bF8sIG5vdCBmcm9tIHRoZSBETUEgZGV2aWNlIGFzIGVhY2ggY2hhbm5lbApjYW4gaGF2ZSBkaWZm ZXJlbnQgbGltaXQgb24gdGhlIG1heF9zZWdfc2l6ZS4KCj4gCj4gQ2M6IEtpc2hvbiBWaWpheSBB YnJhaGFtIEkgPGtpc2hvbkB0aS5jb20+Cj4gQ2M6IFBldGVyIFVqZmFsdXNpIDxwZXRlci51amZh bHVzaUB0aS5jb20+Cj4gQ2M6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcu dWs+Cj4gUmVwb3J0ZWQtYnk6IFJ1c3NlbGwgS2luZyA8cm1rK2tlcm5lbEBhcm1saW51eC5vcmcu dWs+Cj4gU2lnbmVkLW9mZi1ieTogVG9ueSBMaW5kZ3JlbiA8dG9ueUBhdG9taWRlLmNvbT4KClJl dmlld2VkLWJ5OiBQZXRlciBVamZhbHVzaSA8cGV0ZXIudWpmYWx1c2lAdGkuY29tPgoKPiAtLS0K PiAgZHJpdmVycy9tbWMvY29yZS9ob3N0LmMgfCAxNiArKysrKysrKysrKysrKysrCj4gIDEgZmls ZSBjaGFuZ2VkLCAxNiBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1j L2NvcmUvaG9zdC5jIGIvZHJpdmVycy9tbWMvY29yZS9ob3N0LmMKPiAtLS0gYS9kcml2ZXJzL21t Yy9jb3JlL2hvc3QuYwo+ICsrKyBiL2RyaXZlcnMvbW1jL2NvcmUvaG9zdC5jCj4gQEAgLTEzLDYg KzEzLDcgQEAKPiAgICovCj4gIAo+ICAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgo+ICAjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gICNp bmNsdWRlIDxsaW51eC9pZHIuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29mLmg+Cj4gQEAgLTQxNSw2 ICs0MTYsMTkgQEAgc3RydWN0IG1tY19ob3N0ICptbWNfYWxsb2NfaG9zdChpbnQgZXh0cmEsIHN0 cnVjdCBkZXZpY2UgKmRldikKPiAgCj4gIEVYUE9SVF9TWU1CT0wobW1jX2FsbG9jX2hvc3QpOwo+ ICAKPiArc3RhdGljIHZvaWQgbW1jX2NoZWNrX21heF9zZWdfc2l6ZShzdHJ1Y3QgbW1jX2hvc3Qg Kmhvc3QpCj4gK3sKPiArCXVuc2lnbmVkIGludCBtYXhfc2VnX3NpemUgPSBkbWFfZ2V0X21heF9z ZWdfc2l6ZShtbWNfZGV2KGhvc3QpKTsKPiArCj4gKwlpZiAoaG9zdC0+bWF4X3NlZ19zaXplIDw9 IG1heF9zZWdfc2l6ZSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJZGV2X2luZm8obW1jX2Rldihob3N0 KSwgIkxvd2VyaW5nIG1heF9zZWdfc2l6ZSBmb3IgRE1BOiAldSB2cyAldVxuIiwKPiArCQkgaG9z dC0+bWF4X3NlZ19zaXplLCBtYXhfc2VnX3NpemUpOwo+ICsKPiArCWhvc3QtPm1heF9zZWdfc2l6 ZSA9IG1heF9zZWdfc2l6ZTsKPiArfQo+ICsKPiAgLyoqCj4gICAqCW1tY19hZGRfaG9zdCAtIGlu aXRpYWxpc2UgaG9zdCBoYXJkd2FyZQo+ICAgKglAaG9zdDogbW1jIGhvc3QKPiBAQCAtNDMwLDYg KzQ0NCw4IEBAIGludCBtbWNfYWRkX2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0KQo+ICAJV0FS Tl9PTigoaG9zdC0+Y2FwcyAmIE1NQ19DQVBfU0RJT19JUlEpICYmCj4gIAkJIWhvc3QtPm9wcy0+ ZW5hYmxlX3NkaW9faXJxKTsKPiAgCj4gKwltbWNfY2hlY2tfbWF4X3NlZ19zaXplKGhvc3QpOwo+ ICsKPiAgCWVyciA9IGRldmljZV9hZGQoJmhvc3QtPmNsYXNzX2Rldik7Cj4gIAlpZiAoZXJyKQo+ ICAJCXJldHVybiBlcnI7Cj4gCgotIFDDqXRlcgoKVGV4YXMgSW5zdHJ1bWVudHMgRmlubGFuZCBP eSwgUG9ya2thbGFua2F0dSAyMiwgMDAxODAgSGVsc2lua2kuClktdHVubnVzL0J1c2luZXNzIElE OiAwNjE1NTIxLTQuIEtvdGlwYWlra2EvRG9taWNpbGU6IEhlbHNpbmtpCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxp bmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3Rz LmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: peter.ujfalusi@ti.com (Peter Ujfalusi) Date: Mon, 12 Nov 2018 18:48:30 +0200 Subject: [PATCH] mmc: core: Lower max_seg_size if too high for DMA In-Reply-To: <20181031155738.18367-1-tony@atomide.com> References: <20181031155738.18367-1-tony@atomide.com> Message-ID: <2099ae8d-ef53-ac6f-a25d-c1e1acc0d5f4@ti.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Tony, On 2018-10-31 17:57, Tony Lindgren wrote: > With CONFIG_DMA_API_DEBUG_SG a device may produce the following warning: > > "DMA-API: mapping sg segment longer than device claims to support" > > We default to 64KiB if a DMA engine driver does not initialize dma_parms > and call dma_set_max_seg_size(). This may be lower that what many MMC > drivers do with mmc->max_seg_size = mmc->max_blk_size * mmc->max_blk_count. > > Let's do a sanity check for max_seg_size being higher than what DMA > supports in mmc_add_host() and lower it as needed. I tried to address it with: https://patchwork.kernel.org/patch/9948967/ https://patchwork.kernel.org/patch/9948989/ https://patchwork.kernel.org/patch/9948975/ but it is back in the drawing board for now. The problem is that with eDMA/SDMA the size limit is not bytes, but the number of bursts. Different addr_width and burst combination would result different max_seg_size and I can not guess before the user provide the dma_slave_config via dmaengine_slave_config(). I have experimental patches to modify the max_seg_size of the _channel_ proactively in response slave_config and then we should have an API to query it from the DMA _channel_, not from the DMA device as each channel can have different limit on the max_seg_size. > > Cc: Kishon Vijay Abraham I > Cc: Peter Ujfalusi > Cc: Russell King > Reported-by: Russell King > Signed-off-by: Tony Lindgren Reviewed-by: Peter Ujfalusi > --- > drivers/mmc/core/host.c | 16 ++++++++++++++++ > 1 file changed, 16 insertions(+) > > diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c > --- a/drivers/mmc/core/host.c > +++ b/drivers/mmc/core/host.c > @@ -13,6 +13,7 @@ > */ > > #include > +#include > #include > #include > #include > @@ -415,6 +416,19 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev) > > EXPORT_SYMBOL(mmc_alloc_host); > > +static void mmc_check_max_seg_size(struct mmc_host *host) > +{ > + unsigned int max_seg_size = dma_get_max_seg_size(mmc_dev(host)); > + > + if (host->max_seg_size <= max_seg_size) > + return; > + > + dev_info(mmc_dev(host), "Lowering max_seg_size for DMA: %u vs %u\n", > + host->max_seg_size, max_seg_size); > + > + host->max_seg_size = max_seg_size; > +} > + > /** > * mmc_add_host - initialise host hardware > * @host: mmc host > @@ -430,6 +444,8 @@ int mmc_add_host(struct mmc_host *host) > WARN_ON((host->caps & MMC_CAP_SDIO_IRQ) && > !host->ops->enable_sdio_irq); > > + mmc_check_max_seg_size(host); > + > err = device_add(&host->class_dev); > if (err) > return err; > - P?ter Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki. Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki