Re: [PATCH] drm/radeon: Add early unregister of firmware fb's

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dave,

This hasn't shown up in one of your branches, yet. Do you want me to
change something or was this patch simply lost somewhere?

Thanks, Daniel

On Wed, Oct 06, 2010 at 06:39:07PM +0200, Daniel Vetter wrote:
> From: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>
> 
> Without this, we attempt the handover too late, the firmware fb
> might be accessing the chip simultaneously to us re-initializing
> various parts of it, which might frighten babies or cause all sort
> of nasty psychologic trauma to kitten.
> 
> Cc: stable@xxxxxxxxxx
> Signed-off-by: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>
> [danvet: add cc: stable, forward ported and compile-fixed for X86]
> Signed-off-by: Daniel Vetter <daniel.vetter@xxxxxxxx>
> ---
> 
> This patch is required to get the agp rv270 in my ppc Mac Mini working with
> kms.  Also tested on my agp rv570 on amd64, doesn't seem to have ill
> effects there.
> 
> Please review and apply.
> 
> Thanks, Daniel
> 
>  drivers/gpu/drm/radeon/radeon_device.c |   19 +++++++++++++++++++
>  1 files changed, 19 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
> index 256d204..3aea1a8 100644
> --- a/drivers/gpu/drm/radeon/radeon_device.c
> +++ b/drivers/gpu/drm/radeon/radeon_device.c
> @@ -584,6 +584,22 @@ static bool radeon_switcheroo_can_switch(struct pci_dev *pdev)
>  }
>  
>  
> +static void radeon_kick_out_firmware_fb(struct drm_device *ddev)
> +{
> +	struct apertures_struct *ap;
> +	bool primary = false;
> +
> +	ap = alloc_apertures(1);
> +	ap->ranges[0].base = pci_resource_start(ddev->pdev, 0);
> +	ap->ranges[0].size = pci_resource_len(ddev->pdev, 0);
> +
> +#ifdef CONFIG_X86
> +	primary = ddev->pdev->resource[PCI_ROM_RESOURCE].flags & IORESOURCE_ROM_SHADOW;
> +#endif
> +	remove_conflicting_framebuffers(ap, "radeondrmfb", primary);
> +	kfree(ap);
> +}
> +
>  int radeon_device_init(struct radeon_device *rdev,
>  		       struct drm_device *ddev,
>  		       struct pci_dev *pdev,
> @@ -623,6 +639,9 @@ int radeon_device_init(struct radeon_device *rdev,
>  	init_waitqueue_head(&rdev->irq.vblank_queue);
>  	init_waitqueue_head(&rdev->irq.idle_queue);
>  
> +	/* Get rid of things like offb */
> +	radeon_kick_out_firmware_fb(ddev);
> +
>  	/* setup workqueue */
>  	rdev->wq = create_workqueue("radeon");
>  	if (rdev->wq == NULL)
> -- 
> 1.7.1
> 

-- 
Daniel Vetter
Mail: daniel@xxxxxxxx
Mobile: +41 (0)79 365 57 48
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel


[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux