Message ID | 20200508132943.9826-14-Sergey.Semin@baikalelectronics.ru (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | spi: dw: Add generic DW DMA controller support | expand |
On Fri, May 08, 2020 at 04:29:38PM +0300, Serge Semin wrote: > This field is used only for the DW SPI DMA code initialization, that's > why there were no problems with it being uninitialized in Dw SPI MMIO > driver. Since in a further patch we are going to introduce the DW SPI DMA > support in the MMIO version of the driver, lets set the field with the > physical address of the DW SPI controller registers region. ... > - dws->regs = devm_platform_ioremap_resource(pdev, 0); > + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > + dws->regs = devm_ioremap_resource(&pdev->dev, mem); There is a helper dws->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &mem); > if (IS_ERR(dws->regs)) { > dev_err(&pdev->dev, "SPI region map failed\n"); > return PTR_ERR(dws->regs); > } > + dws->paddr = mem->start; > > dws->irq = platform_get_irq(pdev, 0); > if (dws->irq < 0) > -- > 2.25.1 >
On Fri, May 08, 2020 at 10:21:44PM +0300, Andy Shevchenko wrote: > On Fri, May 08, 2020 at 04:29:38PM +0300, Serge Semin wrote: > > This field is used only for the DW SPI DMA code initialization, that's > > why there were no problems with it being uninitialized in Dw SPI MMIO > > driver. Since in a further patch we are going to introduce the DW SPI DMA > > support in the MMIO version of the driver, lets set the field with the > > physical address of the DW SPI controller registers region. > > ... > > > - dws->regs = devm_platform_ioremap_resource(pdev, 0); > > + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); > > + dws->regs = devm_ioremap_resource(&pdev->dev, mem); > > There is a helper > dws->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &mem); Oh, good point. It has been just added, in kernel v5.7. v5.6 didn't provide such a convenient helper. Thanks for the suggestion. -Sergey > > > > if (IS_ERR(dws->regs)) { > > dev_err(&pdev->dev, "SPI region map failed\n"); > > return PTR_ERR(dws->regs); > > } > > + dws->paddr = mem->start; > > > > dws->irq = platform_get_irq(pdev, 0); > > if (dws->irq < 0) > > -- > > 2.25.1 > > > > -- > With Best Regards, > Andy Shevchenko > >
diff --git a/drivers/spi/spi-dw-mmio.c b/drivers/spi/spi-dw-mmio.c index 384a3ab6dc2d..2ff1b700305f 100644 --- a/drivers/spi/spi-dw-mmio.c +++ b/drivers/spi/spi-dw-mmio.c @@ -136,6 +136,7 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) int (*init_func)(struct platform_device *pdev, struct dw_spi_mmio *dwsmmio); struct dw_spi_mmio *dwsmmio; + struct resource *mem; struct dw_spi *dws; int ret; int num_cs; @@ -148,11 +149,13 @@ static int dw_spi_mmio_probe(struct platform_device *pdev) dws = &dwsmmio->dws; /* Get basic io resource and map it */ - dws->regs = devm_platform_ioremap_resource(pdev, 0); + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0); + dws->regs = devm_ioremap_resource(&pdev->dev, mem); if (IS_ERR(dws->regs)) { dev_err(&pdev->dev, "SPI region map failed\n"); return PTR_ERR(dws->regs); } + dws->paddr = mem->start; dws->irq = platform_get_irq(pdev, 0); if (dws->irq < 0)