From: helgaas@kernel.org (Bjorn Helgaas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH] arm64: Relocate screen_info.lfb_base on PCI BAR allocation
Date: Fri, 29 Apr 2016 15:06:09 -0500 [thread overview]
Message-ID: <20160429200609.GA28261@localhost> (raw)
In-Reply-To: <CAKv+Gu-4vqT-tQXdwJbLV0r3FhtrYk=TOWxDYS6LjG_BNf=b_A@mail.gmail.com>
On Fri, Apr 29, 2016 at 03:51:49PM +0200, Ard Biesheuvel wrote:
> On 29 April 2016 at 15:41, Bjorn Helgaas <helgaas@kernel.org> wrote:
> > On Thu, Apr 28, 2016 at 11:39:35PM +0200, Alexander Graf wrote:
> >> On 28.04.16 20:06, Bjorn Helgaas wrote:
> >> > If firmware is giving us a bare address of something, that seems like
> >> > a clue that it might depend on that address staying the same.
> >>
> >> Well, I'd look at it from the other side. It gives us a correct address
> >> on entry with the system configured at exactly the state it's in on
> >> entry. If Linux changes the system, some guarantees obviously don't work
> >> anymore.
> >
> > Can you point me to the part of the EFI spec that communicates this?
> > I'm curious what the intent is and whether there's any indication that
> > EFI expects the OS to preserve some configuration. I don't think it's
> > reasonable for the OS to preserve this sort of configuration because
> > it limits how well we can support hotplug.
> >
> > I wonder if we're using this frame buffer address as more than what
> > EFI intended. For example, maybe it was intended for use by an early
> > console driver, but there's some other mechanism we should be using
> > after that.
> >
>
> The UEFI spec describes this as follows (UEFIv2.6 section 11.9)
>
> """
> Graphics output may also be required as part of the startup of an
> operating system. There are
> potentially times in modern operating systems prior to the loading of
> a high performance OS
> graphics driver where access to graphics output device is required.
> The Graphics Output Protocol
> supports this capability by providing the EFI OS loader access to a
> hardware frame buffer and
> enough information to allow the OS to draw directly to the graphics
> output device.
> """
>
> So the intent is to provide minimal framebuffer services until the
> 'real' driver takes over.
Makes sense. A 'real' driver for a PCI device would use
pci_register_driver() and use pci_resource_start() or similar to
locate the framebuffer, which would avoid the problem because the PCI
core doesn't change BARs while a driver owns the device.
> The GOP protocol only describes the base and size of the framebuffer,
> and the pixel format. At boot time, the early UEFI code in the kernel
> could potentially figure out which PCI device it is related to, if
> necessary, but i am not sure if this would solve the x86 case as well.
Does drivers/video/fbdev/efifb.c support only a single framebuffer
device? If a system has several, how does it decide which to use? I
assume UEFI would provide GOP for all the framebuffers?
If we could fix this by making efifb claim a PCI device, I think that
would be cleaner. I don't know how to figure out the correct device,
but that would solve the "BAR changed" problem, and it would have
cleaner ownership semantics, too.
It looks like the current situation is that a device-specific driver
(radeon, i915, etc.) could claim the device via the usual
pci_register_driver() path, and the efifb driver could think it owns
the device at the same time. This seems like too obvious a problem,
so maybe there's some ad hoc mechanism that resolves this?
next prev parent reply other threads:[~2016-04-29 20:06 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-27 22:22 [PATCH] arm64: Relocate screen_info.lfb_base on PCI BAR allocation Alexander Graf
2016-04-28 16:20 ` Bjorn Helgaas
2016-04-28 16:41 ` Alexander Graf
2016-04-28 18:06 ` Bjorn Helgaas
2016-04-28 21:39 ` Alexander Graf
2016-04-29 10:03 ` Lorenzo Pieralisi
2016-04-29 13:41 ` Bjorn Helgaas
2016-04-29 13:51 ` Ard Biesheuvel
2016-04-29 20:06 ` Bjorn Helgaas [this message]
2016-04-29 20:25 ` Ard Biesheuvel
2016-04-29 20:51 ` Alexander Graf
2016-04-29 21:37 ` Bjorn Helgaas
2016-04-29 21:52 ` Alexander Graf
2016-04-29 22:03 ` Alexander Graf
2016-04-29 23:31 ` Bjorn Helgaas
2016-04-30 21:17 ` Matt Fleming
2016-04-29 21:20 ` Bjorn Helgaas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160429200609.GA28261@localhost \
--to=helgaas@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).