On Tue, Sep 21, 2021 at 7:11 AM Yunus Bas <Y.Bas@xxxxxxxxx> wrote: > Here an example: > The startpage of slot1 is 0x240000. This is the real address, where > Barebox is flashed into and can also be dumped using the original > nand0-partition. Now, when a bad-block occurs prior to the startpage of > slot1, let's take for example the block at 0x140000, then offset of > slot1 changes also in the nand0.bb partition. In the original partition > nand0, slot1 is still at 0x240000, but on nand0.bb, slot1 has been > moved one block prior to the original offset and changed to 0x220000. If you partition nand, via e.g. device tree entries, those partition start offsets are non-BB aware, so do not move. So if I write X pages to partition 0 BB and read back X pages, I will know the crc. And the same for partition 1, even if some blocks in partition 0 are bad. But these "slots" you talk about, I think these are not nand partitions. Maybe more like the two bootloader slots in an IMX boot image? If the position of the slots is determined dynamically at flash time, then I think your answer is you must also determine it when you check CRC. For instance, on imx one could create a command that queries the FCB to find the two bootloader slot start addresses. Code is already there in the imx bbu handler, it just needs an interface. Or, something had to determine this dynamic address of the slot, so have that process also tell you what it determined. For example, have the imx bbu code set env variables with the address of the bootloader slots that it calculates when it flashes barebox. If you want to calculate one CRC value for all of NAND, then I think you can not do that. Because the contents of the entire nand flash chip are not constant. Instead have a list of CRCs and lengths for the parts you have actually flashed. Most of flash is usually blank anyway, why even flash blank space? It just slows down manufacturing. You must just find the start location for these lengths of data that have CRCs. As above, nand partitions start at a constant location, so this is easy. Dynamically determined locations one would need to: query location if it is stored somewhere, have code that determined the location also provide the value to the verification code, or repeat the calculation by which the location was determined in the first place to independently arrive at the same answer. _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox