Skip to content

Commit 1841753

Browse files
ardnewdeadprogram
authored andcommitted
gen-device-svd: ensure enum bitfields are unique
1 parent d8dbe57 commit 1841753

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

tools/gen-device-svd/gen-device-svd.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,6 +470,7 @@ func addInterrupt(interrupts map[string]*interrupt, name, interruptName string,
470470

471471
func parseBitfields(groupName, regName string, fieldEls []*SVDField, bitfieldPrefix string) []Bitfield {
472472
var fields []Bitfield
473+
enumSeen := map[string]bool{}
473474
for _, fieldEl := range fieldEls {
474475
// Some bitfields (like the STM32H7x7) contain invalid bitfield
475476
// names like "CNT[31]". Replace invalid characters with "_" when
@@ -548,13 +549,23 @@ func parseBitfields(groupName, regName string, fieldEls []*SVDField, bitfieldPre
548549
panic(err)
549550
}
550551
}
552+
enumName = fmt.Sprintf("%s_%s%s_%s_%s", groupName, bitfieldPrefix, regName, fieldName, enumName)
553+
_, seen := enumSeen[enumName]
554+
enumSeen[enumName] = seen
551555
fields = append(fields, Bitfield{
552-
name: fmt.Sprintf("%s_%s%s_%s_%s", groupName, bitfieldPrefix, regName, fieldName, enumName),
556+
name: enumName,
553557
description: enumDescription,
554558
value: uint32(enumValue),
555559
})
556560
}
557561
}
562+
// check if any of the field names appeared more than once. if so, append
563+
// its value onto its name to ensure each name is unique.
564+
for i, field := range fields {
565+
if dup, seen := enumSeen[field.name]; dup && seen {
566+
fields[i].name = fmt.Sprintf("%s_%d", field.name, field.value)
567+
}
568+
}
558569
return fields
559570
}
560571

0 commit comments

Comments
 (0)