crypto: inside-secure - Expand soc data structure
authorPeter Harliman Liem <pliem@maxlinear.com>
Tue, 27 Sep 2022 03:10:08 +0000 (11:10 +0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 21 Oct 2022 11:05:24 +0000 (19:05 +0800)
Currently platform data is assigned directly to
version string(instead of struct). To make it more
scalable, we move it to use data struct instead.
This allows customization for individual platforms other
than version string.

Signed-off-by: Peter Harliman Liem <pliem@maxlinear.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/inside-secure/safexcel.c
drivers/crypto/inside-secure/safexcel.h

index ad0d8c4a71ac1b5801672071c60173998e6bdd37..8f4872470529c8182cfc780f07224e482b4dd8f7 100644 (file)
@@ -410,10 +410,10 @@ static int eip197_load_firmwares(struct safexcel_crypto_priv *priv)
        int i, j, ret = 0, pe;
        int ipuesz, ifppsz, minifw = 0;
 
-       if (priv->version == EIP197D_MRVL)
+       if (priv->data->version == EIP197D_MRVL)
                dir = "eip197d";
-       else if (priv->version == EIP197B_MRVL ||
-                priv->version == EIP197_DEVBRD)
+       else if (priv->data->version == EIP197B_MRVL ||
+                priv->data->version == EIP197_DEVBRD)
                dir = "eip197b";
        else
                return -ENODEV;
@@ -423,7 +423,7 @@ retry_fw:
                snprintf(fw_path, 37, "inside-secure/%s/%s", dir, fw_name[i]);
                ret = firmware_request_nowarn(&fw[i], fw_path, priv->dev);
                if (ret) {
-                       if (minifw || priv->version != EIP197B_MRVL)
+                       if (minifw || priv->data->version != EIP197B_MRVL)
                                goto release_fw;
 
                        /* Fallback to the old firmware location for the
@@ -1597,7 +1597,7 @@ static int safexcel_probe_generic(void *pdev,
 
        safexcel_configure(priv);
 
-       if (IS_ENABLED(CONFIG_PCI) && priv->version == EIP197_DEVBRD) {
+       if (IS_ENABLED(CONFIG_PCI) && priv->data->version == EIP197_DEVBRD) {
                /*
                 * Request MSI vectors for global + 1 per ring -
                 * or just 1 for older dev images
@@ -1731,7 +1731,7 @@ static int safexcel_probe(struct platform_device *pdev)
                return -ENOMEM;
 
        priv->dev = dev;
-       priv->version = (enum safexcel_eip_version)of_device_get_match_data(dev);
+       priv->data = (struct safexcel_priv_data *)of_device_get_match_data(dev);
 
        platform_set_drvdata(pdev, priv);
 
@@ -1806,27 +1806,43 @@ static int safexcel_remove(struct platform_device *pdev)
        return 0;
 }
 
+static const struct safexcel_priv_data eip97ies_mrvl_data = {
+       .version = EIP97IES_MRVL,
+};
+
+static const struct safexcel_priv_data eip197b_mrvl_data = {
+       .version = EIP197B_MRVL,
+};
+
+static const struct safexcel_priv_data eip197d_mrvl_data = {
+       .version = EIP197D_MRVL,
+};
+
+static const struct safexcel_priv_data eip197_devbrd_data = {
+       .version = EIP197_DEVBRD,
+};
+
 static const struct of_device_id safexcel_of_match_table[] = {
        {
                .compatible = "inside-secure,safexcel-eip97ies",
-               .data = (void *)EIP97IES_MRVL,
+               .data = &eip97ies_mrvl_data,
        },
        {
                .compatible = "inside-secure,safexcel-eip197b",
-               .data = (void *)EIP197B_MRVL,
+               .data = &eip197b_mrvl_data,
        },
        {
                .compatible = "inside-secure,safexcel-eip197d",
-               .data = (void *)EIP197D_MRVL,
+               .data = &eip197d_mrvl_data,
        },
        /* For backward compatibility and intended for generic use */
        {
                .compatible = "inside-secure,safexcel-eip97",
-               .data = (void *)EIP97IES_MRVL,
+               .data = &eip97ies_mrvl_data,
        },
        {
                .compatible = "inside-secure,safexcel-eip197",
-               .data = (void *)EIP197B_MRVL,
+               .data = &eip197b_mrvl_data,
        },
        {},
 };
@@ -1862,7 +1878,7 @@ static int safexcel_pci_probe(struct pci_dev *pdev,
                return -ENOMEM;
 
        priv->dev = dev;
-       priv->version = (enum safexcel_eip_version)ent->driver_data;
+       priv->data = (struct safexcel_priv_data *)ent->driver_data;
 
        pci_set_drvdata(pdev, priv);
 
@@ -1881,7 +1897,7 @@ static int safexcel_pci_probe(struct pci_dev *pdev,
        }
        priv->base = pcim_iomap_table(pdev)[0];
 
-       if (priv->version == EIP197_DEVBRD) {
+       if (priv->data->version == EIP197_DEVBRD) {
                dev_dbg(dev, "Device identified as FPGA based development board - applying HW reset\n");
 
                rc = pcim_iomap_regions(pdev, 4, "crypto_safexcel");
@@ -1949,7 +1965,7 @@ static const struct pci_device_id safexcel_pci_ids[] = {
        {
                PCI_DEVICE_SUB(PCI_VENDOR_ID_XILINX, 0x9038,
                               0x16ae, 0xc522),
-               .driver_data = EIP197_DEVBRD,
+               .driver_data = (kernel_ulong_t)&eip197_devbrd_data,
        },
        {},
 };
index 797ff91512e0d03f0b9a79b124a85c9d6fd11945..e8da8b30a39239d4a11eee9db834eab7853c1f5c 100644 (file)
@@ -733,6 +733,10 @@ enum safexcel_eip_version {
        EIP197_DEVBRD
 };
 
+struct safexcel_priv_data {
+       enum safexcel_eip_version version;
+};
+
 /* Priority we use for advertising our algorithms */
 #define SAFEXCEL_CRA_PRIORITY          300
 
@@ -815,7 +819,7 @@ struct safexcel_crypto_priv {
        struct clk *reg_clk;
        struct safexcel_config config;
 
-       enum safexcel_eip_version version;
+       struct safexcel_priv_data *data;
        struct safexcel_register_offsets offsets;
        struct safexcel_hwconfig hwconfig;
        u32 flags;