
On 14 June 2015 at 13:25, Boris Brezillon boris.brezillon@free-electrons.com wrote:
Hi Michal,
On Sun, 7 Jun 2015 18:48:26 +0200 Michal Suchanek hramrach@gmail.com wrote:
Hello,
On 5 June 2015 at 13:52, Roy Spliet r.spliet@ultimaker.com wrote:
Based on the default layout of the android image used at least on Olimex Lime
Signed-off-by: Roy Spliet r.spliet@ultimaker.com
include/configs/sunxi-common.h | 9 +++++++++ 1 file changed, 9 insertions(+)
diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h index ec28c40..b38f2f5 100644 --- a/include/configs/sunxi-common.h +++ b/include/configs/sunxi-common.h @@ -404,8 +404,15 @@ extern int soft_i2c_gpio_scl; #define BOOT_TARGET_DEVICES_USB(func) #endif
+#ifdef CONFIG_NAND +#define BOOT_TARGET_DEVICES_NAND(func) func(NAND, nand , 0) +#else +#define BOOT_TARGET_DEVICES_NAND(func) +#endif
#define BOOT_TARGET_DEVICES(func) \ BOOT_TARGET_DEVICES_MMC(func) \
BOOT_TARGET_DEVICES_NAND(func) \ BOOT_TARGET_DEVICES_SCSI(func) \ BOOT_TARGET_DEVICES_USB(func) \ func(PXE, pxe, na) \
@@ -441,6 +448,8 @@ extern int soft_i2c_gpio_scl; MEM_LAYOUT_ENV_SETTINGS \ "fdtfile=" CONFIG_DEFAULT_DEVICE_TREE ".dtb\0" \ "console=ttyS0,115200\0" \
"mtdids=nand0=mtd2\0" \
"mtdparts=mtdparts=mtd2:0xffc00000@0x400000(nand0_main)\0" \ BOOTENV
From what I heard the nand boot partition size should be specified in nand pages rather than bytes because the boot rom loads a fixed number of pages and just uses the start of each page regardless of page size.
AFAIK, the mtdparts format only allows you to express partition offsets and sizes in bytes, and even if we had to change for something else, we should choose NAND blocks rather than NAND pages. The reason partitions should be block aligned in because the you can't erase specific pages in a block, which means that if you define 2 partitions sharing the same block, you won't be able to update one partition without potentially corrupting the other one.
However, if the number of pages the boot0 partition takes up is not block aligned it means we cannot use the medium for booting and can just use 1 big partition anyway.
I did not find any document regarding the nand boot partition layout so I would like to see some input from somebody familiar with the driver.
AFAIR, the mtd partition code checks for block alignment anyway, so you shouldn't be allowed to create two partitions sharing the same block.
While it is fine for testing to hand-edit the environment the final nand support should have
- way to express the boot partition size in nand pages
Why should we add that ? The conversion from a number of blocks to a number bytes is pretty straightforward (number_of_blocks * block_size_in_bytes).
Because the block size is not the same on all flash chips, obviously.
If there is only one block size that can ever be reasonably supported due to other constraints then it's fine to just hardcode it.
- way to make the main partition start at the end of boot partition
and extend to the end of the flash
Again, that's not a good idea, the main partition should be aligned on a block (see the above explanation).
Since these are block aligned anyway there should be no problem.
And if you can express the size in blocks you can just make the main partition start the next block after boot0. What is missing is the ability to extend to the end of medium to be feature compatible with Chinese software that uses this to flash same firmware to tablets with different nand size. I think this is generally desirable anyway.
Thanks
Michal