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 & 0x3; 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 occured, -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 occured. 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 * 736 */ 737 static int doc_read_page_getbytes(struct docg3 *docg3, int len, u_char *buf, 738 int first) 739 { 740 doc_read_data_area(docg3, buf, len, first); 741 doc_delay(docg3, 2); 742 return len; 743 } 744 745 /** 746 * doc_write_page_putbytes - Writes bytes into a prepared page 747 * @docg3: the device 748 * @len: the number of bytes to be written 749 * @buf: the buffer of input bytes 750 * 751 */ 752 static void doc_write_page_putbytes(struct docg3 *docg3, int len, 753 const u_char *buf) 754 { 755 doc_write_data_area(docg3, buf, len); 756 doc_delay(docg3, 2); 757 } 758 759 /** 760 * doc_get_bch_hw_ecc - Get hardware calculated BCH ECC 761 * @docg3: the device 762 * @hwecc: the array of 7 integers where the hardware ecc will be stored 763 */ 764 static void doc_get_bch_hw_ecc(struct docg3 *docg3, u8 *hwecc) 765 { 766 int i; 767 768 for (i = 0; i < DOC_ECC_BCH_SIZE; i++) 769 hwecc[i] = doc_register_readb(docg3, DOC_BCH_HW_ECC(i)); 770 } 771 772 /** 773 * doc_page_finish - Ends reading/writing of a flash page 774 * @docg3: the device 775 */ 776 static void doc_page_finish(struct docg3 *docg3) 777 { 778 doc_writeb(docg3, 0, DOC_DATAEND); 779 doc_delay(docg3, 2); 780 } 781 782 /** 783 * doc_read_page_finish - Ends reading of a flash page 784 * @docg3: the device 785 * 786 * As a side effect, resets the chip selector to 0. This ensures that after each 787 * read operation, the floor 0 is selected. Therefore, if the systems halts, the 788 * reboot will boot on floor 0, where the IPL is. 789 */ 790 static void doc_read_page_finish(struct docg3 *docg3) 791 { 792 doc_page_finish(docg3); 793 doc_set_device_id(docg3, 0); 794 } 795 796 /** 797 * calc_block_sector - Calculate blocks, pages and ofs. 798 799 * @from: offset in flash 800 * @block0: first plane block index calculated 801 * @block1: second plane block index calculated 802 * @page: page calculated 803 * @ofs: offset in page 804 * @reliable: 0 if docg3 in normal mode, 1 if docg3 in fast mode, 2 if docg3 in 805 * reliable mode. 806 * 807 * The calculation is based on the reliable/normal mode. In normal mode, the 64 808 * pages of a block are available. In reliable mode, as pages 2*n and 2*n+1 are 809 * clones, only 32 pages per block are available. 810 */ 811 static void calc_block_sector(loff_t from, int *block0, int *block1, int *page, 812 int *ofs, int reliable) 813 { 814 uint sector, pages_biblock; 815 816 pages_biblock = DOC_LAYOUT_PAGES_PER_BLOCK * DOC_LAYOUT_NBPLANES; 817 if (reliable == 1 || reliable == 2) 818 pages_biblock /= 2; 819 820 sector = from / DOC_LAYOUT_PAGE_SIZE; 821 *block0 = sector / pages_biblock * DOC_LAYOUT_NBPLANES; 822 *block1 = *block0 + 1; 823 *page = sector % pages_biblock; 824 *page /= DOC_LAYOUT_NBPLANES; 825 if (reliable == 1 || reliable == 2) 826 *page *= 2; 827 if (sector % 2) 828 *ofs = DOC_LAYOUT_PAGE_OOB_SIZE; 829 else 830 *ofs = 0; 831 } 832 833 /** 834 * doc_read_oob - Read out of band bytes from flash 835 * @mtd: the device 836 * @from: the offset from first block and first page, in bytes, aligned on page 837 * size 838 * @ops: the mtd oob structure 839 * 840 * Reads flash memory OOB area of pages. 841 * 842 * Returns 0 if read successfull, of -EIO, -EINVAL if an error occured 843 */ 844 static int doc_read_oob(struct mtd_info *mtd, loff_t from, 845 struct mtd_oob_ops *ops) 846 { 847 struct docg3 *docg3 = mtd->priv; 848 int block0, block1, page, ret, skip, ofs = 0; 849 u8 *oobbuf = ops->oobbuf; 850 u8 *buf = ops->datbuf; 851 size_t len, ooblen, nbdata, nboob; 852 u8 hwecc[DOC_ECC_BCH_SIZE], eccconf1; 853 854 if (buf) 855 len = ops->len; 856 else 857 len = 0; 858 if (oobbuf) 859 ooblen = ops->ooblen; 860 else 861 ooblen = 0; 862 863 if (oobbuf && ops->mode == MTD_OPS_PLACE_OOB) 864 oobbuf += ops->ooboffs; 865 866 doc_dbg("doc_read_oob(from=%lld, mode=%d, data=(%p:%zu), oob=(%p:%zu))\n", 867 from, ops->mode, buf, len, oobbuf, ooblen); 868 if (ooblen % DOC_LAYOUT_OOB_SIZE) 869 return -EINVAL; 870 871 if (from + len > mtd->size) 872 return -EINVAL; 873 874 ops->oobretlen = 0; 875 ops->retlen = 0; 876 ret = 0; 877 skip = from % DOC_LAYOUT_PAGE_SIZE; 878 mutex_lock(&docg3->cascade->lock); 879 while (!ret && (len > 0 || ooblen > 0)) { 880 calc_block_sector(from - skip, &block0, &block1, &page, &ofs, 881 docg3->reliable); 882 nbdata = min_t(size_t, len, DOC_LAYOUT_PAGE_SIZE - skip); 883 nboob = min_t(size_t, ooblen, (size_t)DOC_LAYOUT_OOB_SIZE); 884 ret = doc_read_page_prepare(docg3, block0, block1, page, ofs); 885 if (ret < 0) 886 goto out; 887 ret = doc_read_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES); 888 if (ret < 0) 889 goto err_in_read; 890 ret = doc_read_page_getbytes(docg3, skip, NULL, 1); 891 if (ret < skip) 892 goto err_in_read; 893 ret = doc_read_page_getbytes(docg3, nbdata, buf, 0); 894 if (ret < nbdata) 895 goto err_in_read; 896 doc_read_page_getbytes(docg3, 897 DOC_LAYOUT_PAGE_SIZE - nbdata - skip, 898 NULL, 0); 899 ret = doc_read_page_getbytes(docg3, nboob, oobbuf, 0); 900 if (ret < nboob) 901 goto err_in_read; 902 doc_read_page_getbytes(docg3, DOC_LAYOUT_OOB_SIZE - nboob, 903 NULL, 0); 904 905 doc_get_bch_hw_ecc(docg3, hwecc); 906 eccconf1 = doc_register_readb(docg3, DOC_ECCCONF1); 907 908 if (nboob >= DOC_LAYOUT_OOB_SIZE) { 909 doc_dbg("OOB - INFO: %02x:%02x:%02x:%02x:%02x:%02x:%02x\n", 910 oobbuf[0], oobbuf[1], oobbuf[2], oobbuf[3], 911 oobbuf[4], oobbuf[5], oobbuf[6]); 912 doc_dbg("OOB - HAMMING: %02x\n", oobbuf[7]); 913 doc_dbg("OOB - BCH_ECC: %02x:%02x:%02x:%02x:%02x:%02x:%02x\n", 914 oobbuf[8], oobbuf[9], oobbuf[10], oobbuf[11], 915 oobbuf[12], oobbuf[13], oobbuf[14]); 916 doc_dbg("OOB - UNUSED: %02x\n", oobbuf[15]); 917 } 918 doc_dbg("ECC checks: ECCConf1=%x\n", eccconf1); 919 doc_dbg("ECC HW_ECC: %02x:%02x:%02x:%02x:%02x:%02x:%02x\n", 920 hwecc[0], hwecc[1], hwecc[2], hwecc[3], hwecc[4], 921 hwecc[5], hwecc[6]); 922 923 ret = -EIO; 924 if (is_prot_seq_error(docg3)) 925 goto err_in_read; 926 ret = 0; 927 if ((block0 >= DOC_LAYOUT_BLOCK_FIRST_DATA) && 928 (eccconf1 & DOC_ECCCONF1_BCH_SYNDROM_ERR) && 929 (eccconf1 & DOC_ECCCONF1_PAGE_IS_WRITTEN) && 930 (ops->mode != MTD_OPS_RAW) && 931 (nbdata == DOC_LAYOUT_PAGE_SIZE)) { 932 ret = doc_ecc_bch_fix_data(docg3, buf, hwecc); 933 if (ret < 0) { 934 mtd->ecc_stats.failed++; 935 ret = -EBADMSG; 936 } 937 if (ret > 0) { 938 mtd->ecc_stats.corrected += ret; 939 ret = -EUCLEAN; 940 } 941 } 942 943 doc_read_page_finish(docg3); 944 ops->retlen += nbdata; 945 ops->oobretlen += nboob; 946 buf += nbdata; 947 oobbuf += nboob; 948 len -= nbdata; 949 ooblen -= nboob; 950 from += DOC_LAYOUT_PAGE_SIZE; 951 skip = 0; 952 } 953 954 out: 955 mutex_unlock(&docg3->cascade->lock); 956 return ret; 957 err_in_read: 958 doc_read_page_finish(docg3); 959 goto out; 960 } 961 962 /** 963 * doc_read - Read bytes from flash 964 * @mtd: the device 965 * @from: the offset from first block and first page, in bytes, aligned on page 966 * size 967 * @len: the number of bytes to read (must be a multiple of 4) 968 * @retlen: the number of bytes actually read 969 * @buf: the filled in buffer 970 * 971 * Reads flash memory pages. This function does not read the OOB chunk, but only 972 * the page data. 973 * 974 * Returns 0 if read successfull, of -EIO, -EINVAL if an error occured 975 */ 976 static int doc_read(struct mtd_info *mtd, loff_t from, size_t len, 977 size_t *retlen, u_char *buf) 978 { 979 struct mtd_oob_ops ops; 980 size_t ret; 981 982 memset(&ops, 0, sizeof(ops)); 983 ops.datbuf = buf; 984 ops.len = len; 985 ops.mode = MTD_OPS_AUTO_OOB; 986 987 ret = doc_read_oob(mtd, from, &ops); 988 *retlen = ops.retlen; 989 return ret; 990 } 991 992 static int doc_reload_bbt(struct docg3 *docg3) 993 { 994 int block = DOC_LAYOUT_BLOCK_BBT; 995 int ret = 0, nbpages, page; 996 u_char *buf = docg3->bbt; 997 998 nbpages = DIV_ROUND_UP(docg3->max_block + 1, 8 * DOC_LAYOUT_PAGE_SIZE); 999 for (page = 0; !ret && (page < nbpages); page++) { 1000 ret = doc_read_page_prepare(docg3, block, block + 1, 1001 page + DOC_LAYOUT_PAGE_BBT, 0); 1002 if (!ret) 1003 ret = doc_read_page_ecc_init(docg3, 1004 DOC_LAYOUT_PAGE_SIZE); 1005 if (!ret) 1006 doc_read_page_getbytes(docg3, DOC_LAYOUT_PAGE_SIZE, 1007 buf, 1); 1008 buf += DOC_LAYOUT_PAGE_SIZE; 1009 } 1010 doc_read_page_finish(docg3); 1011 return ret; 1012 } 1013 1014 /** 1015 * doc_block_isbad - Checks whether a block is good or not 1016 * @mtd: the device 1017 * @from: the offset to find the correct block 1018 * 1019 * Returns 1 if block is bad, 0 if block is good 1020 */ 1021 static int doc_block_isbad(struct mtd_info *mtd, loff_t from) 1022 { 1023 struct docg3 *docg3 = mtd->priv; 1024 int block0, block1, page, ofs, is_good; 1025 1026 calc_block_sector(from, &block0, &block1, &page, &ofs, 1027 docg3->reliable); 1028 doc_dbg("doc_block_isbad(from=%lld) => block=(%d,%d), page=%d, ofs=%d\n", 1029 from, block0, block1, page, ofs); 1030 1031 if (block0 < DOC_LAYOUT_BLOCK_FIRST_DATA) 1032 return 0; 1033 if (block1 > docg3->max_block) 1034 return -EINVAL; 1035 1036 is_good = docg3->bbt[block0 >> 3] & (1 << (block0 & 0x7)); 1037 return !is_good; 1038 } 1039 1040 #if 0 1041 /** 1042 * doc_get_erase_count - Get block erase count 1043 * @docg3: the device 1044 * @from: the offset in which the block is. 1045 * 1046 * Get the number of times a block was erased. The number is the maximum of 1047 * erase times between first and second plane (which should be equal normally). 1048 * 1049 * Returns The number of erases, or -EINVAL or -EIO on error. 1050 */ 1051 static int doc_get_erase_count(struct docg3 *docg3, loff_t from) 1052 { 1053 u8 buf[DOC_LAYOUT_WEAR_SIZE]; 1054 int ret, plane1_erase_count, plane2_erase_count; 1055 int block0, block1, page, ofs; 1056 1057 doc_dbg("doc_get_erase_count(from=%lld, buf=%p)\n", from, buf); 1058 if (from % DOC_LAYOUT_PAGE_SIZE) 1059 return -EINVAL; 1060 calc_block_sector(from, &block0, &block1, &page, &ofs, docg3->reliable); 1061 if (block1 > docg3->max_block) 1062 return -EINVAL; 1063 1064 ret = doc_reset_seq(docg3); 1065 if (!ret) 1066 ret = doc_read_page_prepare(docg3, block0, block1, page, 1067 ofs + DOC_LAYOUT_WEAR_OFFSET); 1068 if (!ret) 1069 ret = doc_read_page_getbytes(docg3, DOC_LAYOUT_WEAR_SIZE, 1070 buf, 1); 1071 doc_read_page_finish(docg3); 1072 1073 if (ret || (buf[0] != DOC_ERASE_MARK) || (buf[2] != DOC_ERASE_MARK)) 1074 return -EIO; 1075 plane1_erase_count = (u8)(~buf[1]) | ((u8)(~buf[4]) << 8) 1076 | ((u8)(~buf[5]) << 16); 1077 plane2_erase_count = (u8)(~buf[3]) | ((u8)(~buf[6]) << 8) 1078 | ((u8)(~buf[7]) << 16); 1079 1080 return max(plane1_erase_count, plane2_erase_count); 1081 } 1082 #endif 1083 1084 /** 1085 * doc_get_op_status - get erase/write operation status 1086 * @docg3: the device 1087 * 1088 * Queries the status from the chip, and returns it 1089 * 1090 * Returns the status (bits DOC_PLANES_STATUS_*) 1091 */ 1092 static int doc_get_op_status(struct docg3 *docg3) 1093 { 1094 u8 status; 1095 1096 doc_flash_sequence(docg3, DOC_SEQ_PLANES_STATUS); 1097 doc_flash_command(docg3, DOC_CMD_PLANES_STATUS); 1098 doc_delay(docg3, 5); 1099 1100 doc_ecc_disable(docg3); 1101 doc_read_data_area(docg3, &status, 1, 1); 1102 return status; 1103 } 1104 1105 /** 1106 * doc_write_erase_wait_status - wait for write or erase completion 1107 * @docg3: the device 1108 * 1109 * Wait for the chip to be ready again after erase or write operation, and check 1110 * erase/write status. 1111 * 1112 * Returns 0 if erase successfull, -EIO if erase/write issue, -ETIMEOUT if 1113 * timeout 1114 */ 1115 static int doc_write_erase_wait_status(struct docg3 *docg3) 1116 { 1117 int i, status, ret = 0; 1118 1119 for (i = 0; !doc_is_ready(docg3) && i < 5; i++) 1120 msleep(20); 1121 if (!doc_is_ready(docg3)) { 1122 doc_dbg("Timeout reached and the chip is still not ready\n"); 1123 ret = -EAGAIN; 1124 goto out; 1125 } 1126 1127 status = doc_get_op_status(docg3); 1128 if (status & DOC_PLANES_STATUS_FAIL) { 1129 doc_dbg("Erase/Write failed on (a) plane(s), status = %x\n", 1130 status); 1131 ret = -EIO; 1132 } 1133 1134 out: 1135 doc_page_finish(docg3); 1136 return ret; 1137 } 1138 1139 /** 1140 * doc_erase_block - Erase a couple of blocks 1141 * @docg3: the device 1142 * @block0: the first block to erase (leftmost plane) 1143 * @block1: the second block to erase (rightmost plane) 1144 * 1145 * Erase both blocks, and return operation status 1146 * 1147 * Returns 0 if erase successful, -EIO if erase issue, -ETIMEOUT if chip not 1148 * ready for too long 1149 */ 1150 static int doc_erase_block(struct docg3 *docg3, int block0, int block1) 1151 { 1152 int ret, sector; 1153 1154 doc_dbg("doc_erase_block(blocks=(%d,%d))\n", block0, block1); 1155 ret = doc_reset_seq(docg3); 1156 if (ret) 1157 return -EIO; 1158 1159 doc_set_reliable_mode(docg3); 1160 doc_flash_sequence(docg3, DOC_SEQ_ERASE); 1161 1162 sector = block0 << DOC_ADDR_BLOCK_SHIFT; 1163 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); 1164 doc_setup_addr_sector(docg3, sector); 1165 sector = block1 << DOC_ADDR_BLOCK_SHIFT; 1166 doc_flash_command(docg3, DOC_CMD_PROG_BLOCK_ADDR); 1167 doc_setup_addr_sector(docg3, sector); 1168 doc_delay(docg3, 1); 1169 1170 doc_flash_command(docg3, DOC_CMD_ERASECYCLE2); 1171 doc_delay(docg3, 2); 1172 1173 if (is_prot_seq_error(docg3)) { 1174 doc_err("Erase blocks %d,%d error\n", block0, block1); 1175 return -EIO; 1176 } 1177 1178 return doc_write_erase_wait_status(docg3); 1179 } 1180 1181 /** 1182 * doc_erase - Erase a portion of the chip 1183 * @mtd: the device 1184 * @info: the erase info 1185 * 1186 * Erase a bunch of contiguous blocks, by pairs, as a "mtd" page of 1024 is 1187 * split into 2 pages of 512 bytes on 2 contiguous blocks. 1188 * 1189 * Returns 0 if erase successful, -EINVAL if adressing error, -EIO if erase 1190 * issue 1191 */ 1192 static int doc_erase(struct mtd_info *mtd, struct erase_info *info) 1193 { 1194 struct docg3 *docg3 = mtd->priv; 1195 uint64_t len; 1196 int block0, block1, page, ret, ofs = 0; 1197 1198 doc_dbg("doc_erase(from=%lld, len=%lld\n", info->addr, info->len); 1199 1200 info->state = MTD_ERASE_PENDING; 1201 calc_block_sector(info->addr + info->len, &block0, &block1, &page, 1202 &ofs, docg3->reliable); 1203 ret = -EINVAL; 1204 if (info->addr + info->len > mtd->size || page || ofs) 1205 goto reset_err; 1206 1207 ret = 0; 1208 calc_block_sector(info->addr, &block0, &block1, &page, &ofs, 1209 docg3->reliable); 1210 mutex_lock(&docg3->cascade->lock); 1211 doc_set_device_id(docg3, docg3->device_id); 1212 doc_set_reliable_mode(docg3); 1213 for (len = info->len; !ret && len > 0; len -= mtd->erasesize) { 1214 info->state = MTD_ERASING; 1215 ret = doc_erase_block(docg3, block0, block1); 1216 block0 += 2; 1217 block1 += 2; 1218 } 1219 mutex_unlock(&docg3->cascade->lock); 1220 1221 if (ret) 1222 goto reset_err; 1223 1224 info->state = MTD_ERASE_DONE; 1225 return 0; 1226 1227 reset_err: 1228 info->state = MTD_ERASE_FAILED; 1229 return ret; 1230 } 1231 1232 /** 1233 * doc_write_page - Write a single page to the chip 1234 * @docg3: the device 1235 * @to: the offset from first block and first page, in bytes, aligned on page 1236 * size 1237 * @buf: buffer to get bytes from 1238 * @oob: buffer to get out of band bytes from (can be NULL if no OOB should be 1239 * written) 1240 * @autoecc: if 0, all 16 bytes from OOB are taken, regardless of HW Hamming or 1241 * BCH computations. If 1, only bytes 0-7 and byte 15 are taken, 1242 * remaining ones are filled with hardware Hamming and BCH 1243 * computations. Its value is not meaningfull is oob == NULL. 1244 * 1245 * Write one full page (ie. 1 page split on two planes), of 512 bytes, with the 1246 * OOB data. The OOB ECC is automatically computed by the hardware Hamming and 1247 * BCH generator if autoecc is not null. 1248 * 1249 * Returns 0 if write successful, -EIO if write error, -EAGAIN if timeout 1250 */ 1251 static int doc_write_page(struct docg3 *docg3, loff_t to, const u_char *buf, 1252 const u_char *oob, int autoecc) 1253 { 1254 int block0, block1, page, ret, ofs = 0; 1255 u8 hwecc[DOC_ECC_BCH_SIZE], hamming; 1256 1257 doc_dbg("doc_write_page(to=%lld)\n", to); 1258 calc_block_sector(to, &block0, &block1, &page, &ofs, docg3->reliable); 1259 1260 doc_set_device_id(docg3, docg3->device_id); 1261 ret = doc_reset_seq(docg3); 1262 if (ret) 1263 goto err; 1264 1265 /* Program the flash address block and page */ 1266 ret = doc_write_seek(docg3, block0, block1, page, ofs); 1267 if (ret) 1268 goto err; 1269 1270 doc_write_page_ecc_init(docg3, DOC_ECC_BCH_TOTAL_BYTES); 1271 doc_delay(docg3, 2); 1272 doc_write_page_putbytes(docg3, DOC_LAYOUT_PAGE_SIZE, buf); 1273 1274 if (oob && autoecc) { 1275 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ, oob); 1276 doc_delay(docg3, 2); 1277 oob += DOC_LAYOUT_OOB_UNUSED_OFS; 1278 1279 hamming = doc_register_readb(docg3, DOC_HAMMINGPARITY); 1280 doc_delay(docg3, 2); 1281 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_HAMMING_SZ, 1282 &hamming); 1283 doc_delay(docg3, 2); 1284 1285 doc_get_bch_hw_ecc(docg3, hwecc); 1286 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_BCH_SZ, hwecc); 1287 doc_delay(docg3, 2); 1288 1289 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_UNUSED_SZ, oob); 1290 } 1291 if (oob && !autoecc) 1292 doc_write_page_putbytes(docg3, DOC_LAYOUT_OOB_SIZE, oob); 1293 1294 doc_delay(docg3, 2); 1295 doc_page_finish(docg3); 1296 doc_delay(docg3, 2); 1297 doc_flash_command(docg3, DOC_CMD_PROG_CYCLE2); 1298 doc_delay(docg3, 2); 1299 1300 /* 1301 * The wait status will perform another doc_page_finish() call, but that 1302 * seems to please the docg3, so leave it. 1303 */ 1304 ret = doc_write_erase_wait_status(docg3); 1305 return ret; 1306 err: 1307 doc_read_page_finish(docg3); 1308 return ret; 1309 } 1310 1311 /** 1312 * doc_guess_autoecc - Guess autoecc mode from mbd_oob_ops 1313 * @ops: the oob operations 1314 * 1315 * Returns 0 or 1 if success, -EINVAL if invalid oob mode 1316 */ 1317 static int doc_guess_autoecc(struct mtd_oob_ops *ops) 1318 { 1319 int autoecc; 1320 1321 switch (ops->mode) { 1322 case MTD_OPS_PLACE_OOB: 1323 case MTD_OPS_AUTO_OOB: 1324 autoecc = 1; 1325 break; 1326 case MTD_OPS_RAW: 1327 autoecc = 0; 1328 break; 1329 default: 1330 autoecc = -EINVAL; 1331 } 1332 return autoecc; 1333 } 1334 1335 /** 1336 * doc_fill_autooob - Fill a 16 bytes OOB from 8 non-ECC bytes 1337 * @dst: the target 16 bytes OOB buffer 1338 * @oobsrc: the source 8 bytes non-ECC OOB buffer 1339 * 1340 */ 1341 static void doc_fill_autooob(u8 *dst, u8 *oobsrc) 1342 { 1343 memcpy(dst, oobsrc, DOC_LAYOUT_OOB_PAGEINFO_SZ); 1344 dst[DOC_LAYOUT_OOB_UNUSED_OFS] = oobsrc[DOC_LAYOUT_OOB_PAGEINFO_SZ]; 1345 } 1346 1347 /** 1348 * doc_backup_oob - Backup OOB into docg3 structure 1349 * @docg3: the device 1350 * @to: the page offset in the chip 1351 * @ops: the OOB size and buffer 1352 * 1353 * As the docg3 should write a page with its OOB in one pass, and some userland 1354 * applications do write_oob() to setup the OOB and then write(), store the OOB 1355 * into a temporary storage. This is very dangerous, as 2 concurrent 1356 * applications could store an OOB, and then write their pages (which will 1357 * result into one having its OOB corrupted). 1358 * 1359 * The only reliable way would be for userland to call doc_write_oob() with both 1360 * the page data _and_ the OOB area. 1361 * 1362 * Returns 0 if success, -EINVAL if ops content invalid 1363 */ 1364 static int doc_backup_oob(struct docg3 *docg3, loff_t to, 1365 struct mtd_oob_ops *ops) 1366 { 1367 int ooblen = ops->ooblen, autoecc; 1368 1369 if (ooblen != DOC_LAYOUT_OOB_SIZE) 1370 return -EINVAL; 1371 autoecc = doc_guess_autoecc(ops); 1372 if (autoecc < 0) 1373 return autoecc; 1374 1375 docg3->oob_write_ofs = to; 1376 docg3->oob_autoecc = autoecc; 1377 if (ops->mode == MTD_OPS_AUTO_OOB) { 1378 doc_fill_autooob(docg3->oob_write_buf, ops->oobbuf); 1379 ops->oobretlen = 8; 1380 } else { 1381 memcpy(docg3->oob_write_buf, ops->oobbuf, DOC_LAYOUT_OOB_SIZE); 1382 ops->oobretlen = DOC_LAYOUT_OOB_SIZE; 1383 } 1384 return 0; 1385 } 1386 1387 /** 1388 * doc_write_oob - Write out of band bytes to flash 1389 * @mtd: the device 1390 * @ofs: the offset from first block and first page, in bytes, aligned on page 1391 * size 1392 * @ops: the mtd oob structure 1393 * 1394 * Either write OOB data into a temporary buffer, for the subsequent write 1395 * page. The provided OOB should be 16 bytes long. If a data buffer is provided 1396 * as well, issue the page write. 1397 * Or provide data without OOB, and then a all zeroed OOB will be used (ECC will 1398 * still be filled in if asked for). 1399 * 1400 * Returns 0 is successfull, EINVAL if length is not 14 bytes 1401 */ 1402 static int doc_write_oob(struct mtd_info *mtd, loff_t ofs, 1403 struct mtd_oob_ops *ops) 1404 { 1405 struct docg3 *docg3 = mtd->priv; 1406 int ret, autoecc, oobdelta; 1407 u8 *oobbuf = ops->oobbuf; 1408 u8 *buf = ops->datbuf; 1409 size_t len, ooblen; 1410 u8 oob[DOC_LAYOUT_OOB_SIZE]; 1411 1412 if (buf) 1413 len = ops->len; 1414 else 1415 len = 0; 1416 if (oobbuf) 1417 ooblen = ops->ooblen; 1418 else 1419 ooblen = 0; 1420 1421 if (oobbuf && ops->mode == MTD_OPS_PLACE_OOB) 1422 oobbuf += ops->ooboffs; 1423 1424 doc_dbg("doc_write_oob(from=%lld, mode=%d, data=(%p:%zu), oob=(%p:%zu))\n", 1425 ofs, ops->mode, buf, len, oobbuf, ooblen); 1426 switch (ops->mode) { 1427 case MTD_OPS_PLACE_OOB: 1428 case MTD_OPS_RAW: 1429 oobdelta = mtd->oobsize; 1430 break; 1431 case MTD_OPS_AUTO_OOB: 1432 oobdelta = mtd->ecclayout->oobavail; 1433 break; 1434 default: 1435 oobdelta = 0; 1436 } 1437 if ((len % DOC_LAYOUT_PAGE_SIZE) || (ooblen % oobdelta) || 1438 (ofs % DOC_LAYOUT_PAGE_SIZE)) 1439 return -EINVAL; 1440 if (len && ooblen && 1441 (len / DOC_LAYOUT_PAGE_SIZE) != (ooblen / oobdelta)) 1442 return -EINVAL; 1443 if (ofs + len > mtd->size) 1444 return -EINVAL; 1445 1446 ops->oobretlen = 0; 1447 ops->retlen = 0; 1448 ret = 0; 1449 if (len == 0 && ooblen == 0) 1450 return -EINVAL; 1451 if (len == 0 && ooblen > 0) 1452 return doc_backup_oob(docg3, ofs, ops); 1453 1454 autoecc = doc_guess_autoecc(ops); 1455 if (autoecc < 0) 1456 return autoecc; 1457 1458 mutex_lock(&docg3->cascade->lock); 1459 while (!ret && len > 0) { 1460 memset(oob, 0, sizeof(oob)); 1461 if (ofs == docg3->oob_write_ofs) 1462 memcpy(oob, docg3->oob_write_buf, DOC_LAYOUT_OOB_SIZE); 1463 else if (ooblen > 0 && ops->mode == MTD_OPS_AUTO_OOB) 1464 doc_fill_autooob(oob, oobbuf); 1465 else if (ooblen > 0) 1466 memcpy(oob, oobbuf, DOC_LAYOUT_OOB_SIZE); 1467 ret = doc_write_page(docg3, ofs, buf, oob, autoecc); 1468 1469 ofs += DOC_LAYOUT_PAGE_SIZE; 1470 len -= DOC_LAYOUT_PAGE_SIZE; 1471 buf += DOC_LAYOUT_PAGE_SIZE; 1472 if (ooblen) { 1473 oobbuf += oobdelta; 1474 ooblen -= oobdelta; 1475 ops->oobretlen += oobdelta; 1476 } 1477 ops->retlen += DOC_LAYOUT_PAGE_SIZE; 1478 } 1479 1480 doc_set_device_id(docg3, 0); 1481 mutex_unlock(&docg3->cascade->lock); 1482 return ret; 1483 } 1484 1485 /** 1486 * doc_write - Write a buffer to the chip 1487 * @mtd: the device 1488 * @to: the offset from first block and first page, in bytes, aligned on page 1489 * size 1490 * @len: the number of bytes to write (must be a full page size, ie. 512) 1491 * @retlen: the number of bytes actually written (0 or 512) 1492 * @buf: the buffer to get bytes from 1493 * 1494 * Writes data to the chip. 1495 * 1496 * Returns 0 if write successful, -EIO if write error 1497 */ 1498 static int doc_write(struct mtd_info *mtd, loff_t to, size_t len, 1499 size_t *retlen, const u_char *buf) 1500 { 1501 struct docg3 *docg3 = mtd->priv; 1502 int ret; 1503 struct mtd_oob_ops ops; 1504 1505 doc_dbg("doc_write(to=%lld, len=%zu)\n", to, len); 1506 ops.datbuf = (char *)buf; 1507 ops.len = len; 1508 ops.mode = MTD_OPS_PLACE_OOB; 1509 ops.oobbuf = NULL; 1510 ops.ooblen = 0; 1511 ops.ooboffs = 0; 1512 1513 ret = doc_write_oob(mtd, to, &ops); 1514 *retlen = ops.retlen; 1515 return ret; 1516 } 1517 1518 static struct docg3 *sysfs_dev2docg3(struct device *dev, 1519 struct device_attribute *attr) 1520 { 1521 int floor; 1522 struct platform_device *pdev = to_platform_device(dev); 1523 struct mtd_info **docg3_floors = platform_get_drvdata(pdev); 1524 1525 floor = attr->attr.name[1] - '0'; 1526 if (floor < 0 || floor >= DOC_MAX_NBFLOORS) 1527 return NULL; 1528 else 1529 return docg3_floors[floor]->priv; 1530 } 1531 1532 static ssize_t dps0_is_key_locked(struct device *dev, 1533 struct device_attribute *attr, char *buf) 1534 { 1535 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); 1536 int dps0; 1537 1538 mutex_lock(&docg3->cascade->lock); 1539 doc_set_device_id(docg3, docg3->device_id); 1540 dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS); 1541 doc_set_device_id(docg3, 0); 1542 mutex_unlock(&docg3->cascade->lock); 1543 1544 return sprintf(buf, "%d\n", !(dps0 & DOC_DPS_KEY_OK)); 1545 } 1546 1547 static ssize_t dps1_is_key_locked(struct device *dev, 1548 struct device_attribute *attr, char *buf) 1549 { 1550 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); 1551 int dps1; 1552 1553 mutex_lock(&docg3->cascade->lock); 1554 doc_set_device_id(docg3, docg3->device_id); 1555 dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS); 1556 doc_set_device_id(docg3, 0); 1557 mutex_unlock(&docg3->cascade->lock); 1558 1559 return sprintf(buf, "%d\n", !(dps1 & DOC_DPS_KEY_OK)); 1560 } 1561 1562 static ssize_t dps0_insert_key(struct device *dev, 1563 struct device_attribute *attr, 1564 const char *buf, size_t count) 1565 { 1566 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); 1567 int i; 1568 1569 if (count != DOC_LAYOUT_DPS_KEY_LENGTH) 1570 return -EINVAL; 1571 1572 mutex_lock(&docg3->cascade->lock); 1573 doc_set_device_id(docg3, docg3->device_id); 1574 for (i = 0; i < DOC_LAYOUT_DPS_KEY_LENGTH; i++) 1575 doc_writeb(docg3, buf[i], DOC_DPS0_KEY); 1576 doc_set_device_id(docg3, 0); 1577 mutex_unlock(&docg3->cascade->lock); 1578 return count; 1579 } 1580 1581 static ssize_t dps1_insert_key(struct device *dev, 1582 struct device_attribute *attr, 1583 const char *buf, size_t count) 1584 { 1585 struct docg3 *docg3 = sysfs_dev2docg3(dev, attr); 1586 int i; 1587 1588 if (count != DOC_LAYOUT_DPS_KEY_LENGTH) 1589 return -EINVAL; 1590 1591 mutex_lock(&docg3->cascade->lock); 1592 doc_set_device_id(docg3, docg3->device_id); 1593 for (i = 0; i < DOC_LAYOUT_DPS_KEY_LENGTH; i++) 1594 doc_writeb(docg3, buf[i], DOC_DPS1_KEY); 1595 doc_set_device_id(docg3, 0); 1596 mutex_unlock(&docg3->cascade->lock); 1597 return count; 1598 } 1599 1600 #define FLOOR_SYSFS(id) { \ 1601 __ATTR(f##id##_dps0_is_keylocked, S_IRUGO, dps0_is_key_locked, NULL), \ 1602 __ATTR(f##id##_dps1_is_keylocked, S_IRUGO, dps1_is_key_locked, NULL), \ 1603 __ATTR(f##id##_dps0_protection_key, S_IWUGO, NULL, dps0_insert_key), \ 1604 __ATTR(f##id##_dps1_protection_key, S_IWUGO, NULL, dps1_insert_key), \ 1605 } 1606 1607 static struct device_attribute doc_sys_attrs[DOC_MAX_NBFLOORS][4] = { 1608 FLOOR_SYSFS(0), FLOOR_SYSFS(1), FLOOR_SYSFS(2), FLOOR_SYSFS(3) 1609 }; 1610 1611 static int doc_register_sysfs(struct platform_device *pdev, 1612 struct docg3_cascade *cascade) 1613 { 1614 int ret = 0, floor, i = 0; 1615 struct device *dev = &pdev->dev; 1616 1617 for (floor = 0; !ret && floor < DOC_MAX_NBFLOORS && 1618 cascade->floors[floor]; floor++) 1619 for (i = 0; !ret && i < 4; i++) 1620 ret = device_create_file(dev, &doc_sys_attrs[floor][i]); 1621 if (!ret) 1622 return 0; 1623 do { 1624 while (--i >= 0) 1625 device_remove_file(dev, &doc_sys_attrs[floor][i]); 1626 i = 4; 1627 } while (--floor >= 0); 1628 return ret; 1629 } 1630 1631 static void doc_unregister_sysfs(struct platform_device *pdev, 1632 struct docg3_cascade *cascade) 1633 { 1634 struct device *dev = &pdev->dev; 1635 int floor, i; 1636 1637 for (floor = 0; floor < DOC_MAX_NBFLOORS && cascade->floors[floor]; 1638 floor++) 1639 for (i = 0; i < 4; i++) 1640 device_remove_file(dev, &doc_sys_attrs[floor][i]); 1641 } 1642 1643 /* 1644 * Debug sysfs entries 1645 */ 1646 static int dbg_flashctrl_show(struct seq_file *s, void *p) 1647 { 1648 struct docg3 *docg3 = (struct docg3 *)s->private; 1649 1650 int pos = 0; 1651 u8 fctrl; 1652 1653 mutex_lock(&docg3->cascade->lock); 1654 fctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); 1655 mutex_unlock(&docg3->cascade->lock); 1656 1657 pos += seq_printf(s, 1658 "FlashControl : 0x%02x (%s,CE# %s,%s,%s,flash %s)\n", 1659 fctrl, 1660 fctrl & DOC_CTRL_VIOLATION ? "protocol violation" : "-", 1661 fctrl & DOC_CTRL_CE ? "active" : "inactive", 1662 fctrl & DOC_CTRL_PROTECTION_ERROR ? "protection error" : "-", 1663 fctrl & DOC_CTRL_SEQUENCE_ERROR ? "sequence error" : "-", 1664 fctrl & DOC_CTRL_FLASHREADY ? "ready" : "not ready"); 1665 return pos; 1666 } 1667 DEBUGFS_RO_ATTR(flashcontrol, dbg_flashctrl_show); 1668 1669 static int dbg_asicmode_show(struct seq_file *s, void *p) 1670 { 1671 struct docg3 *docg3 = (struct docg3 *)s->private; 1672 1673 int pos = 0, pctrl, mode; 1674 1675 mutex_lock(&docg3->cascade->lock); 1676 pctrl = doc_register_readb(docg3, DOC_ASICMODE); 1677 mode = pctrl & 0x03; 1678 mutex_unlock(&docg3->cascade->lock); 1679 1680 pos += seq_printf(s, 1681 "%04x : RAM_WE=%d,RSTIN_RESET=%d,BDETCT_RESET=%d,WRITE_ENABLE=%d,POWERDOWN=%d,MODE=%d%d (", 1682 pctrl, 1683 pctrl & DOC_ASICMODE_RAM_WE ? 1 : 0, 1684 pctrl & DOC_ASICMODE_RSTIN_RESET ? 1 : 0, 1685 pctrl & DOC_ASICMODE_BDETCT_RESET ? 1 : 0, 1686 pctrl & DOC_ASICMODE_MDWREN ? 1 : 0, 1687 pctrl & DOC_ASICMODE_POWERDOWN ? 1 : 0, 1688 mode >> 1, mode & 0x1); 1689 1690 switch (mode) { 1691 case DOC_ASICMODE_RESET: 1692 pos += seq_printf(s, "reset"); 1693 break; 1694 case DOC_ASICMODE_NORMAL: 1695 pos += seq_printf(s, "normal"); 1696 break; 1697 case DOC_ASICMODE_POWERDOWN: 1698 pos += seq_printf(s, "powerdown"); 1699 break; 1700 } 1701 pos += seq_printf(s, ")\n"); 1702 return pos; 1703 } 1704 DEBUGFS_RO_ATTR(asic_mode, dbg_asicmode_show); 1705 1706 static int dbg_device_id_show(struct seq_file *s, void *p) 1707 { 1708 struct docg3 *docg3 = (struct docg3 *)s->private; 1709 int pos = 0; 1710 int id; 1711 1712 mutex_lock(&docg3->cascade->lock); 1713 id = doc_register_readb(docg3, DOC_DEVICESELECT); 1714 mutex_unlock(&docg3->cascade->lock); 1715 1716 pos += seq_printf(s, "DeviceId = %d\n", id); 1717 return pos; 1718 } 1719 DEBUGFS_RO_ATTR(device_id, dbg_device_id_show); 1720 1721 static int dbg_protection_show(struct seq_file *s, void *p) 1722 { 1723 struct docg3 *docg3 = (struct docg3 *)s->private; 1724 int pos = 0; 1725 int protect, dps0, dps0_low, dps0_high, dps1, dps1_low, dps1_high; 1726 1727 mutex_lock(&docg3->cascade->lock); 1728 protect = doc_register_readb(docg3, DOC_PROTECTION); 1729 dps0 = doc_register_readb(docg3, DOC_DPS0_STATUS); 1730 dps0_low = doc_register_readw(docg3, DOC_DPS0_ADDRLOW); 1731 dps0_high = doc_register_readw(docg3, DOC_DPS0_ADDRHIGH); 1732 dps1 = doc_register_readb(docg3, DOC_DPS1_STATUS); 1733 dps1_low = doc_register_readw(docg3, DOC_DPS1_ADDRLOW); 1734 dps1_high = doc_register_readw(docg3, DOC_DPS1_ADDRHIGH); 1735 mutex_unlock(&docg3->cascade->lock); 1736 1737 pos += seq_printf(s, "Protection = 0x%02x (", 1738 protect); 1739 if (protect & DOC_PROTECT_FOUNDRY_OTP_LOCK) 1740 pos += seq_printf(s, "FOUNDRY_OTP_LOCK,"); 1741 if (protect & DOC_PROTECT_CUSTOMER_OTP_LOCK) 1742 pos += seq_printf(s, "CUSTOMER_OTP_LOCK,"); 1743 if (protect & DOC_PROTECT_LOCK_INPUT) 1744 pos += seq_printf(s, "LOCK_INPUT,"); 1745 if (protect & DOC_PROTECT_STICKY_LOCK) 1746 pos += seq_printf(s, "STICKY_LOCK,"); 1747 if (protect & DOC_PROTECT_PROTECTION_ENABLED) 1748 pos += seq_printf(s, "PROTECTION ON,"); 1749 if (protect & DOC_PROTECT_IPL_DOWNLOAD_LOCK) 1750 pos += seq_printf(s, "IPL_DOWNLOAD_LOCK,"); 1751 if (protect & DOC_PROTECT_PROTECTION_ERROR) 1752 pos += seq_printf(s, "PROTECT_ERR,"); 1753 else 1754 pos += seq_printf(s, "NO_PROTECT_ERR"); 1755 pos += seq_printf(s, ")\n"); 1756 1757 pos += seq_printf(s, "DPS0 = 0x%02x : " 1758 "Protected area [0x%x - 0x%x] : OTP=%d, READ=%d, " 1759 "WRITE=%d, HW_LOCK=%d, KEY_OK=%d\n", 1760 dps0, dps0_low, dps0_high, 1761 !!(dps0 & DOC_DPS_OTP_PROTECTED), 1762 !!(dps0 & DOC_DPS_READ_PROTECTED), 1763 !!(dps0 & DOC_DPS_WRITE_PROTECTED), 1764 !!(dps0 & DOC_DPS_HW_LOCK_ENABLED), 1765 !!(dps0 & DOC_DPS_KEY_OK)); 1766 pos += seq_printf(s, "DPS1 = 0x%02x : " 1767 "Protected area [0x%x - 0x%x] : OTP=%d, READ=%d, " 1768 "WRITE=%d, HW_LOCK=%d, KEY_OK=%d\n", 1769 dps1, dps1_low, dps1_high, 1770 !!(dps1 & DOC_DPS_OTP_PROTECTED), 1771 !!(dps1 & DOC_DPS_READ_PROTECTED), 1772 !!(dps1 & DOC_DPS_WRITE_PROTECTED), 1773 !!(dps1 & DOC_DPS_HW_LOCK_ENABLED), 1774 !!(dps1 & DOC_DPS_KEY_OK)); 1775 return pos; 1776 } 1777 DEBUGFS_RO_ATTR(protection, dbg_protection_show); 1778 1779 static int __init doc_dbg_register(struct docg3 *docg3) 1780 { 1781 struct dentry *root, *entry; 1782 1783 root = debugfs_create_dir("docg3", NULL); 1784 if (!root) 1785 return -ENOMEM; 1786 1787 entry = debugfs_create_file("flashcontrol", S_IRUSR, root, docg3, 1788 &flashcontrol_fops); 1789 if (entry) 1790 entry = debugfs_create_file("asic_mode", S_IRUSR, root, 1791 docg3, &asic_mode_fops); 1792 if (entry) 1793 entry = debugfs_create_file("device_id", S_IRUSR, root, 1794 docg3, &device_id_fops); 1795 if (entry) 1796 entry = debugfs_create_file("protection", S_IRUSR, root, 1797 docg3, &protection_fops); 1798 if (entry) { 1799 docg3->debugfs_root = root; 1800 return 0; 1801 } else { 1802 debugfs_remove_recursive(root); 1803 return -ENOMEM; 1804 } 1805 } 1806 1807 static void __exit doc_dbg_unregister(struct docg3 *docg3) 1808 { 1809 debugfs_remove_recursive(docg3->debugfs_root); 1810 } 1811 1812 /** 1813 * doc_set_driver_info - Fill the mtd_info structure and docg3 structure 1814 * @chip_id: The chip ID of the supported chip 1815 * @mtd: The structure to fill 1816 */ 1817 static void __init doc_set_driver_info(int chip_id, struct mtd_info *mtd) 1818 { 1819 struct docg3 *docg3 = mtd->priv; 1820 int cfg; 1821 1822 cfg = doc_register_readb(docg3, DOC_CONFIGURATION); 1823 docg3->if_cfg = (cfg & DOC_CONF_IF_CFG ? 1 : 0); 1824 docg3->reliable = reliable_mode; 1825 1826 switch (chip_id) { 1827 case DOC_CHIPID_G3: 1828 mtd->name = kasprintf(GFP_KERNEL, "docg3.%d", 1829 docg3->device_id); 1830 docg3->max_block = 2047; 1831 break; 1832 } 1833 mtd->type = MTD_NANDFLASH; 1834 mtd->flags = MTD_CAP_NANDFLASH; 1835 mtd->size = (docg3->max_block + 1) * DOC_LAYOUT_BLOCK_SIZE; 1836 if (docg3->reliable == 2) 1837 mtd->size /= 2; 1838 mtd->erasesize = DOC_LAYOUT_BLOCK_SIZE * DOC_LAYOUT_NBPLANES; 1839 if (docg3->reliable == 2) 1840 mtd->erasesize /= 2; 1841 mtd->writebufsize = mtd->writesize = DOC_LAYOUT_PAGE_SIZE; 1842 mtd->oobsize = DOC_LAYOUT_OOB_SIZE; 1843 mtd->owner = THIS_MODULE; 1844 mtd->_erase = doc_erase; 1845 mtd->_read = doc_read; 1846 mtd->_write = doc_write; 1847 mtd->_read_oob = doc_read_oob; 1848 mtd->_write_oob = doc_write_oob; 1849 mtd->_block_isbad = doc_block_isbad; 1850 mtd->ecclayout = &docg3_oobinfo; 1851 mtd->ecc_strength = DOC_ECC_BCH_T; 1852 } 1853 1854 /** 1855 * doc_probe_device - Check if a device is available 1856 * @base: the io space where the device is probed 1857 * @floor: the floor of the probed device 1858 * @dev: the device 1859 * @cascade: the cascade of chips this devices will belong to 1860 * 1861 * Checks whether a device at the specified IO range, and floor is available. 1862 * 1863 * Returns a mtd_info struct if there is a device, ENODEV if none found, ENOMEM 1864 * if a memory allocation failed. If floor 0 is checked, a reset of the ASIC is 1865 * launched. 1866 */ 1867 static struct mtd_info * __init 1868 doc_probe_device(struct docg3_cascade *cascade, int floor, struct device *dev) 1869 { 1870 int ret, bbt_nbpages; 1871 u16 chip_id, chip_id_inv; 1872 struct docg3 *docg3; 1873 struct mtd_info *mtd; 1874 1875 ret = -ENOMEM; 1876 docg3 = kzalloc(sizeof(struct docg3), GFP_KERNEL); 1877 if (!docg3) 1878 goto nomem1; 1879 mtd = kzalloc(sizeof(struct mtd_info), GFP_KERNEL); 1880 if (!mtd) 1881 goto nomem2; 1882 mtd->priv = docg3; 1883 bbt_nbpages = DIV_ROUND_UP(docg3->max_block + 1, 1884 8 * DOC_LAYOUT_PAGE_SIZE); 1885 docg3->bbt = kzalloc(bbt_nbpages * DOC_LAYOUT_PAGE_SIZE, GFP_KERNEL); 1886 if (!docg3->bbt) 1887 goto nomem3; 1888 1889 docg3->dev = dev; 1890 docg3->device_id = floor; 1891 docg3->cascade = cascade; 1892 doc_set_device_id(docg3, docg3->device_id); 1893 if (!floor) 1894 doc_set_asic_mode(docg3, DOC_ASICMODE_RESET); 1895 doc_set_asic_mode(docg3, DOC_ASICMODE_NORMAL); 1896 1897 chip_id = doc_register_readw(docg3, DOC_CHIPID); 1898 chip_id_inv = doc_register_readw(docg3, DOC_CHIPID_INV); 1899 1900 ret = 0; 1901 if (chip_id != (u16)(~chip_id_inv)) { 1902 goto nomem3; 1903 } 1904 1905 switch (chip_id) { 1906 case DOC_CHIPID_G3: 1907 doc_info("Found a G3 DiskOnChip at addr %p, floor %d\n", 1908 docg3->cascade->base, floor); 1909 break; 1910 default: 1911 doc_err("Chip id %04x is not a DiskOnChip G3 chip\n", chip_id); 1912 goto nomem3; 1913 } 1914 1915 doc_set_driver_info(chip_id, mtd); 1916 1917 doc_hamming_ecc_init(docg3, DOC_LAYOUT_OOB_PAGEINFO_SZ); 1918 doc_reload_bbt(docg3); 1919 return mtd; 1920 1921 nomem3: 1922 kfree(mtd); 1923 nomem2: 1924 kfree(docg3); 1925 nomem1: 1926 return ERR_PTR(ret); 1927 } 1928 1929 /** 1930 * doc_release_device - Release a docg3 floor 1931 * @mtd: the device 1932 */ 1933 static void doc_release_device(struct mtd_info *mtd) 1934 { 1935 struct docg3 *docg3 = mtd->priv; 1936 1937 mtd_device_unregister(mtd); 1938 kfree(docg3->bbt); 1939 kfree(docg3); 1940 kfree(mtd->name); 1941 kfree(mtd); 1942 } 1943 1944 /** 1945 * docg3_resume - Awakens docg3 floor 1946 * @pdev: platfrom device 1947 * 1948 * Returns 0 (always successfull) 1949 */ 1950 static int docg3_resume(struct platform_device *pdev) 1951 { 1952 int i; 1953 struct docg3_cascade *cascade; 1954 struct mtd_info **docg3_floors, *mtd; 1955 struct docg3 *docg3; 1956 1957 cascade = platform_get_drvdata(pdev); 1958 docg3_floors = cascade->floors; 1959 mtd = docg3_floors[0]; 1960 docg3 = mtd->priv; 1961 1962 doc_dbg("docg3_resume()\n"); 1963 for (i = 0; i < 12; i++) 1964 doc_readb(docg3, DOC_IOSPACE_IPL); 1965 return 0; 1966 } 1967 1968 /** 1969 * docg3_suspend - Put in low power mode the docg3 floor 1970 * @pdev: platform device 1971 * @state: power state 1972 * 1973 * Shuts off most of docg3 circuitery to lower power consumption. 1974 * 1975 * Returns 0 if suspend succeeded, -EIO if chip refused suspend 1976 */ 1977 static int docg3_suspend(struct platform_device *pdev, pm_message_t state) 1978 { 1979 int floor, i; 1980 struct docg3_cascade *cascade; 1981 struct mtd_info **docg3_floors, *mtd; 1982 struct docg3 *docg3; 1983 u8 ctrl, pwr_down; 1984 1985 cascade = platform_get_drvdata(pdev); 1986 docg3_floors = cascade->floors; 1987 for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) { 1988 mtd = docg3_floors[floor]; 1989 if (!mtd) 1990 continue; 1991 docg3 = mtd->priv; 1992 1993 doc_writeb(docg3, floor, DOC_DEVICESELECT); 1994 ctrl = doc_register_readb(docg3, DOC_FLASHCONTROL); 1995 ctrl &= ~DOC_CTRL_VIOLATION & ~DOC_CTRL_CE; 1996 doc_writeb(docg3, ctrl, DOC_FLASHCONTROL); 1997 1998 for (i = 0; i < 10; i++) { 1999 usleep_range(3000, 4000); 2000 pwr_down = doc_register_readb(docg3, DOC_POWERMODE); 2001 if (pwr_down & DOC_POWERDOWN_READY) 2002 break; 2003 } 2004 if (pwr_down & DOC_POWERDOWN_READY) { 2005 doc_dbg("docg3_suspend(): floor %d powerdown ok\n", 2006 floor); 2007 } else { 2008 doc_err("docg3_suspend(): floor %d powerdown failed\n", 2009 floor); 2010 return -EIO; 2011 } 2012 } 2013 2014 mtd = docg3_floors[0]; 2015 docg3 = mtd->priv; 2016 doc_set_asic_mode(docg3, DOC_ASICMODE_POWERDOWN); 2017 return 0; 2018 } 2019 2020 /** 2021 * doc_probe - Probe the IO space for a DiskOnChip G3 chip 2022 * @pdev: platform device 2023 * 2024 * Probes for a G3 chip at the specified IO space in the platform data 2025 * ressources. The floor 0 must be available. 2026 * 2027 * Returns 0 on success, -ENOMEM, -ENXIO on error 2028 */ 2029 static int __init docg3_probe(struct platform_device *pdev) 2030 { 2031 struct device *dev = &pdev->dev; 2032 struct mtd_info *mtd; 2033 struct resource *ress; 2034 void __iomem *base; 2035 int ret, floor, found = 0; 2036 struct docg3_cascade *cascade; 2037 2038 ret = -ENXIO; 2039 ress = platform_get_resource(pdev, IORESOURCE_MEM, 0); 2040 if (!ress) { 2041 dev_err(dev, "No I/O memory resource defined\n"); 2042 goto noress; 2043 } 2044 base = ioremap(ress->start, DOC_IOSPACE_SIZE); 2045 2046 ret = -ENOMEM; 2047 cascade = kzalloc(sizeof(*cascade) * DOC_MAX_NBFLOORS, 2048 GFP_KERNEL); 2049 if (!cascade) 2050 goto nomem1; 2051 cascade->base = base; 2052 mutex_init(&cascade->lock); 2053 cascade->bch = init_bch(DOC_ECC_BCH_M, DOC_ECC_BCH_T, 2054 DOC_ECC_BCH_PRIMPOLY); 2055 if (!cascade->bch) 2056 goto nomem2; 2057 2058 for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) { 2059 mtd = doc_probe_device(cascade, floor, dev); 2060 if (IS_ERR(mtd)) { 2061 ret = PTR_ERR(mtd); 2062 goto err_probe; 2063 } 2064 if (!mtd) { 2065 if (floor == 0) 2066 goto notfound; 2067 else 2068 continue; 2069 } 2070 cascade->floors[floor] = mtd; 2071 ret = mtd_device_parse_register(mtd, part_probes, NULL, NULL, 2072 0); 2073 if (ret) 2074 goto err_probe; 2075 found++; 2076 } 2077 2078 ret = doc_register_sysfs(pdev, cascade); 2079 if (ret) 2080 goto err_probe; 2081 if (!found) 2082 goto notfound; 2083 2084 platform_set_drvdata(pdev, cascade); 2085 doc_dbg_register(cascade->floors[0]->priv); 2086 return 0; 2087 2088 notfound: 2089 ret = -ENODEV; 2090 dev_info(dev, "No supported DiskOnChip found\n"); 2091 err_probe: 2092 kfree(cascade->bch); 2093 for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) 2094 if (cascade->floors[floor]) 2095 doc_release_device(cascade->floors[floor]); 2096 nomem2: 2097 kfree(cascade); 2098 nomem1: 2099 iounmap(base); 2100 noress: 2101 return ret; 2102 } 2103 2104 /** 2105 * docg3_release - Release the driver 2106 * @pdev: the platform device 2107 * 2108 * Returns 0 2109 */ 2110 static int __exit docg3_release(struct platform_device *pdev) 2111 { 2112 struct docg3_cascade *cascade = platform_get_drvdata(pdev); 2113 struct docg3 *docg3 = cascade->floors[0]->priv; 2114 void __iomem *base = cascade->base; 2115 int floor; 2116 2117 doc_unregister_sysfs(pdev, cascade); 2118 doc_dbg_unregister(docg3); 2119 for (floor = 0; floor < DOC_MAX_NBFLOORS; floor++) 2120 if (cascade->floors[floor]) 2121 doc_release_device(cascade->floors[floor]); 2122 2123 free_bch(docg3->cascade->bch); 2124 kfree(cascade); 2125 iounmap(base); 2126 return 0; 2127 } 2128 2129 static struct platform_driver g3_driver = { 2130 .driver = { 2131 .name = "docg3", 2132 .owner = THIS_MODULE, 2133 }, 2134 .suspend = docg3_suspend, 2135 .resume = docg3_resume, 2136 .remove = __exit_p(docg3_release), 2137 }; 2138 2139 static int __init docg3_init(void) 2140 { 2141 return platform_driver_probe(&g3_driver, docg3_probe); 2142 } 2143 module_init(docg3_init); 2144 2145 2146 static void __exit docg3_exit(void) 2147 { 2148 platform_driver_unregister(&g3_driver); 2149 } 2150 module_exit(docg3_exit); 2151 2152 MODULE_LICENSE("GPL"); 2153 MODULE_AUTHOR("Robert Jarzmik <robert.jarzmik@free.fr>"); 2154 MODULE_DESCRIPTION("MTD driver for DiskOnChip G3"); 2155