[openwrt/openwrt] kernel/mediatek: 6.12: adapt SPI calibration

LEDE Commits lede-commits at lists.infradead.org
Mon May 26 08:58:49 PDT 2025


dangole pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/25ee5081fa9d7d782420c1bf4ab2595df1fdf122

commit 25ee5081fa9d7d782420c1bf4ab2595df1fdf122
Author: Daniel Golle <daniel at makrotopia.org>
AuthorDate: Sat May 17 22:15:28 2025 +0100

    kernel/mediatek: 6.12: adapt SPI calibration
    
    Fix build of downstream SPI calibration on Filogic SoCs for Linux 6.12.
    
    Signed-off-by: Daniel Golle <daniel at makrotopia.org>
---
 ...-mt65xx-Move-chip_config-to-driver-s-priv.patch | 37 +++++++++++-----------
 ...s-spi-Add-support-for-dynamic-calibration.patch | 20 ++++++------
 ...-drivers-spi-mem-Add-spi-calibration-hook.patch |  6 ++--
 ...-mt65xx-Add-controller-s-calibration-para.patch | 22 ++++++-------
 ...-spinand-Add-calibration-support-for-spin.patch | 10 +++---
 ...-spi-nor-Add-calibration-support-for-spi-.patch |  8 ++---
 6 files changed, 52 insertions(+), 51 deletions(-)

diff --git a/target/linux/mediatek/patches-6.12/431-drivers-spi-mt65xx-Move-chip_config-to-driver-s-priv.patch b/target/linux/mediatek/patches-6.12/431-drivers-spi-mt65xx-Move-chip_config-to-driver-s-priv.patch
index 9629dd8519..74e9bd9d7a 100644
--- a/target/linux/mediatek/patches-6.12/431-drivers-spi-mt65xx-Move-chip_config-to-driver-s-priv.patch
+++ b/target/linux/mediatek/patches-6.12/431-drivers-spi-mt65xx-Move-chip_config-to-driver-s-priv.patch
@@ -1,4 +1,4 @@
-From bfd3acc428085742d754a6d328d1a93ebf9451df Mon Sep 17 00:00:00 2001
+From bfa7cf42e610d820b935b4805aa80484d591cb1f Mon Sep 17 00:00:00 2001
 From: "SkyLake.Huang" <skylake.huang at mediatek.com>
 Date: Thu, 23 Jun 2022 18:29:51 +0800
 Subject: [PATCH 1/6] drivers: spi-mt65xx: Move chip_config to driver's private
@@ -6,22 +6,22 @@ Subject: [PATCH 1/6] drivers: spi-mt65xx: Move chip_config to driver's private
 
 Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
 ---
- drivers/spi/spi-mt65xx.c                 | 29 +++++++++---------------
+ drivers/spi/spi-mt65xx.c                 | 28 ++++++++++--------------
  include/linux/platform_data/spi-mt65xx.h | 17 --------------
- 2 files changed, 11 insertions(+), 35 deletions(-)
+ 2 files changed, 11 insertions(+), 34 deletions(-)
  delete mode 100644 include/linux/platform_data/spi-mt65xx.h
 
 --- a/drivers/spi/spi-mt65xx.c
 +++ b/drivers/spi/spi-mt65xx.c
-@@ -14,7 +14,6 @@
- #include <linux/of.h>
+@@ -15,7 +15,6 @@
  #include <linux/gpio/consumer.h>
+ #include <linux/pinctrl/consumer.h>
  #include <linux/platform_device.h>
 -#include <linux/platform_data/spi-mt65xx.h>
  #include <linux/pm_runtime.h>
  #include <linux/spi/spi.h>
  #include <linux/spi/spi-mem.h>
-@@ -171,6 +170,8 @@ struct mtk_spi {
+@@ -172,6 +171,8 @@ struct mtk_spi {
  	struct device *dev;
  	dma_addr_t tx_dma;
  	dma_addr_t rx_dma;
@@ -30,7 +30,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  };
  
  static const struct mtk_spi_compatible mtk_common_compat;
-@@ -216,15 +217,6 @@ static const struct mtk_spi_compatible m
+@@ -217,15 +218,6 @@ static const struct mtk_spi_compatible m
  	.no_need_unprepare = true,
  };
  
