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