LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge
@ 2018-05-17 13:22 Sinan Kaya
2018-05-17 14:55 ` Peter Jones
2018-05-18 10:42 ` Robin Murphy
0 siblings, 2 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-05-17 13:22 UTC (permalink / raw)
To: linux-pci, timur, ard.biesheuvel
Cc: linux-arm-msm, linux-arm-kernel, Sinan Kaya, Peter Jones,
Bartlomiej Zolnierkiewicz, open list:EFIFB FRAMEBUFFER DRIVER,
open list:FRAMEBUFFER LAYER, open list
A host bridge is allowed to remap BAR addresses using _TRA attribute in
_CRS windows.
pci_bus 0000:00: root bus resource [mem 0x80100100000-0x8011fffffff window] (bus address [0x00100000-0x1fffffff])
pci 0000:02:00.0: reg 0x10: [mem 0x8011e000000-0x8011effffff]
When a VGA device is behind such a host bridge and the resource is
translated efifb driver is trying to do ioremap against bus address
rather than the resource address and is failing to probe.
efifb driver is having difficulty locating the base address from BAR
address when
efifb: probing for efifb
efifb: cannot reserve video memory at 0x1e000000
efifb: framebuffer at 0x1e000000, using 1920k, total 1875k
efifb: mode is 800x600x32, linelength=3200, pages=1
efifb: scrolling: redraw
efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
Use the host bridge offset information to convert bus address to
resource address in the fixup.
Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
---
drivers/video/fbdev/efifb.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c
index 46a4484..ea68d5c 100644
--- a/drivers/video/fbdev/efifb.c
+++ b/drivers/video/fbdev/efifb.c
@@ -428,6 +428,8 @@ static void efifb_fixup_resources(struct pci_dev *dev)
{
u64 base = screen_info.lfb_base;
u64 size = screen_info.lfb_size;
+ struct pci_bus_region region;
+ struct resource res;
int i;
if (efifb_pci_dev || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
@@ -439,6 +441,14 @@ static void efifb_fixup_resources(struct pci_dev *dev)
if (!base)
return;
+ region.start = base;
+ region.end = base + size - 1;
+ res.start = 0;
+ res.flags = IORESOURCE_MEM;
+ pcibios_bus_to_resource(dev->bus, &res, ®ion);
+ if (res.start)
+ base = res.start;
+
for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
struct resource *res = &dev->resource[i];
--
2.7.4
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge
2018-05-17 13:22 [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge Sinan Kaya
@ 2018-05-17 14:55 ` Peter Jones
2018-05-17 15:00 ` Ard Biesheuvel
2018-05-18 10:42 ` Robin Murphy
1 sibling, 1 reply; 7+ messages in thread
From: Peter Jones @ 2018-05-17 14:55 UTC (permalink / raw)
To: Sinan Kaya
Cc: linux-pci, timur, ard.biesheuvel, linux-arm-msm,
linux-arm-kernel, Bartlomiej Zolnierkiewicz,
open list:EFIFB FRAMEBUFFER DRIVER, open list:FRAMEBUFFER LAYER,
open list
On Thu, May 17, 2018 at 09:22:23AM -0400, Sinan Kaya wrote:
> A host bridge is allowed to remap BAR addresses using _TRA attribute in
> _CRS windows.
>
> pci_bus 0000:00: root bus resource [mem 0x80100100000-0x8011fffffff window] (bus address [0x00100000-0x1fffffff])
> pci 0000:02:00.0: reg 0x10: [mem 0x8011e000000-0x8011effffff]
>
> When a VGA device is behind such a host bridge and the resource is
> translated efifb driver is trying to do ioremap against bus address
> rather than the resource address and is failing to probe.
>
> efifb driver is having difficulty locating the base address from BAR
> address when
>
> efifb: probing for efifb
> efifb: cannot reserve video memory at 0x1e000000
> efifb: framebuffer at 0x1e000000, using 1920k, total 1875k
> efifb: mode is 800x600x32, linelength=3200, pages=1
> efifb: scrolling: redraw
> efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
>
> Use the host bridge offset information to convert bus address to
> resource address in the fixup.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
Looks reasonable to me - Ard, do you want to take this up through the
EFI tree?
Signed-off-by: Peter Jones <pjones@redhat.com>
> ---
> drivers/video/fbdev/efifb.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c
> index 46a4484..ea68d5c 100644
> --- a/drivers/video/fbdev/efifb.c
> +++ b/drivers/video/fbdev/efifb.c
> @@ -428,6 +428,8 @@ static void efifb_fixup_resources(struct pci_dev *dev)
> {
> u64 base = screen_info.lfb_base;
> u64 size = screen_info.lfb_size;
> + struct pci_bus_region region;
> + struct resource res;
> int i;
>
> if (efifb_pci_dev || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
> @@ -439,6 +441,14 @@ static void efifb_fixup_resources(struct pci_dev *dev)
> if (!base)
> return;
>
> + region.start = base;
> + region.end = base + size - 1;
> + res.start = 0;
> + res.flags = IORESOURCE_MEM;
> + pcibios_bus_to_resource(dev->bus, &res, ®ion);
> + if (res.start)
> + base = res.start;
> +
> for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
> struct resource *res = &dev->resource[i];
>
> --
> 2.7.4
>
--
Peter
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge
2018-05-17 14:55 ` Peter Jones
@ 2018-05-17 15:00 ` Ard Biesheuvel
0 siblings, 0 replies; 7+ messages in thread
From: Ard Biesheuvel @ 2018-05-17 15:00 UTC (permalink / raw)
To: Peter Jones
Cc: Sinan Kaya, linux-pci, Timur Tabi, linux-arm-msm,
linux-arm-kernel, Bartlomiej Zolnierkiewicz,
open list:EFIFB FRAMEBUFFER DRIVER, open list:FRAMEBUFFER LAYER,
open list
On 17 May 2018 at 16:55, Peter Jones <pjones@redhat.com> wrote:
> On Thu, May 17, 2018 at 09:22:23AM -0400, Sinan Kaya wrote:
>> A host bridge is allowed to remap BAR addresses using _TRA attribute in
>> _CRS windows.
>>
>> pci_bus 0000:00: root bus resource [mem 0x80100100000-0x8011fffffff window] (bus address [0x00100000-0x1fffffff])
>> pci 0000:02:00.0: reg 0x10: [mem 0x8011e000000-0x8011effffff]
>>
>> When a VGA device is behind such a host bridge and the resource is
>> translated efifb driver is trying to do ioremap against bus address
>> rather than the resource address and is failing to probe.
>>
>> efifb driver is having difficulty locating the base address from BAR
>> address when
>>
>> efifb: probing for efifb
>> efifb: cannot reserve video memory at 0x1e000000
>> efifb: framebuffer at 0x1e000000, using 1920k, total 1875k
>> efifb: mode is 800x600x32, linelength=3200, pages=1
>> efifb: scrolling: redraw
>> efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
>>
>> Use the host bridge offset information to convert bus address to
>> resource address in the fixup.
>>
>> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
>
> Looks reasonable to me - Ard, do you want to take this up through the
> EFI tree?
>
Sure
> Signed-off-by: Peter Jones <pjones@redhat.com>
>
I'll take that as a reviewed-by, thanks.
>> ---
>> drivers/video/fbdev/efifb.c | 10 ++++++++++
>> 1 file changed, 10 insertions(+)
>>
>> diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c
>> index 46a4484..ea68d5c 100644
>> --- a/drivers/video/fbdev/efifb.c
>> +++ b/drivers/video/fbdev/efifb.c
>> @@ -428,6 +428,8 @@ static void efifb_fixup_resources(struct pci_dev *dev)
>> {
>> u64 base = screen_info.lfb_base;
>> u64 size = screen_info.lfb_size;
>> + struct pci_bus_region region;
>> + struct resource res;
>> int i;
>>
>> if (efifb_pci_dev || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
>> @@ -439,6 +441,14 @@ static void efifb_fixup_resources(struct pci_dev *dev)
>> if (!base)
>> return;
>>
>> + region.start = base;
>> + region.end = base + size - 1;
>> + res.start = 0;
>> + res.flags = IORESOURCE_MEM;
>> + pcibios_bus_to_resource(dev->bus, &res, ®ion);
>> + if (res.start)
>> + base = res.start;
>> +
>> for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
>> struct resource *res = &dev->resource[i];
>>
>> --
>> 2.7.4
>>
>
> --
> Peter
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge
2018-05-17 13:22 [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge Sinan Kaya
2018-05-17 14:55 ` Peter Jones
@ 2018-05-18 10:42 ` Robin Murphy
2018-05-18 14:20 ` Sinan Kaya
1 sibling, 1 reply; 7+ messages in thread
From: Robin Murphy @ 2018-05-18 10:42 UTC (permalink / raw)
To: Sinan Kaya, linux-pci, timur, ard.biesheuvel
Cc: open list:EFIFB FRAMEBUFFER DRIVER, Bartlomiej Zolnierkiewicz,
linux-arm-msm, open list, open list:FRAMEBUFFER LAYER,
Peter Jones, linux-arm-kernel
On 17/05/18 14:22, Sinan Kaya wrote:
> A host bridge is allowed to remap BAR addresses using _TRA attribute in
> _CRS windows.
>
> pci_bus 0000:00: root bus resource [mem 0x80100100000-0x8011fffffff window] (bus address [0x00100000-0x1fffffff])
> pci 0000:02:00.0: reg 0x10: [mem 0x8011e000000-0x8011effffff]
>
> When a VGA device is behind such a host bridge and the resource is
> translated efifb driver is trying to do ioremap against bus address
> rather than the resource address and is failing to probe.
>
> efifb driver is having difficulty locating the base address from BAR
> address when
>
> efifb: probing for efifb
> efifb: cannot reserve video memory at 0x1e000000
> efifb: framebuffer at 0x1e000000, using 1920k, total 1875k
> efifb: mode is 800x600x32, linelength=3200, pages=1
> efifb: scrolling: redraw
> efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
>
> Use the host bridge offset information to convert bus address to
> resource address in the fixup.
>
> Signed-off-by: Sinan Kaya <okaya@codeaurora.org>
> ---
> drivers/video/fbdev/efifb.c | 10 ++++++++++
> 1 file changed, 10 insertions(+)
>
> diff --git a/drivers/video/fbdev/efifb.c b/drivers/video/fbdev/efifb.c
> index 46a4484..ea68d5c 100644
> --- a/drivers/video/fbdev/efifb.c
> +++ b/drivers/video/fbdev/efifb.c
> @@ -428,6 +428,8 @@ static void efifb_fixup_resources(struct pci_dev *dev)
> {
> u64 base = screen_info.lfb_base;
> u64 size = screen_info.lfb_size;
FWIW, now that I've actually gone and looked, it appears you could
simplify the whole function quite a bit by getting rid of these and just
using the new local resource directly, especially since the only actual
use of size is an open-coded resource_contains().
> + struct pci_bus_region region;
> + struct resource res;
> int i;
>
> if (efifb_pci_dev || screen_info.orig_video_isVGA != VIDEO_TYPE_EFI)
> @@ -439,6 +441,14 @@ static void efifb_fixup_resources(struct pci_dev *dev)
> if (!base)
> return;
>
> + region.start = base;
> + region.end = base + size - 1;
> + res.start = 0;
> + res.flags = IORESOURCE_MEM;
> + pcibios_bus_to_resource(dev->bus, &res, ®ion);
> + if (res.start)
> + base = res.start;
> +
> for (i = 0; i <= PCI_STD_RESOURCE_END; i++) {
> struct resource *res = &dev->resource[i];
The inadvertent name shadowing here is a bit yuck, though, and I think
sparse will whinge about it, so it's probably worth renaming one or the
other.
Robin.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge
2018-05-18 10:42 ` Robin Murphy
@ 2018-05-18 14:20 ` Sinan Kaya
2018-06-19 21:59 ` Bjorn Helgaas
0 siblings, 1 reply; 7+ messages in thread
From: Sinan Kaya @ 2018-05-18 14:20 UTC (permalink / raw)
To: Robin Murphy, linux-pci, timur, ard.biesheuvel
Cc: open list:EFIFB FRAMEBUFFER DRIVER, Bartlomiej Zolnierkiewicz,
linux-arm-msm, open list, open list:FRAMEBUFFER LAYER,
Peter Jones, linux-arm-kernel
On 5/18/2018 6:42 AM, Robin Murphy wrote:
>
> FWIW, now that I've actually gone and looked, it appears you could simplify the whole function quite a bit by getting rid of these and just using the new local resource directly, especially since the only actual use of size is an open-coded resource_contains().
Posted V2 a minute ago. I did the simplification on a prior patch in order not to
mix the issues.
--
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge
2018-05-18 14:20 ` Sinan Kaya
@ 2018-06-19 21:59 ` Bjorn Helgaas
2018-06-19 22:14 ` Sinan Kaya
0 siblings, 1 reply; 7+ messages in thread
From: Bjorn Helgaas @ 2018-06-19 21:59 UTC (permalink / raw)
To: Sinan Kaya
Cc: Robin Murphy, linux-pci, timur, ard.biesheuvel,
open list:EFIFB FRAMEBUFFER DRIVER, Bartlomiej Zolnierkiewicz,
linux-arm-msm, open list, open list:FRAMEBUFFER LAYER,
Peter Jones, linux-arm-kernel
On Fri, May 18, 2018 at 10:20:29AM -0400, Sinan Kaya wrote:
> On 5/18/2018 6:42 AM, Robin Murphy wrote:
> >
> > FWIW, now that I've actually gone and looked, it appears you could simplify the whole function quite a bit by getting rid of these and just using the new local resource directly, especially since the only actual use of size is an open-coded resource_contains().
>
> Posted V2 a minute ago. I did the simplification on a prior patch in order not to
> mix the issues.
I don't see the V2 on linux-pci, but it sounds like Ard would merge this
anyway. So I'll drop this and you can let me know if there's anything you
need from me.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge
2018-06-19 21:59 ` Bjorn Helgaas
@ 2018-06-19 22:14 ` Sinan Kaya
0 siblings, 0 replies; 7+ messages in thread
From: Sinan Kaya @ 2018-06-19 22:14 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Robin Murphy, linux-pci, timur, ard.biesheuvel,
open list:EFIFB FRAMEBUFFER DRIVER, Bartlomiej Zolnierkiewicz,
linux-arm-msm, open list, open list:FRAMEBUFFER LAYER,
Peter Jones, linux-arm-kernel
Hi Bjorn,
On 6/19/2018 5:59 PM, Bjorn Helgaas wrote:
> On Fri, May 18, 2018 at 10:20:29AM -0400, Sinan Kaya wrote:
>> On 5/18/2018 6:42 AM, Robin Murphy wrote:
>>>
>>> FWIW, now that I've actually gone and looked, it appears you could simplify the whole function quite a bit by getting rid of these and just using the new local resource directly, especially since the only actual use of size is an open-coded resource_contains().
>>
>> Posted V2 a minute ago. I did the simplification on a prior patch in order not to
>> mix the issues.
>
> I don't see the V2 on linux-pci, but it sounds like Ard would merge this
> anyway. So I'll drop this and you can let me know if there's anything you
> need from me.
>
It is planned to go through fbdev tree for 4.19.
https://patchwork.kernel.org/patch/10410895/
Feel free to review/ACK.
Sinan
--
Sinan Kaya
Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a Linux Foundation Collaborative Project.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-06-19 22:15 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-17 13:22 [PATCH] efi/fb: Convert PCI bus address to resource if translated by the bridge Sinan Kaya
2018-05-17 14:55 ` Peter Jones
2018-05-17 15:00 ` Ard Biesheuvel
2018-05-18 10:42 ` Robin Murphy
2018-05-18 14:20 ` Sinan Kaya
2018-06-19 21:59 ` Bjorn Helgaas
2018-06-19 22:14 ` Sinan Kaya
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).