> -----Original Message----- > From: Minghuan Lian > Sent: Thursday, February 25, 2016 11:55 PM > To: Stuart Yoder <stuart.yo...@nxp.com>; u-boot@lists.denx.de > Cc: york sun <york....@nxp.com>; Prabhakar Kushwaha > <prabhakar.kushw...@nxp.com>; > Mingkai Hu <mingkai...@nxp.com>; Yang-Leo Li <leoyang...@nxp.com>; > marc.zyng...@arm.com; > Stuart Yoder <stuart.yo...@nxp.com> > Subject: RE: [PATCH 7/7 v2] pci/layerscape: set LUT and msi-map for > discovered PCI > devices > > Hi Stuart, > > Please see my comments inline. > > Thanks, > Minghuan > > > -----Original Message----- > > From: Stuart Yoder [mailto:stuart.yo...@nxp.com] > > Sent: Friday, February 26, 2016 7:06 AM > > To: u-boot@lists.denx.de > > Cc: york sun <york....@nxp.com>; Prabhakar Kushwaha > > <prabhakar.kushw...@nxp.com>; Mingkai Hu <mingkai...@nxp.com>; > > Minghuan Lian <minghuan.l...@nxp.com>; Yang-Leo Li <leoyang...@nxp.com>; > > marc.zyng...@arm.com; Stuart Yoder <stuart.yo...@nxp.com> > > Subject: [PATCH 7/7 v2] pci/layerscape: set LUT and msi-map for discovered > > PCI > > devices > > > > From: Stuart Yoder <stuart.yo...@nxp.com> > > > > for all PCI devices discovered in a system: > > -allocate a LUT (look-up-table) entry in that PCI controller > > -allocate a stream ID for the device > > -program and enable a LUT entry (maps PCI requester id to stream ID) > > -set the msi-map property on the controller reflecting the > > LUT mapping > > > > basic bus scanning loop/logic was taken from drivers/pci/pci.c > > pci_hose_scan_bus(). > > > > Signed-off-by: Stuart Yoder <stuart.yo...@nxp.com> > > --- > > -v2 > > -removed skip of host bridge when scanning the bus > > > > drivers/pci/pcie_layerscape.c | 64 > > +++++++++++++++++++++++++++++++++++++++++ > > 1 file changed, 64 insertions(+) > > > > diff --git a/drivers/pci/pcie_layerscape.c b/drivers/pci/pcie_layerscape.c > > index dfafaf2..3470210 100644 > > --- a/drivers/pci/pcie_layerscape.c > > +++ b/drivers/pci/pcie_layerscape.c > > @@ -569,6 +569,66 @@ static void fdt_pcie_set_msi_map_entry(void *blob, > > struct ls_pcie *pcie, > > fdt_appendprop_u32(blob, nodeoffset, "msi-map", 1); > > } > > > > +static void fdt_fixup_pcie(void *blob) > > +{ > > + unsigned int found_multi = 0; > > + unsigned char header_type; > > + int index; > > + u32 streamid; > > + pci_dev_t dev; > > + int bus; > > + unsigned short id; > > + struct pci_controller *hose; > > + struct ls_pcie *pcie; > > + int i; > > + > > + for (i = 0, hose = pci_get_hose_head(); hose; hose = hose->next, i++) { > > + pcie = hose->priv_data; > > + for (bus = hose->first_busno; bus <= hose->last_busno; bus++) { > > + > > + for (dev = PCI_BDF(bus, 0, 0); > > + dev < PCI_BDF(bus, PCI_MAX_PCI_DEVICES - 1, > > + PCI_MAX_PCI_FUNCTIONS - 1); > > + dev += PCI_BDF(0, 0, 1)) { > > + > > + if (PCI_FUNC(dev) && !found_multi) > > + continue; > > + > > + pci_read_config_word(dev, PCI_VENDOR_ID, &id); > > + > > + pci_read_config_byte(dev, PCI_HEADER_TYPE, > > + &header_type); > > + > > + if ((id == 0xFFFF) || (id == 0x0000)) > > + continue; > > + > > + if (!PCI_FUNC(dev)) > > + found_multi = header_type & 0x80; > > + > > + streamid = ls_pcie_next_streamid(); > > + if (streamid < 0) { > [Minghuan Lian] streamed is u32 type not int, it should be always >= 0. > > + printf("ERROR: no stream ids free\n"); > > + continue; > > + } > > + > > + index = ls_pcie_next_lut_index(pcie); > [Minghuan Lian] ls_pcie_next_lut_index() returns an u32 value not int. we may > change all > index and streamid to int type.
Thanks. Stream IDs are not signed numbers, I'll update the patch series to be consistent and use a value of 0xffffffff to indicate an error. The LUT index I think should be an int. Stuart _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot