[PATCH] radeon: Do not directly dereference pointers to BIOS area.

2015-03-20 Thread Deucher, Alexander
> -Original Message-
> From: David Miller [mailto:davem at davemloft.net]
> Sent: Friday, March 20, 2015 1:24 PM
> To: Koenig, Christian
> Cc: Deucher, Alexander; dri-devel at lists.freedesktop.org; linux-
> kernel at vger.kernel.org
> Subject: Re: [PATCH] radeon: Do not directly dereference pointers to BIOS
> area.
> 
> From: Christian König 
> Date: Fri, 20 Mar 2015 10:38:32 +0100
> 
> > On 19.03.2015 17:29, David Miller wrote:
> >> From: Christian König 
> >> Date: Thu, 19 Mar 2015 09:50:58 +0100
> >>
> >>> In general I would say yes, but for this particular hardware it's a
> >>> bit questionable to do so.
> >>>
> >>> For radeon hardware to work correctly the CPU access to the PCIE BARs
> >>> should work even without using the specialized IO macros/functions,
> >>> otherwise mapping VRAM CPU accessible isn't really possible.
> >>>
> >>> What's the background of the change? Some problems on a certain CPU
> >>> platform? or just general cleanups?
> >> It's an _iomem_ pointer, it's not a virtual address.
> >>
> >> Therefore it is illegal to dereference the pointer.
> >>
> >> The value is opaque and has values that only make sense when used
> >> with the readb() et al. interfaces.
> >>
> >> This code is relying upon the fact that on x86 it happens to be
> >> a virtual address, but this won't work on many other architectures.
> >
> > In this case I'm perfectly fine with it and the patch is Reviewed-by:
> > Christian König 
> >
> > Just wanted to make sure that you're not trying to get Radeon working
> > on a platform which will never really support the necessary hardware
> > features.
> 
> I would like this to get merged via the Radeon DRM maintainer, thanks.

Already added to my tree.  Thanks!

Alex


[PATCH] radeon: Do not directly dereference pointers to BIOS area.

2015-03-20 Thread David Miller
From: Christian König 
Date: Fri, 20 Mar 2015 10:38:32 +0100

> On 19.03.2015 17:29, David Miller wrote:
>> From: Christian König 
>> Date: Thu, 19 Mar 2015 09:50:58 +0100
>>
>>> In general I would say yes, but for this particular hardware it's a
>>> bit questionable to do so.
>>>
>>> For radeon hardware to work correctly the CPU access to the PCIE BARs
>>> should work even without using the specialized IO macros/functions,
>>> otherwise mapping VRAM CPU accessible isn't really possible.
>>>
>>> What's the background of the change? Some problems on a certain CPU
>>> platform? or just general cleanups?
>> It's an _iomem_ pointer, it's not a virtual address.
>>
>> Therefore it is illegal to dereference the pointer.
>>
>> The value is opaque and has values that only make sense when used
>> with the readb() et al. interfaces.
>>
>> This code is relying upon the fact that on x86 it happens to be
>> a virtual address, but this won't work on many other architectures.
> 
> In this case I'm perfectly fine with it and the patch is Reviewed-by:
> Christian König 
> 
> Just wanted to make sure that you're not trying to get Radeon working
> on a platform which will never really support the necessary hardware
> features.

I would like this to get merged via the Radeon DRM maintainer, thanks.


[PATCH] radeon: Do not directly dereference pointers to BIOS area.

2015-03-20 Thread Christian König
On 19.03.2015 17:29, David Miller wrote:
> From: Christian König 
> Date: Thu, 19 Mar 2015 09:50:58 +0100
>
>> In general I would say yes, but for this particular hardware it's a
>> bit questionable to do so.
>>
>> For radeon hardware to work correctly the CPU access to the PCIE BARs
>> should work even without using the specialized IO macros/functions,
>> otherwise mapping VRAM CPU accessible isn't really possible.
>>
>> What's the background of the change? Some problems on a certain CPU
>> platform? or just general cleanups?
> It's an _iomem_ pointer, it's not a virtual address.
>
> Therefore it is illegal to dereference the pointer.
>
> The value is opaque and has values that only make sense when used
> with the readb() et al. interfaces.
>
> This code is relying upon the fact that on x86 it happens to be
> a virtual address, but this won't work on many other architectures.

In this case I'm perfectly fine with it and the patch is Reviewed-by: 
Christian König 

Just wanted to make sure that you're not trying to get Radeon working on 
a platform which will never really support the necessary hardware features.

Regards,
Christian.


[PATCH] radeon: Do not directly dereference pointers to BIOS area.

2015-03-20 Thread Alex Deucher
On Fri, Mar 20, 2015 at 5:38 AM, Christian König
 wrote:
> On 19.03.2015 17:29, David Miller wrote:
>>
>> From: Christian König 
>> Date: Thu, 19 Mar 2015 09:50:58 +0100
>>
>>> In general I would say yes, but for this particular hardware it's a
>>> bit questionable to do so.
>>>
>>> For radeon hardware to work correctly the CPU access to the PCIE BARs
>>> should work even without using the specialized IO macros/functions,
>>> otherwise mapping VRAM CPU accessible isn't really possible.
>>>
>>> What's the background of the change? Some problems on a certain CPU
>>> platform? or just general cleanups?
>>
>> It's an _iomem_ pointer, it's not a virtual address.
>>
>> Therefore it is illegal to dereference the pointer.
>>
>> The value is opaque and has values that only make sense when used
>> with the readb() et al. interfaces.
>>
>> This code is relying upon the fact that on x86 it happens to be
>> a virtual address, but this won't work on many other architectures.
>
>
> In this case I'm perfectly fine with it and the patch is Reviewed-by:
> Christian König 
>
> Just wanted to make sure that you're not trying to get Radeon working on a
> platform which will never really support the necessary hardware features.
>

