From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: drivers/mtd/parsers/bcm47xxpart.c:217:21: sparse: sparse: cast to restricted __le32
Date: Tue, 08 Sep 2020 04:51:57 +0800 [thread overview]
Message-ID: <202009080452.61u3M2JS%lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 24638 bytes --]
Hi Linus,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: f4d51dffc6c01a9e94650d95ce0104964f8ae822
commit: 11f74023888f4e50fd33d3428ce473a10e1f1969 mtd: parsers: Move BCM47xx parser
date: 12 months ago
config: mips-randconfig-s032-20200908 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-191-g10164920-dirty
git checkout 11f74023888f4e50fd33d3428ce473a10e1f1969
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=mips
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> drivers/mtd/parsers/bcm47xxpart.c:217:21: sparse: sparse: cast to restricted __le32
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=11f74023888f4e50fd33d3428ce473a10e1f1969
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 11f74023888f4e50fd33d3428ce473a10e1f1969
vim +217 drivers/mtd/parsers/bcm47xxpart.c
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 85
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 86 static int bcm47xxpart_parse(struct mtd_info *master,
b9adf469f8abb8 drivers/mtd/bcm47xxpart.c Brian Norris 2015-12-04 87 const struct mtd_partition **pparts,
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 88 struct mtd_part_parser_data *data)
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 89 {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 90 struct mtd_partition *parts;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 91 uint8_t i, curr_part = 0;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 92 uint32_t *buf;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 93 size_t bytes_read;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 94 uint32_t offset;
25bad1d3c9f561 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-01-24 95 uint32_t blocksize = master->erasesize;
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 96 int trx_parts[2]; /* Array with indexes of TRX partitions */
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 97 int trx_num = 0; /* Number of found TRX partitions */
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 98 int possible_nvram_sizes[] = { 0x8000, 0xF000, 0x10000, };
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 99 int err;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 100
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 101 /*
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 102 * Some really old flashes (like AT45DB*) had smaller erasesize-s, but
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 103 * partitions were aligned to at least 0x1000 anyway.
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 104 */
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 105 if (blocksize < 0x1000)
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 106 blocksize = 0x1000;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 107
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 108 /* Alloc */
6396bb221514d2 drivers/mtd/bcm47xxpart.c Kees Cook 2018-06-12 109 parts = kcalloc(BCM47XXPART_MAX_PARTS, sizeof(struct mtd_partition),
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 110 GFP_KERNEL);
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 111 if (!parts)
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 112 return -ENOMEM;
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 113
5ca1088f10d617 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 114 buf = kzalloc(BCM47XXPART_BYTES_TO_READ, GFP_KERNEL);
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 115 if (!buf) {
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 116 kfree(parts);
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 117 return -ENOMEM;
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 118 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 119
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 120 /* Parse block by block looking for magics */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 121 for (offset = 0; offset <= master->size - blocksize;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 122 offset += blocksize) {
2a36a5c30eab9c drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-05 123 /* Nothing more in higher memory on BCM47XX (MIPS) */
97f2645f358b41 drivers/mtd/bcm47xxpart.c Masahiro Yamada 2016-08-03 124 if (IS_ENABLED(CONFIG_BCM47XX) && offset >= 0x2000000)
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 125 break;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 126
00b79860eb5f72 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-02-26 127 if (curr_part >= BCM47XXPART_MAX_PARTS) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 128 pr_warn("Reached maximum number of partitions, scanning stopped!\n");
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 129 break;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 130 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 131
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 132 /* Read beginning of the block */
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 133 err = mtd_read(master, offset, BCM47XXPART_BYTES_TO_READ,
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 134 &bytes_read, (uint8_t *)buf);
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 135 if (err && !mtd_is_bitflip(err)) {
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 136 pr_err("mtd_read error while parsing (offset: 0x%X): %d\n",
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 137 offset, err);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 138 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 139 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 140
4f8aaf72287578 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 141 /* Magic or small NVRAM at 0x400 */
4f8aaf72287578 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 142 if ((buf[0x4e0 / 4] == CFE_MAGIC && buf[0x4e4 / 4] == CFE_MAGIC) ||
4f8aaf72287578 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 143 (buf[0x400 / 4] == NVRAM_HEADER)) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 144 bcm47xxpart_add_part(&parts[curr_part++], "boot",
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 145 offset, MTD_WRITEABLE);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 146 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 147 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 148
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 149 /*
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 150 * board_data starts with board_id which differs across boards,
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 151 * but we can use 'MPFR' (hopefully) magic at 0x100
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 152 */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 153 if (buf[0x100 / 4] == BOARD_DATA_MAGIC) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 154 bcm47xxpart_add_part(&parts[curr_part++], "board_data",
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 155 offset, MTD_WRITEABLE);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 156 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 157 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 158
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 159 /* Found on Huawei E970 */
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 160 if (buf[0x000 / 4] == FACTORY_MAGIC) {
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 161 bcm47xxpart_add_part(&parts[curr_part++], "factory",
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 162 offset, MTD_WRITEABLE);
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 163 continue;
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 164 }
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 165
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 166 /* POT(TOP) */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 167 if (buf[0x000 / 4] == POT_MAGIC1 &&
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 168 (buf[0x004 / 4] & 0xFFFF) == POT_MAGIC2) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 169 bcm47xxpart_add_part(&parts[curr_part++], "POT", offset,
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 170 MTD_WRITEABLE);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 171 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 172 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 173
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 174 /* ML */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 175 if (buf[0x010 / 4] == ML_MAGIC1 &&
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 176 buf[0x014 / 4] == ML_MAGIC2) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 177 bcm47xxpart_add_part(&parts[curr_part++], "ML", offset,
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 178 MTD_WRITEABLE);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 179 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 180 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 181
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 182 /* TRX */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 183 if (buf[0x000 / 4] == TRX_MAGIC) {
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 184 struct trx_header *trx;
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 185 uint32_t last_subpart;
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 186 uint32_t trx_size;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 187
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 188 if (trx_num >= ARRAY_SIZE(trx_parts))
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 189 pr_warn("No enough space to store another TRX found at 0x%X\n",
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 190 offset);
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 191 else
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 192 trx_parts[trx_num++] = curr_part;
396afe553bd607 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 193 bcm47xxpart_add_part(&parts[curr_part++], "firmware",
396afe553bd607 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 194 offset, 0);
396afe553bd607 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 195
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 196 /*
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 197 * Try to find TRX size. The "length" field isn't fully
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 198 * reliable as it could be decreased to make CRC32 cover
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 199 * only part of TRX data. It's commonly used as checksum
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 200 * can't cover e.g. ever-changing rootfs partition.
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 201 * Use offsets as helpers for assuming min TRX size.
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 202 */
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 203 trx = (struct trx_header *)buf;
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 204 last_subpart = max3(trx->offset[0], trx->offset[1],
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 205 trx->offset[2]);
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 206 trx_size = max(trx->length, last_subpart + blocksize);
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 207
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 208 /*
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 209 * Skip the TRX data. Decrease offset by block size as
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 210 * the next loop iteration will increase it.
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 211 */
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 212 offset += roundup(trx_size, blocksize) - blocksize;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 213 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 214 }
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 215
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 216 /* Squashfs on devices not using TRX */
0b56d2d45e7c27 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-16 @217 if (le32_to_cpu(buf[0x000 / 4]) == SQUASHFS_MAGIC ||
0b56d2d45e7c27 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-16 218 buf[0x000 / 4] == SHSQ_MAGIC) {
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 219 bcm47xxpart_add_part(&parts[curr_part++], "rootfs",
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 220 offset, 0);
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 221 continue;
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 222 }
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 223
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 224 /*
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 225 * New (ARM?) devices may have NVRAM in some middle block. Last
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 226 * block will be checked later, so skip it.
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 227 */
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 228 if (offset != master->size - blocksize &&
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 229 buf[0x000 / 4] == NVRAM_HEADER) {
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 230 bcm47xxpart_add_part(&parts[curr_part++], "nvram",
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 231 offset, 0);
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 232 continue;
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 233 }
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 234
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 235 /* Read middle of the block */
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 236 err = mtd_read(master, offset + 0x8000, 0x4, &bytes_read,
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 237 (uint8_t *)buf);
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 238 if (err && !mtd_is_bitflip(err)) {
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 239 pr_err("mtd_read error while parsing (offset: 0x%X): %d\n",
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 240 offset, err);
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 241 continue;
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 242 }
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 243
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 244 /* Some devices (ex. WNDR3700v3) don't have a standard 'MPFR' */
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 245 if (buf[0x000 / 4] == BOARD_DATA_MAGIC2) {
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 246 bcm47xxpart_add_part(&parts[curr_part++], "board_data",
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 247 offset, MTD_WRITEABLE);
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 248 continue;
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 249 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 250 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 251
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 252 /* Look for NVRAM at the end of the last block. */
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 253 for (i = 0; i < ARRAY_SIZE(possible_nvram_sizes); i++) {
00b79860eb5f72 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-02-26 254 if (curr_part >= BCM47XXPART_MAX_PARTS) {
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 255 pr_warn("Reached maximum number of partitions, scanning stopped!\n");
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 256 break;
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 257 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 258
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 259 offset = master->size - possible_nvram_sizes[i];
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 260 err = mtd_read(master, offset, 0x4, &bytes_read,
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 261 (uint8_t *)buf);
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 262 if (err && !mtd_is_bitflip(err)) {
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 263 pr_err("mtd_read error while reading (offset 0x%X): %d\n",
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 264 offset, err);
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 265 continue;
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 266 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 267
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 268 /* Standard NVRAM */
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 269 if (buf[0] == NVRAM_HEADER) {
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 270 bcm47xxpart_add_part(&parts[curr_part++], "nvram",
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 271 master->size - blocksize, 0);
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 272 break;
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 273 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 274 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 275
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 276 kfree(buf);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 277
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 278 /*
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 279 * Assume that partitions end at the beginning of the one they are
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 280 * followed by.
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 281 */
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 282 for (i = 0; i < curr_part; i++) {
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 283 u64 next_part_offset = (i < curr_part - 1) ?
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 284 parts[i + 1].offset : master->size;
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 285
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 286 parts[i].size = next_part_offset - parts[i].offset;
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 287 }
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 288
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 289 /* If there was TRX parse it now */
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 290 for (i = 0; i < trx_num; i++) {
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 291 struct mtd_partition *trx = &parts[trx_parts[i]];
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 292
99352afe8f169c drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-06-21 293 if (i == bcm47xxpart_bootpartition())
99352afe8f169c drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-06-21 294 trx->types = trx_types;
99352afe8f169c drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-06-21 295 else
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 296 trx->name = "failsafe";
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 297 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 298
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 299 *pparts = parts;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 300 return curr_part;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 301 };
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 302
:::::: The code at line 217 was first introduced by commit
:::::: 0b56d2d45e7c27581ca90f36b4317373f23e7622 mtd: bcm47xxpart: support SquashFS with an original magic
:::::: TO: Rafał Miłecki <zajec5@gmail.com>
:::::: CC: Brian Norris <computersforpeace@gmail.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 24888 bytes --]
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org,
Richard Weinberger <richard@nod.at>
Subject: drivers/mtd/parsers/bcm47xxpart.c:217:21: sparse: sparse: cast to restricted __le32
Date: Tue, 8 Sep 2020 04:51:57 +0800 [thread overview]
Message-ID: <202009080452.61u3M2JS%lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 24375 bytes --]
Hi Linus,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: f4d51dffc6c01a9e94650d95ce0104964f8ae822
commit: 11f74023888f4e50fd33d3428ce473a10e1f1969 mtd: parsers: Move BCM47xx parser
date: 12 months ago
config: mips-randconfig-s032-20200908 (attached as .config)
compiler: mipsel-linux-gcc (GCC) 9.3.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.2-191-g10164920-dirty
git checkout 11f74023888f4e50fd33d3428ce473a10e1f1969
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=mips
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> drivers/mtd/parsers/bcm47xxpart.c:217:21: sparse: sparse: cast to restricted __le32
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=11f74023888f4e50fd33d3428ce473a10e1f1969
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 11f74023888f4e50fd33d3428ce473a10e1f1969
vim +217 drivers/mtd/parsers/bcm47xxpart.c
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 85
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 86 static int bcm47xxpart_parse(struct mtd_info *master,
b9adf469f8abb8 drivers/mtd/bcm47xxpart.c Brian Norris 2015-12-04 87 const struct mtd_partition **pparts,
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 88 struct mtd_part_parser_data *data)
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 89 {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 90 struct mtd_partition *parts;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 91 uint8_t i, curr_part = 0;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 92 uint32_t *buf;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 93 size_t bytes_read;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 94 uint32_t offset;
25bad1d3c9f561 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-01-24 95 uint32_t blocksize = master->erasesize;
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 96 int trx_parts[2]; /* Array with indexes of TRX partitions */
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 97 int trx_num = 0; /* Number of found TRX partitions */
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 98 int possible_nvram_sizes[] = { 0x8000, 0xF000, 0x10000, };
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 99 int err;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 100
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 101 /*
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 102 * Some really old flashes (like AT45DB*) had smaller erasesize-s, but
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 103 * partitions were aligned to at least 0x1000 anyway.
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 104 */
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 105 if (blocksize < 0x1000)
16bd87b3a352b5 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-08 106 blocksize = 0x1000;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 107
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 108 /* Alloc */
6396bb221514d2 drivers/mtd/bcm47xxpart.c Kees Cook 2018-06-12 109 parts = kcalloc(BCM47XXPART_MAX_PARTS, sizeof(struct mtd_partition),
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 110 GFP_KERNEL);
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 111 if (!parts)
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 112 return -ENOMEM;
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 113
5ca1088f10d617 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 114 buf = kzalloc(BCM47XXPART_BYTES_TO_READ, GFP_KERNEL);
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 115 if (!buf) {
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 116 kfree(parts);
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 117 return -ENOMEM;
99b1d1887fee36 drivers/mtd/bcm47xxpart.c Hauke Mehrtens 2013-10-13 118 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 119
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 120 /* Parse block by block looking for magics */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 121 for (offset = 0; offset <= master->size - blocksize;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 122 offset += blocksize) {
2a36a5c30eab9c drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-05 123 /* Nothing more in higher memory on BCM47XX (MIPS) */
97f2645f358b41 drivers/mtd/bcm47xxpart.c Masahiro Yamada 2016-08-03 124 if (IS_ENABLED(CONFIG_BCM47XX) && offset >= 0x2000000)
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 125 break;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 126
00b79860eb5f72 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-02-26 127 if (curr_part >= BCM47XXPART_MAX_PARTS) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 128 pr_warn("Reached maximum number of partitions, scanning stopped!\n");
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 129 break;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 130 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 131
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 132 /* Read beginning of the block */
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 133 err = mtd_read(master, offset, BCM47XXPART_BYTES_TO_READ,
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 134 &bytes_read, (uint8_t *)buf);
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 135 if (err && !mtd_is_bitflip(err)) {
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 136 pr_err("mtd_read error while parsing (offset: 0x%X): %d\n",
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 137 offset, err);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 138 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 139 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 140
4f8aaf72287578 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 141 /* Magic or small NVRAM at 0x400 */
4f8aaf72287578 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 142 if ((buf[0x4e0 / 4] == CFE_MAGIC && buf[0x4e4 / 4] == CFE_MAGIC) ||
4f8aaf72287578 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 143 (buf[0x400 / 4] == NVRAM_HEADER)) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 144 bcm47xxpart_add_part(&parts[curr_part++], "boot",
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 145 offset, MTD_WRITEABLE);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 146 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 147 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 148
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 149 /*
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 150 * board_data starts with board_id which differs across boards,
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 151 * but we can use 'MPFR' (hopefully) magic at 0x100
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 152 */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 153 if (buf[0x100 / 4] == BOARD_DATA_MAGIC) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 154 bcm47xxpart_add_part(&parts[curr_part++], "board_data",
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 155 offset, MTD_WRITEABLE);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 156 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 157 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 158
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 159 /* Found on Huawei E970 */
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 160 if (buf[0x000 / 4] == FACTORY_MAGIC) {
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 161 bcm47xxpart_add_part(&parts[curr_part++], "factory",
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 162 offset, MTD_WRITEABLE);
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 163 continue;
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 164 }
33094c736cd36a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 165
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 166 /* POT(TOP) */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 167 if (buf[0x000 / 4] == POT_MAGIC1 &&
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 168 (buf[0x004 / 4] & 0xFFFF) == POT_MAGIC2) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 169 bcm47xxpart_add_part(&parts[curr_part++], "POT", offset,
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 170 MTD_WRITEABLE);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 171 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 172 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 173
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 174 /* ML */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 175 if (buf[0x010 / 4] == ML_MAGIC1 &&
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 176 buf[0x014 / 4] == ML_MAGIC2) {
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 177 bcm47xxpart_add_part(&parts[curr_part++], "ML", offset,
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 178 MTD_WRITEABLE);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 179 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 180 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 181
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 182 /* TRX */
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 183 if (buf[0x000 / 4] == TRX_MAGIC) {
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 184 struct trx_header *trx;
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 185 uint32_t last_subpart;
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 186 uint32_t trx_size;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 187
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 188 if (trx_num >= ARRAY_SIZE(trx_parts))
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 189 pr_warn("No enough space to store another TRX found at 0x%X\n",
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 190 offset);
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 191 else
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 192 trx_parts[trx_num++] = curr_part;
396afe553bd607 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 193 bcm47xxpart_add_part(&parts[curr_part++], "firmware",
396afe553bd607 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 194 offset, 0);
396afe553bd607 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 195
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 196 /*
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 197 * Try to find TRX size. The "length" field isn't fully
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 198 * reliable as it could be decreased to make CRC32 cover
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 199 * only part of TRX data. It's commonly used as checksum
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 200 * can't cover e.g. ever-changing rootfs partition.
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 201 * Use offsets as helpers for assuming min TRX size.
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 202 */
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 203 trx = (struct trx_header *)buf;
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 204 last_subpart = max3(trx->offset[0], trx->offset[1],
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 205 trx->offset[2]);
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 206 trx_size = max(trx->length, last_subpart + blocksize);
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 207
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 208 /*
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 209 * Skip the TRX data. Decrease offset by block size as
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 210 * the next loop iteration will increase it.
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 211 */
237ea0d4762cc1 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2018-04-12 212 offset += roundup(trx_size, blocksize) - blocksize;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 213 continue;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 214 }
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 215
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 216 /* Squashfs on devices not using TRX */
0b56d2d45e7c27 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-16 @217 if (le32_to_cpu(buf[0x000 / 4]) == SQUASHFS_MAGIC ||
0b56d2d45e7c27 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-12-16 218 buf[0x000 / 4] == SHSQ_MAGIC) {
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 219 bcm47xxpart_add_part(&parts[curr_part++], "rootfs",
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 220 offset, 0);
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 221 continue;
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 222 }
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 223
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 224 /*
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 225 * New (ARM?) devices may have NVRAM in some middle block. Last
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 226 * block will be checked later, so skip it.
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 227 */
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 228 if (offset != master->size - blocksize &&
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 229 buf[0x000 / 4] == NVRAM_HEADER) {
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 230 bcm47xxpart_add_part(&parts[curr_part++], "nvram",
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 231 offset, 0);
024629fdca1bbb drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-08-18 232 continue;
020c6bcfbeabee drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-10-21 233 }
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 234
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 235 /* Read middle of the block */
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 236 err = mtd_read(master, offset + 0x8000, 0x4, &bytes_read,
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 237 (uint8_t *)buf);
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 238 if (err && !mtd_is_bitflip(err)) {
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 239 pr_err("mtd_read error while parsing (offset: 0x%X): %d\n",
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 240 offset, err);
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 241 continue;
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 242 }
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 243
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 244 /* Some devices (ex. WNDR3700v3) don't have a standard 'MPFR' */
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 245 if (buf[0x000 / 4] == BOARD_DATA_MAGIC2) {
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 246 bcm47xxpart_add_part(&parts[curr_part++], "board_data",
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 247 offset, MTD_WRITEABLE);
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 248 continue;
f0501e81fbaa51 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-12-21 249 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 250 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 251
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 252 /* Look for NVRAM at the end of the last block. */
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 253 for (i = 0; i < ARRAY_SIZE(possible_nvram_sizes); i++) {
00b79860eb5f72 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2014-02-26 254 if (curr_part >= BCM47XXPART_MAX_PARTS) {
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 255 pr_warn("Reached maximum number of partitions, scanning stopped!\n");
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 256 break;
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 257 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 258
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 259 offset = master->size - possible_nvram_sizes[i];
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 260 err = mtd_read(master, offset, 0x4, &bytes_read,
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 261 (uint8_t *)buf);
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 262 if (err && !mtd_is_bitflip(err)) {
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 263 pr_err("mtd_read error while reading (offset 0x%X): %d\n",
36bcc0c9c2bc8f drivers/mtd/bcm47xxpart.c Rafał Miłecki 2015-12-06 264 offset, err);
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 265 continue;
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 266 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 267
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 268 /* Standard NVRAM */
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 269 if (buf[0] == NVRAM_HEADER) {
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 270 bcm47xxpart_add_part(&parts[curr_part++], "nvram",
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 271 master->size - blocksize, 0);
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 272 break;
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 273 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 274 }
91d542f4dcc231 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-03-07 275
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 276 kfree(buf);
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 277
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 278 /*
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 279 * Assume that partitions end at the beginning of the one they are
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 280 * followed by.
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 281 */
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 282 for (i = 0; i < curr_part; i++) {
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 283 u64 next_part_offset = (i < curr_part - 1) ?
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 284 parts[i + 1].offset : master->size;
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 285
648bdbee5d2cc3 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2013-01-06 286 parts[i].size = next_part_offset - parts[i].offset;
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 287 }
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 288
b522d7b0ebe353 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 289 /* If there was TRX parse it now */
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 290 for (i = 0; i < trx_num; i++) {
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 291 struct mtd_partition *trx = &parts[trx_parts[i]];
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 292
99352afe8f169c drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-06-21 293 if (i == bcm47xxpart_bootpartition())
99352afe8f169c drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-06-21 294 trx->types = trx_types;
99352afe8f169c drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-06-21 295 else
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 296 trx->name = "failsafe";
89a0d9a9f1941a drivers/mtd/bcm47xxpart.c Rafał Miłecki 2017-01-10 297 }
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 298
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 299 *pparts = parts;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 300 return curr_part;
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 301 };
3cf7f1314ed885 drivers/mtd/bcm47xxpart.c Rafał Miłecki 2012-08-30 302
:::::: The code at line 217 was first introduced by commit
:::::: 0b56d2d45e7c27581ca90f36b4317373f23e7622 mtd: bcm47xxpart: support SquashFS with an original magic
:::::: TO: Rafał Miłecki <zajec5@gmail.com>
:::::: CC: Brian Norris <computersforpeace@gmail.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 24888 bytes --]
next reply other threads:[~2020-09-07 20:51 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-07 20:51 kernel test robot [this message]
2020-09-07 20:51 ` drivers/mtd/parsers/bcm47xxpart.c:217:21: sparse: sparse: cast to restricted __le32 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202009080452.61u3M2JS%lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.