Hi Simon, On Wed, Nov 12, 2014 at 8:18 AM, Simon Glass <s...@chromium.org> wrote: > Some PCI functions cannot be auto-configured. Add a function to set up a > fixed BAR which can be used in these situations. Also add a function to read > the current address of a BAR. > > Signed-off-by: Simon Glass <s...@chromium.org> > --- > > drivers/pci/pci.c | 24 +++++++++++++++++++++--- > include/pci.h | 23 +++++++++++++++++++++++ > 2 files changed, 44 insertions(+), 3 deletions(-) > > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c > index 60c333e..e879d1e 100644 > --- a/drivers/pci/pci.c > +++ b/drivers/pci/pci.c > @@ -363,9 +363,27 @@ phys_addr_t pci_hose_bus_to_phys(struct pci_controller* > hose, > return phys_addr; > } > > -/* > - * > - */ > +void pci_config_fixed(struct pci_controller *hose, pci_dev_t dev, int barnum, > + u32 addr) > +{ > + int bar; > + > + bar = PCI_BASE_ADDRESS_0 + barnum * 4; > + pci_hose_write_config_dword(hose, dev, bar, addr); > +} > +
Maybe better renane it to pci_write_bar() to match the pci_read_bar() below? And considering it only covers the 32-bit bar, maybe pci_write_bar32() is even better. > +u32 pci_read_bar(struct pci_controller *hose, pci_dev_t dev, int barnum) > +{ > + u32 addr; > + int bar; > + > + bar = PCI_BASE_ADDRESS_0 + barnum * 4; > + pci_hose_read_config_dword(hose, dev, bar, &addr); > + if (addr & PCI_BASE_ADDRESS_SPACE_IO) > + return addr & PCI_BASE_ADDRESS_IO_MASK; > + else > + return addr & PCI_BASE_ADDRESS_MEM_MASK; > +} > pci_read_bar32()? > int pci_hose_config_device(struct pci_controller *hose, > pci_dev_t dev, > diff --git a/include/pci.h b/include/pci.h > index 2ff7365..05c67bc 100644 > --- a/include/pci.h > +++ b/include/pci.h > @@ -677,5 +677,28 @@ extern void pci_mpc824x_init (struct pci_controller > *hose); > extern void pci_mpc85xx_init (struct pci_controller *hose); > #endif > > +/** > + * pci_config_fixed() - Write the address of a BAR including control bits > + * > + * This writes a raw address (with control bits) to a bar > + * > + * @hose: PCI hose to use > + * @dev: PCI device to update > + * @barnum: BAR number (0-5) > + * @addr: BAR address with controll bits > + */ > +void pci_config_fixed(struct pci_controller *hose, pci_dev_t dev, int barnum, > + u32 addr); > + > +/** > + * pci_read_bar() - read the address of a bar > + * > + * @hose: PCI hose to use > + * @dev: PCI device to inspect > + * @barnum: BAR number (0-5) > + * @return address of the bar, masking out any control bits > + * */ > +u32 pci_read_bar(struct pci_controller *hose, pci_dev_t dev, int barnum); > + > #endif /* __ASSEMBLY__ */ > #endif /* _PCI_H */ > -- Regards, Bin _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot