mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-17 13:40:32 -05:00
spi: spi-nxp-fspi: re-config the clock rate when operation require new clock rate
Current operation contain the max_freq, so new coming operation may use
new clock rate, need to re-config the clock rate to match the requirement.
Fixes: 26851cf65f ("spi: nxp-fspi: Support per spi-mem operation frequency switches")
Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
Link: https://patch.msgid.link/20250922-fspi-fix-v1-1-ff4315359d31@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
@@ -404,6 +404,8 @@ struct nxp_fspi {
|
||||
#define FSPI_NEED_INIT BIT(0)
|
||||
#define FSPI_DTR_MODE BIT(1)
|
||||
int flags;
|
||||
/* save the previous operation clock rate */
|
||||
unsigned long pre_op_rate;
|
||||
};
|
||||
|
||||
static inline int needs_ip_only(struct nxp_fspi *f)
|
||||
@@ -780,11 +782,17 @@ static void nxp_fspi_select_mem(struct nxp_fspi *f, struct spi_device *spi,
|
||||
uint64_t size_kb;
|
||||
|
||||
/*
|
||||
* Return, if previously selected target device is same as current
|
||||
* requested target device. Also the DTR or STR mode do not change.
|
||||
* Return when following condition all meet,
|
||||
* 1, if previously selected target device is same as current
|
||||
* requested target device.
|
||||
* 2, the DTR or STR mode do not change.
|
||||
* 3, previous operation max rate equals current one.
|
||||
*
|
||||
* For other case, need to re-config.
|
||||
*/
|
||||
if ((f->selected == spi_get_chipselect(spi, 0)) &&
|
||||
(!!(f->flags & FSPI_DTR_MODE) == op_is_dtr))
|
||||
(!!(f->flags & FSPI_DTR_MODE) == op_is_dtr) &&
|
||||
(f->pre_op_rate == op->max_freq))
|
||||
return;
|
||||
|
||||
/* Reset FLSHxxCR0 registers */
|
||||
@@ -832,6 +840,8 @@ static void nxp_fspi_select_mem(struct nxp_fspi *f, struct spi_device *spi,
|
||||
else
|
||||
nxp_fspi_dll_override(f);
|
||||
|
||||
f->pre_op_rate = op->max_freq;
|
||||
|
||||
f->selected = spi_get_chipselect(spi, 0);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user