@@ -119,6 +119,7 @@ MODULE_PARM_DESC(polling_limit_us,
119
119
*/
120
120
struct bcm2835_spi {
121
121
void __iomem * regs ;
122
+ phys_addr_t phys_addr ;
122
123
struct clk * clk ;
123
124
struct gpio_desc * cs_gpio ;
124
125
unsigned long clk_hz ;
@@ -891,19 +892,8 @@ static int bcm2835_dma_init(struct spi_controller *ctlr, struct device *dev,
891
892
struct bcm2835_spi * bs )
892
893
{
893
894
struct dma_slave_config slave_config ;
894
- const __be32 * addr ;
895
- dma_addr_t dma_reg_base ;
896
895
int ret ;
897
896
898
- /* base address in dma-space */
899
- addr = of_get_address (ctlr -> dev .of_node , 0 , NULL , NULL );
900
- if (!addr ) {
901
- dev_err (dev , "could not get DMA-register address - not using dma mode\n" );
902
- /* Fall back to interrupt mode */
903
- return 0 ;
904
- }
905
- dma_reg_base = be32_to_cpup (addr );
906
-
907
897
/* get tx/rx dma */
908
898
ctlr -> dma_tx = dma_request_chan (dev , "tx" );
909
899
if (IS_ERR (ctlr -> dma_tx )) {
@@ -925,7 +915,7 @@ static int bcm2835_dma_init(struct spi_controller *ctlr, struct device *dev,
925
915
* or, in case of an RX-only transfer, cyclically copies from the zero
926
916
* page to the FIFO using a preallocated, reusable descriptor.
927
917
*/
928
- slave_config .dst_addr = ( u32 )( dma_reg_base + BCM2835_SPI_FIFO ) ;
918
+ slave_config .dst_addr = bs -> phys_addr + BCM2835_SPI_FIFO ;
929
919
slave_config .dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES ;
930
920
931
921
ret = dmaengine_slave_config (ctlr -> dma_tx , & slave_config );
@@ -964,9 +954,9 @@ static int bcm2835_dma_init(struct spi_controller *ctlr, struct device *dev,
964
954
* RX FIFO or, in case of a TX-only transfer, cyclically writes a
965
955
* precalculated value to the CS register to clear the RX FIFO.
966
956
*/
967
- slave_config .src_addr = ( u32 )( dma_reg_base + BCM2835_SPI_FIFO ) ;
957
+ slave_config .src_addr = bs -> phys_addr + BCM2835_SPI_FIFO ;
968
958
slave_config .src_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES ;
969
- slave_config .dst_addr = ( u32 )( dma_reg_base + BCM2835_SPI_CS ) ;
959
+ slave_config .dst_addr = bs -> phys_addr + BCM2835_SPI_CS ;
970
960
slave_config .dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES ;
971
961
972
962
ret = dmaengine_slave_config (ctlr -> dma_rx , & slave_config );
@@ -1346,6 +1336,7 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
1346
1336
{
1347
1337
struct spi_controller * ctlr ;
1348
1338
struct bcm2835_spi * bs ;
1339
+ struct resource * iomem ;
1349
1340
int err ;
1350
1341
1351
1342
ctlr = devm_spi_alloc_host (& pdev -> dev , sizeof (* bs ));
@@ -1369,10 +1360,11 @@ static int bcm2835_spi_probe(struct platform_device *pdev)
1369
1360
bs = spi_controller_get_devdata (ctlr );
1370
1361
bs -> ctlr = ctlr ;
1371
1362
1372
- bs -> regs = devm_platform_ioremap_resource (pdev , 0 );
1363
+ bs -> regs = devm_platform_get_and_ioremap_resource (pdev , 0 , & iomem );
1373
1364
if (IS_ERR (bs -> regs ))
1374
1365
return PTR_ERR (bs -> regs );
1375
1366
1367
+ bs -> phys_addr = iomem -> start ;
1376
1368
bs -> clk = devm_clk_get_enabled (& pdev -> dev , NULL );
1377
1369
if (IS_ERR (bs -> clk ))
1378
1370
return dev_err_probe (& pdev -> dev , PTR_ERR (bs -> clk ),
0 commit comments