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;