Hi Bin, On 5 August 2015 at 20:41, Bin Meng <bmeng...@gmail.com> wrote: > 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?
Not really. I am thinking that we should try to use the dm_pci functions but until we get into it I'm not sure how easy it is. Regards, Simon _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot