[{"id":1760936,"web_url":"http://patchwork.ozlabs.org/comment/1760936/","msgid":"<201708312044.0MT7qLGe%fengguang.wu@intel.com>","list_archive_url":null,"date":"2017-08-31T12:50:38","subject":"Re: [PATCH v8] mtd: sharpslpart: Add sharpslpart partition parser","submitter":{"id":67315,"url":"http://patchwork.ozlabs.org/api/people/67315/","name":"kernel test robot","email":"lkp@intel.com"},"content":"Hi Andrea,\n\n[auto build test ERROR on mtd/master]\n[also build test ERROR on v4.13-rc7 next-20170829]\n[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]\n\nurl:    https://github.com/0day-ci/linux/commits/Andrea-Adami/mtd-sharpslpart-Add-sharpslpart-partition-parser/20170831-190713\nbase:   git://git.infradead.org/linux-mtd.git master\nconfig: ia64-allyesconfig (attached as .config)\ncompiler: ia64-linux-gcc (GCC) 6.2.0\nreproduce:\n        wget https://raw.githubusercontent.com/01org/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross\n        chmod +x ~/bin/make.cross\n        # save the attached .config to linux build tree\n        make.cross ARCH=ia64 \n\nAll error/warnings (new ones prefixed by >>):\n\n   drivers/mtd/parsers/sharpslpart.c: In function 'sharpsl_nand_init_ftl':\n>> drivers/mtd/parsers/sharpslpart.c:47:37: error: 'SZ_1M' undeclared (first use in this function)\n    #define SHARPSL_FTL_PART_SIZE  (7 * SZ_1M)\n                                        ^\n>> drivers/mtd/parsers/sharpslpart.c:176:25: note: in expansion of macro 'SHARPSL_FTL_PART_SIZE'\n     phymax = mtd_div_by_eb(SHARPSL_FTL_PART_SIZE, mtd);\n                            ^~~~~~~~~~~~~~~~~~~~~\n   drivers/mtd/parsers/sharpslpart.c:47:37: note: each undeclared identifier is reported only once for each function it appears in\n    #define SHARPSL_FTL_PART_SIZE  (7 * SZ_1M)\n                                        ^\n>> drivers/mtd/parsers/sharpslpart.c:176:25: note: in expansion of macro 'SHARPSL_FTL_PART_SIZE'\n     phymax = mtd_div_by_eb(SHARPSL_FTL_PART_SIZE, mtd);\n                            ^~~~~~~~~~~~~~~~~~~~~\n\nvim +/SZ_1M +47 drivers/mtd/parsers/sharpslpart.c\n\n    44\t\n    45\t/* factory defaults */\n    46\t#define SHARPSL_NAND_PARTS\t\t3\n  > 47\t#define SHARPSL_FTL_PART_SIZE\t\t(7 * SZ_1M)\n    48\t#define SHARPSL_PARTINFO1_LADDR\t\t0x00060000\n    49\t#define SHARPSL_PARTINFO2_LADDR\t\t0x00064000\n    50\t\n    51\t#define BOOT_MAGIC\t\t\t0x424f4f54\n    52\t#define FSRO_MAGIC\t\t\t0x4653524f\n    53\t#define FSRW_MAGIC\t\t\t0x46535257\n    54\t\n    55\t/**\n    56\t * struct sharpsl_ftl - Sharp FTL Logical Table\n    57\t * @logmax:\t\tnumber of logical blocks\n    58\t * @log2phy:\t\tthe logical-to-physical table\n    59\t *\n    60\t * Structure containing the logical-to-physical translation table\n    61\t * used by the SHARP SL FTL.\n    62\t */\n    63\tstruct sharpsl_ftl {\n    64\t\tunsigned int logmax;\n    65\t\tunsigned int *log2phy;\n    66\t};\n    67\t\n    68\t/* verify that the OOB bytes 8 to 15 are free and available for the FTL */\n    69\tstatic int sharpsl_nand_check_ooblayout(struct mtd_info *mtd)\n    70\t{\n    71\t\tu8 freebytes = 0;\n    72\t\tint section = 0;\n    73\t\n    74\t\twhile (true) {\n    75\t\t\tstruct mtd_oob_region oobfree = { };\n    76\t\t\tint ret, i;\n    77\t\n    78\t\t\tret = mtd_ooblayout_free(mtd, section++, &oobfree);\n    79\t\t\tif (ret)\n    80\t\t\t\tbreak;\n    81\t\n    82\t\t\tif (!oobfree.length || oobfree.offset > 15 ||\n    83\t\t\t    (oobfree.offset + oobfree.length) < 8)\n    84\t\t\t\tcontinue;\n    85\t\n    86\t\t\ti = oobfree.offset >= 8 ? oobfree.offset : 8;\n    87\t\t\tfor (; i < oobfree.offset + oobfree.length && i < 16; i++)\n    88\t\t\t\tfreebytes |= BIT(i - 8);\n    89\t\n    90\t\t\tif (freebytes == 0xff)\n    91\t\t\t\treturn 0;\n    92\t\t}\n    93\t\n    94\t\treturn -ENOTSUPP;\n    95\t}\n    96\t\n    97\tstatic int sharpsl_nand_read_oob(struct mtd_info *mtd, loff_t offs, u8 *buf)\n    98\t{\n    99\t\tstruct mtd_oob_ops ops = { };\n   100\t\tint ret;\n   101\t\n   102\t\tops.mode = MTD_OPS_PLACE_OOB;\n   103\t\tops.ooblen = mtd->oobsize;\n   104\t\tops.oobbuf = buf;\n   105\t\n   106\t\tret = mtd_read_oob(mtd, offs, &ops);\n   107\t\tif (ret != 0 || mtd->oobsize != ops.oobretlen)\n   108\t\t\treturn -1;\n   109\t\n   110\t\treturn 0;\n   111\t}\n   112\t\n   113\t/*\n   114\t * The logical block number assigned to a physical block is stored in the OOB\n   115\t * of the first page, in 3 16-bit copies with the following layout:\n   116\t *\n   117\t * 01234567 89abcdef\n   118\t * -------- --------\n   119\t * ECC BB   xyxyxy\n   120\t *\n   121\t * When reading we check that the first two copies agree.\n   122\t * In case of error, matching is tried using the following pairs.\n   123\t * Reserved values 0xffff mean the block is kept for wear leveling.\n   124\t *\n   125\t * 01234567 89abcdef\n   126\t * -------- --------\n   127\t * ECC BB   xyxy    oob[8]==oob[10] && oob[9]==oob[11]   -> byte0=8   byte1=9\n   128\t * ECC BB     xyxy  oob[10]==oob[12] && oob[11]==oob[13] -> byte0=10  byte1=11\n   129\t * ECC BB   xy  xy  oob[12]==oob[8] && oob[13]==oob[9]   -> byte0=12  byte1=13\n   130\t */\n   131\tstatic int sharpsl_nand_get_logical_num(u8 *oob)\n   132\t{\n   133\t\tu16 us;\n   134\t\tint good0, good1;\n   135\t\n   136\t\tif (oob[NAND_NOOB_LOGADDR_00] == oob[NAND_NOOB_LOGADDR_10] &&\n   137\t\t    oob[NAND_NOOB_LOGADDR_01] == oob[NAND_NOOB_LOGADDR_11]) {\n   138\t\t\tgood0 = NAND_NOOB_LOGADDR_00;\n   139\t\t\tgood1 = NAND_NOOB_LOGADDR_01;\n   140\t\t} else if (oob[NAND_NOOB_LOGADDR_10] == oob[NAND_NOOB_LOGADDR_20] &&\n   141\t\t\t   oob[NAND_NOOB_LOGADDR_11] == oob[NAND_NOOB_LOGADDR_21]) {\n   142\t\t\tgood0 = NAND_NOOB_LOGADDR_10;\n   143\t\t\tgood1 = NAND_NOOB_LOGADDR_11;\n   144\t\t} else if (oob[NAND_NOOB_LOGADDR_20] == oob[NAND_NOOB_LOGADDR_00] &&\n   145\t\t\t   oob[NAND_NOOB_LOGADDR_21] == oob[NAND_NOOB_LOGADDR_01]) {\n   146\t\t\tgood0 = NAND_NOOB_LOGADDR_20;\n   147\t\t\tgood1 = NAND_NOOB_LOGADDR_21;\n   148\t\t} else {\n   149\t\t\treturn -EINVAL;\n   150\t\t}\n   151\t\n   152\t\tus = oob[good0] | oob[good1] << 8;\n   153\t\n   154\t\t/* parity check */\n   155\t\tif (hweight16(us) & BLOCK_UNMASK_COMPLEMENT)\n   156\t\t\treturn -EINVAL;\n   157\t\n   158\t\t/* reserved */\n   159\t\tif (us == BLOCK_IS_RESERVED)\n   160\t\t\treturn BLOCK_IS_RESERVED;\n   161\t\n   162\t\treturn (us >> 1) & GENMASK(9, 0);\n   163\t}\n   164\t\n   165\tstatic int sharpsl_nand_init_ftl(struct mtd_info *mtd, struct sharpsl_ftl *ftl)\n   166\t{\n   167\t\tunsigned int block_num, log_num, phymax;\n   168\t\tloff_t block_adr;\n   169\t\tu8 *oob;\n   170\t\tint i, ret;\n   171\t\n   172\t\toob = kzalloc(mtd->oobsize, GFP_KERNEL);\n   173\t\tif (!oob)\n   174\t\t\treturn -ENOMEM;\n   175\t\n > 176\t\tphymax = mtd_div_by_eb(SHARPSL_FTL_PART_SIZE, mtd);\n   177\t\n   178\t\t/* FTL reserves 5% of the blocks + 1 spare  */\n   179\t\tftl->logmax = ((phymax * 95) / 100) - 1;\n   180\t\n   181\t\tftl->log2phy = kmalloc_array(ftl->logmax, sizeof(*ftl->log2phy),\n   182\t\t\t\t\t     GFP_KERNEL);\n   183\t\tif (!ftl->log2phy) {\n   184\t\t\tret = -ENOMEM;\n   185\t\t\tgoto exit;\n   186\t\t}\n   187\t\n   188\t\t/* initialize ftl->log2phy */\n   189\t\tfor (i = 0; i < ftl->logmax; i++)\n   190\t\t\tftl->log2phy[i] = UINT_MAX;\n   191\t\n   192\t\t/* create physical-logical table */\n   193\t\tfor (block_num = 0; block_num < phymax; block_num++) {\n   194\t\t\tblock_adr = block_num * mtd->erasesize;\n   195\t\n   196\t\t\tif (mtd_block_isbad(mtd, block_adr))\n   197\t\t\t\tcontinue;\n   198\t\n   199\t\t\tif (sharpsl_nand_read_oob(mtd, block_adr, oob))\n   200\t\t\t\tcontinue;\n   201\t\n   202\t\t\t/* get logical block */\n   203\t\t\tlog_num = sharpsl_nand_get_logical_num(oob);\n   204\t\n   205\t\t\t/* cut-off errors and skip the out-of-range values */\n   206\t\t\tif (log_num > 0 && log_num < ftl->logmax) {\n   207\t\t\t\tif (ftl->log2phy[log_num] == UINT_MAX)\n   208\t\t\t\t\tftl->log2phy[log_num] = block_num;\n   209\t\t\t}\n   210\t\t}\n   211\t\n   212\t\tpr_info(\"Sharp SL FTL: %d blocks used (%d logical, %d reserved)\\n\",\n   213\t\t\tphymax, ftl->logmax, phymax - ftl->logmax);\n   214\t\n   215\t\tret = 0;\n   216\texit:\n   217\t\tkfree(oob);\n   218\t\treturn ret;\n   219\t}\n   220\t\n\n---\n0-DAY kernel test infrastructure                Open Source Technology Center\nhttps://lists.01.org/pipermail/kbuild-all                   Intel Corporation","headers":{"Return-Path":"<linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org; spf=none (mailfrom)\n\tsmtp.mailfrom=lists.infradead.org (client-ip=65.50.211.133;\n\thelo=bombadil.infradead.org;\n\tenvelope-from=linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org;\n\treceiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=lists.infradead.org\n\theader.i=@lists.infradead.org header.b=\"gtu/RegW\"; \n\tdkim-atps=neutral"],"Received":["from bombadil.infradead.org (bombadil.infradead.org\n\t[65.50.211.133])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjj1v2YDHz9s7g\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 31 Aug 2017 22:52:03 +1000 (AEST)","from localhost ([127.0.0.1] helo=bombadil.infradead.org)\n\tby bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux))\n\tid 1dnOws-0004vI-D5; Thu, 31 Aug 2017 12:51:54 +0000","from mga03.intel.com ([134.134.136.65])\n\tby bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux))\n\tid 1dnOwm-0004g3-39\n\tfor linux-mtd@lists.infradead.org; Thu, 31 Aug 2017 12:51:50 +0000","from orsmga003.jf.intel.com ([10.7.209.27])\n\tby orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384;\n\t31 Aug 2017 05:51:26 -0700","from bee.sh.intel.com (HELO bee) ([10.239.97.14])\n\tby orsmga003.jf.intel.com with ESMTP; 31 Aug 2017 05:51:21 -0700","from kbuild by bee with local (Exim 4.84_2)\n\t(envelope-from <fengguang.wu@intel.com>)\n\tid 1dnP0l-000Bgf-QE; Thu, 31 Aug 2017 20:55:55 +0800"],"DKIM-Signature":"v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed;\n\td=lists.infradead.org; s=bombadil.20170209;\n\th=Sender:Cc:List-Subscribe:\n\tList-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:In-Reply-To:\n\tContent-Type:MIME-Version:Message-ID:Subject:To:From:Date:Reply-To:\n\tContent-Transfer-Encoding:Content-ID:Content-Description:Resent-Date:\n\tResent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:References:\n\tList-Owner; bh=ERZOD708+GOIQBspkK7IT85Fa0Pl5bjbp58fQh8xnGg=;\n\tb=gtu/RegWWN9ZVc\n\tot54/N/KjjWTTbCAeNLebFZ7R6mzUEn2OzOSvgYjQHaF1+0GxKz9/bD2M7LR3qvEnDn65izUHDFzJ\n\tq25ahvCIRydLzSnmveMDsTexA5ItPS285U6wLr2MppKlyeAN7XOG9cx6d3RTPa1h8dz1lvng2SoTy\n\tkBvS3uq7+uqMczGpF+nZL+2hNww2/VYXJWmWJYnT22lMhc3T87w4spgyZewVJ8NEbGwKA/MT0OKcE\n\tpIhqHJjh/H5HPZ8pxg+Y5yLeQuQ0jdl9k2enPQ2kSgnAPUvsUuNQ2etSc3gTy2MdptHICE9kFu0tY\n\tyd/Qv0jth58RZsFxR+sQ==;","X-ExtLoop1":"1","X-IronPort-AV":"E=Sophos;i=\"5.41,453,1498546800\"; \n\td=\"gz'50?scan'50,208,50\";a=\"1009632061\"","Date":"Thu, 31 Aug 2017 20:50:38 +0800","From":"kbuild test robot <lkp@intel.com>","To":"Andrea Adami <andrea.adami@gmail.com>","Subject":"Re: [PATCH v8] mtd: sharpslpart: Add sharpslpart partition parser","Message-ID":"<201708312044.0MT7qLGe%fengguang.wu@intel.com>","MIME-Version":"1.0","Content-Type":"multipart/mixed; boundary=\"RnlQjJ0d97Da+TV1\"","Content-Disposition":"inline","In-Reply-To":"<1503963873-20905-1-git-send-email-andrea.adami@gmail.com>","User-Agent":"Mutt/1.5.23 (2014-03-12)","X-SA-Exim-Connect-IP":"<locally generated>","X-SA-Exim-Mail-From":"fengguang.wu@intel.com","X-SA-Exim-Scanned":"No (on bee); SAEximRunCond expanded to false","X-CRM114-Version":"20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 ","X-CRM114-CacheID":"sfid-20170831_055148_330213_96EA63A7 ","X-CRM114-Status":"GOOD (  19.22  )","X-Spam-Score":"-5.4 (-----)","X-Spam-Report":"SpamAssassin version 3.4.1 on bombadil.infradead.org summary:\n\tContent analysis details:   (-5.4 points)\n\tpts rule name              description\n\t---- ----------------------\n\t--------------------------------------------------\n\t-5.0 RCVD_IN_DNSWL_HI RBL: Sender listed at http://www.dnswl.org/,\n\thigh trust [134.134.136.65 listed in list.dnswl.org]\n\t-0.0 SPF_PASS               SPF: sender matches SPF record\n\t-0.0 RP_MATCHES_RCVD Envelope sender domain matches handover relay\n\tdomain\n\t-1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%\n\t[score: 0.0000]\n\t1.5 FAKE_REPLY_C           No description available.","X-BeenThere":"linux-mtd@lists.infradead.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"Linux MTD discussion mailing list <linux-mtd.lists.infradead.org>","List-Unsubscribe":"<http://lists.infradead.org/mailman/options/linux-mtd>,\n\t<mailto:linux-mtd-request@lists.infradead.org?subject=unsubscribe>","List-Archive":"<http://lists.infradead.org/pipermail/linux-mtd/>","List-Post":"<mailto:linux-mtd@lists.infradead.org>","List-Help":"<mailto:linux-mtd-request@lists.infradead.org?subject=help>","List-Subscribe":"<http://lists.infradead.org/mailman/listinfo/linux-mtd>,\n\t<mailto:linux-mtd-request@lists.infradead.org?subject=subscribe>","Cc":"Boris Brezillon <boris.brezillon@free-electrons.com>, Dmitry\n\tEremin-Solenikov <dbaryshkov@gmail.com>, Richard Weinberger\n\t<richard@nod.at>, Robert Jarzmik <robert.jarzmik@free.fr>, \n\tlinux-kernel@vger.kernel.org, Haojian Zhuang <haojian.zhuang@gmail.com>, \n\tMarek Vasut <marek.vasut@gmail.com>, linux-mtd@lists.infradead.org, \n\tkbuild-all@01.org, Cyrille Pitchen <cyrille.pitchen@wedev4u.fr>, \n\t=?utf-8?b?UmFmYcWCIE1p?= =?utf-8?b?xYJlY2tp?= <rafal@milecki.pl>,\n\tBrian Norris <computersforpeace@gmail.com>, David Woodhouse\n\t<dwmw2@infradead.org>","Sender":"\"linux-mtd\" <linux-mtd-bounces@lists.infradead.org>","Errors-To":"linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org"}}]