From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Fri, 6 Nov 2015 04:06:59 -0800 Subject: [U-Boot] [PATCH v4 1/3] dm: implement a MTD uclass In-Reply-To: <1446556146-9876-1-git-send-email-thomas@wytron.com.tw> References: <1444289667-23775-1-git-send-email-thomas@wytron.com.tw> <1446556146-9876-1-git-send-email-thomas@wytron.com.tw> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 3 November 2015 at 06:09, Thomas Chou wrote: > Implement a Memory Technology Device (MTD) uclass. It should > include most flash drivers in the future. Though no uclass ops > are defined yet, the MTD ops could be used. > > The NAND flash driver is based on MTD. The CFI flash and SPI > flash support MTD, too. It should make sense to convert them > to MTD uclass. > > Signed-off-by: Thomas Chou > --- > v3 > change to MTD uclass. > v4 > add mtd_info to flash_info in flash.h. > > drivers/mtd/Kconfig | 12 ++++++++++++ > drivers/mtd/Makefile | 1 + > drivers/mtd/mtd-uclass.c | 20 ++++++++++++++++++++ > include/dm/uclass-id.h | 1 + > include/flash.h | 3 +++ > include/linux/mtd/mtd.h | 3 +++ > include/mtd.h | 23 +++++++++++++++++++++++ > 7 files changed, 63 insertions(+) > create mode 100644 drivers/mtd/mtd-uclass.c > create mode 100644 include/mtd.h > > diff --git a/drivers/mtd/Kconfig b/drivers/mtd/Kconfig > index 59278d1..23dff48 100644 > --- a/drivers/mtd/Kconfig > +++ b/drivers/mtd/Kconfig > @@ -1,3 +1,15 @@ > +menu "MTD Support" > + > +config MTD > + bool "Enable Driver Model for MTD drivers" > + depends on DM > + help > + Enable driver model for Memory Technology Devices (MTD), such as > + flash, RAM and similar chips, often used for solid state file > + systems on embedded devices. > + > +endmenu > + > source "drivers/mtd/nand/Kconfig" > > source "drivers/mtd/spi/Kconfig" > diff --git a/drivers/mtd/Makefile b/drivers/mtd/Makefile > index a623f4c..c23c0c1 100644 > --- a/drivers/mtd/Makefile > +++ b/drivers/mtd/Makefile > @@ -8,6 +8,7 @@ > ifneq (,$(findstring y,$(CONFIG_MTD_DEVICE)$(CONFIG_CMD_NAND)$(CONFIG_CMD_ONENAND)$(CONFIG_CMD_SF))) > obj-y += mtdcore.o mtd_uboot.o > endif > +obj-$(CONFIG_MTD) += mtd-uclass.o > obj-$(CONFIG_MTD_PARTITIONS) += mtdpart.o > obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o > obj-$(CONFIG_HAS_DATAFLASH) += at45.o > diff --git a/drivers/mtd/mtd-uclass.c b/drivers/mtd/mtd-uclass.c > new file mode 100644 > index 0000000..8bd3e6b > --- /dev/null > +++ b/drivers/mtd/mtd-uclass.c > @@ -0,0 +1,20 @@ > +/* > + * Copyright (C) 2015 Thomas Chou > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#include > +#include > +#include > +#include > + > +/* > + * Implement a MTD uclass which should include most flash drivers. > + * The uclass private is pointed to mtd_info. > + */ > + > +UCLASS_DRIVER(mtd) = { > + .id = UCLASS_MTD, > + .name = "mtd", > +}; > diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h > index 886a44c..fcc9784 100644 > --- a/include/dm/uclass-id.h > +++ b/include/dm/uclass-id.h > @@ -42,6 +42,7 @@ enum uclass_id { > UCLASS_MISC, /* Miscellaneous device */ > UCLASS_MMC, /* SD / MMC card or chip */ > UCLASS_MOD_EXP, /* RSA Mod Exp device */ > + UCLASS_MTD, /* Memory Technology Device (MTD) device */ > UCLASS_PCH, /* x86 platform controller hub */ > UCLASS_PCI, /* PCI bus */ > UCLASS_PCI_GENERIC, /* Generic PCI bus device */ > diff --git a/include/flash.h b/include/flash.h > index dc0645e..f53ace7 100644 > --- a/include/flash.h > +++ b/include/flash.h > @@ -44,6 +44,9 @@ typedef struct { > ulong addr_unlock2; /* unlock address 2 for AMD flash roms */ > const char *name; /* human-readable name */ > #endif > +#ifdef CONFIG_MTD > + struct mtd_info *mtd; > +#endif > } flash_info_t; > > extern flash_info_t flash_info[]; /* info for FLASH chips */ > diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h > index e3d3fc7..0ab6128 100644 > --- a/include/linux/mtd/mtd.h > +++ b/include/linux/mtd/mtd.h > @@ -18,6 +18,7 @@ > > #include > #else > +#include I'm not keen on adding this header here. Why is it needed? Can we instead include in the C files that need it? > #include > #include > #include > @@ -272,6 +273,8 @@ struct mtd_info { > struct module *owner; > #ifndef __UBOOT__ > struct device dev; > +#else > + struct udevice *dev; > #endif > int usecount; > }; > diff --git a/include/mtd.h b/include/mtd.h > new file mode 100644 > index 0000000..3f8c293 > --- /dev/null > +++ b/include/mtd.h > @@ -0,0 +1,23 @@ > +/* > + * Copyright (C) 2015 Thomas Chou > + * > + * SPDX-License-Identifier: GPL-2.0+ > + */ > + > +#ifndef _MTD_H_ > +#define _MTD_H_ > + > +#include > + > +/* > + * Get mtd_info structure of the dev, which is stored as uclass private. > + * > + * @dev: The MTD device > + * @return: pointer to mtd_info, NULL on error > + */ > +static inline struct mtd_info *mtd_get_info(struct udevice *dev) > +{ > + return dev_get_uclass_priv(dev); > +} That function is a nice idea I think. > + > +#endif /* _MTD_H_ */ > -- > 2.5.0 > Regards, Simon