gpu: nvgpu: Request irq at probe

Request irq at probe instead of at poweron. This allows investigating
interrupt numbers across rail gating cycles.

Change-Id: I6db4b3f1d865c6fbbd9d6a96c3df89617e169891
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Signed-off-by: Arto Merilainen <amerilainen@nvidia.com>
Reviewed-on: http://git-master/r/374859
This commit is contained in:
Terje Bergstrom
2014-02-26 13:31:46 +02:00
committed by Dan Willemsen
parent b4f4eca2bb
commit 5515f947a3
2 changed files with 35 additions and 35 deletions

View File

@@ -627,11 +627,8 @@ static void gk20a_remove_support(struct platform_device *dev)
release_firmware(g->pmu_fw);
if (g->irq_requested) {
free_irq(g->irq_stall, g);
free_irq(g->irq_nonstall, g);
g->irq_requested = false;
}
free_irq(g->irq_stall, g);
free_irq(g->irq_nonstall, g);
/* free mappings to registers, etc*/
@@ -667,7 +664,6 @@ static int gk20a_init_support(struct platform_device *dev)
}
/* Get interrupt numbers */
g->irq_stall = platform_get_irq(dev, 0);
g->irq_nonstall = platform_get_irq(dev, 1);
if (g->irq_stall < 0 || g->irq_nonstall < 0) {
err = -ENXIO;
@@ -759,11 +755,8 @@ static int gk20a_pm_prepare_poweroff(struct device *_dev)
* After this point, gk20a interrupts should not get
* serviced.
*/
if (g->irq_requested) {
free_irq(g->irq_stall, g);
free_irq(g->irq_nonstall, g);
g->irq_requested = false;
}
disable_irq(g->irq_stall);
disable_irq(g->irq_nonstall);
/* disable elpg before gr or fifo suspend */
ret |= gk20a_pmu_destroy(g);
@@ -810,29 +803,8 @@ static int gk20a_pm_finalize_poweron(struct device *_dev)
nice_value = task_nice(current);
set_user_nice(current, -20);
if (!g->irq_requested) {
err = request_threaded_irq(g->irq_stall,
gk20a_intr_isr_stall,
gk20a_intr_thread_stall,
0, "gk20a_stall", g);
if (err) {
dev_err(dev_from_gk20a(g),
"failed to request stall intr irq @ %lld\n",
(u64)g->irq_stall);
goto done;
}
err = request_threaded_irq(g->irq_nonstall,
gk20a_intr_isr_nonstall,
gk20a_intr_thread_nonstall,
0, "gk20a_nonstall", g);
if (err) {
dev_err(dev_from_gk20a(g),
"failed to request non-stall intr irq @ %lld\n",
(u64)g->irq_nonstall);
goto done;
}
g->irq_requested = true;
}
enable_irq(g->irq_stall);
enable_irq(g->irq_nonstall);
g->power_on = true;
@@ -1346,6 +1318,35 @@ static int gk20a_probe(struct platform_device *dev)
set_gk20a(dev, gk20a);
gk20a->dev = dev;
gk20a->irq_stall = platform_get_irq(dev, 0);
gk20a->irq_nonstall = platform_get_irq(dev, 1);
if (gk20a->irq_stall < 0 || gk20a->irq_nonstall < 0)
return -ENXIO;
err = devm_request_threaded_irq(&dev->dev,
gk20a->irq_stall,
gk20a_intr_isr_stall,
gk20a_intr_thread_stall,
0, "gk20a_stall", gk20a);
if (err) {
dev_err(&dev->dev,
"failed to request stall intr irq @ %d\n",
gk20a->irq_stall);
return err;
}
err = devm_request_threaded_irq(&dev->dev,
gk20a->irq_nonstall,
gk20a_intr_isr_nonstall,
gk20a_intr_thread_nonstall,
0, "gk20a_nonstall", gk20a);
if (err) {
dev_err(&dev->dev,
"failed to request non-stall intr irq @ %d\n",
gk20a->irq_nonstall);
return err;
}
disable_irq(gk20a->irq_stall);
disable_irq(gk20a->irq_nonstall);
err = gk20a_user_init(dev);
if (err)
return err;

View File

@@ -217,7 +217,6 @@ struct gk20a {
void __iomem *bar1;
bool power_on;
bool irq_requested;
struct clk_gk20a clk;
struct fifo_gk20a fifo;