Skip to content

Instantly share code, notes, and snippets.

@macromorgan
Created March 1, 2021 17:10
Show Gist options
  • Select an option

  • Save macromorgan/76b6d057d46ee361cb97c24a6aae84f8 to your computer and use it in GitHub Desktop.

Select an option

Save macromorgan/76b6d057d46ee361cb97c24a6aae84f8 to your computer and use it in GitHub Desktop.
Add XT25F128B Support
From 0de196e1af6d853bd362cc23edbdf76ff4614d8b Mon Sep 17 00:00:00 2001
From: Chris Morgan <[email protected]>
Date: Mon, 1 Mar 2021 10:51:21 -0600
Subject: [PATCH] Add xtx flash chips
---
drivers/mtd/spi-nor/Makefile | 1 +
drivers/mtd/spi-nor/core.c | 1 +
drivers/mtd/spi-nor/core.h | 1 +
drivers/mtd/spi-nor/xtx.c | 53 ++++++++++++++++++++++++++++++++++++
4 files changed, 56 insertions(+)
create mode 100644 drivers/mtd/spi-nor/xtx.c
diff --git a/drivers/mtd/spi-nor/Makefile b/drivers/mtd/spi-nor/Makefile
index 653923896205..3f7a52d7fa0b 100644
--- a/drivers/mtd/spi-nor/Makefile
+++ b/drivers/mtd/spi-nor/Makefile
@@ -17,6 +17,7 @@ spi-nor-objs += sst.o
spi-nor-objs += winbond.o
spi-nor-objs += xilinx.o
spi-nor-objs += xmc.o
+spi-nor-objs += xtx.o
obj-$(CONFIG_MTD_SPI_NOR) += spi-nor.o
obj-$(CONFIG_MTD_SPI_NOR) += controllers/
diff --git a/drivers/mtd/spi-nor/core.c b/drivers/mtd/spi-nor/core.c
index 0522304f52fa..9a89ec473e4b 100644
--- a/drivers/mtd/spi-nor/core.c
+++ b/drivers/mtd/spi-nor/core.c
@@ -2215,6 +2215,7 @@ static const struct spi_nor_manufacturer *manufacturers[] = {
&spi_nor_winbond,
&spi_nor_xilinx,
&spi_nor_xmc,
+ &spi_nor_xtx,
};
static const struct flash_info *
diff --git a/drivers/mtd/spi-nor/core.h b/drivers/mtd/spi-nor/core.h
index 4a3f7f150b5d..ee0e45eaffcd 100644
--- a/drivers/mtd/spi-nor/core.h
+++ b/drivers/mtd/spi-nor/core.h
@@ -425,6 +425,7 @@ extern const struct spi_nor_manufacturer spi_nor_sst;
extern const struct spi_nor_manufacturer spi_nor_winbond;
extern const struct spi_nor_manufacturer spi_nor_xilinx;
extern const struct spi_nor_manufacturer spi_nor_xmc;
+extern const struct spi_nor_manufacturer spi_nor_xtx;
void spi_nor_spimem_setup_op(const struct spi_nor *nor,
struct spi_mem_op *op,
diff --git a/drivers/mtd/spi-nor/xtx.c b/drivers/mtd/spi-nor/xtx.c
new file mode 100644
index 000000000000..43fdbc3144ca
--- /dev/null
+++ b/drivers/mtd/spi-nor/xtx.c
@@ -0,0 +1,53 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2021, Chris Morgan <[email protected]>
+ * Based on XMC SPI NOR module
+ * Copyright (C) 2005, Intec Automation Inc.
+ * Copyright (C) 2014, Freescale Semiconductor, Inc.
+ */
+
+#include <linux/mtd/spi-nor.h>
+
+#include "core.h"
+
+static const struct flash_info xtx_parts[] = {
+ /* XTX (XTX Technology Limited) */
+ { "XT25F128B", INFO(0x0b4018, 0, 64 * 1024, 256,
+ SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ |
+ SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) },
+};
+
+static int xtx_set_4byte_addr_mode(struct spi_nor *nor, bool enable)
+{
+ int ret;
+
+ ret = spi_nor_set_4byte_addr_mode(nor, enable);
+ if (ret || enable)
+ return ret;
+
+ ret = spi_nor_write_enable(nor);
+ if (ret)
+ return ret;
+
+ ret = spi_nor_write_ear(nor, 0);
+ if (ret)
+ return ret;
+
+ return spi_nor_write_disable(nor);
+}
+
+static void xtx_default_init(struct spi_nor *nor)
+{
+ nor->params->set_4byte_addr_mode = xtx_set_4byte_addr_mode;
+}
+
+static const struct spi_nor_fixups xtx_fixups = {
+ .default_init = xtx_default_init,
+};
+
+const struct spi_nor_manufacturer spi_nor_xtx = {
+ .name = "xtx",
+ .parts = xtx_parts,
+ .nparts = ARRAY_SIZE(xtx_parts),
+// .fixups = &xtx_fixups,
+};
--
2.25.1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment