[3/3] doc: imx: Add documentation for nandbcb command

Message ID 20190614073535.12502-3-shyam.saini@amarulasolutions.com
State New
Headers show
Series
  • [v6,1/3] i.MX6: nand: add nandbcb command for imx
Related show

Commit Message

Shyam Saini June 14, 2019, 7:35 a.m. UTC
Signed-off-by: Shyam Saini <shyam.saini@amarulasolutions.com>
---
 doc/imx/common/imx6.txt | 74 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

Comments

Lukasz Majewski June 14, 2019, 8:37 a.m. UTC | #1
Hi Shyam,

> Signed-off-by: Shyam Saini <shyam.saini@amarulasolutions.com>
> ---
>  doc/imx/common/imx6.txt | 74
> +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74
> insertions(+)
> 
> diff --git a/doc/imx/common/imx6.txt b/doc/imx/common/imx6.txt
> index eab88353f6..0b5061128c 100644
> --- a/doc/imx/common/imx6.txt
> +++ b/doc/imx/common/imx6.txt
> @@ -88,3 +88,77 @@ Reading bank 4:
>  
>  Word 0x00000002: 9f027772 00000004
>  
> +NAND Boot on i.MX6 with SPL support
> +--------------------------------------
> +
> +Writing/updating boot image in nand device is not straight forward in
> +i.MX6 platform and it requires boot control block(BCB) to be
> configured. +
> +BCB contains two data structures, Firmware Configuration Block(FCB)
> and +Discovered Bad Block Table(DBBT). FCB has nand timings, DBBT
> search area, +and firmware. See IMX6DQRM Section 8.5.2.2
> +for more information.
> +
> +We can't use 'nand write' command to write SPL/firmware image
> directly +like other platforms does. So we need special setup to
> write BCB block +as per IMX6QDL reference manual 'nandbcb update'
> command do that job. +
> +for nand boot, up on reset bootrom look for FCB structure in
> +first block's if FCB found the nand timings are loaded for
> +further reads. once FCB read done, DTTB will be loaded and
> +finally firmware will be loaded which is boot image.
> +
> +cmd_nandbcb will create FCB these structures
> +by taking mtd partition as an example.

I think that the above sentence has a wrong order. Could you rewrite it?

> +- initial code will erase entire partition
> +- followed by FCB setup, like first 2 blocks for FCB/DBBT write,
> +  and next block for FW1/SPL
> +- write firmware at FW1 block and
> +- finally write fcb/dttb in first 2 block.
> +
> +Typical NAND BCB layout:
> +=======================
> +
> +   no.of blocks = partition size / erasesize
> +   no.of fcb/dbbt blocks = 2
> +   FW1 offset = no.of fcb/dbbt
> +
> +block  0          1          2
> +        -------------------------------
> +       |FCB/DBBT 0|FCB/DBBT 1|  FW 1  |
> +       --------------------------------
> +
> +On summary, nandbcb update will
> +- erase the entire partition
> +- create BCB by creating 2 FCB/BDDT block followed by
> +  1 FW blocks based on partition size and erasesize.
> +- fill FCB/DBBT structures
> +- write FW/SPL in FW1
> +- write FCB/DBBT in first 2 blocks
> +
> +step-1: write SPL
> +
> +icorem6qdl> ext4load mmc 0:1 $loadaddr SPL  
> +39936 bytes read in 10 ms (3.8 MiB/s)
> +
> +icorem6qdl> nandbcb update $loadaddr spl $filesize  
> +device 0 offset 0x0, size 0x9c00
> +Erasing at 0x1c0000 -- 100% complete.
> +NAND fw write: 0x80000 offset, 0xb000 bytes written: OK
> +
> +step-2: write u-boot-dtb.img
> +
> +icorem6qdl> nand erase.part uboot  
> +
> +NAND erase.part: device 0 offset 0x200000, size 0x200000
> +Erasing at 0x3c0000 -- 100% complete.
> +OK
> +
> +icorem6qdl> ext4load mmc 0:1 $loadaddr u-boot-dtb.img  
> +589094 bytes read in 37 ms (15.2 MiB/s)
> +
> +icorem6qdl> nand write ${loadaddr} uboot ${filesize}  
> +
> +NAND write: device 0 offset 0x200000, size 0x8fd26
> + 589094 bytes written: OK
> +icorem6qdl>  

