Message ID | 20190614073535.12502-3-shyam.saini@amarulasolutions.com |
---|---|
State | New |
Headers | show |
Series |
|
Related | show |
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
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
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
> 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
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
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>
Signed-off-by: Shyam Saini <shyam.saini@amarulasolutions.com> --- doc/imx/common/imx6.txt | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+)