Skip to content
Snippets Groups Projects
Commit d8587993 authored by Thomas Chou's avatar Thomas Chou
Browse files

dm: implement a MTD uclass


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: default avatarThomas Chou <thomas@wytron.com.tw>
parent b375219e
No related branches found
No related tags found
No related merge requests found
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"
......@@ -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
......
/*
* Copyright (C) 2015 Thomas Chou <thomas@wytron.com.tw>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
#include <dm.h>
#include <errno.h>
#include <mtd.h>
/*
* 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",
.per_device_auto_alloc_size = sizeof(struct mtd_info),
};
......@@ -43,6 +43,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 */
......
......@@ -41,6 +41,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 */
......
......@@ -272,6 +272,8 @@ struct mtd_info {
struct module *owner;
#ifndef __UBOOT__
struct device dev;
#else
struct udevice *dev;
#endif
int usecount;
};
......
/*
* Copyright (C) 2015 Thomas Chou <thomas@wytron.com.tw>
*
* SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _MTD_H_
#define _MTD_H_
#include <linux/mtd/mtd.h>
/*
* 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);
}
#endif /* _MTD_H_ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment