sconfig: Add a new generic device type

Add support for a basic generic device in the devicetree to bind to a
device that does not have a specific bus, but may need to be described
in tables for the operating system.  For instance some chips may have
various GPIO connections that need described but do not fall under any
other device.

In order to support this export the basic 'scan_static_bus()' that can
be used in a device_operations->scan_bus() method to scan for the generic
devices.

It has been possible to get a semi-generic device by using a fake PNP
device, but that isn't really appropriate for many devices.

Also Re-generate the shipped files for sconfig.  Use flex 2.6.0 to avoid
everything being rewritten.  Clean up the local paths that leak into the
generated configs.

Change-Id: If45a5b18825bdb2cf1e4ba4297ee426cbd1678e3
Signed-off-by: Duncan Laurie <dlaurie@chromium.org>
Reviewed-on: https://review.coreboot.org/14789
Tested-by: build bot (Jenkins)
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Reviewed-by: Leroy P Leahy <leroy.p.leahy@intel.com>
This commit is contained in:
Duncan Laurie
2016-05-07 20:01:34 -07:00
committed by Duncan Laurie
parent b7ce5fe311
commit 4650f5baff
10 changed files with 166 additions and 118 deletions

View File

@@ -222,6 +222,9 @@ u32 dev_path_encode(device_t dev)
case DEVICE_PATH_IOAPIC:
ret |= dev->path.ioapic.ioapic_id;
break;
case DEVICE_PATH_GENERIC:
ret |= dev->path.generic.subid << 8 | dev->path.generic.id;
break;
case DEVICE_PATH_NONE:
default:
break;
@@ -286,6 +289,11 @@ const char *dev_path(device_t dev)
snprintf(buffer, sizeof (buffer),
"CPU_BUS: %02x", dev->path.cpu_bus.id);
break;
case DEVICE_PATH_GENERIC:
snprintf(buffer, sizeof (buffer),
"GENERIC: %d.%d", dev->path.generic.id,
dev->path.generic.subid);
break;
default:
printk(BIOS_ERR, "Unknown device path type: %d\n",
dev->path.type);
@@ -353,6 +361,10 @@ int path_eq(struct device_path *path1, struct device_path *path2)
case DEVICE_PATH_CPU_BUS:
equal = (path1->cpu_bus.id == path2->cpu_bus.id);
break;
case DEVICE_PATH_GENERIC:
equal = (path1->generic.id == path2->generic.id) &&
(path1->generic.subid == path2->generic.subid);
break;
default:
printk(BIOS_ERR, "Unknown device type: %d\n", path1->type);
break;