From mboxrd@z Thu Jan 1 00:00:00 1970 From: Scott Wood Date: Tue, 17 Dec 2013 17:49:05 -0600 Subject: [U-Boot] [U-Boot, V2, 2/2] mtd: nand: omap: fix ecc ops assignment when changing ecc In-Reply-To: <1387286281-17985-1-git-send-email-nikita@compulab.co.il> References: <1387286281-17985-1-git-send-email-nikita@compulab.co.il> Message-ID: <20131217234904.GA741@home.buserror.net> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Tue, Dec 17, 2013 at 03:18:01PM +0200, Nikita Kiryanov wrote: > If we change to software ecc and then back to hardware ecc, the nand ecc ops > pointers are populated with incorrect function pointers. This is related to the > way nand_scan_tail() handles assigning functions to ecc ops: > > If we are switching to software ecc/no ecc, it assigns default functions to the > ecc ops pointers unconditionally, but if we are switching to hardware ecc, > the default hardware ecc functions are assigned to ops pointers only if these > pointers are NULL (so that drivers could set their own functions). In the case > of omap_gpmc.c driver, when we switch to sw ecc, sw ecc functions are > assigned to ecc ops by nand_scan_tail(), and when we later switch to hw ecc, > the ecc ops pointers are not NULL, so nand_scan_tail() does not overwrite > them with hw ecc functions. > The result: sw ecc functions used to write hw ecc data. > > Clear the ecc ops pointers in omap_gpmc.c when switching ecc types, so that > ops which were not assigned by the driver will get the correct default values > from nand_scan_tail(). > > Cc: Scott Wood > Cc: Pekon Gupta > Signed-off-by: Nikita Kiryanov > > --- > Changes in V2: > - Clear the ops after error checks, not before. > - Use memset on ecc struct to clear the ops. > > drivers/mtd/nand/omap_gpmc.c | 3 +++ > 1 file changed, 3 insertions(+) Applied to u-boot-nand-flash.git -Scott