diff options
author | Victor(Weiguo) Pan <wpan@nvidia.com> | 2012-07-02 15:53:08 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 00:48:20 -0700 |
commit | 6e04c14b94aa3568ebc8f4cafc1030f2d33c51ee (patch) | |
tree | 3e23a874772a65b14373670b7d7cc00520cef0f5 /drivers/crypto | |
parent | b019ab0a498b95e8fb62fa3edfbb60d062637f0a (diff) |
crypto: tegra-se: Enable interrupts after clock enable
Because SE interrupts could be enabled in bootloader, if it's not
cleared before jumping into kernel, it continues to assert the
interrupt line to interrupt controller. When SE interrupts is
enabled in kernel, to access SE registers in IST without clock
enabled hung the CPU. To fix this issue, interrupt enabling is
moved after clock is enabled.
bug 1010334
Change-Id: I1b909efce2c9d92c3112039fc217f7c1360f9bbb
Reviewed-on: http://git-master/r/113073
(cherry picked from commit b06e6662f738ad01a3b2b6803db654abaa03385e)
Signed-off-by: Victor(Weiguo) Pan <wpan@nvidia.com>
Change-Id: Ide4b0295c781e0bba7aa071616e3e6160e44ee76
Reviewed-on: http://git-master/r/114064
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Rebase-Id: R1305d95edece3af1653a8e8ad5e86dc5aded76f4
Diffstat (limited to 'drivers/crypto')
-rw-r--r-- | drivers/crypto/tegra-se.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/crypto/tegra-se.c b/drivers/crypto/tegra-se.c index d0a5494a53ee..abe153dcd347 100644 --- a/drivers/crypto/tegra-se.c +++ b/drivers/crypto/tegra-se.c @@ -2420,14 +2420,6 @@ static int tegra_se_probe(struct platform_device *pdev) goto err_irq; } - err = request_irq(se_dev->irq, tegra_se_irq, IRQF_DISABLED, - DRIVER_NAME, se_dev); - if (err) { - dev_err(se_dev->dev, "request_irq failed - irq[%d] err[%d]\n", - se_dev->irq, err); - goto err_irq; - } - se_dev->chipdata = (struct tegra_se_chipdata *)pdev->id_entry->driver_data; @@ -2469,6 +2461,14 @@ static int tegra_se_probe(struct platform_device *pdev) pm_runtime_enable(se_dev->dev); tegra_se_key_read_disable_all(); + err = request_irq(se_dev->irq, tegra_se_irq, IRQF_DISABLED, + DRIVER_NAME, se_dev); + if (err) { + dev_err(se_dev->dev, "request_irq failed - irq[%d] err[%d]\n", + se_dev->irq, err); + goto err_irq; + } + err = tegra_se_alloc_ll_buf(se_dev, SE_MAX_SRC_SG_COUNT, SE_MAX_DST_SG_COUNT); if (err) { |