mirror of
git://nv-tegra.nvidia.com/linux-nvgpu.git
synced 2025-12-24 10:34:43 +03:00
gpu: nvgpu: add init_pbdma_intr_desc fifo ops
Init device_fatal, channel_fatal and restartable fifo intr pbdma s/w
variables for pbdma_intr_0 interrupt masks for each GPU version separately
pbdma_intr_0 field differences for each GPU version:-
-gk20a : bit 28 does not exists in hw
-gm20b : bit 8(lbreq), 20(xbarconnect) and 28 do not exist in hw
-gp10b : bit 8(lbreq), 20(xbarconnect) do not exist in hw. bit 28,
(syncpoint_illegal) added in hw but is not being handled.
-gk20a/gm20b/gp10b
bit 24 eng_reset and bit 25 semaphore always existed in hw but never
handled
JIRA GPUT19X-47
Change-Id: I209191f57c5ea5b15081b7dc2411801d3537017c
Signed-off-by: Seema Khowala <seemaj@nvidia.com>
Reviewed-on: http://git-master/r/1325402
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
committed by
mobile promotions
parent
4492c62ffe
commit
df94d474a8
@@ -26,6 +26,7 @@
|
||||
#include <nvgpu/hw/gm20b/hw_ram_gm20b.h>
|
||||
#include <nvgpu/hw/gm20b/hw_fifo_gm20b.h>
|
||||
#include <nvgpu/hw/gm20b/hw_top_gm20b.h>
|
||||
#include <nvgpu/hw/gm20b/hw_pbdma_gm20b.h>
|
||||
|
||||
static void channel_gm20b_bind(struct channel_gk20a *c)
|
||||
{
|
||||
@@ -138,6 +139,51 @@ static void gm20b_device_info_data_parse(struct gk20a *g,
|
||||
gk20a_err(g->dev, "unknown device_info_data %d",
|
||||
top_device_info_data_type_v(table_entry));
|
||||
}
|
||||
|
||||
static void gm20b_fifo_init_pbdma_intr_descs(struct fifo_gk20a *f)
|
||||
{
|
||||
/*
|
||||
* These are all errors which indicate something really wrong
|
||||
* going on in the device.
|
||||
*/
|
||||
f->intr.pbdma.device_fatal_0 =
|
||||
pbdma_intr_0_memreq_pending_f() |
|
||||
pbdma_intr_0_memack_timeout_pending_f() |
|
||||
pbdma_intr_0_memack_extra_pending_f() |
|
||||
pbdma_intr_0_memdat_timeout_pending_f() |
|
||||
pbdma_intr_0_memdat_extra_pending_f() |
|
||||
pbdma_intr_0_memflush_pending_f() |
|
||||
pbdma_intr_0_memop_pending_f() |
|
||||
pbdma_intr_0_lbconnect_pending_f() |
|
||||
pbdma_intr_0_lback_timeout_pending_f() |
|
||||
pbdma_intr_0_lback_extra_pending_f() |
|
||||
pbdma_intr_0_lbdat_timeout_pending_f() |
|
||||
pbdma_intr_0_lbdat_extra_pending_f() |
|
||||
pbdma_intr_0_pri_pending_f();
|
||||
|
||||
/*
|
||||
* These are data parsing, framing errors or others which can be
|
||||
* recovered from with intervention... or just resetting the
|
||||
* channel
|
||||
*/
|
||||
f->intr.pbdma.channel_fatal_0 =
|
||||
pbdma_intr_0_gpfifo_pending_f() |
|
||||
pbdma_intr_0_gpptr_pending_f() |
|
||||
pbdma_intr_0_gpentry_pending_f() |
|
||||
pbdma_intr_0_gpcrc_pending_f() |
|
||||
pbdma_intr_0_pbptr_pending_f() |
|
||||
pbdma_intr_0_pbentry_pending_f() |
|
||||
pbdma_intr_0_pbcrc_pending_f() |
|
||||
pbdma_intr_0_method_pending_f() |
|
||||
pbdma_intr_0_methodcrc_pending_f() |
|
||||
pbdma_intr_0_pbseg_pending_f() |
|
||||
pbdma_intr_0_signature_pending_f();
|
||||
|
||||
/* Can be used for sw-methods, or represents a recoverable timeout. */
|
||||
f->intr.pbdma.restartable_0 =
|
||||
pbdma_intr_0_device_pending_f();
|
||||
}
|
||||
|
||||
void gm20b_init_fifo(struct gpu_ops *gops)
|
||||
{
|
||||
gops->fifo.init_fifo_setup_hw = gk20a_init_fifo_setup_hw;
|
||||
@@ -176,4 +222,5 @@ void gm20b_init_fifo(struct gpu_ops *gops)
|
||||
gops->fifo.dump_channel_status_ramfc = gk20a_dump_channel_status_ramfc;
|
||||
gops->fifo.intr_0_error_mask = gk20a_fifo_intr_0_error_mask;
|
||||
gops->fifo.is_preempt_pending = gk20a_fifo_is_preempt_pending;
|
||||
gops->fifo.init_pbdma_intr_descs = gm20b_fifo_init_pbdma_intr_descs;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user