Update the information format in the comments above the macros in the generated gpio.h file: PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_39, UP_20K, DEEP, NF1, TxLASTRxE, DISPUPD), /* LPSS_UART0_TXD */ -->(i) /* GPIO_39 - LPSS_UART0_TXD */ --> (ii) /* DW0: 0x44000400, DW1: 0x00003100 */ --> (ii) /* DW0 : PAD_TRIG(OFF) - IGNORED */ --> (iii) /* _PAD_CFG_STRUCT(GPIO_39, PAD_FUNC(NF1) | PAD_RESET(DEEP) | PAD_TRIG(OFF), PAD_PULL(UP_20K) | PAD_IOSTERM(DISPUPD)), */ --> (iiii) PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_39, UP_20K, DEEP, NF1, TxLASTRxE, DISPUPD), Also, in the case of field macros: /* GPIO_39 - LPSS_UART0_TXD */ --> (ii) /* DW0: 0x44000400, DW1: 0x00003100 */ --> (ii) /* DW0 : PAD_TRIG(OFF) - IGNORED */ --> (iii) /* PAD_CFG_NF_IOSSTATE_IOSTERM(GPIO_39, UP_20K, DEEP, NF1, TxLASTRxE, DISPUPD), */ --> (iiii) PAD_CFG_STRUCT(GPIO_39, PAD_FUNC(NF1) | PAD_RESET(DEEP) | PAD_TRIG(OFF), PAD_PULL(UP_20K) | PAD_IOSTERM(DISPUPD)), By default, if do not use the -i... option, then additional information in comments will not be generated. TEST: git clone https://github.com/maxpoliak/inteltool-examples.git test ./intelp2m -n -file test/inteltool-asrock-h110m-stx.log ./intelp2m -fld cb -file test/inteltool-asrock-h110m-stx.log ./intelp2m -fld fsp -file test/inteltool-asrock-h110m-stx.log ./intelp2m -fld raw -file test/inteltool-asrock-h110m-stx.log Before and after (now with -i key) the patch, gpio.h is no different. Change-Id: I760f4aadece786ea455fb7569f42e06fefce2b61 Signed-off-by: Maxim Polyakov <max.senia.poliak@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/45168 Reviewed-by: Matt DeVillier <matt.devillier@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
		
			
				
	
	
		
			174 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			174 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package cb
 | |
| 
 | |
| import "../../config"
 | |
| import "../../platforms/common"
 | |
| 
 | |
| type FieldMacros struct {}
 | |
| 
 | |
| // field - data structure for creating a new bitfield macro object
 | |
| // PAD_FUNC(NF3)
 | |
| // prefix       : PAD_FUNC
 | |
| // name         : NF3; this value will be overridden if the configurator is used
 | |
| // unhide       : conditions for hiding macros
 | |
| // configurator : method for determining the current configuration of the bit field
 | |
| type field struct {
 | |
| 	prefix       string
 | |
| 	name         string
 | |
| 	unhide       bool
 | |
| 	configurator func()
 | |
| }
 | |
| 
 | |
| // generate - wrapper for generating bitfield macros string
 | |
| // fileds : field structure
 | |
