Commit 312c4a8c authored by Christian König's avatar Christian König Committed by Dave Airlie

drm/radeon: make radeon_gpu_is_lockup a per ring function

Different rings have different criteria to test
if they are stuck.

v2: rebased on current drm-next
Signed-off-by: default avatarChristian König <deathsimple@vodafone.de>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Reviewed-by: default avatarJerome Glisse <jglisse@redhat.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 87438494
...@@ -1162,7 +1162,6 @@ struct radeon_asic { ...@@ -1162,7 +1162,6 @@ struct radeon_asic {
int (*resume)(struct radeon_device *rdev); int (*resume)(struct radeon_device *rdev);
int (*suspend)(struct radeon_device *rdev); int (*suspend)(struct radeon_device *rdev);
void (*vga_set_state)(struct radeon_device *rdev, bool state); void (*vga_set_state)(struct radeon_device *rdev, bool state);
bool (*gpu_is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp);
int (*asic_reset)(struct radeon_device *rdev); int (*asic_reset)(struct radeon_device *rdev);
/* ioctl hw specific callback. Some hw might want to perform special /* ioctl hw specific callback. Some hw might want to perform special
* operation on specific ioctl. For instance on wait idle some hw * operation on specific ioctl. For instance on wait idle some hw
...@@ -1191,6 +1190,7 @@ struct radeon_asic { ...@@ -1191,6 +1190,7 @@ struct radeon_asic {
void (*ring_start)(struct radeon_device *rdev, struct radeon_ring *cp); void (*ring_start)(struct radeon_device *rdev, struct radeon_ring *cp);
int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp); int (*ring_test)(struct radeon_device *rdev, struct radeon_ring *cp);
int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp); int (*ib_test)(struct radeon_device *rdev, struct radeon_ring *cp);
bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp);
} ring[RADEON_NUM_RINGS]; } ring[RADEON_NUM_RINGS];
/* irqs */ /* irqs */
struct { struct {
...@@ -1740,7 +1740,6 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v); ...@@ -1740,7 +1740,6 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
#define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev))
#define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)].cs_parse((p)) #define radeon_cs_parse(rdev, r, p) (rdev)->asic->ring[(r)].cs_parse((p))
#define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state)) #define radeon_vga_set_state(rdev, state) (rdev)->asic->vga_set_state((rdev), (state))
#define radeon_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp))
#define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev)) #define radeon_asic_reset(rdev) (rdev)->asic->asic_reset((rdev))
#define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev)) #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart.tlb_flush((rdev))
#define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) #define radeon_gart_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p))
...@@ -1749,6 +1748,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v); ...@@ -1749,6 +1748,7 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v);
#define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp)) #define radeon_ib_test(rdev, r, cp) (rdev)->asic->ring[(r)].ib_test((rdev), (cp))
#define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib)) #define radeon_ring_ib_execute(rdev, r, ib) (rdev)->asic->ring[(r)].ib_execute((rdev), (ib))
#define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib)) #define radeon_ring_ib_parse(rdev, r, ib) (rdev)->asic->ring[(r)].ib_parse((rdev), (ib))
#define radeon_ring_is_lockup(rdev, r, cp) (rdev)->asic->ring[(r)].is_lockup((rdev), (cp))
#define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev)) #define radeon_irq_set(rdev) (rdev)->asic->irq.set((rdev))
#define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev)) #define radeon_irq_process(rdev) (rdev)->asic->irq.process((rdev))
#define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc))
......
...@@ -134,7 +134,6 @@ static struct radeon_asic r100_asic = { ...@@ -134,7 +134,6 @@ static struct radeon_asic r100_asic = {
.suspend = &r100_suspend, .suspend = &r100_suspend,
.resume = &r100_resume, .resume = &r100_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r100_gpu_is_lockup,
.asic_reset = &r100_asic_reset, .asic_reset = &r100_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -152,6 +151,7 @@ static struct radeon_asic r100_asic = { ...@@ -152,6 +151,7 @@ static struct radeon_asic r100_asic = {
.ring_start = &r100_ring_start, .ring_start = &r100_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r100_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -208,7 +208,6 @@ static struct radeon_asic r200_asic = { ...@@ -208,7 +208,6 @@ static struct radeon_asic r200_asic = {
.suspend = &r100_suspend, .suspend = &r100_suspend,
.resume = &r100_resume, .resume = &r100_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r100_gpu_is_lockup,
.asic_reset = &r100_asic_reset, .asic_reset = &r100_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -226,6 +225,7 @@ static struct radeon_asic r200_asic = { ...@@ -226,6 +225,7 @@ static struct radeon_asic r200_asic = {
.ring_start = &r100_ring_start, .ring_start = &r100_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r100_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -282,7 +282,6 @@ static struct radeon_asic r300_asic = { ...@@ -282,7 +282,6 @@ static struct radeon_asic r300_asic = {
.suspend = &r300_suspend, .suspend = &r300_suspend,
.resume = &r300_resume, .resume = &r300_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r300_gpu_is_lockup,
.asic_reset = &r300_asic_reset, .asic_reset = &r300_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -300,6 +299,7 @@ static struct radeon_asic r300_asic = { ...@@ -300,6 +299,7 @@ static struct radeon_asic r300_asic = {
.ring_start = &r300_ring_start, .ring_start = &r300_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r300_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -356,7 +356,6 @@ static struct radeon_asic r300_asic_pcie = { ...@@ -356,7 +356,6 @@ static struct radeon_asic r300_asic_pcie = {
.suspend = &r300_suspend, .suspend = &r300_suspend,
.resume = &r300_resume, .resume = &r300_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r300_gpu_is_lockup,
.asic_reset = &r300_asic_reset, .asic_reset = &r300_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -374,6 +373,7 @@ static struct radeon_asic r300_asic_pcie = { ...@@ -374,6 +373,7 @@ static struct radeon_asic r300_asic_pcie = {
.ring_start = &r300_ring_start, .ring_start = &r300_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r300_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -430,7 +430,6 @@ static struct radeon_asic r420_asic = { ...@@ -430,7 +430,6 @@ static struct radeon_asic r420_asic = {
.suspend = &r420_suspend, .suspend = &r420_suspend,
.resume = &r420_resume, .resume = &r420_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r300_gpu_is_lockup,
.asic_reset = &r300_asic_reset, .asic_reset = &r300_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -448,6 +447,7 @@ static struct radeon_asic r420_asic = { ...@@ -448,6 +447,7 @@ static struct radeon_asic r420_asic = {
.ring_start = &r300_ring_start, .ring_start = &r300_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r300_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -504,7 +504,6 @@ static struct radeon_asic rs400_asic = { ...@@ -504,7 +504,6 @@ static struct radeon_asic rs400_asic = {
.suspend = &rs400_suspend, .suspend = &rs400_suspend,
.resume = &rs400_resume, .resume = &rs400_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r300_gpu_is_lockup,
.asic_reset = &r300_asic_reset, .asic_reset = &r300_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -522,6 +521,7 @@ static struct radeon_asic rs400_asic = { ...@@ -522,6 +521,7 @@ static struct radeon_asic rs400_asic = {
.ring_start = &r300_ring_start, .ring_start = &r300_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r300_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -578,7 +578,6 @@ static struct radeon_asic rs600_asic = { ...@@ -578,7 +578,6 @@ static struct radeon_asic rs600_asic = {
.suspend = &rs600_suspend, .suspend = &rs600_suspend,
.resume = &rs600_resume, .resume = &rs600_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r300_gpu_is_lockup,
.asic_reset = &rs600_asic_reset, .asic_reset = &rs600_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -596,6 +595,7 @@ static struct radeon_asic rs600_asic = { ...@@ -596,6 +595,7 @@ static struct radeon_asic rs600_asic = {
.ring_start = &r300_ring_start, .ring_start = &r300_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r300_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -652,7 +652,6 @@ static struct radeon_asic rs690_asic = { ...@@ -652,7 +652,6 @@ static struct radeon_asic rs690_asic = {
.suspend = &rs690_suspend, .suspend = &rs690_suspend,
.resume = &rs690_resume, .resume = &rs690_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r300_gpu_is_lockup,
.asic_reset = &rs600_asic_reset, .asic_reset = &rs600_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -670,6 +669,7 @@ static struct radeon_asic rs690_asic = { ...@@ -670,6 +669,7 @@ static struct radeon_asic rs690_asic = {
.ring_start = &r300_ring_start, .ring_start = &r300_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r300_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -726,7 +726,6 @@ static struct radeon_asic rv515_asic = { ...@@ -726,7 +726,6 @@ static struct radeon_asic rv515_asic = {
.suspend = &rv515_suspend, .suspend = &rv515_suspend,
.resume = &rv515_resume, .resume = &rv515_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r300_gpu_is_lockup,
.asic_reset = &rs600_asic_reset, .asic_reset = &rs600_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -744,6 +743,7 @@ static struct radeon_asic rv515_asic = { ...@@ -744,6 +743,7 @@ static struct radeon_asic rv515_asic = {
.ring_start = &rv515_ring_start, .ring_start = &rv515_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r300_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -800,7 +800,6 @@ static struct radeon_asic r520_asic = { ...@@ -800,7 +800,6 @@ static struct radeon_asic r520_asic = {
.suspend = &rv515_suspend, .suspend = &rv515_suspend,
.resume = &r520_resume, .resume = &r520_resume,
.vga_set_state = &r100_vga_set_state, .vga_set_state = &r100_vga_set_state,
.gpu_is_lockup = &r300_gpu_is_lockup,
.asic_reset = &rs600_asic_reset, .asic_reset = &rs600_asic_reset,
.ioctl_wait_idle = NULL, .ioctl_wait_idle = NULL,
.gui_idle = &r100_gui_idle, .gui_idle = &r100_gui_idle,
...@@ -818,6 +817,7 @@ static struct radeon_asic r520_asic = { ...@@ -818,6 +817,7 @@ static struct radeon_asic r520_asic = {
.ring_start = &rv515_ring_start, .ring_start = &rv515_ring_start,
.ring_test = &r100_ring_test, .ring_test = &r100_ring_test,
.ib_test = &r100_ib_test, .ib_test = &r100_ib_test,
.is_lockup = &r300_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -874,7 +874,6 @@ static struct radeon_asic r600_asic = { ...@@ -874,7 +874,6 @@ static struct radeon_asic r600_asic = {
.suspend = &r600_suspend, .suspend = &r600_suspend,
.resume = &r600_resume, .resume = &r600_resume,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.gpu_is_lockup = &r600_gpu_is_lockup,
.asic_reset = &r600_asic_reset, .asic_reset = &r600_asic_reset,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
.gui_idle = &r600_gui_idle, .gui_idle = &r600_gui_idle,
...@@ -891,6 +890,7 @@ static struct radeon_asic r600_asic = { ...@@ -891,6 +890,7 @@ static struct radeon_asic r600_asic = {
.cs_parse = &r600_cs_parse, .cs_parse = &r600_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &r600_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -946,7 +946,6 @@ static struct radeon_asic rs780_asic = { ...@@ -946,7 +946,6 @@ static struct radeon_asic rs780_asic = {
.fini = &r600_fini, .fini = &r600_fini,
.suspend = &r600_suspend, .suspend = &r600_suspend,
.resume = &r600_resume, .resume = &r600_resume,
.gpu_is_lockup = &r600_gpu_is_lockup,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.asic_reset = &r600_asic_reset, .asic_reset = &r600_asic_reset,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
...@@ -964,6 +963,7 @@ static struct radeon_asic rs780_asic = { ...@@ -964,6 +963,7 @@ static struct radeon_asic rs780_asic = {
.cs_parse = &r600_cs_parse, .cs_parse = &r600_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &r600_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -1020,7 +1020,6 @@ static struct radeon_asic rv770_asic = { ...@@ -1020,7 +1020,6 @@ static struct radeon_asic rv770_asic = {
.suspend = &rv770_suspend, .suspend = &rv770_suspend,
.resume = &rv770_resume, .resume = &rv770_resume,
.asic_reset = &r600_asic_reset, .asic_reset = &r600_asic_reset,
.gpu_is_lockup = &r600_gpu_is_lockup,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
.gui_idle = &r600_gui_idle, .gui_idle = &r600_gui_idle,
...@@ -1037,6 +1036,7 @@ static struct radeon_asic rv770_asic = { ...@@ -1037,6 +1036,7 @@ static struct radeon_asic rv770_asic = {
.cs_parse = &r600_cs_parse, .cs_parse = &r600_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &r600_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -1092,7 +1092,6 @@ static struct radeon_asic evergreen_asic = { ...@@ -1092,7 +1092,6 @@ static struct radeon_asic evergreen_asic = {
.fini = &evergreen_fini, .fini = &evergreen_fini,
.suspend = &evergreen_suspend, .suspend = &evergreen_suspend,
.resume = &evergreen_resume, .resume = &evergreen_resume,
.gpu_is_lockup = &evergreen_gpu_is_lockup,
.asic_reset = &evergreen_asic_reset, .asic_reset = &evergreen_asic_reset,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
...@@ -1110,6 +1109,7 @@ static struct radeon_asic evergreen_asic = { ...@@ -1110,6 +1109,7 @@ static struct radeon_asic evergreen_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &evergreen_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -1165,7 +1165,6 @@ static struct radeon_asic sumo_asic = { ...@@ -1165,7 +1165,6 @@ static struct radeon_asic sumo_asic = {
.fini = &evergreen_fini, .fini = &evergreen_fini,
.suspend = &evergreen_suspend, .suspend = &evergreen_suspend,
.resume = &evergreen_resume, .resume = &evergreen_resume,
.gpu_is_lockup = &evergreen_gpu_is_lockup,
.asic_reset = &evergreen_asic_reset, .asic_reset = &evergreen_asic_reset,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
...@@ -1183,6 +1182,7 @@ static struct radeon_asic sumo_asic = { ...@@ -1183,6 +1182,7 @@ static struct radeon_asic sumo_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &evergreen_gpu_is_lockup,
}, },
}, },
.irq = { .irq = {
...@@ -1238,7 +1238,6 @@ static struct radeon_asic btc_asic = { ...@@ -1238,7 +1238,6 @@ static struct radeon_asic btc_asic = {
.fini = &evergreen_fini, .fini = &evergreen_fini,
.suspend = &evergreen_suspend, .suspend = &evergreen_suspend,
.resume = &evergreen_resume, .resume = &evergreen_resume,
.gpu_is_lockup = &evergreen_gpu_is_lockup,
.asic_reset = &evergreen_asic_reset, .asic_reset = &evergreen_asic_reset,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
...@@ -1256,6 +1255,7 @@ static struct radeon_asic btc_asic = { ...@@ -1256,6 +1255,7 @@ static struct radeon_asic btc_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &evergreen_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -1321,7 +1321,6 @@ static struct radeon_asic cayman_asic = { ...@@ -1321,7 +1321,6 @@ static struct radeon_asic cayman_asic = {
.fini = &cayman_fini, .fini = &cayman_fini,
.suspend = &cayman_suspend, .suspend = &cayman_suspend,
.resume = &cayman_resume, .resume = &cayman_resume,
.gpu_is_lockup = &cayman_gpu_is_lockup,
.asic_reset = &cayman_asic_reset, .asic_reset = &cayman_asic_reset,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
...@@ -1340,6 +1339,7 @@ static struct radeon_asic cayman_asic = { ...@@ -1340,6 +1339,7 @@ static struct radeon_asic cayman_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &cayman_gpu_is_lockup,
}, },
[CAYMAN_RING_TYPE_CP1_INDEX] = { [CAYMAN_RING_TYPE_CP1_INDEX] = {
.ib_execute = &cayman_ring_ib_execute, .ib_execute = &cayman_ring_ib_execute,
...@@ -1349,6 +1349,7 @@ static struct radeon_asic cayman_asic = { ...@@ -1349,6 +1349,7 @@ static struct radeon_asic cayman_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &cayman_gpu_is_lockup,
}, },
[CAYMAN_RING_TYPE_CP2_INDEX] = { [CAYMAN_RING_TYPE_CP2_INDEX] = {
.ib_execute = &cayman_ring_ib_execute, .ib_execute = &cayman_ring_ib_execute,
...@@ -1358,6 +1359,7 @@ static struct radeon_asic cayman_asic = { ...@@ -1358,6 +1359,7 @@ static struct radeon_asic cayman_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &cayman_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -1413,7 +1415,6 @@ static struct radeon_asic trinity_asic = { ...@@ -1413,7 +1415,6 @@ static struct radeon_asic trinity_asic = {
.fini = &cayman_fini, .fini = &cayman_fini,
.suspend = &cayman_suspend, .suspend = &cayman_suspend,
.resume = &cayman_resume, .resume = &cayman_resume,
.gpu_is_lockup = &cayman_gpu_is_lockup,
.asic_reset = &cayman_asic_reset, .asic_reset = &cayman_asic_reset,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
...@@ -1432,6 +1433,7 @@ static struct radeon_asic trinity_asic = { ...@@ -1432,6 +1433,7 @@ static struct radeon_asic trinity_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &cayman_gpu_is_lockup,
}, },
[CAYMAN_RING_TYPE_CP1_INDEX] = { [CAYMAN_RING_TYPE_CP1_INDEX] = {
.ib_execute = &cayman_ring_ib_execute, .ib_execute = &cayman_ring_ib_execute,
...@@ -1441,6 +1443,7 @@ static struct radeon_asic trinity_asic = { ...@@ -1441,6 +1443,7 @@ static struct radeon_asic trinity_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &cayman_gpu_is_lockup,
}, },
[CAYMAN_RING_TYPE_CP2_INDEX] = { [CAYMAN_RING_TYPE_CP2_INDEX] = {
.ib_execute = &cayman_ring_ib_execute, .ib_execute = &cayman_ring_ib_execute,
...@@ -1450,6 +1453,7 @@ static struct radeon_asic trinity_asic = { ...@@ -1450,6 +1453,7 @@ static struct radeon_asic trinity_asic = {
.cs_parse = &evergreen_cs_parse, .cs_parse = &evergreen_cs_parse,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &cayman_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
...@@ -1515,7 +1519,6 @@ static struct radeon_asic si_asic = { ...@@ -1515,7 +1519,6 @@ static struct radeon_asic si_asic = {
.fini = &si_fini, .fini = &si_fini,
.suspend = &si_suspend, .suspend = &si_suspend,
.resume = &si_resume, .resume = &si_resume,
.gpu_is_lockup = &si_gpu_is_lockup,
.asic_reset = &si_asic_reset, .asic_reset = &si_asic_reset,
.vga_set_state = &r600_vga_set_state, .vga_set_state = &r600_vga_set_state,
.ioctl_wait_idle = r600_ioctl_wait_idle, .ioctl_wait_idle = r600_ioctl_wait_idle,
...@@ -1534,6 +1537,7 @@ static struct radeon_asic si_asic = { ...@@ -1534,6 +1537,7 @@ static struct radeon_asic si_asic = {
.cs_parse = NULL, .cs_parse = NULL,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &si_gpu_is_lockup,
}, },
[CAYMAN_RING_TYPE_CP1_INDEX] = { [CAYMAN_RING_TYPE_CP1_INDEX] = {
.ib_execute = &si_ring_ib_execute, .ib_execute = &si_ring_ib_execute,
...@@ -1543,6 +1547,7 @@ static struct radeon_asic si_asic = { ...@@ -1543,6 +1547,7 @@ static struct radeon_asic si_asic = {
.cs_parse = NULL, .cs_parse = NULL,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &si_gpu_is_lockup,
}, },
[CAYMAN_RING_TYPE_CP2_INDEX] = { [CAYMAN_RING_TYPE_CP2_INDEX] = {
.ib_execute = &si_ring_ib_execute, .ib_execute = &si_ring_ib_execute,
...@@ -1552,6 +1557,7 @@ static struct radeon_asic si_asic = { ...@@ -1552,6 +1557,7 @@ static struct radeon_asic si_asic = {
.cs_parse = NULL, .cs_parse = NULL,
.ring_test = &r600_ring_test, .ring_test = &r600_ring_test,
.ib_test = &r600_ib_test, .ib_test = &r600_ib_test,
.is_lockup = &si_gpu_is_lockup,
} }
}, },
.irq = { .irq = {
......
...@@ -259,7 +259,7 @@ int radeon_fence_wait(struct radeon_fence *fence, bool intr) ...@@ -259,7 +259,7 @@ int radeon_fence_wait(struct radeon_fence *fence, bool intr)
* if we experiencing a lockup the value doesn't change * if we experiencing a lockup the value doesn't change
*/ */
if (seq == rdev->fence_drv[fence->ring].last_seq && if (seq == rdev->fence_drv[fence->ring].last_seq &&
radeon_gpu_is_lockup(rdev, &rdev->ring[fence->ring])) { radeon_ring_is_lockup(rdev, fence->ring, &rdev->ring[fence->ring])) {
/* good news we believe it's a lockup */ /* good news we believe it's a lockup */
printk(KERN_WARNING "GPU lockup (waiting for 0x%08X last fence id 0x%08X)\n", printk(KERN_WARNING "GPU lockup (waiting for 0x%08X last fence id 0x%08X)\n",
fence->seq, seq); fence->seq, seq);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment