Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'spi-fix-v5.9-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi

Pull spi fixes from Mark Brown:
"A small collection of driver specific fixes, the fsl-espi and bcm-qspi
changes in particular have been causing breakage for users"

* tag 'spi-fix-v5.9-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi:
spi: bcm-qspi: Fix probe regression on iProc platforms
spi: fsl-dspi: fix use-after-free in remove path
spi: fsl-espi: Only process interrupts for expected events
spi: bcm2835: Make polling_limit_us static
spi: spi-fsl-dspi: use XSPI mode instead of DMA for DPAA2 SoCs

+15 -12
+1 -1
drivers/spi/spi-bcm-qspi.c
··· 1295 1295 }, 1296 1296 { 1297 1297 .compatible = "brcm,spi-bcm-qspi", 1298 - .data = &bcm_qspi_rev_data, 1298 + .data = &bcm_qspi_no_rev_data, 1299 1299 }, 1300 1300 { 1301 1301 .compatible = "brcm,spi-bcm7216-qspi",
+1 -1
drivers/spi/spi-bcm2835.c
··· 75 75 #define DRV_NAME "spi-bcm2835" 76 76 77 77 /* define polling limits */ 78 - unsigned int polling_limit_us = 30; 78 + static unsigned int polling_limit_us = 30; 79 79 module_param(polling_limit_us, uint, 0664); 80 80 MODULE_PARM_DESC(polling_limit_us, 81 81 "time in us to run a transfer in polling mode\n");
+10 -8
drivers/spi/spi-fsl-dspi.c
··· 174 174 .fifo_size = 16, 175 175 }, 176 176 [LS2080A] = { 177 - .trans_mode = DSPI_DMA_MODE, 177 + .trans_mode = DSPI_XSPI_MODE, 178 178 .max_clock_factor = 8, 179 179 .fifo_size = 4, 180 180 }, 181 181 [LS2085A] = { 182 - .trans_mode = DSPI_DMA_MODE, 182 + .trans_mode = DSPI_XSPI_MODE, 183 183 .max_clock_factor = 8, 184 184 .fifo_size = 4, 185 185 }, 186 186 [LX2160A] = { 187 - .trans_mode = DSPI_DMA_MODE, 187 + .trans_mode = DSPI_XSPI_MODE, 188 188 .max_clock_factor = 8, 189 189 .fifo_size = 4, 190 190 }, ··· 1273 1273 void __iomem *base; 1274 1274 bool big_endian; 1275 1275 1276 - ctlr = spi_alloc_master(&pdev->dev, sizeof(struct fsl_dspi)); 1276 + dspi = devm_kzalloc(&pdev->dev, sizeof(*dspi), GFP_KERNEL); 1277 + if (!dspi) 1278 + return -ENOMEM; 1279 + 1280 + ctlr = spi_alloc_master(&pdev->dev, 0); 1277 1281 if (!ctlr) 1278 1282 return -ENOMEM; 1279 1283 1280 - dspi = spi_controller_get_devdata(ctlr); 1281 1284 dspi->pdev = pdev; 1282 1285 dspi->ctlr = ctlr; 1283 1286 ··· 1417 1414 if (dspi->devtype_data->trans_mode != DSPI_DMA_MODE) 1418 1415 ctlr->ptp_sts_supported = true; 1419 1416 1420 - platform_set_drvdata(pdev, ctlr); 1417 + platform_set_drvdata(pdev, dspi); 1421 1418 1422 1419 ret = spi_register_controller(ctlr); 1423 1420 if (ret != 0) { ··· 1440 1437 1441 1438 static int dspi_remove(struct platform_device *pdev) 1442 1439 { 1443 - struct spi_controller *ctlr = platform_get_drvdata(pdev); 1444 - struct fsl_dspi *dspi = spi_controller_get_devdata(ctlr); 1440 + struct fsl_dspi *dspi = platform_get_drvdata(pdev); 1445 1441 1446 1442 /* Disconnect from the SPI framework */ 1447 1443 spi_unregister_controller(dspi->ctlr);
+3 -2
drivers/spi/spi-fsl-espi.c
··· 564 564 static irqreturn_t fsl_espi_irq(s32 irq, void *context_data) 565 565 { 566 566 struct fsl_espi *espi = context_data; 567 - u32 events; 567 + u32 events, mask; 568 568 569 569 spin_lock(&espi->lock); 570 570 571 571 /* Get interrupt events(tx/rx) */ 572 572 events = fsl_espi_read_reg(espi, ESPI_SPIE); 573 - if (!events) { 573 + mask = fsl_espi_read_reg(espi, ESPI_SPIM); 574 + if (!(events & mask)) { 574 575 spin_unlock(&espi->lock); 575 576 return IRQ_NONE; 576 577 }