| func generate(fileds ...*field) {
 | |
| 	macro := common.GetMacro()
 | |
| 	var allhidden bool = true
 | |
| 	for _, field := range fileds {
 | |
| 		if field.unhide {
 | |
| 			allhidden = false
 | |
| 			macro.Or()
 | |
| 			if field.prefix != "" {
 | |
| 				macro.Add(field.prefix).Add("(")
 | |
| 			}
 | |
| 			if field.name != "" {
 | |
| 				macro.Add(field.name)
 | |
| 			} else if field.configurator != nil {
 | |
| 				field.configurator()
 | |
| 			}
 | |
| 			if field.prefix != "" {
 | |
| 				macro.Add(")")
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	if allhidden { macro.Add("0") }
 | |
| }
 | |
| 
 | |
| // DecodeDW0 - decode value of DW0 register
 | |
| func (FieldMacros) DecodeDW0() {
 | |
| 	macro := common.GetMacro()
 | |
| 	dw0 := macro.Register(common.PAD_CFG_DW0)
 | |
| 	generate(
 | |
| 		&field {
 | |
| 			prefix : "PAD_FUNC",
 | |
| 			// TODO: Find another way to hide PAD_FUNC(GPIO) in the comment with
 | |
| 			// ignored fields
 | |
| 			unhide : config.InfoLevelGet() < 3 || dw0.GetPadMode() != 0,
 | |
| 			configurator : func() { macro.Padfn() },
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_RESET",
 | |
| 			unhide : dw0.GetResetConfig() != 0,
 | |
| 			configurator : func() { macro.Rstsrc() },
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_TRIG",
 | |
| 			unhide : dw0.GetRXLevelEdgeConfiguration() != 0,
 | |
| 			configurator : func() { macro.Trig() },
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_IRQ_ROUTE",
 | |
| 			name   : "IOAPIC",
 | |
| 			unhide : dw0.GetGPIOInputRouteIOxAPIC() != 0,
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_IRQ_ROUTE",
 | |
| 			name   : "SCI",
 | |
| 			unhide : dw0.GetGPIOInputRouteSCI() != 0,
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_IRQ_ROUTE",
 | |
| 			name   : "SMI",
 | |
| 			unhide : dw0.GetGPIOInputRouteSMI() != 0,
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_IRQ_ROUTE",
 | |
| 			name   : "NMI",
 | |
| 			unhide : dw0.GetGPIOInputRouteNMI() != 0,
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_RX_POL",
 | |
| 			unhide : dw0.GetRxInvert() != 0,
 | |
| 			configurator : func() { macro.Invert() },
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_BUF",
 | |
| 			unhide : dw0.GetGPIORxTxDisableStatus() != 0,
 | |
| 			configurator : func() { macro.Bufdis() },
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			name   : "(1 << 29)",
 | |
| 			unhide : dw0.GetRXPadStateSelect() != 0,
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			name   : "(1 << 28)",
 | |
| 			unhide : dw0.GetRXRawOverrideStatus() != 0,
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			name   : "(1 << 1)",
 | |
| 			unhide : dw0.GetGPIORXState() != 0,
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			name   : "1",
 | |
| 			unhide : dw0.GetGPIOTXState() != 0,
 | |
| 		},
 | |
| 	)
 | |
| }
 | |
| 
 | |
| // DecodeDW1 - decode value of DW1 register
 | |
| func (FieldMacros) DecodeDW1() {
 | |
| 	macro := common.GetMacro()
 | |
| 	dw1 := macro.Register(common.PAD_CFG_DW1)
 | |
| 	generate(
 | |
| 		&field {
 | |
| 			name   : "PAD_CFG1_TOL_1V8",
 | |
| 			unhide : dw1.GetPadTol() != 0,
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_PULL",
 | |
| 			unhide : dw1.GetTermination() != 0,
 | |
| 			configurator : func() { macro.Pull() },
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_IOSSTATE",
 | |
| 			unhide : dw1.GetIOStandbyState() != 0,
 | |
| 			configurator : func() { macro.IOSstate() },
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_IOSTERM",
 | |
| 			unhide : dw1.GetIOStandbyTermination() != 0,
 | |
| 			configurator : func() { macro.IOTerm() },
 | |
| 		},
 | |
| 
 | |
| 		&field {
 | |
| 			prefix : "PAD_CFG_OWN_GPIO",
 | |
| 			unhide : macro.IsOwnershipDriver(),
 | |
| 			configurator : func() { macro.Own() },
 | |
| 		},
 | |
| 	)
 | |
| }
 | |
| 
 | |
| // GenerateString - generates the entire string of bitfield macros.
 | |
| func (bitfields FieldMacros) GenerateString() {
 | |
| 	macro := common.GetMacro()
 | |
| 	macro.Add("_PAD_CFG_STRUCT(").Id().Add(", ")
 | |
| 	bitfields.DecodeDW0()
 | |
| 	macro.Add(", ")
 | |
| 	bitfields.DecodeDW1()
 | |
| 	macro.Add("),")
 | |
| }
 |