@@ -4,7 +4,7 @@ use std::collections::HashMap;
44
55use crate :: svd:: {
66 array:: names, Cluster , ClusterInfo , DeriveFrom , DimElement , Peripheral , Register ,
7- RegisterCluster , RegisterProperties ,
7+ RegisterCluster ,
88} ;
99use log:: { debug, trace, warn} ;
1010use proc_macro2:: { Ident , Punct , Spacing , Span , TokenStream } ;
@@ -22,7 +22,6 @@ use crate::generate::register;
2222pub fn render (
2323 p_original : & Peripheral ,
2424 all_peripherals : & [ Peripheral ] ,
25- defaults : & RegisterProperties ,
2625 config : & Config ,
2726) -> Result < TokenStream > {
2827 let mut out = TokenStream :: new ( ) ;
@@ -213,28 +212,26 @@ pub fn render(
213212 return Ok ( TokenStream :: new ( ) ) ;
214213 }
215214
216- let defaults = p. default_register_properties . derive_from ( defaults) ;
217-
218215 // Push any register or cluster blocks into the output
219216 debug ! (
220217 "Pushing {} register or cluster blocks into output" ,
221218 ercs. len( )
222219 ) ;
223220 let mut mod_items = TokenStream :: new ( ) ;
224- mod_items. extend ( register_or_cluster_block ( & ercs, & defaults , None , config) ?) ;
221+ mod_items. extend ( register_or_cluster_block ( & ercs, None , config) ?) ;
225222
226223 debug ! ( "Pushing cluster information into output" ) ;
227224 // Push all cluster related information into the peripheral module
228225 for c in & clusters {
229226 trace ! ( "Cluster: {}" , c. name) ;
230- mod_items. extend ( cluster_block ( c, & defaults , p, all_peripherals, config) ?) ;
227+ mod_items. extend ( cluster_block ( c, p, all_peripherals, config) ?) ;
231228 }
232229
233230 debug ! ( "Pushing register information into output" ) ;
234231 // Push all register related information into the peripheral module
235232 for reg in registers {
236233 trace ! ( "Register: {}" , reg. name) ;
237- match register:: render ( reg, registers, p, all_peripherals, & defaults , config) {
234+ match register:: render ( reg, registers, p, all_peripherals, config) {
238235 Ok ( rendered_reg) => mod_items. extend ( rendered_reg) ,
239236 Err ( e) => {
240237 let res: Result < TokenStream > = Err ( e) ;
@@ -504,15 +501,14 @@ fn make_comment(size: u32, offset: u32, description: &str) -> String {
504501
505502fn register_or_cluster_block (
506503 ercs : & [ RegisterCluster ] ,
507- defs : & RegisterProperties ,
508504 name : Option < & str > ,
509505 config : & Config ,
510506) -> Result < TokenStream > {
511507 let mut rbfs = TokenStream :: new ( ) ;
512508 let mut accessors = TokenStream :: new ( ) ;
513509
514- let ercs_expanded = expand ( ercs , defs , name , config )
515- . with_context ( || "Could not expand register or cluster block" ) ?;
510+ let ercs_expanded =
511+ expand ( ercs , name , config ) . with_context ( || "Could not expand register or cluster block" ) ?;
516512
517513 // Locate conflicting regions; we'll need to use unions to represent them.
518514 let mut regions = FieldRegions :: default ( ) ;
@@ -640,7 +636,6 @@ fn register_or_cluster_block(
640636/// `RegisterBlockField`s containing `Field`s.
641637fn expand (
642638 ercs : & [ RegisterCluster ] ,
643- defs : & RegisterProperties ,
644639 name : Option < & str > ,
645640 config : & Config ,
646641) -> Result < Vec < RegisterBlockField > > {
@@ -649,34 +644,26 @@ fn expand(
649644 debug ! ( "Expanding registers or clusters into Register Block Fields" ) ;
650645 for erc in ercs {
651646 match & erc {
652- RegisterCluster :: Register ( register) => {
653- match expand_register ( register, defs, name, config) {
654- Ok ( expanded_reg) => {
655- trace ! ( "Register: {}" , register. name) ;
656- ercs_expanded. extend ( expanded_reg) ;
657- }
658- Err ( e) => {
659- let res = Err ( e) ;
660- return handle_reg_error ( "Error expanding register" , register, res) ;
661- }
647+ RegisterCluster :: Register ( register) => match expand_register ( register, name, config) {
648+ Ok ( expanded_reg) => {
649+ trace ! ( "Register: {}" , register. name) ;
650+ ercs_expanded. extend ( expanded_reg) ;
662651 }
663- }
664- RegisterCluster :: Cluster ( cluster) => {
665- match expand_cluster ( cluster, defs, name, config) {
666- Ok ( expanded_cluster) => {
667- trace ! ( "Cluster: {}" , cluster. name) ;
668- ercs_expanded. extend ( expanded_cluster) ;
669- }
670- Err ( e) => {
671- let res = Err ( e) ;
672- return handle_cluster_error (
673- "Error expanding register cluster" ,
674- cluster,
675- res,
676- ) ;
677- }
652+ Err ( e) => {
653+ let res = Err ( e) ;
654+ return handle_reg_error ( "Error expanding register" , register, res) ;
678655 }
679- }
656+ } ,
657+ RegisterCluster :: Cluster ( cluster) => match expand_cluster ( cluster, name, config) {
658+ Ok ( expanded_cluster) => {
659+ trace ! ( "Cluster: {}" , cluster. name) ;
660+ ercs_expanded. extend ( expanded_cluster) ;
661+ }
662+ Err ( e) => {
663+ let res = Err ( e) ;
664+ return handle_cluster_error ( "Error expanding register cluster" , cluster, res) ;
665+ }
666+ } ,
680667 } ;
681668 }
682669
@@ -688,13 +675,9 @@ fn expand(
688675/// Calculate the size of a Cluster. If it is an array, then the dimensions
689676/// tell us the size of the array. Otherwise, inspect the contents using
690677/// [cluster_info_size_in_bits].
691- fn cluster_size_in_bits (
692- cluster : & Cluster ,
693- defs : & RegisterProperties ,
694- config : & Config ,
695- ) -> Result < u32 > {
678+ fn cluster_size_in_bits ( cluster : & Cluster , config : & Config ) -> Result < u32 > {
696679 match cluster {
697- Cluster :: Single ( info) => cluster_info_size_in_bits ( info, defs , config) ,
680+ Cluster :: Single ( info) => cluster_info_size_in_bits ( info, config) ,
698681 // If the contained array cluster has a mismatch between the
699682 // dimIncrement and the size of the array items, then the array
700683 // will get expanded in expand_cluster below. The overall size
@@ -704,33 +687,29 @@ fn cluster_size_in_bits(
704687 return Ok ( 0 ) ; // Special case!
705688 }
706689 let last_offset = ( dim. dim - 1 ) * dim. dim_increment * BITS_PER_BYTE ;
707- let last_size = cluster_info_size_in_bits ( info, defs , config) ;
690+ let last_size = cluster_info_size_in_bits ( info, config) ;
708691 Ok ( last_offset + last_size?)
709692 }
710693 }
711694}
712695
713696/// Recursively calculate the size of a ClusterInfo. A cluster's size is the
714697/// maximum end position of its recursive children.
715- fn cluster_info_size_in_bits (
716- info : & ClusterInfo ,
717- defs : & RegisterProperties ,
718- config : & Config ,
719- ) -> Result < u32 > {
698+ fn cluster_info_size_in_bits ( info : & ClusterInfo , config : & Config ) -> Result < u32 > {
720699 let mut size = 0 ;
721700
722701 for c in & info. children {
723702 let end = match c {
724703 RegisterCluster :: Register ( reg) => {
725- let reg_size: u32 = expand_register ( reg, defs , None , config) ?
704+ let reg_size: u32 = expand_register ( reg, None , config) ?
726705 . iter ( )
727706 . map ( |rbf| rbf. size )
728707 . sum ( ) ;
729708
730709 ( reg. address_offset * BITS_PER_BYTE ) + reg_size
731710 }
732711 RegisterCluster :: Cluster ( clust) => {
733- ( clust. address_offset * BITS_PER_BYTE ) + cluster_size_in_bits ( clust, defs , config) ?
712+ ( clust. address_offset * BITS_PER_BYTE ) + cluster_size_in_bits ( clust, config) ?
734713 }
735714 } ;
736715
@@ -742,15 +721,12 @@ fn cluster_info_size_in_bits(
742721/// Render a given cluster (and any children) into `RegisterBlockField`s
743722fn expand_cluster (
744723 cluster : & Cluster ,
745- defs : & RegisterProperties ,
746724 name : Option < & str > ,
747725 config : & Config ,
748726) -> Result < Vec < RegisterBlockField > > {
749727 let mut cluster_expanded = vec ! [ ] ;
750728
751- let defs = cluster. default_register_properties . derive_from ( defs) ;
752-
753- let cluster_size = cluster_info_size_in_bits ( cluster, & defs, config)
729+ let cluster_size = cluster_info_size_in_bits ( cluster, config)
754730 . with_context ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
755731
756732 match cluster {
@@ -851,7 +827,6 @@ fn expand_cluster(
851827/// numeral indexes, or not containing all elements from 0 to size) they will be expanded
852828fn expand_register (
853829 register : & Register ,
854- defs : & RegisterProperties ,
855830 name : Option < & str > ,
856831 config : & Config ,
857832) -> Result < Vec < RegisterBlockField > > {
@@ -860,7 +835,6 @@ fn expand_register(
860835 let register_size = register
861836 . properties
862837 . size
863- . or ( defs. size )
864838 . ok_or_else ( || anyhow ! ( "Register {} has no `size` field" , register. name) ) ?;
865839
866840 match register {
@@ -961,7 +935,6 @@ fn expand_register(
961935/// Render a Cluster Block into `TokenStream`
962936fn cluster_block (
963937 c : & Cluster ,
964- defaults : & RegisterProperties ,
965938 p : & Peripheral ,
966939 all_peripherals : & [ Peripheral ] ,
967940 config : & Config ,
@@ -982,14 +955,12 @@ fn cluster_block(
982955 ) ;
983956 let name_sc = Ident :: new ( & mod_name. to_sanitized_snake_case ( ) , Span :: call_site ( ) ) ;
984957
985- let defaults = c. default_register_properties . derive_from ( defaults) ;
986-
987- let reg_block = register_or_cluster_block ( & c. children , & defaults, Some ( & mod_name) , config) ?;
958+ let reg_block = register_or_cluster_block ( & c. children , Some ( & mod_name) , config) ?;
988959
989960 // Generate definition for each of the registers.
990961 let registers = util:: only_registers ( & c. children ) ;
991962 for reg in & registers {
992- match register:: render ( reg, & registers, p, all_peripherals, & defaults , config) {
963+ match register:: render ( reg, & registers, p, all_peripherals, config) {
993964 Ok ( rendered_reg) => mod_items. extend ( rendered_reg) ,
994965 Err ( e) => {
995966 let res: Result < TokenStream > = Err ( e) ;
@@ -1005,7 +976,7 @@ fn cluster_block(
1005976 // Generate the sub-cluster blocks.
1006977 let clusters = util:: only_clusters ( & c. children ) ;
1007978 for c in & clusters {
1008- mod_items. extend ( cluster_block ( c, & defaults , p, all_peripherals, config) ?) ;
979+ mod_items. extend ( cluster_block ( c, p, all_peripherals, config) ?) ;
1009980 }
1010981
1011982 Ok ( quote ! {
0 commit comments