public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] nand_spl: Fix large page nand_command()
@ 2011-04-05 14:41 Alex
  2011-04-05 18:42 ` Scott Wood
  0 siblings, 1 reply; 6+ messages in thread
From: Alex @ 2011-04-05 14:41 UTC (permalink / raw)
  To: u-boot

From: Alex Waterman <awaterman@dawning.com>
Date: Tue, 5 Apr 2011 10:32:38 -0400
Subject: [PATCH] nand_spl: Fix large page nand_command()

The large page nand_command() function addresses all chips by byte offset;
when using a 16 bit chip the NAND_CMD_READOOB emulation would then address
the OOB as though it were a byte offset instead of a word offset. This leads
to addressing data that doesnt exist; to fix, simply divide the byte offset
by two.

Signed-off-by: Alex Waterman <awaterman@dawning.com>
---
 nand_spl/nand_boot.c |    5 ++++-
 1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/nand_spl/nand_boot.c b/nand_spl/nand_boot.c
index 76b8566..4ef9aea 100644
--- a/nand_spl/nand_boot.c
+++ b/nand_spl/nand_boot.c
@@ -86,7 +86,10 @@ static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8
 
     /* Emulate NAND_CMD_READOOB */
     if (cmd == NAND_CMD_READOOB) {
-        offs += CONFIG_SYS_NAND_PAGE_SIZE;
+        if ( this->options & NAND_BUSWIDTH_16 )
+            offs += (CONFIG_SYS_NAND_PAGE_SIZE >> 1);
+        else
+            offs += CONFIG_SYS_NAND_PAGE_SIZE;
         cmd = NAND_CMD_READ0;
     }
 
-- 
1.7.3.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH] nand_spl: Fix large page nand_command()
  2011-04-05 14:41 [U-Boot] [PATCH] nand_spl: Fix large page nand_command() Alex
@ 2011-04-05 18:42 ` Scott Wood
  2011-04-06 20:01   ` [U-Boot] [PATCH v2] " Alex Waterman
  0 siblings, 1 reply; 6+ messages in thread
From: Scott Wood @ 2011-04-05 18:42 UTC (permalink / raw)
  To: u-boot

On Tue, Apr 05, 2011 at 10:41:00AM -0400, Alex wrote:
> From: Alex Waterman <awaterman@dawning.com>
> Date: Tue, 5 Apr 2011 10:32:38 -0400
> Subject: [PATCH] nand_spl: Fix large page nand_command()
> 
> The large page nand_command() function addresses all chips by byte offset;
> when using a 16 bit chip the NAND_CMD_READOOB emulation would then address
> the OOB as though it were a byte offset instead of a word offset. This leads
> to addressing data that doesnt exist; to fix, simply divide the byte offset
> by two.
> 
> Signed-off-by: Alex Waterman <awaterman@dawning.com>
> ---

Patch is whitespace-damaged, and does not apply.  Please read:
http://www.denx.de/wiki/U-Boot/Patches

Also please make sure your full name is in the From: field, so
that the git commit authorship information is complete.

>  nand_spl/nand_boot.c |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)
> 
> diff --git a/nand_spl/nand_boot.c b/nand_spl/nand_boot.c
> index 76b8566..4ef9aea 100644
> --- a/nand_spl/nand_boot.c
> +++ b/nand_spl/nand_boot.c
> @@ -86,7 +86,10 @@ static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8
>  
>      /* Emulate NAND_CMD_READOOB */
>      if (cmd == NAND_CMD_READOOB) {
> -        offs += CONFIG_SYS_NAND_PAGE_SIZE;
> +        if ( this->options & NAND_BUSWIDTH_16 )

No space after ( or before )

> +            offs += (CONFIG_SYS_NAND_PAGE_SIZE >> 1);

Unnecessary parens

The semantics of this don't match what's done in the non-SPL code --
there the column/offs is assumed to be in bytes when passed to
nand_command(), and dividing by two happens later (after the READOOB
adjustment).

Don't we also need to fix nand_is_bad_block() to use a 16-bit access?

-Scott

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot]  [PATCH v2] nand_spl: Fix large page nand_command()
  2011-04-05 18:42 ` Scott Wood
