hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/spi/spi-fsl-dspi.c
....@@ -975,7 +975,9 @@
975975 static int dspi_setup(struct spi_device *spi)
976976 {
977977 struct fsl_dspi *dspi = spi_controller_get_devdata(spi->controller);
978
+ u32 period_ns = DIV_ROUND_UP(NSEC_PER_SEC, spi->max_speed_hz);
978979 unsigned char br = 0, pbr = 0, pcssck = 0, cssck = 0;
980
+ u32 quarter_period_ns = DIV_ROUND_UP(period_ns, 4);
979981 u32 cs_sck_delay = 0, sck_cs_delay = 0;
980982 struct fsl_dspi_platform_data *pdata;
981983 unsigned char pasc = 0, asc = 0;
....@@ -1003,6 +1005,19 @@
10031005 sck_cs_delay = pdata->sck_cs_delay;
10041006 }
10051007
1008
+ /* Since tCSC and tASC apply to continuous transfers too, avoid SCK
1009
+ * glitches of half a cycle by never allowing tCSC + tASC to go below
1010
+ * half a SCK period.
1011
+ */
1012
+ if (cs_sck_delay < quarter_period_ns)
1013
+ cs_sck_delay = quarter_period_ns;
1014
+ if (sck_cs_delay < quarter_period_ns)
1015
+ sck_cs_delay = quarter_period_ns;
1016
+
1017
+ dev_dbg(&spi->dev,
1018
+ "DSPI controller timing params: CS-to-SCK delay %u ns, SCK-to-CS delay %u ns\n",
1019
+ cs_sck_delay, sck_cs_delay);
1020
+
10061021 clkrate = clk_get_rate(dspi->clk);
10071022 hz_to_spi_baud(&pbr, &br, spi->max_speed_hz, clkrate);
10081023