[PATCH 4/6] mtd: rawnand: sunxi: replace hard coded value by a define - take2

Richard Genoud posted 6 patches 1 month, 1 week ago
There is a newer version of this series
[PATCH 4/6] mtd: rawnand: sunxi: replace hard coded value by a define - take2
Posted by Richard Genoud 1 month, 1 week ago
The user data length (4) has been replaced almost all over the file, but
2 places were forgotten.

The user data is placed before the ECC, for each step.
So, in sunxi_nfc_hw_ecc_read_extra_oob(), the offset of the user data in
OOB is indeed ((ecc->bytes + USER_DATA_SZ) * ecc->steps);

And in sunxi_nand_ooblayout_ecc(), the offset of the ECC chunk in OOB is
the same offset plus the current user data size:
section * (ecc->bytes + USER_DATA_SZ) + USER_DATA_SZ;

Fixes: 1be7ac78b72f ("mtd: rawnand: sunxi: Replace hard coded value by a define")
Signed-off-by: Richard Genoud <richard.genoud@bootlin.com>
---
 drivers/mtd/nand/raw/sunxi_nand.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi_nand.c
index 99d305bbda53..5d925b59b618 100644
--- a/drivers/mtd/nand/raw/sunxi_nand.c
+++ b/drivers/mtd/nand/raw/sunxi_nand.c
@@ -1051,7 +1051,7 @@ static void sunxi_nfc_hw_ecc_read_extra_oob(struct nand_chip *nand,
 {
 	struct mtd_info *mtd = nand_to_mtd(nand);
 	struct nand_ecc_ctrl *ecc = &nand->ecc;
-	int offset = ((ecc->bytes + 4) * ecc->steps);
+	int offset = ((ecc->bytes + USER_DATA_SZ) * ecc->steps);
 	int len = mtd->oobsize - offset;
 
 	if (len <= 0)
@@ -1747,7 +1747,7 @@ static int sunxi_nand_ooblayout_ecc(struct mtd_info *mtd, int section,
 	if (section >= ecc->steps)
 		return -ERANGE;
 
-	oobregion->offset = section * (ecc->bytes + USER_DATA_SZ) + 4;
+	oobregion->offset = section * (ecc->bytes + USER_DATA_SZ) + USER_DATA_SZ;
 	oobregion->length = ecc->bytes;
 
 	return 0;
Re: [PATCH 4/6] mtd: rawnand: sunxi: replace hard coded value by a define - take2
Posted by Jernej Škrabec 1 month, 1 week ago
Dne petek, 20. februar 2026 ob 17:10:09 Srednjeevropski standardni čas je Richard Genoud napisal(a):
> The user data length (4) has been replaced almost all over the file, but
> 2 places were forgotten.
> 
> The user data is placed before the ECC, for each step.
> So, in sunxi_nfc_hw_ecc_read_extra_oob(), the offset of the user data in
> OOB is indeed ((ecc->bytes + USER_DATA_SZ) * ecc->steps);
> 
> And in sunxi_nand_ooblayout_ecc(), the offset of the ECC chunk in OOB is
> the same offset plus the current user data size:
> section * (ecc->bytes + USER_DATA_SZ) + USER_DATA_SZ;
> 
> Fixes: 1be7ac78b72f ("mtd: rawnand: sunxi: Replace hard coded value by a define")
> Signed-off-by: Richard Genoud <richard.genoud@bootlin.com>

This doesn't really need Fixes tag since it's only refactoring.

With that said:
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>

Best regards,
Jernej

> ---
>  drivers/mtd/nand/raw/sunxi_nand.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi_nand.c
> index 99d305bbda53..5d925b59b618 100644
> --- a/drivers/mtd/nand/raw/sunxi_nand.c
> +++ b/drivers/mtd/nand/raw/sunxi_nand.c
> @@ -1051,7 +1051,7 @@ static void sunxi_nfc_hw_ecc_read_extra_oob(struct nand_chip *nand,
>  {
>  	struct mtd_info *mtd = nand_to_mtd(nand);
>  	struct nand_ecc_ctrl *ecc = &nand->ecc;
> -	int offset = ((ecc->bytes + 4) * ecc->steps);
> +	int offset = ((ecc->bytes + USER_DATA_SZ) * ecc->steps);
>  	int len = mtd->oobsize - offset;
>  
>  	if (len <= 0)
> @@ -1747,7 +1747,7 @@ static int sunxi_nand_ooblayout_ecc(struct mtd_info *mtd, int section,
>  	if (section >= ecc->steps)
>  		return -ERANGE;
>  
> -	oobregion->offset = section * (ecc->bytes + USER_DATA_SZ) + 4;
> +	oobregion->offset = section * (ecc->bytes + USER_DATA_SZ) + USER_DATA_SZ;
>  	oobregion->length = ecc->bytes;
>  
>  	return 0;
> 
Re: [PATCH 4/6] mtd: rawnand: sunxi: replace hard coded value by a define - take2
Posted by Richard GENOUD 4 weeks, 1 day ago
Le 21/02/2026 à 10:23, Jernej Škrabec a écrit :
> Dne petek, 20. februar 2026 ob 17:10:09 Srednjeevropski standardni čas je Richard Genoud napisal(a):
>> The user data length (4) has been replaced almost all over the file, but
>> 2 places were forgotten.
>>
>> The user data is placed before the ECC, for each step.
>> So, in sunxi_nfc_hw_ecc_read_extra_oob(), the offset of the user data in
>> OOB is indeed ((ecc->bytes + USER_DATA_SZ) * ecc->steps);
>>
>> And in sunxi_nand_ooblayout_ecc(), the offset of the ECC chunk in OOB is
>> the same offset plus the current user data size:
>> section * (ecc->bytes + USER_DATA_SZ) + USER_DATA_SZ;
>>
>> Fixes: 1be7ac78b72f ("mtd: rawnand: sunxi: Replace hard coded value by a define")
>> Signed-off-by: Richard Genoud <richard.genoud@bootlin.com>
> 
> This doesn't really need Fixes tag since it's only refactoring.
Indeed.

> 
> With that said:
> Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com>


Thanks!
> 
> Best regards,
> Jernej
> 
>> ---
>>   drivers/mtd/nand/raw/sunxi_nand.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/mtd/nand/raw/sunxi_nand.c b/drivers/mtd/nand/raw/sunxi_nand.c
>> index 99d305bbda53..5d925b59b618 100644
>> --- a/drivers/mtd/nand/raw/sunxi_nand.c
>> +++ b/drivers/mtd/nand/raw/sunxi_nand.c
>> @@ -1051,7 +1051,7 @@ static void sunxi_nfc_hw_ecc_read_extra_oob(struct nand_chip *nand,
>>   {
>>   	struct mtd_info *mtd = nand_to_mtd(nand);
>>   	struct nand_ecc_ctrl *ecc = &nand->ecc;
>> -	int offset = ((ecc->bytes + 4) * ecc->steps);
>> +	int offset = ((ecc->bytes + USER_DATA_SZ) * ecc->steps);
>>   	int len = mtd->oobsize - offset;
>>   
>>   	if (len <= 0)
>> @@ -1747,7 +1747,7 @@ static int sunxi_nand_ooblayout_ecc(struct mtd_info *mtd, int section,
>>   	if (section >= ecc->steps)
>>   		return -ERANGE;
>>   
>> -	oobregion->offset = section * (ecc->bytes + USER_DATA_SZ) + 4;
>> +	oobregion->offset = section * (ecc->bytes + USER_DATA_SZ) + USER_DATA_SZ;
>>   	oobregion->length = ecc->bytes;
>>   
>>   	return 0;
>>
> 
> 
> 
> 


-- 
Richard Genoud, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com