@@ -470,6 +470,7 @@ func addInterrupt(interrupts map[string]*interrupt, name, interruptName string,
470470
471471func 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