Would it be possible to provide nandbcb show command (I guess that I
can dump it with plain nand read)?

It would present the FCB/DBBT structure. Do you think it is
needed/feasible ?

Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Shyam Saini June 18, 2019, 7:57 a.m. UTC | #2
Hi Lukasz,


> Hi Shyam,
>
> > Signed-off-by: Shyam Saini <shyam.saini@amarulasolutions.com>
> > ---
> >  doc/imx/common/imx6.txt | 74
> > +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74
> > insertions(+)
> >
> > diff --git a/doc/imx/common/imx6.txt b/doc/imx/common/imx6.txt
> > index eab88353f6..0b5061128c 100644
> > --- a/doc/imx/common/imx6.txt
> > +++ b/doc/imx/common/imx6.txt
> > @@ -88,3 +88,77 @@ Reading bank 4:
> >
> >  Word 0x00000002: 9f027772 00000004
> >
> > +NAND Boot on i.MX6 with SPL support
> > +--------------------------------------
> > +
> > +Writing/updating boot image in nand device is not straight forward in
> > +i.MX6 platform and it requires boot control block(BCB) to be
> > configured. +
> > +BCB contains two data structures, Firmware Configuration Block(FCB)
> > and +Discovered Bad Block Table(DBBT). FCB has nand timings, DBBT
> > search area, +and firmware. See IMX6DQRM Section 8.5.2.2
> > +for more information.
> > +
> > +We can't use 'nand write' command to write SPL/firmware image
> > directly +like other platforms does. So we need special setup to
> > write BCB block +as per IMX6QDL reference manual 'nandbcb update'
> > command do that job. +
> > +for nand boot, up on reset bootrom look for FCB structure in
> > +first block's if FCB found the nand timings are loaded for
> > +further reads. once FCB read done, DTTB will be loaded and
> > +finally firmware will be loaded which is boot image.
> > +
> > +cmd_nandbcb will create FCB these structures
> > +by taking mtd partition as an example.
>
> I think that the above sentence has a wrong order. Could you rewrite it?
I'll fix this in next version.

>
> > +- initial code will erase entire partition
> > +- followed by FCB setup, like first 2 blocks for FCB/DBBT write,
> > +  and next block for FW1/SPL
> > +- write firmware at FW1 block and
> > +- finally write fcb/dttb in first 2 block.
> > +
> > +Typical NAND BCB layout:
> > +=======================
> > +
> > +   no.of blocks = partition size / erasesize
> > +   no.of fcb/dbbt blocks = 2
> > +   FW1 offset = no.of fcb/dbbt
> > +
> > +block  0          1          2
> > +        -------------------------------
> > +       |FCB/DBBT 0|FCB/DBBT 1|  FW 1  |
> > +       --------------------------------
> > +
> > +On summary, nandbcb update will
> > +- erase the entire partition
> > +- create BCB by creating 2 FCB/BDDT block followed by
> > +  1 FW blocks based on partition size and erasesize.
> > +- fill FCB/DBBT structures
> > +- write FW/SPL in FW1
> > +- write FCB/DBBT in first 2 blocks
> > +
> > +step-1: write SPL
> > +
> > +icorem6qdl> ext4load mmc 0:1 $loadaddr SPL
> > +39936 bytes read in 10 ms (3.8 MiB/s)
> > +
> > +icorem6qdl> nandbcb update $loadaddr spl $filesize
> > +device 0 offset 0x0, size 0x9c00
> > +Erasing at 0x1c0000 -- 100% complete.
> > +NAND fw write: 0x80000 offset, 0xb000 bytes written: OK
> > +
> > +step-2: write u-boot-dtb.img
> > +
> > +icorem6qdl> nand erase.part uboot
> > +
> > +NAND erase.part: device 0 offset 0x200000, size 0x200000
> > +Erasing at 0x3c0000 -- 100% complete.
> > +OK
> > +
> > +icorem6qdl> ext4load mmc 0:1 $loadaddr u-boot-dtb.img
> > +589094 bytes read in 37 ms (15.2 MiB/s)
> > +
> > +icorem6qdl> nand write ${loadaddr} uboot ${filesize}
> > +
> > +NAND write: device 0 offset 0x200000, size 0x8fd26
> > + 589094 bytes written: OK
> > +icorem6qdl>
>
> Would it be possible to provide nandbcb show command (I guess that I
> can dump it with plain nand read)?

