Message ID | 20220908121803.919943-1-narmstrong@baylibre.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 36acf80fc0c4b5ebe6fa010b524d442ee7f08fd3 |
Headers | show |
Series | spi: meson-spicc: do not rely on busy flag in pow2 clk ops | expand |
Hi Neil, thanks for fixing. On Thu, Sep 08, 2022 at 02:18:03PM +0200, Neil Armstrong wrote: > Since [1], controller's busy flag isn't set anymore when the > __spi_transfer_message_noqueue() is used instead of the > __spi_pump_transfer_message() logic for spi_sync transfers. > > Since the pow2 clock ops were limited to only be available when a > transfer is ongoing (between prepare_transfer_hardware and > unprepare_transfer_hardware callbacks), the only way to track this > down is to check for the controller cur_msg. > > [1] ae7d2346dc89 ("spi: Don't use the message queue if possible in spi_sync") > > Fixes: 09992025dacd ("spi: meson-spicc: add local pow2 clock ops to preserve rate between messages") > Fixes: ae7d2346dc89 ("spi: Don't use the message queue if possible in spi_sync") > Reported-by: Markus Schneider-Pargmann <msp@baylibre.com> > Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> Tested-by: Markus Schneider-Pargmann <msp@baylibre.com> Best, Markus > --- > drivers/spi/spi-meson-spicc.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c > index e4cb52e1fe26..6974a1c947aa 100644 > --- a/drivers/spi/spi-meson-spicc.c > +++ b/drivers/spi/spi-meson-spicc.c > @@ -537,7 +537,7 @@ static unsigned long meson_spicc_pow2_recalc_rate(struct clk_hw *hw, > struct clk_divider *divider = to_clk_divider(hw); > struct meson_spicc_device *spicc = pow2_clk_to_spicc(divider); > > - if (!spicc->master->cur_msg || !spicc->master->busy) > + if (!spicc->master->cur_msg) > return 0; > > return clk_divider_ops.recalc_rate(hw, parent_rate); > @@ -549,7 +549,7 @@ static int meson_spicc_pow2_determine_rate(struct clk_hw *hw, > struct clk_divider *divider = to_clk_divider(hw); > struct meson_spicc_device *spicc = pow2_clk_to_spicc(divider); > > - if (!spicc->master->cur_msg || !spicc->master->busy) > + if (!spicc->master->cur_msg) > return -EINVAL; > > return clk_divider_ops.determine_rate(hw, req); > @@ -561,7 +561,7 @@ static int meson_spicc_pow2_set_rate(struct clk_hw *hw, unsigned long rate, > struct clk_divider *divider = to_clk_divider(hw); > struct meson_spicc_device *spicc = pow2_clk_to_spicc(divider); > > - if (!spicc->master->cur_msg || !spicc->master->busy) > + if (!spicc->master->cur_msg) > return -EINVAL; > > return clk_divider_ops.set_rate(hw, rate, parent_rate); > -- > 2.25.1 >
On Thu, 8 Sep 2022 14:18:03 +0200, Neil Armstrong wrote: > Since [1], controller's busy flag isn't set anymore when the > __spi_transfer_message_noqueue() is used instead of the > __spi_pump_transfer_message() logic for spi_sync transfers. > > Since the pow2 clock ops were limited to only be available when a > transfer is ongoing (between prepare_transfer_hardware and > unprepare_transfer_hardware callbacks), the only way to track this > down is to check for the controller cur_msg. > > [...] Applied to https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next Thanks! [1/1] spi: meson-spicc: do not rely on busy flag in pow2 clk ops commit: 36acf80fc0c4b5ebe6fa010b524d442ee7f08fd3 All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted. You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed. If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced. Please add any relevant lists and maintainers to the CCs when replying to this mail. Thanks, Mark
diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c index e4cb52e1fe26..6974a1c947aa 100644 --- a/drivers/spi/spi-meson-spicc.c +++ b/drivers/spi/spi-meson-spicc.c @@ -537,7 +537,7 @@ static unsigned long meson_spicc_pow2_recalc_rate(struct clk_hw *hw, struct clk_divider *divider = to_clk_divider(hw); struct meson_spicc_device *spicc = pow2_clk_to_spicc(divider); - if (!spicc->master->cur_msg || !spicc->master->busy) + if (!spicc->master->cur_msg) return 0; return clk_divider_ops.recalc_rate(hw, parent_rate); @@ -549,7 +549,7 @@ static int meson_spicc_pow2_determine_rate(struct clk_hw *hw, struct clk_divider *divider = to_clk_divider(hw); struct meson_spicc_device *spicc = pow2_clk_to_spicc(divider); - if (!spicc->master->cur_msg || !spicc->master->busy) + if (!spicc->master->cur_msg) return -EINVAL; return clk_divider_ops.determine_rate(hw, req); @@ -561,7 +561,7 @@ static int meson_spicc_pow2_set_rate(struct clk_hw *hw, unsigned long rate, struct clk_divider *divider = to_clk_divider(hw); struct meson_spicc_device *spicc = pow2_clk_to_spicc(divider); - if (!spicc->master->cur_msg || !spicc->master->busy) + if (!spicc->master->cur_msg) return -EINVAL; return clk_divider_ops.set_rate(hw, rate, parent_rate);
Since [1], controller's busy flag isn't set anymore when the __spi_transfer_message_noqueue() is used instead of the __spi_pump_transfer_message() logic for spi_sync transfers. Since the pow2 clock ops were limited to only be available when a transfer is ongoing (between prepare_transfer_hardware and unprepare_transfer_hardware callbacks), the only way to track this down is to check for the controller cur_msg. [1] ae7d2346dc89 ("spi: Don't use the message queue if possible in spi_sync") Fixes: 09992025dacd ("spi: meson-spicc: add local pow2 clock ops to preserve rate between messages") Fixes: ae7d2346dc89 ("spi: Don't use the message queue if possible in spi_sync") Reported-by: Markus Schneider-Pargmann <msp@baylibre.com> Signed-off-by: Neil Armstrong <narmstrong@baylibre.com> --- drivers/spi/spi-meson-spicc.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)