Message ID | 20200422100954.31211-1-ulf.hansson@linaro.org (mailing list archive) |
---|---|
State | Mainlined |
Commit | 9495b7e92f716ab2bd6814fab5e97ab4a39adfdd |
Headers | show |
Series | [RESEND,v2,1/2] driver core: platform: Initialize dma_parms for platform devices | expand |
On Wed, Apr 22, 2020 at 12:09:54PM +0200, Ulf Hansson wrote: > It's currently the platform driver's responsibility to initialize the > pointer, dma_parms, for its corresponding struct device. The benefit with > this approach allows us to avoid the initialization and to not waste memory > for the struct device_dma_parameters, as this can be decided on a case by > case basis. > > However, it has turned out that this approach is not very practical. Not > only does it lead to open coding, but also to real errors. In principle > callers of dma_set_max_seg_size() doesn't check the error code, but just > assumes it succeeds. > > For these reasons, let's do the initialization from the common platform bus > at the device registration point. This also follows the way the PCI devices > are being managed, see pci_device_add(). > > Suggested-by: Christoph Hellwig <hch@lst.de> > Cc: <stable@vger.kernel.org> > Tested-by: Haibo Chen <haibo.chen@nxp.com> > Reviewed-by: Arnd Bergmann <arnd@arndb.de> > Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Looks good, Reviewed-by: Christoph Hellwig <hch@lst.de>
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 5255550b7c34..b27d0f6c18c9 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -380,6 +380,8 @@ struct platform_object { */ static void setup_pdev_dma_masks(struct platform_device *pdev) { + pdev->dev.dma_parms = &pdev->dma_parms; + if (!pdev->dev.coherent_dma_mask) pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32); if (!pdev->dev.dma_mask) { diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index bdc35753ef7c..77a2aada106d 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h @@ -25,6 +25,7 @@ struct platform_device { bool id_auto; struct device dev; u64 platform_dma_mask; + struct device_dma_parameters dma_parms; u32 num_resources; struct resource *resource;