diff options
Diffstat (limited to 'target/linux/layerscape/patches-4.4/7170-staging-fsl-mc-don-t-use-object-versions-to-make-bin.patch')
-rw-r--r-- | target/linux/layerscape/patches-4.4/7170-staging-fsl-mc-don-t-use-object-versions-to-make-bin.patch | 136 |
1 files changed, 136 insertions, 0 deletions
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 index 0000000000..2224d457e8 --- /dev/null +++ b/target/linux/layerscape/patches-4.4/7170-staging-fsl-mc-don-t-use-object-versions-to-make-bin.patch @@ -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); |