From: Mark Brown Date: Thu, 12 Sep 2024 11:38:44 +0000 (+0100) Subject: spi: Merge up fixes X-Git-Tag: v6.12-rc1~189^2~1 X-Git-Url: https://repo.jachan.dev/linux.git/commitdiff_plain/f10d52087cbe85dcff2af3dc94c5b9d06e6d4b9a?hp=-c spi: Merge up fixes A patch for Qualcomm depends on some fixes. --- f10d52087cbe85dcff2af3dc94c5b9d06e6d4b9a diff --combined MAINTAINERS index bc5d242deb29,931838892e85..84c15f2f2a1b --- a/MAINTAINERS +++ b/MAINTAINERS @@@ -1202,13 -1202,6 +1202,13 @@@ W: https://ez.analog.com/linux-software F: Documentation/devicetree/bindings/iio/dac/adi,ad3552r.yaml F: drivers/iio/dac/ad3552r.c +ANALOG DEVICES INC AD4000 DRIVER +M: Marcelo Schmitt +L: linux-iio@vger.kernel.org +S: Supported +W: https://ez.analog.com/linux-software-drivers +F: Documentation/devicetree/bindings/iio/adc/adi,ad4000.yaml + ANALOG DEVICES INC AD4130 DRIVER M: Cosmin Tanislav L: linux-iio@vger.kernel.org @@@ -3511,7 -3504,9 +3511,9 @@@ S: Maintaine W: http://linux-atm.sourceforge.net F: drivers/atm/ F: include/linux/atm* + F: include/linux/sonet.h F: include/uapi/linux/atm* + F: include/uapi/linux/sonet.h ATMEL MACB ETHERNET DRIVER M: Nicolas Ferre @@@ -5313,7 -5308,7 +5315,7 @@@ F: drivers/media/cec/i2c/ch7322. CIRRUS LOGIC AUDIO CODEC DRIVERS M: David Rhodes M: Richard Fitzgerald - L: alsa-devel@alsa-project.org (moderated for non-subscribers) + L: linux-sound@vger.kernel.org L: patches@opensource.cirrus.com S: Maintained F: Documentation/devicetree/bindings/sound/cirrus,cs* @@@ -5382,7 -5377,7 +5384,7 @@@ F: sound/soc/codecs/lochnagar-sc. CIRRUS LOGIC MADERA CODEC DRIVERS M: Charles Keepax M: Richard Fitzgerald - L: alsa-devel@alsa-project.org (moderated for non-subscribers) + L: linux-sound@vger.kernel.org L: patches@opensource.cirrus.com S: Supported W: https://github.com/CirrusLogic/linux-drivers/wiki @@@ -8866,6 -8861,7 +8868,7 @@@ F: drivers/dma/fsldma. FREESCALE DSPI DRIVER M: Vladimir Oltean L: linux-spi@vger.kernel.org + L: imx@lists.linux.dev S: Maintained F: Documentation/devicetree/bindings/spi/fsl,dspi*.yaml F: drivers/spi/spi-fsl-dspi.c @@@ -8950,6 -8946,14 +8953,14 @@@ S: Maintaine F: Documentation/devicetree/bindings/i2c/i2c-imx-lpi2c.yaml F: drivers/i2c/busses/i2c-imx-lpi2c.c + FREESCALE IMX LPSPI DRIVER + M: Frank Li + L: linux-spi@vger.kernel.org + L: imx@lists.linux.dev + S: Maintained + F: Documentation/devicetree/bindings/spi/spi-fsl-lpspi.yaml + F: drivers/spi/spi-fsl-lpspi.c + FREESCALE MPC I2C DRIVER M: Chris Packham L: linux-i2c@vger.kernel.org @@@ -8986,6 -8990,7 +8997,7 @@@ F: include/linux/fsl/ptp_qoriq. FREESCALE QUAD SPI DRIVER M: Han Xu L: linux-spi@vger.kernel.org + L: imx@lists.linux.dev S: Maintained F: Documentation/devicetree/bindings/spi/fsl,spi-fsl-qspi.yaml F: drivers/spi/spi-fsl-qspi.c @@@ -10180,7 -10185,7 +10192,7 @@@ F: Documentation/devicetree/bindings/in F: drivers/infiniband/hw/hns/ HISILICON SAS Controller - M: Xiang Chen + M: Yihang Li S: Supported W: http://www.hisilicon.com F: Documentation/devicetree/bindings/scsi/hisilicon-sas.txt @@@ -12000,7 -12005,7 +12012,7 @@@ F: fs/jfs JME NETWORK DRIVER M: Guo-Fu Tseng L: netdev@vger.kernel.org - S: Maintained + S: Odd Fixes F: drivers/net/ethernet/jme.* JOURNALLING FLASH FILE SYSTEM V2 (JFFS2) @@@ -13331,14 -13336,16 +13343,16 @@@ F: Documentation/devicetree/bindings/i2 F: drivers/i2c/muxes/i2c-mux-ltc4306.c LTP (Linux Test Project) + M: Andrea Cervesato M: Cyril Hrubis M: Jan Stancek M: Petr Vorel M: Li Wang M: Yang Xu + M: Xiao Yang L: ltp@lists.linux.it (subscribers-only) S: Maintained - W: http://linux-test-project.github.io/ + W: https://linux-test-project.readthedocs.io/ T: git https://github.com/linux-test-project/ltp.git LTR390 AMBIENT/UV LIGHT SENSOR DRIVER @@@ -13546,7 -13553,7 +13560,7 @@@ MARVELL GIGABIT ETHERNET DRIVERS (skge/ M: Mirko Lindner M: Stephen Hemminger L: netdev@vger.kernel.org - S: Maintained + S: Odd fixes F: drivers/net/ethernet/marvell/sk* MARVELL LIBERTAS WIRELESS DRIVER @@@ -15882,15 -15889,19 +15896,19 @@@ F: drivers/net F: include/dt-bindings/net/ F: include/linux/cn_proc.h F: include/linux/etherdevice.h + F: include/linux/ethtool_netlink.h F: include/linux/fcdevice.h F: include/linux/fddidevice.h F: include/linux/hippidevice.h F: include/linux/if_* F: include/linux/inetdevice.h - F: include/linux/netdevice.h + F: include/linux/netdev* + F: include/linux/platform_data/wiznet.h F: include/uapi/linux/cn_proc.h + F: include/uapi/linux/ethtool_netlink.h F: include/uapi/linux/if_* - F: include/uapi/linux/netdevice.h + F: include/uapi/linux/netdev* + F: tools/testing/selftests/drivers/net/ X: drivers/net/wireless/ NETWORKING DRIVERS (WIRELESS) @@@ -15941,13 -15952,28 +15959,28 @@@ F: include/linux/framer/framer-provider F: include/linux/framer/framer.h F: include/linux/in.h F: include/linux/indirect_call_wrapper.h + F: include/linux/inet.h + F: include/linux/inet_diag.h F: include/linux/net.h - F: include/linux/netdevice.h + F: include/linux/netdev* + F: include/linux/netlink.h + F: include/linux/netpoll.h + F: include/linux/rtnetlink.h + F: include/linux/seq_file_net.h + F: include/linux/skbuff* F: include/net/ + F: include/uapi/linux/genetlink.h + F: include/uapi/linux/hsr_netlink.h F: include/uapi/linux/in.h + F: include/uapi/linux/inet_diag.h + F: include/uapi/linux/nbd-netlink.h F: include/uapi/linux/net.h F: include/uapi/linux/net_namespace.h - F: include/uapi/linux/netdevice.h + F: include/uapi/linux/netconf.h + F: include/uapi/linux/netdev* + F: include/uapi/linux/netlink.h + F: include/uapi/linux/netlink_diag.h + F: include/uapi/linux/rtnetlink.h F: lib/net_utils.c F: lib/random32.c F: net/ @@@ -16389,6 -16415,7 +16422,7 @@@ M: Han Xu R: Yogesh Gaur L: linux-spi@vger.kernel.org + L: imx@lists.linux.dev S: Maintained F: Documentation/devicetree/bindings/spi/spi-nxp-fspi.yaml F: drivers/spi/spi-nxp-fspi.c @@@ -18563,7 -18590,7 +18597,7 @@@ F: drivers/usb/misc/qcom_eud. QCOM IPA DRIVER M: Alex Elder L: netdev@vger.kernel.org - S: Supported + S: Maintained F: drivers/net/ipa/ QEMU MACHINE EMULATOR AND VIRTUALIZER SUPPORT @@@ -20358,6 -20385,7 +20392,7 @@@ F: Documentation/devicetree/bindings/sc F: drivers/scsi/ F: drivers/ufs/ F: include/scsi/ + F: include/uapi/scsi/ SCSI TAPE DRIVER M: Kai Mäkisara @@@ -21058,6 -21086,7 +21093,7 @@@ SOCKET TIMESTAMPIN M: Willem de Bruijn S: Maintained F: Documentation/networking/timestamping.rst + F: include/linux/net_tstamp.h F: include/uapi/linux/net_tstamp.h F: tools/testing/selftests/net/so_txtime.c diff --combined drivers/spi/spi-bcm63xx.c index 2fb79701a525,2fb8d4e55c77..ef3a7226db12 --- a/drivers/spi/spi-bcm63xx.c +++ b/drivers/spi/spi-bcm63xx.c @@@ -466,13 -466,13 +466,14 @@@ static const struct platform_device_id { }, }; +MODULE_DEVICE_TABLE(platform, bcm63xx_spi_dev_match); static const struct of_device_id bcm63xx_spi_of_match[] = { { .compatible = "brcm,bcm6348-spi", .data = &bcm6348_spi_reg_offsets }, { .compatible = "brcm,bcm6358-spi", .data = &bcm6358_spi_reg_offsets }, { }, }; + MODULE_DEVICE_TABLE(of, bcm63xx_spi_of_match); static int bcm63xx_spi_probe(struct platform_device *pdev) { @@@ -583,15 -583,13 +584,15 @@@ bcm_spi_writeb(bs, SPI_INTR_CLEAR_ALL, SPI_INT_STATUS); - pm_runtime_enable(&pdev->dev); + ret = devm_pm_runtime_enable(&pdev->dev); + if (ret) + goto out_clk_disable; /* register and we are done */ ret = devm_spi_register_controller(dev, host); if (ret) { dev_err(dev, "spi register failed\n"); - goto out_pm_disable; + goto out_clk_disable; } dev_info(dev, "at %pr (irq %d, FIFOs size %d)\n", @@@ -599,6 -597,8 +600,6 @@@ return 0; -out_pm_disable: - pm_runtime_disable(&pdev->dev); out_clk_disable: clk_disable_unprepare(clk); out_err: diff --combined drivers/spi/spi-cadence-quadspi.c index 9c0a4fa5128a,d4607cb89c48..1755ca026f08 --- a/drivers/spi/spi-cadence-quadspi.c +++ b/drivers/spi/spi-cadence-quadspi.c @@@ -1662,20 -1662,23 +1662,20 @@@ static int cqspi_setup_flash(struct cqs unsigned int max_cs = cqspi->num_chipselect - 1; struct platform_device *pdev = cqspi->pdev; struct device *dev = &pdev->dev; - struct device_node *np = dev->of_node; struct cqspi_flash_pdata *f_pdata; unsigned int cs; int ret; /* Get flash device data */ - for_each_available_child_of_node(dev->of_node, np) { + for_each_available_child_of_node_scoped(dev->of_node, np) { ret = of_property_read_u32(np, "reg", &cs); if (ret) { dev_err(dev, "Couldn't determine chip select.\n"); - of_node_put(np); return ret; } if (cs >= cqspi->num_chipselect) { dev_err(dev, "Chip select %d out of range.\n", cs); - of_node_put(np); return -EINVAL; } else if (cs < max_cs) { max_cs = cs; @@@ -1686,8 -1689,10 +1686,8 @@@ f_pdata->cs = cs; ret = cqspi_of_get_flash_pdata(pdev, f_pdata, np); - if (ret) { - of_node_put(np); + if (ret) return ret; - } } cqspi->num_chipselect = max_cs + 1; @@@ -1995,13 -2000,25 +1995,25 @@@ static int cqspi_runtime_resume(struct static int cqspi_suspend(struct device *dev) { struct cqspi_st *cqspi = dev_get_drvdata(dev); + int ret; - return spi_controller_suspend(cqspi->host); + ret = spi_controller_suspend(cqspi->host); + if (ret) + return ret; + + return pm_runtime_force_suspend(dev); } static int cqspi_resume(struct device *dev) { struct cqspi_st *cqspi = dev_get_drvdata(dev); + int ret; + + ret = pm_runtime_force_resume(dev); + if (ret) { + dev_err(dev, "pm_runtime_force_resume failed on resume\n"); + return ret; + } return spi_controller_resume(cqspi->host); } diff --combined drivers/spi/spi-zynqmp-gqspi.c index e8963e0a6d9a,558c466135a5..fcd0ca996684 --- a/drivers/spi/spi-zynqmp-gqspi.c +++ b/drivers/spi/spi-zynqmp-gqspi.c @@@ -1033,6 -1033,18 +1033,18 @@@ static int __maybe_unused zynqmp_runtim return 0; } + static unsigned long zynqmp_qspi_timeout(struct zynqmp_qspi *xqspi, u8 bits, + unsigned long bytes) + { + unsigned long timeout; + + /* Assume we are at most 2x slower than the nominal bus speed */ + timeout = mult_frac(bytes, 2 * 8 * MSEC_PER_SEC, + bits * xqspi->speed_hz); + /* And add 100 ms for scheduling delays */ + return msecs_to_jiffies(timeout + 100); + } + /** * zynqmp_qspi_exec_op() - Initiates the QSPI transfer * @mem: The SPI memory @@@ -1049,6 -1061,7 +1061,7 @@@ static int zynqmp_qspi_exec_op(struct s { struct zynqmp_qspi *xqspi = spi_controller_get_devdata (mem->spi->controller); + unsigned long timeout; int err = 0, i; u32 genfifoentry = 0; u16 opcode = op->cmd.opcode; @@@ -1077,8 -1090,10 +1090,10 @@@ zynqmp_gqspi_write(xqspi, GQSPI_IER_OFST, GQSPI_IER_GENFIFOEMPTY_MASK | GQSPI_IER_TXNOT_FULL_MASK); - if (!wait_for_completion_timeout - (&xqspi->data_completion, msecs_to_jiffies(1000))) { + timeout = zynqmp_qspi_timeout(xqspi, op->cmd.buswidth, + op->cmd.nbytes); + if (!wait_for_completion_timeout(&xqspi->data_completion, + timeout)) { err = -ETIMEDOUT; goto return_err; } @@@ -1104,8 -1119,10 +1119,10 @@@ GQSPI_IER_TXEMPTY_MASK | GQSPI_IER_GENFIFOEMPTY_MASK | GQSPI_IER_TXNOT_FULL_MASK); - if (!wait_for_completion_timeout - (&xqspi->data_completion, msecs_to_jiffies(1000))) { + timeout = zynqmp_qspi_timeout(xqspi, op->addr.buswidth, + op->addr.nbytes); + if (!wait_for_completion_timeout(&xqspi->data_completion, + timeout)) { err = -ETIMEDOUT; goto return_err; } @@@ -1173,8 -1190,9 +1190,9 @@@ GQSPI_IER_RXEMPTY_MASK); } } - if (!wait_for_completion_timeout - (&xqspi->data_completion, msecs_to_jiffies(1000))) + timeout = zynqmp_qspi_timeout(xqspi, op->data.buswidth, + op->data.nbytes); + if (!wait_for_completion_timeout(&xqspi->data_completion, timeout)) err = -ETIMEDOUT; } @@@ -1224,7 -1242,7 +1242,7 @@@ static int zynqmp_qspi_probe(struct pla u32 num_cs; const struct qspi_platform_data *p_data; - ctlr = spi_alloc_host(&pdev->dev, sizeof(*xqspi)); + ctlr = devm_spi_alloc_host(&pdev->dev, sizeof(*xqspi)); if (!ctlr) return -ENOMEM; @@@ -1238,22 -1256,30 +1256,22 @@@ xqspi->has_tapdelay = true; xqspi->regs = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(xqspi->regs)) { - ret = PTR_ERR(xqspi->regs); - goto remove_ctlr; - } + if (IS_ERR(xqspi->regs)) + return PTR_ERR(xqspi->regs); xqspi->pclk = devm_clk_get(&pdev->dev, "pclk"); - if (IS_ERR(xqspi->pclk)) { - dev_err(dev, "pclk clock not found.\n"); - ret = PTR_ERR(xqspi->pclk); - goto remove_ctlr; - } + if (IS_ERR(xqspi->pclk)) + return dev_err_probe(dev, PTR_ERR(xqspi->pclk), + "pclk clock not found.\n"); xqspi->refclk = devm_clk_get(&pdev->dev, "ref_clk"); - if (IS_ERR(xqspi->refclk)) { - dev_err(dev, "ref_clk clock not found.\n"); - ret = PTR_ERR(xqspi->refclk); - goto remove_ctlr; - } + if (IS_ERR(xqspi->refclk)) + return dev_err_probe(dev, PTR_ERR(xqspi->refclk), + "ref_clk clock not found.\n"); ret = clk_prepare_enable(xqspi->pclk); - if (ret) { - dev_err(dev, "Unable to enable APB clock.\n"); - goto remove_ctlr; - } + if (ret) + return dev_err_probe(dev, ret, "Unable to enable APB clock.\n"); ret = clk_prepare_enable(xqspi->refclk); if (ret) { @@@ -1338,6 -1364,8 +1356,6 @@@ clk_dis_all clk_disable_unprepare(xqspi->refclk); clk_dis_pclk: clk_disable_unprepare(xqspi->pclk); -remove_ctlr: - spi_controller_put(ctlr); return ret; } diff --combined drivers/spi/spidev.c index d5dbd1a88af9,face93a9cf20..5539c5d139d4 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c @@@ -666,7 -666,7 +666,7 @@@ static int spidev_release(struct inode } #ifdef CONFIG_SPI_SLAVE if (!dofree) - spi_slave_abort(spidev->spi); + spi_target_abort(spidev->spi); #endif mutex_unlock(&device_list_lock); @@@ -700,7 -700,9 +700,9 @@@ static const struct class spidev_class }; static const struct spi_device_id spidev_spi_ids[] = { + { .name = "bh2228fv" }, { .name = "dh2228fv" }, + { .name = "jg10309-01" }, { .name = "ltc2488" }, { .name = "sx1301" }, { .name = "bk4" },