All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marek Vasut <marek.vasut@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] pci: Support parsing PCI controller DT subnodes
Date: Thu, 9 Aug 2018 02:36:09 +0200	[thread overview]
Message-ID: <f5232610-e149-d616-0515-0c4cc8b0a1b5@gmail.com> (raw)
In-Reply-To: <CAEUhbmVcS+=2kPKvdDe20XwG2hGoX25QCK-0NSO8P4v5gOZzSA@mail.gmail.com>

On 08/09/2018 01:24 AM, Bin Meng wrote:
> Hi Marek,
> 
> On Thu, Aug 9, 2018 at 3:37 AM, Marek Vasut <marek.vasut@gmail.com> wrote:
>> On 08/08/2018 05:32 PM, Bin Meng wrote:
>>> Hi Marek,
>>>
>>> On Wed, Aug 8, 2018 at 10:33 PM, Marek Vasut <marek.vasut@gmail.com> wrote:
>>>> On 08/08/2018 03:39 PM, Bin Meng wrote:
>>>>> Hi Marek,
>>>>>
>>>>> On Wed, Aug 8, 2018 at 9:24 PM, Marek Vasut <marek.vasut@gmail.com> wrote:
>>>>>> On 08/08/2018 03:14 PM, Bin Meng wrote:
>>>>>>> Hi Marek,
>>>>>>>
>>>>>>> On Wed, Aug 8, 2018 at 9:03 PM, Marek Vasut <marek.vasut@gmail.com> wrote:
>>>>>>>> The PCI controller can have DT subnodes describing extra properties
>>>>>>>> of particular PCI devices, ie. a PHY attached to an EHCI controller
>>>>>>>> on a PCI bus. This patch parses those DT subnodes and assigns a node
>>>>>>>> to the PCI device instance, so that the driver can extract details
>>>>>>>> from that node and ie. configure the PHY using the PHY subsystem.
>>>>>>>>
>>>>>>>> Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
>>>>>>>> Cc: Simon Glass <sjg@chromium.org>
>>>>>>>> ---
>>>>>>>>  drivers/pci/pci-uclass.c | 14 ++++++++++++++
>>>>>>>>  1 file changed, 14 insertions(+)
>>>>>>>>
>>>>>>>> diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
>>>>>>>> index 46e9c71bdf..306bea0dbf 100644
>>>>>>>> --- a/drivers/pci/pci-uclass.c
>>>>>>>> +++ b/drivers/pci/pci-uclass.c
>>>>>>>> @@ -662,6 +662,8 @@ static int pci_find_and_bind_driver(struct udevice *parent,
>>>>>>>>                 for (id = entry->match;
>>>>>>>>                      id->vendor || id->subvendor || id->class_mask;
>>>>>>>>                      id++) {
>>>>>>>> +                       ofnode node;
>>>>>>>> +
>>>>>>>>                         if (!pci_match_one_id(id, find_id))
>>>>>>>>                                 continue;
>>>>>>>>
>>>>>>>> @@ -691,6 +693,18 @@ static int pci_find_and_bind_driver(struct udevice *parent,
>>>>>>>>                                 goto error;
>>>>>>>>                         debug("%s: Match found: %s\n", __func__, drv->name);
>>>>>>>>                         dev->driver_data = find_id->driver_data;
>>>>>>>> +
>>>>>>>> +                       dev_for_each_subnode(node, parent) {
>>>>>>>> +                               phys_addr_t df, size;
>>>>>>>> +                               df = ofnode_get_addr_size(node, "reg", &size);
>>>>>>>> +
>>>>>>>> +                               if (PCI_FUNC(df) == PCI_FUNC(bdf) &&
>>>>>>>> +                                   PCI_DEV(df) == PCI_DEV(bdf)) {
>>>>>>>> +                                       dev->node = node;
>>>>>>>> +                                       break;
>>>>>>>> +                               }
>>>>>>>
>>>>>>> The function pci_find_and_bind_driver() is supposed to bind devices
>>>>>>> that are NOT in the device tree. Adding device tree access in this
>>>>>>> routine is quite odd. You can add the EHCI controller that need such
>>>>>>> PHY subnodes in the device tree and there is no need to modify
>>>>>>> anything I believe. If you are looking for an example, please check
>>>>>>> pciuart0 in arch/x86/dts/crownbay.dts.
>>>>>>
>>>>>> Well this does not work for me, the EHCI PCI doesn't get a DT node
>>>>>> assigned, check r8a7794.dtsi for the PCI devices I use.
>>>>>>
>>>>>
>>>>> I think that's because you don't specify a "compatible" string for
>>>>> these two EHCI PCI nodes.
>>>>
>>>> That's perfectly fine, why should I specify it ? Linux has no problem
>>>> with it either.
>>>>
>>>
>>> Without a "compatible" string, DM does not bind any device in the
>>> device tree to a driver, hence no device node created. This is not
>>> Linux.
>>
>> DT is NOT Linux specific, it is OS-agnostic, DT describes hardware and
>> hardware only. If U-Boot cannot parse DT correctly, U-Boot is broken and
>> must be fixed.
>>
>> This is a fix. If there is a better fix, I am open to it.
>>
> 
> Sorry this is a hack to current U-Boot implementation, not fix.

I am waiting for a better solution or suggestion ...

> The fix should be adding "ehci-pci" compatible string in the r8a7794.dtsi.

Wrong. The DT is perfectly valid as is.

The device sitting at a particular slot/function can very well be ie.
xhci controller and the DT node would be valid for it too, unless you
enforce a compatible, which will mess things up.

Each PCI device already has a PCI ID and class which is used to identify
it and based on which the drivers bind to it, so a DT compatible is NOT
needed and is actually redundant and harmful.

What is needed here is to assign a valid DT node to a driver instance of
a PCI device if such a matching node exists in DT and that is all this
patch does.

> I disagree DT is OS-agnostic. This are lots of stuff in DT that are
> OS-specific. eg: there are lots of bindings in DT that requires
> Linux's device driver framework to work with.

This logic is flawed. If there exists a binding which depends on some
behavior of specific OS then the binding is likely wrong. That
specifically does not imply DT is OS-specific. Again, it is not and that
is by design. The DT must be usable by multiple OSes with very different
internal design, Solaris, *BSD, Linux, U-Boot to name a few.

> As you said, DT is just
> a standard to describe hardware and hardware only. But there are
> various methods to describe hardware in DT that's why we have a proper
> defined bindings in Linux.

defined bindings, yes. In Linux ... no ... the HW is OS-independent, so
is it's description in DT.

> How OS parses and utilizes these
> information is completely on their own.
> 
> Regards,
> Bin
> 


-- 
Best regards,
Marek Vasut

  reply	other threads:[~2018-08-09  0:36 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-08 13:03 [U-Boot] [PATCH] pci: Support parsing PCI controller DT subnodes Marek Vasut
2018-08-08 13:14 ` Bin Meng
2018-08-08 13:24   ` Marek Vasut
2018-08-08 13:39     ` Bin Meng
2018-08-08 14:33       ` Marek Vasut
2018-08-08 15:32         ` Bin Meng
2018-08-08 19:37           ` Marek Vasut
2018-08-08 23:24             ` Bin Meng
2018-08-09  0:36               ` Marek Vasut [this message]
2018-08-09  2:37                 ` Bin Meng
2018-08-09  7:54                   ` Marek Vasut
2018-08-09  9:41                     ` Bin Meng
2018-08-09 10:25                       ` Marek Vasut
2018-08-10  3:42                         ` Bin Meng
2018-08-10 10:32                           ` Marek Vasut
2018-08-13  2:07                             ` Bin Meng
2018-08-13 13:39                               ` Tom Rini
2018-08-13 16:07                                 ` Marek Vasut
2018-08-13 17:16                                   ` Tom Rini
2018-08-14  2:34                                     ` Bin Meng
2018-08-14  8:54                                       ` Marek Vasut
2018-08-14  9:35                                         ` Bin Meng
2018-08-15  9:20                                           ` Marek Vasut
2018-08-14 19:39                                       ` Tom Rini
2018-08-13 13:43                               ` Marek Vasut
2018-08-10 12:01             ` Tom Rini
2018-08-10 12:38               ` Marek Vasut
2018-08-13  2:24                 ` Bin Meng
2018-08-13 13:46                   ` Marek Vasut
2018-08-14  1:46                     ` Bin Meng
2018-08-14  8:55                       ` Marek Vasut
2018-08-14  9:40                         ` Bin Meng
2018-08-15  9:22                           ` Marek Vasut
2018-08-15 10:19                             ` Bin Meng
2018-08-15 10:27                               ` Marek Vasut
2018-08-15 11:25                               ` Tom Rini
2018-08-16 11:47                                 ` Marek Vasut
2018-08-17  1:51                                   ` Bin Meng
2018-08-17 10:27                                     ` Marek Vasut
2018-08-20  7:18                                       ` Bin Meng
2018-08-20  8:09                                         ` Marek Vasut
2018-08-20 16:57                                     ` Simon Glass
2018-08-20 18:42                                       ` Marek Vasut
2018-08-20 19:29                                         ` Simon Glass
2018-08-20 20:15                                           ` Marek Vasut
2018-08-22 18:08                                             ` Simon Glass
2018-08-22 20:19                                               ` Marek Vasut
2018-08-23 10:45                                                 ` Simon Glass
2018-08-23 12:58                                                   ` Marek Vasut
2018-08-30  0:29                                                     ` Simon Glass
2018-08-30  9:25                                                       ` Marek Vasut
2018-09-01 21:45                                                         ` Simon Glass
2018-09-01 22:43                                                           ` Marek Vasut
2018-09-02  1:07                                                             ` Simon Glass
2018-09-02 18:24                                                               ` Marek Vasut
2018-09-02 23:35                                                                 ` Simon Glass
2018-09-03  0:53                                                                   ` Marek Vasut
2018-08-21  3:46                                           ` Bin Meng
2018-08-21  4:02                                             ` Marek Vasut
2018-08-21  4:15                                               ` Bin Meng
2018-08-21  4:30                                                 ` Marek Vasut
2018-08-21  4:56                                                   ` Bin Meng
2018-08-21  5:43                                                     ` Marek Vasut
2018-08-21  7:16                                                       ` Bin Meng
2018-08-21 10:28                                                         ` Marek Vasut
2018-08-22  2:14                                                           ` Bin Meng
2018-08-22  9:57                                                             ` Marek Vasut
2018-08-23  2:11                                                               ` Bin Meng
2018-08-23  7:42                                                                 ` Marek Vasut
2018-08-21 17:32                                             ` Simon Glass
2018-08-21 18:26                                               ` Marek Vasut
2018-08-21 18:29                                                 ` Simon Glass
2018-08-21 18:56                                                   ` Marek Vasut

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=f5232610-e149-d616-0515-0c4cc8b0a1b5@gmail.com \
    --to=marek.vasut@gmail.com \
    --cc=u-boot@lists.denx.de \
    /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.