Commit 22044d9b authored by Peter Harliman Liem's avatar Peter Harliman Liem Committed by Herbert Xu

crypto: inside-secure - Expand soc data structure

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: default avatarPeter Harliman Liem <pliem@maxlinear.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 224f3a05
...@@ -410,10 +410,10 @@ static int eip197_load_firmwares(struct safexcel_crypto_priv *priv) ...@@ -410,10 +410,10 @@ static int eip197_load_firmwares(struct safexcel_crypto_priv *priv)
int i, j, ret = 0, pe; int i, j, ret = 0, pe;
int ipuesz, ifppsz, minifw = 0; int ipuesz, ifppsz, minifw = 0;
if (priv->version == EIP197D_MRVL) if (priv->data->version == EIP197D_MRVL)
dir = "eip197d"; dir = "eip197d";
else if (priv->version == EIP197B_MRVL || else if (priv->data->version == EIP197B_MRVL ||
priv->version == EIP197_DEVBRD) priv->data->version == EIP197_DEVBRD)
dir = "eip197b"; dir = "eip197b";
else else
return -ENODEV; return -ENODEV;
...@@ -423,7 +423,7 @@ static int eip197_load_firmwares(struct safexcel_crypto_priv *priv) ...@@ -423,7 +423,7 @@ static int eip197_load_firmwares(struct safexcel_crypto_priv *priv)
snprintf(fw_path, 37, "inside-secure/%s/%s", dir, fw_name[i]); snprintf(fw_path, 37, "inside-secure/%s/%s", dir, fw_name[i]);
ret = firmware_request_nowarn(&fw[i], fw_path, priv->dev); ret = firmware_request_nowarn(&fw[i], fw_path, priv->dev);
if (ret) { if (ret) {
if (minifw || priv->version != EIP197B_MRVL) if (minifw || priv->data->version != EIP197B_MRVL)
goto release_fw; goto release_fw;
/* Fallback to the old firmware location for the /* Fallback to the old firmware location for the
...@@ -1597,7 +1597,7 @@ static int safexcel_probe_generic(void *pdev, ...@@ -1597,7 +1597,7 @@ static int safexcel_probe_generic(void *pdev,
safexcel_configure(priv); 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 - * Request MSI vectors for global + 1 per ring -
* or just 1 for older dev images * or just 1 for older dev images
...@@ -1731,7 +1731,7 @@ static int safexcel_probe(struct platform_device *pdev) ...@@ -1731,7 +1731,7 @@ static int safexcel_probe(struct platform_device *pdev)
return -ENOMEM; return -ENOMEM;
priv->dev = dev; 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); platform_set_drvdata(pdev, priv);
...@@ -1806,27 +1806,43 @@ static int safexcel_remove(struct platform_device *pdev) ...@@ -1806,27 +1806,43 @@ static int safexcel_remove(struct platform_device *pdev)
return 0; 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[] = { static const struct of_device_id safexcel_of_match_table[] = {
{ {
.compatible = "inside-secure,safexcel-eip97ies", .compatible = "inside-secure,safexcel-eip97ies",
.data = (void *)EIP97IES_MRVL, .data = &eip97ies_mrvl_data,
}, },
{ {
.compatible = "inside-secure,safexcel-eip197b", .compatible = "inside-secure,safexcel-eip197b",
.data = (void *)EIP197B_MRVL, .data = &eip197b_mrvl_data,
}, },
{ {
.compatible = "inside-secure,safexcel-eip197d", .compatible = "inside-secure,safexcel-eip197d",
.data = (void *)EIP197D_MRVL, .data = &eip197d_mrvl_data,
}, },
/* For backward compatibility and intended for generic use */ /* For backward compatibility and intended for generic use */
{ {
.compatible = "inside-secure,safexcel-eip97", .compatible = "inside-secure,safexcel-eip97",
.data = (void *)EIP97IES_MRVL, .data = &eip97ies_mrvl_data,
}, },
{ {
.compatible = "inside-secure,safexcel-eip197", .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, ...@@ -1862,7 +1878,7 @@ static int safexcel_pci_probe(struct pci_dev *pdev,
return -ENOMEM; return -ENOMEM;
priv->dev = dev; 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); pci_set_drvdata(pdev, priv);
...@@ -1881,7 +1897,7 @@ static int safexcel_pci_probe(struct pci_dev *pdev, ...@@ -1881,7 +1897,7 @@ static int safexcel_pci_probe(struct pci_dev *pdev,
} }
priv->base = pcim_iomap_table(pdev)[0]; 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"); dev_dbg(dev, "Device identified as FPGA based development board - applying HW reset\n");
rc = pcim_iomap_regions(pdev, 4, "crypto_safexcel"); rc = pcim_iomap_regions(pdev, 4, "crypto_safexcel");
...@@ -1949,7 +1965,7 @@ static const struct pci_device_id safexcel_pci_ids[] = { ...@@ -1949,7 +1965,7 @@ static const struct pci_device_id safexcel_pci_ids[] = {
{ {
PCI_DEVICE_SUB(PCI_VENDOR_ID_XILINX, 0x9038, PCI_DEVICE_SUB(PCI_VENDOR_ID_XILINX, 0x9038,
0x16ae, 0xc522), 0x16ae, 0xc522),
.driver_data = EIP197_DEVBRD, .driver_data = (kernel_ulong_t)&eip197_devbrd_data,
}, },
{}, {},
}; };
......
...@@ -733,6 +733,10 @@ enum safexcel_eip_version { ...@@ -733,6 +733,10 @@ enum safexcel_eip_version {
EIP197_DEVBRD EIP197_DEVBRD
}; };
struct safexcel_priv_data {
enum safexcel_eip_version version;
};
/* Priority we use for advertising our algorithms */ /* Priority we use for advertising our algorithms */
#define SAFEXCEL_CRA_PRIORITY 300 #define SAFEXCEL_CRA_PRIORITY 300
...@@ -815,7 +819,7 @@ struct safexcel_crypto_priv { ...@@ -815,7 +819,7 @@ struct safexcel_crypto_priv {
struct clk *reg_clk; struct clk *reg_clk;
struct safexcel_config config; struct safexcel_config config;
enum safexcel_eip_version version; struct safexcel_priv_data *data;
struct safexcel_register_offsets offsets; struct safexcel_register_offsets offsets;
struct safexcel_hwconfig hwconfig; struct safexcel_hwconfig hwconfig;
u32 flags; u32 flags;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment