Merge remote-tracking branches 'spi/fix/atmel', 'spi/fix/bcm63xx', 'spi/fix/doc', 'spi/fix/fsl-dspi' and 'spi/fix/ti-qspi' into spi-linus
This commit is contained in:
commit
20e5c748d9
|
@ -457,6 +457,7 @@ config SPI_OMAP24XX
|
|||
|
||||
config SPI_TI_QSPI
|
||||
tristate "DRA7xxx QSPI controller support"
|
||||
depends on HAS_DMA
|
||||
depends on ARCH_OMAP2PLUS || COMPILE_TEST
|
||||
help
|
||||
QSPI master controller for DRA7xxx used for flash devices.
|
||||
|
|
|
@ -269,6 +269,7 @@ struct atmel_spi_caps {
|
|||
bool is_spi2;
|
||||
bool has_wdrbt;
|
||||
bool has_dma_support;
|
||||
bool has_pdc_support;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -1426,7 +1427,28 @@ static void atmel_get_caps(struct atmel_spi *as)
|
|||
|
||||
as->caps.is_spi2 = version > 0x121;
|
||||
as->caps.has_wdrbt = version >= 0x210;
|
||||
#ifdef CONFIG_SOC_SAM_V4_V5
|
||||
/*
|
||||
* Atmel SoCs based on ARM9 (SAM9x) cores should not use spi_map_buf()
|
||||
* since this later function tries to map buffers with dma_map_sg()
|
||||
* even if they have not been allocated inside DMA-safe areas.
|
||||
* On SoCs based on Cortex A5 (SAMA5Dx), it works anyway because for
|
||||
* those ARM cores, the data cache follows the PIPT model.
|
||||
* Also the L2 cache controller of SAMA5D2 uses the PIPT model too.
|
||||
* In case of PIPT caches, there cannot be cache aliases.
|
||||
* However on ARM9 cores, the data cache follows the VIVT model, hence
|
||||
* the cache aliases issue can occur when buffers are allocated from
|
||||
* DMA-unsafe areas, by vmalloc() for instance, where cache coherency is
|
||||
* not taken into account or at least not handled completely (cache
|
||||
* lines of aliases are not invalidated).
|
||||
* This is not a theorical issue: it was reproduced when trying to mount
|
||||
* a UBI file-system on a at91sam9g35ek board.
|
||||
*/
|
||||
as->caps.has_dma_support = false;
|
||||
#else
|
||||
as->caps.has_dma_support = version >= 0x212;
|
||||
#endif
|
||||
as->caps.has_pdc_support = version < 0x212;
|
||||
}
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
@ -1567,7 +1589,7 @@ static int atmel_spi_probe(struct platform_device *pdev)
|
|||
} else if (ret == -EPROBE_DEFER) {
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
} else if (as->caps.has_pdc_support) {
|
||||
as->use_pdc = true;
|
||||
}
|
||||
|
||||
|
|
|
@ -484,6 +484,7 @@ static const struct of_device_id bcm63xx_hsspi_of_match[] = {
|
|||
{ .compatible = "brcm,bcm6328-hsspi", },
|
||||
{ },
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, bcm63xx_hsspi_of_match);
|
||||
|
||||
static struct platform_driver bcm63xx_hsspi_driver = {
|
||||
.driver = {
|
||||
|
|
|
@ -1032,7 +1032,8 @@ static int dspi_probe(struct platform_device *pdev)
|
|||
goto out_master_put;
|
||||
|
||||
if (dspi->devtype_data->trans_mode == DSPI_DMA_MODE) {
|
||||
if (dspi_request_dma(dspi, res->start)) {
|
||||
ret = dspi_request_dma(dspi, res->start);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "can't get dma channels\n");
|
||||
goto out_clk_put;
|
||||
}
|
||||
|
|
|
@ -2021,7 +2021,7 @@ static void devm_spi_unregister(struct device *dev, void *res)
|
|||
}
|
||||
|
||||
/**
|
||||
* dev_spi_register_master - register managed SPI master controller
|
||||
* devm_spi_register_master - register managed SPI master controller
|
||||
* @dev: device managing SPI master
|
||||
* @master: initialized master, originally from spi_alloc_master()
|
||||
* Context: can sleep
|
||||
|
|
Loading…
Reference in New Issue