From: Lucas Kannebley Tavares <lucaskt@linux.vnet.ibm.com>
To: Bjorn Helgaas <bhelgaas@google.com>
Cc: David Airlie <airlied@linux.ie>,
DRI mailing list <dri-devel@lists.freedesktop.org>,
Kleber Sacilotto de Souza <klebers@linux.vnet.ibm.com>,
Alex Deucher <alexander.deucher@amd.com>,
Jerome Glisse <jglisse@redhat.com>,
Thadeu Lima de Souza Cascardo <cascardo@linux.vnet.ibm.com>,
Brian King <brking@linux.vnet.ibm.com>,
linuxppc-dev <linuxppc-dev@lists.ozlabs.org>
Subject: Re: [PATCHv3 2/2] radeon: use max_bus_speed to activate gen2 speeds
Date: Wed, 17 Apr 2013 09:38:01 -0300 [thread overview]
Message-ID: <516E97A9.7050102@linux.vnet.ibm.com> (raw)
In-Reply-To: <CAErSpo7vxSJix83DQcsARPWYWbx8UGxQ9FN61OtEJrEv7GhK=g@mail.gmail.com>
On 04/12/2013 01:38 PM, Bjorn Helgaas wrote:
> On Thu, Apr 11, 2013 at 7:13 AM, Lucas Kannebley Tavares
> <lucaskt@linux.vnet.ibm.com> wrote:
>> radeon currently uses a drm function to get the speed capabilities for
>> the bus. However, this is a non-standard method of performing this
>> detection and this patch changes it to use the max_bus_speed attribute.
>> ---
>> drivers/gpu/drm/radeon/evergreen.c | 9 ++-------
>> drivers/gpu/drm/radeon/r600.c | 8 +-------
>> drivers/gpu/drm/radeon/rv770.c | 8 +-------
>> 3 files changed, 4 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/radeon/evergreen.c b/drivers/gpu/drm/radeon/evergreen.c
>> index 305a657..3291f62 100644
>> --- a/drivers/gpu/drm/radeon/evergreen.c
>> +++ b/drivers/gpu/drm/radeon/evergreen.c
>> @@ -3855,8 +3855,7 @@ void evergreen_fini(struct radeon_device *rdev)
>>
>> void evergreen_pcie_gen2_enable(struct radeon_device *rdev)
>> {
>> - u32 link_width_cntl, speed_cntl, mask;
>> - int ret;
>> + u32 link_width_cntl, speed_cntl;
>>
>> if (radeon_pcie_gen2 == 0)
>> return;
>> @@ -3871,11 +3870,7 @@ void evergreen_pcie_gen2_enable(struct radeon_device *rdev)
>> if (ASIC_IS_X2(rdev))
>> return;
>>
>> - ret = drm_pcie_get_speed_cap_mask(rdev->ddev,&mask);
>> - if (ret != 0)
>> - return;
>> -
>> - if (!(mask& DRM_PCIE_SPEED_50))
>> + if (rdev->pdev->bus->max_bus_speed< PCIE_SPEED_5_0GT)
>
> For devices on a root bus, we previously dereferenced a NULL pointer
> in drm_pcie_get_speed_cap_mask() because pdev->bus->self is NULL on a
> root bus. (I think this is the original problem you tripped over,
> Lucas.)
>
> These patches fix that problem. On pseries, where the device *is* on
> a root bus, your patches set max_bus_speed so this will work as
> expected. On most other systems, max_bus_speed for root buses will be
> PCI_SPEED_UNKNOWN (set in pci_alloc_bus() and never updated because
> most arches don't have code like the pseries code you're adding).
>
> PCI_SPEED_UNKNOWN = 0xff, so if we see another machine with a GPU on
> the root bus, we'll attempt to enable Gen2 on the device even though
> we have no idea what the bus will support.
>
> That's why I originally suggested skipping the Gen2 stuff if
> "max_bus_speed == PCI_SPEED_UNKNOWN". I was just being conservative,
> thinking that it's better to have a functional but slow GPU rather
> than the unknown (to me) effects of enabling Gen2 on a link that might
> not support it. But I'm fine with this being either way.
You're right here, of course. I'll test for it being different from
5_0GT and 8_0GT instead. Though at some point I suppose someone will
want to tackle Gen3 speeds.
>
> It would be nice if we could get rid of drm_pcie_get_speed_cap_mask()
> altogether. It is exported, but I have no idea of anybody else uses
> it. Maybe it could at least be marked __deprecated now?
>
I'll mark it.
> I don't know who should take these patches. They don't touch
> drivers/pci, but I'd be happy to push them, given the appropriate ACKs
> from DRM and powerpc folks.
>
> Bjorn
>
>> return;
>>
>> speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL);
>> diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
>> index 0740db3..64b90c0 100644
>> --- a/drivers/gpu/drm/radeon/r600.c
>> +++ b/drivers/gpu/drm/radeon/r600.c
>> @@ -4351,8 +4351,6 @@ static void r600_pcie_gen2_enable(struct radeon_device *rdev)
>> {
>> u32 link_width_cntl, lanes, speed_cntl, training_cntl, tmp;
>> u16 link_cntl2;
>> - u32 mask;
>> - int ret;
>>
>> if (radeon_pcie_gen2 == 0)
>> return;
>> @@ -4371,11 +4369,7 @@ static void r600_pcie_gen2_enable(struct radeon_device *rdev)
>> if (rdev->family<= CHIP_R600)
>> return;
>>
>> - ret = drm_pcie_get_speed_cap_mask(rdev->ddev,&mask);
>> - if (ret != 0)
>> - return;
>> -
>> - if (!(mask& DRM_PCIE_SPEED_50))
>> + if (rdev->pdev->bus->max_bus_speed< PCIE_SPEED_5_0GT)
>> return;
>>
>> speed_cntl = RREG32_PCIE_P(PCIE_LC_SPEED_CNTL);
>> diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
>> index d63fe1d..c683c36 100644
>> --- a/drivers/gpu/drm/radeon/rv770.c
>> +++ b/drivers/gpu/drm/radeon/rv770.c
>> @@ -1238,8 +1238,6 @@ static void rv770_pcie_gen2_enable(struct radeon_device *rdev)
>> {
>> u32 link_width_cntl, lanes, speed_cntl, tmp;
>> u16 link_cntl2;
>> - u32 mask;
>> - int ret;
>>
>> if (radeon_pcie_gen2 == 0)
>> return;
>> @@ -1254,11 +1252,7 @@ static void rv770_pcie_gen2_enable(struct radeon_device *rdev)
>> if (ASIC_IS_X2(rdev))
>> return;
>>
>> - ret = drm_pcie_get_speed_cap_mask(rdev->ddev,&mask);
>> - if (ret != 0)
>> - return;
>> -
>> - if (!(mask& DRM_PCIE_SPEED_50))
>> + if (rdev->pdev->bus->max_bus_speed< PCIE_SPEED_5_0GT)
>> return;
>>
>> DRM_INFO("enabling PCIE gen 2 link speeds, disable with radeon.pcie_gen2=0\n");
>> --
>> 1.7.4.4
>>
>
--
Lucas Kannebley Tavares
Software Engineer
IBM Linux Technology Center
next prev parent reply other threads:[~2013-04-17 12:38 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-11 13:13 [PATCHv3 0/2] Speed Cap fixes for ppc64 Lucas Kannebley Tavares
2013-04-11 13:13 ` [PATCHv3 1/2] ppc64: perform proper max_bus_speed detection Lucas Kannebley Tavares
2013-04-15 5:00 ` Michael Ellerman
2013-04-17 12:38 ` Lucas Kannebley Tavares
2013-04-15 11:42 ` Michael Ellerman
2013-04-17 12:40 ` Lucas Kannebley Tavares
2013-04-17 12:40 ` Lucas Kannebley Tavares
2013-04-11 13:13 ` [PATCHv3 2/2] radeon: use max_bus_speed to activate gen2 speeds Lucas Kannebley Tavares
2013-04-12 16:38 ` Bjorn Helgaas
2013-04-16 3:17 ` Dave Airlie
2013-04-17 12:38 ` Lucas Kannebley Tavares [this message]
2013-04-17 20:04 ` Alex Deucher
2013-04-17 20:11 ` Bjorn Helgaas
2013-04-17 20:11 ` Bjorn Helgaas
2013-04-17 20:17 ` Alex Deucher
2013-04-17 20:30 ` Bjorn Helgaas
2013-04-12 13:52 ` [PATCHv3 0/2] Speed Cap fixes for ppc64 Jerome Glisse
2013-04-12 13:52 ` Jerome Glisse
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=516E97A9.7050102@linux.vnet.ibm.com \
--to=lucaskt@linux.vnet.ibm.com \
--cc=airlied@linux.ie \
--cc=alexander.deucher@amd.com \
--cc=bhelgaas@google.com \
--cc=brking@linux.vnet.ibm.com \
--cc=cascardo@linux.vnet.ibm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jglisse@redhat.com \
--cc=klebers@linux.vnet.ibm.com \
--cc=linuxppc-dev@lists.ozlabs.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 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.