From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8CD8E3AEF5C; Fri, 10 Apr 2026 08:18:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775809137; cv=none; b=UXC68GFmaIMq911P9DEgx9ZED7h0udj1PmpHfvY8tkkkFSWclPdZJpuWAgtQLlKkPEJTX6eR9ZqAcnHxhB74b04xyxrJmKobJ1phzRaCITnjrv8EdcUAdNxH4qTJO85wVcmkpbv1FDj42aDTEtqSi29yG2ryciAOq+jWQm55iXY= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775809137; c=relaxed/simple; bh=tQQxsN8J624vyJL19f/zZB5glHjuQJ9UEw5ZMILF0gQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cd+4g1f+ljedjeFwRglq/3Yig+pCMLTFoN8v+OsxxM12JaE7KpeKUyxEwSYQ31YHd/MzuqVAUv+frVIU6P7qF9w0+paF8zpg1CByQthTaMQva/YFLihf23rC2iaHXxxO2t/l5bmDiu2ROw/ip8rRplOuSiLIC2K9KzjUvkpHT2I= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=awGcN0E3; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="awGcN0E3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D3798C4AF60; Fri, 10 Apr 2026 08:18:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775809137; bh=tQQxsN8J624vyJL19f/zZB5glHjuQJ9UEw5ZMILF0gQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=awGcN0E3s2FvTPS2QKXzhjz+xy9uko/PoWKO7gH6cWPPlcderCuFWJr43a3wIv8Xo zxjq0w0Raobwbl+efZCf7W5uX7TsnV0mZIOy0FNRN4WYtEzq/qYnmkYCoyos6g7xrR IP747KYQAIJqmrV/r9UmGE9pQ6FK/6JVOyjhX7svOZfWlLhzTzAXiKMWTye861WrGI 6cwXgGu6wSviF1jakmb+yoXZ3WIU2oFSjipo1kDANXN23zcjw1H4W+D2Y+9bbXJf3N 5bgQoH3cb4efeKzjzrmBD+nvJHoeB6PNMjyTVCk7I9Llt1BKWDWrwXSCzvYGaUlzNP efD4+ndTQ3aPQ== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1wB74o-000000026v0-0CRO; Fri, 10 Apr 2026 10:18:54 +0200 From: Johan Hovold To: Mark Brown Cc: Matthias Brugger , AngeloGioacchino Del Regno , Frank Li , Sascha Hauer , Andrew Jeffery , Avi Fishman , Tomer Maimon , Tali Perry , Linus Walleij , Andi Shyti , Tudor Ambarus , Paul Walmsley , Samuel Holland , Orson Zhai , Baolin Wang , Jernej Skrabec , Masahisa Kojima , Jassi Brar , Laxman Dewangan , Kunihiko Hayashi , Masami Hiramatsu , Michal Simek , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , stable@vger.kernel.org, Sebastian Andrzej Siewior Subject: [PATCH 23/26] spi: ti-qspi: fix controller deregistration Date: Fri, 10 Apr 2026 10:17:53 +0200 Message-ID: <20260410081757.503099-24-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260410081757.503099-1-johan@kernel.org> References: <20260410081757.503099-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Make sure to deregister the controller before disabling underlying resources like clocks during driver unbind. Note that the controller is suspended before disabling and releasing resources since commit 3ac066e2227c ("spi: spi-ti-qspi: Suspend the queue before removing the device") which avoids issues like unclocked accesses but prevents SPI device drivers from doing I/O during deregistration. Fixes: 3b3a80019ff1 ("spi: ti-qspi: one only one interrupt handler") Cc: stable@vger.kernel.org # 3.13 Cc: Sebastian Andrzej Siewior Signed-off-by: Johan Hovold --- drivers/spi/spi-ti-qspi.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c index d1d880a8ed7d..1fbd710d616f 100644 --- a/drivers/spi/spi-ti-qspi.c +++ b/drivers/spi/spi-ti-qspi.c @@ -888,7 +888,7 @@ static int ti_qspi_probe(struct platform_device *pdev) qspi->mmap_enabled = false; qspi->current_cs = -1; - ret = devm_spi_register_controller(&pdev->dev, host); + ret = spi_register_controller(host); if (!ret) return 0; @@ -903,19 +903,17 @@ static int ti_qspi_probe(struct platform_device *pdev) static void ti_qspi_remove(struct platform_device *pdev) { struct ti_qspi *qspi = platform_get_drvdata(pdev); - int rc; - rc = spi_controller_suspend(qspi->host); - if (rc) { - dev_alert(&pdev->dev, "spi_controller_suspend() failed (%pe)\n", - ERR_PTR(rc)); - return; - } + spi_controller_get(qspi->host); + + spi_unregister_controller(qspi->host); pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); ti_qspi_dma_cleanup(qspi); + + spi_controller_put(qspi->host); } static const struct dev_pm_ops ti_qspi_pm_ops = { -- 2.52.0