# CONFIG_KERNEL_DEBUGGER_CORE is not set
# CONFIG_ISL29003 is not set
# CONFIG_UID_STAT is not set
-# CONFIG_APANIC is not set
+CONFIG_APANIC=y
+CONFIG_APANIC_PLABEL="kpanic"
# CONFIG_STE is not set
# CONFIG_C2PORT is not set
# CONFIG_ISL29003 is not set
# CONFIG_UID_STAT is not set
# CONFIG_WL127X_RFKILL is not set
-# CONFIG_APANIC is not set
+CONFIG_APANIC=y
+CONFIG_APANIC_PLABEL="kpanic"
# CONFIG_STE is not set
# CONFIG_C2PORT is not set
# CONFIG_ISL29003 is not set
# CONFIG_UID_STAT is not set
# CONFIG_WL127X_RFKILL is not set
-# CONFIG_APANIC is not set
+CONFIG_APANIC=y
+CONFIG_APANIC_PLABEL="kpanic"
# CONFIG_STE is not set
# CONFIG_C2PORT is not set
# CONFIG_ISL29003 is not set
# CONFIG_UID_STAT is not set
# CONFIG_WL127X_RFKILL is not set
-# CONFIG_APANIC is not set
+CONFIG_APANIC=y
+CONFIG_APANIC_PLABEL="kpanic"
# CONFIG_STE is not set
# CONFIG_C2PORT is not set
ctx->mtd->writesize,
&len, ctx->bounce);
+#ifdef CONFIG_MTD_RKNAND
+ if (count > (ctx->mtd->writesize - page_offset))
+ count = ctx->mtd->writesize - page_offset;
+#else
if (page_offset)
count -= page_offset;
+#endif
memcpy(buffer, ctx->bounce + page_offset, count);
*start = count;
static void mtd_panic_erase(void)
{
struct apanic_data *ctx = &drv_ctx;
+#ifdef CONFIG_MTD_RKNAND
+ size_t wlen;
+ memset(ctx->bounce, 0, sizeof(struct panic_header));
+ ctx->mtd->write(ctx->mtd, 0, sizeof(struct panic_header), &wlen, ctx->bounce);
+#else
struct erase_info erase;
DECLARE_WAITQUEUE(wait, current);
wait_queue_head_t wait_q;
schedule();
remove_wait_queue(&wait_q, &wait);
}
+#endif
printk(KERN_DEBUG "apanic: %s partition erased\n",
CONFIG_APANIC_PLABEL);
out:
if (hdr->magic != PANIC_MAGIC) {
printk(KERN_INFO "apanic: No panic data available\n");
+#ifndef CONFIG_MTD_RKNAND
mtd_panic_erase();
+#endif
return;
}
if (hdr->version != PHDR_VERSION) {
printk(KERN_INFO "apanic: Version mismatch (%d != %d)\n",
hdr->version, PHDR_VERSION);
+#ifndef CONFIG_MTD_RKNAND
mtd_panic_erase();
+#endif
return;
}
}
}
+#ifndef CONFIG_MTD_RKNAND
if (!proc_entry_created)
mtd_panic_erase();
+#endif
return;
out_err:
#endif\r
}\r
\r
+extern void FtlWriteCacheEn(int);\r
+static int rk28xxnand_panic_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf)\r
+{\r
+ int sector = len >> 9;\r
+ int LBA = (int)(to >> 9);\r
+\r
+ if (sector) {\r
+ FtlWriteCacheEn(0);\r
+ NandWrite(LBA, sector, (void *)buf);\r
+ FtlWriteCacheEn(1);\r
+ }\r
+ *retlen = len;\r
+ return 0;\r
+}\r
+\r
+static int rk28xxnand_block_isbad(struct mtd_info *mtd, loff_t ofs)\r
+{\r
+ return 0;\r
+}\r
+\r
+static int rk28xxnand_block_markbad(struct mtd_info *mtd, loff_t ofs)\r
+{\r
+ return 0;\r
+}\r
+\r
static int rk28xxnand_init(struct rknand_info *nand_info)\r
{\r
struct mtd_info *mtd = &nand_info->mtd;\r
mtd->write = rk28xxnand_write;\r
mtd->read_oob = NULL;\r
mtd->write_oob = NULL;\r
- mtd->panic_write = NULL;\r
+ mtd->panic_write = rk28xxnand_panic_write;\r
\r
mtd->sync = rk28xxnand_sync;\r
mtd->lock = NULL;\r
mtd->unlock = NULL;\r
mtd->suspend = NULL;\r
mtd->resume = NULL;\r
- mtd->block_isbad = NULL;\r
- mtd->block_markbad = NULL;\r
+ mtd->block_isbad = rk28xxnand_block_isbad;\r
+ mtd->block_markbad = rk28xxnand_block_markbad;\r
mtd->owner = THIS_MODULE;\r
\r
#ifdef PAGE_REMAP\r