From: Lucas Kannebley Tavares <lucaskt@linux.vnet.ibm.com>
To: linuxppc-dev@lists.ozlabs.org, dri-devel@lists.freedesktop.org,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Bjorn Helgaas <bhelgaas@google.com>,
"David Airlie <airlied@linux.ie> Michael Ellerman"
<michael@ellerman.id.au>,
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>
Subject: Re: [PATCHv4 1/2] ppc64: perform proper max_bus_speed detection
Date: Thu, 25 Apr 2013 14:34:32 -0300 [thread overview]
Message-ID: <51796928.2050406@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130424234838.GA1971@thor.bakeyournoodle.com>
On 04/24/2013 08:48 PM, Tony Breeds wrote:
> On Wed, Apr 24, 2013 at 07:54:49PM -0300, lucaskt@linux.vnet.ibm.com wrote:
>> From: Lucas Kannebley Tavares<lucaskt@linux.vnet.ibm.com>
>>
>> On pseries machines the detection for max_bus_speed should be done
>> through an OpenFirmware property. This patch adds a function to perform
>> this detection and a hook to perform dynamic adding of the function only for
>> pseries. This is done by overwriting the weak
>> pcibios_root_bridge_prepare function which is called by pci_create_root_bus().
>>
>> Signed-off-by: Lucas Kannebley Tavares<lucaskt@linux.vnet.ibm.com>
>> ---
>> arch/powerpc/include/asm/machdep.h | 2 ++
>> arch/powerpc/kernel/pci-common.c | 8 +++++
>> arch/powerpc/platforms/pseries/pci.c | 51 ++++++++++++++++++++++++++++++++
>> arch/powerpc/platforms/pseries/pseries.h | 4 +++
>> arch/powerpc/platforms/pseries/setup.c | 2 ++
>> 5 files changed, 67 insertions(+)
>>
>> diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
>> index 3d6b410..8f558bf 100644
>> --- a/arch/powerpc/include/asm/machdep.h
>> +++ b/arch/powerpc/include/asm/machdep.h
>> @@ -107,6 +107,8 @@ struct machdep_calls {
>> void (*pcibios_fixup)(void);
>> int (*pci_probe_mode)(struct pci_bus *);
>> void (*pci_irq_fixup)(struct pci_dev *dev);
>> + int (*pcibios_root_bridge_prepare)(struct pci_host_bridge
>> + *bridge);
>>
>> /* To setup PHBs when using automatic OF platform driver for PCI */
>> int (*pci_setup_phb)(struct pci_controller *host);
>> diff --git a/arch/powerpc/kernel/pci-common.c b/arch/powerpc/kernel/pci-common.c
>> index fa12ae4..80986cf 100644
>> --- a/arch/powerpc/kernel/pci-common.c
>> +++ b/arch/powerpc/kernel/pci-common.c
>> @@ -844,6 +844,14 @@ int pci_proc_domain(struct pci_bus *bus)
>> return 1;
>> }
>>
>> +int pcibios_root_bridge_prepare(struct pci_host_bridge *bridge)
>> +{
>> + if (ppc_md.pcibios_root_bridge_prepare)
>> + return ppc_md.pcibios_root_bridge_prepare(bridge);
>> +
>> + return 0;
>> +}
>> +
>> /* This header fixup will do the resource fixup for all devices as they are
>> * probed, but not for bridge ranges
>> */
>> diff --git a/arch/powerpc/platforms/pseries/pci.c b/arch/powerpc/platforms/pseries/pci.c
>> index 0b580f4..7f9c956 100644
>> --- a/arch/powerpc/platforms/pseries/pci.c
>> +++ b/arch/powerpc/platforms/pseries/pci.c
>> @@ -108,3 +108,54 @@ static void fixup_winbond_82c105(struct pci_dev* dev)
>> }
>> DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105,
>> fixup_winbond_82c105);
>> +
>> +int pseries_root_bridge_prepare(struct pci_host_bridge *bridge)
>> +{
>> + struct device_node *dn, *pdn;
>> + struct pci_bus *bus;
>> + const uint32_t *pcie_link_speed_stats;
>> +
>> + bus = bridge->bus;
>> +
>> + dn = pcibios_get_phb_of_node(bus);
>> + if (!dn)
>> + return 0;
>> +
>> + for (pdn = dn; pdn != NULL; pdn = pdn->parent) {
>> + pcie_link_speed_stats = (const uint32_t *) of_get_property(dn,
>> + "ibm,pcie-link-speed-stats", NULL);
>> + if (pcie_link_speed_stats)
>> + break;
>> + }
>
> Please use the helpers in include/linux/of.h rather than open coding
> this.
>
> Yours Tony
Hi Tony,
This is what I can find as an equivalent code:
for (pdn = dn; pdn != NULL; pdn = of_get_next_parent(pdn)) {
pcie_link_speed_stats = (const uint32_t *)
of_get_property(dn,
"ibm,pcie-link-speed-stats", NULL);
if (pcie_link_speed_stats)
break;
}
is this your suggestion, or was it another approach that will have the
same result?
Thanks,
--
Lucas Kannebley Tavares
Software Engineer
IBM Linux Technology Center
next prev parent reply other threads:[~2013-04-25 17:34 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-04-24 22:54 [PATCHv4 0/2] Speed Cap fixes for ppc64 lucaskt
2013-04-24 22:54 ` [PATCHv4 1/2] ppc64: perform proper max_bus_speed detection lucaskt
2013-04-24 23:48 ` Tony Breeds
2013-04-24 23:48 ` Tony Breeds
2013-04-25 17:34 ` Lucas Kannebley Tavares [this message]
2013-05-02 15:21 ` Kleber Sacilotto de Souza
2013-05-02 15:21 ` Kleber Sacilotto de Souza
2013-05-03 6:40 ` Tony Breeds
2013-05-03 6:40 ` Tony Breeds
2013-05-03 11:55 ` Kleber Sacilotto de Souza
2013-05-03 11:55 ` Kleber Sacilotto de Souza
2013-04-24 22:54 ` [PATCHv4 2/2] radeon: use max_bus_speed to activate gen2 speeds lucaskt
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=51796928.2050406@linux.vnet.ibm.com \
--to=lucaskt@linux.vnet.ibm.com \
--cc=alexander.deucher@amd.com \
--cc=benh@kernel.crashing.org \
--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 \
--cc=michael@ellerman.id.au \
/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.