On 05/23/2018 02:52 PM, Tudor Ambarus wrote: > Hi, Marek, Hi,
> On 05/23/2018 12:56 PM, Marek Vasut wrote: > [...] >>>> [...] >>>> >>>>>>> + while (len) { >>>>>>> + cmd = spi_nor_find_best_erase_cmd(map, region, addr, len); >>>>>>> + if (!cmd) >>>>>>> + return -EINVAL; >>>>>> What would happen if you realize mid-way that you cannot erase some >>>>>> sector , do you end up with partial erase ? >>>>> Is this possible? In non-overlaid regions, the address is aligned with >>>>> at least one of the erase commands, else -EINVAL. For overlaid regions >>>>> alignment doesn't matter. But yes, if this is possible, in this case, >>>>> this proposal will do a partial erase. >>>> Shouldn't we fail up front instead ? >>> It will be great if we can do this without having performance penalties. >>> Can we loose the conditions for the last erase command? If one wants to >>> erase 80k chunk starting from offset 0 and only 32k and 64k erase type >>> are supported, can we erase 96k? >> No. But can you maybe build a list of erase commands to be executed once >> you validate that the erase can be performed for example ? > > My second choice was an array witch saves u8 opcode and u32 erasesize. > There are flashes of 256MB, in the worst case scenario with 4k erase > type, we will end up with 64K entries. Some RLE encoding might help here ? > How about enforcing the length to be multiple of mtd->erasesize, like we > do in uniform_erase? With this, the problem disappears. What is the erase size for the 4k-sector 256MiB flash ? -- Best regards, Marek Vasut