* [PATCH 1/2] spi: make spi-mem driver usable without CONFIG_DM_SPI, drop NODM variant
@ 2020-06-22 15:54 Mikhail Kshevetskiy
2020-06-22 15:54 ` [PATCH 2/2] mtd: make spinand driver usable without CONFIG_DM Mikhail Kshevetskiy
0 siblings, 1 reply; 5+ messages in thread
From: Mikhail Kshevetskiy @ 2020-06-22 15:54 UTC (permalink / raw)
To: u-boot
From: Ivan Morozko <Ivan.Morozko@oktetlabs.ru>
There is no reason to have a separate and highly restricted version of
spi-mem driver for NODM case, it's quite easily fix DM based driver
version and use it for all cases.
Signed-off-by: Ivan Morozko <Ivan.Morozko@oktetlabs.ru>
Reviewed-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@oktetlabs.ru>
---
drivers/spi/Makefile | 3 +-
drivers/spi/spi-mem-nodm.c | 107 -------------------------------------
drivers/spi/spi-mem.c | 37 ++++++++-----
include/spi.h | 1 +
4 files changed, 26 insertions(+), 122 deletions(-)
delete mode 100644 drivers/spi/spi-mem-nodm.c
diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
index 54881a7412..6dff4eed83 100644
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -8,12 +8,11 @@ ifdef CONFIG_DM_SPI
obj-y += spi-uclass.o
obj-$(CONFIG_SANDBOX) += spi-emul-uclass.o
obj-$(CONFIG_SOFT_SPI) += soft_spi.o
-obj-$(CONFIG_SPI_MEM) += spi-mem.o
obj-$(CONFIG_TI_QSPI) += ti_qspi.o
else
obj-y += spi.o
-obj-$(CONFIG_SPI_MEM) += spi-mem-nodm.o
endif
+obj-$(CONFIG_SPI_MEM) += spi-mem.o
obj-$(CONFIG_ALTERA_SPI) += altera_spi.o
obj-$(CONFIG_ATH79_SPI) += ath79_spi.o
diff --git a/drivers/spi/spi-mem-nodm.c b/drivers/spi/spi-mem-nodm.c
deleted file mode 100644
index 765f05fe54..0000000000
--- a/drivers/spi/spi-mem-nodm.c
+++ /dev/null
@@ -1,107 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0+
-/*
- * Copyright (C) 2018 Texas Instruments Incorporated - http://www.ti.com/
- */
-
-#include <log.h>
-#include <malloc.h>
-#include <spi.h>
-#include <spi-mem.h>
-
-int spi_mem_exec_op(struct spi_slave *slave,
- const struct spi_mem_op *op)
-{
- unsigned int pos = 0;
- const u8 *tx_buf = NULL;
- u8 *rx_buf = NULL;
- u8 *op_buf;
- int op_len;
- u32 flag;
- int ret;
- int i;
-
- if (op->data.nbytes) {
- if (op->data.dir == SPI_MEM_DATA_IN)
- rx_buf = op->data.buf.in;
- else
- tx_buf = op->data.buf.out;
- }
-
- op_len = sizeof(op->cmd.opcode) + op->addr.nbytes + op->dummy.nbytes;
- op_buf = calloc(1, op_len);
-
- ret = spi_claim_bus(slave);
- if (ret < 0)
- return ret;
-
- op_buf[pos++] = op->cmd.opcode;
-
- if (op->addr.nbytes) {
- for (i = 0; i < op->addr.nbytes; i++)
- op_buf[pos + i] = op->addr.val >>
- (8 * (op->addr.nbytes - i - 1));
-
- pos += op->addr.nbytes;
- }
-
- if (op->dummy.nbytes)
- memset(op_buf + pos, 0xff, op->dummy.nbytes);
-
- /* 1st transfer: opcode + address + dummy cycles */
- flag = SPI_XFER_BEGIN;
- /* Make sure to set END bit if no tx or rx data messages follow */
- if (!tx_buf && !rx_buf)
- flag |= SPI_XFER_END;
-
- ret = spi_xfer(slave, op_len * 8, op_buf, NULL, flag);
- if (ret)
- return ret;
-
- /* 2nd transfer: rx or tx data path */
- if (tx_buf || rx_buf) {
- ret = spi_xfer(slave, op->data.nbytes * 8, tx_buf,
- rx_buf, SPI_XFER_END);
- if (ret)
- return ret;
- }
-
- spi_release_bus(slave);
-
- for (i = 0; i < pos; i++)
- debug("%02x ", op_buf[i]);
- debug("| [%dB %s] ",
- tx_buf || rx_buf ? op->data.nbytes : 0,
- tx_buf || rx_buf ? (tx_buf ? "out" : "in") : "-");
- for (i = 0; i < op->data.nbytes; i++)
- debug("%02x ", tx_buf ? tx_buf[i] : rx_buf[i]);
- debug("[ret %d]\n", ret);
-
- free(op_buf);
-
- if (ret < 0)
- return ret;
-
- return 0;
-}
-
-int spi_mem_adjust_op_size(struct spi_slave *slave,
- struct spi_mem_op *op)
-{
- unsigned int len;
-
- len = sizeof(op->cmd.opcode) + op->addr.nbytes + op->dummy.nbytes;
- if (slave->max_write_size && len > slave->max_write_size)
- return -EINVAL;
-
- if (op->data.dir == SPI_MEM_DATA_IN && slave->max_read_size)
- op->data.nbytes = min(op->data.nbytes,
- slave->max_read_size);
- else if (slave->max_write_size)
- op->data.nbytes = min(op->data.nbytes,
- slave->max_write_size - len);
-
- if (!op->data.nbytes)
- return -EINVAL;
-
- return 0;
-}
diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
index d344701aeb..e4544edaad 100644
--- a/drivers/spi/spi-mem.c
+++ b/drivers/spi/spi-mem.c
@@ -105,6 +105,19 @@ void spi_controller_dma_unmap_mem_op_data(struct spi_controller *ctlr,
EXPORT_SYMBOL_GPL(spi_controller_dma_unmap_mem_op_data);
#endif /* __UBOOT__ */
+static inline
+struct spi_controller_mem_ops *spi_get_mem_ops(struct spi_slave *slave)
+{
+#ifdef CONFIG_DM_SPI
+ struct udevice *bus = slave->dev->parent;
+ struct dm_spi_ops *ops = spi_get_ops(bus);
+
+ return ops->mem_ops;
+#else
+ return slave->mem_ops;
+#endif
+}
+
static int spi_check_buswidth_req(struct spi_slave *slave, u8 buswidth, bool tx)
{
u32 mode = slave->mode;
@@ -181,11 +193,10 @@ EXPORT_SYMBOL_GPL(spi_mem_default_supports_op);
bool spi_mem_supports_op(struct spi_slave *slave,
const struct spi_mem_op *op)
{
- struct udevice *bus = slave->dev->parent;
- struct dm_spi_ops *ops = spi_get_ops(bus);
+ struct spi_controller_mem_ops *mem_ops = spi_get_mem_ops(slave);
- if (ops->mem_ops && ops->mem_ops->supports_op)
- return ops->mem_ops->supports_op(slave, op);
+ if (mem_ops && mem_ops->supports_op)
+ return mem_ops->supports_op(slave, op);
return spi_mem_default_supports_op(slave, op);
}
@@ -205,8 +216,7 @@ EXPORT_SYMBOL_GPL(spi_mem_supports_op);
*/
int spi_mem_exec_op(struct spi_slave *slave, const struct spi_mem_op *op)
{
- struct udevice *bus = slave->dev->parent;
- struct dm_spi_ops *ops = spi_get_ops(bus);
+ struct spi_controller_mem_ops *mem_ops = spi_get_mem_ops(slave);
unsigned int pos = 0;
const u8 *tx_buf = NULL;
u8 *rx_buf = NULL;
@@ -222,7 +232,7 @@ int spi_mem_exec_op(struct spi_slave *slave, const struct spi_mem_op *op)
if (ret < 0)
return ret;
- if (ops->mem_ops && ops->mem_ops->exec_op) {
+ if (mem_ops && mem_ops->exec_op) {
#ifndef __UBOOT__
/*
* Flush the message queue before executing our SPI memory
@@ -243,7 +253,8 @@ int spi_mem_exec_op(struct spi_slave *slave, const struct spi_mem_op *op)
mutex_lock(&ctlr->bus_lock_mutex);
mutex_lock(&ctlr->io_mutex);
#endif
- ret = ops->mem_ops->exec_op(slave, op);
+
+ ret = mem_ops->exec_op(slave, op);
#ifndef __UBOOT__
mutex_unlock(&ctlr->io_mutex);
@@ -425,13 +436,12 @@ EXPORT_SYMBOL_GPL(spi_mem_exec_op);
*/
int spi_mem_adjust_op_size(struct spi_slave *slave, struct spi_mem_op *op)
{
- struct udevice *bus = slave->dev->parent;
- struct dm_spi_ops *ops = spi_get_ops(bus);
+ struct spi_controller_mem_ops *mem_ops = spi_get_mem_ops(slave);
- if (ops->mem_ops && ops->mem_ops->adjust_op_size)
- return ops->mem_ops->adjust_op_size(slave, op);
+ if (mem_ops && mem_ops->adjust_op_size)
+ return mem_ops->adjust_op_size(slave, op);
- if (!ops->mem_ops || !ops->mem_ops->exec_op) {
+ if (!mem_ops || !mem_ops->exec_op) {
unsigned int len;
len = sizeof(op->cmd.opcode) + op->addr.nbytes +
@@ -450,6 +460,7 @@ int spi_mem_adjust_op_size(struct spi_slave *slave, struct spi_mem_op *op)
if (!op->data.nbytes)
return -EINVAL;
+
}
return 0;
diff --git a/include/spi.h b/include/spi.h
index 5cc6d6e008..825737b120 100644
--- a/include/spi.h
+++ b/include/spi.h
@@ -138,6 +138,7 @@ struct spi_slave {
#else
unsigned int bus;
unsigned int cs;
+ struct spi_controller_mem_ops *mem_ops;
#endif
uint mode;
unsigned int wordlen;
--
2.27.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] mtd: make spinand driver usable without CONFIG_DM
2020-06-22 15:54 [PATCH 1/2] spi: make spi-mem driver usable without CONFIG_DM_SPI, drop NODM variant Mikhail Kshevetskiy
@ 2020-06-22 15:54 ` Mikhail Kshevetskiy
2020-07-11 8:46 ` Jagan Teki
0 siblings, 1 reply; 5+ messages in thread
From: Mikhail Kshevetskiy @ 2020-06-22 15:54 UTC (permalink / raw)
To: u-boot
From: Mikhail Kshevetskiy <Mikhail.Kshevetskiy@oktetlabs.ru>
Here is an example of spinand driver initialization without CONFIG_DM
enabled:
void board_nand_init(void)
{
static struct spinand_device spinand;
static struct mtd_info mtd;
static struct spi_slave *slave;
int ret;
memset(&spinand, 0, sizeof(spinand));
memset(&mtd, 0, sizeof(mtd));
slave = spi_setup_slave(BUS, CS, MAX_HZ, MODE);
if (!slave) {
printf("SPI-NAND: Failed to set up SPI slave\n");
return;
}
slave->mode |= (SPI_TX_BYTE | SPI_RX_SLOW);
slave->max_read_size = SPI_MAX_READ_SIZE;
slave->max_write_size = SPI_MAX_WRITE_SIZE;
ret = spinand_probe_no_dm(&spinand, slave, &mtd);
if (!ret)
nand_register(0, &mtd);
}
Using of dual and quad wire transfer modes requires:
* dual/quad speed capable hardware (both controller and flash)
* physical presence of 4 data wires (quad mode only)
* spi controller driver MUST supports slave->mem_ops.exec_op() operations
(spi_xfer() interface will suits for single speed data transfer mode
only)
Signed-off-by: Mikhail Kshevetskiy <Mikhail.Kshevetskiy@oktetlabs.ru>
---
drivers/mtd/nand/spi/Kconfig | 2 +-
drivers/mtd/nand/spi/core.c | 46 ++++++++++++++++++++++++++++++++++++
2 files changed, 47 insertions(+), 1 deletion(-)
diff --git a/drivers/mtd/nand/spi/Kconfig b/drivers/mtd/nand/spi/Kconfig
index 0777dfdf0a..fd88e2cec9 100644
--- a/drivers/mtd/nand/spi/Kconfig
+++ b/drivers/mtd/nand/spi/Kconfig
@@ -1,6 +1,6 @@
menuconfig MTD_SPI_NAND
bool "SPI NAND device Support"
- depends on DM_MTD && DM_SPI
+ depends on (DM_MTD && DM_SPI) || (MTD && SPI)
select MTD_NAND_CORE
select SPI_MEM
help
diff --git a/drivers/mtd/nand/spi/core.c b/drivers/mtd/nand/spi/core.c
index e0ebd9c04b..a24e2e6677 100644
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
@@ -170,14 +170,22 @@ int spinand_select_target(struct spinand_device *spinand, unsigned int target)
static int spinand_init_cfg_cache(struct spinand_device *spinand)
{
struct nand_device *nand = spinand_to_nand(spinand);
+#ifdef CONFIG_DM
struct udevice *dev = spinand->slave->dev;
+#endif
unsigned int target;
int ret;
+#ifdef CONFIG_DM
spinand->cfg_cache = devm_kzalloc(dev,
sizeof(*spinand->cfg_cache) *
nand->memorg.ntargets,
GFP_KERNEL);
+#else
+ spinand->cfg_cache = kzalloc(sizeof(*spinand->cfg_cache) *
+ nand->memorg.ntargets,
+ GFP_KERNEL);
+#endif
if (!spinand->cfg_cache)
return -ENOMEM;
@@ -1135,6 +1144,7 @@ static void spinand_cleanup(struct spinand_device *spinand)
kfree(spinand->scratchbuf);
}
+#ifdef CONFIG_DM
static int spinand_probe(struct udevice *dev)
{
struct spinand_device *spinand = dev_get_priv(dev);
@@ -1187,6 +1197,40 @@ err_spinand_cleanup:
return ret;
}
+#endif /* CONFIG_DM */
+
+#ifdef __UBOOT__
+int spinand_probe_no_dm(struct spinand_device *spinand,
+ struct spi_slave *slave,
+ struct mtd_info *mtd)
+{
+ struct nand_device *nand = spinand_to_nand(spinand);
+ int ret;
+
+ nand->mtd = mtd;
+ mtd->priv = nand;
+ mtd->name = malloc(20);
+ if (!mtd->name)
+ return -ENOMEM;
+ sprintf(mtd->name, "spi-nand%d", spi_nand_idx++);
+ spinand->slave = slave;
+
+ ret = spinand_init(spinand);
+ if (ret)
+ return ret;
+
+ ret = add_mtd_device(mtd);
+ if (ret)
+ goto err_spinand_cleanup;
+
+ return 0;
+
+err_spinand_cleanup:
+ spinand_cleanup(spinand);
+
+ return ret;
+}
+#endif /* __UBOOT__ */
#ifndef __UBOOT__
static int spinand_remove(struct udevice *slave)
@@ -1238,6 +1282,7 @@ MODULE_AUTHOR("Peter Pan<peterpandong@micron.com>");
MODULE_LICENSE("GPL v2");
#endif /* __UBOOT__ */
+#ifdef CONFIG_DM
static const struct udevice_id spinand_ids[] = {
{ .compatible = "spi-nand" },
{ /* sentinel */ },
@@ -1250,3 +1295,4 @@ U_BOOT_DRIVER(spinand) = {
.priv_auto_alloc_size = sizeof(struct spinand_device),
.probe = spinand_probe,
};
+#endif /* CONFIG_DM */
--
2.27.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] mtd: make spinand driver usable without CONFIG_DM
2020-06-22 15:54 ` [PATCH 2/2] mtd: make spinand driver usable without CONFIG_DM Mikhail Kshevetskiy
@ 2020-07-11 8:46 ` Jagan Teki
2020-07-11 9:36 ` Mikhail Kshevetskiy
0 siblings, 1 reply; 5+ messages in thread
From: Jagan Teki @ 2020-07-11 8:46 UTC (permalink / raw)
To: u-boot
On Mon, Jun 22, 2020 at 9:25 PM Mikhail Kshevetskiy
<mikhail.kshevetskiy@oktetlabs.ru> wrote:
>
> From: Mikhail Kshevetskiy <Mikhail.Kshevetskiy@oktetlabs.ru>
>
> Here is an example of spinand driver initialization without CONFIG_DM
> enabled:
>
> void board_nand_init(void)
> {
> static struct spinand_device spinand;
> static struct mtd_info mtd;
> static struct spi_slave *slave;
> int ret;
>
> memset(&spinand, 0, sizeof(spinand));
> memset(&mtd, 0, sizeof(mtd));
>
> slave = spi_setup_slave(BUS, CS, MAX_HZ, MODE);
> if (!slave) {
> printf("SPI-NAND: Failed to set up SPI slave\n");
> return;
> }
>
> slave->mode |= (SPI_TX_BYTE | SPI_RX_SLOW);
> slave->max_read_size = SPI_MAX_READ_SIZE;
> slave->max_write_size = SPI_MAX_WRITE_SIZE;
>
> ret = spinand_probe_no_dm(&spinand, slave, &mtd);
> if (!ret)
> nand_register(0, &mtd);
> }
>
> Using of dual and quad wire transfer modes requires:
> * dual/quad speed capable hardware (both controller and flash)
> * physical presence of 4 data wires (quad mode only)
> * spi controller driver MUST supports slave->mem_ops.exec_op() operations
> (spi_xfer() interface will suits for single speed data transfer mode
> only)
>
> Signed-off-by: Mikhail Kshevetskiy <Mikhail.Kshevetskiy@oktetlabs.ru>
> ---
Now it's time for dm only code, better not come up with nondm anymore
as possible, please.
Jagan.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] mtd: make spinand driver usable without CONFIG_DM
2020-07-11 8:46 ` Jagan Teki
@ 2020-07-11 9:36 ` Mikhail Kshevetskiy
2020-07-11 9:45 ` Jagan Teki
0 siblings, 1 reply; 5+ messages in thread
From: Mikhail Kshevetskiy @ 2020-07-11 9:36 UTC (permalink / raw)
To: u-boot
On Sat, 11 Jul 2020 14:16:23 +0530
Jagan Teki <jagan@amarulasolutions.com> wrote:
> On Mon, Jun 22, 2020 at 9:25 PM Mikhail Kshevetskiy
> <mikhail.kshevetskiy@oktetlabs.ru> wrote:
> >
> > From: Mikhail Kshevetskiy <Mikhail.Kshevetskiy@oktetlabs.ru>
> >
> > Here is an example of spinand driver initialization without CONFIG_DM
> > enabled:
> >
> > void board_nand_init(void)
> > {
> > static struct spinand_device spinand;
> > static struct mtd_info mtd;
> > static struct spi_slave *slave;
> > int ret;
> >
> > memset(&spinand, 0, sizeof(spinand));
> > memset(&mtd, 0, sizeof(mtd));
> >
> > slave = spi_setup_slave(BUS, CS, MAX_HZ, MODE);
> > if (!slave) {
> > printf("SPI-NAND: Failed to set up SPI slave\n");
> > return;
> > }
> >
> > slave->mode |= (SPI_TX_BYTE | SPI_RX_SLOW);
> > slave->max_read_size = SPI_MAX_READ_SIZE;
> > slave->max_write_size = SPI_MAX_WRITE_SIZE;
> >
> > ret = spinand_probe_no_dm(&spinand, slave, &mtd);
> > if (!ret)
> > nand_register(0, &mtd);
> > }
> >
> > Using of dual and quad wire transfer modes requires:
> > * dual/quad speed capable hardware (both controller and flash)
> > * physical presence of 4 data wires (quad mode only)
> > * spi controller driver MUST supports slave->mem_ops.exec_op() operations
> > (spi_xfer() interface will suits for single speed data transfer mode
> > only)
> >
> > Signed-off-by: Mikhail Kshevetskiy <Mikhail.Kshevetskiy@oktetlabs.ru>
> > ---
>
> Now it's time for dm only code, better not come up with nondm anymore
> as possible, please.
>
> Jagan.
I know about it. These patches were in the queue for upstreaming from the new
year :-(
We are using 2010 and 2016 year based u-boot in our projects and due to some
reasons it's not easy to switch it to DM build. This two patches helps us with
backporting of spinand driver from upsteam u-boot. I think we are not an only
users of old u-boot in the world, so it maybe helpful for other people as well.
Just ignore these two patches if you think that NODM era is completely over.
Mikhail.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] mtd: make spinand driver usable without CONFIG_DM
2020-07-11 9:36 ` Mikhail Kshevetskiy
@ 2020-07-11 9:45 ` Jagan Teki
0 siblings, 0 replies; 5+ messages in thread
From: Jagan Teki @ 2020-07-11 9:45 UTC (permalink / raw)
To: u-boot
On Sat, Jul 11, 2020 at 3:06 PM Mikhail Kshevetskiy
<mkshevetskiy@oktetlabs.ru> wrote:
>
> On Sat, 11 Jul 2020 14:16:23 +0530
> Jagan Teki <jagan@amarulasolutions.com> wrote:
>
> > On Mon, Jun 22, 2020 at 9:25 PM Mikhail Kshevetskiy
> > <mikhail.kshevetskiy@oktetlabs.ru> wrote:
> > >
> > > From: Mikhail Kshevetskiy <Mikhail.Kshevetskiy@oktetlabs.ru>
> > >
> > > Here is an example of spinand driver initialization without CONFIG_DM
> > > enabled:
> > >
> > > void board_nand_init(void)
> > > {
> > > static struct spinand_device spinand;
> > > static struct mtd_info mtd;
> > > static struct spi_slave *slave;
> > > int ret;
> > >
> > > memset(&spinand, 0, sizeof(spinand));
> > > memset(&mtd, 0, sizeof(mtd));
> > >
> > > slave = spi_setup_slave(BUS, CS, MAX_HZ, MODE);
> > > if (!slave) {
> > > printf("SPI-NAND: Failed to set up SPI slave\n");
> > > return;
> > > }
> > >
> > > slave->mode |= (SPI_TX_BYTE | SPI_RX_SLOW);
> > > slave->max_read_size = SPI_MAX_READ_SIZE;
> > > slave->max_write_size = SPI_MAX_WRITE_SIZE;
> > >
> > > ret = spinand_probe_no_dm(&spinand, slave, &mtd);
> > > if (!ret)
> > > nand_register(0, &mtd);
> > > }
> > >
> > > Using of dual and quad wire transfer modes requires:
> > > * dual/quad speed capable hardware (both controller and flash)
> > > * physical presence of 4 data wires (quad mode only)
> > > * spi controller driver MUST supports slave->mem_ops.exec_op() operations
> > > (spi_xfer() interface will suits for single speed data transfer mode
> > > only)
> > >
> > > Signed-off-by: Mikhail Kshevetskiy <Mikhail.Kshevetskiy@oktetlabs.ru>
> > > ---
> >
> > Now it's time for dm only code, better not come up with nondm anymore
> > as possible, please.
> >
> > Jagan.
>
> I know about it. These patches were in the queue for upstreaming from the new
> year :-(
>
> We are using 2010 and 2016 year based u-boot in our projects and due to some
> reasons it's not easy to switch it to DM build. This two patches helps us with
> backporting of spinand driver from upsteam u-boot. I think we are not an only
> users of old u-boot in the world, so it maybe helpful for other people as well.
Yes, I agree with this point in terms of MTD code is a concern.
However, supporting nondm at this point look traversing in the reverse
direction as per as U-Boot development is a concern. I can guarantee
that the community is always helping to improve code if you wish to
use/migrate the mainline at any point.
>
> Just ignore these two patches if you think that NODM era is completely over.
Thanks.
Jagan.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-07-11 9:45 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-22 15:54 [PATCH 1/2] spi: make spi-mem driver usable without CONFIG_DM_SPI, drop NODM variant Mikhail Kshevetskiy
2020-06-22 15:54 ` [PATCH 2/2] mtd: make spinand driver usable without CONFIG_DM Mikhail Kshevetskiy
2020-07-11 8:46 ` Jagan Teki
2020-07-11 9:36 ` Mikhail Kshevetskiy
2020-07-11 9:45 ` Jagan Teki
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.