|
@@ -229,11 +229,10 @@ static bool fsl_mc_is_root_dprc(struct device *dev)
|
|
|
return dev == root_dprc_dev;
|
|
|
}
|
|
|
|
|
|
-static int get_dprc_icid(struct fsl_mc_io *mc_io,
|
|
|
- int container_id, u16 *icid)
|
|
|
+static int get_dprc_attr(struct fsl_mc_io *mc_io,
|
|
|
+ int container_id, struct dprc_attributes *attr)
|
|
|
{
|
|
|
u16 dprc_handle;
|
|
|
- struct dprc_attributes attr;
|
|
|
int error;
|
|
|
|
|
|
error = dprc_open(mc_io, 0, container_id, &dprc_handle);
|
|
@@ -242,15 +241,14 @@ static int get_dprc_icid(struct fsl_mc_io *mc_io,
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
- memset(&attr, 0, sizeof(attr));
|
|
|
- error = dprc_get_attributes(mc_io, 0, dprc_handle, &attr);
|
|
|
+ memset(attr, 0, sizeof(struct dprc_attributes));
|
|
|
+ error = dprc_get_attributes(mc_io, 0, dprc_handle, attr);
|
|
|
if (error < 0) {
|
|
|
dev_err(mc_io->dev, "dprc_get_attributes() failed: %d\n",
|
|
|
error);
|
|
|
goto common_cleanup;
|
|
|
}
|
|
|
|
|
|
- *icid = attr.icid;
|
|
|
error = 0;
|
|
|
|
|
|
common_cleanup:
|
|
@@ -258,6 +256,34 @@ common_cleanup:
|
|
|
return error;
|
|
|
}
|
|
|
|
|
|
+static int get_dprc_icid(struct fsl_mc_io *mc_io,
|
|
|
+ int container_id, u16 *icid)
|
|
|
+{
|
|
|
+ struct dprc_attributes attr;
|
|
|
+ int error;
|
|
|
+
|
|
|
+ error = get_dprc_attr(mc_io, container_id, &attr);
|
|
|
+ if (error == 0)
|
|
|
+ *icid = attr.icid;
|
|
|
+
|
|
|
+ return error;
|
|
|
+}
|
|
|
+
|
|
|
+static int get_dprc_version(struct fsl_mc_io *mc_io,
|
|
|
+ int container_id, u16 *major, u16 *minor)
|
|
|
+{
|
|
|
+ struct dprc_attributes attr;
|
|
|
+ int error;
|
|
|
+
|
|
|
+ error = get_dprc_attr(mc_io, container_id, &attr);
|
|
|
+ if (error == 0) {
|
|
|
+ *major = attr.version.major;
|
|
|
+ *minor = attr.version.minor;
|
|
|
+ }
|
|
|
+
|
|
|
+ return error;
|
|
|
+}
|
|
|
+
|
|
|
static int translate_mc_addr(struct fsl_mc_device *mc_dev,
|
|
|
enum dprc_region_type mc_region_type,
|
|
|
u64 mc_offset, phys_addr_t *phys_addr)
|
|
@@ -719,11 +745,14 @@ static int fsl_mc_bus_probe(struct platform_device *pdev)
|
|
|
goto error_cleanup_mc_io;
|
|
|
}
|
|
|
|
|
|
+ error = get_dprc_version(mc_io, container_id,
|
|
|
+ &obj_desc.ver_major, &obj_desc.ver_minor);
|
|
|
+ if (error < 0)
|
|
|
+ goto error_cleanup_mc_io;
|
|
|
+
|
|
|
obj_desc.vendor = FSL_MC_VENDOR_FREESCALE;
|
|
|
strcpy(obj_desc.type, "dprc");
|
|
|
obj_desc.id = container_id;
|
|
|
- obj_desc.ver_major = DPRC_VER_MAJOR;
|
|
|
- obj_desc.ver_minor = DPRC_VER_MINOR;
|
|
|
obj_desc.irq_count = 1;
|
|
|
obj_desc.region_count = 0;
|
|
|
|