drivers/mtd/nand/raw/nand_micron.c
Source file repositories/reference/linux-study-clean/drivers/mtd/nand/raw/nand_micron.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/mtd/nand/raw/nand_micron.c- Extension
.c- Size
- 15795 bytes
- Lines
- 600
- Domain
- Driver Families
- Bucket
- drivers/mtd
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Allocates kernel memory; connect allocation flags and lifetime to context constraints.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/slab.hinternals.h
Detected Declarations
struct nand_onfi_vendor_micronstruct micron_on_die_eccstruct micron_nandfunction micron_nand_setup_read_retryfunction micron_nand_onfi_initfunction micron_nand_on_die_4_ooblayout_eccfunction micron_nand_on_die_4_ooblayout_freefunction micron_nand_on_die_8_ooblayout_eccfunction micron_nand_on_die_8_ooblayout_freefunction micron_nand_on_die_ecc_setupfunction micron_nand_on_die_ecc_status_4function micron_nand_on_die_ecc_status_8function micron_nand_read_page_on_die_eccfunction micron_nand_write_page_on_die_eccfunction micron_supports_on_die_eccfunction micron_nand_initfunction micron_nand_cleanupfunction micron_fixup_onfi_param_page
Annotated Snippet
struct nand_onfi_vendor_micron {
u8 two_plane_read;
u8 read_cache;
u8 read_unique_id;
u8 dq_imped;
u8 dq_imped_num_settings;
u8 dq_imped_feat_addr;
u8 rb_pulldown_strength;
u8 rb_pulldown_strength_feat_addr;
u8 rb_pulldown_strength_num_settings;
u8 otp_mode;
u8 otp_page_start;
u8 otp_data_prot_addr;
u8 otp_num_pages;
u8 otp_feat_addr;
u8 read_retry_options;
u8 reserved[72];
u8 param_revision;
} __packed;
struct micron_on_die_ecc {
bool forced;
bool enabled;
void *rawbuf;
};
struct micron_nand {
struct micron_on_die_ecc ecc;
};
static int micron_nand_setup_read_retry(struct nand_chip *chip, int retry_mode)
{
u8 feature[ONFI_SUBFEATURE_PARAM_LEN] = {retry_mode};
return nand_set_features(chip, ONFI_FEATURE_ADDR_READ_RETRY, feature);
}
/*
* Configure chip properties from Micron vendor-specific ONFI table
*/
static int micron_nand_onfi_init(struct nand_chip *chip)
{
struct nand_parameters *p = &chip->parameters;
if (p->onfi) {
struct nand_onfi_vendor_micron *micron = (void *)p->onfi->vendor;
chip->read_retries = micron->read_retry_options;
chip->ops.setup_read_retry = micron_nand_setup_read_retry;
}
if (p->supports_set_get_features) {
set_bit(ONFI_FEATURE_ADDR_READ_RETRY, p->set_feature_list);
set_bit(ONFI_FEATURE_ON_DIE_ECC, p->set_feature_list);
set_bit(ONFI_FEATURE_ADDR_READ_RETRY, p->get_feature_list);
set_bit(ONFI_FEATURE_ON_DIE_ECC, p->get_feature_list);
}
return 0;
}
static int micron_nand_on_die_4_ooblayout_ecc(struct mtd_info *mtd,
int section,
struct mtd_oob_region *oobregion)
{
if (section >= 4)
return -ERANGE;
oobregion->offset = (section * 16) + 8;
oobregion->length = 8;
return 0;
}
static int micron_nand_on_die_4_ooblayout_free(struct mtd_info *mtd,
int section,
struct mtd_oob_region *oobregion)
{
if (section >= 4)
return -ERANGE;
oobregion->offset = (section * 16) + 2;
oobregion->length = 6;
return 0;
}
static const struct mtd_ooblayout_ops micron_nand_on_die_4_ooblayout_ops = {
.ecc = micron_nand_on_die_4_ooblayout_ecc,
.free = micron_nand_on_die_4_ooblayout_free,
Annotation
- Immediate include surface: `linux/slab.h`, `internals.h`.
- Detected declarations: `struct nand_onfi_vendor_micron`, `struct micron_on_die_ecc`, `struct micron_nand`, `function micron_nand_setup_read_retry`, `function micron_nand_onfi_init`, `function micron_nand_on_die_4_ooblayout_ecc`, `function micron_nand_on_die_4_ooblayout_free`, `function micron_nand_on_die_8_ooblayout_ecc`, `function micron_nand_on_die_8_ooblayout_free`, `function micron_nand_on_die_ecc_setup`.
- Atlas domain: Driver Families / drivers/mtd.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.