You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
4.7 KiB
Diff
137 lines
4.7 KiB
Diff
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);
|