The question is, how does the integrated flash controller determine the characteristics of the NAND chip, and why does it get it wrong in our case?
We are booting u-boot on an LS1046A board that closely resembles the reference board, LS1046A RDB.
However one difference is the choice of NAND chip. Our prototype uses a Cypress S34MS04G2 NAND chip.
According to the uboot command `nand info`, the reference board uses a chip with 4K pages while our prototype uses a NAND chip with 2K pages. The uboot `nand info` seems to get its information by querying the ONFI features of the NAND chip. Those match the characteristics on the datasheet.
The nand interface on our board does not work beyond the first page - we just get ECC errors. After adding debug statements, it looks like integrated flash controller (IFC) thinks this chip uses 4K pages. We determined this by printing the value of the IFC_CSORn_NAND register in fsl_ifc_nand.c::fsl_ifc_chip_init().
How does the IFC determine the characteristics of the NAND chip, and why does it get it wrong in this case?