1 /* 2 * Handles the M-Systems DiskOnChip G3 chip 3 * 4 * Copyright (C) 2011 Robert Jarzmik 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software 18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 * 20 */ 21 22 #include <linux/kernel.h> 23 #include <linux/module.h> 24 #include <linux/errno.h> 25 #include <linux/platform_device.h> 26 #include <linux/string.h> 27 #include <linux/slab.h> 28 #include <linux/io.h> 29 #include <linux/delay.h> 30 #include <linux/mtd/mtd.h> 31 #include <linux/mtd/partitions.h> 32 #include <linux/bitmap.h> 33 #include <linux/bitrev.h> 34 #include <linux/bch.h> 35 36 #include <linux/debugfs.h> 37 #include <linux/seq_file.h> 38 39 #define CREATE_TRACE_POINTS 40 #include "docg3.h" 41 42 /* 43 * This driver handles the DiskOnChip G3 flash memory. 44 * 45 * As no specification is available from M-Systems/Sandisk, this drivers lacks 46 * several functions available on the chip, as : 47 * - IPL write 48 * 49 * The bus data width (8bits versus 16bits) is not handled (if_cfg flag), and 50 * the driver assumes a 16bits data bus. 51 * 52 * DocG3 relies on 2 ECC algorithms, which are handled in hardware : 53 * - a 1 byte Hamming code stored in the OOB for each page 54 * - a 7 bytes BCH code stored in the OOB for each page 55 * The BCH ECC is : 56 * - BCH is in GF(2^14) 57 * - BCH is over data of 520 bytes (512 page + 7 page_info bytes 58 * + 1 hamming byte) 59 * - BCH can correct up to 4 bits (t = 4) 60 * - BCH syndroms are calculated in hardware, and checked in hardware as well 61 * 62 */ 63 64 static unsigned int reliable_mode; 65 module_param(reliable_mode, uint, 0); 66 MODULE_PARM_DESC(reliable_mode, "Set the docg3 mode (0=normal MLC, 1=fast, " 67 "2=reliable) : MLC normal operations are in normal mode"); 68 69 /** 70 * struct docg3_oobinfo - DiskOnChip G3 OOB layout 71 * @eccbytes: 8 bytes are used (1 for Hamming ECC, 7 for BCH ECC) 72 * @eccpos: ecc positions (byte 7 is Hamming ECC, byte 8-14 are BCH ECC) 73 * @oobfree: free pageinfo bytes (byte 0 until byte 6, byte 15 74 * @oobavail: 8 available bytes remaining after ECC toll 75 */ 76 static struct nand_ecclayout docg3_oobinfo = { 77 .eccbytes = 8, 78 .eccpos = {7, 8, 9, 10, 11, 12, 13, 14}, 79 .oobfree = {{0, 7}, {15, 1} }, 80 .oobavail = 8, 81 }; 82 83 static inline u8 doc_readb(struct docg3 *docg3, u16 reg) 84 { 85 u8 val = readb(docg3->cascade->base + reg); 86 87 trace_docg3_io(0, 8, reg, (int)val); 88 return val; 89 } 90 91 static inline u16 doc_readw(struct docg3 *docg3, u16 reg) 92 { 93 u16 val = readw(docg3->cascade->base + reg); 94 95 trace_docg3_io(0, 16, reg, (int)val); 96 return val; 97 } 98 99 static inline void doc_writeb(struct docg3 *docg3, u8 val, u16 reg) 100 { 101 writeb(val, docg3->cascade->base + reg); 102 trace_docg3_io(1, 8, reg, val); 103 } 104 105 static inline void doc_writew(struct docg3 *docg3, u16 val, u16 reg) 106 { 107 writew(val, docg3->cascade->base + reg); 108 trace_docg3_io(1, 16, reg, val); 109 } 110 111 static inline void doc_flash_command(struct docg3 *docg3, u8 cmd) 112 { 113 doc_writeb(docg3, cmd, DOC_FLASHCOMMAND); 114 } 115 116 static inline void doc_flash_sequence(struct docg3 *docg3, u8 seq) 117 { 118 doc_writeb(docg3, seq, DOC_FLASHSEQUENCE); 119 } 120 121 static inline void doc_flash_address(struct docg3 *docg3, u8 addr) 122 { 123 doc_writeb(docg3, addr, DOC_FLASHADDRESS); 124 } 125 126 static char const *part_probes[] = { "cmdlinepart", "saftlpart", NULL }; 127 128 static int doc_register_readb(struct docg3 *docg3, int reg) 129 { 130 u8 val; 131 132 doc_writew(docg3, reg, DOC_READADDRESS); 133 val = doc_readb(docg3, reg); 134 doc_vdbg("Read register %04x : %02x\n", reg, val); 135 return val; 136 } 137 138 static int doc_register_readw(struct docg3 *docg3, int reg) 139 { 140 u16 val; 141 142 doc_writew(docg3, reg, DOC_READADDRESS); 143 val = doc_readw(docg3, reg); 144 doc_vdbg("Read register %04x : %04x\n", reg, val); 145 return val; 146 } 147 148 /** 149 * doc_delay - delay docg3 operations 150 * @docg3: the device 151 * @nbNOPs: the number of NOPs to issue 152 * 153 * As no specification is available, the right timings between chip commands are 154 * unknown. The only available piece of information are the observed nops on a 155 * working docg3 chip. 156 * Therefore, doc_delay relies on a busy loop of NOPs, instead of scheduler 157 * friendlier msleep() functions or blocking mdelay(). 158 */ 159 static void doc_delay(struct docg3 *docg3, int nbNOPs) 160 { 161 int i; 162 163 doc_vdbg("NOP x %d\n", nbNOPs); 164 for (i = 0; i < nbNOPs; i++) 165 doc_writeb(docg3, 0, DOC_NOP); 166 } 167 168 static int is_prot_seq_error(struct docg3 *docg3) 169 { 170 int ctrl; 171 172 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); 173 return ctrl & (DOC_CTRL_PROTECTION_ERROR | DOC_CTRL_SEQUENCE_ERROR); 174 } 175 176 static int doc_is_ready(struct docg3 *docg3) 177 { 178 int ctrl; 179 180 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); 181 return ctrl & DOC_CTRL_FLASHREADY; 182 } 183 184 static int doc_wait_ready(struct docg3 *docg3) 185 { 186 int maxWaitCycles = 100; 187 188 do { 189 doc_delay(docg3, 4); 190 cpu_relax(); 191 } while (!doc_is_ready(docg3) && maxWaitCycles--); 192 doc_delay(docg3, 2); 193 if (maxWaitCycles > 0) 194 return 0; 195 else 196 return -EIO; 197 } 198 199 static int doc_reset_seq(struct docg3 *docg3) 200 { 201 int ret; 202 203 doc_writeb(docg3, 0x10, DOC_FLASHCONTROL); 204 doc_flash_sequence(docg3, DOC_SEQ_RESET); 205 doc_flash_command(docg3, DOC_CMD_RESET); 206 doc_delay(docg3, 2); 207 ret = doc_wait_ready(docg3); 208 209 doc_dbg("doc_reset_seq() -> isReady=%s\n", ret ? "false" : "true"); 210 return ret; 211 } 212 213 /** 214 * doc_read_data_area - Read data from data area 215 * @docg3: the device 216 * @buf: the buffer to fill in (might be NULL is dummy reads) 217 * @len: the length to read 218 * @first: first time read, DOC_READADDRESS should be set 219 * 220 * Reads bytes from flash data. Handles the single byte / even bytes reads. 221 */ 222 static void doc_read_data_area(struct docg3 *docg3, void *buf, int len, 223 int first) 224 { 225 int i, cdr, len4; 226 u16 data16, *dst16; 227 u8 data8, *dst8; 228 229 doc_dbg("doc_read_data_area(buf=%p, len=%d)\n", buf, len); 230 cdr = len & 0x1; 231 len4 = len - cdr; 232 233 if (first) 234 doc_writew(docg3, DOC_IOSPACE_DATA, DOC_READADDRESS); 235 dst16 = buf; 236 for (i = 0; i < len4; i += 2) { 237 data16 = doc_readw(docg3, DOC_IOSPACE_DATA); 238 if (dst16) { 239 *dst16 = data16; 240 dst16++; 241 } 242 } 243 244 if (cdr) { 245 doc_writew(docg3, DOC_IOSPACE_DATA | DOC_READADDR_ONE_BYTE, 246 DOC_READADDRESS); 247 doc_delay(docg3, 1); 248 dst8 = (u8 *)dst16; 249 for (i = 0; i < cdr; i++) { 250 data8 = doc_readb(docg3, DOC_IOSPACE_DATA); 251 if (dst8) { 252 *dst8 = data8; 253 dst8++; 254 } 255 } 256 } 257 } 258 259 /** 260 * doc_write_data_area - Write data into data area 261 * @docg3: the device 262 * @buf: the buffer to get input bytes from 263 * @len: the length to write 264 * 265 * Writes bytes into flash data. Handles the single byte / even bytes writes. 266 */ 267 static void doc_write_data_area(struct docg3 *docg3, const void *buf, int len) 268 { 269 int i, cdr, len4; 270 u16 *src16; 271 u8 *src8; 272 273 doc_dbg("doc_write_data_area(buf=%p, len=%d)\n", buf, len); 274 cdr = len & 0x3; 275 len4 = len - cdr; 276 277 doc_writew(docg3, DOC_IOSPACE_DATA, DOC_READADDRESS); 278 src16 = (u16 *)buf; 279 for (i = 0; i < len4; i += 2) { 280 doc_writew(docg3, *src16, DOC_IOSPACE_DATA); 281 src16++; 282 } 283 284 src8 = (u8 *)src16; 285 for (i = 0; i < cdr; i++) { 286 doc_writew(docg3, DOC_IOSPACE_DATA | DOC_READADDR_ONE_BYTE, 287 DOC_READADDRESS); 288 doc_writeb(docg3, *src8, DOC_IOSPACE_DATA); 289 src8++; 290 } 291 } 292 293 /** 294 * doc_set_data_mode - Sets the flash to normal or reliable data mode 295 * @docg3: the device 296 * 297 * The reliable data mode is a bit slower than the fast mode, but less errors 298 * occur. Entering the reliable mode cannot be done without entering the fast 299 * mode first. 300 * 301 * In reliable mode, pages 2*n and 2*n+1 are clones. Writing to page 0 of blocks 302 * (4,5) make the hardware write also to page 1 of blocks blocks(4,5). Reading 303 * from page 0 of blocks (4,5) or from page 1 of blocks (4,5) gives the same 304 * result, which is a logical and between bytes from page 0 and page 1 (which is 305 * consistent with the fact that writing to a page is _clearing_ bits of that 306 * page). 307 */ 308 static void doc_set_reliable_mode(struct docg3 *docg3) 309 { 310 static char *strmode[] = { "normal", "fast", "reliable", "invalid" }; 311 312 doc_dbg("doc_set_reliable_mode(%s)\n", strmode[docg3->reliable]); 313 switch (docg3->reliable) { 314 case 0: 315 break; 316 case 1: 317 doc_flash_sequence(docg3, DOC_SEQ_SET_FASTMODE); 318 doc_flash_command(docg3, DOC_CMD_FAST_MODE); 319 break; 320 case 2: 321 doc_flash_sequence(docg3, DOC_SEQ_SET_RELIABLEMODE); 322 doc_flash_command(docg3, DOC_CMD_FAST_MODE); 323 doc_flash_command(docg3, DOC_CMD_RELIABLE_MODE); 324 break; 325 default: 326 doc_err("doc_set_reliable_mode(): invalid mode\n"); 327 break; 328 } 329 doc_delay(docg3, 2); 330 } 331 332 /** 333 * doc_set_asic_mode - Set the ASIC mode 334 * @docg3: the device 335 * @mode: the mode 336 * 337 * The ASIC can work in 3 modes : 338 * - RESET: all registers are zeroed 339 * - NORMAL: receives and handles commands 340 * - POWERDOWN: minimal poweruse, flash parts shut off 341 */ 342 static void doc_set_asic_mode(struct docg3 *docg3, u8 mode) 343 { 344 int i; 345 346 for (i = 0; i < 12; i++) 347 doc_readb(docg3, DOC_IOSPACE_IPL); 348 349 mode |= DOC_ASICMODE_MDWREN; 350 doc_dbg("doc_set_asic_mode(%02x)\n", mode); 351 doc_writeb(docg3, mode, DOC_ASICMODE); 352 doc_writeb(docg3, ~mode, DOC_ASICMODECONFIRM); 353 doc_delay(docg3, 1); 354 } 355 356 /** 357 * doc_set_device_id - Sets the devices id for cascaded G3 chips 358 * @docg3: the device 359 * @id: the chip to select (amongst 0, 1, 2, 3) 360 * 361 * There can be 4 cascaded G3 chips. This function selects the one which will 362 * should be the active one. 363 */ 364 static void doc_set_device_id(struct docg3 *docg3, int id) 365 { 366 u8 ctrl; 367 368 doc_dbg("doc_set_device_id(%d)\n", id); 369 doc_writeb(docg3, id, DOC_DEVICESELECT); 370 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); 371 372 ctrl &= ~DOC_CTRL_VIOLATION; 373 ctrl |= DOC_CTRL_CE; 374 doc_writeb(docg3, ctrl, DOC_FLASHCONTROL); 375 } 376 377 /** 378 * doc_set_extra_page_mode - Change flash page layout 379 * @docg3: the device 380 * 381 * Normally, the flash page is split into the data (512 bytes) and the out of 382 * band data (16 bytes). For each, 4 more bytes can be accessed, where the wear 383 * leveling counters are stored. To access this last area of 4 bytes, a special 384 * mode must be input to the flash ASIC. 385 * 386 * Returns 0 if no error occurred, -EIO else. 387 */ 388 static int doc_set_extra_page_mode(struct docg3 *docg3) 389 { 390 int fctrl; 391 392 doc_dbg("doc_set_extra_page_mode()\n"); 393 doc_flash_sequence(docg3, DOC_SEQ_PAGE_SIZE_532); 394 doc_flash_command(docg3, DOC_CMD_PAGE_SIZE_532); 395 doc_delay(docg3, 2); 396 397 fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); 398 if (fctrl & (DOC_CTRL_PROTECTION_ERROR | DOC_CTRL_SEQUENCE_ERROR)) 399 return -EIO; 400 else 401 return 0; 402 } 403 404 /** 405 * doc_setup_addr_sector - Setup blocks/page/ofs address for one plane 406 * @docg3: the device 407 * @sector: the sector 408 */ 409 static void doc_setup_addr_sector(struct docg3 *docg3, int sector) 410 { 411 doc_delay(docg3, 1); 412 doc_flash_address(docg3, sector & 0xff); 413 doc_flash_address(docg3, (sector >> 8) & 0xff); 414 doc_flash_address(docg3, (sector >> 16) & 0xff); 415 doc_delay(docg3, 1); 416 } 417 418 /** 419 * doc_setup_writeaddr_sector - Setup blocks/page/ofs address for one plane 420 * @docg3: the device 421 * @sector: the sector 422 * @ofs: the offset in the page, between 0 and (512 + 16 + 512) 423 */ 424 static void doc_setup_writeaddr_sector(struct docg3 *docg3, int sector, int ofs) 425 { 426 ofs = ofs >> 2; 427 doc_delay(docg3, 1); 428 doc_flash_address(docg3, ofs & 0xff); 429 doc_flash_address(docg3, sector & 0xff); 430 doc_flash_address(docg3, (sector >> 8) & 0xff); 431 doc_flash_address(docg3, (sector >> 16) & 0xff); 432 doc_delay(docg3, 1); 433 } 434 435 /** 436 * doc_seek - Set both flash planes to the specified block, page for reading 437 * @docg3: the device 438 * @block0: the first plane block index 439 * @block1: the second plane block index 440 * @page: the page index within the block 441 * @wear: if true, read will occur on the 4 extra bytes of the wear area 442 * @ofs: offset in page to read 443 * 444 * Programs the flash even and odd planes to the specific block and page. 445 * Alternatively, programs the flash to the wear area of the specified page. 446 */ 447 static int doc_read_seek(struct docg3 *docg3, int block0, int block1, int page, 448 int wear, int ofs) 449 { 450 int sector, ret = 0; 451 452 doc_dbg("doc_seek(blocks=(%d,%d), page=%d, ofs=%d, wear=%d)\n", 453 block0, block1, page, ofs, wear); 454 455 if (!wear && (ofs < 2 * DOC_LAYOUT_PAGE_SIZE)) { 456 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE1); 457 doc_flash_command(docg3, DOC_CMD_READ_PLANE1); 458 doc_delay(docg3, 2); 459 } else { 460 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE2); 461 doc_flash_command(docg3, DOC_CMD_READ_PLANE2); 462 doc_delay(docg3, 2); 463 } 464 465 doc_set_reliable_mode(docg3); 466 if (wear) 467 ret = doc_set_extra_page_mode(docg3); 468 if (ret) 469 goto out; 470 471 doc_flash_sequence(docg3, DOC_SEQ_READ); 472 sector = (block0 << DOC_ADDR_BLOCK_SHIFT) + (page & DOC_ADDR_PAGE_MASK); 473 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); 474 doc_setup_addr_sector(docg3, sector); 475 476 sector = (block1 << DOC_ADDR_BLOCK_SHIFT) + (page & DOC_ADDR_PAGE_MASK); 477 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); 478 doc_setup_addr_sector(docg3, sector); 479 doc_delay(docg3, 1); 480 481 out: 482 return ret; 483 } 484 485 /** 486 * doc_write_seek - Set both flash planes to the specified block, page for writing 487 * @docg3: the device 488 * @block0: the first plane block index 489 * @block1: the second plane block index 490 * @page: the page index within the block 491 * @ofs: offset in page to write 492 * 493 * Programs the flash even and odd planes to the specific block and page. 494 * Alternatively, programs the flash to the wear area of the specified page. 495 */ 496 static int doc_write_seek(struct docg3 *docg3, int block0, int block1, int page, 497 int ofs) 498 { 499 int ret = 0, sector; 500 501 doc_dbg("doc_write_seek(blocks=(%d,%d), page=%d, ofs=%d)\n", 502 block0, block1, page, ofs); 503 504 doc_set_reliable_mode(docg3); 505 506 if (ofs < 2 * DOC_LAYOUT_PAGE_SIZE) { 507 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE1); 508 doc_flash_command(docg3, DOC_CMD_READ_PLANE1); 509 doc_delay(docg3, 2); 510 } else { 511 doc_flash_sequence(docg3, DOC_SEQ_SET_PLANE2); 512 doc_flash_command(docg3, DOC_CMD_READ_PLANE2); 513 doc_delay(docg3, 2); 514 } 515 516 doc_flash_sequence(docg3, DOC_SEQ_PAGE_SETUP); 517 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE1); 518 519 sector = (block0 << DOC_ADDR_BLOCK_SHIFT) + (page & DOC_ADDR_PAGE_MASK); 520 doc_setup_writeaddr_sector(docg3, sector, ofs); 521 522 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE3); 523 doc_delay(docg3, 2); 524 ret = doc_wait_ready(docg3); 525 if (ret) 526 goto out; 527 528 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE1); 529 sector = (block1 << DOC_ADDR_BLOCK_SHIFT) + (page & DOC_ADDR_PAGE_MASK); 530 doc_setup_writeaddr_sector(docg3, sector, ofs); 531 doc_delay(docg3, 1); 532 533 out: 534 return ret; 535 } 536 537 538 /** 539 * doc_read_page_ecc_init - Initialize hardware ECC engine 540 * @docg3: the device 541 * @len: the number of bytes covered by the ECC (BCH covered) 542 * 543 * The function does initialize the hardware ECC engine to compute the Hamming 544 * ECC (on 1 byte) and the BCH hardware ECC (on 7 bytes). 545 * 546 * Return 0 if succeeded, -EIO on error 547 */ 548 static int doc_read_page_ecc_init(struct docg3 *docg3, int len) 549 { 550 doc_writew(docg3, DOC_ECCCONF0_READ_MODE 551 | DOC_ECCCONF0_BCH_ENABLE | DOC_ECCCONF0_HAMMING_ENABLE 552 | (len & DOC_ECCCONF0_DATA_BYTES_MASK), 553 DOC_ECCCONF0); 554 doc_delay(docg3, 4); 555 doc_register_readb(docg3, DOC_FLASHCONTROL); 556 return doc_wait_ready(docg3); 557 } 558 559 /** 560 * doc_write_page_ecc_init - Initialize hardware BCH ECC engine 561 * @docg3: the device 562 * @len: the number of bytes covered by the ECC (BCH covered) 563 * 564 * The function does initialize the hardware ECC engine to compute the Hamming 565 * ECC (on 1 byte) and the BCH hardware ECC (on 7 bytes). 566 * 567 * Return 0 if succeeded, -EIO on error 568 */ 569 static int doc_write_page_ecc_init(struct docg3 *docg3, int len) 570 { 571 doc_writew(docg3, DOC_ECCCONF0_WRITE_MODE 572 | DOC_ECCCONF0_BCH_ENABLE | DOC_ECCCONF0_HAMMING_ENABLE 573 | (len & DOC_ECCCONF0_DATA_BYTES_MASK), 574 DOC_ECCCONF0); 575 doc_delay(docg3, 4); 576 doc_register_readb(docg3, DOC_FLASHCONTROL); 577 return doc_wait_ready(docg3); 578 } 579 580 /** 581 * doc_ecc_disable - Disable Hamming and BCH ECC hardware calculator 582 * @docg3: the device 583 * 584 * Disables the hardware ECC generator and checker, for unchecked reads (as when 585 * reading OOB only or write status byte). 586 */ 587 static void doc_ecc_disable(struct docg3 *docg3) 588 { 589 doc_writew(docg3, DOC_ECCCONF0_READ_MODE, DOC_ECCCONF0); 590 doc_delay(docg3, 4); 591 } 592 593 /** 594 * doc_hamming_ecc_init - Initialize hardware Hamming ECC engine 595 * @docg3: the device 596 * @nb_bytes: the number of bytes covered by the ECC (Hamming covered) 597 * 598 * This function programs the ECC hardware to compute the hamming code on the 599 * last provided N bytes to the hardware generator. 600 */ 601 static void doc_hamming_ecc_init(struct docg3 *docg3, int nb_bytes) 602 { 603 u8 ecc_conf1; 604 605 ecc_conf1 = doc_register_readb(docg3, DOC_ECCCONF1); 606 ecc_conf1 &= ~DOC_ECCCONF1_HAMMING_BITS_MASK; 607 ecc_conf1 |= (nb_bytes & DOC_ECCCONF1_HAMMING_BITS_MASK); 608 doc_writeb(docg3, ecc_conf1, DOC_ECCCONF1); 609 } 610 611 /** 612 * doc_ecc_bch_fix_data - Fix if need be read data from flash 613 * @docg3: the device 614 * @buf: the buffer of read data (512 + 7 + 1 bytes) 615 * @hwecc: the hardware calculated ECC. 616 * It's in fact recv_ecc ^ calc_ecc, where recv_ecc was read from OOB 617 * area data, and calc_ecc the ECC calculated by the hardware generator. 618 * 619 * Checks if the received data matches the ECC, and if an error is detected, 620 * tries to fix the bit flips (at most 4) in the buffer buf. As the docg3 621 * understands the (data, ecc, syndroms) in an inverted order in comparison to 622 * the BCH library, the function reverses the order of bits (ie. bit7 and bit0, 623 * bit6 and bit 1, ...) for all ECC data. 624 * 625 * The hardware ecc unit produces oob_ecc ^ calc_ecc. The kernel's bch 626 * algorithm is used to decode this. However the hw operates on page 627 * data in a bit order that is the reverse of that of the bch alg, 628 * requiring that the bits be reversed on the result. Thanks to Ivan 629 * Djelic for his analysis. 630 * 631 * Returns number of fixed bits (0, 1, 2, 3, 4) or -EBADMSG if too many bit 632 * errors were detected and cannot be fixed. 633 */ 634 static int doc_ecc_bch_fix_data(struct docg3 *docg3, void *buf, u8 *hwecc) 635 { 636 u8 ecc[DOC_ECC_BCH_SIZE]; 637 int errorpos[DOC_ECC_BCH_T], i, numerrs; 638 639 for (i = 0; i < DOC_ECC_BCH_SIZE; i++) 640 ecc[i] = bitrev8(hwecc[i]); 641 numerrs = decode_bch(docg3->cascade->bch, NULL, 642 DOC_ECC_BCH_COVERED_BYTES, 643 NULL, ecc, NULL, errorpos); 644 BUG_ON(numerrs == -EINVAL); 645 if (numerrs < 0) 646 goto out; 647 648 for (i = 0; i < numerrs; i++) 649 errorpos[i] = (errorpos[i] & ~7) | (7 - (errorpos[i] & 7)); 650 for (i = 0; i < numerrs; i++) 651 if (errorpos[i] < DOC_ECC_BCH_COVERED_BYTES*8) 652 /* error is located in data, correct it */ 653 change_bit(errorpos[i], buf); 654 out: 655 doc_dbg("doc_ecc_bch_fix_data: flipped %d bits\n", numerrs); 656 return numerrs; 657 } 658 659 660 /** 661 * doc_read_page_prepare - Prepares reading data from a flash page 662 * @docg3: the device 663 * @block0: the first plane block index on flash memory 664 * @block1: the second plane block index on flash memory 665 * @page: the page index in the block 666 * @offset: the offset in the page (must be a multiple of 4) 667 * 668 * Prepares the page to be read in the flash memory : 669 * - tell ASIC to map the flash pages 670 * - tell ASIC to be in read mode 671 * 672 * After a call to this method, a call to doc_read_page_finish is mandatory, 673 * to end the read cycle of the flash. 674 * 675 * Read data from a flash page. The length to be read must be between 0 and 676 * (page_size + oob_size + wear_size), ie. 532, and a multiple of 4 (because 677 * the extra bytes reading is not implemented). 678 * 679 * As pages are grouped by 2 (in 2 planes), reading from a page must be done 680 * in two steps: 681 * - one read of 512 bytes at offset 0 682 * - one read of 512 bytes at offset 512 + 16 683 * 684 * Returns 0 if successful, -EIO if a read error occurred. 685 */ 686 static int doc_read_page_prepare(struct docg3 *docg3, int block0, int block1, 687 int page, int offset) 688 { 689 int wear_area = 0, ret = 0; 690 691 doc_dbg("doc_read_page_prepare(blocks=(%d,%d), page=%d, ofsInPage=%d)\n", 692 block0, block1, page, offset); 693 if (offset >= DOC_LAYOUT_WEAR_OFFSET) 694 wear_area = 1; 695 if (!wear_area && offset > (DOC_LAYOUT_PAGE_OOB_SIZE * 2)) 696 return -EINVAL; 697 698 doc_set_device_id(docg3, docg3->device_id); 699 ret = doc_reset_seq(docg3); 700 if (ret) 701 goto err; 702 703 /* Program the flash address block and page */ 704 ret = doc_read_seek(docg3, block0, block1, page, wear_area, offset); 705 if (ret) 706 goto err; 707 708 doc_flash_command(docg3, DOC_CMD_READ_ALL_PLANES); 709 doc_delay(docg3, 2); 710 doc_wait_ready(docg3); 711 712 doc_flash_command(docg3, DOC_CMD_SET_ADDR_READ); 713 doc_delay(docg3, 1); 714 if (offset >= DOC_LAYOUT_PAGE_SIZE * 2) 715 offset -= 2 * DOC_LAYOUT_PAGE_SIZE; 716 doc_flash_address(docg3, offset >> 2); 717 doc_delay(docg3, 1); 718 doc_wait_ready(docg3); 719 720 doc_flash_command(docg3, DOC_CMD_READ_FLASH); 721 722 return 0; 723 err: 724 doc_writeb(docg3, 0, DOC_DATAEND); 725 doc_delay(docg3, 2); 726 return -EIO; 727 } 728 729 /** 730 * doc_read_page_getbytes - Reads bytes from a prepared page 731 * @docg3: the device 732 * @len: the number of bytes to be read (must be a multiple of 4) 733 * @buf: the buffer to be filled in (or NULL is forget bytes) 734 * @first: 1 if first time read, DOC_READADDRESS should be set 735 * @last_odd: 1 if last read ended up on an odd byte 736 * 737 * Reads bytes from a prepared page. There is a trickery here : if the last read 738 * ended up on an odd offset in the 1024 bytes double page, ie. between the 2 739 * planes, the first byte must be read apart. If a word (16bit) read was used, 740 * the read would return the byte of plane 2 as low *and* high endian, which 741 * will mess the read. 742 * 743 */ 744 static int doc_read_page_getbytes(struct docg3 *docg3, int len, u_char *buf, 745 int first, int last_odd) 746 { 747 if (last_odd && len > 0) { 748 doc_read_data_area(docg3, buf, 1, first); 749 doc_read_data_area(docg3, buf ? buf + 1 : buf, len - 1, 0); 750 } else { 751 doc_read_data_area(docg3, buf, len, first); 752 } 753 doc_delay(docg3, 2); 754 return len; 755 } 756 757 /** 758 * doc_write_page_putbytes - Writes bytes into a prepared page 759 * @docg3: the device 760 * @len: the number of bytes to be written 761 * @buf: the buffer of input bytes 762 * 763 */ 764 static void doc_write_page_putbytes(struct docg3 *docg3, int len, 765 const u_char *buf) 766 { 767 doc_write_data_area(docg3, buf, len); 768 doc_delay(docg3, 2); 769 } 770 771 /** 772 * doc_get_bch_hw_ecc - Get hardware calculated BCH ECC 773 * @docg3: the device 774 * @hwecc: the array of 7 integers where the hardware ecc will be stored 775 */ 776 static void doc_get_bch_hw_ecc(struct docg3 *docg3, u8 *hwecc) 777 { 778 int i; 779 780 for (i = 0; i < DOC_ECC_BCH_SIZE; i++) 781 hwecc[i] = doc_register_readb(docg3, DOC_BCH_HW_ECC(i)); 782 } 783 784 /** 785 * doc_page_finish - Ends reading/writing of a flash page 786 * @docg3: the device 787 */ 788 static void doc_page_finish(struct docg3 *docg3) 789 { 790 doc_writeb(docg3, 0, DOC_DATAEND); 791 doc_delay(docg3, 2); 792 } 793 794 /** 795 * doc_read_page_finish - Ends reading of a flash page 796 * @docg3: the device 797 * 798 * As a side effect, resets the chip selector to 0. This ensures that after each 799 * read operation, the floor 0 is selected. Therefore, if the systems halts, the 800 * reboot will boot on floor 0, where the IPL is. 801 */ 802 static void doc_read_page_finish(struct docg3 *docg3) 803 { 804 doc_page_finish(docg3); 805 doc_set_device_id(docg3, 0); 806 } 807 808 /** 809 * calc_block_sector - Calculate blocks, pages and ofs. 810 811 * @from: offset in flash 812 * @block0: first plane block index calculated 813 * @block1: second plane block index calculated 814 * @page: page calculated 815 * @ofs: offset in page 816 * @reliable: 0 if docg3 in normal mode, 1 if docg3 in fast mode, 2 if docg3 in 817 * reliable mode. 818 * 819 * The calculation is based on the reliable/normal mode. In normal mode, the 64 820 * pages of a block are available. In reliable mode, as pages 2*n and 2*n+1 are 821 * clones, only 32 pages per block are available. 822 */ 823 static void calc_block_sector(loff_t from, int *block0, int *block1, int *page, 824 int *ofs, int reliable) 825 { 826 uint sector, pages_biblock; 827 828 pages_biblock = DOC_LAYOUT_PAGES_PER_BLOCK * DOC_LAYOUT_NBPLANES; 829 if (reliable == 1 || reliable == 2) 830 pages_biblock /= 2; 831 832 sector = from / DOC_LAYOUT_PAGE_SIZE; 833 *block0 = sector / pages_biblock * DOC_LAYOUT_NBPLANES; 834 *block1 = *block0 + 1; 835 *page = sector % pages_biblock; 836 *page /= DOC_LAYOUT_NBPLANES; 837 if (reliable == 1 || reliable == 2) 838 *page *= 2; 839 if (sector % 2) 840 *ofs = DOC_LAYOUT_PAGE_OOB_SIZE; 841 else 842 *ofs = 0; 843 } 844 845 /** 846 * doc_read_oob - Read out of band bytes from flash 847 * @mtd: the device 848 * @from: the offset from first block and first page, in bytes, aligned on page 849 * size 850 * @ops: the mtd oob structure 851 * 852 * Reads flash memory OOB area of pages. 853 * 854 * Returns 0 if read successful, of -EIO, -EINVAL if an error occurred 855 */ 856 static int doc_read_oob(struct mtd_info *mtd, loff_t from, 857 struct mtd_oob_ops *ops) 858 { 859 struct docg3 *docg3 = mtd->priv; 860 int block0, block1, page, ret, skip, ofs = 0; 861 u8 *oobbuf = ops->oobbuf; 862 u8 *buf = ops->datbuf; 863 size_t len, ooblen, nbdata, nboob; 864 u8 hwecc[DOC_ECC_BCH_SIZE], eccconf1; 865 int max_bitflips = 0; 866 867 if (buf) 868 len = ops->len; 869 else 870 len = 0; 871 if (oobbuf) 872 ooblen = ops->ooblen; 873 else 874 ooblen = 0; 875 876 if (oobbuf && ops->mode == MTD_OPS_PLACE_OOB) 877 oobbuf += ops->ooboffs; 878 879 doc_dbg("doc_read_oob(from=%lld, mode=%d, data=(%p:%zu), oob=(%p:%zu))\n", 880 from, ops->mode, buf, len, oobbuf, ooblen); 881 if (ooblen % DOC_LAYOUT_OOB_SIZE) 882 return -EINVAL; 883 884 if (from + len > mtd->size) 885 return -EINVAL; 886 887 ops->oobretlen = 0; 888 ops->retlen = 0; 889 ret = 0; 890 skip = from % DOC_LAYOUT_PAGE_SIZE; 891 mutex_lock(&docg3->cascade->lock); 892 while (ret >= 0 && (len > 0 || ooblen > 0)) { 893 calc_block_sector(from - skip, &block0, &block1, &page, &ofs, 894 docg3->reliable); 895 nbdata = min_t(size_t, len, DOC_LAYOUT_PAGE_SIZE - skip); 896 nboob = min_t(size_t, ooblen, (size_t)DOC_LAYOUT_OOB_SIZE); 897 ret = doc_read_page_prepare(docg3, block0, block1, page, ofs); 898 if (ret < 0) 899 goto out; 900 ret = doc_read_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES); 901 if (ret < 0) 902 goto err_in_read; 903 ret = doc_read_page_getbytes(docg3, skip, NULL, 1, 0); 904 if (ret < skip) 905 goto err_in_read; 906 ret = doc_read_page_getbytes(docg3, nbdata, buf, 0, skip % 2); 907 if (ret < nbdata) 908 goto err_in_read; 909 doc_read_page_getbytes(docg3, 910 DOC_LAYOUT_PAGE_SIZE - nbdata - skip, 911 NULL, 0, (skip + nbdata) % 2); 912 ret = doc_read_page_getbytes(docg3, nboob, oobbuf, 0, 0); 913 if (ret < nboob) 914 goto err_in_read; 915 doc_read_page_getbytes(docg3, DOC_LAYOUT_OOB_SIZE - nboob, 916 NULL, 0, nboob % 2); 917 918 doc_get_bch_hw_ecc(docg3, hwecc); 919 eccconf1 = doc_register_readb(docg3, DOC_ECCCONF1); 920 921 if (nboob >= DOC_LAYOUT_OOB_SIZE) { 922 doc_dbg("OOB - INFO: %02x:%02x:%02x:%02x:%02x:%02x:%02x\n", 923 oobbuf[0], oobbuf[1], oobbuf[2], oobbuf[3], 924 oobbuf[4], oobbuf[5], oobbuf[6]); 925 doc_dbg("OOB - HAMMING: %02x\n", oobbuf[7]); 926 doc_dbg("OOB - BCH_ECC: %02x:%02x:%02x:%02x:%02x:%02x:%02x\n", 927 oobbuf[8], oobbuf[9], oobbuf[10], oobbuf[11], 928 oobbuf[12], oobbuf[13], oobbuf[14]); 929 doc_dbg("OOB - UNUSED: %02x\n", oobbuf[15]); 930 } 931 doc_dbg("ECC checks: ECCConf1=%x\n", eccconf1); 932 doc_dbg("ECC HW_ECC: %02x:%02x:%02x:%02x:%02x:%02x:%02x\n", 933 hwecc[0], hwecc[1], hwecc[2], hwecc[3], hwecc[4], 934 hwecc[5], hwecc[6]); 935 936 ret = -EIO; 937 if (is_prot_seq_error(docg3)) 938 goto err_in_read; 939 ret = 0; 940 if ((block0 >= DOC_LAYOUT_BLOCK_FIRST_DATA) && 941 (eccconf1 & DOC_ECCCONF1_BCH_SYNDROM_ERR) && 942 (eccconf1 & DOC_ECCCONF1_PAGE_IS_WRITTEN) && 943 (ops->mode != MTD_OPS_RAW) && 944 (nbdata == DOC_LAYOUT_PAGE_SIZE)) { 945 ret = doc_ecc_bch_fix_data(docg3, buf, hwecc); 946 if (ret < 0) { 947 mtd->ecc_stats.failed++; 948 ret = -EBADMSG; 949 } 950 if (ret > 0) { 951 mtd->ecc_stats.corrected += ret; 952 max_bitflips = max(max_bitflips, ret); 953 ret = max_bitflips; 954 } 955 } 956 957 doc_read_page_finish(docg3); 958 ops->retlen += nbdata; 959 ops->oobretlen += nboob; 960 buf += nbdata; 961 oobbuf += nboob; 962 len -= nbdata; 963 ooblen -= nboob; 964 from += DOC_LAYOUT_PAGE_SIZE; 965 skip = 0; 966 } 967 968 out: 969 mutex_unlock(&docg3->cascade->lock); 970 return ret; 971 err_in_read: 972 doc_read_page_finish(docg3); 973 goto out; 974 } 975 976 /** 977 * doc_read - Read bytes from flash 978 * @mtd: the device 979 * @from: the offset from first block and first page, in bytes, aligned on page 980 * size 981 * @len: the number of bytes to read (must be a multiple of 4) 982 * @retlen: the number of bytes actually read 983 * @buf: the filled in buffer 984 * 985 * Reads flash memory pages. This function does not read the OOB chunk, but only 986 * the page data. 987 * 988 * Returns 0 if read successful, of -EIO, -EINVAL if an error occurred 989 */ 990 static int doc_read(struct mtd_info *mtd, loff_t from, size_t len, 991 size_t *retlen, u_char *buf) 992 { 993 struct mtd_oob_ops ops; 994 size_t ret; 995 996 memset(&ops, 0, sizeof(ops)); 997 ops.datbuf = buf; 998 ops.len = len; 999 ops.mode = MTD_OPS_AUTO_OOB; 1000 1001 ret = doc_read_oob(mtd, from, &ops); 1002 *retlen = ops.retlen; 1003 return ret; 1004 } 1005 1006 static int doc_reload_bbt(struct docg3 *docg3) 1007 { 1008 int block = DOC_LAYOUT_BLOCK_BBT; 1009 int ret = 0, nbpages, page; 1010 u_char *buf = docg3->bbt; 1011 1012 nbpages = DIV_ROUND_UP(docg3->max_block + 1, 8 * DOC_LAYOUT_PAGE_SIZE); 1013 for (page = 0; !ret && (page < nbpages); page++) { 1014 ret = doc_read_page_prepare(docg3, block, block + 1, 1015 page + DOC_LAYOUT_PAGE_BBT, 0); 1016 if (!ret) 1017 ret = doc_read_page_ecc_init(docg3, 1018 DOC_LAYOUT_PAGE_SIZE); 1019 if (!ret) 1020 doc_read_page_getbytes(docg3, DOC_LAYOUT_PAGE_SIZE, 1021 buf, 1, 0); 1022 buf += DOC_LAYOUT_PAGE_SIZE; 1023 } 1024 doc_read_page_finish(docg3); 1025 return ret; 1026 } 1027 1028 /** 1029 * doc_block_isbad - Checks whether a block is good or not 1030 * @mtd: the device 1031 * @from: the offset to find the correct block 1032 * 1033 * Returns 1 if block is bad, 0 if block is good 1034 */ 1035 static int doc_block_isbad(struct mtd_info *mtd, loff_t from) 1036 { 1037 struct docg3 *docg3 = mtd->priv; 1038 int block0, block1, page, ofs, is_good; 1039 1040 calc_block_sector(from, &block0, &block1, &page, &ofs, 1041 docg3->reliable); 1042 doc_dbg("doc_block_isbad(from=%lld) => block=(%d,%d), page=%d, ofs=%d\n", 1043 from, block0, block1, page, ofs); 1044 1045 if (block0 < DOC_LAYOUT_BLOCK_FIRST_DATA) 1046 return 0; 1047 if (block1 > docg3->max_block) 1048 return -EINVAL; 1049 1050 is_good = docg3->bbt[block0 >> 3] & (1 << (block0 & 0x7)); 1051 return !is_good; 1052 } 1053 1054 #if 0 1055 /** 1056 * doc_get_erase_count - Get block erase count 1057 * @docg3: the device 1058 * @from: the offset in which the block is. 1059 * 1060 * Get the number of times a block was erased. The number is the maximum of 1061 * erase times between first and second plane (which should be equal normally). 1062 * 1063 * Returns The number of erases, or -EINVAL or -EIO on error. 1064 */ 1065 static int doc_get_erase_count(struct docg3 *docg3, loff_t from) 1066 { 1067 u8 buf[DOC_LAYOUT_WEAR_SIZE]; 1068 int ret, plane1_erase_count, plane2_erase_count; 1069 int block0, block1, page, ofs; 1070 1071 doc_dbg("doc_get_erase_count(from=%lld, buf=%p)\n", from, buf); 1072 if (from % DOC_LAYOUT_PAGE_SIZE) 1073 return -EINVAL; 1074 calc_block_sector(from, &block0, &block1, &page, &ofs, docg3->reliable); 1075 if (block1 > docg3->max_block) 1076 return -EINVAL; 1077 1078 ret = doc_reset_seq(docg3); 1079 if (!ret) 1080 ret = doc_read_page_prepare(docg3, block0, block1, page, 1081 ofs + DOC_LAYOUT_WEAR_OFFSET, 0); 1082 if (!ret) 1083 ret = doc_read_page_getbytes(docg3, DOC_LAYOUT_WEAR_SIZE, 1084 buf, 1, 0); 1085 doc_read_page_finish(docg3); 1086 1087 if (ret || (buf[0] != DOC_ERASE_MARK) || (buf[2] != DOC_ERASE_MARK)) 1088 return -EIO; 1089 plane1_erase_count = (u8)(~buf[1]) | ((u8)(~buf[4]) << 8) 1090 | ((u8)(~buf[5]) << 16); 1091 plane2_erase_count = (u8)(~buf[3]) | ((u8)(~buf[6]) << 8) 1092 | ((u8)(~buf[7]) << 16); 1093 1094 return max(plane1_erase_count, plane2_erase_count); 1095 } 1096 #endif 1097 1098 /** 1099 * doc_get_op_status - get erase/write operation status 1100 * @docg3: the device 1101 * 1102 * Queries the status from the chip, and returns it 1103 * 1104 * Returns the status (bits DOC_PLANES_STATUS_*) 1105 */ 1106 static int doc_get_op_status(struct docg3 *docg3) 1107 { 1108 u8 status; 1109 1110 doc_flash_sequence(docg3, DOC_SEQ_PLANES_STATUS); 1111 doc_flash_command(docg3, DOC_CMD_PLANES_STATUS); 1112 doc_delay(docg3, 5); 1113 1114 doc_ecc_disable(docg3); 1115 doc_read_data_area(docg3, &status, 1, 1); 1116 return status; 1117 } 1118 1119 /** 1120 * doc_write_erase_wait_status - wait for write or erase completion 1121 * @docg3: the device 1122 * 1123 * Wait for the chip to be ready again after erase or write operation, and check 1124 * erase/write status. 1125 * 1126 * Returns 0 if erase successful, -EIO if erase/write issue, -ETIMEOUT if 1127 * timeout 1128 */ 1129 static int doc_write_erase_wait_status(struct docg3 *docg3) 1130 { 1131 int i, status, ret = 0; 1132 1133 for (i = 0; !doc_is_ready(docg3) && i < 5; i++) 1134 msleep(20); 1135 if (!doc_is_ready(docg3)) { 1136 doc_dbg("Timeout reached and the chip is still not ready\n"); 1137 ret = -EAGAIN; 1138 goto out; 1139 } 1140 1141 status = doc_get_op_status(docg3); 1142 if (status & DOC_PLANES_STATUS_FAIL) { 1143 doc_dbg("Erase/Write failed on (a) plane(s), status = %x\n", 1144 status); 1145 ret = -EIO; 1146 } 1147 1148 out: 1149 doc_page_finish(docg3); 1150 return ret; 1151 } 1152 1153 /** 1154 * doc_erase_block - Erase a couple of blocks 1155 * @docg3: the device 1156 * @block0: the first block to erase (leftmost plane) 1157 * @block1: the second block to erase (rightmost plane) 1158 * 1159 * Erase both blocks, and return operation status 1160 * 1161 * Returns 0 if erase successful, -EIO if erase issue, -ETIMEOUT if chip not 1162 * ready for too long 1163 */ 1164 static int doc_erase_block(struct docg3 *docg3, int block0, int block1) 1165 { 1166 int ret, sector; 1167 1168 doc_dbg("doc_erase_block(blocks=(%d,%d))\n", block0, block1); 1169 ret = doc_reset_seq(docg3); 1170 if (ret) 1171 return -EIO; 1172 1173 doc_set_reliable_mode(docg3); 1174 doc_flash_sequence(docg3, DOC_SEQ_ERASE); 1175 1176 sector = block0 << DOC_ADDR_BLOCK_SHIFT; 1177 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); 1178 doc_setup_addr_sector(docg3, sector); 1179 sector = block1 << DOC_ADDR_BLOCK_SHIFT; 1180 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); 1181 doc_setup_addr_sector(docg3, sector); 1182 doc_delay(docg3, 1); 1183 1184 doc_flash_command(docg3, DOC_CMD_ERASECYCLE2); 1185 doc_delay(docg3, 2); 1186 1187 if (is_prot_seq_error(docg3)) { 1188 doc_err("Erase blocks %d,%d error\n", block0, block1); 1189 return -EIO; 1190 } 1191 1192 return doc_write_erase_wait_status(docg3); 1193 } 1194 1195 /** 1196 * doc_erase - Erase a portion of the chip 1197 * @mtd: the device 1198 * @info: the erase info 1199 * 1200 * Erase a bunch of contiguous blocks, by pairs, as a "mtd" page of 1024 is 1201 * split into 2 pages of 512 bytes on 2 contiguous blocks. 1202 * 1203 * Returns 0 if erase successful, -EINVAL if addressing error, -EIO if erase 1204 * issue 1205 */ 1206 static int doc_erase(struct mtd_info *mtd, struct erase_info *info) 1207 { 1208 struct docg3 *docg3 = mtd->priv; 1209 uint64_t len; 1210 int block0, block1, page, ret, ofs = 0; 1211 1212 doc_dbg("doc_erase(from=%lld, len=%lld\n", info->addr, info->len); 1213 1214 info->state = MTD_ERASE_PENDING; 1215 calc_block_sector(info->addr + info->len, &block0, &block1, &page, 1216 &ofs, docg3->reliable); 1217 ret = -EINVAL; 1218 if (info->addr + info->len > mtd->size || page || ofs) 1219 goto reset_err; 1220 1221 ret = 0; 1222 calc_block_sector(info->addr, &block0, &block1, &page, &ofs, 1223 docg3->reliable); 1224 mutex_lock(&docg3->cascade->lock); 1225 doc_set_device_id(docg3, docg3->device_id); 1226 doc_set_reliable_mode(docg3); 1227 for (len = info->len; !ret && len > 0; len -= mtd->erasesize) { 1228 info->state = MTD_ERASING; 1229 ret = doc_erase_block(docg3, block0, block1); 1230 block0 += 2; 1231 block1 += 2; 1232 } 1233 mutex_unlock(&docg3->cascade->lock); 1234 1235 if (ret) 1236 goto reset_err; 1237 1238 info->state = MTD_ERASE_DONE; 1239 return 0; 1240 1241 reset_err: 1242 info->state = MTD_ERASE_FAILED; 1243 return ret; 1244 } 1245 1246 /** 1247 * doc_write_page - Write a single page to the chip 1248 * @docg3: the device 1249 * @to: the offset from first block and first page, in bytes, aligned on page 1250 * size 1251 * @buf: buffer to get bytes from 1252 * @oob: buffer to get out of band bytes from (can be NULL if no OOB should be 1253 * written) 1254 * @autoecc: if 0, all 16 bytes from OOB are taken, regardless of HW Hamming or 1255 * BCH computations. If 1, only bytes 0-7 and byte 15 are taken, 1256 * remaining ones are filled with hardware Hamming and BCH 1257 * computations. Its value is not meaningfull is oob == NULL. 1258 * 1259 * Write one full page (ie. 1 page split on two planes), of 512 bytes, with the 1260 * OOB data. The OOB ECC is automatically computed by the hardware Hamming and 1261 * BCH generator if autoecc is not null. 1262 * 1263 * Returns 0 if write successful, -EIO if write error, -EAGAIN if timeout 1264 */ 1265 static int doc_write_page(struct docg3 *docg3, loff_t to, const u_char *buf, 1266 const u_char *oob, int autoecc) 1267 { 1268 int block0, block1, page, ret, ofs = 0; 1269 u8 hwecc[DOC_ECC_BCH_SIZE], hamming; 1270 1271 doc_dbg("doc_write_page(to=%lld)\n", to); 1272 calc_block_sector(to, &block0, &block1, &page, &ofs, docg3->reliable); 1273 1274 doc_set_device_id(docg3, docg3->device_id); 1275 ret = doc_reset_seq(docg3); 1276 if (ret) 1277 goto err; 1278 1279 /* Program the flash address block and page */ 1280 ret = doc_write_seek(docg3, block0, block1, page, ofs); 1281 if (ret) 1282 goto err; 1283 1284 doc_write_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES); 1285 doc_delay(docg3, 2); 1286 doc_write_page_putbytes(docg3, DOC_LAYOUT_PAGE_SIZE, buf); 1287 1288 if (oob && autoecc) { 1289 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ, oob); 1290 doc_delay(docg3, 2); 1291 oob += DOC_LAYOUT_OOB_UNUSED_OFS; 1292 1293 hamming = doc_register_readb(docg3, DOC_HAMMINGPARITY); 1294 doc_delay(docg3, 2); 1295 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_HAMMING_SZ, 1296 &hamming); 1297 doc_delay(docg3, 2); 1298 1299 doc_get_bch_hw_ecc(docg3, hwecc); 1300 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_BCH_SZ, hwecc); 1301 doc_delay(docg3, 2); 1302 1303 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_UNUSED_SZ, oob); 1304 } 1305 if (oob && !autoecc) 1306 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_SIZE, oob); 1307 1308 doc_delay(docg3, 2); 1309 doc_page_finish(docg3); 1310 doc_delay(docg3, 2); 1311 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE2); 1312 doc_delay(docg3, 2); 1313 1314 /* 1315 * The wait status will perform another doc_page_finish() call, but that 1316 * seems to please the docg3, so leave it. 1317 */ 1318 ret = doc_write_erase_wait_status(docg3); 1319 return ret; 1320 err: 1321 doc_read_page_finish(docg3); 1322 return ret; 1323 } 1324 1325 /** 1326 * doc_guess_autoecc - Guess autoecc mode from mbd_oob_ops 1327 * @ops: the oob operations 1328 * 1329 * Returns 0 or 1 if success, -EINVAL if invalid oob mode 1330 */ 1331 static int doc_guess_autoecc(struct mtd_oob_ops *ops) 1332 { 1333 int autoecc; 1334 1335 switch (ops->mode) { 1336 case MTD_OPS_PLACE_OOB: 1337 case MTD_OPS_AUTO_OOB: 1338 autoecc = 1; 1339 break; 1340 case MTD_OPS_RAW: 1341 autoecc = 0; 1342 break; 1343 default: 1344 autoecc = -EINVAL; 1345 } 1346 return autoecc; 1347 } 1348 1349 /** 1350 * doc_fill_autooob - Fill a 16 bytes OOB from 8 non-ECC bytes 1351 * @dst: the target 16 bytes OOB buffer 1352 * @oobsrc: the source 8 bytes non-ECC OOB buffer 1353 * 1354 */ 1355 static void doc_fill_autooob(u8 *dst, u8 *oobsrc) 1356 { 1357 memcpy(dst, oobsrc, DOC_LAYOUT_OOB_PAGEINFO_SZ); 1358 dst[DOC_LAYOUT_OOB_UNUSED_OFS] = oobsrc[DOC_LAYOUT_OOB_PAGEINFO_SZ]; 1359 } 1360 1361 /** 1362 * doc_backup_oob - Backup OOB into docg3 structure 1363 * @docg3: the device 1364 * @to: the page offset in the chip 1365 * @ops: the OOB size and buffer 1366 * 1367 * As the docg3 should write a page with its OOB in one pass, and some userland 1368 * applications do write_oob() to setup the OOB and then write(), store the OOB 1369 * into a temporary storage. This is very dangerous, as 2 concurrent 1370 * applications could store an OOB, and then write their pages (which will 1371 * result into one having its OOB corrupted). 1372 * 1373 * The only reliable way would be for userland to call doc_write_oob() with both 1374 * the page data _and_ the OOB area. 1375 * 1376 * Returns 0 if success, -EINVAL if ops content invalid 1377 */ 1378 static int doc_backup_oob(struct docg3 *docg3, loff_t to, 1379 struct mtd_oob_ops *ops) 1380 { 1381 int ooblen = ops->ooblen, autoecc; 1382 1383 if (ooblen != DOC_LAYOUT_OOB_SIZE) 1384 return -EINVAL; 1385 autoecc = doc_guess_autoecc(ops); 1386 if (autoecc < 0) 1387 return autoecc; 1388 1389 docg3->oob_write_ofs = to; 1390 docg3->oob_autoecc = autoecc; 1391 if (ops->mode == MTD_OPS_AUTO_OOB) { 1392 doc_fill_autooob(docg3->oob_write_buf, ops->oobbuf); 1393 ops->oobretlen = 8; 1394 } else { 1395 memcpy(docg3->oob_write_buf, ops->oobbuf, DOC_LAYOUT_OOB_SIZE); 1396 ops->oobretlen = DOC_LAYOUT_OOB_SIZE; 1397 } 1398 return 0; 1399 } 1400 1401 /** 1402 * doc_write_oob - Write out of band bytes to flash 1403 * @mtd: the device 1404 * @ofs: the offset from first block and first page, in bytes, aligned on page 1405 * size 1406 * @ops: the mtd oob structure 1407 * 1408 * Either write OOB data into a temporary buffer, for the subsequent write 1409 * page. The provided OOB should be 16 bytes long. If a data buffer is provided 1410 * as well, issue the page write. 1411 * Or provide data without OOB, and then a all zeroed OOB will be used (ECC will 1412 * still be filled in if asked for). 1413 * 1414 * Returns 0 is successful, EINVAL if length is not 14 bytes 1415 */ 1416 static int doc_write_oob(struct mtd_info *mtd, loff_t ofs, 1417 struct mtd_oob_ops *ops) 1418 { 1419 struct docg3 *docg3 = mtd->priv; 1420 int ret, autoecc, oobdelta; 1421 u8 *oobbuf = ops->oobbuf; 1422 u8 *buf = ops->datbuf; 1423 size_t len, ooblen; 1424 u8 oob[DOC_LAYOUT_OOB_SIZE]; 1425 1426 if (buf) 1427 len = ops->len; 1428 else 1429 len = 0; 1430 if (oobbuf) 1431 ooblen = ops->ooblen; 1432 else 1433 ooblen = 0; 1434 1435 if (oobbuf && ops->mode == MTD_OPS_PLACE_OOB) 1436 oobbuf += ops->ooboffs; 1437 1438 doc_dbg("doc_write_oob(from=%lld, mode=%d, data=(%p:%zu), oob=(%p:%zu))\n", 1439 ofs, ops->mode, buf, len, oobbuf, ooblen); 1440 switch (ops->mode) { 1441 case MTD_OPS_PLACE_OOB: 1442 case MTD_OPS_RAW: 1443 oobdelta = mtd->oobsize; 1444 break; 1445 case MTD_OPS_AUTO_OOB: 1446 oobdelta = mtd->ecclayout->oobavail; 1447 break; 1448 default: 1449 oobdelta = 0; 1450 } 1451 if ((len % DOC_LAYOUT_PAGE_SIZE) || (ooblen % oobdelta) || 1452 (ofs % DOC_LAYOUT_PAGE_SIZE)) 1453 return -EINVAL; 1454 if (len && ooblen && 1455 (len / DOC_LAYOUT_PAGE_SIZE) != (ooblen / oobdelta)) 1456 return -EINVAL; 1457 if (ofs + len > mtd->size) 1458 return -EINVAL; 1459 1460 ops->oobretlen = 0; 1461 ops->retlen = 0; 1462 ret = 0; 1463 if (len == 0 && ooblen == 0) 1464 return -EINVAL; 1465 if (len == 0 && ooblen > 0) 1466 return doc_backup_oob(docg3, ofs, ops); 1467 1468 autoecc = doc_guess_autoecc(ops); 1469 if (autoecc < 0) 1470 return autoecc; 1471 1472 mutex_lock(&docg3->cascade->lock); 1473 while (!ret && len > 0) { 1474 memset(oob, 0, sizeof(oob)); 1475 if (ofs == docg3->oob_write_ofs) 1476 memcpy(oob, docg3->oob_write_buf, DOC_LAYOUT_OOB_SIZE); 1477 else if (ooblen > 0 && ops->mode == MTD_OPS_AUTO_OOB) 1478 doc_fill_autooob(oob, oobbuf); 1479 else if (ooblen > 0) 1480 memcpy(oob, oobbuf, DOC_LAYOUT_OOB_SIZE); 1481 ret = doc_write_page(docg3, ofs, buf, oob, autoecc); 1482 1483 ofs += DOC_LAYOUT_PAGE_SIZE; 1484 len -= DOC_LAYOUT_PAGE_SIZE; 1485 buf += DOC_LAYOUT_PAGE_SIZE; 1486 if (ooblen) { 1487 oobbuf += oobdelta; 1488 ooblen -= oobdelta; 1489 ops->oobretlen += oobdelta; 1490 } 1491 ops->retlen += DOC_LAYOUT_PAGE_SIZE; 1492 } 1493 1494 doc_set_device_id(docg3, 0); 1495 mutex_unlock(&docg3->cascade->lock); 1496 return ret; 1497 } 1498 1499 /** 1500 * doc_write - Write a buffer to the chip 1501 * @mtd: the device 1502 * @to: the offset from first block and first page, in bytes, aligned on page 1503 * size 1504 * @len: the number of bytes to write (must be a full page size, ie. 512) 1505 * @retlen: the number of bytes actually written (0 or 512) 1506 * @buf: the buffer to get bytes from 1507 * 1508 * Writes data to the chip. 1509 * 1510 * Returns 0 if write successful, -EIO if write error 1511 */ 1512 static int doc_write(struct mtd_info *mtd, loff_t to, size_t len, 1513 size_t *retlen, const u_char *buf) 1514 { 1515 struct docg3 *docg3 = mtd->priv; 1516 int ret; 1517 struct mtd_oob_ops ops; 1518 1519 doc_dbg("doc_write(to=%lld, len=%zu)\n", to, len); 1520 ops.datbuf = (char *)buf; 1521 ops.len = len; 1522 ops.mode = MTD_OPS_PLACE_OOB; 1523 ops.oobbuf = NULL; 1524 ops.ooblen = 0; 1525 ops.ooboffs = 0; 1526 1527 ret = doc_write_oob(mtd, to, &ops); 1528 *retlen = ops.retlen; 1529 return ret; 1530 } 1531 1532 static struct docg3 *sysfs_dev2docg3(struct device *dev, 1533 struct device_attribute *attr) 1534 { 1535 int floor; 1536 struct platform_device *pdev = to_platform_device(dev); 1537 struct mtd_info **docg3_floors = platform_get_drvdata(pdev); 1538 1539 floor = attr->attr.name[1] - '0'; 1540 if (floor < 0 || floor >= DOC_MAX_NBFLOORS) 1541 return NULL; 1542 else 1543 return docg3_floors[floor]->priv; 1544 } 1545 1546 static ssize_t dps0_is_key_locked(struct device *dev, 1547 struct device_attribute *attr, char *buf) 1548 { 1549 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); 1550 int dps0; 1551 1552 mutex_lock(&docg3->cascade->lock); 1553 doc_set_device_id(docg3, docg3->device_id); 1554 dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS); 1555 doc_set_device_id(docg3, 0); 1556 mutex_unlock(&docg3->cascade->lock); 1557 1558 return sprintf(buf, "%d\n", !(dps0 & DOC_DPS_KEY_OK)); 1559 } 1560 1561 static ssize_t dps1_is_key_locked(struct device *dev, 1562 struct device_attribute *attr, char *buf) 1563 { 1564 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); 1565 int dps1; 1566 1567 mutex_lock(&docg3->cascade->lock); 1568 doc_set_device_id(docg3, docg3->device_id); 1569 dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS); 1570 doc_set_device_id(docg3, 0); 1571 mutex_unlock(&docg3->cascade->lock); 1572 1573 return sprintf(buf, "%d\n", !(dps1 & DOC_DPS_KEY_OK)); 1574 } 1575 1576 static ssize_t dps0_insert_key(struct device *dev, 1577 struct device_attribute *attr, 1578 const char *buf, size_t count) 1579 { 1580 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); 1581 int i; 1582 1583 if (count != DOC_LAYOUT_DPS_KEY_LENGTH) 1584 return -EINVAL; 1585 1586 mutex_lock(&docg3->cascade->lock); 1587 doc_set_device_id(docg3, docg3->device_id); 1588 for (i = 0; i < DOC_LAYOUT_DPS_KEY_LENGTH; i++) 1589 doc_writeb(docg3, buf[i], DOC_DPS0_KEY); 1590 doc_set_device_id(docg3, 0); 1591 mutex_unlock(&docg3->cascade->lock); 1592 return count; 1593 } 1594 1595 static ssize_t dps1_insert_key(struct device *dev, 1596 struct device_attribute *attr, 1597 const char *buf, size_t count) 1598 { 1599 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); 1600 int i; 1601 1602 if (count != DOC_LAYOUT_DPS_KEY_LENGTH) 1603 return -EINVAL; 1604 1605 mutex_lock(&docg3->cascade->lock); 1606 doc_set_device_id(docg3, docg3->device_id); 1607 for (i = 0; i < DOC_LAYOUT_DPS_KEY_LENGTH; i++) 1608 doc_writeb(docg3, buf[i], DOC_DPS1_KEY); 1609 doc_set_device_id(docg3, 0); 1610 mutex_unlock(&docg3->cascade->lock); 1611 return count; 1612 } 1613 1614 #define FLOOR_SYSFS(id) { \ 1615 __ATTR(f##id##_dps0_is_keylocked, S_IRUGO, dps0_is_key_locked, NULL), \ 1616 __ATTR(f##id##_dps1_is_keylocked, S_IRUGO, dps1_is_key_locked, NULL), \ 1617 __ATTR(f##id##_dps0_protection_key, S_IWUGO, NULL, dps0_insert_key), \ 1618 __ATTR(f##id##_dps1_protection_key, S_IWUGO, NULL, dps1_insert_key), \ 1619 } 1620 1621 static struct device_attribute doc_sys_attrs[DOC_MAX_NBFLOORS][4] = { 1622 FLOOR_SYSFS(0), FLOOR_SYSFS(1), FLOOR_SYSFS(2), FLOOR_SYSFS(3) 1623 }; 1624 1625 static int doc_register_sysfs(struct platform_device *pdev, 1626 struct docg3_cascade *cascade) 1627 { 1628 int ret = 0, floor, i = 0; 1629 struct device *dev = &pdev->dev; 1630 1631 for (floor = 0; !ret && floor < DOC_MAX_NBFLOORS && 1632 cascade->floors[floor]; floor++) 1633 for (i = 0; !ret && i < 4; i++) 1634 ret = device_create_file(dev, &doc_sys_attrs[floor][i]); 1635 if (!ret) 1636 return 0; 1637 do { 1638 while (--i >= 0) 1639 device_remove_file(dev, &doc_sys_attrs[floor][i]); 1640 i = 4; 1641 } while (--floor >= 0); 1642 return ret; 1643 } 1644 1645 static void doc_unregister_sysfs(struct platform_device *pdev, 1646 struct docg3_cascade *cascade) 1647 { 1648 struct device *dev = &pdev->dev; 1649 int floor, i; 1650 1651 for (floor = 0; floor < DOC_MAX_NBFLOORS && cascade->floors[floor]; 1652 floor++) 1653 for (i = 0; i < 4; i++) 1654 device_remove_file(dev, &doc_sys_attrs[floor][i]); 1655 } 1656 1657 /* 1658 * Debug sysfs entries 1659 */ 1660 static int dbg_flashctrl_show(struct seq_file *s, void *p) 1661 { 1662 struct docg3 *docg3 = (struct docg3 *)s->private; 1663 1664 int pos = 0; 1665 u8 fctrl; 1666 1667 mutex_lock(&docg3->cascade->lock); 1668 fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); 1669 mutex_unlock(&docg3->cascade->lock); 1670 1671 pos += seq_printf(s, 1672 "FlashControl : 0x%02x (%s,CE# %s,%s,%s,flash %s)\n", 1673 fctrl, 1674 fctrl & DOC_CTRL_VIOLATION ? "protocol violation" : "-", 1675 fctrl & DOC_CTRL_CE ? "active" : "inactive", 1676 fctrl & DOC_CTRL_PROTECTION_ERROR ? "protection error" : "-", 1677 fctrl & DOC_CTRL_SEQUENCE_ERROR ? "sequence error" : "-", 1678 fctrl & DOC_CTRL_FLASHREADY ? "ready" : "not ready"); 1679 return pos; 1680 } 1681 DEBUGFS_RO_ATTR(flashcontrol, dbg_flashctrl_show); 1682 1683 static int dbg_asicmode_show(struct seq_file *s, void *p) 1684 { 1685 struct docg3 *docg3 = (struct docg3 *)s->private; 1686 1687 int pos = 0, pctrl, mode; 1688 1689 mutex_lock(&docg3->cascade->lock); 1690 pctrl = doc_register_readb(docg3, DOC_ASICMODE); 1691 mode = pctrl & 0x03; 1692 mutex_unlock(&docg3->cascade->lock); 1693 1694 pos += seq_printf(s, 1695 "%04x : RAM_WE=%d,RSTIN_RESET=%d,BDETCT_RESET=%d,WRITE_ENABLE=%d,POWERDOWN=%d,MODE=%d%d (", 1696 pctrl, 1697 pctrl & DOC_ASICMODE_RAM_WE ? 1 : 0, 1698 pctrl & DOC_ASICMODE_RSTIN_RESET ? 1 : 0, 1699 pctrl & DOC_ASICMODE_BDETCT_RESET ? 1 : 0, 1700 pctrl & DOC_ASICMODE_MDWREN ? 1 : 0, 1701 pctrl & DOC_ASICMODE_POWERDOWN ? 1 : 0, 1702 mode >> 1, mode & 0x1); 1703 1704 switch (mode) { 1705 case DOC_ASICMODE_RESET: 1706 pos += seq_printf(s, "reset"); 1707 break; 1708 case DOC_ASICMODE_NORMAL: 1709 pos += seq_printf(s, "normal"); 1710 break; 1711 case DOC_ASICMODE_POWERDOWN: 1712 pos += seq_printf(s, "powerdown"); 1713 break; 1714 } 1715 pos += seq_printf(s, ")\n"); 1716 return pos; 1717 } 1718 DEBUGFS_RO_ATTR(asic_mode, dbg_asicmode_show); 1719 1720 static int dbg_device_id_show(struct seq_file *s, void *p) 1721 { 1722 struct docg3 *docg3 = (struct docg3 *)s->private; 1723 int pos = 0; 1724 int id; 1725 1726 mutex_lock(&docg3->cascade->lock); 1727 id = doc_register_readb(docg3, DOC_DEVICESELECT); 1728 mutex_unlock(&docg3->cascade->lock); 1729 1730 pos += seq_printf(s, "DeviceId = %d\n", id); 1731 return pos; 1732 } 1733 DEBUGFS_RO_ATTR(device_id, dbg_device_id_show); 1734 1735 static int dbg_protection_show(struct seq_file *s, void *p) 1736 { 1737 struct docg3 *docg3 = (struct docg3 *)s->private; 1738 int pos = 0; 1739 int protect, dps0, dps0_low, dps0_high, dps1, dps1_low, dps1_high; 1740 1741 mutex_lock(&docg3->cascade->lock); 1742 protect = doc_register_readb(docg3, DOC_PROTECTION); 1743 dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS); 1744 dps0_low = doc_register_readw(docg3, DOC_DPS0_ADDRLOW); 1745 dps0_high = doc_register_readw(docg3, DOC_DPS0_ADDRHIGH); 1746 dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS); 1747 dps1_low = doc_register_readw(docg3, DOC_DPS1_ADDRLOW); 1748 dps1_high = doc_register_readw(docg3, DOC_DPS1_ADDRHIGH); 1749 mutex_unlock(&docg3->cascade->lock); 1750 1751 pos += seq_printf(s, "Protection = 0x%02x (", 1752 protect); 1753 if (protect & DOC_PROTECT_FOUNDRY_OTP_LOCK) 1754 pos += seq_printf(s, "FOUNDRY_OTP_LOCK,"); 1755 if (protect & DOC_PROTECT_CUSTOMER_OTP_LOCK) 1756 pos += seq_printf(s, "CUSTOMER_OTP_LOCK,"); 1757 if (protect & DOC_PROTECT_LOCK_INPUT) 1758 pos += seq_printf(s, "LOCK_INPUT,"); 1759 if (protect & DOC_PROTECT_STICKY_LOCK) 1760 pos += seq_printf(s, "STICKY_LOCK,"); 1761 if (protect & DOC_PROTECT_PROTECTION_ENABLED) 1762 pos += seq_printf(s, "PROTECTION ON,"); 1763 if (protect & DOC_PROTECT_IPL_DOWNLOAD_LOCK) 1764 pos += seq_printf(s, "IPL_DOWNLOAD_LOCK,"); 1765 if (protect & DOC_PROTECT_PROTECTION_ERROR) 1766 pos += seq_printf(s, "PROTECT_ERR,"); 1767 else 1768 pos += seq_printf(s, "NO_PROTECT_ERR"); 1769 pos += seq_printf(s, ")\n"); 1770 1771 pos += seq_printf(s, "DPS0 = 0x%02x : " 1772 "Protected area [0x%x - 0x%x] : OTP=%d, READ=%d, " 1773 "WRITE=%d, HW_LOCK=%d, KEY_OK=%d\n", 1774 dps0, dps0_low, dps0_high, 1775 !!(dps0 & DOC_DPS_OTP_PROTECTED), 1776 !!(dps0 & DOC_DPS_READ_PROTECTED), 1777 !!(dps0 & DOC_DPS_WRITE_PROTECTED), 1778 !!(dps0 & DOC_DPS_HW_LOCK_ENABLED), 1779 !!(dps0 & DOC_DPS_KEY_OK)); 1780 pos += seq_printf(s, "DPS1 = 0x%02x : " 1781 "Protected area [0x%x - 0x%x] : OTP=%d, READ=%d, " 1782 "WRITE=%d, HW_LOCK=%d, KEY_OK=%d\n", 1783 dps1, dps1_low, dps1_high, 1784 !!(dps1 & DOC_DPS_OTP_PROTECTED), 1785 !!(dps1 & DOC_DPS_READ_PROTECTED), 1786 !!(dps1 & DOC_DPS_WRITE_PROTECTED), 1787 !!(dps1 & DOC_DPS_HW_LOCK_ENABLED), 1788 !!(dps1 & DOC_DPS_KEY_OK)); 1789 return pos; 1790 } 1791 DEBUGFS_RO_ATTR(protection, dbg_protection_show); 1792 1793 static int __init doc_dbg_register(struct docg3 *docg3) 1794 { 1795 struct dentry *root, *entry; 1796 1797 root = debugfs_create_dir("docg3", NULL); 1798 if (!root) 1799 return -ENOMEM; 1800 1801 entry = debugfs_create_file("flashcontrol", S_IRUSR, root, docg3, 1802 &flashcontrol_fops); 1803 if (entry) 1804 entry = debugfs_create_file("asic_mode", S_IRUSR, root, 1805 docg3, &asic_mode_fops); 1806 if (entry) 1807 entry = debugfs_create_file("device_id", S_IRUSR, root, 1808 docg3, &device_id_fops); 1809 if (entry) 1810 entry = debugfs_create_file("protection", S_IRUSR, root, 1811 docg3, &protection_fops); 1812 if (entry) { 1813 docg3->debugfs_root = root; 1814 return 0; 1815 } else { 1816 debugfs_remove_recursive(root); 1817 return -ENOMEM; 1818 } 1819 } 1820 1821 static void __exit doc_dbg_unregister(struct docg3 *docg3) 1822 { 1823 debugfs_remove_recursive(docg3->debugfs_root); 1824 } 1825 1826 /** 1827 * doc_set_driver_info - Fill the mtd_info structure and docg3 structure 1828 * @chip_id: The chip ID of the supported chip 1829 * @mtd: The structure to fill 1830 */ 1831 static void __init doc_set_driver_info(int chip_id, struct mtd_info *mtd) 1832 { 1833 struct docg3 *docg3 = mtd->priv; 1834 int cfg; 1835 1836 cfg = doc_register_readb(docg3, DOC_CONFIGURATION); 1837 docg3->if_cfg = (cfg & DOC_CONF_IF_CFG ? 1 : 0); 1838 docg3->reliable = reliable_mode; 1839 1840 switch (chip_id) { 1841 case DOC_CHIPID_G3: 1842 mtd->name = kasprintf(GFP_KERNEL, "docg3.%d", 1843 docg3->device_id); 1844 docg3->max_block = 2047; 1845 break; 1846 } 1847 mtd->type = MTD_NANDFLASH; 1848 mtd->flags = MTD_CAP_NANDFLASH; 1849 mtd->size = (docg3->max_block + 1) * DOC_LAYOUT_BLOCK_SIZE; 1850 if (docg3->reliable == 2) 1851 mtd->size /= 2; 1852 mtd->erasesize = DOC_LAYOUT_BLOCK_SIZE * DOC_LAYOUT_NBPLANES; 1853 if (docg3->reliable == 2) 1854 mtd->erasesize /= 2; 1855 mtd->writebufsize = mtd->writesize = DOC_LAYOUT_PAGE_SIZE; 1856 mtd->oobsize = DOC_LAYOUT_OOB_SIZE; 1857 mtd->owner = THIS_MODULE; 1858 mtd->_erase = doc_erase; 1859 mtd->_read = doc_read; 1860 mtd->_write = doc_write; 1861 mtd->_read_oob = doc_read_oob; 1862 mtd->_write_oob = doc_write_oob; 1863 mtd->_block_isbad = doc_block_isbad; 1864 mtd->ecclayout = &docg3_oobinfo; 1865 mtd->ecc_strength = DOC_ECC_BCH_T; 1866 } 1867 1868 /** 1869 * doc_probe_device - Check if a device is available 1870 * @base: the io space where the device is probed 1871 * @floor: the floor of the probed device 1872 * @dev: the device 1873 * @cascade: the cascade of chips this devices will belong to 1874 * 1875 * Checks whether a device at the specified IO range, and floor is available. 1876 * 1877 * Returns a mtd_info struct if there is a device, ENODEV if none found, ENOMEM 1878 * if a memory allocation failed. If floor 0 is checked, a reset of the ASIC is 1879 * launched. 1880 */ 1881 static struct mtd_info * __init 1882 doc_probe_device(struct docg3_cascade *cascade, int floor, struct device *dev) 1883 { 1884 int ret, bbt_nbpages; 1885 u16 chip_id, chip_id_inv; 1886 struct docg3 *docg3; 1887 struct mtd_info *mtd; 1888 1889 ret = -ENOMEM; 1890 docg3 = kzalloc(sizeof(struct docg3), GFP_KERNEL); 1891 if (!docg3) 1892 goto nomem1; 1893 mtd = kzalloc(sizeof(struct mtd_info), GFP_KERNEL); 1894 if (!mtd) 1895 goto nomem2; 1896 mtd->priv = docg3; 1897 bbt_nbpages = DIV_ROUND_UP(docg3->max_block + 1, 1898 8 * DOC_LAYOUT_PAGE_SIZE); 1899 docg3->bbt = kzalloc(bbt_nbpages * DOC_LAYOUT_PAGE_SIZE, GFP_KERNEL); 1900 if (!docg3->bbt) 1901 goto nomem3; 1902 1903 docg3->dev = dev; 1904 docg3->device_id = floor; 1905 docg3->cascade = cascade; 1906 doc_set_device_id(docg3, docg3->device_id); 1907 if (!floor) 1908 doc_set_asic_mode(docg3, DOC_ASICMODE_RESET); 1909 doc_set_asic_mode(docg3, DOC_ASICMODE_NORMAL); 1910 1911 chip_id = doc_register_readw(docg3, DOC_CHIPID); 1912 chip_id_inv = doc_register_readw(docg3, DOC_CHIPID_INV); 1913 1914 ret = 0; 1915 if (chip_id != (u16)(~chip_id_inv)) { 1916 goto nomem3; 1917 } 1918 1919 switch (chip_id) { 1920 case DOC_CHIPID_G3: 1921 doc_info("Found a G3 DiskOnChip at addr %p, floor %d\n", 1922 docg3->cascade->base, floor); 1923 break; 1924 default: 1925 doc_err("Chip id %04x is not a DiskOnChip G3 chip\n", chip_id); 1926 goto nomem3; 1927 } 1928 1929 doc_set_driver_info(chip_id, mtd); 1930 1931 doc_hamming_ecc_init(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ); 1932 doc_reload_bbt(docg3); 1933 return mtd; 1934 1935 nomem3: 1936 kfree(mtd); 1937 nomem2: 1938 kfree(docg3); 1939 nomem1: 1940 return ERR_PTR(ret); 1941 } 1942 1943 /** 1944 * doc_release_device - Release a docg3 floor 1945 * @mtd: the device 1946 */ 1947 static void doc_release_device(struct mtd_info *mtd) 1948 { 1949 struct docg3 *docg3 = mtd->priv; 1950 1951 mtd_device_unregister(mtd); 1952 kfree(docg3->bbt); 1953 kfree(docg3); 1954 kfree(mtd->name); 1955 kfree(mtd); 1956 } 1957 1958 /** 1959 * docg3_resume - Awakens docg3 floor 1960 * @pdev: platfrom device 1961 * 1962 * Returns 0 (always successful) 1963 */ 1964 static int docg3_resume(struct platform_device *pdev) 1965 { 1966 int i; 1967 struct docg3_cascade *cascade; 1968 struct mtd_info **docg3_floors, *mtd; 1969 struct docg3 *docg3; 1970 1971 cascade = platform_get_drvdata(pdev); 1972 docg3_floors = cascade->floors; 1973 mtd = docg3_floors[0]; 1974 docg3 = mtd->priv; 1975 1976 doc_dbg("docg3_resume()\n"); 1977 for (i = 0; i < 12; i++) 1978 doc_readb(docg3, DOC_IOSPACE_IPL); 1979 return 0; 1980 } 1981 1982 /** 1983 * docg3_suspend - Put in low power mode the docg3 floor 1984 * @pdev: platform device 1985 * @state: power state 1986 * 1987 * Shuts off most of docg3 circuitery to lower power consumption. 1988 * 1989 * Returns 0 if suspend succeeded, -EIO if chip refused suspend 1990 */ 1991 static int docg3_suspend(struct platform_device *pdev, pm_message_t state) 1992 { 1993 int floor, i; 1994 struct docg3_cascade *cascade; 1995 struct mtd_info **docg3_floors, *mtd; 1996 struct docg3 *docg3; 1997 u8 ctrl, pwr_down; 1998 1999 cascade = platform_get_drvdata(pdev); 2000 docg3_floors = cascade->floors; 2001 for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) { 2002 mtd = docg3_floors[floor]; 2003 if (!mtd) 2004 continue; 2005 docg3 = mtd->priv; 2006 2007 doc_writeb(docg3, floor, DOC_DEVICESELECT); 2008 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); 2009 ctrl &= ~DOC_CTRL_VIOLATION & ~DOC_CTRL_CE; 2010 doc_writeb(docg3, ctrl, DOC_FLASHCONTROL); 2011 2012 for (i = 0; i < 10; i++) { 2013 usleep_range(3000, 4000); 2014 pwr_down = doc_register_readb(docg3, DOC_POWERMODE); 2015 if (pwr_down & DOC_POWERDOWN_READY) 2016 break; 2017 } 2018 if (pwr_down & DOC_POWERDOWN_READY) { 2019 doc_dbg("docg3_suspend(): floor %d powerdown ok\n", 2020 floor); 2021 } else { 2022 doc_err("docg3_suspend(): floor %d powerdown failed\n", 2023 floor); 2024 return -EIO; 2025 } 2026 } 2027 2028 mtd = docg3_floors[0]; 2029 docg3 = mtd->priv; 2030 doc_set_asic_mode(docg3, DOC_ASICMODE_POWERDOWN); 2031 return 0; 2032 } 2033 2034 /** 2035 * doc_probe - Probe the IO space for a DiskOnChip G3 chip 2036 * @pdev: platform device 2037 * 2038 * Probes for a G3 chip at the specified IO space in the platform data 2039 * ressources. The floor 0 must be available. 2040 * 2041 * Returns 0 on success, -ENOMEM, -ENXIO on error 2042 */ 2043 static int __init docg3_probe(struct platform_device *pdev) 2044 { 2045 struct device *dev = &pdev->dev; 2046 struct mtd_info *mtd; 2047 struct resource *ress; 2048 void __iomem *base; 2049 int ret, floor, found = 0; 2050 struct docg3_cascade *cascade; 2051 2052 ret = -ENXIO; 2053 ress = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2054 if (!ress) { 2055 dev_err(dev, "No I/O memory resource defined\n"); 2056 goto noress; 2057 } 2058 base = ioremap(ress->start, DOC_IOSPACE_SIZE); 2059 2060 ret = -ENOMEM; 2061 cascade = kzalloc(sizeof(*cascade) * DOC_MAX_NBFLOORS, 2062 GFP_KERNEL); 2063 if (!cascade) 2064 goto nomem1; 2065 cascade->base = base; 2066 mutex_init(&cascade->lock); 2067 cascade->bch = init_bch(DOC_ECC_BCH_M, DOC_ECC_BCH_T, 2068 DOC_ECC_BCH_PRIMPOLY); 2069 if (!cascade->bch) 2070 goto nomem2; 2071 2072 for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) { 2073 mtd = doc_probe_device(cascade, floor, dev); 2074 if (IS_ERR(mtd)) { 2075 ret = PTR_ERR(mtd); 2076 goto err_probe; 2077 } 2078 if (!mtd) { 2079 if (floor == 0) 2080 goto notfound; 2081 else 2082 continue; 2083 } 2084 cascade->floors[floor] = mtd; 2085 ret = mtd_device_parse_register(mtd, part_probes, NULL, NULL, 2086 0); 2087 if (ret) 2088 goto err_probe; 2089 found++; 2090 } 2091 2092 ret = doc_register_sysfs(pdev, cascade); 2093 if (ret) 2094 goto err_probe; 2095 if (!found) 2096 goto notfound; 2097 2098 platform_set_drvdata(pdev, cascade); 2099 doc_dbg_register(cascade->floors[0]->priv); 2100 return 0; 2101 2102 notfound: 2103 ret = -ENODEV; 2104 dev_info(dev, "No supported DiskOnChip found\n"); 2105 err_probe: 2106 kfree(cascade->bch); 2107 for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) 2108 if (cascade->floors[floor]) 2109 doc_release_device(cascade->floors[floor]); 2110 nomem2: 2111 kfree(cascade); 2112 nomem1: 2113 iounmap(base); 2114 noress: 2115 return ret; 2116 } 2117 2118 /** 2119 * docg3_release - Release the driver 2120 * @pdev: the platform device 2121 * 2122 * Returns 0 2123 */ 2124 static int __exit docg3_release(struct platform_device *pdev) 2125 { 2126 struct docg3_cascade *cascade = platform_get_drvdata(pdev); 2127 struct docg3 *docg3 = cascade->floors[0]->priv; 2128 void __iomem *base = cascade->base; 2129 int floor; 2130 2131 doc_unregister_sysfs(pdev, cascade); 2132 doc_dbg_unregister(docg3); 2133 for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) 2134 if (cascade->floors[floor]) 2135 doc_release_device(cascade->floors[floor]); 2136 2137 free_bch(docg3->cascade->bch); 2138 kfree(cascade); 2139 iounmap(base); 2140 return 0; 2141 } 2142 2143 static struct platform_driver g3_driver = { 2144 .driver = { 2145 .name = "docg3", 2146 .owner = THIS_MODULE, 2147 }, 2148 .suspend = docg3_suspend, 2149 .resume = docg3_resume, 2150 .remove = __exit_p(docg3_release), 2151 }; 2152 2153 static int __init docg3_init(void) 2154 { 2155 return platform_driver_probe(&g3_driver, docg3_probe); 2156 } 2157 module_init(docg3_init); 2158 2159 2160 static void __exit docg3_exit(void) 2161 { 2162 platform_driver_unregister(&g3_driver); 2163 } 2164 module_exit(docg3_exit); 2165 2166 MODULE_LICENSE("GPL"); 2167 MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>"); 2168 MODULE_DESCRIPTION("MTD driver for DiskOnChip G3"); 2169