diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
old mode 100644
new mode 100755
index e858d58..4f2d709
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -527,11 +527,12 @@ static void meson_nfc_dma_buffer_release(struct nand_chip *nand,
 static int meson_nfc_read_buf(struct nand_chip *nand, u8 *buf, int len)
 {
 	struct meson_nfc *nfc = nand_get_controller_data(nand);
-	int ret = 0;
+	int ret = 0, i;
 	u32 cmd;
 	u8 *info;
 
-	info = kzalloc(PER_INFO_BYTE, GFP_KERNEL);
+	info = kzalloc(256, GFP_KERNEL);
+	memset(info, 0xFD, 256);
 	ret = meson_nfc_dma_buffer_setup(nand, buf, len, info,
 					 PER_INFO_BYTE, DMA_FROM_DEVICE);
 	if (ret)
@@ -543,6 +544,14 @@ static int meson_nfc_read_buf(struct nand_chip *nand, u8 *buf, int len)
 	meson_nfc_drain_cmd(nfc);
 	meson_nfc_wait_cmd_finish(nfc, 1000);
 	meson_nfc_dma_buffer_release(nand, len, PER_INFO_BYTE, DMA_FROM_DEVICE);
+
+	for (i = 0; i < 256; i++) {
+		if (i > 0 && i % 16 == 0)
+			pr_info("");
+		printk(KERN_CONT "0x%x ", info[i]);
+	}
+	pr_info("");
+
 	kfree(info);
 
 	return ret;
@@ -899,6 +908,8 @@ static int meson_nfc_exec_op(struct nand_chip *nand,
 	int i;
 
 	meson_nfc_select_chip(nand, op->cs);
+	
+	printk("Executing operation [%d instructions]:", op->ninstrs);
 	for (op_id = 0; op_id < op->ninstrs; op_id++) {
 		instr = &op->instrs[op_id];
 		delay_idle = DIV_ROUND_UP(PSEC_TO_NSEC(instr->delay_ns),
@@ -906,6 +917,7 @@ static int meson_nfc_exec_op(struct nand_chip *nand,
 					  NFC_CLK_CYCLE);
 		switch (instr->type) {
 		case NAND_OP_CMD_INSTR:
+			printk("  ->CMD      [0x%02x]", instr->ctx.cmd.opcode);
 			cmd = nfc->param.chip_select | NFC_CMD_CLE;
 			cmd |= instr->ctx.cmd.opcode & 0xff;
 			writel(cmd, nfc->reg_base + NFC_REG_CMD);
@@ -913,6 +925,7 @@ static int meson_nfc_exec_op(struct nand_chip *nand,
 			break;
 
 		case NAND_OP_ADDR_INSTR:
+			printk("  ->ADDR     [%d cyc]", instr->ctx.addr.naddrs);
 			for (i = 0; i < instr->ctx.addr.naddrs; i++) {
 				cmd = nfc->param.chip_select | NFC_CMD_ALE;
 				cmd |= instr->ctx.addr.addrs[i] & 0xff;
@@ -922,6 +935,9 @@ static int meson_nfc_exec_op(struct nand_chip *nand,
 			break;
 
 		case NAND_OP_DATA_IN_INSTR:
+			printk("  ->DATA_IN  [%d B%s]\n", instr->ctx.data.len,
+				 instr->ctx.data.force_8bit ?
+				 ", force 8-bit" : "");
 			buf = meson_nand_op_get_dma_safe_input_buf(instr);
 			if (!buf)
 				return -ENOMEM;
@@ -930,6 +946,9 @@ static int meson_nfc_exec_op(struct nand_chip *nand,
 			break;
 
 		case NAND_OP_DATA_OUT_INSTR:
+			printk("  ->DATA_OUT [%d B%s]", instr->ctx.data.len,
+				 instr->ctx.data.force_8bit ?
+				 ", force 8-bit" : "");
 			buf = meson_nand_op_get_dma_safe_output_buf(instr);
 			if (!buf)
 				return -ENOMEM;
@@ -938,6 +957,8 @@ static int meson_nfc_exec_op(struct nand_chip *nand,
 			break;
 
 		case NAND_OP_WAITRDY_INSTR:
+			printk("  ->WAITRDY  [max %d ms]",
+				 instr->ctx.waitrdy.timeout_ms);
 			meson_nfc_queue_rb(nfc, instr->ctx.waitrdy.timeout_ms);
 			if (instr->delay_ns)
 				meson_nfc_cmd_idle(nfc, delay_idle);
@@ -1191,6 +1212,8 @@ static int meson_nand_attach_chip(struct nand_chip *nand)
 	if (ret)
 		return -EINVAL;
 
+	mtd_set_ooblayout(mtd, &meson_ooblayout_ops);
+	
 	nand->ecc.mode = NAND_ECC_HW;
 	nand->ecc.write_page_raw = meson_nfc_write_page_raw;
 	nand->ecc.write_page = meson_nfc_write_page_hwecc;