@ 2011-04-06 20:01   ` Alex Waterman
  2011-04-11 18:58     ` Scott Wood
  2011-05-01 14:43     ` Wolfgang Denk
  0 siblings, 2 replies; 6+ messages in thread
From: Alex Waterman @ 2011-04-06 20:01 UTC (permalink / raw)
  To: u-boot

Sorry, I screwed up the settings in Thunderbird, hopefully I fixed the 
white space/name issues now.

About the patch not applying, I used git format-patch and git apply to
test the stuff locally, was that wrong?

Here is a revised patch, I hope this is better.

- Alex

From: Alex Waterman <awaterman@dawning.com>
Date: Wed, 6 Apr 2011 15:09:57 -0400
Subject: [PATCH] nand_spl: Fix large page nand_command()

This patch changes the large page nand_command() routine to use a word
offset instead of a byte offset. The 'offs' argument gets divided by 2
so that the offset passed to nand_command() is still by byte offset.
Originally, the offset was not shifted and when too high an offset was
requested the nand chip would attempt to read non-existent data.

Changes for v2:

 - Moved the offset calculation to outside of the OOB emulation code.
 - Hopefully no more whitespace mangling.

Signed-off-by: Alex Waterman <awaterman@dawning.com>
---
 nand_spl/nand_boot.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/nand_spl/nand_boot.c b/nand_spl/nand_boot.c
index 76b8566..4a96878 100644
--- a/nand_spl/nand_boot.c
+++ b/nand_spl/nand_boot.c
@@ -90,6 +90,10 @@ static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8
 		cmd = NAND_CMD_READ0;
 	}
 
+	/* Shift the offset from byte addressing to word addressing. */
+	if (this->options & NAND_BUSWIDTH_16)
+		offs >>= 1;
+
 	/* Begin command latch cycle */
 	this->cmd_ctrl(mtd, cmd, NAND_CTRL_CLE | NAND_CTRL_CHANGE);
 	/* Set ALE and clear CLE to start address cycle */
-- 1.7.3.1 

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH v2] nand_spl: Fix large page nand_command()
  2011-04-06 20:01   ` [U-Boot] [PATCH v2] " Alex Waterman
@ 2011-04-11 18:58     ` Scott Wood
  2011-05-01 14:43     ` Wolfgang Denk
  1 sibling, 0 replies; 6+ messages in thread
From: Scott Wood @ 2011-04-11 18:58 UTC (permalink / raw)
  To: u-boot

On Wed, Apr 06, 2011 at 04:01:52PM -0400, Alex Waterman wrote:
> Sorry, I screwed up the settings in Thunderbird, hopefully I fixed the 
> white space/name issues now.
> 
> About the patch not applying, I used git format-patch and git apply to
> test the stuff locally, was that wrong?
> 
> Here is a revised patch, I hope this is better.
> 
> - Alex

Applied to u-boot-nand-flash

For future reference, anything which is not supposed to be part
of the permanent changelog (including a description of changes
from the previous version) should go below the --- line.

-Scott

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH v2] nand_spl: Fix large page nand_command()
  2011-04-06 20:01   ` [U-Boot] [PATCH v2] " Alex Waterman
  2011-04-11 18:58     ` Scott Wood
@ 2011-05-01 14:43     ` Wolfgang Denk
  2011-05-03 16:08       ` Scott Wood
  1 sibling, 1 reply; 6+ messages in thread
From: Wolfgang Denk @ 2011-05-01 14:43 UTC (permalink / raw)
  To: u-boot

Dear Alex Waterman,

In message <4D9CC6B0.6020608@dawning.com> you wrote:
>
> This patch changes the large page nand_command() routine to use a word
> offset instead of a byte offset. The 'offs' argument gets divided by 2
> so that the offset passed to nand_command() is still by byte offset.
> Originally, the offset was not shifted and when too high an offset was
> requested the nand chip would attempt to read non-existent data.
> 
> Changes for v2:
> 
>  - Moved the offset calculation to outside of the OOB emulation code.
>  - Hopefully no more whitespace mangling.
> 
> Signed-off-by: Alex Waterman <awaterman@dawning.com>
> ---
>  nand_spl/nand_boot.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)

Unfortunately this patch breaks building of the canyonlands_nand and
glacier_nand configurations:

Configuring for canyonlands_nand - Board: canyonlands, Options: CANYONLANDS,NAND_U_BOOT,SYS_TEXT_BASE=0x01000000
ppc_6xx-ld: section .resetvec [e3003ffc -> e3003fff] overlaps section .bss.ndfc_cs [e3003ff4 -> e3004003]
make[1]: *** [/work/wd/tmp-ppc/nand_spl/u-boot-spl] Error 1
make: *** [nand_spl] Error 2
make: *** Waiting for unfinished jobs....
ppc_6xx-size: '/work/wd/tmp-ppc/u-boot': No such file

