ARM Linux and UBoot - Can I make a read-only MTD writable?
Have you considered creating a simple kernel module you can insert to make the MTD partition(s) writable? I had this same problem and was able to work around it by writing a kernel module. For simplicity, I just went ahead and had it make every MTD device writable. Basically, the module has to do something like this in its init function:

struct mtd_info *mtd;
int x;
bool keep_going = true;

for (x = 0; keep_going; x++) {
    mtd = get_mtd_device(NULL, x);
    if (!IS_ERR(mtd)) {
        mtd-&gt;flags |= MTD_WRITEABLE;
        put_mtd_device(mtd);
    } else {
        keep_going = false;
    }
}


After inserting this module, I was successfully able to use flash_erase and nandwrite while booted in the kernel, whereas before, flash_erase was telling me: "error 13 (Permission denied)"