Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 69526147 authored by Roger Quadros's avatar Roger Quadros Committed by Greg Kroah-Hartman
Browse files

mtd: rawnand: omap_elm: Fix incorrect type in assignment



[ Upstream commit d8403b9eeee66d5dd81ecb9445800b108c267ce3 ]

Once the ECC word endianness is converted to BE32, we force cast it
to u32 so we can use elm_write_reg() which in turn uses writel().

Fixes below sparse warnings:

   drivers/mtd/nand/raw/omap_elm.c:180:37: sparse:     expected unsigned int [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:180:37: sparse:     got restricted __be32 [usertype]
   drivers/mtd/nand/raw/omap_elm.c:185:37: sparse:     expected unsigned int [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:185:37: sparse:     got restricted __be32 [usertype]
   drivers/mtd/nand/raw/omap_elm.c:190:37: sparse:     expected unsigned int [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:190:37: sparse:     got restricted __be32 [usertype]
>> drivers/mtd/nand/raw/omap_elm.c:200:40: sparse: sparse: restricted __be32 degrades to integer
   drivers/mtd/nand/raw/omap_elm.c:206:39: sparse: sparse: restricted __be32 degrades to integer
   drivers/mtd/nand/raw/omap_elm.c:210:37: sparse:     expected unsigned int [assigned] [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:210:37: sparse:     got restricted __be32 [usertype]
   drivers/mtd/nand/raw/omap_elm.c:213:37: sparse:     expected unsigned int [assigned] [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:213:37: sparse:     got restricted __be32 [usertype]
   drivers/mtd/nand/raw/omap_elm.c:216:37: sparse:     expected unsigned int [assigned] [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:216:37: sparse:     got restricted __be32 [usertype]
   drivers/mtd/nand/raw/omap_elm.c:219:37: sparse:     expected unsigned int [assigned] [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:219:37: sparse:     got restricted __be32 [usertype]
   drivers/mtd/nand/raw/omap_elm.c:222:37: sparse:     expected unsigned int [assigned] [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:222:37: sparse:     got restricted __be32 [usertype]
   drivers/mtd/nand/raw/omap_elm.c:225:37: sparse:     expected unsigned int [assigned] [usertype] val
   drivers/mtd/nand/raw/omap_elm.c:225:37: sparse:     got restricted __be32 [usertype]
   drivers/mtd/nand/raw/omap_elm.c:228:39: sparse: sparse: restricted __be32 degrades to integer

Fixes: bf224335 ("mtd: devices: elm: Add support for ELM error correction")
Reported-by: default avatarkernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202306212211.WDXokuWh-lkp@intel.com/


Signed-off-by: default avatarRoger Quadros <rogerq@kernel.org>
Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/linux-mtd/20230624184021.7740-1-rogerq@kernel.org


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent d24ccc6b
Loading
Loading
Loading
Loading
+12 −12
Original line number Original line Diff line number Diff line
@@ -184,17 +184,17 @@ static void elm_load_syndrome(struct elm_info *info,
			switch (info->bch_type) {
			switch (info->bch_type) {
			case BCH8_ECC:
			case BCH8_ECC:
				/* syndrome fragment 0 = ecc[9-12B] */
				/* syndrome fragment 0 = ecc[9-12B] */
				val = cpu_to_be32(*(u32 *) &ecc[9]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[9]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);


				/* syndrome fragment 1 = ecc[5-8B] */
				/* syndrome fragment 1 = ecc[5-8B] */
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[5]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[5]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);


				/* syndrome fragment 2 = ecc[1-4B] */
				/* syndrome fragment 2 = ecc[1-4B] */
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[1]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[1]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);


				/* syndrome fragment 3 = ecc[0B] */
				/* syndrome fragment 3 = ecc[0B] */
@@ -204,35 +204,35 @@ static void elm_load_syndrome(struct elm_info *info,
				break;
				break;
			case BCH4_ECC:
			case BCH4_ECC:
				/* syndrome fragment 0 = ecc[20-52b] bits */
				/* syndrome fragment 0 = ecc[20-52b] bits */
				val = (cpu_to_be32(*(u32 *) &ecc[3]) >> 4) |
				val = ((__force u32)cpu_to_be32(*(u32 *)&ecc[3]) >> 4) |
					((ecc[2] & 0xf) << 28);
					((ecc[2] & 0xf) << 28);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);


				/* syndrome fragment 1 = ecc[0-20b] bits */
				/* syndrome fragment 1 = ecc[0-20b] bits */
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[0]) >> 12;
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[0]) >> 12;
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);
				break;
				break;
			case BCH16_ECC:
			case BCH16_ECC:
				val = cpu_to_be32(*(u32 *) &ecc[22]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[22]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[18]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[18]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[14]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[14]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[10]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[10]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[6]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[6]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[2]);
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[2]);
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);
				offset += 4;
				offset += 4;
				val = cpu_to_be32(*(u32 *) &ecc[0]) >> 16;
				val = (__force u32)cpu_to_be32(*(u32 *)&ecc[0]) >> 16;
				elm_write_reg(info, offset, val);
				elm_write_reg(info, offset, val);
				break;
				break;
			default:
			default: