Skip to content

Commit

Permalink
mtd: nand: atmel: Fix DT backward compatibility in pmecc.c
Browse files Browse the repository at this point in the history
PMECC caps extraction from old DT bindings is broken, thus leading to
erroneous EL registers offset, which in turn make HW ECC unusable on
sama5d2 when old bindings are in use.

Passing the NAND dev node instead of the NFC node to of_match_node()
solves the problem.

Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Fixes: f88fc12 ("mtd: nand: Cleanup/rework the atmel_nand driver")
Cc: <stable@vger.kernel.org>
Tested-by: Romain Izard <romain.izard.pro@gmail.com>
  • Loading branch information
Boris Brezillon committed Jul 19, 2017
1 parent 5771a8c commit 3aa0907
Showing 1 changed file with 6 additions and 15 deletions.
21 changes: 6 additions & 15 deletions drivers/mtd/nand/atmel/pmecc.c
Original file line number Diff line number Diff line change
Expand Up @@ -945,6 +945,7 @@ struct atmel_pmecc *devm_atmel_pmecc_get(struct device *userdev)
*/
struct platform_device *pdev = to_platform_device(userdev);
const struct atmel_pmecc_caps *caps;
const struct of_device_id *match;

/* No PMECC engine available. */
if (!of_property_read_bool(userdev->of_node,
Expand All @@ -953,21 +954,11 @@ struct atmel_pmecc *devm_atmel_pmecc_get(struct device *userdev)

caps = &at91sam9g45_caps;

/*
* Try to find the NFC subnode and extract the associated caps
* from there.
*/
np = of_find_compatible_node(userdev->of_node, NULL,
"atmel,sama5d3-nfc");
if (np) {
const struct of_device_id *match;

match = of_match_node(atmel_pmecc_legacy_match, np);
if (match && match->data)
caps = match->data;

of_node_put(np);
}
/* Find the caps associated to the NAND dev node. */
match = of_match_node(atmel_pmecc_legacy_match,
userdev->of_node);
if (match && match->data)
caps = match->data;

pmecc = atmel_pmecc_create(pdev, caps, 1, 2);
}
Expand Down

0 comments on commit 3aa0907

Please sign in to comment.