[mvebu]: preliminary support for the WRT1900AC (work in progress)
[openwrt.git] / target / linux / mvebu / patches-3.14 / 009-add_of_mtd_ecc_helpers.patch
diff --git a/target/linux/mvebu/patches-3.14/009-add_of_mtd_ecc_helpers.patch b/target/linux/mvebu/patches-3.14/009-add_of_mtd_ecc_helpers.patch
new file mode 100644 (file)
index 0000000..d48885f
--- /dev/null
@@ -0,0 +1,84 @@
+From 6d9434ebb76157071164b32ad03fbed165c74382 Mon Sep 17 00:00:00 2001
+From: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
+Date: Mon, 24 Feb 2014 19:24:48 -0300
+Subject: of_mtd: Add helpers to get ECC strength and ECC step size
+
+This commit adds simple helpers to obtain the devicetree properties
+that specify the ECC strength and ECC step size to use on a given
+NAND controller.
+
+Acked-by: Boris BREZILLON <b.brezillon.dev@gmail.com>
+Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
+Signed-off-by: Brian Norris <computersforpeace@gmail.com>
+
+--- a/drivers/of/of_mtd.c
++++ b/drivers/of/of_mtd.c
+@@ -50,6 +50,40 @@ int of_get_nand_ecc_mode(struct device_n
+ EXPORT_SYMBOL_GPL(of_get_nand_ecc_mode);
+ /**
++ * of_get_nand_ecc_step_size - Get ECC step size associated to
++ * the required ECC strength (see below).
++ * @np:       Pointer to the given device_node
++ *
++ * return the ECC step size, or errno in error case.
++ */
++int of_get_nand_ecc_step_size(struct device_node *np)
++{
++      int ret;
++      u32 val;
++
++      ret = of_property_read_u32(np, "nand-ecc-step-size", &val);
++      return ret ? ret : val;
++}
++EXPORT_SYMBOL_GPL(of_get_nand_ecc_step_size);
++
++/**
++ * of_get_nand_ecc_strength - Get required ECC strength over the
++ * correspnding step size as defined by 'nand-ecc-size'
++ * @np:       Pointer to the given device_node
++ *
++ * return the ECC strength, or errno in error case.
++ */
++int of_get_nand_ecc_strength(struct device_node *np)
++{
++      int ret;
++      u32 val;
++
++      ret = of_property_read_u32(np, "nand-ecc-strength", &val);
++      return ret ? ret : val;
++}
++EXPORT_SYMBOL_GPL(of_get_nand_ecc_strength);
++
++/**
+  * of_get_nand_bus_width - Get nand bus witdh for given device_node
+  * @np:       Pointer to the given device_node
+  *
+--- a/include/linux/of_mtd.h
++++ b/include/linux/of_mtd.h
+@@ -13,6 +13,8 @@
+ #include <linux/of.h>
+ int of_get_nand_ecc_mode(struct device_node *np);
++int of_get_nand_ecc_step_size(struct device_node *np);
++int of_get_nand_ecc_strength(struct device_node *np);
+ int of_get_nand_bus_width(struct device_node *np);
+ bool of_get_nand_on_flash_bbt(struct device_node *np);
+@@ -22,6 +24,16 @@ static inline int of_get_nand_ecc_mode(s
+ {
+       return -ENOSYS;
+ }
++
++static inline int of_get_nand_ecc_step_size(struct device_node *np)
++{
++      return -ENOSYS;
++}
++
++static inline int of_get_nand_ecc_strength(struct device_node *np)
++{
++      return -ENOSYS;
++}
+ static inline int of_get_nand_bus_width(struct device_node *np)
+ {