diff options
| -rw-r--r-- | arch/arm/mach-kirkwood/common.c | 4 | ||||
| -rw-r--r-- | drivers/crypto/mv_cesa.c | 14 |
2 files changed, 17 insertions, 1 deletions
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index 88a1667af4c3..b9b341ff91b4 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
| @@ -87,6 +87,7 @@ static struct clk __init *kirkwood_register_gate(const char *name, u8 bit_idx) | |||
| 87 | void __init kirkwood_clk_init(void) | 87 | void __init kirkwood_clk_init(void) |
| 88 | { | 88 | { |
| 89 | struct clk *runit, *ge0, *ge1, *sata0, *sata1, *usb0, *sdio; | 89 | struct clk *runit, *ge0, *ge1, *sata0, *sata1, *usb0, *sdio; |
| 90 | struct clk *crypto; | ||
| 90 | 91 | ||
| 91 | tclk = clk_register_fixed_rate(NULL, "tclk", NULL, | 92 | tclk = clk_register_fixed_rate(NULL, "tclk", NULL, |
| 92 | CLK_IS_ROOT, kirkwood_tclk); | 93 | CLK_IS_ROOT, kirkwood_tclk); |
| @@ -98,7 +99,7 @@ void __init kirkwood_clk_init(void) | |||
| 98 | sata1 = kirkwood_register_gate("sata1", CGC_BIT_SATA1); | 99 | sata1 = kirkwood_register_gate("sata1", CGC_BIT_SATA1); |
| 99 | usb0 = kirkwood_register_gate("usb0", CGC_BIT_USB0); | 100 | usb0 = kirkwood_register_gate("usb0", CGC_BIT_USB0); |
| 100 | sdio = kirkwood_register_gate("sdio", CGC_BIT_SDIO); | 101 | sdio = kirkwood_register_gate("sdio", CGC_BIT_SDIO); |
| 101 | kirkwood_register_gate("crypto", CGC_BIT_CRYPTO); | 102 | crypto = kirkwood_register_gate("crypto", CGC_BIT_CRYPTO); |
| 102 | kirkwood_register_gate("xor0", CGC_BIT_XOR0); | 103 | kirkwood_register_gate("xor0", CGC_BIT_XOR0); |
| 103 | kirkwood_register_gate("xor1", CGC_BIT_XOR1); | 104 | kirkwood_register_gate("xor1", CGC_BIT_XOR1); |
| 104 | kirkwood_register_gate("pex0", CGC_BIT_PEX0); | 105 | kirkwood_register_gate("pex0", CGC_BIT_PEX0); |
| @@ -118,6 +119,7 @@ void __init kirkwood_clk_init(void) | |||
| 118 | orion_clkdev_add(NULL, "orion-ehci.0", usb0); | 119 | orion_clkdev_add(NULL, "orion-ehci.0", usb0); |
| 119 | orion_clkdev_add(NULL, "orion_nand", runit); | 120 | orion_clkdev_add(NULL, "orion_nand", runit); |
| 120 | orion_clkdev_add(NULL, "mvsdio", sdio); | 121 | orion_clkdev_add(NULL, "mvsdio", sdio); |
| 122 | orion_clkdev_add(NULL, "mv_crypto", crypto); | ||
| 121 | } | 123 | } |
| 122 | 124 | ||
| 123 | /***************************************************************************** | 125 | /***************************************************************************** |
diff --git a/drivers/crypto/mv_cesa.c b/drivers/crypto/mv_cesa.c index e6ecc5f23943..1cc6b3f3e262 100644 --- a/drivers/crypto/mv_cesa.c +++ b/drivers/crypto/mv_cesa.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/scatterlist.h> | 16 | #include <linux/scatterlist.h> |
| 17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
| 18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
| 19 | #include <linux/clk.h> | ||
| 19 | #include <crypto/internal/hash.h> | 20 | #include <crypto/internal/hash.h> |
| 20 | #include <crypto/sha.h> | 21 | #include <crypto/sha.h> |
| 21 | 22 | ||
| @@ -79,6 +80,7 @@ struct crypto_priv { | |||
| 79 | void __iomem *reg; | 80 | void __iomem *reg; |
| 80 | void __iomem *sram; | 81 | void __iomem *sram; |
| 81 | int irq; | 82 | int irq; |
| 83 | struct clk *clk; | ||
| 82 | struct task_struct *queue_th; | 84 | struct task_struct *queue_th; |
| 83 | 85 | ||
| 84 | /* the lock protects queue and eng_st */ | 86 | /* the lock protects queue and eng_st */ |
| @@ -1053,6 +1055,12 @@ static int mv_probe(struct platform_device *pdev) | |||
| 1053 | if (ret) | 1055 | if (ret) |
| 1054 | goto err_thread; | 1056 | goto err_thread; |
| 1055 | 1057 | ||
| 1058 | /* Not all platforms can gate the clock, so it is not | ||
| 1059 | an error if the clock does not exists. */ | ||
| 1060 | cp->clk = clk_get(&pdev->dev, NULL); | ||
| 1061 | if (!IS_ERR(cp->clk)) | ||
| 1062 | clk_prepare_enable(cp->clk); | ||
| 1063 | |||
| 1056 | writel(SEC_INT_ACCEL0_DONE, cpg->reg + SEC_ACCEL_INT_MASK); | 1064 | writel(SEC_INT_ACCEL0_DONE, cpg->reg + SEC_ACCEL_INT_MASK); |
| 1057 | writel(SEC_CFG_STOP_DIG_ERR, cpg->reg + SEC_ACCEL_CFG); | 1065 | writel(SEC_CFG_STOP_DIG_ERR, cpg->reg + SEC_ACCEL_CFG); |
| 1058 | writel(SRAM_CONFIG, cpg->reg + SEC_ACCEL_DESC_P0); | 1066 | writel(SRAM_CONFIG, cpg->reg + SEC_ACCEL_DESC_P0); |
| @@ -1118,6 +1126,12 @@ static int mv_remove(struct platform_device *pdev) | |||
| 1118 | memset(cp->sram, 0, cp->sram_size); | 1126 | memset(cp->sram, 0, cp->sram_size); |
| 1119 | iounmap(cp->sram); | 1127 | iounmap(cp->sram); |
| 1120 | iounmap(cp->reg); | 1128 | iounmap(cp->reg); |
| 1129 | |||
| 1130 | if (!IS_ERR(cp->clk)) { | ||
| 1131 | clk_disable_unprepare(cp->clk); | ||
| 1132 | clk_put(cp->clk); | ||
| 1133 | } | ||
| 1134 | |||
| 1121 | kfree(cp); | 1135 | kfree(cp); |
| 1122 | cpg = NULL; | 1136 | cpg = NULL; |
| 1123 | return 0; | 1137 | return 0; |
