* [PATCH 01/10] spi: amlogic-spifc-a1: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-04-30 15:54 ` [PATCH 02/10] spi: amlogic-spisg: " Hans Zhang
` (9 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-amlogic-spifc-a1.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/spi/spi-amlogic-spifc-a1.c b/drivers/spi/spi-amlogic-spifc-a1.c
index 7ee4c92e6e09..77a2c11bec5e 100644
--- a/drivers/spi/spi-amlogic-spifc-a1.c
+++ b/drivers/spi/spi-amlogic-spifc-a1.c
@@ -206,10 +206,9 @@ static int amlogic_spifc_a1_read(struct amlogic_spifc_a1 *spifc, void *buf,
u32 val = readl(spifc->base + SPIFC_A1_USER_CTRL3_REG);
int ret;
- val &= ~(SPIFC_A1_USER_DIN_MODE | SPIFC_A1_USER_DIN_BYTES);
val |= SPIFC_A1_USER_DIN_ENABLE;
- val |= FIELD_PREP(SPIFC_A1_USER_DIN_MODE, mode);
- val |= FIELD_PREP(SPIFC_A1_USER_DIN_BYTES, size);
+ FIELD_MODIFY(SPIFC_A1_USER_DIN_MODE, &val, mode);
+ FIELD_MODIFY(SPIFC_A1_USER_DIN_BYTES, &val, size);
writel(val, spifc->base + SPIFC_A1_USER_CTRL3_REG);
ret = amlogic_spifc_a1_request(spifc, true);
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 02/10] spi: amlogic-spisg: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
2026-04-30 15:54 ` [PATCH 01/10] spi: amlogic-spifc-a1: Use FIELD_MODIFY() Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-04-30 15:54 ` [PATCH 03/10] spi: cadence-xspi: " Hans Zhang
` (8 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-amlogic-spisg.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/drivers/spi/spi-amlogic-spisg.c b/drivers/spi/spi-amlogic-spisg.c
index 19c5eba412ef..4c9f4088cb37 100644
--- a/drivers/spi/spi-amlogic-spisg.c
+++ b/drivers/spi/spi-amlogic-spisg.c
@@ -601,14 +601,11 @@ static int aml_spisg_prepare_message(struct spi_controller *ctlr,
spisg->bytes_per_word = spi->bits_per_word >> 3;
- spisg->cfg_spi &= ~CFG_SLAVE_SELECT;
- spisg->cfg_spi |= FIELD_PREP(CFG_SLAVE_SELECT, spi_get_chipselect(spi, 0));
-
- spisg->cfg_bus &= ~(CFG_CPOL | CFG_CPHA | CFG_B_L_ENDIAN | CFG_HALF_DUPLEX);
- spisg->cfg_bus |= FIELD_PREP(CFG_CPOL, !!(spi->mode & SPI_CPOL)) |
- FIELD_PREP(CFG_CPHA, !!(spi->mode & SPI_CPHA)) |
- FIELD_PREP(CFG_B_L_ENDIAN, !!(spi->mode & SPI_LSB_FIRST)) |
- FIELD_PREP(CFG_HALF_DUPLEX, !!(spi->mode & SPI_3WIRE));
+ FIELD_MODIFY(CFG_SLAVE_SELECT, &spisg->cfg_spi, spi_get_chipselect(spi, 0));
+ FIELD_MODIFY(CFG_CPOL, &spisg->cfg_bus, !!(spi->mode & SPI_CPOL));
+ FIELD_MODIFY(CFG_CPHA, &spisg->cfg_bus, !!(spi->mode & SPI_CPHA));
+ FIELD_MODIFY(CFG_B_L_ENDIAN, &spisg->cfg_bus, !!(spi->mode & SPI_LSB_FIRST));
+ FIELD_MODIFY(CFG_HALF_DUPLEX, &spisg->cfg_bus, !!(spi->mode & SPI_3WIRE));
return 0;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 03/10] spi: cadence-xspi: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
2026-04-30 15:54 ` [PATCH 01/10] spi: amlogic-spifc-a1: Use FIELD_MODIFY() Hans Zhang
2026-04-30 15:54 ` [PATCH 02/10] spi: amlogic-spisg: " Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-05-01 0:52 ` Mark Brown
2026-04-30 15:54 ` [PATCH 04/10] spi: meson-spicc: " Hans Zhang
` (7 subsequent siblings)
10 siblings, 1 reply; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-cadence-xspi.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/spi/spi-cadence-xspi.c b/drivers/spi/spi-cadence-xspi.c
index 895b4b3276a5..32fa19ebf7a9 100644
--- a/drivers/spi/spi-cadence-xspi.c
+++ b/drivers/spi/spi-cadence-xspi.c
@@ -453,8 +453,7 @@ static bool cdns_mrvl_xspi_setup_clock(struct cdns_xspi_dev *cdns_xspi,
writel(clk_reg,
cdns_xspi->auxbase + MRVL_XSPI_CLK_CTRL_AUX_REG);
clk_reg = FIELD_PREP(MRVL_XSPI_CLK_DIV, i);
- clk_reg &= ~MRVL_XSPI_CLK_DIV;
- clk_reg |= FIELD_PREP(MRVL_XSPI_CLK_DIV, i);
+ FIELD_MODIFY(MRVL_XSPI_CLK_DIV, &clk_reg, i);
clk_reg |= MRVL_XSPI_CLK_ENABLE;
clk_reg |= MRVL_XSPI_IRQ_ENABLE;
update_clk = true;
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 03/10] spi: cadence-xspi: Use FIELD_MODIFY()
2026-04-30 15:54 ` [PATCH 03/10] spi: cadence-xspi: " Hans Zhang
@ 2026-05-01 0:52 ` Mark Brown
0 siblings, 0 replies; 15+ messages in thread
From: Mark Brown @ 2026-05-01 0:52 UTC (permalink / raw)
To: Hans Zhang
Cc: sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl,
linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32
[-- Attachment #1: Type: text/plain, Size: 524 bytes --]
On Thu, Apr 30, 2026 at 11:54:49PM +0800, Hans Zhang wrote:
> writel(clk_reg,
> cdns_xspi->auxbase + MRVL_XSPI_CLK_CTRL_AUX_REG);
> clk_reg = FIELD_PREP(MRVL_XSPI_CLK_DIV, i);
> - clk_reg &= ~MRVL_XSPI_CLK_DIV;
> - clk_reg |= FIELD_PREP(MRVL_XSPI_CLK_DIV, i);
> + FIELD_MODIFY(MRVL_XSPI_CLK_DIV, &clk_reg, i);
> clk_reg |= MRVL_XSPI_CLK_ENABLE;
> clk_reg |= MRVL_XSPI_IRQ_ENABLE;
> update_clk = true;
The existing code is a bit weird here, we could just delete the
modification entirely AFAICT.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 04/10] spi: meson-spicc: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
` (2 preceding siblings ...)
2026-04-30 15:54 ` [PATCH 03/10] spi: cadence-xspi: " Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-04-30 15:54 ` [PATCH 05/10] spi: nxp-xspi: " Hans Zhang
` (6 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-meson-spicc.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/spi/spi-meson-spicc.c b/drivers/spi/spi-meson-spicc.c
index b80f9f457b66..682dda114412 100644
--- a/drivers/spi/spi-meson-spicc.c
+++ b/drivers/spi/spi-meson-spicc.c
@@ -539,9 +539,8 @@ static void meson_spicc_setup_xfer(struct meson_spicc_device *spicc,
conf = conf_orig = readl_relaxed(spicc->base + SPICC_CONREG);
/* Setup word width */
- conf &= ~SPICC_BITLENGTH_MASK;
- conf |= FIELD_PREP(SPICC_BITLENGTH_MASK,
- (spicc->bytes_per_word << 3) - 1);
+ FIELD_MODIFY(SPICC_BITLENGTH_MASK, &conf,
+ (spicc->bytes_per_word << 3) - 1);
/* Ignore if unchanged */
if (conf != conf_orig)
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 05/10] spi: nxp-xspi: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
` (3 preceding siblings ...)
2026-04-30 15:54 ` [PATCH 04/10] spi: meson-spicc: " Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-05-05 15:39 ` Frank Li
2026-04-30 15:54 ` [PATCH 06/10] spi: sn-f-ospi: " Hans Zhang
` (5 subsequent siblings)
10 siblings, 1 reply; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-nxp-xspi.c | 12 ++++--------
1 file changed, 4 insertions(+), 8 deletions(-)
diff --git a/drivers/spi/spi-nxp-xspi.c b/drivers/spi/spi-nxp-xspi.c
index 385302a6e62f..037eac24e6fd 100644
--- a/drivers/spi/spi-nxp-xspi.c
+++ b/drivers/spi/spi-nxp-xspi.c
@@ -493,9 +493,8 @@ static void nxp_xspi_disable_ddr(struct nxp_xspi *xspi)
writel(reg, base + XSPI_MCR);
reg &= ~XSPI_MCR_DDR_EN;
- reg &= ~XSPI_MCR_DQS_FA_SEL_MASK;
/* Use dummy pad loopback mode to sample data */
- reg |= FIELD_PREP(XSPI_MCR_DQS_FA_SEL_MASK, 0x01);
+ FIELD_MODIFY(XSPI_MCR_DQS_FA_SEL_MASK, ®, 0x01);
writel(reg, base + XSPI_MCR);
xspi->support_max_rate = 133000000;
@@ -524,15 +523,13 @@ static void nxp_xspi_enable_ddr(struct nxp_xspi *xspi)
writel(reg, base + XSPI_MCR);
reg |= XSPI_MCR_DDR_EN;
- reg &= ~XSPI_MCR_DQS_FA_SEL_MASK;
/* Use external dqs to sample data */
- reg |= FIELD_PREP(XSPI_MCR_DQS_FA_SEL_MASK, 0x03);
+ FIELD_MODIFY(XSPI_MCR_DQS_FA_SEL_MASK, ®, 0x03);
writel(reg, base + XSPI_MCR);
xspi->support_max_rate = 200000000;
reg = readl(base + XSPI_FLSHCR);
- reg &= ~XSPI_FLSHCR_TDH_MASK;
- reg |= FIELD_PREP(XSPI_FLSHCR_TDH_MASK, 0x01);
+ FIELD_MODIFY(XSPI_FLSHCR_TDH_MASK, ®, 0x01);
writel(reg, base + XSPI_FLSHCR);
reg = FIELD_PREP(XSPI_SMPR_DLLFSMPFA_MASK, 0x04);
@@ -1096,8 +1093,7 @@ static int nxp_xspi_default_setup(struct nxp_xspi *xspi)
/* Give read/write access right to EENV0 */
reg = readl(base + XSPI_FRAD0_WORD2);
- reg &= ~XSPI_FRAD0_WORD2_MD0ACP_MASK;
- reg |= FIELD_PREP(XSPI_FRAD0_WORD2_MD0ACP_MASK, 0x03);
+ FIELD_MODIFY(XSPI_FRAD0_WORD2_MD0ACP_MASK, ®, 0x03);
writel(reg, base + XSPI_FRAD0_WORD2);
/* Enable the FRAD check for EENV0 */
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 05/10] spi: nxp-xspi: Use FIELD_MODIFY()
2026-04-30 15:54 ` [PATCH 05/10] spi: nxp-xspi: " Hans Zhang
@ 2026-05-05 15:39 ` Frank Li
0 siblings, 0 replies; 15+ messages in thread
From: Frank Li @ 2026-05-05 15:39 UTC (permalink / raw)
To: Hans Zhang
Cc: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl,
linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32
On Thu, Apr 30, 2026 at 11:54:51PM +0800, Hans Zhang wrote:
> Use FIELD_MODIFY() to remove open-coded bit manipulation.
> No functional change intended.
>
> Signed-off-by: Hans Zhang <18255117159@163.com>
> ---
Reviewed-by: Frank Li <Frank.Li@nxp.com>
> drivers/spi/spi-nxp-xspi.c | 12 ++++--------
> 1 file changed, 4 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/spi/spi-nxp-xspi.c b/drivers/spi/spi-nxp-xspi.c
> index 385302a6e62f..037eac24e6fd 100644
> --- a/drivers/spi/spi-nxp-xspi.c
> +++ b/drivers/spi/spi-nxp-xspi.c
> @@ -493,9 +493,8 @@ static void nxp_xspi_disable_ddr(struct nxp_xspi *xspi)
> writel(reg, base + XSPI_MCR);
>
> reg &= ~XSPI_MCR_DDR_EN;
> - reg &= ~XSPI_MCR_DQS_FA_SEL_MASK;
> /* Use dummy pad loopback mode to sample data */
> - reg |= FIELD_PREP(XSPI_MCR_DQS_FA_SEL_MASK, 0x01);
> + FIELD_MODIFY(XSPI_MCR_DQS_FA_SEL_MASK, ®, 0x01);
> writel(reg, base + XSPI_MCR);
> xspi->support_max_rate = 133000000;
>
> @@ -524,15 +523,13 @@ static void nxp_xspi_enable_ddr(struct nxp_xspi *xspi)
> writel(reg, base + XSPI_MCR);
>
> reg |= XSPI_MCR_DDR_EN;
> - reg &= ~XSPI_MCR_DQS_FA_SEL_MASK;
> /* Use external dqs to sample data */
> - reg |= FIELD_PREP(XSPI_MCR_DQS_FA_SEL_MASK, 0x03);
> + FIELD_MODIFY(XSPI_MCR_DQS_FA_SEL_MASK, ®, 0x03);
> writel(reg, base + XSPI_MCR);
> xspi->support_max_rate = 200000000;
>
> reg = readl(base + XSPI_FLSHCR);
> - reg &= ~XSPI_FLSHCR_TDH_MASK;
> - reg |= FIELD_PREP(XSPI_FLSHCR_TDH_MASK, 0x01);
> + FIELD_MODIFY(XSPI_FLSHCR_TDH_MASK, ®, 0x01);
> writel(reg, base + XSPI_FLSHCR);
>
> reg = FIELD_PREP(XSPI_SMPR_DLLFSMPFA_MASK, 0x04);
> @@ -1096,8 +1093,7 @@ static int nxp_xspi_default_setup(struct nxp_xspi *xspi)
>
> /* Give read/write access right to EENV0 */
> reg = readl(base + XSPI_FRAD0_WORD2);
> - reg &= ~XSPI_FRAD0_WORD2_MD0ACP_MASK;
> - reg |= FIELD_PREP(XSPI_FRAD0_WORD2_MD0ACP_MASK, 0x03);
> + FIELD_MODIFY(XSPI_FRAD0_WORD2_MD0ACP_MASK, ®, 0x03);
> writel(reg, base + XSPI_FRAD0_WORD2);
>
> /* Enable the FRAD check for EENV0 */
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH 06/10] spi: sn-f-ospi: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
` (4 preceding siblings ...)
2026-04-30 15:54 ` [PATCH 05/10] spi: nxp-xspi: " Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-04-30 15:54 ` [PATCH 07/10] spi: stm32-ospi: " Hans Zhang
` (4 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-sn-f-ospi.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/spi/spi-sn-f-ospi.c b/drivers/spi/spi-sn-f-ospi.c
index b459d51cb3a8..f0320e96fe23 100644
--- a/drivers/spi/spi-sn-f-ospi.c
+++ b/drivers/spi/spi-sn-f-ospi.c
@@ -222,9 +222,8 @@ static void f_ospi_config_clk(struct f_ospi *ospi, u32 device_hz)
*/
val = readl(ospi->base + OSPI_CLK_CTL);
- val &= ~(OSPI_CLK_CTL_PHA | OSPI_CLK_CTL_DIV);
- val |= FIELD_PREP(OSPI_CLK_CTL_PHA, OSPI_CLK_CTL_PHA_180)
- | FIELD_PREP(OSPI_CLK_CTL_DIV, div_reg);
+ FIELD_MODIFY(OSPI_CLK_CTL_PHA, &val, OSPI_CLK_CTL_PHA_180);
+ FIELD_MODIFY(OSPI_CLK_CTL_DIV, &val, div_reg);
writel(val, ospi->base + OSPI_CLK_CTL);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 07/10] spi: stm32-ospi: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
` (5 preceding siblings ...)
2026-04-30 15:54 ` [PATCH 06/10] spi: sn-f-ospi: " Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-04-30 15:54 ` [PATCH 08/10] spi: stm32-qspi: " Hans Zhang
` (3 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-stm32-ospi.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/spi/spi-stm32-ospi.c b/drivers/spi/spi-stm32-ospi.c
index 4461c6e24b9e..3757f6ba8fc6 100644
--- a/drivers/spi/spi-stm32-ospi.c
+++ b/drivers/spi/spi-stm32-ospi.c
@@ -470,10 +470,9 @@ static int stm32_ospi_send(struct spi_device *spi, const struct spi_mem_op *op)
u8 cs = spi->chip_select[ffs(spi->cs_index_mask) - 1];
cr = readl_relaxed(ospi->regs_base + OSPI_CR);
- cr &= ~CR_CSSEL;
- cr |= FIELD_PREP(CR_CSSEL, cs);
- cr &= ~CR_FMODE_MASK;
- cr |= FIELD_PREP(CR_FMODE_MASK, ospi->fmode);
+ FIELD_MODIFY(CR_CSSEL, &cr, cs);
+
+ FIELD_MODIFY(CR_FMODE_MASK, &cr, ospi->fmode);
writel_relaxed(cr, regs_base + OSPI_CR);
if (op->data.nbytes)
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 08/10] spi: stm32-qspi: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
` (6 preceding siblings ...)
2026-04-30 15:54 ` [PATCH 07/10] spi: stm32-ospi: " Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-04-30 15:54 ` [PATCH 09/10] spi: sunplus-sp7021: " Hans Zhang
` (2 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-stm32-qspi.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/spi/spi-stm32-qspi.c b/drivers/spi/spi-stm32-qspi.c
index df1bbacec90a..ea69fe25686f 100644
--- a/drivers/spi/spi-stm32-qspi.c
+++ b/drivers/spi/spi-stm32-qspi.c
@@ -374,9 +374,8 @@ static int stm32_qspi_send(struct spi_device *spi, const struct spi_mem_op *op)
int timeout, err = 0, err_poll_status = 0;
cr = readl_relaxed(qspi->io_base + QSPI_CR);
- cr &= ~CR_PRESC_MASK & ~CR_FSEL;
- cr |= FIELD_PREP(CR_PRESC_MASK, flash->presc);
- cr |= FIELD_PREP(CR_FSEL, flash->cs);
+ FIELD_MODIFY(CR_PRESC_MASK, &cr, flash->presc);
+ FIELD_MODIFY(CR_FSEL, &cr, flash->cs);
writel_relaxed(cr, qspi->io_base + QSPI_CR);
if (op->data.nbytes)
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 09/10] spi: sunplus-sp7021: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
` (7 preceding siblings ...)
2026-04-30 15:54 ` [PATCH 08/10] spi: stm32-qspi: " Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-04-30 15:54 ` [PATCH 10/10] spi: uniphier: " Hans Zhang
2026-05-01 8:30 ` [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations David Laight
10 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-sunplus-sp7021.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/spi/spi-sunplus-sp7021.c b/drivers/spi/spi-sunplus-sp7021.c
index 35601212fb78..c1870322d976 100644
--- a/drivers/spi/spi-sunplus-sp7021.c
+++ b/drivers/spi/spi-sunplus-sp7021.c
@@ -290,8 +290,7 @@ static void sp7021_spi_setup_clk(struct spi_controller *ctlr, struct spi_transfe
div = max(2U, clk_rate / xfer->speed_hz);
clk_sel = (div / 2) - 1;
- pspim->xfer_conf &= ~SP7021_CLK_MASK;
- pspim->xfer_conf |= FIELD_PREP(SP7021_CLK_MASK, clk_sel);
+ FIELD_MODIFY(SP7021_CLK_MASK, &pspim->xfer_conf, clk_sel);
writel(pspim->xfer_conf, pspim->m_base + SP7021_SPI_CONFIG_REG);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH 10/10] spi: uniphier: Use FIELD_MODIFY()
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
` (8 preceding siblings ...)
2026-04-30 15:54 ` [PATCH 09/10] spi: sunplus-sp7021: " Hans Zhang
@ 2026-04-30 15:54 ` Hans Zhang
2026-05-01 8:30 ` [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations David Laight
10 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-04-30 15:54 UTC (permalink / raw)
To: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl
Cc: linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32, Hans Zhang
Use FIELD_MODIFY() to remove open-coded bit manipulation.
No functional change intended.
Signed-off-by: Hans Zhang <18255117159@163.com>
---
drivers/spi/spi-uniphier.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/drivers/spi/spi-uniphier.c b/drivers/spi/spi-uniphier.c
index eac6c3e8908b..846f65ba9495 100644
--- a/drivers/spi/spi-uniphier.c
+++ b/drivers/spi/spi-uniphier.c
@@ -184,14 +184,12 @@ static void uniphier_spi_set_transfer_size(struct spi_device *spi, int size)
u32 val;
val = readl(priv->base + SSI_TXWDS);
- val &= ~(SSI_TXWDS_WDLEN_MASK | SSI_TXWDS_DTLEN_MASK);
- val |= FIELD_PREP(SSI_TXWDS_WDLEN_MASK, size);
- val |= FIELD_PREP(SSI_TXWDS_DTLEN_MASK, size);
+ FIELD_MODIFY(SSI_TXWDS_WDLEN_MASK, &val, size);
+ FIELD_MODIFY(SSI_TXWDS_DTLEN_MASK, &val, size);
writel(val, priv->base + SSI_TXWDS);
val = readl(priv->base + SSI_RXWDS);
- val &= ~SSI_RXWDS_DTLEN_MASK;
- val |= FIELD_PREP(SSI_RXWDS_DTLEN_MASK, size);
+ FIELD_MODIFY(SSI_RXWDS_DTLEN_MASK, &val, size);
writel(val, priv->base + SSI_RXWDS);
}
@@ -308,9 +306,8 @@ static void uniphier_spi_set_fifo_threshold(struct uniphier_spi_priv *priv,
u32 val;
val = readl(priv->base + SSI_FC);
- val &= ~(SSI_FC_TXFTH_MASK | SSI_FC_RXFTH_MASK);
- val |= FIELD_PREP(SSI_FC_TXFTH_MASK, SSI_FIFO_DEPTH - threshold);
- val |= FIELD_PREP(SSI_FC_RXFTH_MASK, threshold);
+ FIELD_MODIFY(SSI_FC_TXFTH_MASK, &val, SSI_FIFO_DEPTH - threshold);
+ FIELD_MODIFY(SSI_FC_RXFTH_MASK, &val, threshold);
writel(val, priv->base + SSI_FC);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations
2026-04-30 15:54 [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations Hans Zhang
` (9 preceding siblings ...)
2026-04-30 15:54 ` [PATCH 10/10] spi: uniphier: " Hans Zhang
@ 2026-05-01 8:30 ` David Laight
2026-05-05 4:23 ` Hans Zhang
10 siblings, 1 reply; 15+ messages in thread
From: David Laight @ 2026-05-01 8:30 UTC (permalink / raw)
To: Hans Zhang
Cc: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl,
linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32
On Thu, 30 Apr 2026 23:54:46 +0800
Hans Zhang <18255117159@163.com> wrote:
> Replace open-coded bitfield modifications with the standard FIELD_MODIFY()
> macro across multiple SPI controller drivers. This improves readability and
> adds compile-time checking without functional changes.
I don't think these changes are worth the effort.
The readability doesn't change much - you need to know what a slightly
more obscure 'helper' does.
The extra compile-time checks are pretty unlikely to ever find a problem
and mostly just slow down the compile.
The generated code is likely be slightly worse.
And, with the best will in the world, it is easy to make silly mistakes.
David
>
> Each patch modifies a single driver, allowing independent review and
> application.
>
> Hans Zhang (10):
> spi: amlogic-spifc-a1: Use FIELD_MODIFY()
> spi: amlogic-spisg: Use FIELD_MODIFY()
> spi: cadence-xspi: Use FIELD_MODIFY()
> spi: meson-spicc: Use FIELD_MODIFY()
> spi: nxp-xspi: Use FIELD_MODIFY()
> spi: sn-f-ospi: Use FIELD_MODIFY()
> spi: stm32-ospi: Use FIELD_MODIFY()
> spi: stm32-qspi: Use FIELD_MODIFY()
> spi: sunplus-sp7021: Use FIELD_MODIFY()
> spi: uniphier: Use FIELD_MODIFY()
>
> drivers/spi/spi-amlogic-spifc-a1.c | 5 ++---
> drivers/spi/spi-amlogic-spisg.c | 13 +++++--------
> drivers/spi/spi-cadence-xspi.c | 3 +--
> drivers/spi/spi-meson-spicc.c | 5 ++---
> drivers/spi/spi-nxp-xspi.c | 12 ++++--------
> drivers/spi/spi-sn-f-ospi.c | 5 ++---
> drivers/spi/spi-stm32-ospi.c | 7 +++----
> drivers/spi/spi-stm32-qspi.c | 5 ++---
> drivers/spi/spi-sunplus-sp7021.c | 3 +--
> drivers/spi/spi-uniphier.c | 13 +++++--------
> 10 files changed, 27 insertions(+), 44 deletions(-)
>
>
> base-commit: 3b3bea6d4b9c162f9e555905d96b8c1da67ecd5b
^ permalink raw reply [flat|nested] 15+ messages in thread* Re: [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations
2026-05-01 8:30 ` [PATCH 00/10] spi: Use FIELD_MODIFY() for bitfield operations David Laight
@ 2026-05-05 4:23 ` Hans Zhang
0 siblings, 0 replies; 15+ messages in thread
From: Hans Zhang @ 2026-05-05 4:23 UTC (permalink / raw)
To: David Laight
Cc: broonie, sunny.luo, xianwei.zhao, neil.armstrong, khilman, han.xu,
haibo.chen, mcoquelin.stm32, alexandre.torgue, lhjeff911,
hayashi.kunihiko, mhiramat, jbrunet, martin.blumenstingl,
linux-spi, linux-kernel, linux-amlogic, linux-arm-kernel, imx,
linux-stm32
On 5/1/26 16:30, David Laight wrote:
> On Thu, 30 Apr 2026 23:54:46 +0800
> Hans Zhang <18255117159@163.com> wrote:
>
>> Replace open-coded bitfield modifications with the standard FIELD_MODIFY()
>> macro across multiple SPI controller drivers. This improves readability and
>> adds compile-time checking without functional changes.
>
> I don't think these changes are worth the effort.
> The readability doesn't change much - you need to know what a slightly
> more obscure 'helper' does.
> The extra compile-time checks are pretty unlikely to ever find a problem
> and mostly just slow down the compile.
> The generated code is likely be slightly worse.
> And, with the best will in the world, it is easy to make silly mistakes.
>
> David
Hi David,
FIELD_MODIFY() is a standard kernel helper (bitfield.h), not an obscure
one. My recent power domain series using similar patterns was accepted:
https://patchwork.kernel.org/project/linux-pm/cover/20260430163213.44695-1-18255117159@163.com/
The PCIe maintainer also values this kind of code simplification, which
encouraged me to send these SPI patches.
The macro offers compile-time overflow checks, and I've verified the
generated assembly is identical (GCC/Clang). I believe the trade‑off
favours readability and safety.
If you still prefer to keep the open‑coded versions, I'll drop the
series. Please let me know.
Best regards,
Hans
>
>>
>> Each patch modifies a single driver, allowing independent review and
>> application.
>>
>> Hans Zhang (10):
>> spi: amlogic-spifc-a1: Use FIELD_MODIFY()
>> spi: amlogic-spisg: Use FIELD_MODIFY()
>> spi: cadence-xspi: Use FIELD_MODIFY()
>> spi: meson-spicc: Use FIELD_MODIFY()
>> spi: nxp-xspi: Use FIELD_MODIFY()
>> spi: sn-f-ospi: Use FIELD_MODIFY()
>> spi: stm32-ospi: Use FIELD_MODIFY()
>> spi: stm32-qspi: Use FIELD_MODIFY()
>> spi: sunplus-sp7021: Use FIELD_MODIFY()
>> spi: uniphier: Use FIELD_MODIFY()
>>
>> drivers/spi/spi-amlogic-spifc-a1.c | 5 ++---
>> drivers/spi/spi-amlogic-spisg.c | 13 +++++--------
>> drivers/spi/spi-cadence-xspi.c | 3 +--
>> drivers/spi/spi-meson-spicc.c | 5 ++---
>> drivers/spi/spi-nxp-xspi.c | 12 ++++--------
>> drivers/spi/spi-sn-f-ospi.c | 5 ++---
>> drivers/spi/spi-stm32-ospi.c | 7 +++----
>> drivers/spi/spi-stm32-qspi.c | 5 ++---
>> drivers/spi/spi-sunplus-sp7021.c | 3 +--
>> drivers/spi/spi-uniphier.c | 13 +++++--------
>> 10 files changed, 27 insertions(+), 44 deletions(-)
>>
>>
>> base-commit: 3b3bea6d4b9c162f9e555905d96b8c1da67ecd5b
^ permalink raw reply [flat|nested] 15+ messages in thread