MLK-11747: mtd: gpmi: save bch geometry setting only in initial stage
authorHan Xu <b45815@freescale.com>
Wed, 21 Oct 2015 16:43:55 +0000 (11:43 -0500)
committerNitin Garg <nitin.garg@nxp.com>
Mon, 19 Mar 2018 19:49:21 +0000 (14:49 -0500)
fix the bch setting issue when system suspend/resume, the bch geometry
only need to be saved to debugfs in driver initial stage

Signed-off-by: Han Xu <b45815@freescale.com>
(cherry picked from commit 3b4f7178854e428fb5ef08d554b13abe4f27c533)

drivers/mtd/nand/gpmi-nand/gpmi-lib.c
drivers/mtd/nand/gpmi-nand/gpmi-nand.c
drivers/mtd/nand/gpmi-nand/gpmi-nand.h

index b8a753b..437e835 100644 (file)
@@ -254,6 +254,27 @@ void gpmi_dump_info(struct gpmi_nand_data *this)
                geo->block_mark_bit_offset);
 }
 
+int bch_save_geometry(struct gpmi_nand_data *this)
+{
+       struct bch_geometry *bch_geo = &this->bch_geometry;
+       struct dentry *dbg_root;
+
+       dbg_root = debugfs_create_dir("gpmi-nand", NULL);
+       if (!dbg_root) {
+               dev_err(this->dev, "failed to create debug directory\n");
+               return -EINVAL;
+       }
+
+       dbg_bch_geo.data = (void *)bch_geo;
+       dbg_bch_geo.size = sizeof(struct bch_geometry);
+       if (!debugfs_create_blob("bch_geometry", S_IRUGO,
+                               dbg_root, &dbg_bch_geo)) {
+               dev_err(this->dev, "failed to create debug bch geometry\n");
+               return -EINVAL;
+       }
+       return 0;
+}
+
 /* Configures the geometry for BCH.  */
 int bch_set_geometry(struct gpmi_nand_data *this)
 {
@@ -267,7 +288,6 @@ int bch_set_geometry(struct gpmi_nand_data *this)
        unsigned int page_size;
        unsigned int gf_len;
        int ret;
-       struct dentry *dbg_root;
 
        if (common_nfc_set_geometry(this))
                return !0;
@@ -280,20 +300,6 @@ int bch_set_geometry(struct gpmi_nand_data *this)
        page_size     = bch_geo->page_size;
        gf_len        = bch_geo->gf_len;
 
-       dbg_root = debugfs_create_dir("gpmi-nand", NULL);
-       if (!dbg_root) {
-               dev_err(this->dev, "failed to create debug directory\n");
-               return -EINVAL;
-       }
-
-       dbg_bch_geo.data = (void *)bch_geo;
-       dbg_bch_geo.size = sizeof(struct bch_geometry);
-       if (!debugfs_create_blob("bch_geometry", S_IRUGO,
-                               dbg_root, &dbg_bch_geo)) {
-               dev_err(this->dev, "failed to create debug bch geometry\n");
-               return -EINVAL;
-       }
-
        ret = pm_runtime_get_sync(this->dev);
        if (ret < 0) {
                dev_err(this->dev, "Failed to enable clock\n");
index feaa249..922f868 100644 (file)
@@ -2200,6 +2200,11 @@ static int gpmi_init_last(struct gpmi_nand_data *this)
        if (ret)
                return ret;
 
+       /* Save the geometry to debugfs*/
+       ret = bch_save_geometry(this);
+       if (ret)
+               return ret;
+
        /* Init the nand_ecc_ctrl{} */
        ecc->read_page  = gpmi_ecc_read_page;
        ecc->write_page = gpmi_ecc_write_page;
index db60dea..e0d2d89 100644 (file)
@@ -287,6 +287,7 @@ extern int gpmi_init(struct gpmi_nand_data *);
 extern int gpmi_extra_init(struct gpmi_nand_data *);
 extern void gpmi_clear_bch(struct gpmi_nand_data *);
 extern void gpmi_dump_info(struct gpmi_nand_data *);
+extern int bch_save_geometry(struct gpmi_nand_data *);
 extern int bch_set_geometry(struct gpmi_nand_data *);
 extern int gpmi_is_ready(struct gpmi_nand_data *, unsigned chip);
 extern int gpmi_send_command(struct gpmi_nand_data *);