From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hans de Goede Date: Fri, 31 Jul 2015 16:27:44 +0200 Subject: [U-Boot] [PATCH v3 2/4] sunxi: nand: Add basic sunxi NAND driver for SPL with DMA support In-Reply-To: References: <1437654784-19942-1-git-send-email-pzierhoffer@antmicro.com> <1437654784-19942-3-git-send-email-pzierhoffer@antmicro.com> <1438303678.2993.411.camel@freescale.com> <55BB339B.9000304@redhat.com> <20150731112445.21bdff11@bbrezillon> Message-ID: <55BB85E0.90701@redhat.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi, On 31-07-15 16:25, Michal Suchanek wrote: > On 31 July 2015 at 11:24, Boris Brezillon > wrote: >> Hi Hans, >> >> On Fri, 31 Jul 2015 10:36:43 +0200 >> Hans de Goede wrote: >> >>> Hi, >>> >>> On 31-07-15 02:47, Scott Wood wrote: >>>> On Thu, 2015-07-23 at 14:33 +0200, Piotr Zierhoffer wrote: >>>>> +int nand_spl_load_image(uint32_t offs, unsigned int size, void *dest) >>>>> +{ >>>>> + void *current_dest; >>>>> + uint32_t count; >>>>> + uint32_t current_count; >>>>> + uint32_t ecc_errors = 0; >>>>> + >>>>> + memset(dest, 0x0, size); /* clean destination memory */ >>>>> + for (current_dest = dest; >>>>> + current_dest < (dest + size); >>>>> + current_dest += CONFIG_NAND_SUNXI_SPL_ECC_PAGE_SIZE) { >>>>> + nand_read_page(offs, offs >>>>> + < CONFIG_NAND_SUNXI_SPL_SYNDROME_PARTITIONS_END, >>>>> + &ecc_errors); >>>>> + count = current_dest - dest; >>>>> + >>>>> + if (size - count > CONFIG_NAND_SUNXI_SPL_ECC_PAGE_SIZE) >>>>> + current_count = CONFIG_NAND_SUNXI_SPL_ECC_PAGE_SIZE; >>>>> + else >>>>> + current_count = size - count; >>>>> + >>>>> + memcpy(current_dest, >>>>> + temp_buf, >>>>> + current_count); >>>>> + offs += CONFIG_NAND_SUNXI_SPL_ECC_PAGE_SIZE; >>>>> + } >>>>> + return ecc_errors ? -1 : 0; >>>>> +} >>>> >>>> No bad block marker handling? >>> >>> The bootrom does not use bad block marker handling (and allwinner's >>> own FTL does neither for the non boot area, the actually mess up >>> things by writing metadata which looks like classic bad block >>> markers). >> >> Hm, checking for bad block markers (and skipping bad blocks) is always a >> good thing, even if it does not by itself guarantee that the data >> stored in there are not corrupted. > > Not on Allwinner hardware. Allwinner tools write data to the nand > which looks like bad block markers so skipping blocks which appear > marked as bad will inevitably skip valid blocks on many (most ?) > Allwinner devices. Right this has been my observation as well. > Only in the case you soldered a new nand chip yourself and never used > Allwinner tools with it will the bad block markers remain valid. This > is overall very unlikely so it should not be something SPL handles. Or if you've some device where the nand was not initialized from the factory, I think some Olinuxino devices with nand fall into this category. I agree that is best to simply ignore bad block markers on sunxi though, as they tend to lead to many false positives (think 60% of the entire nand consisting of bad blocks in my experience) Regards, Hans