]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
spi: aspeed: Fix an error handling path in aspeed_spi_[read|write]_user()
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Tue, 19 Nov 2024 21:30:29 +0000 (22:30 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 19 Dec 2024 17:08:55 +0000 (18:08 +0100)
[ Upstream commit c84dda3751e945a67d71cbe3af4474aad24a5794 ]

A aspeed_spi_start_user() is not balanced by a corresponding
aspeed_spi_stop_user().
Add the missing call.

Fixes: e3228ed92893 ("spi: spi-mem: Convert Aspeed SMC driver to spi-mem")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://patch.msgid.link/4052aa2f9a9ea342fa6af83fa991b55ce5d5819e.1732051814.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/spi/spi-aspeed-smc.c

index b90571396a604c339b1a951b55c1ac555997d0f9..5015c2f6fd9f2a33d36a98239df1db074e3b3493 100644 (file)
@@ -239,7 +239,7 @@ static ssize_t aspeed_spi_read_user(struct aspeed_spi_chip *chip,
 
        ret = aspeed_spi_send_cmd_addr(chip, op->addr.nbytes, offset, op->cmd.opcode);
        if (ret < 0)
-               return ret;
+               goto stop_user;
 
        if (op->dummy.buswidth && op->dummy.nbytes) {
                for (i = 0; i < op->dummy.nbytes / op->dummy.buswidth; i++)
@@ -249,8 +249,9 @@ static ssize_t aspeed_spi_read_user(struct aspeed_spi_chip *chip,
        aspeed_spi_set_io_mode(chip, io_mode);
 
        aspeed_spi_read_from_ahb(buf, chip->ahb_base, len);
+stop_user:
        aspeed_spi_stop_user(chip);
-       return 0;
+       return ret;
 }
 
 static ssize_t aspeed_spi_write_user(struct aspeed_spi_chip *chip,
@@ -261,10 +262,11 @@ static ssize_t aspeed_spi_write_user(struct aspeed_spi_chip *chip,
        aspeed_spi_start_user(chip);
        ret = aspeed_spi_send_cmd_addr(chip, op->addr.nbytes, op->addr.val, op->cmd.opcode);
        if (ret < 0)
-               return ret;
+               goto stop_user;
        aspeed_spi_write_to_ahb(chip->ahb_base, op->data.buf.out, op->data.nbytes);
+stop_user:
        aspeed_spi_stop_user(chip);
-       return 0;
+       return ret;
 }
 
 /* support for 1-1-1, 1-1-2 or 1-1-4 */