mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-24 10:11:26 +03:00
gpu: host1x: Request syncpoint IRQs only during probe
Syncpoint IRQs are currently requested in a code path that runs during resume. Due to this, we get multiple overlapping registered interrupt handlers as host1x is suspended and resumed. Rearrange interrupt code to only request IRQs during initialization. Bug 4658418 Signed-off-by: Mikko Perttunen <mperttunen@nvidia.com> Change-Id: I25e129452aeb39c23aa2d6f6a54729f60390d088 Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3145171 Reviewed-by: Santosh BS <santoshb@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
d2a5a35cfe
commit
60b43d6545
@@ -6,7 +6,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/clk.h>
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
#include "dev.h"
|
||||
#include "fence.h"
|
||||
#include "intr.h"
|
||||
@@ -100,7 +100,9 @@ void host1x_intr_handle_interrupt(struct host1x *host, unsigned int id, ktime_t
|
||||
|
||||
int host1x_intr_init(struct host1x *host)
|
||||
{
|
||||
struct host1x_intr_irq_data *irq_data;
|
||||
unsigned int id;
|
||||
int i, err;
|
||||
|
||||
mutex_init(&host->intr_mutex);
|
||||
|
||||
@@ -111,6 +113,23 @@ int host1x_intr_init(struct host1x *host)
|
||||
INIT_LIST_HEAD(&syncpt->fences.list);
|
||||
}
|
||||
|
||||
irq_data = devm_kcalloc(host->dev, host->num_syncpt_irqs, sizeof(irq_data[0]), GFP_KERNEL);
|
||||
if (!irq_data)
|
||||
return -ENOMEM;
|
||||
|
||||
host1x_hw_intr_disable_all_syncpt_intrs(host);
|
||||
|
||||
for (i = 0; i < host->num_syncpt_irqs; i++) {
|
||||
irq_data[i].host = host;
|
||||
irq_data[i].offset = i;
|
||||
|
||||
err = devm_request_irq(host->dev, host->syncpt_irqs[i],
|
||||
host->intr_op->isr, IRQF_SHARED,
|
||||
"host1x_syncpt", &irq_data[i]);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user