On Tue, Apr 3, 2012 at 8:13 AM, Dave Airlie <airlied at gmail.com> wrote:
> From: Dave Airlie <airlied at redhat.com>
>
> This closes a race seen with kexec where we enable PCI bus mastering
> but the card has been reinitialised fully yet.
>
> This was previously fixed by a patch from Jerome, but this should
> close the race completely.
>
> Reported-and-tested-by: Markus Trippelsdorf <markus at trippelsdorf.de>
> Signed-off-by: Dave Airlie <airlied at redhat.com>

For 3.4, you'll need to update si.c as well.

Alex

> ---
> ?drivers/gpu/drm/radeon/r100.c ? ? ? ? ?| ? ?4 ++++
> ?drivers/gpu/drm/radeon/r600.c ? ? ? ? ?| ? ?3 +++
> ?drivers/gpu/drm/radeon/radeon_device.c | ? ?1 -
> ?drivers/gpu/drm/radeon/radeon_kms.c ? ?| ? ?2 --
> ?4 files changed, 7 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
> index 81801c1..e11df77 100644
> --- a/drivers/gpu/drm/radeon/r100.c
> +++ b/drivers/gpu/drm/radeon/r100.c
> @@ -1180,6 +1180,10 @@ int r100_cp_init(struct radeon_device *rdev, unsigned 
> ring_size)
> ? ? ? ?WREG32(RADEON_CP_RB_WPTR_DELAY, 0);
> ? ? ? ?WREG32(RADEON_CP_CSQ_MODE, 0x00004D4D);
> ? ? ? ?WREG32(RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIBM_INDBM);
> +
> + ? ? ? /* at this point everything should be setup correctly to enable 
> master */
> + ? ? ? pci_set_master(rdev->pdev);
> +
> ? ? ? ?radeon_ring_start(rdev, RADEON_RING_TYPE_GFX_INDEX, 
> &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]);
> ? ? ? ?r = radeon_ring_test(rdev, RADEON_RING_TYPE_GFX_INDEX, ring);
> ? ? ? ?if (r) {
> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
> index 5eb2382..50cf034 100644
> --- a/drivers/gpu/drm/radeon/r600.c
> +++ b/drivers/gpu/drm/radeon/r600.c
> @@ -3034,6 +3034,9 @@ int r600_irq_init(struct radeon_device *rdev)
> ? ? ? ?else
> ? ? ? ? ? ? ? ?r600_disable_interrupt_state(rdev);
>
> + ? ? ? /* at this point everything should be setup correctly to enable 
> master */
> + ? ? ? pci_set_master(rdev->pdev);
> +
> ? ? ? ?/* enable irqs */
> ? ? ? ?r600_enable_interrupts(rdev);
>
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c 
> b/drivers/gpu/drm/radeon/radeon_device.c
> index 49f7cb7..a282331 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -951,7 +951,6 @@ int radeon_resume_kms(struct drm_device *dev)
> ? ? ? ? ? ? ? ?console_unlock();
> ? ? ? ? ? ? ? ?return -1;
> ? ? ? ?}
> - ? ? ? pci_set_master(dev->pdev);
> ? ? ? ?/* resume AGP if in use */
> ? ? ? ?radeon_agp_resume(rdev);
> ? ? ? ?radeon_resume(rdev);
> diff --git a/drivers/gpu/drm/radeon/radeon_kms.c 
> b/drivers/gpu/drm/radeon/radeon_kms.c
> index 1986eba..d335288 100644
> --- a/drivers/gpu/drm/radeon/radeon_kms.c
> +++ b/drivers/gpu/drm/radeon/radeon_kms.c
> @@ -57,8 +57,6 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned 
> long flags)
> ? ? ? ?}
> ? ? ? ?dev->dev_private = (void *)rdev;
>
> - ? ? ? pci_set_master(dev->pdev);
> -
> ? ? ? ?/* update BUS flag */
> ? ? ? ?if (drm_pci_device_is_agp(dev)) {
> ? ? ? ? ? ? ? ?flags |= RADEON_IS_AGP;
> --
> 1.7.7.6
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to