diff mbox series

[v5,07/29] dm: pci: Allow disabling auto-config for a device

Message ID 20200408165737.v5.7.I66a7bcb7db931e196e8319d2dbca4e418274f39b@changeid
State Superseded
Headers show
Series dm: Add programmatic generation of ACPI tables (part A) | expand

Commit Message

Simon Glass April 8, 2020, 10:57 p.m. UTC
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 at chromium.org>
Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
---

Changes in v5: None
Changes in v4: None
Changes in v3:
Drop acpi,name in example

Changes in v2: None

 doc/device-tree-bindings/pci/x86-pci.txt | 23 +++++++++++++++++++++++
 drivers/pci/pci-uclass.c                 |  2 ++
 2 files changed, 25 insertions(+)

Comments

Bin Meng April 16, 2020, 5:33 a.m. UTC | #1
On Thu, Apr 9, 2020 at 6:58 AM Simon Glass <sjg at chromium.org> wrote:
>
> 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 at chromium.org>
> Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
> ---
>
> Changes in v5: None
> Changes in v4: None
> Changes in v3:
> Drop acpi,name in example
>
> Changes in v2: None
>
>  doc/device-tree-bindings/pci/x86-pci.txt | 23 +++++++++++++++++++++++
>  drivers/pci/pci-uclass.c                 |  2 ++
>  2 files changed, 25 insertions(+)
>

applied to u-boot-x86, thanks!
diff mbox series

Patch

diff --git a/doc/device-tree-bindings/pci/x86-pci.txt b/doc/device-tree-bindings/pci/x86-pci.txt
index 3aa5bd9a46c..95e370b3e72 100644
--- a/doc/device-tree-bindings/pci/x86-pci.txt
+++ b/doc/device-tree-bindings/pci/x86-pci.txt
@@ -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 at 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;
+	};
 };
diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c
index 94733662b12..213381da6bd 100644
--- a/drivers/pci/pci-uclass.c
+++ b/drivers/pci/pci-uclass.c
@@ -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;