开云体育

ctrl + shift + ? for shortcuts
© 2025 开云体育

[PATCH v1] mtd: rawnand: meson: always use OOB bytes during write


Michael Nazzareno Trimarchi
 

Hi

Yes

Michael

On Tue, Dec 24, 2024 at 8:55?AM Arseniy Krasnov
<avkrasnov@...> wrote:



On 23.12.2024 15:57, Michael Nazzareno Trimarchi wrote:
On Sun, Dec 22, 2024 at 10:23?PM Arseniy Krasnov
<avkrasnov@...> wrote:

If 'oob_required' is not set by the caller (for example 'oobbuf' is NULL),
then driver doesn't copy OOB data from 'oob_poi' to special controller
structures, so zeroes will be written as OOB. But, generic raw NAND logic
in 'nand_base.c' already handles case when OOB is not required to write by
filling 'oob_poi' with 0xFF's. So let's remove 'oob_required' check to
always read 'oob_poi' data for OOB.

Kernel driver (drivers/mtd/nand/raw/meson_nand.c) works in the same way,
so need to keep same behaviour here.

Fixes: c2e8c4d09a7a ("mtd: rawnand: Meson NAND controller support")
Signed-off-by: Arseniy Krasnov <avkrasnov@...>
---
drivers/mtd/nand/raw/meson_nand.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
index 81122315f4..82a12ac061 100644
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -607,9 +607,7 @@ static int meson_nfc_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *ch
memcpy(meson_chip->data_buf, buf, mtd->writesize);

memset(meson_chip->info_buf, 0, chip->ecc.steps * PER_INFO_BYTE);
-
- if (oob_required)
- meson_nfc_set_user_byte(chip, chip->oob_poi);
+ meson_nfc_set_user_byte(chip, chip->oob_poi);
Reviewed-by: Michael Trimarchi <michael@...>

I will queue it
Thanks. You mean it will be merged to ?



return meson_nfc_write_page_sub(chip, page, false);
}
--
2.30.1



--
Michael Nazzareno Trimarchi
Co-Founder & Chief Executive Officer
M. +39 347 913 2170
michael@...
__________________________________

Amarula Solutions BV
Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
T. +31 (0)85 111 9172
info@...
www.amarulasolutions.com


Arseniy Krasnov
 

If 'oob_required' is not set by the caller (for example 'oobbuf' is NULL),
then driver doesn't copy OOB data from 'oob_poi' to special controller
structures, so zeroes will be written as OOB. But, generic raw NAND logic
in 'nand_base.c' already handles case when OOB is not required to write by
filling 'oob_poi' with 0xFF's. So let's remove 'oob_required' check to
always read 'oob_poi' data for OOB.

Kernel driver (drivers/mtd/nand/raw/meson_nand.c) works in the same way,
so need to keep same behaviour here.

Fixes: c2e8c4d09a7a ("mtd: rawnand: Meson NAND controller support")
Signed-off-by: Arseniy Krasnov <avkrasnov@...>
---
drivers/mtd/nand/raw/meson_nand.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
index 81122315f4..82a12ac061 100644
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -607,9 +607,7 @@ static int meson_nfc_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *ch
memcpy(meson_chip->data_buf, buf, mtd->writesize);

memset(meson_chip->info_buf, 0, chip->ecc.steps * PER_INFO_BYTE);
-
- if (oob_required)
- meson_nfc_set_user_byte(chip, chip->oob_poi);
+ meson_nfc_set_user_byte(chip, chip->oob_poi);

return meson_nfc_write_page_sub(chip, page, false);
}
--
2.30.1


Michael Nazzareno Trimarchi
 

On Sun, Dec 22, 2024 at 10:23?PM Arseniy Krasnov
<avkrasnov@...> wrote:

If 'oob_required' is not set by the caller (for example 'oobbuf' is NULL),
then driver doesn't copy OOB data from 'oob_poi' to special controller
structures, so zeroes will be written as OOB. But, generic raw NAND logic
in 'nand_base.c' already handles case when OOB is not required to write by
filling 'oob_poi' with 0xFF's. So let's remove 'oob_required' check to
always read 'oob_poi' data for OOB.

Kernel driver (drivers/mtd/nand/raw/meson_nand.c) works in the same way,
so need to keep same behaviour here.