Configuring for glacier_nand - Board: canyonlands, Options: GLACIER,NAND_U_BOOT,SYS_TEXT_BASE=0x01000000
ppc_6xx-ld: section .resetvec [e3003ffc -> e3003fff] overlaps section .bss.ndfc_cs [e3003ff4 -> e3004003]
make[1]: *** [/work/wd/tmp-ppc/nand_spl/u-boot-spl] Error 1
make: *** [nand_spl] Error 2
make: *** Waiting for unfinished jobs....
ppc_6xx-size: '/work/wd/tmp-ppc/u-boot': No such file


Git bisect says:

65a9db7be0868be91ba81b9b5bf821de82e6d9b0 is the first bad commit
commit 65a9db7be0868be91ba81b9b5bf821de82e6d9b0
Author: Alex Waterman <awaterman@dawning.com>
Date:   Wed Apr 6 16:01:52 2011 -0400

    nand_spl: Fix large page nand_command()


Can you please provide a fix?  Thanks.


Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
"Security is mostly a superstition. It does not  exist  in  nature...
Life is either a daring adventure or nothing."         - Helen Keller

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [U-Boot] [PATCH v2] nand_spl: Fix large page nand_command()
  2011-05-01 14:43     ` Wolfgang Denk
@ 2011-05-03 16:08       ` Scott Wood
  0 siblings, 0 replies; 6+ messages in thread
From: Scott Wood @ 2011-05-03 16:08 UTC (permalink / raw)
  To: u-boot

On Sun, 1 May 2011 16:43:30 +0200
Wolfgang Denk <wd@denx.de> wrote:

> Dear Alex Waterman,
> 
> In message <4D9CC6B0.6020608@dawning.com> you wrote:
> >
> > This patch changes the large page nand_command() routine to use a word
> > offset instead of a byte offset. The 'offs' argument gets divided by 2
> > so that the offset passed to nand_command() is still by byte offset.
> > Originally, the offset was not shifted and when too high an offset was
> > requested the nand chip would attempt to read non-existent data.
> > 
> > Changes for v2:
> > 
> >  - Moved the offset calculation to outside of the OOB emulation code.
> >  - Hopefully no more whitespace mangling.
> > 
> > Signed-off-by: Alex Waterman <awaterman@dawning.com>
> > ---
> >  nand_spl/nand_boot.c |    4 ++++
> >  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> Unfortunately this patch breaks building of the canyonlands_nand and
> glacier_nand configurations:
> 
> Configuring for canyonlands_nand - Board: canyonlands, Options: CANYONLANDS,NAND_U_BOOT,SYS_TEXT_BASE=0x01000000
> ppc_6xx-ld: section .resetvec [e3003ffc -> e3003fff] overlaps section .bss.ndfc_cs [e3003ff4 -> e3004003]
> make[1]: *** [/work/wd/tmp-ppc/nand_spl/u-boot-spl] Error 1
> make: *** [nand_spl] Error 2
> make: *** Waiting for unfinished jobs....
> ppc_6xx-size: '/work/wd/tmp-ppc/u-boot': No such file
> 
> Configuring for glacier_nand - Board: canyonlands, Options: GLACIER,NAND_U_BOOT,SYS_TEXT_BASE=0x01000000
> ppc_6xx-ld: section .resetvec [e3003ffc -> e3003fff] overlaps section .bss.ndfc_cs [e3003ff4 -> e3004003]
> make[1]: *** [/work/wd/tmp-ppc/nand_spl/u-boot-spl] Error 1
> make: *** [nand_spl] Error 2
> make: *** Waiting for unfinished jobs....
> ppc_6xx-size: '/work/wd/tmp-ppc/u-boot': No such file

They build for me with GCC 4.5.1 -- probably right on the edge of the code
size limit.

-Scott

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-05-03 16:08 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-05 14:41 [U-Boot] [PATCH] nand_spl: Fix large page nand_command() Alex
2011-04-05 18:42 ` Scott Wood
2011-04-06 20:01   ` [U-Boot] [PATCH v2] " Alex Waterman
2011-04-11 18:58     ` Scott Wood
2011-05-01 14:43     ` Wolfgang Denk
2011-05-03 16:08       ` Scott Wood

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox