]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
qca_spi: Fix clock speed for multiple QCA7000
authorStefan Wahren <wahrenst@gmx.net>
Fri, 6 Dec 2024 18:46:42 +0000 (19:46 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Dec 2024 17:08:55 +0000 (18:08 +0100)
[ Upstream commit 4dba406fac06b009873fe7a28231b9b7e4288b09 ]

Storing the maximum clock speed in module parameter qcaspi_clkspeed
has the unintended side effect that the first probed instance
defines the value for all other instances. Fix this issue by storing
it in max_speed_hz of the relevant SPI device.

This fix keeps the priority of the speed parameter (module parameter,
device tree property, driver default). Btw this uses the opportunity
to get the rid of the unused member clkspeed.

Fixes: 291ab06ecf67 ("net: qualcomm: new Ethernet over SPI driver for QCA7000")
Signed-off-by: Stefan Wahren <wahrenst@gmx.net>
Link: https://patch.msgid.link/20241206184643.123399-2-wahrenst@gmx.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/qualcomm/qca_spi.c
drivers/net/ethernet/qualcomm/qca_spi.h

index 926a087ae1c62f3762812f8279b1a4a0443481b7..95e0a52373597f6b8301dcea5226cd08ee60ed24 100644 (file)
@@ -829,7 +829,6 @@ qcaspi_netdev_init(struct net_device *dev)
 
        dev->mtu = QCAFRM_MAX_MTU;
        dev->type = ARPHRD_ETHER;
-       qca->clkspeed = qcaspi_clkspeed;
        qca->burst_len = qcaspi_burst_len;
        qca->spi_thread = NULL;
        qca->buffer_size = (dev->mtu + VLAN_ETH_HLEN + QCAFRM_HEADER_LEN +
@@ -918,17 +917,15 @@ qca_spi_probe(struct spi_device *spi)
        legacy_mode = of_property_read_bool(spi->dev.of_node,
                                            "qca,legacy-mode");
 
-       if (qcaspi_clkspeed == 0) {
-               if (spi->max_speed_hz)
-                       qcaspi_clkspeed = spi->max_speed_hz;
-               else
-                       qcaspi_clkspeed = QCASPI_CLK_SPEED;
-       }
+       if (qcaspi_clkspeed)
+               spi->max_speed_hz = qcaspi_clkspeed;
+       else if (!spi->max_speed_hz)
+               spi->max_speed_hz = QCASPI_CLK_SPEED;
 
-       if ((qcaspi_clkspeed < QCASPI_CLK_SPEED_MIN) ||
-           (qcaspi_clkspeed > QCASPI_CLK_SPEED_MAX)) {
-               dev_err(&spi->dev, "Invalid clkspeed: %d\n",
-                       qcaspi_clkspeed);
+       if (spi->max_speed_hz < QCASPI_CLK_SPEED_MIN ||
+           spi->max_speed_hz > QCASPI_CLK_SPEED_MAX) {
+               dev_err(&spi->dev, "Invalid clkspeed: %u\n",
+                       spi->max_speed_hz);
                return -EINVAL;
        }
 
@@ -953,14 +950,13 @@ qca_spi_probe(struct spi_device *spi)
                return -EINVAL;
        }
 
-       dev_info(&spi->dev, "ver=%s, clkspeed=%d, burst_len=%d, pluggable=%d\n",
+       dev_info(&spi->dev, "ver=%s, clkspeed=%u, burst_len=%d, pluggable=%d\n",
                 QCASPI_DRV_VERSION,
-                qcaspi_clkspeed,
+                spi->max_speed_hz,
                 qcaspi_burst_len,
                 qcaspi_pluggable);
 
        spi->mode = SPI_MODE_3;
-       spi->max_speed_hz = qcaspi_clkspeed;
        if (spi_setup(spi) < 0) {
                dev_err(&spi->dev, "Unable to setup SPI device\n");
                return -EFAULT;
index 58ad910068d4bc248d9c4b21202e3beb89899144..b3b17bd46e12c241afc9c97b24011f89f8e9ce07 100644 (file)
@@ -101,7 +101,6 @@ struct qcaspi {
 #endif
 
        /* user configurable options */
-       u32 clkspeed;
        u8 legacy_mode;
        u16 burst_len;
 };