]> www.infradead.org Git - users/dwmw2/linux.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)
committerJakub Kicinski <kuba@kernel.org>
Tue, 10 Dec 2024 02:26:48 +0000 (18:26 -0800)
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>
drivers/net/ethernet/qualcomm/qca_spi.c
drivers/net/ethernet/qualcomm/qca_spi.h

index ef9c02b000e484418e1ce0c673eb791565b12d6e..d328e770bcbe34c60ffe58d9e1614a6e814a057c 100644 (file)
@@ -818,7 +818,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 = (QCAFRM_MAX_MTU + VLAN_ETH_HLEN + QCAFRM_HEADER_LEN +
@@ -909,17 +908,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;
        }
 
@@ -944,14 +941,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 7ba5c9e2f61cdf1e52e4b0b14272f338d23d39e5..90b290f94c273c4a4e5a363923f73df1bb66b577 100644 (file)
@@ -89,7 +89,6 @@ struct qcaspi {
 #endif
 
        /* user configurable options */
-       u32 clkspeed;
        u8 legacy_mode;
        u16 burst_len;
 };