@@ -46,15 +46,15 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  static const struct of_device_id mtk_spi_of_match[] = {
  	{ .compatible = "mediatek,spi-ipm",
  		.data = (void *)&mtk_ipm_compat,
-@@ -352,7 +344,6 @@ static int mtk_spi_hw_init(struct spi_ma
+@@ -353,7 +345,6 @@ static int mtk_spi_hw_init(struct spi_co
  {
  	u16 cpha, cpol;
  	u32 reg_val;
 -	struct mtk_chip_config *chip_config = spi->controller_data;
- 	struct mtk_spi *mdata = spi_master_get_devdata(master);
+ 	struct mtk_spi *mdata = spi_controller_get_devdata(host);
  
  	cpha = spi->mode & SPI_CPHA ? 1 : 0;
-@@ -402,7 +393,7 @@ static int mtk_spi_hw_init(struct spi_ma
+@@ -403,7 +394,7 @@ static int mtk_spi_hw_init(struct spi_co
  		else
  			reg_val &= ~SPI_CMD_CS_POL;
  
@@ -63,7 +63,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  			reg_val |= SPI_CMD_SAMPLE_SEL;
  		else
  			reg_val &= ~SPI_CMD_SAMPLE_SEL;
-@@ -429,20 +420,20 @@ static int mtk_spi_hw_init(struct spi_ma
+@@ -430,20 +421,20 @@ static int mtk_spi_hw_init(struct spi_co
  		if (mdata->dev_comp->ipm_design) {
  			reg_val = readl(mdata->base + SPI_CMD_REG);
  			reg_val &= ~SPI_CMD_IPM_GET_TICKDLY_MASK;
@@ -87,9 +87,9 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  			    << SPI_CFG1_GET_TICK_DLY_OFFSET_V1);
  		writel(reg_val, mdata->base + SPI_CFG1_REG);
  	}
-@@ -732,9 +723,6 @@ static int mtk_spi_setup(struct spi_devi
+@@ -733,9 +724,6 @@ static int mtk_spi_setup(struct spi_devi
  {
- 	struct mtk_spi *mdata = spi_master_get_devdata(spi->master);
+ 	struct mtk_spi *mdata = spi_controller_get_devdata(spi->controller);
  
 -	if (!spi->controller_data)
 -		spi->controller_data = (void *)&mtk_default_chip_info;
@@ -97,17 +97,18 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  	if (mdata->dev_comp->need_pad_sel && spi_get_csgpiod(spi, 0))
  		/* CS de-asserted, gpiolib will handle inversion */
  		gpiod_direction_output(spi_get_csgpiod(spi, 0), 0);
-@@ -1140,6 +1128,10 @@ static int mtk_spi_probe(struct platform
- 	mdata = spi_master_get_devdata(master);
- 	mdata->dev_comp = device_get_match_data(dev);
+@@ -1146,6 +1134,11 @@ static int mtk_spi_probe(struct platform
+ 	host->use_gpio_descriptors = true;
  
+ 	mdata = spi_controller_get_devdata(host);
++
 +	/* Set device configs to default first. Calibrate it later. */
 +	mdata->sample_sel = 0;
 +	mdata->get_tick_dly = 2;
 +
- 	if (mdata->dev_comp->enhance_timing)
- 		master->mode_bits |= SPI_CS_HIGH;
+ 	mdata->dev_comp = device_get_match_data(dev);
  
+ 	if (mdata->dev_comp->enhance_timing)
 --- a/include/linux/platform_data/spi-mt65xx.h
 +++ /dev/null
 @@ -1,17 +0,0 @@
diff --git a/target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch b/target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch
index 7ff7b05301..4c5fdbbf0a 100644
--- a/target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch
+++ b/target/linux/mediatek/patches-6.12/432-drivers-spi-Add-support-for-dynamic-calibration.patch
@@ -1,4 +1,4 @@
-From 2ade0172154e50c8a2bfd8634c6eff943cffea29 Mon Sep 17 00:00:00 2001
+From aaff78437f09d4b86da84ce5983fb7c5be0538d2 Mon Sep 17 00:00:00 2001
 From: "SkyLake.Huang" <skylake.huang at mediatek.com>
 Date: Thu, 23 Jun 2022 18:35:52 +0800
 Subject: [PATCH 2/6] drivers: spi: Add support for dynamic calibration
@@ -11,7 +11,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
 
 --- a/drivers/spi/spi.c
 +++ b/drivers/spi/spi.c
-@@ -1380,6 +1380,70 @@ static int spi_transfer_wait(struct spi_
+@@ -1494,6 +1494,70 @@ static int spi_transfer_wait(struct spi_
  	return 0;
  }
  
@@ -82,7 +82,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  static void _spi_transfer_delay_ns(u32 ns)
  {
  	if (!ns)
-@@ -2225,6 +2289,75 @@ void spi_flush_queue(struct spi_controll
+@@ -2352,6 +2416,75 @@ void spi_flush_queue(struct spi_controll
  /*-------------------------------------------------------------------------*/
  
  #if defined(CONFIG_OF)
@@ -158,7 +158,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  static void of_spi_parse_dt_cs_delay(struct device_node *nc,
  				     struct spi_delay *delay, const char *prop)
  {
-@@ -2364,6 +2497,10 @@ of_register_spi_device(struct spi_contro
+@@ -2516,6 +2649,10 @@ of_register_spi_device(struct spi_contro
  	if (rc)
  		goto err_out;
  
@@ -171,7 +171,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  
 --- a/include/linux/spi/spi.h
 +++ b/include/linux/spi/spi.h
-@@ -330,6 +330,40 @@ struct spi_driver {
+@@ -351,6 +351,40 @@ struct spi_driver {
  	struct device_driver	driver;
  };
  
@@ -209,10 +209,10 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
 +	struct list_head list;
 +};
 +
- static inline struct spi_driver *to_spi_driver(struct device_driver *drv)
- {
- 	return drv ? container_of(drv, struct spi_driver, driver) : NULL;
-@@ -727,6 +761,11 @@ struct spi_controller {
+ #define to_spi_driver(__drv)   \
+ 	( __drv ? container_of_const(__drv, struct spi_driver, driver) : NULL )
+ 
+@@ -757,6 +791,11 @@ struct spi_controller {
  	void			*dummy_rx;
  	void			*dummy_tx;
  
@@ -224,7 +224,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  	int (*fw_translate_cs)(struct spi_controller *ctlr, unsigned cs);
  
  	/*
-@@ -1601,6 +1640,9 @@ spi_register_board_info(struct spi_board
+@@ -1660,6 +1699,9 @@ spi_register_board_info(struct spi_board
  	{ return 0; }
  #endif
  
diff --git a/target/linux/mediatek/patches-6.12/433-drivers-spi-mem-Add-spi-calibration-hook.patch b/target/linux/mediatek/patches-6.12/433-drivers-spi-mem-Add-spi-calibration-hook.patch
index d9fe480b17..e8377f5c4c 100644
--- a/target/linux/mediatek/patches-6.12/433-drivers-spi-mem-Add-spi-calibration-hook.patch
+++ b/target/linux/mediatek/patches-6.12/433-drivers-spi-mem-Add-spi-calibration-hook.patch
@@ -1,4 +1,4 @@
-From 06640a5da2973318c06e516da16a5b579622e7c5 Mon Sep 17 00:00:00 2001
+From fa0aaf2a0532053b925f6fbb9c8d0e516370fb68 Mon Sep 17 00:00:00 2001
 From: "SkyLake.Huang" <skylake.huang at mediatek.com>
 Date: Thu, 23 Jun 2022 18:37:55 +0800
 Subject: [PATCH 3/6] drivers: spi-mem: Add spi calibration hook
@@ -11,7 +11,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
 
 --- a/drivers/spi/spi-mem.c
 +++ b/drivers/spi/spi-mem.c
-@@ -419,6 +419,14 @@ int spi_mem_exec_op(struct spi_mem *mem,
+@@ -466,6 +466,14 @@ int spi_mem_exec_op(struct spi_mem *mem,
  }
  EXPORT_SYMBOL_GPL(spi_mem_exec_op);
  
@@ -28,7 +28,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
   *			upper layer if necessary
 --- a/include/linux/spi/spi-mem.h
 +++ b/include/linux/spi/spi-mem.h
-@@ -370,6 +370,10 @@ bool spi_mem_supports_op(struct spi_mem
+@@ -372,6 +372,10 @@ bool spi_mem_supports_op(struct spi_mem
  int spi_mem_exec_op(struct spi_mem *mem,
  		    const struct spi_mem_op *op);
  
diff --git a/target/linux/mediatek/patches-6.12/434-drivers-spi-mt65xx-Add-controller-s-calibration-para.patch b/target/linux/mediatek/patches-6.12/434-drivers-spi-mt65xx-Add-controller-s-calibration-para.patch
index dbdb1947aa..a7815d5ead 100644
--- a/target/linux/mediatek/patches-6.12/434-drivers-spi-mt65xx-Add-controller-s-calibration-para.patch
+++ b/target/linux/mediatek/patches-6.12/434-drivers-spi-mt65xx-Add-controller-s-calibration-para.patch
@@ -1,4 +1,4 @@
-From d278c7a0bf730318a7ccf8d0a8b434c813e23fd0 Mon Sep 17 00:00:00 2001
+From 655dfc90d438a8e223317f197b888a92de3df3a1 Mon Sep 17 00:00:00 2001
 From: "SkyLake.Huang" <skylake.huang at mediatek.com>
 Date: Thu, 23 Jun 2022 18:39:03 +0800
 Subject: [PATCH 4/6] drivers: spi-mt65xx: Add controller's calibration
@@ -11,14 +11,14 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
 
 --- a/drivers/spi/spi-mt65xx.c
 +++ b/drivers/spi/spi-mt65xx.c
-@@ -834,6 +834,21 @@ static irqreturn_t mtk_spi_interrupt(int
- 	return IRQ_HANDLED;
+@@ -842,6 +842,21 @@ static irqreturn_t mtk_spi_interrupt(int
+ 	return IRQ_WAKE_THREAD;
  }
  
 +static int mtk_spi_append_caldata(struct spi_controller *ctlr)
 +{
 +	struct spi_cal_target *cal_target = kmalloc(sizeof(*cal_target), GFP_KERNEL);
-+	struct mtk_spi *mdata = spi_master_get_devdata(ctlr);
++	struct mtk_spi *mdata = spi_controller_get_devdata(ctlr);
 +
 +	cal_target->cal_item = &mdata->get_tick_dly;
 +	cal_target->cal_min = 0;
@@ -33,11 +33,11 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  static int mtk_spi_mem_adjust_op_size(struct spi_mem *mem,
  				      struct spi_mem_op *op)
  {
-@@ -1124,6 +1139,7 @@ static int mtk_spi_probe(struct platform
- 	master->setup = mtk_spi_setup;
- 	master->set_cs_timing = mtk_spi_set_hw_cs_timing;
- 	master->use_gpio_descriptors = true;
-+	master->append_caldata = mtk_spi_append_caldata;
+@@ -1132,6 +1147,7 @@ static int mtk_spi_probe(struct platform
+ 	host->setup = mtk_spi_setup;
+ 	host->set_cs_timing = mtk_spi_set_hw_cs_timing;
+ 	host->use_gpio_descriptors = true;
++	host->append_caldata = mtk_spi_append_caldata;
+ 
+ 	mdata = spi_controller_get_devdata(host);
  
- 	mdata = spi_master_get_devdata(master);
- 	mdata->dev_comp = device_get_match_data(dev);
diff --git a/target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch b/target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch
index 50149fd819..eda2d8366a 100644
--- a/target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch
+++ b/target/linux/mediatek/patches-6.12/435-drivers-mtd-spinand-Add-calibration-support-for-spin.patch
@@ -1,4 +1,4 @@
-From 7670ec4a14891a1a182b98a9c403ffbf6b49e4b1 Mon Sep 17 00:00:00 2001
+From eef758fee8d25f56086eaaf7df1edb19929ced1a Mon Sep 17 00:00:00 2001
 From: "SkyLake.Huang" <skylake.huang at mediatek.com>
 Date: Thu, 23 Jun 2022 18:39:56 +0800
 Subject: [PATCH 5/6] drivers: mtd: spinand: Add calibration support for
@@ -11,11 +11,11 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
 
 --- a/drivers/mtd/nand/spi/core.c
 +++ b/drivers/mtd/nand/spi/core.c
-@@ -980,6 +980,56 @@ static int spinand_manufacturer_match(st
- 	return -ENOTSUPP;
+@@ -1152,6 +1152,56 @@ static int spinand_manufacturer_match(st
+ 	return -EOPNOTSUPP;
  }
  
-+int spinand_cal_read(void *priv, u32 *addr, int addrlen, u8 *buf, int readlen) {
++static int spinand_cal_read(void *priv, u32 *addr, int addrlen, u8 *buf, int readlen) {
 +	struct spinand_device *spinand = (struct spinand_device *)priv;
 +	struct device *dev = &spinand->spimem->spi->dev;
 +	struct spi_mem_op op = SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, buf, readlen);
@@ -68,7 +68,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  static int spinand_id_detect(struct spinand_device *spinand)
  {
  	u8 *id = spinand->id.data;
-@@ -1230,6 +1280,10 @@ static int spinand_init(struct spinand_d
+@@ -1403,6 +1453,10 @@ static int spinand_init(struct spinand_d
  	if (!spinand->scratchbuf)
  		return -ENOMEM;
  
diff --git a/target/linux/mediatek/patches-6.12/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch b/target/linux/mediatek/patches-6.12/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch
index 27c5dfd5d6..4cc43333cd 100644
--- a/target/linux/mediatek/patches-6.12/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch
+++ b/target/linux/mediatek/patches-6.12/436-drivers-mtd-spi-nor-Add-calibration-support-for-spi-.patch
@@ -1,4 +1,4 @@
-From f3fe3b15eca7908eaac57f9b8387a5dbc45ec5b2 Mon Sep 17 00:00:00 2001
+From 7ec7de94c87654e6cc3f8f604b2f65c003f3e5dc Mon Sep 17 00:00:00 2001
 From: "SkyLake.Huang" <skylake.huang at mediatek.com>
 Date: Thu, 23 Jun 2022 18:40:59 +0800
 Subject: [PATCH 6/6] drivers: mtd: spi-nor: Add calibration support for
@@ -12,7 +12,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
 
 --- a/drivers/mtd/nand/spi/core.c
 +++ b/drivers/mtd/nand/spi/core.c
-@@ -1021,7 +1021,10 @@ int spinand_cal_read(void *priv, u32 *ad
+@@ -1193,7 +1193,10 @@ static int spinand_cal_read(void *priv,
  	if (ret)
  		return ret;
  
@@ -26,7 +26,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  
 --- a/drivers/mtd/spi-nor/core.c
 +++ b/drivers/mtd/spi-nor/core.c
-@@ -3378,6 +3378,18 @@ static const struct flash_info *spi_nor_
+@@ -3300,6 +3300,18 @@ static const struct flash_info *spi_nor_
  	return NULL;
  }
  
@@ -45,7 +45,7 @@ Signed-off-by: SkyLake.Huang <skylake.huang at mediatek.com>
  static const struct flash_info *spi_nor_get_flash_info(struct spi_nor *nor,
  						       const char *name)
  {
-@@ -3506,6 +3518,9 @@ int spi_nor_scan(struct spi_nor *nor, co
+@@ -3474,6 +3486,9 @@ int spi_nor_scan(struct spi_nor *nor, co
  	if (ret)
  		return ret;
  




More information about the lede-commits mailing list