Lines Matching refs:host

37 static struct mxc_nand_host *host = &mxc_host;  variable
113 static void wait_op_done(struct mxc_nand_host *host, int max_retries, argument
120 tmp = readnfc(&host->regs->config2);
123 writenfc(tmp, &host->regs->config2);
125 tmp = readnfc(&host->ip_regs->ipc);
128 writenfc(tmp, &host->ip_regs->ipc);
144 static void send_cmd(struct mxc_nand_host *host, uint16_t cmd) argument
148 writenfc(cmd, &host->regs->flash_cmd);
149 writenfc(NFC_CMD, &host->regs->operation);
152 wait_op_done(host, TROP_US_DELAY, cmd);
160 static void send_addr(struct mxc_nand_host *host, uint16_t addr) argument
164 writenfc(addr, &host->regs->flash_addr);
165 writenfc(NFC_ADDR, &host->regs->operation);
168 wait_op_done(host, TROP_US_DELAY, addr);
175 static void send_prog_page(struct mxc_nand_host *host, uint8_t buf_id, argument
190 void __iomem *src = &host->regs->spare_area[0][i * 16];
191 void __iomem *dst = &host->regs->spare_area[i][0];
198 writenfc(buf_id, &host->regs->buf_addr);
200 uint32_t tmp = readnfc(&host->regs->config1);
203 writenfc(tmp, &host->regs->config1);
207 if (!host->pagesize_2k) {
208 uint32_t config1 = readnfc(&host->regs->config1);
213 writenfc(config1, &host->regs->config1);
216 writenfc(NFC_INPUT, &host->regs->operation);
219 wait_op_done(host, TROP_US_DELAY, spare_only);
226 static void send_read_page(struct mxc_nand_host *host, uint8_t buf_id, argument
232 writenfc(buf_id, &host->regs->buf_addr);
234 uint32_t tmp = readnfc(&host->regs->config1);
237 writenfc(tmp, &host->regs->config1);
241 if (!host->pagesize_2k) {
242 uint32_t config1 = readnfc(&host->regs->config1);
247 writenfc(config1, &host->regs->config1);
250 writenfc(NFC_OUTPUT, &host->regs->operation);
253 wait_op_done(host, TROP_US_DELAY, spare_only);
264 void __iomem *src = &host->regs->spare_area[i][0];
265 void __iomem *dst = &host->regs->spare_area[0][i * 16];
273 static void send_read_id(struct mxc_nand_host *host) argument
279 writenfc(0x0, &host->regs->buf_addr);
281 tmp = readnfc(&host->regs->config1);
283 writenfc(tmp, &host->regs->config1);
287 tmp = readnfc(&host->regs->config1);
289 writenfc(tmp, &host->regs->config1);
291 writenfc(NFC_ID, &host->regs->operation);
294 wait_op_done(host, TROP_US_DELAY, 0);
301 static uint16_t get_dev_status(struct mxc_nand_host *host) argument
304 void __iomem *main_buf = host->regs->main_area[1];
314 writenfc(1, &host->regs->buf_addr);
318 tmp = readnfc(&host->regs->config1);
320 writenfc(tmp, &host->regs->config1);
322 writenfc(NFC_STATUS, &host->regs->operation);
325 wait_op_done(host, TROP_US_DELAY, 0);
335 ret = readnfc(&host->regs->config1) >> 16;
354 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
356 uint16_t tmp = readnfc(&host->regs->config1);
362 writenfc(tmp, &host->regs->config1);
364 uint32_t tmp = readnfc(&host->ip_regs->config2);
370 writenfc(tmp, &host->ip_regs->config2);
388 struct mxc_nand_host *host = nand_get_controller_data(chip); local
407 host->col_addr += chip->ecc.bytes;
430 host->col_addr += chip->ecc.postpad + chip->ecc.prepad;
442 struct mxc_nand_host *host = nand_get_controller_data(chip); local
454 host->col_addr = n * eccsize;
458 host->col_addr = mtd->writesize + n * eccpitch;
487 struct mxc_nand_host *host = nand_get_controller_data(chip); local
502 host->col_addr = n * eccsize;
506 host->col_addr = mtd->writesize + n * eccpitch;
538 host->col_addr = mtd->writesize +
551 struct mxc_nand_host *host = nand_get_controller_data(chip); local
564 host->col_addr += chip->ecc.prepad + chip->ecc.postpad;
579 struct mxc_nand_host *host = nand_get_controller_data(chip); local
588 host->col_addr = n * eccsize;
592 host->col_addr = mtd->writesize + n * eccpitch;
599 host->col_addr += eccbytes;
619 struct mxc_nand_host *host = nand_get_controller_data(chip); local
632 host->col_addr = n * eccsize;
636 host->col_addr = mtd->writesize + n * eccpitch;
663 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
664 uint32_t ecc_status = readl(&host->regs->ecc_status_result);
673 if (last_bad != host->page_addr >> pg2blk_shift) {
674 last_bad = host->page_addr >> pg2blk_shift;
678 last_bad, host->page_addr,
702 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
709 uint16_t ecc_status = readnfc(&host->regs->ecc_status_result);
730 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
734 (uint16_t __iomem *)host->regs->main_area[0];
736 (uint16_t __iomem *)host->regs->spare_area[0];
743 if (host->status_request)
744 return get_dev_status(host) & 0xFF;
747 col = host->col_addr >> 1;
750 if (host->spare_only)
756 ret = nfc_word.bytes[host->col_addr & 0x1];
760 host->col_addr += 2;
762 host->col_addr++;
770 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
774 pr_debug("mxc_nand_read_word(col = %d)\n", host->col_addr);
776 col = host->col_addr;
778 if (col < mtd->writesize && host->spare_only)
782 p = (uint16_t __iomem *)(host->regs->main_area[0] +
785 p = (uint16_t __iomem *)(host->regs->spare_area[0] +
807 host->col_addr = col + 2;
821 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
824 pr_debug("mxc_nand_write_buf(col = %d, len = %d)\n", host->col_addr,
827 col = host->col_addr;
830 if (col < mtd->writesize && host->spare_only)
842 p = host->regs->main_area[0] + (col & ~3);
844 p = host->regs->spare_area[0] -
881 host->col_addr = col;
892 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
895 pr_debug("mxc_nand_read_buf(col = %d, len = %d)\n", host->col_addr,
898 col = host->col_addr;
901 if (col < mtd->writesize && host->spare_only)
911 p = host->regs->main_area[0] + (col & ~3);
913 p = host->regs->spare_area[0] -
942 host->col_addr = col;
952 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
957 if (host->clk_act)
958 host->clk_act = 0;
962 if (!host->clk_act)
963 host->clk_act = 1;
979 struct mxc_nand_host *host = nand_get_controller_data(nand_chip); local
985 host->status_request = false;
991 host->col_addr = 0;
992 host->status_request = true;
996 host->page_addr = page_addr;
997 host->col_addr = column;
998 host->spare_only = false;
1002 host->col_addr = column;
1003 host->spare_only = true;
1004 if (host->pagesize_2k)
1017 if (host->pagesize_2k) {
1023 host->col_addr = column - mtd->writesize;
1024 host->spare_only = true;
1027 if (!host->pagesize_2k)
1028 send_cmd(host, NAND_CMD_READOOB);
1030 host->spare_only = false;
1031 host->col_addr = column;
1034 if (!host->pagesize_2k)
1035 send_cmd(host, NAND_CMD_READ0);
1040 send_prog_page(host, 0, host->spare_only);
1042 if (host->pagesize_2k && is_mxc_nfc_1()) {
1044 send_prog_page(host, 1, host->spare_only);
1045 send_prog_page(host, 2, host->spare_only);
1046 send_prog_page(host, 3, host->spare_only);
1053 send_cmd(host, command);
1063 send_addr(host, 0);
1064 if (host->pagesize_2k)
1066 send_addr(host, 0);
1073 send_addr(host, page_addr & 0xFF);
1087 if (host->pagesize_2k) {
1089 send_cmd(host, NAND_CMD_READSTART);
1091 send_read_page(host, 0, host->spare_only);
1093 send_read_page(host, 1, host->spare_only);
1094 send_read_page(host, 2, host->spare_only);
1095 send_read_page(host, 3, host->spare_only);
1098 send_read_page(host, 0, host->spare_only);
1103 host->col_addr = 0;
1104 send_read_id(host);
1160 host->nand = this;
1165 nand_set_controller_data(this, host);
1174 host->regs = (struct mxc_nand_regs __iomem *)CONFIG_MXC_NAND_REGS_BASE;
1176 host->ip_regs =
1179 host->clk_act = 1;
1204 host->pagesize_2k = 0;
1221 host->pagesize_2k = 1;
1224 host->pagesize_2k = 0;
1230 tmp = readnfc(&host->regs->config1);
1233 writenfc(tmp, &host->regs->config1);
1234 if (host->pagesize_2k)
1235 writenfc(64/2, &host->regs->spare_area_size);
1237 writenfc(16/2, &host->regs->spare_area_size);
1244 writenfc(0x2, &host->regs->config);
1247 writenfc(0x0, &host->regs->unlockstart_blkaddr);
1259 writenfc(0xFFFF, &host->regs->unlockend_blkaddr);
1262 writenfc(0x4, &host->regs->wrprot);
1264 writenfc(NFC_V3_CONFIG1_RBA(0), &host->regs->config1);
1265 writenfc(NFC_V3_IPC_CREQ, &host->ip_regs->ipc);
1269 &host->ip_regs->wrprot);
1274 &host->ip_regs->wrprot_unlock_blkaddr[tmp]);
1276 writenfc(0, &host->ip_regs->ipc);
1278 tmp = readnfc(&host->ip_regs->config2);
1283 if (host->pagesize_2k) {
1291 writenfc(tmp, &host->ip_regs->config2);
1302 writenfc(tmp, &host->ip_regs->config3);
1304 writenfc(0, &host->ip_regs->delay_line);