bus: fsl-mc: add api to retrieve mc version
authorAndrei Botila <andrei.botila@nxp.com>
Thu, 19 Mar 2020 16:12:31 +0000 (09:12 -0700)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 30 Mar 2020 00:50:49 +0000 (11:50 +1100)
Add a new api that returns Management Complex firmware version
and make the required structure public. The api's first user will be
the caam driver for setting prediction resistance bits.

Signed-off-by: Andrei Botila <andrei.botila@nxp.com>
Acked-by: Laurentiu Tudor <laurentiu.tudor@nxp.com>
Reviewed-by: Horia Geantă <horia.geanta@nxp.com>
Cc: Chris Healy <cphealy@gmail.com>
Cc: Lucas Stach <l.stach@pengutronix.de>
Cc: Horia Geantă <horia.geanta@nxp.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Iuliana Prodan <iuliana.prodan@nxp.com>
Cc: linux-crypto@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Cc: linux-imx@nxp.com
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/bus/fsl-mc/fsl-mc-bus.c
include/linux/fsl/mc.h

index c78d10ea641fb2f2891784c5adf0fc4c176afebb..40526da5c6a6efb0c763aaa06ada4f3dd2988844 100644 (file)
@@ -26,6 +26,8 @@
  */
 #define FSL_MC_DEFAULT_DMA_MASK        (~0ULL)
 
+static struct fsl_mc_version mc_version;
+
 /**
  * struct fsl_mc - Private data of a "fsl,qoriq-mc" platform device
  * @root_mc_bus_dev: fsl-mc device representing the root DPRC
@@ -54,20 +56,6 @@ struct fsl_mc_addr_translation_range {
        phys_addr_t start_phys_addr;
 };
 
-/**
- * struct mc_version
- * @major: Major version number: incremented on API compatibility changes
- * @minor: Minor version number: incremented on API additions (that are
- *             backward compatible); reset when major version is incremented
- * @revision: Internal revision number: incremented on implementation changes
- *             and/or bug fixes that have no impact on API
- */
-struct mc_version {
-       u32 major;
-       u32 minor;
-       u32 revision;
-};
-
 /**
  * fsl_mc_bus_match - device to driver matching callback
  * @dev: the fsl-mc device to match against
@@ -338,7 +326,7 @@ EXPORT_SYMBOL_GPL(fsl_mc_driver_unregister);
  */
 static int mc_get_version(struct fsl_mc_io *mc_io,
                          u32 cmd_flags,
-                         struct mc_version *mc_ver_info)
+                         struct fsl_mc_version *mc_ver_info)
 {
        struct fsl_mc_command cmd = { 0 };
        struct dpmng_rsp_get_version *rsp_params;
@@ -363,6 +351,20 @@ static int mc_get_version(struct fsl_mc_io *mc_io,
        return 0;
 }
 
+/**
+ * fsl_mc_get_version - function to retrieve the MC f/w version information
+ *
+ * Return:     mc version when called after fsl-mc-bus probe; NULL otherwise.
+ */
+struct fsl_mc_version *fsl_mc_get_version(void)
+{
+       if (mc_version.major)
+               return &mc_version;
+
+       return NULL;
+}
+EXPORT_SYMBOL_GPL(fsl_mc_get_version);
+
 /**
  * fsl_mc_get_root_dprc - function to traverse to the root dprc
  */
@@ -862,7 +864,6 @@ static int fsl_mc_bus_probe(struct platform_device *pdev)
        int container_id;
        phys_addr_t mc_portal_phys_addr;
        u32 mc_portal_size;
-       struct mc_version mc_version;
        struct resource res;
 
        mc = devm_kzalloc(&pdev->dev, sizeof(*mc), GFP_KERNEL);
index 54d9436600c7dfda91706b44d8c7426dad436581..2b5f8366dbe1b1726751d178fdef1e662144f37a 100644 (file)
@@ -381,6 +381,22 @@ int __must_check __fsl_mc_driver_register(struct fsl_mc_driver *fsl_mc_driver,
 
 void fsl_mc_driver_unregister(struct fsl_mc_driver *driver);
 
+/**
+ * struct fsl_mc_version
+ * @major: Major version number: incremented on API compatibility changes
+ * @minor: Minor version number: incremented on API additions (that are
+ *             backward compatible); reset when major version is incremented
+ * @revision: Internal revision number: incremented on implementation changes
+ *             and/or bug fixes that have no impact on API
+ */
+struct fsl_mc_version {
+       u32 major;
+       u32 minor;
+       u32 revision;
+};
+
+struct fsl_mc_version *fsl_mc_get_version(void);
+
 int __must_check fsl_mc_portal_allocate(struct fsl_mc_device *mc_dev,
                                        u16 mc_io_flags,
                                        struct fsl_mc_io **new_mc_io);