Fixes: c2e8c4d09a7a ("mtd: rawnand: Meson NAND controller support")
Signed-off-by: Arseniy Krasnov <avkrasnov@...>
---
drivers/mtd/nand/raw/meson_nand.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
index 81122315f4..82a12ac061 100644
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -607,9 +607,7 @@ static int meson_nfc_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *ch
memcpy(meson_chip->data_buf, buf, mtd->writesize);

memset(meson_chip->info_buf, 0, chip->ecc.steps * PER_INFO_BYTE);
-
- if (oob_required)
- meson_nfc_set_user_byte(chip, chip->oob_poi);
+ meson_nfc_set_user_byte(chip, chip->oob_poi);
Reviewed-by: Michael Trimarchi <michael@...>

I will queue it

return meson_nfc_write_page_sub(chip, page, false);
}
--
2.30.1


--
Michael Nazzareno Trimarchi
Co-Founder & Chief Executive Officer
M. +39 347 913 2170
michael@...
__________________________________

Amarula Solutions BV
Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
T. +31 (0)85 111 9172
info@...
www.amarulasolutions.com


Arseniy Krasnov
 

On 23.12.2024 15:57, Michael Nazzareno Trimarchi wrote:
On Sun, Dec 22, 2024 at 10:23?PM Arseniy Krasnov
<avkrasnov@...> wrote:

If 'oob_required' is not set by the caller (for example 'oobbuf' is NULL),
then driver doesn't copy OOB data from 'oob_poi' to special controller
structures, so zeroes will be written as OOB. But, generic raw NAND logic
in 'nand_base.c' already handles case when OOB is not required to write by
filling 'oob_poi' with 0xFF's. So let's remove 'oob_required' check to
always read 'oob_poi' data for OOB.

Kernel driver (drivers/mtd/nand/raw/meson_nand.c) works in the same way,
so need to keep same behaviour here.

Fixes: c2e8c4d09a7a ("mtd: rawnand: Meson NAND controller support")
Signed-off-by: Arseniy Krasnov <avkrasnov@...>
---
drivers/mtd/nand/raw/meson_nand.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
index 81122315f4..82a12ac061 100644
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -607,9 +607,7 @@ static int meson_nfc_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *ch
memcpy(meson_chip->data_buf, buf, mtd->writesize);

memset(meson_chip->info_buf, 0, chip->ecc.steps * PER_INFO_BYTE);
-
- if (oob_required)
- meson_nfc_set_user_byte(chip, chip->oob_poi);
+ meson_nfc_set_user_byte(chip, chip->oob_poi);
Reviewed-by: Michael Trimarchi <michael@...>

I will queue it
Thanks. You mean it will be merged to ?



return meson_nfc_write_page_sub(chip, page, false);
}
--
2.30.1


Arseniy Krasnov
 

Hi, sorry, but i don't see it merged. Is it ok?

Thanks

On 24.12.2024 16:56, Michael Nazzareno Trimarchi wrote:
Hi

Yes

Michael

On Tue, Dec 24, 2024 at 8:55?AM Arseniy Krasnov
<avkrasnov@...> wrote:



On 23.12.2024 15:57, Michael Nazzareno Trimarchi wrote:
On Sun, Dec 22, 2024 at 10:23?PM Arseniy Krasnov
<avkrasnov@...> wrote:

If 'oob_required' is not set by the caller (for example 'oobbuf' is NULL),
then driver doesn't copy OOB data from 'oob_poi' to special controller
structures, so zeroes will be written as OOB. But, generic raw NAND logic
in 'nand_base.c' already handles case when OOB is not required to write by
filling 'oob_poi' with 0xFF's. So let's remove 'oob_required' check to
always read 'oob_poi' data for OOB.

Kernel driver (drivers/mtd/nand/raw/meson_nand.c) works in the same way,
so need to keep same behaviour here.

Fixes: c2e8c4d09a7a ("mtd: rawnand: Meson NAND controller support")
Signed-off-by: Arseniy Krasnov <avkrasnov@...>
---
drivers/mtd/nand/raw/meson_nand.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/raw/meson_nand.c b/drivers/mtd/nand/raw/meson_nand.c
index 81122315f4..82a12ac061 100644
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -607,9 +607,7 @@ static int meson_nfc_write_page_hwecc(struct mtd_info *mtd, struct nand_chip *ch
memcpy(meson_chip->data_buf, buf, mtd->writesize);

memset(meson_chip->info_buf, 0, chip->ecc.steps * PER_INFO_BYTE);
-
- if (oob_required)
- meson_nfc_set_user_byte(chip, chip->oob_poi);
+ meson_nfc_set_user_byte(chip, chip->oob_poi);
Reviewed-by: Michael Trimarchi <michael@...>

I will queue it
Thanks. You mean it will be merged to ?



return meson_nfc_write_page_sub(chip, page, false);
}
--
2.30.1