Applied to my tree.  Thanks!

Alex


[PATCH] radeon: Do not directly dereference pointers to BIOS area.

2015-03-19 Thread David Miller
From: Christian König 
Date: Thu, 19 Mar 2015 09:50:58 +0100

> In general I would say yes, but for this particular hardware it's a
> bit questionable to do so.
> 
> For radeon hardware to work correctly the CPU access to the PCIE BARs
> should work even without using the specialized IO macros/functions,
> otherwise mapping VRAM CPU accessible isn't really possible.
> 
> What's the background of the change? Some problems on a certain CPU
> platform? or just general cleanups?

It's an _iomem_ pointer, it's not a virtual address.

Therefore it is illegal to dereference the pointer.

The value is opaque and has values that only make sense when used
with the readb() et al. interfaces.

This code is relying upon the fact that on x86 it happens to be
a virtual address, but this won't work on many other architectures.


[PATCH] radeon: Do not directly dereference pointers to BIOS area.

2015-03-19 Thread Christian König
In general I would say yes, but for this particular hardware it's a bit 
questionable to do so.

For radeon hardware to work correctly the CPU access to the PCIE BARs 
should work even without using the specialized IO macros/functions, 
otherwise mapping VRAM CPU accessible isn't really possible.

What's the background of the change? Some problems on a certain CPU 
platform? or just general cleanups?

Regards,
Christian.

On 19.03.2015 04:18, David Miller wrote:
> Use readb() and memcpy_fromio() accessors instead.
>
> Signed-off-by: David S. Miller 
>
> diff --git a/drivers/gpu/drm/radeon/radeon_bios.c 
> b/drivers/gpu/drm/radeon/radeon_bios.c
> index 63ccb8f..d27e4cc 100644
> --- a/drivers/gpu/drm/radeon/radeon_bios.c
> +++ b/drivers/gpu/drm/radeon/radeon_bios.c
> @@ -76,7 +76,7 @@ static bool igp_read_bios_from_vram(struct radeon_device 
> *rdev)
>   
>   static bool radeon_read_bios(struct radeon_device *rdev)
>   {
> - uint8_t __iomem *bios;
> + uint8_t __iomem *bios, val1, val2;
>   size_t size;
>   
>   rdev->bios = NULL;
> @@ -86,15 +86,19 @@ static bool radeon_read_bios(struct radeon_device *rdev)
>   return false;
>   }
>   
> - if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) {
> + val1 = readb([0]);
> + val2 = readb([1]);
> +
> + if (size == 0 || val1 != 0x55 || val2 != 0xaa) {
>   pci_unmap_rom(rdev->pdev, bios);
>   return false;
>   }
> - rdev->bios = kmemdup(bios, size, GFP_KERNEL);
> + rdev->bios = kzalloc(size, GFP_KERNEL);
>   if (rdev->bios == NULL) {
>   pci_unmap_rom(rdev->pdev, bios);
>   return false;
>   }
> + memcpy_fromio(rdev->bios, bios, size);
>   pci_unmap_rom(rdev->pdev, bios);
>   return true;
>   }



[PATCH] radeon: Do not directly dereference pointers to BIOS area.

2015-03-19 Thread David Miller

Use readb() and memcpy_fromio() accessors instead.

Signed-off-by: David S. Miller 

diff --git a/drivers/gpu/drm/radeon/radeon_bios.c 
b/drivers/gpu/drm/radeon/radeon_bios.c
index 63ccb8f..d27e4cc 100644
--- a/drivers/gpu/drm/radeon/radeon_bios.c
+++ b/drivers/gpu/drm/radeon/radeon_bios.c
@@ -76,7 +76,7 @@ static bool igp_read_bios_from_vram(struct radeon_device 
*rdev)

 static bool radeon_read_bios(struct radeon_device *rdev)
 {
-   uint8_t __iomem *bios;
+   uint8_t __iomem *bios, val1, val2;
size_t size;

rdev->bios = NULL;
@@ -86,15 +86,19 @@ static bool radeon_read_bios(struct radeon_device *rdev)
return false;
}

-   if (size == 0 || bios[0] != 0x55 || bios[1] != 0xaa) {
+   val1 = readb([0]);
+   val2 = readb([1]);
+
+   if (size == 0 || val1 != 0x55 || val2 != 0xaa) {
pci_unmap_rom(rdev->pdev, bios);
return false;
}
-   rdev->bios = kmemdup(bios, size, GFP_KERNEL);
+   rdev->bios = kzalloc(size, GFP_KERNEL);
if (rdev->bios == NULL) {
pci_unmap_rom(rdev->pdev, bios);
return false;
}
+   memcpy_fromio(rdev->bios, bios, size);
pci_unmap_rom(rdev->pdev, bios);
return true;
 }