Hi Simon, On Thu, Aug 6, 2015 at 10:36 AM, Simon Glass <s...@chromium.org> wrote: > Hi Bin, > > On 5 August 2015 at 20:22, Bin Meng <bmeng...@gmail.com> wrote: >> Hi Simon, >> >> On Wed, Aug 5, 2015 at 10:40 PM, Simon Glass <s...@chromium.org> wrote: >>> Hi Bin, >>> >>> On 2 August 2015 at 19:54, Bin Meng <bmeng...@gmail.com> wrote: >>>> Hi Simon, >>>> >>>> On Mon, Aug 3, 2015 at 6:31 AM, Simon Glass <s...@chromium.org> wrote: >>>>> Hi Bin, >>>>> >>>>> On 27 July 2015 at 01:33, Bin Meng <bmeng...@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...@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. > > Provided that we always call uclass_get_device() or any of those > *_get_* functions then the bus will be probed and thus enumerated. >
Yes. > The problem is that we have these sideways functions to accessing PCI > on x86. Once we get rid of those then we should be OK. Everything > should use a struct udevice. > Do you plan to fix this or is there already a patch that I missed? Regards, Bin _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot