This patch adds device tree support along with a new compatible string to support Exynos5 SoCs (SSS_VER_5). Also, Documentation under devicetree/bindings added. Signed-off-by: Naveen Krishna Ch <ch.naveen@xxxxxxxxxxx> CC: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> CC: David S. Miller <davem@xxxxxxxxxxxxx> CC: Vladimir Zapolskiy <vzapolskiy@xxxxxxxxx> TO: <linux-crypto@xxxxxxxxxxxxxxx> CC: <linux-samsung-soc@xxxxxxxxxxxxxxx> --- .../devicetree/bindings/crypto/samsung-sss.txt | 24 ++++++++++++ drivers/crypto/s5p-sss.c | 40 ++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 Documentation/devicetree/bindings/crypto/samsung-sss.txt diff --git a/Documentation/devicetree/bindings/crypto/samsung-sss.txt b/Documentation/devicetree/bindings/crypto/samsung-sss.txt new file mode 100644 index 0000000..8871a29 --- /dev/null +++ b/Documentation/devicetree/bindings/crypto/samsung-sss.txt @@ -0,0 +1,24 @@ +Samsung SoC SSS crypto Module + +Required properties: + +- compatible : Should contain entries for this and backward compatible + SSS versions: + - "samsung,exynos-secss" for S5PV210. + - "samsung,s5p-secss" for Exynos5 series SoCs. + TBD: SSS module on Exynos5 SoCs supports other algorithms, + support for the is yet to be added in the driver. +- reg : Offset and length of the register set for the module +- interrupts : the interrupt-specifier for the SSS module. +- clocks : the required gating clock for the SSS module. +- clock-names : the gating clock name requested in the SSS driver. + +Example: + /* SSS_VER_5 */ + sss: sss { + compatible = "samsung,exynos-secss"; + reg = <0x10830000 0x10000>; + interrupts = <0 112 0>; + clocks = <&clock 471>; + clock-names = "secss"; + }; diff --git a/drivers/crypto/s5p-sss.c b/drivers/crypto/s5p-sss.c index dda4551..dcb9fc1 100644 --- a/drivers/crypto/s5p-sss.c +++ b/drivers/crypto/s5p-sss.c @@ -22,6 +22,7 @@ #include <linux/scatterlist.h> #include <linux/dma-mapping.h> #include <linux/io.h> +#include <linux/of.h> #include <linux/crypto.h> #include <linux/interrupt.h> @@ -173,10 +174,45 @@ struct s5p_aes_dev { struct crypto_queue queue; bool busy; spinlock_t lock; + + /* To support SSS versions across Samsung SoCs */ + unsigned int version; }; static struct s5p_aes_dev *s5p_dev; +enum sss_version { + SSS_VER_4, /* SSS found on S5PV210 */ + SSS_VER_5, /* SSS found on Exynos5 Series SoCs */ +}; + +static struct platform_device_id s5p_sss_ids[] = { + { + .name = "s5p-secss", + .driver_data = SSS_VER_4, + }, { }, +}; +MODULE_DEVICE_TABLE(platform, s5p_sss_ids); + +static struct of_device_id s5p_sss_dt_match[] = { + { .compatible = "samsung,s5p-secss", .data = (void *)SSS_VER_4 }, + { .compatible = "samsung,exynos-secss", .data = (void *)SSS_VER_5 }, + { }, +}; +MODULE_DEVICE_TABLE(of, s5p_sss_dt_match); + +static inline unsigned int find_s5p_sss_version(struct platform_device *pdev) +{ +#ifdef CONFIG_OF + if (pdev->dev.of_node) { + const struct of_device_id *match; + match = of_match_node(s5p_sss_dt_match, pdev->dev.of_node); + return (unsigned int)match->data; + } +#endif + return platform_get_device_id(pdev)->driver_data; +} + static void s5p_set_dma_indata(struct s5p_aes_dev *dev, struct scatterlist *sg) { SSS_WRITE(dev, FCBRDMAS, sg_dma_address(sg)); @@ -580,6 +616,8 @@ static int s5p_aes_probe(struct platform_device *pdev) resource_size(res), pdev->name)) return -EBUSY; + pdata->version = find_s5p_sss_version(pdev); + pdata->clk = devm_clk_get(dev, "secss"); if (IS_ERR(pdata->clk)) { dev_err(dev, "failed to find secss clock source\n"); @@ -674,9 +712,11 @@ static int s5p_aes_remove(struct platform_device *pdev) static struct platform_driver s5p_aes_crypto = { .probe = s5p_aes_probe, .remove = s5p_aes_remove, + .id_table = s5p_sss_ids, .driver = { .owner = THIS_MODULE, .name = "s5p-secss", + .of_match_table = s5p_sss_dt_match, }, }; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html