0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016 #include <linux/delay.h>
0017 #include <linux/io.h>
0018 #include <linux/nmi.h>
0019
0020 #include "internals.h"
0021
0022
0023
0024
0025
0026
0027
0028 static uint8_t nand_read_byte(struct nand_chip *chip)
0029 {
0030 return readb(chip->legacy.IO_ADDR_R);
0031 }
0032
0033
0034
0035
0036
0037
0038
0039
0040 static uint8_t nand_read_byte16(struct nand_chip *chip)
0041 {
0042 return (uint8_t) cpu_to_le16(readw(chip->legacy.IO_ADDR_R));
0043 }
0044
0045
0046
0047
0048
0049
0050
0051
0052 static void nand_select_chip(struct nand_chip *chip, int chipnr)
0053 {
0054 switch (chipnr) {
0055 case -1:
0056 chip->legacy.cmd_ctrl(chip, NAND_CMD_NONE,
0057 0 | NAND_CTRL_CHANGE);
0058 break;
0059 case 0:
0060 break;
0061
0062 default:
0063 BUG();
0064 }
0065 }
0066
0067
0068
0069
0070
0071
0072
0073
0074 static void nand_write_byte(struct nand_chip *chip, uint8_t byte)
0075 {
0076 chip->legacy.write_buf(chip, &byte, 1);
0077 }
0078
0079
0080
0081
0082
0083
0084
0085
0086 static void nand_write_byte16(struct nand_chip *chip, uint8_t byte)
0087 {
0088 uint16_t word = byte;
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106 chip->legacy.write_buf(chip, (uint8_t *)&word, 2);
0107 }
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117 static void nand_write_buf(struct nand_chip *chip, const uint8_t *buf, int len)
0118 {
0119 iowrite8_rep(chip->legacy.IO_ADDR_W, buf, len);
0120 }
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130 static void nand_read_buf(struct nand_chip *chip, uint8_t *buf, int len)
0131 {
0132 ioread8_rep(chip->legacy.IO_ADDR_R, buf, len);
0133 }
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143 static void nand_write_buf16(struct nand_chip *chip, const uint8_t *buf,
0144 int len)
0145 {
0146 u16 *p = (u16 *) buf;
0147
0148 iowrite16_rep(chip->legacy.IO_ADDR_W, p, len >> 1);
0149 }
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159 static void nand_read_buf16(struct nand_chip *chip, uint8_t *buf, int len)
0160 {
0161 u16 *p = (u16 *) buf;
0162
0163 ioread16_rep(chip->legacy.IO_ADDR_R, p, len >> 1);
0164 }
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174 static void panic_nand_wait_ready(struct nand_chip *chip, unsigned long timeo)
0175 {
0176 int i;
0177
0178
0179 for (i = 0; i < timeo; i++) {
0180 if (chip->legacy.dev_ready(chip))
0181 break;
0182 touch_softlockup_watchdog();
0183 mdelay(1);
0184 }
0185 }
0186
0187
0188
0189
0190
0191
0192
0193 void nand_wait_ready(struct nand_chip *chip)
0194 {
0195 struct mtd_info *mtd = nand_to_mtd(chip);
0196 unsigned long timeo = 400;
0197
0198 if (mtd->oops_panic_write)
0199 return panic_nand_wait_ready(chip, timeo);
0200
0201
0202 timeo = jiffies + msecs_to_jiffies(timeo);
0203 do {
0204 if (chip->legacy.dev_ready(chip))
0205 return;
0206 cond_resched();
0207 } while (time_before(jiffies, timeo));
0208
0209 if (!chip->legacy.dev_ready(chip))
0210 pr_warn_ratelimited("timeout while waiting for chip to become ready\n");
0211 }
0212 EXPORT_SYMBOL_GPL(nand_wait_ready);
0213
0214
0215
0216
0217
0218
0219
0220
0221 static void nand_wait_status_ready(struct nand_chip *chip, unsigned long timeo)
0222 {
0223 int ret;
0224
0225 timeo = jiffies + msecs_to_jiffies(timeo);
0226 do {
0227 u8 status;
0228
0229 ret = nand_read_data_op(chip, &status, sizeof(status), true,
0230 false);
0231 if (ret)
0232 return;
0233
0234 if (status & NAND_STATUS_READY)
0235 break;
0236 touch_softlockup_watchdog();
0237 } while (time_before(jiffies, timeo));
0238 };
0239
0240
0241
0242
0243
0244
0245
0246
0247
0248
0249
0250 static void nand_command(struct nand_chip *chip, unsigned int command,
0251 int column, int page_addr)
0252 {
0253 struct mtd_info *mtd = nand_to_mtd(chip);
0254 int ctrl = NAND_CTRL_CLE | NAND_CTRL_CHANGE;
0255
0256
0257 if (command == NAND_CMD_SEQIN) {
0258 int readcmd;
0259
0260 if (column >= mtd->writesize) {
0261
0262 column -= mtd->writesize;
0263 readcmd = NAND_CMD_READOOB;
0264 } else if (column < 256) {
0265
0266 readcmd = NAND_CMD_READ0;
0267 } else {
0268 column -= 256;
0269 readcmd = NAND_CMD_READ1;
0270 }
0271 chip->legacy.cmd_ctrl(chip, readcmd, ctrl);
0272 ctrl &= ~NAND_CTRL_CHANGE;
0273 }
0274 if (command != NAND_CMD_NONE)
0275 chip->legacy.cmd_ctrl(chip, command, ctrl);
0276
0277
0278 ctrl = NAND_CTRL_ALE | NAND_CTRL_CHANGE;
0279
0280 if (column != -1) {
0281
0282 if (chip->options & NAND_BUSWIDTH_16 &&
0283 !nand_opcode_8bits(command))
0284 column >>= 1;
0285 chip->legacy.cmd_ctrl(chip, column, ctrl);
0286 ctrl &= ~NAND_CTRL_CHANGE;
0287 }
0288 if (page_addr != -1) {
0289 chip->legacy.cmd_ctrl(chip, page_addr, ctrl);
0290 ctrl &= ~NAND_CTRL_CHANGE;
0291 chip->legacy.cmd_ctrl(chip, page_addr >> 8, ctrl);
0292 if (chip->options & NAND_ROW_ADDR_3)
0293 chip->legacy.cmd_ctrl(chip, page_addr >> 16, ctrl);
0294 }
0295 chip->legacy.cmd_ctrl(chip, NAND_CMD_NONE,
0296 NAND_NCE | NAND_CTRL_CHANGE);
0297
0298
0299
0300
0301
0302 switch (command) {
0303
0304 case NAND_CMD_NONE:
0305 case NAND_CMD_PAGEPROG:
0306 case NAND_CMD_ERASE1:
0307 case NAND_CMD_ERASE2:
0308 case NAND_CMD_SEQIN:
0309 case NAND_CMD_STATUS:
0310 case NAND_CMD_READID:
0311 case NAND_CMD_SET_FEATURES:
0312 return;
0313
0314 case NAND_CMD_RESET:
0315 if (chip->legacy.dev_ready)
0316 break;
0317 udelay(chip->legacy.chip_delay);
0318 chip->legacy.cmd_ctrl(chip, NAND_CMD_STATUS,
0319 NAND_CTRL_CLE | NAND_CTRL_CHANGE);
0320 chip->legacy.cmd_ctrl(chip, NAND_CMD_NONE,
0321 NAND_NCE | NAND_CTRL_CHANGE);
0322
0323 nand_wait_status_ready(chip, 250);
0324 return;
0325
0326
0327 case NAND_CMD_READ0:
0328
0329
0330
0331
0332
0333
0334 if (column == -1 && page_addr == -1)
0335 return;
0336 fallthrough;
0337 default:
0338
0339
0340
0341
0342 if (!chip->legacy.dev_ready) {
0343 udelay(chip->legacy.chip_delay);
0344 return;
0345 }
0346 }
0347
0348
0349
0350
0351 ndelay(100);
0352
0353 nand_wait_ready(chip);
0354 }
0355
0356 static void nand_ccs_delay(struct nand_chip *chip)
0357 {
0358 const struct nand_sdr_timings *sdr =
0359 nand_get_sdr_timings(nand_get_interface_config(chip));
0360
0361
0362
0363
0364
0365 if (!(chip->options & NAND_WAIT_TCCS))
0366 return;
0367
0368
0369
0370
0371
0372 if (!IS_ERR(sdr) && nand_controller_can_setup_interface(chip))
0373 ndelay(sdr->tCCS_min / 1000);
0374 else
0375 ndelay(500);
0376 }
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389 static void nand_command_lp(struct nand_chip *chip, unsigned int command,
0390 int column, int page_addr)
0391 {
0392 struct mtd_info *mtd = nand_to_mtd(chip);
0393
0394
0395 if (command == NAND_CMD_READOOB) {
0396 column += mtd->writesize;
0397 command = NAND_CMD_READ0;
0398 }
0399
0400
0401 if (command != NAND_CMD_NONE)
0402 chip->legacy.cmd_ctrl(chip, command,
0403 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
0404
0405 if (column != -1 || page_addr != -1) {
0406 int ctrl = NAND_CTRL_CHANGE | NAND_NCE | NAND_ALE;
0407
0408
0409 if (column != -1) {
0410
0411 if (chip->options & NAND_BUSWIDTH_16 &&
0412 !nand_opcode_8bits(command))
0413 column >>= 1;
0414 chip->legacy.cmd_ctrl(chip, column, ctrl);
0415 ctrl &= ~NAND_CTRL_CHANGE;
0416
0417
0418 if (!nand_opcode_8bits(command))
0419 chip->legacy.cmd_ctrl(chip, column >> 8, ctrl);
0420 }
0421 if (page_addr != -1) {
0422 chip->legacy.cmd_ctrl(chip, page_addr, ctrl);
0423 chip->legacy.cmd_ctrl(chip, page_addr >> 8,
0424 NAND_NCE | NAND_ALE);
0425 if (chip->options & NAND_ROW_ADDR_3)
0426 chip->legacy.cmd_ctrl(chip, page_addr >> 16,
0427 NAND_NCE | NAND_ALE);
0428 }
0429 }
0430 chip->legacy.cmd_ctrl(chip, NAND_CMD_NONE,
0431 NAND_NCE | NAND_CTRL_CHANGE);
0432
0433
0434
0435
0436
0437 switch (command) {
0438
0439 case NAND_CMD_NONE:
0440 case NAND_CMD_CACHEDPROG:
0441 case NAND_CMD_PAGEPROG:
0442 case NAND_CMD_ERASE1:
0443 case NAND_CMD_ERASE2:
0444 case NAND_CMD_SEQIN:
0445 case NAND_CMD_STATUS:
0446 case NAND_CMD_READID:
0447 case NAND_CMD_SET_FEATURES:
0448 return;
0449
0450 case NAND_CMD_RNDIN:
0451 nand_ccs_delay(chip);
0452 return;
0453
0454 case NAND_CMD_RESET:
0455 if (chip->legacy.dev_ready)
0456 break;
0457 udelay(chip->legacy.chip_delay);
0458 chip->legacy.cmd_ctrl(chip, NAND_CMD_STATUS,
0459 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
0460 chip->legacy.cmd_ctrl(chip, NAND_CMD_NONE,
0461 NAND_NCE | NAND_CTRL_CHANGE);
0462
0463 nand_wait_status_ready(chip, 250);
0464 return;
0465
0466 case NAND_CMD_RNDOUT:
0467
0468 chip->legacy.cmd_ctrl(chip, NAND_CMD_RNDOUTSTART,
0469 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
0470 chip->legacy.cmd_ctrl(chip, NAND_CMD_NONE,
0471 NAND_NCE | NAND_CTRL_CHANGE);
0472
0473 nand_ccs_delay(chip);
0474 return;
0475
0476 case NAND_CMD_READ0:
0477
0478
0479
0480
0481
0482
0483 if (column == -1 && page_addr == -1)
0484 return;
0485
0486 chip->legacy.cmd_ctrl(chip, NAND_CMD_READSTART,
0487 NAND_NCE | NAND_CLE | NAND_CTRL_CHANGE);
0488 chip->legacy.cmd_ctrl(chip, NAND_CMD_NONE,
0489 NAND_NCE | NAND_CTRL_CHANGE);
0490 fallthrough;
0491 default:
0492
0493
0494
0495
0496 if (!chip->legacy.dev_ready) {
0497 udelay(chip->legacy.chip_delay);
0498 return;
0499 }
0500 }
0501
0502
0503
0504
0505
0506 ndelay(100);
0507
0508 nand_wait_ready(chip);
0509 }
0510
0511
0512
0513
0514
0515
0516
0517
0518
0519
0520 int nand_get_set_features_notsupp(struct nand_chip *chip, int addr,
0521 u8 *subfeature_param)
0522 {
0523 return -ENOTSUPP;
0524 }
0525 EXPORT_SYMBOL(nand_get_set_features_notsupp);
0526
0527
0528
0529
0530
0531
0532
0533 static int nand_wait(struct nand_chip *chip)
0534 {
0535 struct mtd_info *mtd = nand_to_mtd(chip);
0536 unsigned long timeo = 400;
0537 u8 status;
0538 int ret;
0539
0540
0541
0542
0543
0544 ndelay(100);
0545
0546 ret = nand_status_op(chip, NULL);
0547 if (ret)
0548 return ret;
0549
0550 if (mtd->oops_panic_write) {
0551 panic_nand_wait(chip, timeo);
0552 } else {
0553 timeo = jiffies + msecs_to_jiffies(timeo);
0554 do {
0555 if (chip->legacy.dev_ready) {
0556 if (chip->legacy.dev_ready(chip))
0557 break;
0558 } else {
0559 ret = nand_read_data_op(chip, &status,
0560 sizeof(status), true,
0561 false);
0562 if (ret)
0563 return ret;
0564
0565 if (status & NAND_STATUS_READY)
0566 break;
0567 }
0568 cond_resched();
0569 } while (time_before(jiffies, timeo));
0570 }
0571
0572 ret = nand_read_data_op(chip, &status, sizeof(status), true, false);
0573 if (ret)
0574 return ret;
0575
0576
0577 WARN_ON(!(status & NAND_STATUS_READY));
0578 return status;
0579 }
0580
0581 void nand_legacy_set_defaults(struct nand_chip *chip)
0582 {
0583 unsigned int busw = chip->options & NAND_BUSWIDTH_16;
0584
0585 if (nand_has_exec_op(chip))
0586 return;
0587
0588
0589 if (!chip->legacy.chip_delay)
0590 chip->legacy.chip_delay = 20;
0591
0592
0593 if (!chip->legacy.cmdfunc)
0594 chip->legacy.cmdfunc = nand_command;
0595
0596
0597 if (chip->legacy.waitfunc == NULL)
0598 chip->legacy.waitfunc = nand_wait;
0599
0600 if (!chip->legacy.select_chip)
0601 chip->legacy.select_chip = nand_select_chip;
0602
0603
0604 if (!chip->legacy.read_byte || chip->legacy.read_byte == nand_read_byte)
0605 chip->legacy.read_byte = busw ? nand_read_byte16 : nand_read_byte;
0606 if (!chip->legacy.write_buf || chip->legacy.write_buf == nand_write_buf)
0607 chip->legacy.write_buf = busw ? nand_write_buf16 : nand_write_buf;
0608 if (!chip->legacy.write_byte || chip->legacy.write_byte == nand_write_byte)
0609 chip->legacy.write_byte = busw ? nand_write_byte16 : nand_write_byte;
0610 if (!chip->legacy.read_buf || chip->legacy.read_buf == nand_read_buf)
0611 chip->legacy.read_buf = busw ? nand_read_buf16 : nand_read_buf;
0612 }
0613
0614 void nand_legacy_adjust_cmdfunc(struct nand_chip *chip)
0615 {
0616 struct mtd_info *mtd = nand_to_mtd(chip);
0617
0618
0619 if (mtd->writesize > 512 && chip->legacy.cmdfunc == nand_command)
0620 chip->legacy.cmdfunc = nand_command_lp;
0621 }
0622
0623 int nand_legacy_check_hooks(struct nand_chip *chip)
0624 {
0625
0626
0627
0628
0629 if (nand_has_exec_op(chip))
0630 return 0;
0631
0632
0633
0634
0635
0636
0637 if ((!chip->legacy.cmdfunc || !chip->legacy.select_chip) &&
0638 !chip->legacy.cmd_ctrl) {
0639 pr_err("->legacy.cmd_ctrl() should be provided\n");
0640 return -EINVAL;
0641 }
0642
0643 return 0;
0644 }