dm: pci: Allow disabling auto-config for a device
authorSimon Glass <sjg@chromium.org>
Wed, 8 Apr 2020 22:57:26 +0000 (16:57 -0600)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 16 Apr 2020 06:36:28 +0000 (14:36 +0800)
Add a means to avoid configuring a device when needed. Add an explanation
of why this is useful to the binding file.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
doc/device-tree-bindings/pci/x86-pci.txt
drivers/pci/pci-uclass.c

index 3aa5bd9a46c5d5b265085a17c6e60ef8da7354c5..95e370b3e72bc92e0e3042ef155c69a5fcbbcd63 100644 (file)
@@ -10,6 +10,17 @@ Optional properties:
        configuration in TPL/SPL to reduce code size and boot time, since these
        phases only know about a small subset of PCI devices.
 
+For PCI devices the following optional property is available:
+
+- pci,no-autoconfig : Don't automatically configure this PCI device at all.
+       This is used when the device is statically configured and must maintain
+       this same config throughout the boot process. An example is a serial
+       UART being used to debug PCI configuration, since reconfiguring it stops
+       the UART from working until the driver is re-probed, and this can cause
+       output to be lost. This should not generally be used in production code,
+       although it is often harmless.
+
+
 Example:
 
 pci {
@@ -21,4 +32,16 @@ pci {
                0x42000000 0x0 0xb0000000 0xb0000000 0 0x10000000
                0x01000000 0x0 0x1000 0x1000 0 0xefff>;
        u-boot,skip-auto-config-until-reloc;
+
+
+       serial: serial@18,2 {
+               reg = <0x0200c210 0 0 0 0>;
+               u-boot,dm-pre-reloc;
+               compatible = "intel,apl-ns16550";
+               early-regs = <0xde000000 0x20>;
+               reg-shift = <2>;
+               clock-frequency = <1843200>;
+               current-speed = <115200>;
+               pci,no-autoconfig;
+       };
 };
index e2882e3b634f777afb8a988c55c602d88f51c8a8..ceb64517047653f4052b87f8b6a30a16f93aa3f0 100644 (file)
@@ -536,6 +536,8 @@ int pci_auto_config_devices(struct udevice *bus)
                int ret;
 
                debug("%s: device %s\n", __func__, dev->name);
+               if (dev_read_bool(dev, "pci,no-autoconfig"))
+                       continue;
                ret = dm_pciauto_config_device(dev);
                if (ret < 0)
                        return ret;