Message ID | 20200308214442.v2.7.I66a7bcb7db931e196e8319d2dbca4e418274f39b@changeid |
---|---|
State | Superseded |
Headers | show |
Series | dm: Add programmatic generation of ACPI tables (part A) | expand |
On Mon, Mar 9, 2020 at 5:46 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 v2: None > > doc/device-tree-bindings/pci/x86-pci.txt | 24 ++++++++++++++++++++++++ > drivers/pci/pci-uclass.c | 2 ++ > 2 files changed, 26 insertions(+) > > diff --git a/doc/device-tree-bindings/pci/x86-pci.txt b/doc/device-tree-bindings/pci/x86-pci.txt > index 3aa5bd9a46..62b29a4e36 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,17 @@ 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>; > + acpi,name = "URT3"; Is this somehow being handled by the code at this point? If no, please move to the patch that actually adds this functionality. > + pci,no-autoconfig; > + }; > }; > diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c > index 94733662b1..213381da6b 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; > -- > 2.25.1.481.gfbce0eb801-goog >
diff --git a/doc/device-tree-bindings/pci/x86-pci.txt b/doc/device-tree-bindings/pci/x86-pci.txt index 3aa5bd9a46..62b29a4e36 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,17 @@ 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>; + acpi,name = "URT3"; + pci,no-autoconfig; + }; }; diff --git a/drivers/pci/pci-uclass.c b/drivers/pci/pci-uclass.c index 94733662b1..213381da6b 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;