Merge branch '2020-05-15-misc-bugfixes'
[oweals/u-boot.git] / drivers / pci / pci.c
index df50b480035f4bf14c62b81422f3f532957f19a7..e8285bf93639e8fed480091898cec553a155654f 100644 (file)
@@ -1,20 +1,24 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2001 Sysgo Real-Time Solutions, GmbH <www.elinos.com>
  * Andreas Heppel <aheppel@sysgo.de>
  *
  * (C) Copyright 2002, 2003
  * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
- * PCI routines
+ * Old PCI routines
+ *
+ * Do not change this file. Instead, convert your board to use CONFIG_DM_PCI
+ * and change pci-uclass.c.
  */
 
 #include <common.h>
+#include <init.h>
 
 #include <command.h>
+#include <env.h>
 #include <errno.h>
 #include <asm/processor.h>
 #include <asm/io.h>
@@ -172,11 +176,7 @@ pci_dev_t pci_find_devices(struct pci_device_id *ids, int index)
        int bus;
 
        for (hose = pci_get_hose_head(); hose; hose = hose->next) {
-#ifdef CONFIG_SYS_SCSI_SCAN_BUS_REVERSE
-               for (bus = hose->last_busno; bus >= hose->first_busno; bus--) {
-#else
                for (bus = hose->first_busno; bus <= hose->last_busno; bus++) {
-#endif
                        bdf = pci_hose_find_devices(hose, bus, ids, &index);
                        if (bdf != -1)
                                return bdf;
@@ -186,11 +186,8 @@ pci_dev_t pci_find_devices(struct pci_device_id *ids, int index)
        return -1;
 }
 
-int pci_hose_config_device(struct pci_controller *hose,
-                          pci_dev_t dev,
-                          unsigned long io,
-                          pci_addr_t mem,
-                          unsigned long command)
+static int pci_hose_config_device(struct pci_controller *hose, pci_dev_t dev,
+                                 ulong io, pci_addr_t mem, ulong command)
 {
        u32 bar_response;
        unsigned int old_command;
@@ -269,7 +266,8 @@ int pci_hose_config_device(struct pci_controller *hose,
        /* Disable interrupt line, if device says it wants to use interrupts */
        pci_hose_read_config_byte(hose, dev, PCI_INTERRUPT_PIN, &pin);
        if (pin != 0) {
-               pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, 0xff);
+               pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE,
+                                          PCI_INTERRUPT_LINE_DISABLE);
        }
 
        pci_hose_read_config_dword(hose, dev, PCI_COMMAND, &old_command);
@@ -427,7 +425,7 @@ int pci_hose_scan(struct pci_controller *hose)
 
        if (!gd->pcidelay_done) {
                /* wait "pcidelay" ms (if defined)... */
-               s = getenv("pcidelay");
+               s = env_get("pcidelay");
                if (s) {
                        int val = simple_strtoul(s, NULL, 10);
                        for (i = 0; i < val; i++)
@@ -458,6 +456,10 @@ void pci_init(void)
 {
        hose_head = NULL;
 
+       /* allow env to disable pci init/enum */
+       if (env_get("pcidisable") != NULL)
+               return;
+
        /* now call board specific pci_init()... */
        pci_init_board();
 }