Michael Nazzareno Trimarchi
 

Hi Arseniy

On Sun, Dec 22, 2024 at 10:23?PM Arseniy Krasnov <
avkrasnov@...> wrote:

If 'oob_required' is not set by the caller (for example 'oobbuf' is NULL),
then driver doesn't copy OOB data from 'oob_poi' to special controller
structures, so zeroes will be written as OOB. But, generic raw NAND logic
in 'nand_base.c' already handles case when OOB is not required to write by
filling 'oob_poi' with 0xFF's. So let's remove 'oob_required' check to
always read 'oob_poi' data for OOB.

Kernel driver (drivers/mtd/nand/raw/meson_nand.c) works in the same way,
so need to keep same behaviour here.

Fixes: c2e8c4d09a7a ("mtd: rawnand: Meson NAND controller support")
Signed-off-by: Arseniy Krasnov <avkrasnov@...>
---
drivers/mtd/nand/raw/meson_nand.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/raw/meson_nand.c
b/drivers/mtd/nand/raw/meson_nand.c
index 81122315f4..82a12ac061 100644
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -607,9 +607,7 @@ static int meson_nfc_write_page_hwecc(struct mtd_info
*mtd, struct nand_chip *ch
memcpy(meson_chip->data_buf, buf, mtd->writesize);

memset(meson_chip->info_buf, 0, chip->ecc.steps * PER_INFO_BYTE);
-
- if (oob_required)
- meson_nfc_set_user_byte(chip, chip->oob_poi);
+ meson_nfc_set_user_byte(chip, chip->oob_poi);

return meson_nfc_write_page_sub(chip, page, false);
}
Applied and sent already the pull request

Michael


--
2.30.1

--
Michael Nazzareno Trimarchi
Co-Founder & Chief Executive Officer
M. +39 347 913 2170
michael@...
__________________________________

Amarula Solutions BV
Joop Geesinkweg 125, 1114 AB, Amsterdam, NL
T. +31 (0)85 111 9172
info@...
www.amarulasolutions.com


Arseniy Krasnov
 

Hi, thanks!

On 17.03.2025 09:09, Michael Nazzareno Trimarchi wrote:
Hi Arseniy

On Sun, Dec 22, 2024 at 10:23?PM Arseniy Krasnov <
avkrasnov@...> wrote:

If 'oob_required' is not set by the caller (for example 'oobbuf' is NULL),
then driver doesn't copy OOB data from 'oob_poi' to special controller
structures, so zeroes will be written as OOB. But, generic raw NAND logic
in 'nand_base.c' already handles case when OOB is not required to write by
filling 'oob_poi' with 0xFF's. So let's remove 'oob_required' check to
always read 'oob_poi' data for OOB.

Kernel driver (drivers/mtd/nand/raw/meson_nand.c) works in the same way,
so need to keep same behaviour here.

Fixes: c2e8c4d09a7a ("mtd: rawnand: Meson NAND controller support")
Signed-off-by: Arseniy Krasnov <avkrasnov@...>
---
drivers/mtd/nand/raw/meson_nand.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/mtd/nand/raw/meson_nand.c
b/drivers/mtd/nand/raw/meson_nand.c
index 81122315f4..82a12ac061 100644
--- a/drivers/mtd/nand/raw/meson_nand.c
+++ b/drivers/mtd/nand/raw/meson_nand.c
@@ -607,9 +607,7 @@ static int meson_nfc_write_page_hwecc(struct mtd_info
*mtd, struct nand_chip *ch
memcpy(meson_chip->data_buf, buf, mtd->writesize);

memset(meson_chip->info_buf, 0, chip->ecc.steps * PER_INFO_BYTE);
-
- if (oob_required)
- meson_nfc_set_user_byte(chip, chip->oob_poi);
+ meson_nfc_set_user_byte(chip, chip->oob_poi);

return meson_nfc_write_page_sub(chip, page, false);
}
Applied and sent already the pull request

Michael


--
2.30.1