As of now, fcb/dbbt structure are set only with nandbcb command
so before "nand info" we have to run nandbcb atleast once.

If we consider kobs-ng in linux it prints fcb content when we write some image
so it means fcb is already populated at that time.

> It would present the FCB/DBBT structure. Do you think it is
> needed/feasible ?

Not sure if is it needed or not
if you have any proposal or suggestion about this then please let me know.

Thanks a lot,
Shyam





> Best regards,
>
> Lukasz Majewski
>
> --
>
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Lukasz Majewski June 18, 2019, 8:04 a.m. UTC | #3
On Tue, 18 Jun 2019 13:27:13 +0530
Shyam Saini <shyam.saini@amarulasolutions.com> wrote:

> Hi Lukasz,
> 
> 
> > Hi Shyam,
> >  
> > > Signed-off-by: Shyam Saini <shyam.saini@amarulasolutions.com>
> > > ---
> > >  doc/imx/common/imx6.txt | 74
> > > +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed,
> > > 74 insertions(+)
> > >
> > > diff --git a/doc/imx/common/imx6.txt b/doc/imx/common/imx6.txt
> > > index eab88353f6..0b5061128c 100644
> > > --- a/doc/imx/common/imx6.txt
> > > +++ b/doc/imx/common/imx6.txt
> > > @@ -88,3 +88,77 @@ Reading bank 4:
> > >
> > >  Word 0x00000002: 9f027772 00000004
> > >
> > > +NAND Boot on i.MX6 with SPL support
> > > +--------------------------------------
> > > +
> > > +Writing/updating boot image in nand device is not straight
> > > forward in +i.MX6 platform and it requires boot control
> > > block(BCB) to be configured. +
> > > +BCB contains two data structures, Firmware Configuration
> > > Block(FCB) and +Discovered Bad Block Table(DBBT). FCB has nand
> > > timings, DBBT search area, +and firmware. See IMX6DQRM Section
> > > 8.5.2.2 +for more information.
> > > +
> > > +We can't use 'nand write' command to write SPL/firmware image
> > > directly +like other platforms does. So we need special setup to
> > > write BCB block +as per IMX6QDL reference manual 'nandbcb update'
> > > command do that job. +
> > > +for nand boot, up on reset bootrom look for FCB structure in
> > > +first block's if FCB found the nand timings are loaded for
> > > +further reads. once FCB read done, DTTB will be loaded and
> > > +finally firmware will be loaded which is boot image.
> > > +
> > > +cmd_nandbcb will create FCB these structures
> > > +by taking mtd partition as an example.  
> >
> > I think that the above sentence has a wrong order. Could you
> > rewrite it?  
> I'll fix this in next version.
> 
> >  
> > > +- initial code will erase entire partition
> > > +- followed by FCB setup, like first 2 blocks for FCB/DBBT write,
> > > +  and next block for FW1/SPL
> > > +- write firmware at FW1 block and
> > > +- finally write fcb/dttb in first 2 block.
> > > +
> > > +Typical NAND BCB layout:
> > > +=======================
> > > +
> > > +   no.of blocks = partition size / erasesize
> > > +   no.of fcb/dbbt blocks = 2
> > > +   FW1 offset = no.of fcb/dbbt
> > > +
> > > +block  0          1          2
> > > +        -------------------------------
> > > +       |FCB/DBBT 0|FCB/DBBT 1|  FW 1  |
> > > +       --------------------------------
> > > +
> > > +On summary, nandbcb update will
> > > +- erase the entire partition
> > > +- create BCB by creating 2 FCB/BDDT block followed by
> > > +  1 FW blocks based on partition size and erasesize.
> > > +- fill FCB/DBBT structures
> > > +- write FW/SPL in FW1
> > > +- write FCB/DBBT in first 2 blocks
> > > +
> > > +step-1: write SPL
> > > +  
> > > +icorem6qdl> ext4load mmc 0:1 $loadaddr SPL  
> > > +39936 bytes read in 10 ms (3.8 MiB/s)
> > > +  
> > > +icorem6qdl> nandbcb update $loadaddr spl $filesize  
> > > +device 0 offset 0x0, size 0x9c00
> > > +Erasing at 0x1c0000 -- 100% complete.
> > > +NAND fw write: 0x80000 offset, 0xb000 bytes written: OK
> > > +
> > > +step-2: write u-boot-dtb.img
> > > +  
> > > +icorem6qdl> nand erase.part uboot  
> > > +
> > > +NAND erase.part: device 0 offset 0x200000, size 0x200000
> > > +Erasing at 0x3c0000 -- 100% complete.
> > > +OK
> > > +  
> > > +icorem6qdl> ext4load mmc 0:1 $loadaddr u-boot-dtb.img  
> > > +589094 bytes read in 37 ms (15.2 MiB/s)
> > > +  
> > > +icorem6qdl> nand write ${loadaddr} uboot ${filesize}  
> > > +
> > > +NAND write: device 0 offset 0x200000, size 0x8fd26
> > > + 589094 bytes written: OK  
> > > +icorem6qdl>  
> >
> > Would it be possible to provide nandbcb show command (I guess that I
> > can dump it with plain nand read)?  
> 
> As of now, fcb/dbbt structure are set only with nandbcb command
> so before "nand info" we have to run nandbcb atleast once.
> 
> If we consider kobs-ng in linux it prints fcb content when we write
> some image so it means fcb is already populated at that time.
> 
> > It would present the FCB/DBBT structure. Do you think it is
> > needed/feasible ?  
> 
> Not sure if is it needed or not
> if you have any proposal or suggestion about this then please let me
> know.

