From: "Christian König" <deathsimple-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org> To: Bjorn Helgaas <helgaas-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org> Cc: David Airlie <airlied-cv59FeDIM0c@public.gmane.org>, linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, platform-driver-x86-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Alex Deucher <alexander.deucher-5C7GfCeVMHo@public.gmane.org> Subject: Re: [PATCH v6 5/5] drm/amdgpu: resize VRAM BAR for CPU access v2 Date: Fri, 9 Jun 2017 10:59:38 +0200 [thread overview] Message-ID: <55fb9500-5062-78ea-93c3-0f3e850dd31f@vodafone.de> (raw) In-Reply-To: <20170606231019.GC12672-1RhO1Y9PlrlHTL0Zs8A6p5iNqAH0jzoTYJqu5kTmcBRl57MIdRCFDg@public.gmane.org> Am 07.06.2017 um 01:10 schrieb Bjorn Helgaas: > [SNIP] > What if the driver did something like this: > > pci_disable_decoding(dev, IORESOURCE_MEM); > pci_release_resource(dev, 2); > pci_resize_bar(dev, bar, size); > pci_assign_resources(dev); > pci_enable_decoding(dev, IORESOURCE_MEM); > > That would require adding pci_enable/disable_decoding() to the driver > API, along with the requirement that the driver discard and remap > some resources after pci_enable_decoding(). I think > pci_enable_decoding() would look much like the existing > pci_enable_resources() except taking a resource type instead of a > bitmask. This is pretty close to what we already do. I'm going to send out an updated version of the patch in a minute. One difference that I still have in this patch is > + pci_read_config_word(adev->pdev, PCI_COMMAND, &cmd); > + pci_write_config_word(adev->pdev, PCI_COMMAND, > + cmd & ~PCI_COMMAND_MEMORY); in the driver instead of "pci_disable_decoding(dev, IORESOURCE_MEM);" I thought that introducing a new interface for this two lines would be overkill, but if you find it cleaner to add the new interface I can change that. > I would *prefer* if we released and reassigned all resources, because > then the core has complete flexibility to move things around, and it's > easy to document that pci_assign_resources() means you have to > reread/remap everything. I've tried this and it doesn't work at all, surprisingly the I/O ports turned out to be not the first problem I've ran into. Releasing all resources means that we also try to release the 0xa000-0xbffff (VGA) and 0xc0000-0xdffff (VBIOS) ranges. They can be reassigned, but somehow that seems to cause problems later on. > If the driver only releases specified BARs, the pci_assign_resources() > interface becomes "you need to reread/remap the BAR you resized, plus > any other BARs you released". It's a little more complicated to > describe and more dependent on previous driver actions. How about the driver releases all resources it wants to move, including the resized and reallocates them after the resize is done? > > But releasing only the specified BAR will make your life easier and > help with the fact that multiple drivers might be using the same BAR > (I have to raise my eyebrows at that), so I think I'm OK with it. And > it would also side-step the "can't restore previous state" problem. I agree that it is a bit more documentation work to describe how the interface works, but it is clearly less problematic during runtime. Please take a look at the new version of the patches and let me know what you think. Regards, Christian. > > It's an "interesting" asymmetry that pci_enable_device() turns on BAR > decoding but doesn't touch bus mastering, while pci_disable_device() > turns off bus mastering but doesn't touch BAR decoding. > > Bjorn _______________________________________________ amd-gfx mailing list amd-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/amd-gfx
WARNING: multiple messages have this Message-ID (diff)
From: "Christian König" <deathsimple@vodafone.de> To: Bjorn Helgaas <helgaas@kernel.org> Cc: linux-pci@vger.kernel.org, platform-driver-x86@vger.kernel.org, Alex Deucher <alexander.deucher@amd.com>, David Airlie <airlied@linux.ie>, amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org Subject: Re: [PATCH v6 5/5] drm/amdgpu: resize VRAM BAR for CPU access v2 Date: Fri, 9 Jun 2017 10:59:38 +0200 [thread overview] Message-ID: <55fb9500-5062-78ea-93c3-0f3e850dd31f@vodafone.de> (raw) In-Reply-To: <20170606231019.GC12672@bhelgaas-glaptop.roam.corp.google.com> Am 07.06.2017 um 01:10 schrieb Bjorn Helgaas: > [SNIP] > What if the driver did something like this: > > pci_disable_decoding(dev, IORESOURCE_MEM); > pci_release_resource(dev, 2); > pci_resize_bar(dev, bar, size); > pci_assign_resources(dev); > pci_enable_decoding(dev, IORESOURCE_MEM); > > That would require adding pci_enable/disable_decoding() to the driver > API, along with the requirement that the driver discard and remap > some resources after pci_enable_decoding(). I think > pci_enable_decoding() would look much like the existing > pci_enable_resources() except taking a resource type instead of a > bitmask. This is pretty close to what we already do. I'm going to send out an updated version of the patch in a minute. One difference that I still have in this patch is > + pci_read_config_word(adev->pdev, PCI_COMMAND, &cmd); > + pci_write_config_word(adev->pdev, PCI_COMMAND, > + cmd & ~PCI_COMMAND_MEMORY); in the driver instead of "pci_disable_decoding(dev, IORESOURCE_MEM);" I thought that introducing a new interface for this two lines would be overkill, but if you find it cleaner to add the new interface I can change that. > I would *prefer* if we released and reassigned all resources, because > then the core has complete flexibility to move things around, and it's > easy to document that pci_assign_resources() means you have to > reread/remap everything. I've tried this and it doesn't work at all, surprisingly the I/O ports turned out to be not the first problem I've ran into. Releasing all resources means that we also try to release the 0xa000-0xbffff (VGA) and 0xc0000-0xdffff (VBIOS) ranges. They can be reassigned, but somehow that seems to cause problems later on. > If the driver only releases specified BARs, the pci_assign_resources() > interface becomes "you need to reread/remap the BAR you resized, plus > any other BARs you released". It's a little more complicated to > describe and more dependent on previous driver actions. How about the driver releases all resources it wants to move, including the resized and reallocates them after the resize is done? > > But releasing only the specified BAR will make your life easier and > help with the fact that multiple drivers might be using the same BAR > (I have to raise my eyebrows at that), so I think I'm OK with it. And > it would also side-step the "can't restore previous state" problem. I agree that it is a bit more documentation work to describe how the interface works, but it is clearly less problematic during runtime. Please take a look at the new version of the patches and let me know what you think. Regards, Christian. > > It's an "interesting" asymmetry that pci_enable_device() turns on BAR > decoding but doesn't touch bus mastering, while pci_disable_device() > turns off bus mastering but doesn't touch BAR decoding. > > Bjorn
next prev parent reply other threads:[~2017-06-09 8:59 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-05-09 16:49 Resizeable PCI BAR support v6 Christian König 2017-05-09 16:49 ` [PATCH v6 1/5] PCI: add a define for the PCI resource type mask v2 Christian König 2017-05-09 16:49 ` [PATCH v6 2/5] PCI: add resizeable BAR infrastructure v5 Christian König 2017-05-09 16:49 ` [PATCH v6 3/5] PCI: add functionality for resizing resources v5 Christian König 2017-05-11 11:56 ` Andy Shevchenko 2017-05-11 11:56 ` Andy Shevchenko 2017-05-09 16:49 ` [PATCH v6 4/5] x86/PCI: Enable a 64bit BAR on AMD Family 15h (Models 30h-3fh) Processors v3 Christian König 2017-05-09 16:49 ` [PATCH v6 5/5] drm/amdgpu: resize VRAM BAR for CPU access v2 Christian König 2017-05-11 12:00 ` Andy Shevchenko 2017-05-11 12:00 ` Andy Shevchenko 2017-06-01 20:14 ` Bjorn Helgaas 2017-06-01 20:14 ` Bjorn Helgaas 2017-06-02 9:32 ` Christian König 2017-06-02 20:26 ` Bjorn Helgaas [not found] ` <20170602202631.GA1452-1RhO1Y9PlrlHTL0Zs8A6p5iNqAH0jzoTYJqu5kTmcBRl57MIdRCFDg@public.gmane.org> 2017-06-06 11:51 ` Christian König 2017-06-06 11:51 ` Christian König [not found] ` <779a883a-265a-ae04-b0cd-8cb3599f0dc0-ANTagKRnAhcb1SvskN2V4Q@public.gmane.org> 2017-06-06 13:53 ` Alex Deucher 2017-06-06 13:53 ` Alex Deucher 2017-06-06 23:10 ` Bjorn Helgaas 2017-06-07 3:50 ` Deucher, Alexander 2017-06-07 3:50 ` Deucher, Alexander [not found] ` <20170606231019.GC12672-1RhO1Y9PlrlHTL0Zs8A6p5iNqAH0jzoTYJqu5kTmcBRl57MIdRCFDg@public.gmane.org> 2017-06-09 8:59 ` Christian König [this message] 2017-06-09 8:59 ` Christian König
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=55fb9500-5062-78ea-93c3-0f3e850dd31f@vodafone.de \ --to=deathsimple-antagkrnahcb1svskn2v4q@public.gmane.org \ --cc=airlied-cv59FeDIM0c@public.gmane.org \ --cc=alexander.deucher-5C7GfCeVMHo@public.gmane.org \ --cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \ --cc=dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \ --cc=helgaas-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \ --cc=linux-pci-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=platform-driver-x86-u79uwXL29TY76Z2rM5mHXA@public.gmane.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.