On Thu, May 15, 2025 at 04:33:39PM +0300, Alexander Usyskin wrote: > Register the on-die nvm device with the mtd subsystem. > Refcount nvm object on _get and _put mtd callbacks. > For erase operation address and size should be 4K aligned. > For write operation address and size has to be 4bytes aligned.
... > +static int intel_dg_nvm_init_mtd(struct intel_dg_nvm *nvm, struct device > *device, > + unsigned int nparts, bool writable_override) > +{ > + unsigned int i; > + unsigned int n; > + struct mtd_partition *parts = NULL; > + int ret; Reverse xmas order (along with all other places). > + dev_dbg(device, "registering with mtd\n"); > + > + nvm->mtd.owner = THIS_MODULE; > + nvm->mtd.dev.parent = device; > + nvm->mtd.flags = MTD_CAP_NORFLASH | MTD_WRITEABLE; Isn't MTD_CAP_NORFLASH already writable? > + nvm->mtd.type = MTD_DATAFLASH; > + nvm->mtd.priv = nvm; > + nvm->mtd._write = intel_dg_mtd_write; > + nvm->mtd._read = intel_dg_mtd_read; > + nvm->mtd._erase = intel_dg_mtd_erase; > + nvm->mtd._get_device = intel_dg_mtd_get_device; > + nvm->mtd._put_device = intel_dg_mtd_put_device; > + nvm->mtd.writesize = SZ_1; /* 1 byte granularity */ > + nvm->mtd.erasesize = SZ_4K; /* 4K bytes granularity */ > + nvm->mtd.size = nvm->size; > + > + parts = kcalloc(nvm->nregions, sizeof(*parts), GFP_KERNEL); > + if (!parts) > + return -ENOMEM; > + > + for (i = 0, n = 0; i < nvm->nregions && n < nparts; i++) { > + if (!nvm->regions[i].is_readable) > + continue; > + parts[n].name = nvm->regions[i].name; > + parts[n].offset = nvm->regions[i].offset; > + parts[n].size = nvm->regions[i].size; > + if (!nvm->regions[i].is_writable && !writable_override) > + parts[n].mask_flags = MTD_WRITEABLE; > + n++; > + } > + > + ret = mtd_device_register(&nvm->mtd, parts, n); > + > + kfree(parts); I didn't find anything questionable about this, but hope this is tested and there are no side-effects of this. > + Nit: Redundant blank line. > + return ret; > +} Raag