The idea/use case which I do think of is as follows:

1. I do receive a board with BCB written by bootloader from board
vendor. It has parameters to configure the nand

2. I do use some command to read those parameters - to avoid situation
that I lost them after first update (nand dump shall do the trick +
hexeditor). Those parameters would be presented in a form easier to
read/store than ones from hexeditor

3. I use nandbcb command to store those values read previously.

> 
> Thanks a lot,
> Shyam
> 
> 
> 
> 
> 
> > Best regards,
> >
> > Lukasz Majewski
> >
> > --
> >
> > DENX Software Engineering GmbH,      Managing Director: Wolfgang
> > Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell,
> > Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email:
> > lukma@denx.de  




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Shyam Saini June 18, 2019, 8:28 a.m. UTC | #4
> On Tue, 18 Jun 2019 13:27:13 +0530
> Shyam Saini <shyam.saini@amarulasolutions.com> wrote:
>
> > Hi Lukasz,
> >
> >
> > > Hi Shyam,
> > >
> > > > Signed-off-by: Shyam Saini <shyam.saini@amarulasolutions.com>
> > > > ---
> > > >  doc/imx/common/imx6.txt | 74
> > > > +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed,
> > > > 74 insertions(+)
> > > >
> > > > diff --git a/doc/imx/common/imx6.txt b/doc/imx/common/imx6.txt
> > > > index eab88353f6..0b5061128c 100644
> > > > --- a/doc/imx/common/imx6.txt
> > > > +++ b/doc/imx/common/imx6.txt
> > > > @@ -88,3 +88,77 @@ Reading bank 4:
> > > >
> > > >  Word 0x00000002: 9f027772 00000004
> > > >
> > > > +NAND Boot on i.MX6 with SPL support
> > > > +--------------------------------------
> > > > +
> > > > +Writing/updating boot image in nand device is not straight
> > > > forward in +i.MX6 platform and it requires boot control
> > > > block(BCB) to be configured. +
> > > > +BCB contains two data structures, Firmware Configuration
> > > > Block(FCB) and +Discovered Bad Block Table(DBBT). FCB has nand
> > > > timings, DBBT search area, +and firmware. See IMX6DQRM Section
> > > > 8.5.2.2 +for more information.
> > > > +
> > > > +We can't use 'nand write' command to write SPL/firmware image
> > > > directly +like other platforms does. So we need special setup to
> > > > write BCB block +as per IMX6QDL reference manual 'nandbcb update'
> > > > command do that job. +
> > > > +for nand boot, up on reset bootrom look for FCB structure in
> > > > +first block's if FCB found the nand timings are loaded for
> > > > +further reads. once FCB read done, DTTB will be loaded and
> > > > +finally firmware will be loaded which is boot image.
> > > > +
> > > > +cmd_nandbcb will create FCB these structures
> > > > +by taking mtd partition as an example.
> > >
> > > I think that the above sentence has a wrong order. Could you
> > > rewrite it?
> > I'll fix this in next version.
> >
> > >
> > > > +- initial code will erase entire partition
> > > > +- followed by FCB setup, like first 2 blocks for FCB/DBBT write,
> > > > +  and next block for FW1/SPL
> > > > +- write firmware at FW1 block and
> > > > +- finally write fcb/dttb in first 2 block.
> > > > +
> > > > +Typical NAND BCB layout:
> > > > +=======================
> > > > +
> > > > +   no.of blocks = partition size / erasesize
> > > > +   no.of fcb/dbbt blocks = 2
> > > > +   FW1 offset = no.of fcb/dbbt
> > > > +
> > > > +block  0          1          2
> > > > +        -------------------------------
> > > > +       |FCB/DBBT 0|FCB/DBBT 1|  FW 1  |
> > > > +       --------------------------------
> > > > +
> > > > +On summary, nandbcb update will
> > > > +- erase the entire partition
> > > > +- create BCB by creating 2 FCB/BDDT block followed by
> > > > +  1 FW blocks based on partition size and erasesize.
> > > > +- fill FCB/DBBT structures
> > > > +- write FW/SPL in FW1
> > > > +- write FCB/DBBT in first 2 blocks
> > > > +
> > > > +step-1: write SPL
> > > > +
> > > > +icorem6qdl> ext4load mmc 0:1 $loadaddr SPL
> > > > +39936 bytes read in 10 ms (3.8 MiB/s)
> > > > +
> > > > +icorem6qdl> nandbcb update $loadaddr spl $filesize
> > > > +device 0 offset 0x0, size 0x9c00
> > > > +Erasing at 0x1c0000 -- 100% complete.
> > > > +NAND fw write: 0x80000 offset, 0xb000 bytes written: OK
> > > > +
> > > > +step-2: write u-boot-dtb.img
> > > > +
> > > > +icorem6qdl> nand erase.part uboot
> > > > +
> > > > +NAND erase.part: device 0 offset 0x200000, size 0x200000
> > > > +Erasing at 0x3c0000 -- 100% complete.
> > > > +OK
> > > > +
> > > > +icorem6qdl> ext4load mmc 0:1 $loadaddr u-boot-dtb.img
> > > > +589094 bytes read in 37 ms (15.2 MiB/s)
> > > > +
> > > > +icorem6qdl> nand write ${loadaddr} uboot ${filesize}
> > > > +
> > > > +NAND write: device 0 offset 0x200000, size 0x8fd26
> > > > + 589094 bytes written: OK
> > > > +icorem6qdl>
> > >
> > > Would it be possible to provide nandbcb show command (I guess that I
> > > can dump it with plain nand read)?
> >
> > As of now, fcb/dbbt structure are set only with nandbcb command
> > so before "nand info" we have to run nandbcb atleast once.
> >
> > If we consider kobs-ng in linux it prints fcb content when we write
> > some image so it means fcb is already populated at that time.
> >
> > > It would present the FCB/DBBT structure. Do you think it is
> > > needed/feasible ?
> >
> > Not sure if is it needed or not
> > if you have any proposal or suggestion about this then please let me
> > know.
>
> The idea/use case which I do think of is as follows:
>
> 1. I do receive a board with BCB written by bootloader from board
> vendor. It has parameters to configure the nand
>
> 2. I do use some command to read those parameters - to avoid situation
> that I lost them after first update (nand dump shall do the trick +
> hexeditor). Those parameters would be presented in a form easier to
> read/store than ones from hexeditor
>
> 3. I use nandbcb command to store those values read previously.

