summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/sconfig/main.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/util/sconfig/main.c b/util/sconfig/main.c
index 1af55ac310..99e76adbff 100644
--- a/util/sconfig/main.c
+++ b/util/sconfig/main.c
@@ -1085,12 +1085,9 @@ static void emit_dev_links(FILE *fil, struct device *ptr)
fprintf(fil, "\t};\n");
}
-static void pass1(FILE *fil, FILE *head, struct device *ptr, struct device *next)
+static struct chip_instance *get_chip_instance(const struct device *dev)
{
- int pin;
- struct chip_instance *chip_ins = ptr->chip_instance;
- int has_children = dev_has_children(ptr);
-
+ struct chip_instance *chip_ins = dev->chip_instance;
/*
* If the chip instance of device has base_chip_instance pointer set, then follow that
* to update the chip instance for current device.
@@ -1098,6 +1095,15 @@ static void pass1(FILE *fil, FILE *head, struct device *ptr, struct device *next
if (chip_ins->base_chip_instance)
chip_ins = chip_ins->base_chip_instance;
+ return chip_ins;
+}
+
+static void pass1(FILE *fil, FILE *head, struct device *ptr, struct device *next)
+{
+ int pin;
+ struct chip_instance *chip_ins = get_chip_instance(ptr);
+ int has_children = dev_has_children(ptr);
+
/* Emit probe structures. */
if (ptr->probe && (emit_fw_config_probe(fil, ptr) < 0)) {
if (head)
@@ -1209,12 +1215,21 @@ static void pass1(FILE *fil, FILE *head, struct device *ptr, struct device *next
static void expose_device_names(FILE *fil, FILE *head, struct device *ptr, struct device *next)
{
+ struct chip_instance *chip_ins = get_chip_instance(ptr);
+
/* Only devices on root bus here. */
if (ptr->bustype == PCI && ptr->parent->dev->bustype == DOMAIN) {
fprintf(head, "extern DEVTREE_CONST struct device *const __pci_0_%02x_%d;\n",
ptr->path_a, ptr->path_b);
fprintf(fil, "DEVTREE_CONST struct device *const __pci_0_%02x_%d = &%s;\n",
ptr->path_a, ptr->path_b, ptr->name);
+
+ if (chip_ins->chip->chiph_exists) {
+ fprintf(head, "extern DEVTREE_CONST void *const __pci_0_%02x_%d_config;\n",
+ ptr->path_a, ptr->path_b);
+ fprintf(fil, "DEVTREE_CONST void *const __pci_0_%02x_%d_config = &%s_info_%d;\n",
+ ptr->path_a, ptr->path_b, chip_ins->chip->name_underscore, chip_ins->id);
+ }
}
if (ptr->bustype == PNP) {