[U-Boot-Users] [PATCH] Fixing 'pci' command output

KRONSTORFER Horst Horst.KRONSTORFER at frequentis.com
Thu Jan 26 17:42:30 CET 2006


hi!

currently a series of 'pci_bus_to_hose() failed' messages are printed when
pciinfo() is called with a invalid (out-of-bounds) bus number.

this patch fixes the output of the 'pci' command by
*) checking that the given bus number is actually a number
*) checking that the given bus number is not out-of-bounds before doing a
scan
*) printing 'pci_bus_to_hose() failed' only when DEBUG is defined


Signed-off-by: Horst Kronstorfer <hkronsto <at> frequentis.com>

CHANGELOG

* Fixing 'pci' command output:
	Patch by Horst Kronstorfer, 26 Jan 2006

diff --git a/common/cmd_pci.c b/common/cmd_pci.c
index 4508546..e0e166c 100644
--- a/common/cmd_pci.c
+++ b/common/cmd_pci.c
@@ -71,6 +71,11 @@ void pciinfo(int BusNum, int ShortPCILis
        unsigned short VendorID;
        pci_dev_t dev;
 
+       if (pci_bus_to_hose(BusNum) == NULL) {
+               printf("Error: bus no. %d does not exist\n", BusNum);
+               return;
+       }
+       
        printf("Scanning PCI devices on bus %d\n", BusNum);
 
        if (ShortPCIListing) {
@@ -511,9 +516,17 @@ int do_pci (cmd_tbl_t *cmdtp, int flag, 
                        if (argv[argc-1][0] == 'l') {
                                value = 0;
                                argc--;
+                       } else if (argv[argc-1][0] == 's')
+                               argc--;
+                       if (argc > 1) {
+                               char *endp;
+                               bdf = simple_strtoul(argv[1], &endp, 16);
+                               if (*endp != '\0') {
+                                       printf("Error: \`%s\' is not a valid
"
+                                               "bus no.\n", argv[1]);
+                                       return 0;
+                               }
                        }
-                       if (argc > 1)
-                               bdf = simple_strtoul(argv[1], NULL, 16);
                }
                pciinfo(bdf, value);
                return 0;
diff --git a/drivers/pci.c b/drivers/pci.c
index 5360030..34b4055 100644
--- a/drivers/pci.c
+++ b/drivers/pci.c
@@ -142,7 +142,7 @@ struct pci_controller *pci_bus_to_hose (
                if (bus >= hose->first_busno && bus <= hose->last_busno)
                        return hose;
 
-       printf("pci_bus_to_hose() failed\n");
+       debug("pci_bus_to_hose() failed\n");
        return NULL;
 }




More information about the U-Boot mailing list