okay, it means simply printing fcb structure elements no matter it is
populated or not.
Is this you are suggesting ?

>
> >
> > Thanks a lot,
> > Shyam
> >
> >
> >
> >
> >
> > > Best regards,
> > >
> > > Lukasz Majewski
> > >
> > > --
> > >
> > > DENX Software Engineering GmbH,      Managing Director: Wolfgang
> > > Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell,
> > > Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email:
> > > lukma@denx.de
>
>
>
>
> Best regards,
>
> Lukasz Majewski
>
> --
>
> DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
> HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
> Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
Lukasz Majewski June 18, 2019, 8:36 a.m. UTC | #5
On Tue, 18 Jun 2019 13:58:38 +0530
Shyam Saini <shyam.saini@amarulasolutions.com> wrote:

> > On Tue, 18 Jun 2019 13:27:13 +0530
> > Shyam Saini <shyam.saini@amarulasolutions.com> wrote:
> >  
> > > Hi Lukasz,
> > >
> > >  
> > > > Hi Shyam,
> > > >  
> > > > > Signed-off-by: Shyam Saini <shyam.saini@amarulasolutions.com>
> > > > > ---
> > > > >  doc/imx/common/imx6.txt | 74
> > > > > +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file
> > > > > changed, 74 insertions(+)
> > > > >
> > > > > diff --git a/doc/imx/common/imx6.txt b/doc/imx/common/imx6.txt
> > > > > index eab88353f6..0b5061128c 100644
> > > > > --- a/doc/imx/common/imx6.txt
> > > > > +++ b/doc/imx/common/imx6.txt
> > > > > @@ -88,3 +88,77 @@ Reading bank 4:
> > > > >
> > > > >  Word 0x00000002: 9f027772 00000004
> > > > >
> > > > > +NAND Boot on i.MX6 with SPL support
> > > > > +--------------------------------------
> > > > > +
> > > > > +Writing/updating boot image in nand device is not straight
> > > > > forward in +i.MX6 platform and it requires boot control
> > > > > block(BCB) to be configured. +
> > > > > +BCB contains two data structures, Firmware Configuration
> > > > > Block(FCB) and +Discovered Bad Block Table(DBBT). FCB has nand
> > > > > timings, DBBT search area, +and firmware. See IMX6DQRM Section
> > > > > 8.5.2.2 +for more information.
> > > > > +
> > > > > +We can't use 'nand write' command to write SPL/firmware image
> > > > > directly +like other platforms does. So we need special setup
> > > > > to write BCB block +as per IMX6QDL reference manual 'nandbcb
> > > > > update' command do that job. +
> > > > > +for nand boot, up on reset bootrom look for FCB structure in
> > > > > +first block's if FCB found the nand timings are loaded for
> > > > > +further reads. once FCB read done, DTTB will be loaded and
> > > > > +finally firmware will be loaded which is boot image.
> > > > > +
> > > > > +cmd_nandbcb will create FCB these structures
> > > > > +by taking mtd partition as an example.  
> > > >
> > > > I think that the above sentence has a wrong order. Could you
> > > > rewrite it?  
> > > I'll fix this in next version.
> > >  
> > > >  
> > > > > +- initial code will erase entire partition
> > > > > +- followed by FCB setup, like first 2 blocks for FCB/DBBT
> > > > > write,
> > > > > +  and next block for FW1/SPL
> > > > > +- write firmware at FW1 block and
> > > > > +- finally write fcb/dttb in first 2 block.
> > > > > +
> > > > > +Typical NAND BCB layout:
> > > > > +=======================
> > > > > +
> > > > > +   no.of blocks = partition size / erasesize
> > > > > +   no.of fcb/dbbt blocks = 2
> > > > > +   FW1 offset = no.of fcb/dbbt
> > > > > +
> > > > > +block  0          1          2
> > > > > +        -------------------------------
> > > > > +       |FCB/DBBT 0|FCB/DBBT 1|  FW 1  |
> > > > > +       --------------------------------
> > > > > +
> > > > > +On summary, nandbcb update will
> > > > > +- erase the entire partition
> > > > > +- create BCB by creating 2 FCB/BDDT block followed by
> > > > > +  1 FW blocks based on partition size and erasesize.
> > > > > +- fill FCB/DBBT structures
> > > > > +- write FW/SPL in FW1
> > > > > +- write FCB/DBBT in first 2 blocks
> > > > > +
> > > > > +step-1: write SPL
> > > > > +  
> > > > > +icorem6qdl> ext4load mmc 0:1 $loadaddr SPL  
> > > > > +39936 bytes read in 10 ms (3.8 MiB/s)
> > > > > +  
> > > > > +icorem6qdl> nandbcb update $loadaddr spl $filesize  
> > > > > +device 0 offset 0x0, size 0x9c00
> > > > > +Erasing at 0x1c0000 -- 100% complete.
> > > > > +NAND fw write: 0x80000 offset, 0xb000 bytes written: OK
> > > > > +
> > > > > +step-2: write u-boot-dtb.img
> > > > > +  
> > > > > +icorem6qdl> nand erase.part uboot  
> > > > > +
> > > > > +NAND erase.part: device 0 offset 0x200000, size 0x200000
> > > > > +Erasing at 0x3c0000 -- 100% complete.
> > > > > +OK
> > > > > +  
> > > > > +icorem6qdl> ext4load mmc 0:1 $loadaddr u-boot-dtb.img  
> > > > > +589094 bytes read in 37 ms (15.2 MiB/s)
> > > > > +  
> > > > > +icorem6qdl> nand write ${loadaddr} uboot ${filesize}  
> > > > > +
> > > > > +NAND write: device 0 offset 0x200000, size 0x8fd26
> > > > > + 589094 bytes written: OK  
> > > > > +icorem6qdl>  
> > > >
> > > > Would it be possible to provide nandbcb show command (I guess
> > > > that I can dump it with plain nand read)?  
> > >
> > > As of now, fcb/dbbt structure are set only with nandbcb command
> > > so before "nand info" we have to run nandbcb atleast once.
> > >
> > > If we consider kobs-ng in linux it prints fcb content when we
> > > write some image so it means fcb is already populated at that
> > > time. 
> > > > It would present the FCB/DBBT structure. Do you think it is
> > > > needed/feasible ?  
> > >
> > > Not sure if is it needed or not
> > > if you have any proposal or suggestion about this then please let
> > > me know.  
> >
> > The idea/use case which I do think of is as follows:
> >
> > 1. I do receive a board with BCB written by bootloader from board
> > vendor. It has parameters to configure the nand
> >
> > 2. I do use some command to read those parameters - to avoid
> > situation that I lost them after first update (nand dump shall do
> > the trick + hexeditor). Those parameters would be presented in a
> > form easier to read/store than ones from hexeditor
> >
> > 3. I use nandbcb command to store those values read previously.  
> 
> okay, it means simply printing fcb structure elements no matter it is
> populated or not.
> Is this you are suggesting ?

