diff options
author | Duncan Laurie <dlaurie@google.com> | 2020-05-15 15:39:08 -0700 |
---|---|---|
committer | Duncan Laurie <dlaurie@chromium.org> | 2020-06-02 18:06:37 +0000 |
commit | 47b7b3402b0864e5c782705bc24e4bf143c3c7f3 (patch) | |
tree | b12bb7e9d75ff2e3e3e2a10b5cb9be21b2a97ded /util/sconfig/sconfig.h | |
parent | 36e6c6f8d2b63428b0829ff615903715766b8c20 (diff) |
sconfig: Add support for firmware configuration
This change adds support to sconfig for generating the firmware
configuration field and option definitions in devicetree.cb.
In addition these fields and options can be used to probe for a device
and have that device be disabled if it is not found at boot time.
New tokens:
fw_config: top level token, table can be defined before chips
field: define field in the mask with the start and end bits
option: define option in a field with the value of the field
probe: indicate that a device should probe by field and option
Example:
fw_config
field FEATURE 0 0
option DISABLE 0
option ENABLE 1
end
end
chip drivers/generic/feature
device generic 0 on
probe FEATURE ENABLE
end
end
Variants can add new fields and add new options to existing fields in
overridetree.cb but cannot redefine an existing option.
Devices can have multiple probe tokens, and the device will be considered
to be found if any of them return true.
The output from defining this field are:
1) the various fields and options will be added as macro constants to
static.h and can be used by fw_config for probing.
2) the probe entries will result in a list of fields/options to probe
that is added to the resulting struct device and handled by coreboot.
BUG=b:147462631
Signed-off-by: Duncan Laurie <dlaurie@google.com>
Change-Id: I8aea63e577d933aea09e0d0b09470929cc96e0de
Reviewed-on: https://review.coreboot.org/c/coreboot/+/41440
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Diffstat (limited to 'util/sconfig/sconfig.h')
-rw-r--r-- | util/sconfig/sconfig.h | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/util/sconfig/sconfig.h b/util/sconfig/sconfig.h index a960b7f055..1bbff4644c 100644 --- a/util/sconfig/sconfig.h +++ b/util/sconfig/sconfig.h @@ -28,6 +28,27 @@ struct pci_irq_info { int ioapic_dst_id; }; +struct fw_config_option; +struct fw_config_option { + const char *name; + unsigned int value; + struct fw_config_option *next; +}; +struct fw_config_field; +struct fw_config_field { + const char *name; + unsigned int start_bit; + unsigned int end_bit; + struct fw_config_field *next; + struct fw_config_option *options; +}; +struct fw_config_probe; +struct fw_config_probe { + const char *field; + const char *option; + struct fw_config_probe *next; +}; + struct chip; struct chip_instance { /* Monotonically increasing ID for each chip instance. */ @@ -141,6 +162,9 @@ struct device { /* SMBIOS slot length */ char *smbios_slot_length; + + /* List of field+option to probe. */ + struct fw_config_probe *probe; }; extern struct bus *root_parent; @@ -171,3 +195,13 @@ void *chip_dequeue_tail(void); struct chip_instance *new_chip_instance(char *path); void add_register(struct chip_instance *chip, char *name, char *val); + +struct fw_config_field *get_fw_config_field(const char *name); + +struct fw_config_field *new_fw_config_field(const char *name, + unsigned int start_bit, unsigned int end_bit); + +void add_fw_config_option(struct fw_config_field *field, const char *name, + unsigned int value); + +void add_fw_config_probe(struct bus *bus, const char *field, const char *option); |