[U-Boot] [PATCH 4/5] x86: Explicitly trigger pci bus configuration with driver model

Bin Meng bmeng.cn at gmail.com
Thu Aug 6 04:22:31 CEST 2015


Hi Simon,

On Wed, Aug 5, 2015 at 10:40 PM, Simon Glass <sjg at chromium.org> wrote:
> Hi Bin,
>
> On 2 August 2015 at 19:54, Bin Meng <bmeng.cn at gmail.com> wrote:
>> Hi Simon,
>>
>> On Mon, Aug 3, 2015 at 6:31 AM, Simon Glass <sjg at chromium.org> wrote:
>>> Hi Bin,
>>>
>>> On 27 July 2015 at 01:33, Bin Meng <bmeng.cn at gmail.com> wrote:
>>>> With driver model, probing pci bus is all done on a lazy basis,
>>>> as needed. On x86, pci bus is the fundamental device that needs
>>>> to work before any other peripherals. In order to have a working
>>>> pci before any other pci devices can be initialized, we need
>>>> explicitly trigger the pci bus configuration.
>>>>
>>>> Signed-off-by: Bin Meng <bmeng.cn at gmail.com>
>>>> ---
>>>>
>>>>  common/board_r.c | 16 ++++++++++++++++
>>>>  1 file changed, 16 insertions(+)
>>>>
>>>> diff --git a/common/board_r.c b/common/board_r.c
>>>> index bf6c725..4263e47 100644
>>>> --- a/common/board_r.c
>>>> +++ b/common/board_r.c
>>>> @@ -233,6 +233,22 @@ static int initr_pci(void)
>>>>  {
>>>>  #ifndef CONFIG_DM_PCI
>>>>         pci_init();
>>>> +#else
>>>> +#ifdef CONFIG_X86
>>>> +       /*
>>>> +        * With driver model, probing pci bus is all done on a lazy basis,
>>>> +        * as needed. On x86, pci bus is the fundamental device that needs
>>>> +        * to work before any other peripherals. In order to have a working
>>>> +        * pci before any other pci devices can be initialized, we need
>>>> +        * explicitly trigger the pci bus configuration.
>>>> +        */
>>>> +       struct udevice *dev;
>>>> +       int ret;
>>>> +
>>>> +       ret = uclass_first_device(UCLASS_PCI, &dev);
>>>> +       if (ret)
>>>> +               return ret;
>>>
>>> Won't this happen anyway when you first access a PCI device?
>>>
>>
>> Unfortunately no. The pci bus configuration will not be triggered when
>> calling pci config read/write.
>>
>> [snip]
>
> We should be able to use the dm_pci_config..() functions and by just
> getting hold of the bus device it should probe the bus before doing
> any config. Then it would be auto-triggered.

So far I don't see any config r/w routines can trigger the enumeration.

>
> In general we should try to make use of automatic probing - it was
> supposed to be a key feature of driver model.
>

Yep I know this is supposed to be done this way. I am not sure how it
looks like on other domain, but at least it is now broken for dm pci.
In order to get the enumeration process automatically triggered, we
need make sure all public pci apis will end up triggering the
configuration.

Regards,
Bin


More information about the U-Boot mailing list