I think yes. To have it in a more readable format.

> 
> >  
> > >
> > > Thanks a lot,
> > > Shyam
> > >
> > >
> > >
> > >
> > >  
> > > > Best regards,
> > > >
> > > > Lukasz Majewski
> > > >
> > > > --
> > > >
> > > > DENX Software Engineering GmbH,      Managing Director: Wolfgang
> > > > Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194
> > > > Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax:
> > > > (+49)-8142-66989-80 Email: lukma@denx.de  
> >
> >
> >
> >
> > Best regards,
> >
> > Lukasz Majewski
> >
> > --
> >
> > DENX Software Engineering GmbH,      Managing Director: Wolfgang
> > Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell,
> > Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email:
> > lukma@denx.de  




Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

Patch

diff --git a/doc/imx/common/imx6.txt b/doc/imx/common/imx6.txt
index eab88353f6..0b5061128c 100644
--- a/doc/imx/common/imx6.txt
+++ b/doc/imx/common/imx6.txt
@@ -88,3 +88,77 @@  Reading bank 4:
 
 Word 0x00000002: 9f027772 00000004
 
+NAND Boot on i.MX6 with SPL support
+--------------------------------------
+
+Writing/updating boot image in nand device is not straight forward in
+i.MX6 platform and it requires boot control block(BCB) to be configured.
+
+BCB contains two data structures, Firmware Configuration Block(FCB) and
+Discovered Bad Block Table(DBBT). FCB has nand timings, DBBT search area,
+and firmware. See IMX6DQRM Section 8.5.2.2
+for more information.
+
+We can't use 'nand write' command to write SPL/firmware image directly
+like other platforms does. So we need special setup to write BCB block
+as per IMX6QDL reference manual 'nandbcb update' command do that job.
+
+for nand boot, up on reset bootrom look for FCB structure in
+first block's if FCB found the nand timings are loaded for
+further reads. once FCB read done, DTTB will be loaded and
+finally firmware will be loaded which is boot image.
+
+cmd_nandbcb will create FCB these structures
+by taking mtd partition as an example.
+- initial code will erase entire partition
+- followed by FCB setup, like first 2 blocks for FCB/DBBT write,
+  and next block for FW1/SPL
+- write firmware at FW1 block and
+- finally write fcb/dttb in first 2 block.
+
+Typical NAND BCB layout:
+=======================
+
+   no.of blocks = partition size / erasesize
+   no.of fcb/dbbt blocks = 2
+   FW1 offset = no.of fcb/dbbt
+
+block  0          1          2
+        -------------------------------
+       |FCB/DBBT 0|FCB/DBBT 1|  FW 1  |
+       --------------------------------
+
+On summary, nandbcb update will
+- erase the entire partition
+- create BCB by creating 2 FCB/BDDT block followed by
+  1 FW blocks based on partition size and erasesize.
+- fill FCB/DBBT structures
+- write FW/SPL in FW1
+- write FCB/DBBT in first 2 blocks
+
+step-1: write SPL
+
+icorem6qdl> ext4load mmc 0:1 $loadaddr SPL
+39936 bytes read in 10 ms (3.8 MiB/s)
+
+icorem6qdl> nandbcb update $loadaddr spl $filesize
+device 0 offset 0x0, size 0x9c00
+Erasing at 0x1c0000 -- 100% complete.
+NAND fw write: 0x80000 offset, 0xb000 bytes written: OK
+
+step-2: write u-boot-dtb.img
+
+icorem6qdl> nand erase.part uboot
+
+NAND erase.part: device 0 offset 0x200000, size 0x200000
+Erasing at 0x3c0000 -- 100% complete.
+OK
+
+icorem6qdl> ext4load mmc 0:1 $loadaddr u-boot-dtb.img
+589094 bytes read in 37 ms (15.2 MiB/s)
+
+icorem6qdl> nand write ${loadaddr} uboot ${filesize}
+
+NAND write: device 0 offset 0x200000, size 0x8fd26
+ 589094 bytes written: OK
+icorem6qdl>