diff --git a/util/sconfig/sconfig.tab.c_shipped b/util/sconfig/sconfig.tab.c_shipped
index 6155dc0ea3..b07adcb25e 100644
--- a/util/sconfig/sconfig.tab.c_shipped
+++ b/util/sconfig/sconfig.tab.c_shipped
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.7.5. */
+/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison implementation for Yacc-like parsers in C
@@ -16,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see . */
+ along with this program. If not, see . */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -46,10 +46,10 @@
USER NAME SPACE" below. */
/* Identify Bison output, and Bison version. */
-#define YYBISON 30705
+#define YYBISON 30706
/* Bison version string. */
-#define YYBISON_VERSION "3.7.5"
+#define YYBISON_VERSION "3.7.6"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -157,32 +157,35 @@ enum yysymbol_kind_t
YYSYMBOL_PIPE = 44, /* PIPE */
YYSYMBOL_YYACCEPT = 45, /* $accept */
YYSYMBOL_devtree = 46, /* devtree */
- YYSYMBOL_chipchildren = 47, /* chipchildren */
- YYSYMBOL_devicechildren = 48, /* devicechildren */
- YYSYMBOL_chip = 49, /* chip */
- YYSYMBOL_50_1 = 50, /* @1 */
- YYSYMBOL_device = 51, /* device */
- YYSYMBOL_52_2 = 52, /* @2 */
- YYSYMBOL_53_3 = 53, /* @3 */
- YYSYMBOL_alias = 54, /* alias */
- YYSYMBOL_status = 55, /* status */
- YYSYMBOL_resource = 56, /* resource */
- YYSYMBOL_reference = 57, /* reference */
- YYSYMBOL_registers = 58, /* registers */
- YYSYMBOL_subsystemid = 59, /* subsystemid */
- YYSYMBOL_ioapic_irq = 60, /* ioapic_irq */
- YYSYMBOL_smbios_slot_desc = 61, /* smbios_slot_desc */
- YYSYMBOL_fw_config_table = 62, /* fw_config_table */
- YYSYMBOL_fw_config_table_children = 63, /* fw_config_table_children */
- YYSYMBOL_fw_config_field_children = 64, /* fw_config_field_children */
- YYSYMBOL_fw_config_field_bits = 65, /* fw_config_field_bits */
- YYSYMBOL_fw_config_field_bits_repeating = 66, /* fw_config_field_bits_repeating */
- YYSYMBOL_fw_config_field = 67, /* fw_config_field */
- YYSYMBOL_68_4 = 68, /* $@4 */
- YYSYMBOL_69_5 = 69, /* $@5 */
- YYSYMBOL_70_6 = 70, /* $@6 */
- YYSYMBOL_fw_config_option = 71, /* fw_config_option */
- YYSYMBOL_fw_config_probe = 72 /* fw_config_probe */
+ YYSYMBOL_chipchild_nondev = 47, /* chipchild_nondev */
+ YYSYMBOL_chipchild = 48, /* chipchild */
+ YYSYMBOL_chipchildren = 49, /* chipchildren */
+ YYSYMBOL_chipchildren_dev = 50, /* chipchildren_dev */
+ YYSYMBOL_devicechildren = 51, /* devicechildren */
+ YYSYMBOL_chip = 52, /* chip */
+ YYSYMBOL_53_1 = 53, /* @1 */
+ YYSYMBOL_device = 54, /* device */
+ YYSYMBOL_55_2 = 55, /* @2 */
+ YYSYMBOL_56_3 = 56, /* @3 */
+ YYSYMBOL_alias = 57, /* alias */
+ YYSYMBOL_status = 58, /* status */
+ YYSYMBOL_resource = 59, /* resource */
+ YYSYMBOL_reference = 60, /* reference */
+ YYSYMBOL_registers = 61, /* registers */
+ YYSYMBOL_subsystemid = 62, /* subsystemid */
+ YYSYMBOL_ioapic_irq = 63, /* ioapic_irq */
+ YYSYMBOL_smbios_slot_desc = 64, /* smbios_slot_desc */
+ YYSYMBOL_fw_config_table = 65, /* fw_config_table */
+ YYSYMBOL_fw_config_table_children = 66, /* fw_config_table_children */
+ YYSYMBOL_fw_config_field_children = 67, /* fw_config_field_children */
+ YYSYMBOL_fw_config_field_bits = 68, /* fw_config_field_bits */
+ YYSYMBOL_fw_config_field_bits_repeating = 69, /* fw_config_field_bits_repeating */
+ YYSYMBOL_fw_config_field = 70, /* fw_config_field */
+ YYSYMBOL_71_4 = 71, /* $@4 */
+ YYSYMBOL_72_5 = 72, /* $@5 */
+ YYSYMBOL_73_6 = 73, /* $@6 */
+ YYSYMBOL_fw_config_option = 74, /* fw_config_option */
+ YYSYMBOL_fw_config_probe = 75 /* fw_config_probe */
};
typedef enum yysymbol_kind_t yysymbol_kind_t;
@@ -504,16 +507,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 2
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 97
+#define YYLAST 90
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 45
/* YYNNTS -- Number of nonterminals. */
-#define YYNNTS 28
+#define YYNNTS 31
/* YYNRULES -- Number of rules. */
-#define YYNRULES 53
+#define YYNRULES 57
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 95
+#define YYNSTATES 101
/* YYMAXUTOK -- Last valid token kind. */
#define YYMAXUTOK 299
@@ -566,12 +569,12 @@ static const yytype_int8 yytranslate[] =
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint8 yyrline[] =
{
- 0, 26, 26, 26, 26, 28, 28, 28, 28, 28,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 32,
- 32, 41, 41, 49, 49, 57, 59, 63, 63, 65,
- 68, 71, 74, 77, 80, 83, 86, 89, 93, 96,
- 96, 99, 99, 102, 108, 108, 111, 110, 115, 115,
- 123, 123, 129, 133
+ 0, 26, 26, 26, 26, 29, 29, 29, 30, 30,
+ 31, 31, 32, 32, 34, 34, 34, 34, 34, 34,
+ 34, 34, 34, 36, 36, 45, 45, 53, 53, 61,
+ 63, 67, 67, 69, 72, 75, 78, 81, 84, 87,
+ 90, 93, 97, 100, 100, 103, 103, 106, 112, 112,
+ 115, 114, 119, 119, 127, 127, 133, 137
};
#endif
@@ -594,9 +597,10 @@ static const char *const yytname[] =
"SLOT_DESC", "IO", "NUMBER", "SUBSYSTEMID", "INHERIT", "IOAPIC_IRQ",
"IOAPIC", "PCIINT", "GENERIC", "SPI", "USB", "MMIO", "GPIO",
"FW_CONFIG_TABLE", "FW_CONFIG_FIELD", "FW_CONFIG_OPTION",
- "FW_CONFIG_PROBE", "PIPE", "$accept", "devtree", "chipchildren",
- "devicechildren", "chip", "@1", "device", "@2", "@3", "alias", "status",
- "resource", "reference", "registers", "subsystemid", "ioapic_irq",
+ "FW_CONFIG_PROBE", "PIPE", "$accept", "devtree", "chipchild_nondev",
+ "chipchild", "chipchildren", "chipchildren_dev", "devicechildren",
+ "chip", "@1", "device", "@2", "@3", "alias", "status", "resource",
+ "reference", "registers", "subsystemid", "ioapic_irq",
"smbios_slot_desc", "fw_config_table", "fw_config_table_children",
"fw_config_field_children", "fw_config_field_bits",
"fw_config_field_bits_repeating", "fw_config_field", "$@4", "$@5", "$@6",
@@ -623,7 +627,7 @@ static const yytype_int16 yytoknum[] =
};
#endif
-#define YYPACT_NINF (-27)
+#define YYPACT_NINF (-61)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -637,16 +641,17 @@ static const yytype_int16 yytoknum[] =
STATE-NUM. */
static const yytype_int8 yypact[] =
{
- -27, 9, -27, 2, -27, -27, -27, -27, -11, -27,
- -27, 4, -27, 43, -13, 10, 20, 21, -27, -27,
- -27, -27, -27, 13, -26, -27, 22, 14, 30, 44,
- -27, -27, 24, -27, -7, 16, 45, 37, 38, -6,
- 13, -26, -27, -27, 39, -27, -27, -27, -27, 41,
- 16, -27, -27, -27, -27, -1, 31, -27, -27, -27,
- -27, -27, -3, -27, 32, -27, 42, 33, 34, 47,
- -27, -27, -27, -27, -27, -27, -27, -27, 1, 50,
- 49, 40, 36, 51, -27, 46, 54, 48, 52, -27,
- -27, 55, -27, -27, -27
+ -61, 12, -61, -7, -61, -61, -61, -61, -12, 46,
+ -61, 8, -61, 14, 11, 18, 46, 23, -61, -61,
+ -61, -61, 16, 24, 17, 25, 34, -61, -61, 46,
+ 26, 10, -61, 13, 51, 41, 42, -61, -61, -61,
+ -61, -61, 31, -61, -3, -61, -61, -61, 44, 13,
+ -61, -61, 2, 26, 10, -61, -61, 45, -61, -61,
+ -61, -61, -61, -61, 6, 35, 0, -61, -61, -61,
+ 37, -61, 50, 39, 40, 53, -61, -61, -61, -61,
+ -61, -61, -61, -61, 4, 48, 54, 43, 47, 56,
+ -61, 49, 57, 55, 58, -61, -61, 59, -61, -61,
+ -61
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -654,32 +659,35 @@ static const yytype_int8 yypact[] =
means the default is an error. */
static const yytype_int8 yydefact[] =
{
- 2, 0, 1, 0, 40, 3, 4, 19, 0, 9,
- 38, 0, 39, 0, 50, 0, 0, 0, 20, 6,
- 5, 8, 7, 48, 45, 42, 0, 0, 0, 0,
- 43, 42, 0, 46, 0, 0, 25, 0, 0, 0,
- 0, 45, 42, 51, 0, 41, 27, 28, 23, 0,
- 0, 31, 30, 49, 44, 0, 0, 18, 26, 21,
- 47, 52, 0, 18, 0, 24, 0, 0, 0, 0,
- 11, 10, 12, 16, 13, 14, 15, 17, 0, 0,
- 0, 0, 0, 0, 22, 0, 37, 32, 0, 53,
- 29, 36, 33, 34, 35
+ 2, 0, 1, 0, 44, 3, 4, 23, 0, 0,
+ 42, 0, 43, 0, 0, 0, 0, 0, 5, 11,
+ 7, 6, 54, 0, 0, 0, 0, 13, 24, 12,
+ 52, 49, 46, 0, 29, 0, 0, 9, 10, 8,
+ 47, 46, 0, 50, 0, 31, 32, 27, 0, 0,
+ 35, 34, 0, 0, 49, 46, 55, 0, 45, 22,
+ 30, 25, 53, 48, 0, 0, 0, 22, 51, 56,
+ 0, 28, 0, 0, 0, 0, 15, 14, 16, 20,
+ 17, 18, 19, 21, 0, 0, 0, 0, 0, 0,
+ 26, 0, 41, 36, 0, 57, 33, 40, 37, 38,
+ 39
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int8 yypgoto[] =
{
- -27, -27, -27, 11, 19, -27, 60, -27, -27, -27,
- 17, -27, -27, 63, -27, -27, -27, -27, -27, -8,
- 53, 56, -27, -27, -27, -27, -27, -27
+ -61, -61, 60, -61, -61, 61, 15, -1, -61, -28,
+ -61, -61, -61, 30, -61, -61, -60, -61, -61, -61,
+ -61, -61, -22, 33, 36, -61, -61, -61, -61, -61,
+ -61
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int8 yydefgoto[] =
{
- 0, 1, 13, 62, 70, 9, 71, 63, 57, 50,
- 48, 72, 21, 73, 74, 75, 76, 6, 8, 34,
- 24, 33, 12, 42, 31, 25, 45, 77
+ 0, 1, 16, 38, 29, 17, 66, 18, 9, 19,
+ 67, 59, 49, 47, 78, 20, 21, 80, 81, 82,
+ 6, 8, 44, 31, 43, 12, 55, 41, 32, 58,
+ 83
};
/* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
@@ -687,68 +695,69 @@ static const yytype_int8 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int8 yytable[] =
{
- 3, 15, 16, 10, 3, 15, 16, 43, 53, 2,
- 64, 65, 3, 60, 64, 84, 23, 26, 32, 7,
- 5, 14, 27, 39, 66, 46, 47, 67, 66, 68,
- 11, 67, 19, 68, 55, 44, 44, 28, 29, 35,
- 69, 44, 30, 36, 69, 37, 3, 15, 16, 4,
- 17, 49, 38, 40, 51, 52, 56, 18, 58, 80,
- 61, 79, 81, 82, 83, 85, 86, 59, 89, 87,
- 88, 91, 94, 20, 78, 90, 22, 0, 0, 92,
- 0, 93, 0, 0, 0, 41, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 54
+ 5, 39, 10, 3, 13, 14, 79, 3, 13, 14,
+ 7, 56, 2, 70, 71, 3, 62, 70, 90, 52,
+ 68, 23, 45, 46, 79, 22, 24, 72, 25, 11,
+ 73, 72, 74, 64, 73, 26, 74, 28, 77, 57,
+ 35, 33, 36, 75, 57, 30, 34, 75, 57, 3,
+ 13, 14, 4, 15, 42, 40, 77, 48, 50, 51,
+ 53, 60, 65, 91, 69, 76, 85, 86, 87, 88,
+ 89, 92, 93, 95, 97, 54, 100, 27, 96, 61,
+ 0, 94, 84, 76, 0, 0, 98, 99, 0, 37,
+ 63
};
static const yytype_int8 yycheck[] =
{
- 3, 4, 5, 14, 3, 4, 5, 14, 14, 0,
- 13, 14, 3, 14, 13, 14, 29, 7, 44, 17,
- 1, 17, 12, 31, 27, 9, 10, 30, 27, 32,
- 41, 30, 13, 32, 42, 42, 42, 17, 17, 17,
- 43, 42, 29, 29, 43, 15, 3, 4, 5, 40,
- 7, 6, 8, 29, 17, 17, 17, 14, 17, 17,
- 29, 29, 29, 29, 17, 15, 17, 50, 17, 29,
- 34, 17, 17, 13, 63, 29, 13, -1, -1, 31,
- -1, 29, -1, -1, -1, 32, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 41
+ 1, 29, 14, 3, 4, 5, 66, 3, 4, 5,
+ 17, 14, 0, 13, 14, 3, 14, 13, 14, 41,
+ 14, 7, 9, 10, 84, 17, 12, 27, 17, 41,
+ 30, 27, 32, 55, 30, 17, 32, 14, 66, 42,
+ 15, 17, 8, 43, 42, 29, 29, 43, 42, 3,
+ 4, 5, 40, 7, 44, 29, 84, 6, 17, 17,
+ 29, 17, 17, 15, 29, 66, 29, 17, 29, 29,
+ 17, 17, 29, 17, 17, 42, 17, 16, 29, 49,
+ -1, 34, 67, 84, -1, -1, 31, 29, -1, 29,
+ 54
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_int8 yystos[] =
{
- 0, 46, 0, 3, 40, 49, 62, 17, 63, 50,
- 14, 41, 67, 47, 17, 4, 5, 7, 14, 49,
- 51, 57, 58, 29, 65, 70, 7, 12, 17, 17,
- 29, 69, 44, 66, 64, 17, 29, 15, 8, 64,
- 29, 65, 68, 14, 42, 71, 9, 10, 55, 6,
- 54, 17, 17, 14, 66, 64, 17, 53, 17, 55,
- 14, 29, 48, 52, 13, 14, 27, 30, 32, 43,
- 49, 51, 56, 58, 59, 60, 61, 72, 48, 29,
- 17, 29, 29, 17, 14, 15, 17, 29, 34, 17,
- 29, 17, 31, 29, 17
+ 0, 46, 0, 3, 40, 52, 65, 17, 66, 53,
+ 14, 41, 70, 4, 5, 7, 47, 50, 52, 54,
+ 60, 61, 17, 7, 12, 17, 17, 50, 14, 49,
+ 29, 68, 73, 17, 29, 15, 8, 47, 48, 54,
+ 29, 72, 44, 69, 67, 9, 10, 58, 6, 57,
+ 17, 17, 67, 29, 68, 71, 14, 42, 74, 56,
+ 17, 58, 14, 69, 67, 17, 51, 55, 14, 29,
+ 13, 14, 27, 30, 32, 43, 52, 54, 59, 61,
+ 62, 63, 64, 75, 51, 29, 17, 29, 29, 17,
+ 14, 15, 17, 29, 34, 17, 29, 17, 31, 29,
+ 17
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_int8 yyr1[] =
{
- 0, 45, 46, 46, 46, 47, 47, 47, 47, 47,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 50,
- 49, 52, 51, 53, 51, 54, 54, 55, 55, 56,
- 57, 58, 59, 59, 60, 61, 61, 61, 62, 63,
- 63, 64, 64, 65, 66, 66, 68, 67, 69, 67,
- 70, 67, 71, 72
+ 0, 45, 46, 46, 46, 47, 47, 47, 48, 48,
+ 49, 49, 50, 50, 51, 51, 51, 51, 51, 51,
+ 51, 51, 51, 53, 52, 55, 54, 56, 54, 57,
+ 57, 58, 58, 59, 60, 61, 62, 62, 63, 64,
+ 64, 64, 65, 66, 66, 67, 67, 68, 69, 69,
+ 71, 70, 72, 70, 73, 70, 74, 75
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
static const yytype_int8 yyr2[] =
{
- 0, 2, 0, 2, 2, 2, 2, 2, 2, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 0, 0,
- 5, 0, 8, 0, 7, 0, 2, 1, 1, 4,
- 4, 4, 3, 4, 4, 5, 4, 3, 3, 2,
- 0, 2, 0, 2, 3, 0, 0, 7, 0, 6,
- 0, 5, 3, 3
+ 0, 2, 0, 2, 2, 1, 1, 1, 1, 1,
+ 2, 0, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 0, 0, 5, 0, 8, 0, 7, 0,
+ 2, 1, 1, 4, 4, 4, 3, 4, 4, 5,
+ 4, 3, 3, 2, 0, 2, 0, 2, 3, 0,
+ 0, 7, 0, 6, 0, 5, 3, 3
};
@@ -1219,7 +1228,7 @@ yyreduce:
{ cur_parent = root_parent; }
break;
- case 19: /* @1: %empty */
+ case 23: /* @1: %empty */
{
(yyval.chip_instance) = new_chip_instance((yyvsp[0].string));
chip_enqueue_tail(cur_chip_instance);
@@ -1227,105 +1236,105 @@ yyreduce:
}
break;
- case 20: /* chip: CHIP STRING @1 chipchildren END */
- {
+ case 24: /* chip: CHIP STRING @1 chipchildren_dev END */
+ {
cur_chip_instance = chip_dequeue_tail();
}
break;
- case 21: /* @2: %empty */
+ case 25: /* @2: %empty */
{
(yyval.dev) = new_device_raw(cur_parent, cur_chip_instance, (yyvsp[-3].number), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].number));
cur_parent = (yyval.dev)->last_bus;
}
break;
- case 22: /* device: DEVICE BUS NUMBER alias status @2 devicechildren END */
+ case 26: /* device: DEVICE BUS NUMBER alias status @2 devicechildren END */
{
cur_parent = (yyvsp[-2].dev)->parent;
}
break;
- case 23: /* @3: %empty */
+ case 27: /* @3: %empty */
{
(yyval.dev) = new_device_reference(cur_parent, cur_chip_instance, (yyvsp[-1].string), (yyvsp[0].number));
cur_parent = (yyval.dev)->last_bus;
}
break;
- case 24: /* device: DEVICE REFERENCE STRING status @3 devicechildren END */
+ case 28: /* device: DEVICE REFERENCE STRING status @3 devicechildren END */
{
cur_parent = (yyvsp[-2].dev)->parent;
}
break;
- case 25: /* alias: %empty */
+ case 29: /* alias: %empty */
{
(yyval.string) = NULL;
}
break;
- case 26: /* alias: ALIAS STRING */
+ case 30: /* alias: ALIAS STRING */
{
(yyval.string) = (yyvsp[0].string);
}
break;
- case 29: /* resource: RESOURCE NUMBER EQUALS NUMBER */
+ case 33: /* resource: RESOURCE NUMBER EQUALS NUMBER */
{ add_resource(cur_parent, (yyvsp[-3].number), strtol((yyvsp[-2].string), NULL, 0), strtol((yyvsp[0].string), NULL, 0)); }
break;
- case 30: /* reference: REFERENCE STRING ASSOCIATION STRING */
+ case 34: /* reference: REFERENCE STRING ASSOCIATION STRING */
{ add_reference(cur_chip_instance, (yyvsp[0].string), (yyvsp[-2].string)); }
break;
- case 31: /* registers: REGISTER STRING EQUALS STRING */
+ case 35: /* registers: REGISTER STRING EQUALS STRING */
{ add_register(cur_chip_instance, (yyvsp[-2].string), (yyvsp[0].string)); }
break;
- case 32: /* subsystemid: SUBSYSTEMID NUMBER NUMBER */
+ case 36: /* subsystemid: SUBSYSTEMID NUMBER NUMBER */
{ add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-1].string), NULL, 16), strtol((yyvsp[0].string), NULL, 16), 0); }
break;
- case 33: /* subsystemid: SUBSYSTEMID NUMBER NUMBER INHERIT */
+ case 37: /* subsystemid: SUBSYSTEMID NUMBER NUMBER INHERIT */
{ add_pci_subsystem_ids(cur_parent, strtol((yyvsp[-2].string), NULL, 16), strtol((yyvsp[-1].string), NULL, 16), 1); }
break;
- case 34: /* ioapic_irq: IOAPIC_IRQ NUMBER PCIINT NUMBER */
+ case 38: /* ioapic_irq: IOAPIC_IRQ NUMBER PCIINT NUMBER */
{ add_ioapic_info(cur_parent, strtol((yyvsp[-2].string), NULL, 16), (yyvsp[-1].string), strtol((yyvsp[0].string), NULL, 16)); }
break;
- case 35: /* smbios_slot_desc: SLOT_DESC STRING STRING STRING STRING */
+ case 39: /* smbios_slot_desc: SLOT_DESC STRING STRING STRING STRING */
{ add_slot_desc(cur_parent, (yyvsp[-3].string), (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string)); }
break;
- case 36: /* smbios_slot_desc: SLOT_DESC STRING STRING STRING */
+ case 40: /* smbios_slot_desc: SLOT_DESC STRING STRING STRING */
{ add_slot_desc(cur_parent, (yyvsp[-2].string), (yyvsp[-1].string), (yyvsp[0].string), NULL); }
break;
- case 37: /* smbios_slot_desc: SLOT_DESC STRING STRING */
+ case 41: /* smbios_slot_desc: SLOT_DESC STRING STRING */
{ add_slot_desc(cur_parent, (yyvsp[-1].string), (yyvsp[0].string), NULL, NULL); }
break;
- case 38: /* fw_config_table: FW_CONFIG_TABLE fw_config_table_children END */
+ case 42: /* fw_config_table: FW_CONFIG_TABLE fw_config_table_children END */
{ }
break;
- case 43: /* fw_config_field_bits: NUMBER NUMBER */
+ case 47: /* fw_config_field_bits: NUMBER NUMBER */
{
append_fw_config_bits(&cur_bits, strtoul((yyvsp[-1].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
}
break;
- case 46: /* $@4: %empty */
+ case 50: /* $@4: %empty */
{ cur_field = new_fw_config_field((yyvsp[-2].string), cur_bits); }
break;
- case 47: /* fw_config_field: FW_CONFIG_FIELD STRING fw_config_field_bits fw_config_field_bits_repeating $@4 fw_config_field_children END */
+ case 51: /* fw_config_field: FW_CONFIG_FIELD STRING fw_config_field_bits fw_config_field_bits_repeating $@4 fw_config_field_children END */
{ cur_bits = NULL; }
break;
- case 48: /* $@5: %empty */
+ case 52: /* $@5: %empty */
{
cur_bits = NULL;
append_fw_config_bits(&cur_bits, strtoul((yyvsp[0].string), NULL, 0), strtoul((yyvsp[0].string), NULL, 0));
@@ -1333,25 +1342,25 @@ yyreduce:
}
break;
- case 49: /* fw_config_field: FW_CONFIG_FIELD STRING NUMBER $@5 fw_config_field_children END */
+ case 53: /* fw_config_field: FW_CONFIG_FIELD STRING NUMBER $@5 fw_config_field_children END */
{ cur_bits = NULL; }
break;
- case 50: /* $@6: %empty */
+ case 54: /* $@6: %empty */
{
cur_field = get_fw_config_field((yyvsp[0].string));
}
break;
- case 51: /* fw_config_field: FW_CONFIG_FIELD STRING $@6 fw_config_field_children END */
+ case 55: /* fw_config_field: FW_CONFIG_FIELD STRING $@6 fw_config_field_children END */
{ cur_bits = NULL; }
break;
- case 52: /* fw_config_option: FW_CONFIG_OPTION STRING NUMBER */
+ case 56: /* fw_config_option: FW_CONFIG_OPTION STRING NUMBER */
{ add_fw_config_option(cur_field, (yyvsp[-1].string), strtoull((yyvsp[0].string), NULL, 0)); }
break;
- case 53: /* fw_config_probe: FW_CONFIG_PROBE STRING STRING */
+ case 57: /* fw_config_probe: FW_CONFIG_PROBE STRING STRING */
{ add_fw_config_probe(cur_parent, (yyvsp[-1].string), (yyvsp[0].string)); }
break;
diff --git a/util/sconfig/sconfig.tab.h_shipped b/util/sconfig/sconfig.tab.h_shipped
index 2179499f90..1d96a35ab6 100644
--- a/util/sconfig/sconfig.tab.h_shipped
+++ b/util/sconfig/sconfig.tab.h_shipped
@@ -1,4 +1,4 @@
-/* A Bison parser, made by GNU Bison 3.7.5. */
+/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison interface for Yacc-like parsers in C
@@ -16,7 +16,7 @@
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
- along with this program. If not, see . */
+ along with this program. If not, see . */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
@@ -35,8 +35,8 @@
especially those whose name start with YY_ or yy_. They are
private implementation details that can be changed or removed. */
-#ifndef YY_YY_WORK_GIT_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
-# define YY_YY_WORK_GIT_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
+#ifndef YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
+# define YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED
/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 0
@@ -122,4 +122,4 @@ extern YYSTYPE yylval;
int yyparse (void);
-#endif /* !YY_YY_WORK_GIT_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED */
+#endif /* !YY_YY_HOME_ICON_COREBOOT_UTIL_SCONFIG_SCONFIG_TAB_H_SHIPPED_INCLUDED */
diff --git a/util/sconfig/sconfig.y b/util/sconfig/sconfig.y
index 40c1295595..da6d97b1a6 100755
--- a/util/sconfig/sconfig.y
+++ b/util/sconfig/sconfig.y
@@ -25,7 +25,11 @@ static struct fw_config_field_bits *cur_bits;
%%
devtree: { cur_parent = root_parent; } | devtree chip | devtree fw_config_table;
-chipchildren: chipchildren device | chipchildren chip | chipchildren registers | chipchildren reference | /* empty */ ;
+/* Ensure at least one `device` below each `chip`. */
+chipchild_nondev: chip | registers | reference;
+chipchild: device | chipchild_nondev;
+chipchildren: chipchildren chipchild | /* empty */ ;
+chipchildren_dev: device chipchildren | chipchild_nondev chipchildren_dev;
devicechildren: devicechildren device | devicechildren chip | devicechildren resource | devicechildren subsystemid | devicechildren ioapic_irq | devicechildren smbios_slot_desc | devicechildren registers | devicechildren fw_config_probe | /* empty */ ;
@@ -34,7 +38,7 @@ chip: CHIP STRING /* == path */ {
chip_enqueue_tail(cur_chip_instance);
cur_chip_instance = $$;
}
- chipchildren END {
+ chipchildren_dev END {
cur_chip_instance = chip_dequeue_tail();
};