|
@@ -449,7 +449,7 @@ static bool type_match(SysBusDevice *sbdev, const BindingEntry *entry)
|
|
return !strcmp(object_get_typename(OBJECT(sbdev)), entry->typename);
|
|
return !strcmp(object_get_typename(OBJECT(sbdev)), entry->typename);
|
|
}
|
|
}
|
|
|
|
|
|
-#define TYPE_BINDING(type, add_fn) {(type), NULL, (add_fn), type_match}
|
|
|
|
|
|
+#define TYPE_BINDING(type, add_fn) {(type), NULL, (add_fn), NULL}
|
|
|
|
|
|
/* list of supported dynamic sysbus bindings */
|
|
/* list of supported dynamic sysbus bindings */
|
|
static const BindingEntry bindings[] = {
|
|
static const BindingEntry bindings[] = {
|
|
@@ -481,10 +481,12 @@ static void add_fdt_node(SysBusDevice *sbdev, void *opaque)
|
|
for (i = 0; i < ARRAY_SIZE(bindings); i++) {
|
|
for (i = 0; i < ARRAY_SIZE(bindings); i++) {
|
|
const BindingEntry *iter = &bindings[i];
|
|
const BindingEntry *iter = &bindings[i];
|
|
|
|
|
|
- if (iter->match_fn(sbdev, iter)) {
|
|
|
|
- ret = iter->add_fn(sbdev, opaque);
|
|
|
|
- assert(!ret);
|
|
|
|
- return;
|
|
|
|
|
|
+ if (type_match(sbdev, iter)) {
|
|
|
|
+ if (!iter->match_fn || iter->match_fn(sbdev, iter)) {
|
|
|
|
+ ret = iter->add_fn(sbdev, opaque);
|
|
|
|
+ assert(!ret);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
error_report("Device %s can not be dynamically instantiated",
|
|
error_report("Device %s can not be dynamically instantiated",
|