layerscape: add ls1088ardb device support
[openwrt/staging/yousong.git] / target / linux / layerscape / patches-4.4 / 7170-staging-fsl-mc-don-t-use-object-versions-to-make-bin.patch
diff --git a/target/linux/layerscape/patches-4.4/7170-staging-fsl-mc-don-t-use-object-versions-to-make-bin.patch b/target/linux/layerscape/patches-4.4/7170-staging-fsl-mc-don-t-use-object-versions-to-make-bin.patch
new file mode 100644 (file)
index 0000000..2224d45
--- /dev/null
@@ -0,0 +1,136 @@
+From 9382e1723e4de9832407f7e65bd4812b31e5a51d Mon Sep 17 00:00:00 2001
+From: Itai Katz <itai.katz@nxp.com>
+Date: Mon, 11 Apr 2016 11:55:40 -0500
+Subject: [PATCH 170/226] staging: fsl-mc: don't use object versions to make
+ binding decisions
+
+Up until now if the object version expected by a driver (in the API header
+file) did not match the actual object version in the MC hardware the bus
+driver refused to bind the object to the driver or printed out WARN_ON
+dumps.
+
+This patch removes those checks, and the responsibility of object version
+checking should now be done in the object drivers themselves.  If the actual
+version discovered is not supported, the driver's probe function should fail.
+Drivers should use version checks to support new features and provide
+backwards compatibility if at all possible.
+
+This patch also removes the checks that caused bus driver probing to fail
+if the overall MC version discovered did not match the firmware version
+from the API header...this was too strict.  The overall MC version is
+informational like a release number, and continues to be printed in the
+boot log.
+
+Signed-off-by: Itai Katz <itai.katz@nxp.com>
+(Stuart: reworded commit log)
+Signed-off-by: Stuart Yoder <stuart.yoder@nxp.com>
+Acked-by: German Rivera <german.rivera@nxp.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/staging/fsl-mc/bus/dprc-driver.c  |    4 +--
+ drivers/staging/fsl-mc/bus/mc-allocator.c |    6 -----
+ drivers/staging/fsl-mc/bus/mc-bus.c       |   38 +----------------------------
+ 3 files changed, 2 insertions(+), 46 deletions(-)
+
+--- a/drivers/staging/fsl-mc/bus/dprc-driver.c
++++ b/drivers/staging/fsl-mc/bus/dprc-driver.c
+@@ -780,9 +780,7 @@ static int dprc_remove(struct fsl_mc_dev
+ static const struct fsl_mc_device_match_id match_id_table[] = {
+       {
+        .vendor = FSL_MC_VENDOR_FREESCALE,
+-       .obj_type = "dprc",
+-       .ver_major = DPRC_VER_MAJOR,
+-       .ver_minor = DPRC_VER_MINOR},
++       .obj_type = "dprc"},
+       {.vendor = 0x0},
+ };
+--- a/drivers/staging/fsl-mc/bus/mc-allocator.c
++++ b/drivers/staging/fsl-mc/bus/mc-allocator.c
+@@ -709,20 +709,14 @@ static const struct fsl_mc_device_match_
+       {
+        .vendor = FSL_MC_VENDOR_FREESCALE,
+        .obj_type = "dpbp",
+-       .ver_major = DPBP_VER_MAJOR,
+-       .ver_minor = DPBP_VER_MINOR
+       },
+       {
+        .vendor = FSL_MC_VENDOR_FREESCALE,
+        .obj_type = "dpmcp",
+-       .ver_major = DPMCP_VER_MAJOR,
+-       .ver_minor = DPMCP_VER_MINOR
+       },
+       {
+        .vendor = FSL_MC_VENDOR_FREESCALE,
+        .obj_type = "dpcon",
+-       .ver_major = DPCON_VER_MAJOR,
+-       .ver_minor = DPCON_VER_MINOR
+       },
+       {.vendor = 0x0},
+ };
+--- a/drivers/staging/fsl-mc/bus/mc-bus.c
++++ b/drivers/staging/fsl-mc/bus/mc-bus.c
+@@ -40,8 +40,6 @@ static int fsl_mc_bus_match(struct devic
+       struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
+       struct fsl_mc_driver *mc_drv = to_fsl_mc_driver(drv);
+       bool found = false;
+-      bool major_version_mismatch = false;
+-      bool minor_version_mismatch = false;
+       if (WARN_ON(!fsl_mc_bus_exists()))
+               goto out;
+@@ -64,32 +62,12 @@ static int fsl_mc_bus_match(struct devic
+       for (id = mc_drv->match_id_table; id->vendor != 0x0; id++) {
+               if (id->vendor == mc_dev->obj_desc.vendor &&
+                   strcmp(id->obj_type, mc_dev->obj_desc.type) == 0) {
+-                      if (id->ver_major == mc_dev->obj_desc.ver_major) {
+-                              found = true;
+-                              if (id->ver_minor != mc_dev->obj_desc.ver_minor)
+-                                      minor_version_mismatch = true;
+-                      } else {
+-                              major_version_mismatch = true;
+-                      }
++                      found = true;
+                       break;
+               }
+       }
+-      if (major_version_mismatch) {
+-              dev_warn(dev,
+-                       "Major version mismatch: driver version %u.%u, MC object version %u.%u\n",
+-                       id->ver_major, id->ver_minor,
+-                       mc_dev->obj_desc.ver_major,
+-                       mc_dev->obj_desc.ver_minor);
+-      } else if (minor_version_mismatch) {
+-              dev_warn(dev,
+-                       "Minor version mismatch: driver version %u.%u, MC object version %u.%u\n",
+-                       id->ver_major, id->ver_minor,
+-                       mc_dev->obj_desc.ver_major,
+-                       mc_dev->obj_desc.ver_minor);
+-      }
+-
+ out:
+       dev_dbg(dev, "%smatched\n", found ? "" : "not ");
+       return found;
+@@ -722,20 +700,6 @@ static int fsl_mc_bus_probe(struct platf
+                "Freescale Management Complex Firmware version: %u.%u.%u\n",
+                mc_version.major, mc_version.minor, mc_version.revision);
+-      if (mc_version.major < MC_VER_MAJOR) {
+-              dev_err(&pdev->dev,
+-                      "ERROR: MC firmware version not supported by driver (driver version: %u.%u)\n",
+-                      MC_VER_MAJOR, MC_VER_MINOR);
+-              error = -ENOTSUPP;
+-              goto error_cleanup_mc_io;
+-      }
+-
+-      if (mc_version.major > MC_VER_MAJOR) {
+-              dev_warn(&pdev->dev,
+-                       "WARNING: driver may not support newer MC firmware features (driver version: %u.%u)\n",
+-                       MC_VER_MAJOR, MC_VER_MINOR);
+-      }
+-
+       error = get_mc_addr_translation_ranges(&pdev->dev,
+                                              &mc->translation_ranges,
+                                              &mc->num_translation_ranges);