mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-17 18:30:24 +00:00
869d72e988
Backport patches for support of generic spi-nor from SFDP data for kernel 6.1. Kernel 5.15 have major rework of the info flags and it's not trustable to backport this amount of changes and expect correct function of it. All affected patches automatically refreshed using make target/linux/refresh. Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
58 lines
1.6 KiB
Diff
58 lines
1.6 KiB
Diff
From f3fe3b15eca7908eaac57f9b8387a5dbc45ec5b2 Mon Sep 17 00:00:00 2001
|
|
From: "SkyLake.Huang" <skylake.huang@mediatek.com>
|
|
Date: Thu, 23 Jun 2022 18:40:59 +0800
|
|
Subject: [PATCH 6/6] drivers: mtd: spi-nor: Add calibration support for
|
|
spi-nor
|
|
|
|
Signed-off-by: SkyLake.Huang <skylake.huang@mediatek.com>
|
|
---
|
|
drivers/mtd/nand/spi/core.c | 5 ++++-
|
|
drivers/mtd/spi-nor/core.c | 15 +++++++++++++++
|
|
2 files changed, 19 insertions(+), 1 deletion(-)
|
|
|
|
--- a/drivers/mtd/nand/spi/core.c
|
|
+++ b/drivers/mtd/nand/spi/core.c
|
|
@@ -1019,7 +1019,10 @@ int spinand_cal_read(void *priv, u32 *ad
|
|
if (ret)
|
|
return ret;
|
|
|
|
- ret = spinand_wait(spinand, &status);
|
|
+ ret = spinand_wait(spinand,
|
|
+ SPINAND_READ_INITIAL_DELAY_US,
|
|
+ SPINAND_READ_POLL_DELAY_US,
|
|
+ &status);
|
|
if (ret < 0)
|
|
return ret;
|
|
|
|
--- a/drivers/mtd/spi-nor/core.c
|
|
+++ b/drivers/mtd/spi-nor/core.c
|
|
@@ -2922,6 +2922,18 @@ static const struct flash_info *spi_nor_
|
|
return NULL;
|
|
}
|
|
|
|
+static int spi_nor_cal_read(void *priv, u32 *addr, int addrlen, u8 *buf, int readlen)
|
|
+{
|
|
+ struct spi_nor *nor = (struct spi_nor *)priv;
|
|
+
|
|
+ nor->reg_proto = SNOR_PROTO_1_1_1;
|
|
+ nor->read_proto = SNOR_PROTO_1_1_1;
|
|
+ nor->read_opcode = SPINOR_OP_READ;
|
|
+ nor->read_dummy = 0;
|
|
+
|
|
+ return nor->controller_ops->read(nor, *addr, readlen, buf);
|
|
+}
|
|
+
|
|
static const struct flash_info *spi_nor_get_flash_info(struct spi_nor *nor,
|
|
const char *name)
|
|
{
|
|
@@ -3025,6 +3037,9 @@ int spi_nor_scan(struct spi_nor *nor, co
|
|
if (!nor->bouncebuf)
|
|
return -ENOMEM;
|
|
|
|
+ if(nor->spimem)
|
|
+ spi_mem_do_calibration(nor->spimem, spi_nor_cal_read, nor);
|
|
+
|
|
info = spi_nor_get_flash_info(nor, name);
|
|
if (IS_ERR(info))
|
|
return PTR_ERR(info);
|