linux/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * Freescale GPMI NAND Flash Driver
   4 *
   5 * Copyright (C) 2010-2015 Freescale Semiconductor, Inc.
   6 * Copyright (C) 2008 Embedded Alley Solutions, Inc.
   7 */
   8#include <linux/clk.h>
   9#include <linux/slab.h>
  10#include <linux/sched/task_stack.h>
  11#include <linux/interrupt.h>
  12#include <linux/module.h>
  13#include <linux/mtd/partitions.h>
  14#include <linux/of.h>
  15#include <linux/of_device.h>
  16#include "gpmi-nand.h"
  17#include "bch-regs.h"
  18
  19/* Resource names for the GPMI NAND driver. */
  20#define GPMI_NAND_GPMI_REGS_ADDR_RES_NAME  "gpmi-nand"
  21#define GPMI_NAND_BCH_REGS_ADDR_RES_NAME   "bch"
  22#define GPMI_NAND_BCH_INTERRUPT_RES_NAME   "bch"
  23
  24/* add our owner bbt descriptor */
  25static uint8_t scan_ff_pattern[] = { 0xff };
  26static struct nand_bbt_descr gpmi_bbt_descr = {
  27        .options        = 0,
  28        .offs           = 0,
  29        .len            = 1,
  30        .pattern        = scan_ff_pattern
  31};
  32
  33/*
  34 * We may change the layout if we can get the ECC info from the datasheet,
  35 * else we will use all the (page + OOB).
  36 */
  37static int gpmi_ooblayout_ecc(struct mtd_info *mtd, int section,
  38                              struct mtd_oob_region *oobregion)
  39{
  40        struct nand_chip *chip = mtd_to_nand(mtd);
  41        struct gpmi_nand_data *this = nand_get_controller_data(chip);
  42        struct bch_geometry *geo = &this->bch_geometry;
  43
  44        if (section)
  45                return -ERANGE;
  46
  47        oobregion->offset = 0;
  48        oobregion->length = geo->page_size - mtd->writesize;
  49
  50        return 0;
  51}
  52
  53static int gpmi_ooblayout_free(struct mtd_info *mtd, int section,
  54                               struct mtd_oob_region *oobregion)
  55{
  56        struct nand_chip *chip = mtd_to_nand(mtd);
  57        struct gpmi_nand_data *this = nand_get_controller_data(chip);
  58        struct bch_geometry *geo = &this->bch_geometry;
  59
  60        if (section)
  61                return -ERANGE;
  62
  63        /* The available oob size we have. */
  64        if (geo->page_size < mtd->writesize + mtd->oobsize) {
  65                oobregion->offset = geo->page_size - mtd->writesize;
  66                oobregion->length = mtd->oobsize - oobregion->offset;
  67        }
  68
  69        return 0;
  70}
  71
  72static const char * const gpmi_clks_for_mx2x[] = {
  73        "gpmi_io",
  74};
  75
  76static const struct mtd_ooblayout_ops gpmi_ooblayout_ops = {
  77        .ecc = gpmi_ooblayout_ecc,
  78        .free = gpmi_ooblayout_free,
  79};
  80
  81static const struct gpmi_devdata gpmi_devdata_imx23 = {
  82        .type = IS_MX23,
  83        .bch_max_ecc_strength = 20,
  84        .max_chain_delay = 16000,
  85        .clks = gpmi_clks_for_mx2x,
  86        .clks_count = ARRAY_SIZE(gpmi_clks_for_mx2x),
  87};
  88
  89static const struct gpmi_devdata gpmi_devdata_imx28 = {
  90        .type = IS_MX28,
  91        .bch_max_ecc_strength = 20,
  92        .max_chain_delay = 16000,
  93        .clks = gpmi_clks_for_mx2x,
  94        .clks_count = ARRAY_SIZE(gpmi_clks_for_mx2x),
  95};
  96
  97static const char * const gpmi_clks_for_mx6[] = {
  98        "gpmi_io", "gpmi_apb", "gpmi_bch", "gpmi_bch_apb", "per1_bch",
  99};
 100
 101static const struct gpmi_devdata gpmi_devdata_imx6q = {
 102        .type = IS_MX6Q,
 103        .bch_max_ecc_strength = 40,
 104        .max_chain_delay = 12000,
 105        .clks = gpmi_clks_for_mx6,
 106        .clks_count = ARRAY_SIZE(gpmi_clks_for_mx6),
 107};
 108
 109static const struct gpmi_devdata gpmi_devdata_imx6sx = {
 110        .type = IS_MX6SX,
 111        .bch_max_ecc_strength = 62,
 112        .max_chain_delay = 12000,
 113        .clks = gpmi_clks_for_mx6,
 114        .clks_count = ARRAY_SIZE(gpmi_clks_for_mx6),
 115};
 116
 117static const char * const gpmi_clks_for_mx7d[] = {
 118        "gpmi_io", "gpmi_bch_apb",
 119};
 120
 121static const struct gpmi_devdata gpmi_devdata_imx7d = {
 122        .type = IS_MX7D,
 123        .bch_max_ecc_strength = 62,
 124        .max_chain_delay = 12000,
 125        .clks = gpmi_clks_for_mx7d,
 126        .clks_count = ARRAY_SIZE(gpmi_clks_for_mx7d),
 127};
 128
 129static irqreturn_t bch_irq(int irq, void *cookie)
 130{
 131        struct gpmi_nand_data *this = cookie;
 132
 133        gpmi_clear_bch(this);
 134        complete(&this->bch_done);
 135        return IRQ_HANDLED;
 136}
 137
 138/*
 139 *  Calculate the ECC strength by hand:
 140 *      E : The ECC strength.
 141 *      G : the length of Galois Field.
 142 *      N : The chunk count of per page.
 143 *      O : the oobsize of the NAND chip.
 144 *      M : the metasize of per page.
 145 *
 146 *      The formula is :
 147 *              E * G * N
 148 *            ------------ <= (O - M)
 149 *                  8
 150 *
 151 *      So, we get E by:
 152 *                    (O - M) * 8
 153 *              E <= -------------
 154 *                       G * N
 155 */
 156static inline int get_ecc_strength(struct gpmi_nand_data *this)
 157{
 158        struct bch_geometry *geo = &this->bch_geometry;
 159        struct mtd_info *mtd = nand_to_mtd(&this->nand);
 160        int ecc_strength;
 161
 162        ecc_strength = ((mtd->oobsize - geo->metadata_size) * 8)
 163                        / (geo->gf_len * geo->ecc_chunk_count);
 164
 165        /* We need the minor even number. */
 166        return round_down(ecc_strength, 2);
 167}
 168
 169static inline bool gpmi_check_ecc(struct gpmi_nand_data *this)
 170{
 171        struct bch_geometry *geo = &this->bch_geometry;
 172
 173        /* Do the sanity check. */
 174        if (GPMI_IS_MX23(this) || GPMI_IS_MX28(this)) {
 175                /* The mx23/mx28 only support the GF13. */
 176                if (geo->gf_len == 14)
 177                        return false;
 178        }
 179        return geo->ecc_strength <= this->devdata->bch_max_ecc_strength;
 180}
 181
 182/*
 183 * If we can get the ECC information from the nand chip, we do not
 184 * need to calculate them ourselves.
 185 *
 186 * We may have available oob space in this case.
 187 */
 188static int set_geometry_by_ecc_info(struct gpmi_nand_data *this,
 189                                    unsigned int ecc_strength,
 190                                    unsigned int ecc_step)
 191{
 192        struct bch_geometry *geo = &this->bch_geometry;
 193        struct nand_chip *chip = &this->nand;
 194        struct mtd_info *mtd = nand_to_mtd(chip);
 195        unsigned int block_mark_bit_offset;
 196
 197        switch (ecc_step) {
 198        case SZ_512:
 199                geo->gf_len = 13;
 200                break;
 201        case SZ_1K:
 202                geo->gf_len = 14;
 203                break;
 204        default:
 205                dev_err(this->dev,
 206                        "unsupported nand chip. ecc bits : %d, ecc size : %d\n",
 207                        chip->ecc_strength_ds, chip->ecc_step_ds);
 208                return -EINVAL;
 209        }
 210        geo->ecc_chunk_size = ecc_step;
 211        geo->ecc_strength = round_up(ecc_strength, 2);
 212        if (!gpmi_check_ecc(this))
 213                return -EINVAL;
 214
 215        /* Keep the C >= O */
 216        if (geo->ecc_chunk_size < mtd->oobsize) {
 217                dev_err(this->dev,
 218                        "unsupported nand chip. ecc size: %d, oob size : %d\n",
 219                        ecc_step, mtd->oobsize);
 220                return -EINVAL;
 221        }
 222
 223        /* The default value, see comment in the legacy_set_geometry(). */
 224        geo->metadata_size = 10;
 225
 226        geo->ecc_chunk_count = mtd->writesize / geo->ecc_chunk_size;
 227
 228        /*
 229         * Now, the NAND chip with 2K page(data chunk is 512byte) shows below:
 230         *
 231         *    |                          P                            |
 232         *    |<----------------------------------------------------->|
 233         *    |                                                       |
 234         *    |                                        (Block Mark)   |
 235         *    |                      P'                      |      | |     |
 236         *    |<-------------------------------------------->|  D   | |  O' |
 237         *    |                                              |<---->| |<--->|
 238         *    V                                              V      V V     V
 239         *    +---+----------+-+----------+-+----------+-+----------+-+-----+
 240         *    | M |   data   |E|   data   |E|   data   |E|   data   |E|     |
 241         *    +---+----------+-+----------+-+----------+-+----------+-+-----+
 242         *                                                   ^              ^
 243         *                                                   |      O       |
 244         *                                                   |<------------>|
 245         *                                                   |              |
 246         *
 247         *      P : the page size for BCH module.
 248         *      E : The ECC strength.
 249         *      G : the length of Galois Field.
 250         *      N : The chunk count of per page.
 251         *      M : the metasize of per page.
 252         *      C : the ecc chunk size, aka the "data" above.
 253         *      P': the nand chip's page size.
 254         *      O : the nand chip's oob size.
 255         *      O': the free oob.
 256         *
 257         *      The formula for P is :
 258         *
 259         *                  E * G * N
 260         *             P = ------------ + P' + M
 261         *                      8
 262         *
 263         * The position of block mark moves forward in the ECC-based view
 264         * of page, and the delta is:
 265         *
 266         *                   E * G * (N - 1)
 267         *             D = (---------------- + M)
 268         *                          8
 269         *
 270         * Please see the comment in legacy_set_geometry().
 271         * With the condition C >= O , we still can get same result.
 272         * So the bit position of the physical block mark within the ECC-based
 273         * view of the page is :
 274         *             (P' - D) * 8
 275         */
 276        geo->page_size = mtd->writesize + geo->metadata_size +
 277                (geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) / 8;
 278
 279        geo->payload_size = mtd->writesize;
 280
 281        geo->auxiliary_status_offset = ALIGN(geo->metadata_size, 4);
 282        geo->auxiliary_size = ALIGN(geo->metadata_size, 4)
 283                                + ALIGN(geo->ecc_chunk_count, 4);
 284
 285        if (!this->swap_block_mark)
 286                return 0;
 287
 288        /* For bit swap. */
 289        block_mark_bit_offset = mtd->writesize * 8 -
 290                (geo->ecc_strength * geo->gf_len * (geo->ecc_chunk_count - 1)
 291                                + geo->metadata_size * 8);
 292
 293        geo->block_mark_byte_offset = block_mark_bit_offset / 8;
 294        geo->block_mark_bit_offset  = block_mark_bit_offset % 8;
 295        return 0;
 296}
 297
 298static int legacy_set_geometry(struct gpmi_nand_data *this)
 299{
 300        struct bch_geometry *geo = &this->bch_geometry;
 301        struct mtd_info *mtd = nand_to_mtd(&this->nand);
 302        unsigned int metadata_size;
 303        unsigned int status_size;
 304        unsigned int block_mark_bit_offset;
 305
 306        /*
 307         * The size of the metadata can be changed, though we set it to 10
 308         * bytes now. But it can't be too large, because we have to save
 309         * enough space for BCH.
 310         */
 311        geo->metadata_size = 10;
 312
 313        /* The default for the length of Galois Field. */
 314        geo->gf_len = 13;
 315
 316        /* The default for chunk size. */
 317        geo->ecc_chunk_size = 512;
 318        while (geo->ecc_chunk_size < mtd->oobsize) {
 319                geo->ecc_chunk_size *= 2; /* keep C >= O */
 320                geo->gf_len = 14;
 321        }
 322
 323        geo->ecc_chunk_count = mtd->writesize / geo->ecc_chunk_size;
 324
 325        /* We use the same ECC strength for all chunks. */
 326        geo->ecc_strength = get_ecc_strength(this);
 327        if (!gpmi_check_ecc(this)) {
 328                dev_err(this->dev,
 329                        "ecc strength: %d cannot be supported by the controller (%d)\n"
 330                        "try to use minimum ecc strength that NAND chip required\n",
 331                        geo->ecc_strength,
 332                        this->devdata->bch_max_ecc_strength);
 333                return -EINVAL;
 334        }
 335
 336        geo->page_size = mtd->writesize + geo->metadata_size +
 337                (geo->gf_len * geo->ecc_strength * geo->ecc_chunk_count) / 8;
 338        geo->payload_size = mtd->writesize;
 339
 340        /*
 341         * The auxiliary buffer contains the metadata and the ECC status. The
 342         * metadata is padded to the nearest 32-bit boundary. The ECC status
 343         * contains one byte for every ECC chunk, and is also padded to the
 344         * nearest 32-bit boundary.
 345         */
 346        metadata_size = ALIGN(geo->metadata_size, 4);
 347        status_size   = ALIGN(geo->ecc_chunk_count, 4);
 348
 349        geo->auxiliary_size = metadata_size + status_size;
 350        geo->auxiliary_status_offset = metadata_size;
 351
 352        if (!this->swap_block_mark)
 353                return 0;
 354
 355        /*
 356         * We need to compute the byte and bit offsets of
 357         * the physical block mark within the ECC-based view of the page.
 358         *
 359         * NAND chip with 2K page shows below:
 360         *                                             (Block Mark)
 361         *                                                   |      |
 362         *                                                   |  D   |
 363         *                                                   |<---->|
 364         *                                                   V      V
 365         *    +---+----------+-+----------+-+----------+-+----------+-+
 366         *    | M |   data   |E|   data   |E|   data   |E|   data   |E|
 367         *    +---+----------+-+----------+-+----------+-+----------+-+
 368         *
 369         * The position of block mark moves forward in the ECC-based view
 370         * of page, and the delta is:
 371         *
 372         *                   E * G * (N - 1)
 373         *             D = (---------------- + M)
 374         *                          8
 375         *
 376         * With the formula to compute the ECC strength, and the condition
 377         *       : C >= O         (C is the ecc chunk size)
 378         *
 379         * It's easy to deduce to the following result:
 380         *
 381         *         E * G       (O - M)      C - M         C - M
 382         *      ----------- <= ------- <=  --------  <  ---------
 383         *           8            N           N          (N - 1)
 384         *
 385         *  So, we get:
 386         *
 387         *                   E * G * (N - 1)
 388         *             D = (---------------- + M) < C
 389         *                          8
 390         *
 391         *  The above inequality means the position of block mark
 392         *  within the ECC-based view of the page is still in the data chunk,
 393         *  and it's NOT in the ECC bits of the chunk.
 394         *
 395         *  Use the following to compute the bit position of the
 396         *  physical block mark within the ECC-based view of the page:
 397         *          (page_size - D) * 8
 398         *
 399         *  --Huang Shijie
 400         */
 401        block_mark_bit_offset = mtd->writesize * 8 -
 402                (geo->ecc_strength * geo->gf_len * (geo->ecc_chunk_count - 1)
 403                                + geo->metadata_size * 8);
 404
 405        geo->block_mark_byte_offset = block_mark_bit_offset / 8;
 406        geo->block_mark_bit_offset  = block_mark_bit_offset % 8;
 407        return 0;
 408}
 409
 410int common_nfc_set_geometry(struct gpmi_nand_data *this)
 411{
 412        struct nand_chip *chip = &this->nand;
 413
 414        if (chip->ecc.strength > 0 && chip->ecc.size > 0)
 415                return set_geometry_by_ecc_info(this, chip->ecc.strength,
 416                                                chip->ecc.size);
 417
 418        if ((of_property_read_bool(this->dev->of_node, "fsl,use-minimum-ecc"))
 419                                || legacy_set_geometry(this)) {
 420                if (!(chip->ecc_strength_ds > 0 && chip->ecc_step_ds > 0))
 421                        return -EINVAL;
 422
 423                return set_geometry_by_ecc_info(this, chip->ecc_strength_ds,
 424                                                chip->ecc_step_ds);
 425        }
 426
 427        return 0;
 428}
 429
 430struct dma_chan *get_dma_chan(struct gpmi_nand_data *this)
 431{
 432        /* We use the DMA channel 0 to access all the nand chips. */
 433        return this->dma_chans[0];
 434}
 435
 436/* Can we use the upper's buffer directly for DMA? */
 437bool prepare_data_dma(struct gpmi_nand_data *this, const void *buf, int len,
 438                      enum dma_data_direction dr)
 439{
 440        struct scatterlist *sgl = &this->data_sgl;
 441        int ret;
 442
 443        /* first try to map the upper buffer directly */
 444        if (virt_addr_valid(buf) && !object_is_on_stack(buf)) {
 445                sg_init_one(sgl, buf, len);
 446                ret = dma_map_sg(this->dev, sgl, 1, dr);
 447                if (ret == 0)
 448                        goto map_fail;
 449
 450                return true;
 451        }
 452
 453map_fail:
 454        /* We have to use our own DMA buffer. */
 455        sg_init_one(sgl, this->data_buffer_dma, len);
 456
 457        if (dr == DMA_TO_DEVICE)
 458                memcpy(this->data_buffer_dma, buf, len);
 459
 460        dma_map_sg(this->dev, sgl, 1, dr);
 461
 462        return false;
 463}
 464
 465/* This will be called after the DMA operation is finished. */
 466static void dma_irq_callback(void *param)
 467{
 468        struct gpmi_nand_data *this = param;
 469        struct completion *dma_c = &this->dma_done;
 470
 471        complete(dma_c);
 472}
 473
 474int start_dma_without_bch_irq(struct gpmi_nand_data *this,
 475                                struct dma_async_tx_descriptor *desc)
 476{
 477        struct completion *dma_c = &this->dma_done;
 478        unsigned long timeout;
 479
 480        init_completion(dma_c);
 481
 482        desc->callback          = dma_irq_callback;
 483        desc->callback_param    = this;
 484        dmaengine_submit(desc);
 485        dma_async_issue_pending(get_dma_chan(this));
 486
 487        /* Wait for the interrupt from the DMA block. */
 488        timeout = wait_for_completion_timeout(dma_c, msecs_to_jiffies(1000));
 489        if (!timeout) {
 490                dev_err(this->dev, "DMA timeout, last DMA\n");
 491                gpmi_dump_info(this);
 492                return -ETIMEDOUT;
 493        }
 494        return 0;
 495}
 496
 497/*
 498 * This function is used in BCH reading or BCH writing pages.
 499 * It will wait for the BCH interrupt as long as ONE second.
 500 * Actually, we must wait for two interrupts :
 501 *      [1] firstly the DMA interrupt and
 502 *      [2] secondly the BCH interrupt.
 503 */
 504int start_dma_with_bch_irq(struct gpmi_nand_data *this,
 505                        struct dma_async_tx_descriptor *desc)
 506{
 507        struct completion *bch_c = &this->bch_done;
 508        unsigned long timeout;
 509
 510        /* Prepare to receive an interrupt from the BCH block. */
 511        init_completion(bch_c);
 512
 513        /* start the DMA */
 514        start_dma_without_bch_irq(this, desc);
 515
 516        /* Wait for the interrupt from the BCH block. */
 517        timeout = wait_for_completion_timeout(bch_c, msecs_to_jiffies(1000));
 518        if (!timeout) {
 519                dev_err(this->dev, "BCH timeout\n");
 520                gpmi_dump_info(this);
 521                return -ETIMEDOUT;
 522        }
 523        return 0;
 524}
 525
 526static int acquire_register_block(struct gpmi_nand_data *this,
 527                                  const char *res_name)
 528{
 529        struct platform_device *pdev = this->pdev;
 530        struct resources *res = &this->resources;
 531        struct resource *r;
 532        void __iomem *p;
 533
 534        r = platform_get_resource_byname(pdev, IORESOURCE_MEM, res_name);
 535        p = devm_ioremap_resource(&pdev->dev, r);
 536        if (IS_ERR(p))
 537                return PTR_ERR(p);
 538
 539        if (!strcmp(res_name, GPMI_NAND_GPMI_REGS_ADDR_RES_NAME))
 540                res->gpmi_regs = p;
 541        else if (!strcmp(res_name, GPMI_NAND_BCH_REGS_ADDR_RES_NAME))
 542                res->bch_regs = p;
 543        else
 544                dev_err(this->dev, "unknown resource name : %s\n", res_name);
 545
 546        return 0;
 547}
 548
 549static int acquire_bch_irq(struct gpmi_nand_data *this, irq_handler_t irq_h)
 550{
 551        struct platform_device *pdev = this->pdev;
 552        const char *res_name = GPMI_NAND_BCH_INTERRUPT_RES_NAME;
 553        struct resource *r;
 554        int err;
 555
 556        r = platform_get_resource_byname(pdev, IORESOURCE_IRQ, res_name);
 557        if (!r) {
 558                dev_err(this->dev, "Can't get resource for %s\n", res_name);
 559                return -ENODEV;
 560        }
 561
 562        err = devm_request_irq(this->dev, r->start, irq_h, 0, res_name, this);
 563        if (err)
 564                dev_err(this->dev, "error requesting BCH IRQ\n");
 565
 566        return err;
 567}
 568
 569static void release_dma_channels(struct gpmi_nand_data *this)
 570{
 571        unsigned int i;
 572        for (i = 0; i < DMA_CHANS; i++)
 573                if (this->dma_chans[i]) {
 574                        dma_release_channel(this->dma_chans[i]);
 575                        this->dma_chans[i] = NULL;
 576                }
 577}
 578
 579static int acquire_dma_channels(struct gpmi_nand_data *this)
 580{
 581        struct platform_device *pdev = this->pdev;
 582        struct dma_chan *dma_chan;
 583
 584        /* request dma channel */
 585        dma_chan = dma_request_slave_channel(&pdev->dev, "rx-tx");
 586        if (!dma_chan) {
 587                dev_err(this->dev, "Failed to request DMA channel.\n");
 588                goto acquire_err;
 589        }
 590
 591        this->dma_chans[0] = dma_chan;
 592        return 0;
 593
 594acquire_err:
 595        release_dma_channels(this);
 596        return -EINVAL;
 597}
 598
 599static int gpmi_get_clks(struct gpmi_nand_data *this)
 600{
 601        struct resources *r = &this->resources;
 602        struct clk *clk;
 603        int err, i;
 604
 605        for (i = 0; i < this->devdata->clks_count; i++) {
 606                clk = devm_clk_get(this->dev, this->devdata->clks[i]);
 607                if (IS_ERR(clk)) {
 608                        err = PTR_ERR(clk);
 609                        goto err_clock;
 610                }
 611
 612                r->clock[i] = clk;
 613        }
 614
 615        if (GPMI_IS_MX6(this))
 616                /*
 617                 * Set the default value for the gpmi clock.
 618                 *
 619                 * If you want to use the ONFI nand which is in the
 620                 * Synchronous Mode, you should change the clock as you need.
 621                 */
 622                clk_set_rate(r->clock[0], 22000000);
 623
 624        return 0;
 625
 626err_clock:
 627        dev_dbg(this->dev, "failed in finding the clocks.\n");
 628        return err;
 629}
 630
 631static int acquire_resources(struct gpmi_nand_data *this)
 632{
 633        int ret;
 634
 635        ret = acquire_register_block(this, GPMI_NAND_GPMI_REGS_ADDR_RES_NAME);
 636        if (ret)
 637                goto exit_regs;
 638
 639        ret = acquire_register_block(this, GPMI_NAND_BCH_REGS_ADDR_RES_NAME);
 640        if (ret)
 641                goto exit_regs;
 642
 643        ret = acquire_bch_irq(this, bch_irq);
 644        if (ret)
 645                goto exit_regs;
 646
 647        ret = acquire_dma_channels(this);
 648        if (ret)
 649                goto exit_regs;
 650
 651        ret = gpmi_get_clks(this);
 652        if (ret)
 653                goto exit_clock;
 654        return 0;
 655
 656exit_clock:
 657        release_dma_channels(this);
 658exit_regs:
 659        return ret;
 660}
 661
 662static void release_resources(struct gpmi_nand_data *this)
 663{
 664        release_dma_channels(this);
 665}
 666
 667static int send_page_prepare(struct gpmi_nand_data *this,
 668                        const void *source, unsigned length,
 669                        void *alt_virt, dma_addr_t alt_phys, unsigned alt_size,
 670                        const void **use_virt, dma_addr_t *use_phys)
 671{
 672        struct device *dev = this->dev;
 673
 674        if (virt_addr_valid(source)) {
 675                dma_addr_t source_phys;
 676
 677                source_phys = dma_map_single(dev, (void *)source, length,
 678                                                DMA_TO_DEVICE);
 679                if (dma_mapping_error(dev, source_phys)) {
 680                        if (alt_size < length) {
 681                                dev_err(dev, "Alternate buffer is too small\n");
 682                                return -ENOMEM;
 683                        }
 684                        goto map_failed;
 685                }
 686                *use_virt = source;
 687                *use_phys = source_phys;
 688                return 0;
 689        }
 690map_failed:
 691        /*
 692         * Copy the content of the source buffer into the alternate
 693         * buffer and set up the return values accordingly.
 694         */
 695        memcpy(alt_virt, source, length);
 696
 697        *use_virt = alt_virt;
 698        *use_phys = alt_phys;
 699        return 0;
 700}
 701
 702static void send_page_end(struct gpmi_nand_data *this,
 703                        const void *source, unsigned length,
 704                        void *alt_virt, dma_addr_t alt_phys, unsigned alt_size,
 705                        const void *used_virt, dma_addr_t used_phys)
 706{
 707        struct device *dev = this->dev;
 708        if (used_virt == source)
 709                dma_unmap_single(dev, used_phys, length, DMA_TO_DEVICE);
 710}
 711
 712static void gpmi_free_dma_buffer(struct gpmi_nand_data *this)
 713{
 714        struct device *dev = this->dev;
 715
 716        if (this->page_buffer_virt && virt_addr_valid(this->page_buffer_virt))
 717                dma_free_coherent(dev, this->page_buffer_size,
 718                                        this->page_buffer_virt,
 719                                        this->page_buffer_phys);
 720        kfree(this->cmd_buffer);
 721        kfree(this->data_buffer_dma);
 722        kfree(this->raw_buffer);
 723
 724        this->cmd_buffer        = NULL;
 725        this->data_buffer_dma   = NULL;
 726        this->raw_buffer        = NULL;
 727        this->page_buffer_virt  = NULL;
 728        this->page_buffer_size  =  0;
 729}
 730
 731/* Allocate the DMA buffers */
 732static int gpmi_alloc_dma_buffer(struct gpmi_nand_data *this)
 733{
 734        struct bch_geometry *geo = &this->bch_geometry;
 735        struct device *dev = this->dev;
 736        struct mtd_info *mtd = nand_to_mtd(&this->nand);
 737
 738        /* [1] Allocate a command buffer. PAGE_SIZE is enough. */
 739        this->cmd_buffer = kzalloc(PAGE_SIZE, GFP_DMA | GFP_KERNEL);
 740        if (this->cmd_buffer == NULL)
 741                goto error_alloc;
 742
 743        /*
 744         * [2] Allocate a read/write data buffer.
 745         *     The gpmi_alloc_dma_buffer can be called twice.
 746         *     We allocate a PAGE_SIZE length buffer if gpmi_alloc_dma_buffer
 747         *     is called before the NAND identification; and we allocate a
 748         *     buffer of the real NAND page size when the gpmi_alloc_dma_buffer
 749         *     is called after.
 750         */
 751        this->data_buffer_dma = kzalloc(mtd->writesize ?: PAGE_SIZE,
 752                                        GFP_DMA | GFP_KERNEL);
 753        if (this->data_buffer_dma == NULL)
 754                goto error_alloc;
 755
 756        /*
 757         * [3] Allocate the page buffer.
 758         *
 759         * Both the payload buffer and the auxiliary buffer must appear on
 760         * 32-bit boundaries. We presume the size of the payload buffer is a
 761         * power of two and is much larger than four, which guarantees the
 762         * auxiliary buffer will appear on a 32-bit boundary.
 763         */
 764        this->page_buffer_size = geo->payload_size + geo->auxiliary_size;
 765        this->page_buffer_virt = dma_alloc_coherent(dev, this->page_buffer_size,
 766                                        &this->page_buffer_phys, GFP_DMA);
 767        if (!this->page_buffer_virt)
 768                goto error_alloc;
 769
 770        this->raw_buffer = kzalloc(mtd->writesize + mtd->oobsize, GFP_KERNEL);
 771        if (!this->raw_buffer)
 772                goto error_alloc;
 773
 774        /* Slice up the page buffer. */
 775        this->payload_virt = this->page_buffer_virt;
 776        this->payload_phys = this->page_buffer_phys;
 777        this->auxiliary_virt = this->payload_virt + geo->payload_size;
 778        this->auxiliary_phys = this->payload_phys + geo->payload_size;
 779        return 0;
 780
 781error_alloc:
 782        gpmi_free_dma_buffer(this);
 783        return -ENOMEM;
 784}
 785
 786static void gpmi_cmd_ctrl(struct nand_chip *chip, int data, unsigned int ctrl)
 787{
 788        struct gpmi_nand_data *this = nand_get_controller_data(chip);
 789        int ret;
 790
 791        /*
 792         * Every operation begins with a command byte and a series of zero or
 793         * more address bytes. These are distinguished by either the Address
 794         * Latch Enable (ALE) or Command Latch Enable (CLE) signals being
 795         * asserted. When MTD is ready to execute the command, it will deassert
 796         * both latch enables.
 797         *
 798         * Rather than run a separate DMA operation for every single byte, we
 799         * queue them up and run a single DMA operation for the entire series
 800         * of command and data bytes. NAND_CMD_NONE means the END of the queue.
 801         */
 802        if ((ctrl & (NAND_ALE | NAND_CLE))) {
 803                if (data != NAND_CMD_NONE)
 804                        this->cmd_buffer[this->command_length++] = data;
 805                return;
 806        }
 807
 808        if (!this->command_length)
 809                return;
 810
 811        ret = gpmi_send_command(this);
 812        if (ret)
 813                dev_err(this->dev, "Chip: %u, Error %d\n",
 814                        this->current_chip, ret);
 815
 816        this->command_length = 0;
 817}
 818
 819static int gpmi_dev_ready(struct nand_chip *chip)
 820{
 821        struct gpmi_nand_data *this = nand_get_controller_data(chip);
 822
 823        return gpmi_is_ready(this, this->current_chip);
 824}
 825
 826static void gpmi_select_chip(struct nand_chip *chip, int chipnr)
 827{
 828        struct gpmi_nand_data *this = nand_get_controller_data(chip);
 829        int ret;
 830
 831        /*
 832         * For power consumption matters, disable/enable the clock each time a
 833         * die is selected/unselected.
 834         */
 835        if (this->current_chip < 0 && chipnr >= 0) {
 836                ret = gpmi_enable_clk(this);
 837                if (ret)
 838                        dev_err(this->dev, "Failed to enable the clock\n");
 839        } else if (this->current_chip >= 0 && chipnr < 0) {
 840                ret = gpmi_disable_clk(this);
 841                if (ret)
 842                        dev_err(this->dev, "Failed to disable the clock\n");
 843        }
 844
 845        /*
 846         * This driver currently supports only one NAND chip. Plus, dies share
 847         * the same configuration. So once timings have been applied on the
 848         * controller side, they will not change anymore. When the time will
 849         * come, the check on must_apply_timings will have to be dropped.
 850         */
 851        if (chipnr >= 0 && this->hw.must_apply_timings) {
 852                this->hw.must_apply_timings = false;
 853                gpmi_nfc_apply_timings(this);
 854        }
 855
 856        this->current_chip = chipnr;
 857}
 858
 859static void gpmi_read_buf(struct nand_chip *chip, uint8_t *buf, int len)
 860{
 861        struct gpmi_nand_data *this = nand_get_controller_data(chip);
 862
 863        dev_dbg(this->dev, "len is %d\n", len);
 864
 865        gpmi_read_data(this, buf, len);
 866}
 867
 868static void gpmi_write_buf(struct nand_chip *chip, const uint8_t *buf, int len)
 869{
 870        struct gpmi_nand_data *this = nand_get_controller_data(chip);
 871
 872        dev_dbg(this->dev, "len is %d\n", len);
 873
 874        gpmi_send_data(this, buf, len);
 875}
 876
 877static uint8_t gpmi_read_byte(struct nand_chip *chip)
 878{
 879        struct gpmi_nand_data *this = nand_get_controller_data(chip);
 880        uint8_t *buf = this->data_buffer_dma;
 881
 882        gpmi_read_buf(chip, buf, 1);
 883        return buf[0];
 884}
 885
 886/*
 887 * Handles block mark swapping.
 888 * It can be called in swapping the block mark, or swapping it back,
 889 * because the the operations are the same.
 890 */
 891static void block_mark_swapping(struct gpmi_nand_data *this,
 892                                void *payload, void *auxiliary)
 893{
 894        struct bch_geometry *nfc_geo = &this->bch_geometry;
 895        unsigned char *p;
 896        unsigned char *a;
 897        unsigned int  bit;
 898        unsigned char mask;
 899        unsigned char from_data;
 900        unsigned char from_oob;
 901
 902        if (!this->swap_block_mark)
 903                return;
 904
 905        /*
 906         * If control arrives here, we're swapping. Make some convenience
 907         * variables.
 908         */
 909        bit = nfc_geo->block_mark_bit_offset;
 910        p   = payload + nfc_geo->block_mark_byte_offset;
 911        a   = auxiliary;
 912
 913        /*
 914         * Get the byte from the data area that overlays the block mark. Since
 915         * the ECC engine applies its own view to the bits in the page, the
 916         * physical block mark won't (in general) appear on a byte boundary in
 917         * the data.
 918         */
 919        from_data = (p[0] >> bit) | (p[1] << (8 - bit));
 920
 921        /* Get the byte from the OOB. */
 922        from_oob = a[0];
 923
 924        /* Swap them. */
 925        a[0] = from_data;
 926
 927        mask = (0x1 << bit) - 1;
 928        p[0] = (p[0] & mask) | (from_oob << bit);
 929
 930        mask = ~0 << bit;
 931        p[1] = (p[1] & mask) | (from_oob >> (8 - bit));
 932}
 933
 934static int gpmi_ecc_read_page_data(struct nand_chip *chip,
 935                                   uint8_t *buf, int oob_required,
 936                                   int page)
 937{
 938        struct gpmi_nand_data *this = nand_get_controller_data(chip);
 939        struct bch_geometry *nfc_geo = &this->bch_geometry;
 940        struct mtd_info *mtd = nand_to_mtd(chip);
 941        dma_addr_t    payload_phys;
 942        unsigned int  i;
 943        unsigned char *status;
 944        unsigned int  max_bitflips = 0;
 945        int           ret;
 946        bool          direct = false;
 947
 948        dev_dbg(this->dev, "page number is : %d\n", page);
 949
 950        payload_phys = this->payload_phys;
 951
 952        if (virt_addr_valid(buf)) {
 953                dma_addr_t dest_phys;
 954
 955                dest_phys = dma_map_single(this->dev, buf, nfc_geo->payload_size,
 956                                           DMA_FROM_DEVICE);
 957                if (!dma_mapping_error(this->dev, dest_phys)) {
 958                        payload_phys = dest_phys;
 959                        direct = true;
 960                }
 961        }
 962
 963        /* go! */
 964        ret = gpmi_read_page(this, payload_phys, this->auxiliary_phys);
 965
 966        if (direct)
 967                dma_unmap_single(this->dev, payload_phys, nfc_geo->payload_size,
 968                                 DMA_FROM_DEVICE);
 969
 970        if (ret) {
 971                dev_err(this->dev, "Error in ECC-based read: %d\n", ret);
 972                return ret;
 973        }
 974
 975        /* Loop over status bytes, accumulating ECC status. */
 976        status = this->auxiliary_virt + nfc_geo->auxiliary_status_offset;
 977
 978        if (!direct)
 979                memcpy(buf, this->payload_virt, nfc_geo->payload_size);
 980
 981        for (i = 0; i < nfc_geo->ecc_chunk_count; i++, status++) {
 982                if ((*status == STATUS_GOOD) || (*status == STATUS_ERASED))
 983                        continue;
 984
 985                if (*status == STATUS_UNCORRECTABLE) {
 986                        int eccbits = nfc_geo->ecc_strength * nfc_geo->gf_len;
 987                        u8 *eccbuf = this->raw_buffer;
 988                        int offset, bitoffset;
 989                        int eccbytes;
 990                        int flips;
 991
 992                        /* Read ECC bytes into our internal raw_buffer */
 993                        offset = nfc_geo->metadata_size * 8;
 994                        offset += ((8 * nfc_geo->ecc_chunk_size) + eccbits) * (i + 1);
 995                        offset -= eccbits;
 996                        bitoffset = offset % 8;
 997                        eccbytes = DIV_ROUND_UP(offset + eccbits, 8);
 998                        offset /= 8;
 999                        eccbytes -= offset;
1000                        nand_change_read_column_op(chip, offset, eccbuf,
1001                                                   eccbytes, false);
1002
1003                        /*
1004                         * ECC data are not byte aligned and we may have
1005                         * in-band data in the first and last byte of
1006                         * eccbuf. Set non-eccbits to one so that
1007                         * nand_check_erased_ecc_chunk() does not count them
1008                         * as bitflips.
1009                         */
1010                        if (bitoffset)
1011                                eccbuf[0] |= GENMASK(bitoffset - 1, 0);
1012
1013                        bitoffset = (bitoffset + eccbits) % 8;
1014                        if (bitoffset)
1015                                eccbuf[eccbytes - 1] |= GENMASK(7, bitoffset);
1016
1017                        /*
1018                         * The ECC hardware has an uncorrectable ECC status
1019                         * code in case we have bitflips in an erased page. As
1020                         * nothing was written into this subpage the ECC is
1021                         * obviously wrong and we can not trust it. We assume
1022                         * at this point that we are reading an erased page and
1023                         * try to correct the bitflips in buffer up to
1024                         * ecc_strength bitflips. If this is a page with random
1025                         * data, we exceed this number of bitflips and have a
1026                         * ECC failure. Otherwise we use the corrected buffer.
1027                         */
1028                        if (i == 0) {
1029                                /* The first block includes metadata */
1030                                flips = nand_check_erased_ecc_chunk(
1031                                                buf + i * nfc_geo->ecc_chunk_size,
1032                                                nfc_geo->ecc_chunk_size,
1033                                                eccbuf, eccbytes,
1034                                                this->auxiliary_virt,
1035                                                nfc_geo->metadata_size,
1036                                                nfc_geo->ecc_strength);
1037                        } else {
1038                                flips = nand_check_erased_ecc_chunk(
1039                                                buf + i * nfc_geo->ecc_chunk_size,
1040                                                nfc_geo->ecc_chunk_size,
1041                                                eccbuf, eccbytes,
1042                                                NULL, 0,
1043                                                nfc_geo->ecc_strength);
1044                        }
1045
1046                        if (flips > 0) {
1047                                max_bitflips = max_t(unsigned int, max_bitflips,
1048                                                     flips);
1049                                mtd->ecc_stats.corrected += flips;
1050                                continue;
1051                        }
1052
1053                        mtd->ecc_stats.failed++;
1054                        continue;
1055                }
1056
1057                mtd->ecc_stats.corrected += *status;
1058                max_bitflips = max_t(unsigned int, max_bitflips, *status);
1059        }
1060
1061        /* handle the block mark swapping */
1062        block_mark_swapping(this, buf, this->auxiliary_virt);
1063
1064        if (oob_required) {
1065                /*
1066                 * It's time to deliver the OOB bytes. See gpmi_ecc_read_oob()
1067                 * for details about our policy for delivering the OOB.
1068                 *
1069                 * We fill the caller's buffer with set bits, and then copy the
1070                 * block mark to th caller's buffer. Note that, if block mark
1071                 * swapping was necessary, it has already been done, so we can
1072                 * rely on the first byte of the auxiliary buffer to contain
1073                 * the block mark.
1074                 */
1075                memset(chip->oob_poi, ~0, mtd->oobsize);
1076                chip->oob_poi[0] = ((uint8_t *)this->auxiliary_virt)[0];
1077        }
1078
1079        return max_bitflips;
1080}
1081
1082static int gpmi_ecc_read_page(struct nand_chip *chip, uint8_t *buf,
1083                              int oob_required, int page)
1084{
1085        nand_read_page_op(chip, page, 0, NULL, 0);
1086
1087        return gpmi_ecc_read_page_data(chip, buf, oob_required, page);
1088}
1089
1090/* Fake a virtual small page for the subpage read */
1091static int gpmi_ecc_read_subpage(struct nand_chip *chip, uint32_t offs,
1092                                 uint32_t len, uint8_t *buf, int page)
1093{
1094        struct gpmi_nand_data *this = nand_get_controller_data(chip);
1095        void __iomem *bch_regs = this->resources.bch_regs;
1096        struct bch_geometry old_geo = this->bch_geometry;
1097        struct bch_geometry *geo = &this->bch_geometry;
1098        int size = chip->ecc.size; /* ECC chunk size */
1099        int meta, n, page_size;
1100        u32 r1_old, r2_old, r1_new, r2_new;
1101        unsigned int max_bitflips;
1102        int first, last, marker_pos;
1103        int ecc_parity_size;
1104        int col = 0;
1105        int old_swap_block_mark = this->swap_block_mark;
1106
1107        /* The size of ECC parity */
1108        ecc_parity_size = geo->gf_len * geo->ecc_strength / 8;
1109
1110        /* Align it with the chunk size */
1111        first = offs / size;
1112        last = (offs + len - 1) / size;
1113
1114        if (this->swap_block_mark) {
1115                /*
1116                 * Find the chunk which contains the Block Marker.
1117                 * If this chunk is in the range of [first, last],
1118                 * we have to read out the whole page.
1119                 * Why? since we had swapped the data at the position of Block
1120                 * Marker to the metadata which is bound with the chunk 0.
1121                 */
1122                marker_pos = geo->block_mark_byte_offset / size;
1123                if (last >= marker_pos && first <= marker_pos) {
1124                        dev_dbg(this->dev,
1125                                "page:%d, first:%d, last:%d, marker at:%d\n",
1126                                page, first, last, marker_pos);
1127                        return gpmi_ecc_read_page(chip, buf, 0, page);
1128                }
1129        }
1130
1131        meta = geo->metadata_size;
1132        if (first) {
1133                col = meta + (size + ecc_parity_size) * first;
1134                meta = 0;
1135                buf = buf + first * size;
1136        }
1137
1138        nand_read_page_op(chip, page, col, NULL, 0);
1139
1140        /* Save the old environment */
1141        r1_old = r1_new = readl(bch_regs + HW_BCH_FLASH0LAYOUT0);
1142        r2_old = r2_new = readl(bch_regs + HW_BCH_FLASH0LAYOUT1);
1143
1144        /* change the BCH registers and bch_geometry{} */
1145        n = last - first + 1;
1146        page_size = meta + (size + ecc_parity_size) * n;
1147
1148        r1_new &= ~(BM_BCH_FLASH0LAYOUT0_NBLOCKS |
1149                        BM_BCH_FLASH0LAYOUT0_META_SIZE);
1150        r1_new |= BF_BCH_FLASH0LAYOUT0_NBLOCKS(n - 1)
1151                        | BF_BCH_FLASH0LAYOUT0_META_SIZE(meta);
1152        writel(r1_new, bch_regs + HW_BCH_FLASH0LAYOUT0);
1153
1154        r2_new &= ~BM_BCH_FLASH0LAYOUT1_PAGE_SIZE;
1155        r2_new |= BF_BCH_FLASH0LAYOUT1_PAGE_SIZE(page_size);
1156        writel(r2_new, bch_regs + HW_BCH_FLASH0LAYOUT1);
1157
1158        geo->ecc_chunk_count = n;
1159        geo->payload_size = n * size;
1160        geo->page_size = page_size;
1161        geo->auxiliary_status_offset = ALIGN(meta, 4);
1162
1163        dev_dbg(this->dev, "page:%d(%d:%d)%d, chunk:(%d:%d), BCH PG size:%d\n",
1164                page, offs, len, col, first, n, page_size);
1165
1166        /* Read the subpage now */
1167        this->swap_block_mark = false;
1168        max_bitflips = gpmi_ecc_read_page_data(chip, buf, 0, page);
1169
1170        /* Restore */
1171        writel(r1_old, bch_regs + HW_BCH_FLASH0LAYOUT0);
1172        writel(r2_old, bch_regs + HW_BCH_FLASH0LAYOUT1);
1173        this->bch_geometry = old_geo;
1174        this->swap_block_mark = old_swap_block_mark;
1175
1176        return max_bitflips;
1177}
1178
1179static int gpmi_ecc_write_page(struct nand_chip *chip, const uint8_t *buf,
1180                               int oob_required, int page)
1181{
1182        struct mtd_info *mtd = nand_to_mtd(chip);
1183        struct gpmi_nand_data *this = nand_get_controller_data(chip);
1184        struct bch_geometry *nfc_geo = &this->bch_geometry;
1185        const void *payload_virt;
1186        dma_addr_t payload_phys;
1187        const void *auxiliary_virt;
1188        dma_addr_t auxiliary_phys;
1189        int        ret;
1190
1191        dev_dbg(this->dev, "ecc write page.\n");
1192
1193        nand_prog_page_begin_op(chip, page, 0, NULL, 0);
1194
1195        if (this->swap_block_mark) {
1196                /*
1197                 * If control arrives here, we're doing block mark swapping.
1198                 * Since we can't modify the caller's buffers, we must copy them
1199                 * into our own.
1200                 */
1201                memcpy(this->payload_virt, buf, mtd->writesize);
1202                payload_virt = this->payload_virt;
1203                payload_phys = this->payload_phys;
1204
1205                memcpy(this->auxiliary_virt, chip->oob_poi,
1206                                nfc_geo->auxiliary_size);
1207                auxiliary_virt = this->auxiliary_virt;
1208                auxiliary_phys = this->auxiliary_phys;
1209
1210                /* Handle block mark swapping. */
1211                block_mark_swapping(this,
1212                                (void *)payload_virt, (void *)auxiliary_virt);
1213        } else {
1214                /*
1215                 * If control arrives here, we're not doing block mark swapping,
1216                 * so we can to try and use the caller's buffers.
1217                 */
1218                ret = send_page_prepare(this,
1219                                buf, mtd->writesize,
1220                                this->payload_virt, this->payload_phys,
1221                                nfc_geo->payload_size,
1222                                &payload_virt, &payload_phys);
1223                if (ret) {
1224                        dev_err(this->dev, "Inadequate payload DMA buffer\n");
1225                        return 0;
1226                }
1227
1228                ret = send_page_prepare(this,
1229                                chip->oob_poi, mtd->oobsize,
1230                                this->auxiliary_virt, this->auxiliary_phys,
1231                                nfc_geo->auxiliary_size,
1232                                &auxiliary_virt, &auxiliary_phys);
1233                if (ret) {
1234                        dev_err(this->dev, "Inadequate auxiliary DMA buffer\n");
1235                        goto exit_auxiliary;
1236                }
1237        }
1238
1239        /* Ask the NFC. */
1240        ret = gpmi_send_page(this, payload_phys, auxiliary_phys);
1241        if (ret)
1242                dev_err(this->dev, "Error in ECC-based write: %d\n", ret);
1243
1244        if (!this->swap_block_mark) {
1245                send_page_end(this, chip->oob_poi, mtd->oobsize,
1246                                this->auxiliary_virt, this->auxiliary_phys,
1247                                nfc_geo->auxiliary_size,
1248                                auxiliary_virt, auxiliary_phys);
1249exit_auxiliary:
1250                send_page_end(this, buf, mtd->writesize,
1251                                this->payload_virt, this->payload_phys,
1252                                nfc_geo->payload_size,
1253                                payload_virt, payload_phys);
1254        }
1255
1256        if (ret)
1257                return ret;
1258
1259        return nand_prog_page_end_op(chip);
1260}
1261
1262/*
1263 * There are several places in this driver where we have to handle the OOB and
1264 * block marks. This is the function where things are the most complicated, so
1265 * this is where we try to explain it all. All the other places refer back to
1266 * here.
1267 *
1268 * These are the rules, in order of decreasing importance:
1269 *
1270 * 1) Nothing the caller does can be allowed to imperil the block mark.
1271 *
1272 * 2) In read operations, the first byte of the OOB we return must reflect the
1273 *    true state of the block mark, no matter where that block mark appears in
1274 *    the physical page.
1275 *
1276 * 3) ECC-based read operations return an OOB full of set bits (since we never
1277 *    allow ECC-based writes to the OOB, it doesn't matter what ECC-based reads
1278 *    return).
1279 *
1280 * 4) "Raw" read operations return a direct view of the physical bytes in the
1281 *    page, using the conventional definition of which bytes are data and which
1282 *    are OOB. This gives the caller a way to see the actual, physical bytes
1283 *    in the page, without the distortions applied by our ECC engine.
1284 *
1285 *
1286 * What we do for this specific read operation depends on two questions:
1287 *
1288 * 1) Are we doing a "raw" read, or an ECC-based read?
1289 *
1290 * 2) Are we using block mark swapping or transcription?
1291 *
1292 * There are four cases, illustrated by the following Karnaugh map:
1293 *
1294 *                    |           Raw           |         ECC-based       |
1295 *       -------------+-------------------------+-------------------------+
1296 *                    | Read the conventional   |                         |
1297 *                    | OOB at the end of the   |                         |
1298 *       Swapping     | page and return it. It  |                         |
1299 *                    | contains exactly what   |                         |
1300 *                    | we want.                | Read the block mark and |
1301 *       -------------+-------------------------+ return it in a buffer   |
1302 *                    | Read the conventional   | full of set bits.       |
1303 *                    | OOB at the end of the   |                         |
1304 *                    | page and also the block |                         |
1305 *       Transcribing | mark in the metadata.   |                         |
1306 *                    | Copy the block mark     |                         |
1307 *                    | into the first byte of  |                         |
1308 *                    | the OOB.                |                         |
1309 *       -------------+-------------------------+-------------------------+
1310 *
1311 * Note that we break rule #4 in the Transcribing/Raw case because we're not
1312 * giving an accurate view of the actual, physical bytes in the page (we're
1313 * overwriting the block mark). That's OK because it's more important to follow
1314 * rule #2.
1315 *
1316 * It turns out that knowing whether we want an "ECC-based" or "raw" read is not
1317 * easy. When reading a page, for example, the NAND Flash MTD code calls our
1318 * ecc.read_page or ecc.read_page_raw function. Thus, the fact that MTD wants an
1319 * ECC-based or raw view of the page is implicit in which function it calls
1320 * (there is a similar pair of ECC-based/raw functions for writing).
1321 */
1322static int gpmi_ecc_read_oob(struct nand_chip *chip, int page)
1323{
1324        struct mtd_info *mtd = nand_to_mtd(chip);
1325        struct gpmi_nand_data *this = nand_get_controller_data(chip);
1326
1327        dev_dbg(this->dev, "page number is %d\n", page);
1328        /* clear the OOB buffer */
1329        memset(chip->oob_poi, ~0, mtd->oobsize);
1330
1331        /* Read out the conventional OOB. */
1332        nand_read_page_op(chip, page, mtd->writesize, NULL, 0);
1333        chip->legacy.read_buf(chip, chip->oob_poi, mtd->oobsize);
1334
1335        /*
1336         * Now, we want to make sure the block mark is correct. In the
1337         * non-transcribing case (!GPMI_IS_MX23()), we already have it.
1338         * Otherwise, we need to explicitly read it.
1339         */
1340        if (GPMI_IS_MX23(this)) {
1341                /* Read the block mark into the first byte of the OOB buffer. */
1342                nand_read_page_op(chip, page, 0, NULL, 0);
1343                chip->oob_poi[0] = chip->legacy.read_byte(chip);
1344        }
1345
1346        return 0;
1347}
1348
1349static int gpmi_ecc_write_oob(struct nand_chip *chip, int page)
1350{
1351        struct mtd_info *mtd = nand_to_mtd(chip);
1352        struct mtd_oob_region of = { };
1353
1354        /* Do we have available oob area? */
1355        mtd_ooblayout_free(mtd, 0, &of);
1356        if (!of.length)
1357                return -EPERM;
1358
1359        if (!nand_is_slc(chip))
1360                return -EPERM;
1361
1362        return nand_prog_page_op(chip, page, mtd->writesize + of.offset,
1363                                 chip->oob_poi + of.offset, of.length);
1364}
1365
1366/*
1367 * This function reads a NAND page without involving the ECC engine (no HW
1368 * ECC correction).
1369 * The tricky part in the GPMI/BCH controller is that it stores ECC bits
1370 * inline (interleaved with payload DATA), and do not align data chunk on
1371 * byte boundaries.
1372 * We thus need to take care moving the payload data and ECC bits stored in the
1373 * page into the provided buffers, which is why we're using gpmi_copy_bits.
1374 *
1375 * See set_geometry_by_ecc_info inline comments to have a full description
1376 * of the layout used by the GPMI controller.
1377 */
1378static int gpmi_ecc_read_page_raw(struct nand_chip *chip, uint8_t *buf,
1379                                  int oob_required, int page)
1380{
1381        struct mtd_info *mtd = nand_to_mtd(chip);
1382        struct gpmi_nand_data *this = nand_get_controller_data(chip);
1383        struct bch_geometry *nfc_geo = &this->bch_geometry;
1384        int eccsize = nfc_geo->ecc_chunk_size;
1385        int eccbits = nfc_geo->ecc_strength * nfc_geo->gf_len;
1386        u8 *tmp_buf = this->raw_buffer;
1387        size_t src_bit_off;
1388        size_t oob_bit_off;
1389        size_t oob_byte_off;
1390        uint8_t *oob = chip->oob_poi;
1391        int step;
1392
1393        nand_read_page_op(chip, page, 0, tmp_buf,
1394                          mtd->writesize + mtd->oobsize);
1395
1396        /*
1397         * If required, swap the bad block marker and the data stored in the
1398         * metadata section, so that we don't wrongly consider a block as bad.
1399         *
1400         * See the layout description for a detailed explanation on why this
1401         * is needed.
1402         */
1403        if (this->swap_block_mark)
1404                swap(tmp_buf[0], tmp_buf[mtd->writesize]);
1405
1406        /*
1407         * Copy the metadata section into the oob buffer (this section is
1408         * guaranteed to be aligned on a byte boundary).
1409         */
1410        if (oob_required)
1411                memcpy(oob, tmp_buf, nfc_geo->metadata_size);
1412
1413        oob_bit_off = nfc_geo->metadata_size * 8;
1414        src_bit_off = oob_bit_off;
1415
1416        /* Extract interleaved payload data and ECC bits */
1417        for (step = 0; step < nfc_geo->ecc_chunk_count; step++) {
1418                if (buf)
1419                        gpmi_copy_bits(buf, step * eccsize * 8,
1420                                       tmp_buf, src_bit_off,
1421                                       eccsize * 8);
1422                src_bit_off += eccsize * 8;
1423
1424                /* Align last ECC block to align a byte boundary */
1425                if (step == nfc_geo->ecc_chunk_count - 1 &&
1426                    (oob_bit_off + eccbits) % 8)
1427                        eccbits += 8 - ((oob_bit_off + eccbits) % 8);
1428
1429                if (oob_required)
1430                        gpmi_copy_bits(oob, oob_bit_off,
1431                                       tmp_buf, src_bit_off,
1432                                       eccbits);
1433
1434                src_bit_off += eccbits;
1435                oob_bit_off += eccbits;
1436        }
1437
1438        if (oob_required) {
1439                oob_byte_off = oob_bit_off / 8;
1440
1441                if (oob_byte_off < mtd->oobsize)
1442                        memcpy(oob + oob_byte_off,
1443                               tmp_buf + mtd->writesize + oob_byte_off,
1444                               mtd->oobsize - oob_byte_off);
1445        }
1446
1447        return 0;
1448}
1449
1450/*
1451 * This function writes a NAND page without involving the ECC engine (no HW
1452 * ECC generation).
1453 * The tricky part in the GPMI/BCH controller is that it stores ECC bits
1454 * inline (interleaved with payload DATA), and do not align data chunk on
1455 * byte boundaries.
1456 * We thus need to take care moving the OOB area at the right place in the
1457 * final page, which is why we're using gpmi_copy_bits.
1458 *
1459 * See set_geometry_by_ecc_info inline comments to have a full description
1460 * of the layout used by the GPMI controller.
1461 */
1462static int gpmi_ecc_write_page_raw(struct nand_chip *chip, const uint8_t *buf,
1463                                   int oob_required, int page)
1464{
1465        struct mtd_info *mtd = nand_to_mtd(chip);
1466        struct gpmi_nand_data *this = nand_get_controller_data(chip);
1467        struct bch_geometry *nfc_geo = &this->bch_geometry;
1468        int eccsize = nfc_geo->ecc_chunk_size;
1469        int eccbits = nfc_geo->ecc_strength * nfc_geo->gf_len;
1470        u8 *tmp_buf = this->raw_buffer;
1471        uint8_t *oob = chip->oob_poi;
1472        size_t dst_bit_off;
1473        size_t oob_bit_off;
1474        size_t oob_byte_off;
1475        int step;
1476
1477        /*
1478         * Initialize all bits to 1 in case we don't have a buffer for the
1479         * payload or oob data in order to leave unspecified bits of data
1480         * to their initial state.
1481         */
1482        if (!buf || !oob_required)
1483                memset(tmp_buf, 0xff, mtd->writesize + mtd->oobsize);
1484
1485        /*
1486         * First copy the metadata section (stored in oob buffer) at the
1487         * beginning of the page, as imposed by the GPMI layout.
1488         */
1489        memcpy(tmp_buf, oob, nfc_geo->metadata_size);
1490        oob_bit_off = nfc_geo->metadata_size * 8;
1491        dst_bit_off = oob_bit_off;
1492
1493        /* Interleave payload data and ECC bits */
1494        for (step = 0; step < nfc_geo->ecc_chunk_count; step++) {
1495                if (buf)
1496                        gpmi_copy_bits(tmp_buf, dst_bit_off,
1497                                       buf, step * eccsize * 8, eccsize * 8);
1498                dst_bit_off += eccsize * 8;
1499
1500                /* Align last ECC block to align a byte boundary */
1501                if (step == nfc_geo->ecc_chunk_count - 1 &&
1502                    (oob_bit_off + eccbits) % 8)
1503                        eccbits += 8 - ((oob_bit_off + eccbits) % 8);
1504
1505                if (oob_required)
1506                        gpmi_copy_bits(tmp_buf, dst_bit_off,
1507                                       oob, oob_bit_off, eccbits);
1508
1509                dst_bit_off += eccbits;
1510                oob_bit_off += eccbits;
1511        }
1512
1513        oob_byte_off = oob_bit_off / 8;
1514
1515        if (oob_required && oob_byte_off < mtd->oobsize)
1516                memcpy(tmp_buf + mtd->writesize + oob_byte_off,
1517                       oob + oob_byte_off, mtd->oobsize - oob_byte_off);
1518
1519        /*
1520         * If required, swap the bad block marker and the first byte of the
1521         * metadata section, so that we don't modify the bad block marker.
1522         *
1523         * See the layout description for a detailed explanation on why this
1524         * is needed.
1525         */
1526        if (this->swap_block_mark)
1527                swap(tmp_buf[0], tmp_buf[mtd->writesize]);
1528
1529        return nand_prog_page_op(chip, page, 0, tmp_buf,
1530                                 mtd->writesize + mtd->oobsize);
1531}
1532
1533static int gpmi_ecc_read_oob_raw(struct nand_chip *chip, int page)
1534{
1535        return gpmi_ecc_read_page_raw(chip, NULL, 1, page);
1536}
1537
1538static int gpmi_ecc_write_oob_raw(struct nand_chip *chip, int page)
1539{
1540        return gpmi_ecc_write_page_raw(chip, NULL, 1, page);
1541}
1542
1543static int gpmi_block_markbad(struct nand_chip *chip, loff_t ofs)
1544{
1545        struct mtd_info *mtd = nand_to_mtd(chip);
1546        struct gpmi_nand_data *this = nand_get_controller_data(chip);
1547        int ret = 0;
1548        uint8_t *block_mark;
1549        int column, page, chipnr;
1550
1551        chipnr = (int)(ofs >> chip->chip_shift);
1552        chip->select_chip(chip, chipnr);
1553
1554        column = !GPMI_IS_MX23(this) ? mtd->writesize : 0;
1555
1556        /* Write the block mark. */
1557        block_mark = this->data_buffer_dma;
1558        block_mark[0] = 0; /* bad block marker */
1559
1560        /* Shift to get page */
1561        page = (int)(ofs >> chip->page_shift);
1562
1563        ret = nand_prog_page_op(chip, page, column, block_mark, 1);
1564
1565        chip->select_chip(chip, -1);
1566
1567        return ret;
1568}
1569
1570static int nand_boot_set_geometry(struct gpmi_nand_data *this)
1571{
1572        struct boot_rom_geometry *geometry = &this->rom_geometry;
1573
1574        /*
1575         * Set the boot block stride size.
1576         *
1577         * In principle, we should be reading this from the OTP bits, since
1578         * that's where the ROM is going to get it. In fact, we don't have any
1579         * way to read the OTP bits, so we go with the default and hope for the
1580         * best.
1581         */
1582        geometry->stride_size_in_pages = 64;
1583
1584        /*
1585         * Set the search area stride exponent.
1586         *
1587         * In principle, we should be reading this from the OTP bits, since
1588         * that's where the ROM is going to get it. In fact, we don't have any
1589         * way to read the OTP bits, so we go with the default and hope for the
1590         * best.
1591         */
1592        geometry->search_area_stride_exponent = 2;
1593        return 0;
1594}
1595
1596static const char  *fingerprint = "STMP";
1597static int mx23_check_transcription_stamp(struct gpmi_nand_data *this)
1598{
1599        struct boot_rom_geometry *rom_geo = &this->rom_geometry;
1600        struct device *dev = this->dev;
1601        struct nand_chip *chip = &this->nand;
1602        unsigned int search_area_size_in_strides;
1603        unsigned int stride;
1604        unsigned int page;
1605        uint8_t *buffer = chip->data_buf;
1606        int saved_chip_number;
1607        int found_an_ncb_fingerprint = false;
1608
1609        /* Compute the number of strides in a search area. */
1610        search_area_size_in_strides = 1 << rom_geo->search_area_stride_exponent;
1611
1612        saved_chip_number = this->current_chip;
1613        chip->select_chip(chip, 0);
1614
1615        /*
1616         * Loop through the first search area, looking for the NCB fingerprint.
1617         */
1618        dev_dbg(dev, "Scanning for an NCB fingerprint...\n");
1619
1620        for (stride = 0; stride < search_area_size_in_strides; stride++) {
1621                /* Compute the page addresses. */
1622                page = stride * rom_geo->stride_size_in_pages;
1623
1624                dev_dbg(dev, "Looking for a fingerprint in page 0x%x\n", page);
1625
1626                /*
1627                 * Read the NCB fingerprint. The fingerprint is four bytes long
1628                 * and starts in the 12th byte of the page.
1629                 */
1630                nand_read_page_op(chip, page, 12, NULL, 0);
1631                chip->legacy.read_buf(chip, buffer, strlen(fingerprint));
1632
1633                /* Look for the fingerprint. */
1634                if (!memcmp(buffer, fingerprint, strlen(fingerprint))) {
1635                        found_an_ncb_fingerprint = true;
1636                        break;
1637                }
1638
1639        }
1640
1641        chip->select_chip(chip, saved_chip_number);
1642
1643        if (found_an_ncb_fingerprint)
1644                dev_dbg(dev, "\tFound a fingerprint\n");
1645        else
1646                dev_dbg(dev, "\tNo fingerprint found\n");
1647        return found_an_ncb_fingerprint;
1648}
1649
1650/* Writes a transcription stamp. */
1651static int mx23_write_transcription_stamp(struct gpmi_nand_data *this)
1652{
1653        struct device *dev = this->dev;
1654        struct boot_rom_geometry *rom_geo = &this->rom_geometry;
1655        struct nand_chip *chip = &this->nand;
1656        struct mtd_info *mtd = nand_to_mtd(chip);
1657        unsigned int block_size_in_pages;
1658        unsigned int search_area_size_in_strides;
1659        unsigned int search_area_size_in_pages;
1660        unsigned int search_area_size_in_blocks;
1661        unsigned int block;
1662        unsigned int stride;
1663        unsigned int page;
1664        uint8_t      *buffer = chip->data_buf;
1665        int saved_chip_number;
1666        int status;
1667
1668        /* Compute the search area geometry. */
1669        block_size_in_pages = mtd->erasesize / mtd->writesize;
1670        search_area_size_in_strides = 1 << rom_geo->search_area_stride_exponent;
1671        search_area_size_in_pages = search_area_size_in_strides *
1672                                        rom_geo->stride_size_in_pages;
1673        search_area_size_in_blocks =
1674                  (search_area_size_in_pages + (block_size_in_pages - 1)) /
1675                                    block_size_in_pages;
1676
1677        dev_dbg(dev, "Search Area Geometry :\n");
1678        dev_dbg(dev, "\tin Blocks : %u\n", search_area_size_in_blocks);
1679        dev_dbg(dev, "\tin Strides: %u\n", search_area_size_in_strides);
1680        dev_dbg(dev, "\tin Pages  : %u\n", search_area_size_in_pages);
1681
1682        /* Select chip 0. */
1683        saved_chip_number = this->current_chip;
1684        chip->select_chip(chip, 0);
1685
1686        /* Loop over blocks in the first search area, erasing them. */
1687        dev_dbg(dev, "Erasing the search area...\n");
1688
1689        for (block = 0; block < search_area_size_in_blocks; block++) {
1690                /* Erase this block. */
1691                dev_dbg(dev, "\tErasing block 0x%x\n", block);
1692                status = nand_erase_op(chip, block);
1693                if (status)
1694                        dev_err(dev, "[%s] Erase failed.\n", __func__);
1695        }
1696
1697        /* Write the NCB fingerprint into the page buffer. */
1698        memset(buffer, ~0, mtd->writesize);
1699        memcpy(buffer + 12, fingerprint, strlen(fingerprint));
1700
1701        /* Loop through the first search area, writing NCB fingerprints. */
1702        dev_dbg(dev, "Writing NCB fingerprints...\n");
1703        for (stride = 0; stride < search_area_size_in_strides; stride++) {
1704                /* Compute the page addresses. */
1705                page = stride * rom_geo->stride_size_in_pages;
1706
1707                /* Write the first page of the current stride. */
1708                dev_dbg(dev, "Writing an NCB fingerprint in page 0x%x\n", page);
1709
1710                status = chip->ecc.write_page_raw(chip, buffer, 0, page);
1711                if (status)
1712                        dev_err(dev, "[%s] Write failed.\n", __func__);
1713        }
1714
1715        /* Deselect chip 0. */
1716        chip->select_chip(chip, saved_chip_number);
1717        return 0;
1718}
1719
1720static int mx23_boot_init(struct gpmi_nand_data  *this)
1721{
1722        struct device *dev = this->dev;
1723        struct nand_chip *chip = &this->nand;
1724        struct mtd_info *mtd = nand_to_mtd(chip);
1725        unsigned int block_count;
1726        unsigned int block;
1727        int     chipnr;
1728        int     page;
1729        loff_t  byte;
1730        uint8_t block_mark;
1731        int     ret = 0;
1732
1733        /*
1734         * If control arrives here, we can't use block mark swapping, which
1735         * means we're forced to use transcription. First, scan for the
1736         * transcription stamp. If we find it, then we don't have to do
1737         * anything -- the block marks are already transcribed.
1738         */
1739        if (mx23_check_transcription_stamp(this))
1740                return 0;
1741
1742        /*
1743         * If control arrives here, we couldn't find a transcription stamp, so
1744         * so we presume the block marks are in the conventional location.
1745         */
1746        dev_dbg(dev, "Transcribing bad block marks...\n");
1747
1748        /* Compute the number of blocks in the entire medium. */
1749        block_count = chip->chipsize >> chip->phys_erase_shift;
1750
1751        /*
1752         * Loop over all the blocks in the medium, transcribing block marks as
1753         * we go.
1754         */
1755        for (block = 0; block < block_count; block++) {
1756                /*
1757                 * Compute the chip, page and byte addresses for this block's
1758                 * conventional mark.
1759                 */
1760                chipnr = block >> (chip->chip_shift - chip->phys_erase_shift);
1761                page = block << (chip->phys_erase_shift - chip->page_shift);
1762                byte = block <<  chip->phys_erase_shift;
1763
1764                /* Send the command to read the conventional block mark. */
1765                chip->select_chip(chip, chipnr);
1766                nand_read_page_op(chip, page, mtd->writesize, NULL, 0);
1767                block_mark = chip->legacy.read_byte(chip);
1768                chip->select_chip(chip, -1);
1769
1770                /*
1771                 * Check if the block is marked bad. If so, we need to mark it
1772                 * again, but this time the result will be a mark in the
1773                 * location where we transcribe block marks.
1774                 */
1775                if (block_mark != 0xff) {
1776                        dev_dbg(dev, "Transcribing mark in block %u\n", block);
1777                        ret = chip->legacy.block_markbad(chip, byte);
1778                        if (ret)
1779                                dev_err(dev,
1780                                        "Failed to mark block bad with ret %d\n",
1781                                        ret);
1782                }
1783        }
1784
1785        /* Write the stamp that indicates we've transcribed the block marks. */
1786        mx23_write_transcription_stamp(this);
1787        return 0;
1788}
1789
1790static int nand_boot_init(struct gpmi_nand_data  *this)
1791{
1792        nand_boot_set_geometry(this);
1793
1794        /* This is ROM arch-specific initilization before the BBT scanning. */
1795        if (GPMI_IS_MX23(this))
1796                return mx23_boot_init(this);
1797        return 0;
1798}
1799
1800static int gpmi_set_geometry(struct gpmi_nand_data *this)
1801{
1802        int ret;
1803
1804        /* Free the temporary DMA memory for reading ID. */
1805        gpmi_free_dma_buffer(this);
1806
1807        /* Set up the NFC geometry which is used by BCH. */
1808        ret = bch_set_geometry(this);
1809        if (ret) {
1810                dev_err(this->dev, "Error setting BCH geometry : %d\n", ret);
1811                return ret;
1812        }
1813
1814        /* Alloc the new DMA buffers according to the pagesize and oobsize */
1815        return gpmi_alloc_dma_buffer(this);
1816}
1817
1818static int gpmi_init_last(struct gpmi_nand_data *this)
1819{
1820        struct nand_chip *chip = &this->nand;
1821        struct mtd_info *mtd = nand_to_mtd(chip);
1822        struct nand_ecc_ctrl *ecc = &chip->ecc;
1823        struct bch_geometry *bch_geo = &this->bch_geometry;
1824        int ret;
1825
1826        /* Set up the medium geometry */
1827        ret = gpmi_set_geometry(this);
1828        if (ret)
1829                return ret;
1830
1831        /* Init the nand_ecc_ctrl{} */
1832        ecc->read_page  = gpmi_ecc_read_page;
1833        ecc->write_page = gpmi_ecc_write_page;
1834        ecc->read_oob   = gpmi_ecc_read_oob;
1835        ecc->write_oob  = gpmi_ecc_write_oob;
1836        ecc->read_page_raw = gpmi_ecc_read_page_raw;
1837        ecc->write_page_raw = gpmi_ecc_write_page_raw;
1838        ecc->read_oob_raw = gpmi_ecc_read_oob_raw;
1839        ecc->write_oob_raw = gpmi_ecc_write_oob_raw;
1840        ecc->mode       = NAND_ECC_HW;
1841        ecc->size       = bch_geo->ecc_chunk_size;
1842        ecc->strength   = bch_geo->ecc_strength;
1843        mtd_set_ooblayout(mtd, &gpmi_ooblayout_ops);
1844
1845        /*
1846         * We only enable the subpage read when:
1847         *  (1) the chip is imx6, and
1848         *  (2) the size of the ECC parity is byte aligned.
1849         */
1850        if (GPMI_IS_MX6(this) &&
1851                ((bch_geo->gf_len * bch_geo->ecc_strength) % 8) == 0) {
1852                ecc->read_subpage = gpmi_ecc_read_subpage;
1853                chip->options |= NAND_SUBPAGE_READ;
1854        }
1855
1856        return 0;
1857}
1858
1859static int gpmi_nand_attach_chip(struct nand_chip *chip)
1860{
1861        struct gpmi_nand_data *this = nand_get_controller_data(chip);
1862        int ret;
1863
1864        if (chip->bbt_options & NAND_BBT_USE_FLASH) {
1865                chip->bbt_options |= NAND_BBT_NO_OOB;
1866
1867                if (of_property_read_bool(this->dev->of_node,
1868                                          "fsl,no-blockmark-swap"))
1869                        this->swap_block_mark = false;
1870        }
1871        dev_dbg(this->dev, "Blockmark swapping %sabled\n",
1872                this->swap_block_mark ? "en" : "dis");
1873
1874        ret = gpmi_init_last(this);
1875        if (ret)
1876                return ret;
1877
1878        chip->options |= NAND_SKIP_BBTSCAN;
1879
1880        return 0;
1881}
1882
1883static const struct nand_controller_ops gpmi_nand_controller_ops = {
1884        .attach_chip = gpmi_nand_attach_chip,
1885};
1886
1887static int gpmi_nand_init(struct gpmi_nand_data *this)
1888{
1889        struct nand_chip *chip = &this->nand;
1890        struct mtd_info  *mtd = nand_to_mtd(chip);
1891        int ret;
1892
1893        /* init current chip */
1894        this->current_chip      = -1;
1895
1896        /* init the MTD data structures */
1897        mtd->name               = "gpmi-nand";
1898        mtd->dev.parent         = this->dev;
1899
1900        /* init the nand_chip{}, we don't support a 16-bit NAND Flash bus. */
1901        nand_set_controller_data(chip, this);
1902        nand_set_flash_node(chip, this->pdev->dev.of_node);
1903        chip->select_chip       = gpmi_select_chip;
1904        chip->setup_data_interface = gpmi_setup_data_interface;
1905        chip->legacy.cmd_ctrl   = gpmi_cmd_ctrl;
1906        chip->legacy.dev_ready  = gpmi_dev_ready;
1907        chip->legacy.read_byte  = gpmi_read_byte;
1908        chip->legacy.read_buf   = gpmi_read_buf;
1909        chip->legacy.write_buf  = gpmi_write_buf;
1910        chip->badblock_pattern  = &gpmi_bbt_descr;
1911        chip->legacy.block_markbad = gpmi_block_markbad;
1912        chip->options           |= NAND_NO_SUBPAGE_WRITE;
1913
1914        /* Set up swap_block_mark, must be set before the gpmi_set_geometry() */
1915        this->swap_block_mark = !GPMI_IS_MX23(this);
1916
1917        /*
1918         * Allocate a temporary DMA buffer for reading ID in the
1919         * nand_scan_ident().
1920         */
1921        this->bch_geometry.payload_size = 1024;
1922        this->bch_geometry.auxiliary_size = 128;
1923        ret = gpmi_alloc_dma_buffer(this);
1924        if (ret)
1925                goto err_out;
1926
1927        chip->dummy_controller.ops = &gpmi_nand_controller_ops;
1928        ret = nand_scan(chip, GPMI_IS_MX6(this) ? 2 : 1);
1929        if (ret)
1930                goto err_out;
1931
1932        ret = nand_boot_init(this);
1933        if (ret)
1934                goto err_nand_cleanup;
1935        ret = nand_create_bbt(chip);
1936        if (ret)
1937                goto err_nand_cleanup;
1938
1939        ret = mtd_device_register(mtd, NULL, 0);
1940        if (ret)
1941                goto err_nand_cleanup;
1942        return 0;
1943
1944err_nand_cleanup:
1945        nand_cleanup(chip);
1946err_out:
1947        gpmi_free_dma_buffer(this);
1948        return ret;
1949}
1950
1951static const struct of_device_id gpmi_nand_id_table[] = {
1952        {
1953                .compatible = "fsl,imx23-gpmi-nand",
1954                .data = &gpmi_devdata_imx23,
1955        }, {
1956                .compatible = "fsl,imx28-gpmi-nand",
1957                .data = &gpmi_devdata_imx28,
1958        }, {
1959                .compatible = "fsl,imx6q-gpmi-nand",
1960                .data = &gpmi_devdata_imx6q,
1961        }, {
1962                .compatible = "fsl,imx6sx-gpmi-nand",
1963                .data = &gpmi_devdata_imx6sx,
1964        }, {
1965                .compatible = "fsl,imx7d-gpmi-nand",
1966                .data = &gpmi_devdata_imx7d,
1967        }, {}
1968};
1969MODULE_DEVICE_TABLE(of, gpmi_nand_id_table);
1970
1971static int gpmi_nand_probe(struct platform_device *pdev)
1972{
1973        struct gpmi_nand_data *this;
1974        const struct of_device_id *of_id;
1975        int ret;
1976
1977        this = devm_kzalloc(&pdev->dev, sizeof(*this), GFP_KERNEL);
1978        if (!this)
1979                return -ENOMEM;
1980
1981        of_id = of_match_device(gpmi_nand_id_table, &pdev->dev);
1982        if (of_id) {
1983                this->devdata = of_id->data;
1984        } else {
1985                dev_err(&pdev->dev, "Failed to find the right device id.\n");
1986                return -ENODEV;
1987        }
1988
1989        platform_set_drvdata(pdev, this);
1990        this->pdev  = pdev;
1991        this->dev   = &pdev->dev;
1992
1993        ret = acquire_resources(this);
1994        if (ret)
1995                goto exit_acquire_resources;
1996
1997        ret = gpmi_init(this);
1998        if (ret)
1999                goto exit_nfc_init;
2000
2001        ret = gpmi_nand_init(this);
2002        if (ret)
2003                goto exit_nfc_init;
2004
2005        dev_info(this->dev, "driver registered.\n");
2006
2007        return 0;
2008
2009exit_nfc_init:
2010        release_resources(this);
2011exit_acquire_resources:
2012
2013        return ret;
2014}
2015
2016static int gpmi_nand_remove(struct platform_device *pdev)
2017{
2018        struct gpmi_nand_data *this = platform_get_drvdata(pdev);
2019
2020        nand_release(&this->nand);
2021        gpmi_free_dma_buffer(this);
2022        release_resources(this);
2023        return 0;
2024}
2025
2026#ifdef CONFIG_PM_SLEEP
2027static int gpmi_pm_suspend(struct device *dev)
2028{
2029        struct gpmi_nand_data *this = dev_get_drvdata(dev);
2030
2031        release_dma_channels(this);
2032        return 0;
2033}
2034
2035static int gpmi_pm_resume(struct device *dev)
2036{
2037        struct gpmi_nand_data *this = dev_get_drvdata(dev);
2038        int ret;
2039
2040        ret = acquire_dma_channels(this);
2041        if (ret < 0)
2042                return ret;
2043
2044        /* re-init the GPMI registers */
2045        ret = gpmi_init(this);
2046        if (ret) {
2047                dev_err(this->dev, "Error setting GPMI : %d\n", ret);
2048                return ret;
2049        }
2050
2051        /* re-init the BCH registers */
2052        ret = bch_set_geometry(this);
2053        if (ret) {
2054                dev_err(this->dev, "Error setting BCH : %d\n", ret);
2055                return ret;
2056        }
2057
2058        return 0;
2059}
2060#endif /* CONFIG_PM_SLEEP */
2061
2062static const struct dev_pm_ops gpmi_pm_ops = {
2063        SET_SYSTEM_SLEEP_PM_OPS(gpmi_pm_suspend, gpmi_pm_resume)
2064};
2065
2066static struct platform_driver gpmi_nand_driver = {
2067        .driver = {
2068                .name = "gpmi-nand",
2069                .pm = &gpmi_pm_ops,
2070                .of_match_table = gpmi_nand_id_table,
2071        },
2072        .probe   = gpmi_nand_probe,
2073        .remove  = gpmi_nand_remove,
2074};
2075module_platform_driver(gpmi_nand_driver);
2076
2077MODULE_AUTHOR("Freescale Semiconductor, Inc.");
2078MODULE_DESCRIPTION("i.MX GPMI NAND Flash Controller Driver");
2079MODULE_LICENSE("GPL");
2080