[PATCH for 3.7] mtd: nand: fix Samsung SLC detection regression

Sylwester Nawrocki sylvester.nawrocki at gmail.com
Thu Nov 15 03:29:04 EST 2012


On 11/15/2012 06:46 AM, Brian Norris wrote:
> This patch fixes errors seen in identifying old Samsung SLC, due to the
> following commits:
>
>      commit e2d3a35ee427aaba99b6c68a56609ce276c51270
>      mtd: nand: detect Samsung K9GBG08U0A, K9GAG08U0F ID
>
>      commit e3b88bd604283ef83ae6e8f53622d5b1ffe9d43a
>      mtd: nand: add generic READ ID length calculation functions
>
> Some Samsung NAND with "5-byte" ID really appear to have 6-byte IDs, with
> wraparound like:
>
>    Samsung K9K8G08U0D
>    ec d3 51 95 58 ec ec d3
>
>    Samsung K9F1G08U0C
>    ec f1 00 95 40 ec ec f1
>
>    Samsung K9F2G08U0B
>    ec da 10 95 44 00 ec da
>
> This bad wraparound makes it hard to reliably detect the difference
> between Samsung SLC with 5-byte ID and Samsung SLC with 6-byte ID.
>
> The fix is to, for now, only use the new Samsung table for MLC. We
> cannot support the new SLC (K9FAG08U0M) until Samsung gives better ID
> decode information.
>
> Note that this applies in addition to the previous regression fix:
>
>      commit bc86cf7af2ebda88056538e8edff852ee627f76a
>      mtd: nand: fix Samsung SLC NAND identification regression
>
> Together, these patches completely restore the previous detection
> behavior so that we cannot see any more regressions in Samsung SLC NAND
> (finger crossed). With luck, I can get a hold of a Samsung
> representative and stop having to cross my fingers eventually.
>
> Reported-by: Sylwester Nawrocki<sylvester.nawrocki at gmail.com>
> Signed-off-by: Brian Norris<computersforpeace at gmail.com>

Together with patch
mtd: nand: fix Samsung SLC NAND identification regression

this fixes K9F1G08U0C Flash detection regression for me.

Tested-by: Sylwester Nawrocki <sylvester.nawrocki at gmail.com>

Thanks!
Sylwester

> ---
>
> David: please note that this (and the aforementioned commit bc86cf7a) are
> urgently in need of a pull request for the 3.7 cycle. I have received several
> regression reports now, which I have addressed. I would greatly appreciate your
> attention here!
>
>   drivers/mtd/nand/nand_base.c | 1 +
>   1 file changed, 1 insertion(+)
>
> diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
> index d5ece6e..1a03b7f 100644
> --- a/drivers/mtd/nand/nand_base.c
> +++ b/drivers/mtd/nand/nand_base.c
> @@ -2990,6 +2990,7 @@ static void nand_decode_ext_id(struct mtd_info *mtd, struct nand_chip *chip,
>   	 * ID to decide what to do.
>   	 */
>   	if (id_len == 6&&  id_data[0] == NAND_MFR_SAMSUNG&&
> +			(chip->cellinfo&  NAND_CI_CELLTYPE_MSK)&&
>   			id_data[5] != 0x00) {
>   		/* Calc pagesize */
>   		mtd->writesize = 2048<<  (extid&  0x03);



More information about the linux-mtd mailing list