[PATCH 1/4] drm/radeon: make radeon_gpu_is_lockup a per ring function
2012/4/11 Christian K?nig : > Different rings have different criteria to test > if they are stuck. > > Signed-off-by: Christian K?nig For the series: Reviewed-by: Alex Deucher > --- > ?drivers/gpu/drm/radeon/radeon.h ? ? ? | ? ?4 +- > ?drivers/gpu/drm/radeon/radeon_asic.c ?| ? 36 +--- > ?drivers/gpu/drm/radeon/radeon_fence.c | ? ?2 +- > ?3 files changed, 22 insertions(+), 20 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index d2870a0..4ee9a1a 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -1128,7 +1128,6 @@ struct radeon_asic { > ? ? ? ?int (*resume)(struct radeon_device *rdev); > ? ? ? ?int (*suspend)(struct radeon_device *rdev); > ? ? ? ?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); > ? ? ? ?/* ioctl hw specific callback. Some hw might want to perform special > ? ? ? ? * operation on specific ioctl. For instance on wait idle some hw > @@ -1157,6 +1156,7 @@ struct radeon_asic { > ? ? ? ? ? ? ? ?void (*ring_start)(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); > + ? ? ? ? ? ? ? bool (*is_lockup)(struct radeon_device *rdev, struct > radeon_ring *cp); > ? ? ? ?} ring[RADEON_NUM_RINGS]; > ? ? ? ?/* irqs */ > ? ? ? ?struct { > @@ -1677,7 +1677,6 @@ void radeon_ring_write(struct radeon_ring *ring, > uint32_t v); > ?#define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) > ?#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_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), > (cp)) > ?#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_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), > (i), (p)) > @@ -1686,6 +1685,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_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_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_process(rdev) (rdev)->asic->irq.process((rdev)) > ?#define radeon_get_vblank_counter(rdev, crtc) > (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) > diff --git a/drivers/gpu/drm/radeon/radeon_asic.c > b/drivers/gpu/drm/radeon/radeon_asic.c > index 479c89e..a99fc2b 100644 > --- a/drivers/gpu/drm/radeon/radeon_asic.c > +++ b/drivers/gpu/drm/radeon/radeon_asic.c > @@ -134,7 +134,6 @@ static struct radeon_asic r100_asic = { > ? ? ? ?.suspend = _suspend, > ? ? ? ?.resume = _resume, > ? ? ? ?.vga_set_state = _vga_set_state, > - ? ? ? .gpu_is_lockup = _gpu_is_lockup, > ? ? ? ?.asic_reset = _asic_reset, > ? ? ? ?.ioctl_wait_idle = NULL, > ? ? ? ?.gui_idle = _gui_idle, > @@ -152,6 +151,7 @@ static struct radeon_asic r100_asic = { > ? ? ? ? ? ? ? ? ? ? ? ?.ring_start = _ring_start, > ? ? ? ? ? ? ? ? ? ? ? ?.ring_test = _ring_test, > ? ? ? ? ? ? ? ? ? ? ? ?.ib_test = _ib_test, > + ? ? ? ? ? ? ? ? ? ? ? .is_lockup = _gpu_is_lockup, > ? ? ? ? ? ? ? ?} > ? ? ? ?}, > ? ? ? ?.irq = { > @@ -208,7 +208,6 @@ static struct radeon_asic r200_asic = { > ? ? ? ?.suspend = _suspend, > ? ? ? ?.resume = _resume, > ? ? ? ?.vga_set_state = _vga_set_state, > - ? ? ? .gpu_is_lockup = _gpu_is_lockup, > ? ? ? ?.asic_reset = _asic_reset, > ? ? ? ?.ioctl_wait_idle = NULL, > ? ? ? ?.gui_idle = _gui_idle, > @@ -226,6 +225,7 @@ static struct radeon_asic r200_asic = { > ? ? ? ? ? ? ? ? ? ? ? ?.ring_start = _ring_start, > ? ? ? ? ? ? ? ? ? ? ? ?.ring_test = _ring_test, > ? ? ? ? ? ? ? ? ? ? ? ?.ib_test = _ib_test, > + ? ? ? ? ? ? ? ? ? ? ? .is_lockup = _gpu_is_lockup, > ? ? ? ? ? ? ? ?} > ? ? ? ?}, > ? ? ? ?.irq = { > @@ -282,7 +282,6 @@ static struct radeon_asic r300_asic = { > ? ? ? ?.suspend = _suspend, > ? ? ? ?.resume = _resume, > ? ? ? ?.vga_set_state = _vga_set_state, > - ? ? ? .gpu_is_lockup = _gpu_is_lockup, > ? ? ? ?.asic_reset = _asic_reset, > ? ? ? ?.ioctl_wait_idle = NULL, > ? ? ? ?.gui_idle = _gui_idle, > @@ -300,6 +299,7 @@ static struct radeon_asic r300_asic = { > ? ? ? ? ? ? ? ? ? ? ? ?.ring_start = _ring_start, > ? ? ? ? ? ? ? ? ? ? ? ?.ring_test = _ring_test, > ? ? ? ? ? ? ? ? ? ? ? ?.ib_test = _ib_test, > + ? ? ? ? ? ? ? ? ? ? ? .is_lockup =
Re: [PATCH 1/4] drm/radeon: make radeon_gpu_is_lockup a per ring function
2012/4/11 Christian König deathsim...@vodafone.de: Different rings have different criteria to test if they are stuck. Signed-off-by: Christian König deathsim...@vodafone.de For the series: Reviewed-by: Alex Deucher alexander.deuc...@amd.com --- drivers/gpu/drm/radeon/radeon.h | 4 +- drivers/gpu/drm/radeon/radeon_asic.c | 36 +--- drivers/gpu/drm/radeon/radeon_fence.c | 2 +- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index d2870a0..4ee9a1a 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -1128,7 +1128,6 @@ struct radeon_asic { int (*resume)(struct radeon_device *rdev); int (*suspend)(struct radeon_device *rdev); 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); /* ioctl hw specific callback. Some hw might want to perform special * operation on specific ioctl. For instance on wait idle some hw @@ -1157,6 +1156,7 @@ struct radeon_asic { void (*ring_start)(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); + bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); } ring[RADEON_NUM_RINGS]; /* irqs */ struct { @@ -1677,7 +1677,6 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v); #define radeon_suspend(rdev) (rdev)-asic-suspend((rdev)) #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_gpu_is_lockup(rdev, cp) (rdev)-asic-gpu_is_lockup((rdev), (cp)) #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_set_page(rdev, i, p) (rdev)-asic-gart.set_page((rdev), (i), (p)) @@ -1686,6 +1685,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_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_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_process(rdev) (rdev)-asic-irq.process((rdev)) #define radeon_get_vblank_counter(rdev, crtc) (rdev)-asic-display.get_vblank_counter((rdev), (crtc)) diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index 479c89e..a99fc2b 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c @@ -134,7 +134,6 @@ static struct radeon_asic r100_asic = { .suspend = r100_suspend, .resume = r100_resume, .vga_set_state = r100_vga_set_state, - .gpu_is_lockup = r100_gpu_is_lockup, .asic_reset = r100_asic_reset, .ioctl_wait_idle = NULL, .gui_idle = r100_gui_idle, @@ -152,6 +151,7 @@ static struct radeon_asic r100_asic = { .ring_start = r100_ring_start, .ring_test = r100_ring_test, .ib_test = r100_ib_test, + .is_lockup = r100_gpu_is_lockup, } }, .irq = { @@ -208,7 +208,6 @@ static struct radeon_asic r200_asic = { .suspend = r100_suspend, .resume = r100_resume, .vga_set_state = r100_vga_set_state, - .gpu_is_lockup = r100_gpu_is_lockup, .asic_reset = r100_asic_reset, .ioctl_wait_idle = NULL, .gui_idle = r100_gui_idle, @@ -226,6 +225,7 @@ static struct radeon_asic r200_asic = { .ring_start = r100_ring_start, .ring_test = r100_ring_test, .ib_test = r100_ib_test, + .is_lockup = r100_gpu_is_lockup, } }, .irq = { @@ -282,7 +282,6 @@ static struct radeon_asic r300_asic = { .suspend = r300_suspend, .resume = r300_resume, .vga_set_state = r100_vga_set_state, - .gpu_is_lockup = r300_gpu_is_lockup, .asic_reset = r300_asic_reset, .ioctl_wait_idle = NULL, .gui_idle = r100_gui_idle, @@ -300,6 +299,7 @@ static struct radeon_asic r300_asic = { .ring_start = r300_ring_start, .ring_test = r100_ring_test, .ib_test = r100_ib_test, +
[PATCH 1/4] drm/radeon: make radeon_gpu_is_lockup a per ring function
Different rings have different criteria to test if they are stuck. Signed-off-by: Christian K?nig --- drivers/gpu/drm/radeon/radeon.h |4 +- drivers/gpu/drm/radeon/radeon_asic.c | 36 +--- drivers/gpu/drm/radeon/radeon_fence.c |2 +- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index d2870a0..4ee9a1a 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -1128,7 +1128,6 @@ struct radeon_asic { int (*resume)(struct radeon_device *rdev); int (*suspend)(struct radeon_device *rdev); 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); /* ioctl hw specific callback. Some hw might want to perform special * operation on specific ioctl. For instance on wait idle some hw @@ -1157,6 +1156,7 @@ struct radeon_asic { void (*ring_start)(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); + bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); } ring[RADEON_NUM_RINGS]; /* irqs */ struct { @@ -1677,7 +1677,6 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v); #define radeon_suspend(rdev) (rdev)->asic->suspend((rdev)) #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_gpu_is_lockup(rdev, cp) (rdev)->asic->gpu_is_lockup((rdev), (cp)) #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_set_page(rdev, i, p) (rdev)->asic->gart.set_page((rdev), (i), (p)) @@ -1686,6 +1685,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_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_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_process(rdev) (rdev)->asic->irq.process((rdev)) #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->display.get_vblank_counter((rdev), (crtc)) diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index 479c89e..a99fc2b 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c @@ -134,7 +134,6 @@ static struct radeon_asic r100_asic = { .suspend = _suspend, .resume = _resume, .vga_set_state = _vga_set_state, - .gpu_is_lockup = _gpu_is_lockup, .asic_reset = _asic_reset, .ioctl_wait_idle = NULL, .gui_idle = _gui_idle, @@ -152,6 +151,7 @@ static struct radeon_asic r100_asic = { .ring_start = _ring_start, .ring_test = _ring_test, .ib_test = _ib_test, + .is_lockup = _gpu_is_lockup, } }, .irq = { @@ -208,7 +208,6 @@ static struct radeon_asic r200_asic = { .suspend = _suspend, .resume = _resume, .vga_set_state = _vga_set_state, - .gpu_is_lockup = _gpu_is_lockup, .asic_reset = _asic_reset, .ioctl_wait_idle = NULL, .gui_idle = _gui_idle, @@ -226,6 +225,7 @@ static struct radeon_asic r200_asic = { .ring_start = _ring_start, .ring_test = _ring_test, .ib_test = _ib_test, + .is_lockup = _gpu_is_lockup, } }, .irq = { @@ -282,7 +282,6 @@ static struct radeon_asic r300_asic = { .suspend = _suspend, .resume = _resume, .vga_set_state = _vga_set_state, - .gpu_is_lockup = _gpu_is_lockup, .asic_reset = _asic_reset, .ioctl_wait_idle = NULL, .gui_idle = _gui_idle, @@ -300,6 +299,7 @@ static struct radeon_asic r300_asic = { .ring_start = _ring_start, .ring_test = _ring_test, .ib_test = _ib_test, + .is_lockup = _gpu_is_lockup, } }, .irq = { @@ -356,7 +356,6 @@ static struct radeon_asic r300_asic_pcie = { .suspend = _suspend, .resume = _resume, .vga_set_state = _vga_set_state, - .gpu_is_lockup =
[PATCH 1/4] drm/radeon: make radeon_gpu_is_lockup a per ring function
Different rings have different criteria to test if they are stuck. Signed-off-by: Christian König deathsim...@vodafone.de --- drivers/gpu/drm/radeon/radeon.h |4 +- drivers/gpu/drm/radeon/radeon_asic.c | 36 +--- drivers/gpu/drm/radeon/radeon_fence.c |2 +- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h index d2870a0..4ee9a1a 100644 --- a/drivers/gpu/drm/radeon/radeon.h +++ b/drivers/gpu/drm/radeon/radeon.h @@ -1128,7 +1128,6 @@ struct radeon_asic { int (*resume)(struct radeon_device *rdev); int (*suspend)(struct radeon_device *rdev); 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); /* ioctl hw specific callback. Some hw might want to perform special * operation on specific ioctl. For instance on wait idle some hw @@ -1157,6 +1156,7 @@ struct radeon_asic { void (*ring_start)(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); + bool (*is_lockup)(struct radeon_device *rdev, struct radeon_ring *cp); } ring[RADEON_NUM_RINGS]; /* irqs */ struct { @@ -1677,7 +1677,6 @@ void radeon_ring_write(struct radeon_ring *ring, uint32_t v); #define radeon_suspend(rdev) (rdev)-asic-suspend((rdev)) #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_gpu_is_lockup(rdev, cp) (rdev)-asic-gpu_is_lockup((rdev), (cp)) #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_set_page(rdev, i, p) (rdev)-asic-gart.set_page((rdev), (i), (p)) @@ -1686,6 +1685,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_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_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_process(rdev) (rdev)-asic-irq.process((rdev)) #define radeon_get_vblank_counter(rdev, crtc) (rdev)-asic-display.get_vblank_counter((rdev), (crtc)) diff --git a/drivers/gpu/drm/radeon/radeon_asic.c b/drivers/gpu/drm/radeon/radeon_asic.c index 479c89e..a99fc2b 100644 --- a/drivers/gpu/drm/radeon/radeon_asic.c +++ b/drivers/gpu/drm/radeon/radeon_asic.c @@ -134,7 +134,6 @@ static struct radeon_asic r100_asic = { .suspend = r100_suspend, .resume = r100_resume, .vga_set_state = r100_vga_set_state, - .gpu_is_lockup = r100_gpu_is_lockup, .asic_reset = r100_asic_reset, .ioctl_wait_idle = NULL, .gui_idle = r100_gui_idle, @@ -152,6 +151,7 @@ static struct radeon_asic r100_asic = { .ring_start = r100_ring_start, .ring_test = r100_ring_test, .ib_test = r100_ib_test, + .is_lockup = r100_gpu_is_lockup, } }, .irq = { @@ -208,7 +208,6 @@ static struct radeon_asic r200_asic = { .suspend = r100_suspend, .resume = r100_resume, .vga_set_state = r100_vga_set_state, - .gpu_is_lockup = r100_gpu_is_lockup, .asic_reset = r100_asic_reset, .ioctl_wait_idle = NULL, .gui_idle = r100_gui_idle, @@ -226,6 +225,7 @@ static struct radeon_asic r200_asic = { .ring_start = r100_ring_start, .ring_test = r100_ring_test, .ib_test = r100_ib_test, + .is_lockup = r100_gpu_is_lockup, } }, .irq = { @@ -282,7 +282,6 @@ static struct radeon_asic r300_asic = { .suspend = r300_suspend, .resume = r300_resume, .vga_set_state = r100_vga_set_state, - .gpu_is_lockup = r300_gpu_is_lockup, .asic_reset = r300_asic_reset, .ioctl_wait_idle = NULL, .gui_idle = r100_gui_idle, @@ -300,6 +299,7 @@ static struct radeon_asic r300_asic = { .ring_start = r300_ring_start, .ring_test = r100_ring_test, .ib_test = r100_ib_test, + .is_lockup = r300_gpu_is_lockup, } }, .irq = { @@ -356,7 +356,6 @@ static struct radeon_asic r300_asic_pcie = { .suspend =