2020-04-26 21:12:01 +02:00
|
|
|
package common
|
|
|
|
|
2021-06-30 15:14:53 +02:00
|
|
|
import (
|
|
|
|
"strconv"
|
|
|
|
"sync"
|
intelp2m: Add Go Managing Dependencies System support
Add go.mod containing the full name of the project according to the
docs [1]: review.coreboot.org/coreboot.git/util/intelp2m, and also,
based on this, rename the internal packages to point to the absolute
path. This will allow Go Managing Dependencies System to integrate
packages from intelp2m to third-party Go written on the Go language [1].
This also requires fixing the Golang compiler version in go.mod: use
go1.18 [2], the latest up-to-date version.
[1] https://web.archive.org/web/20220910100342/https://go.dev/doc/modules/managing-dependencies
[2] https://web.archive.org/web/20220910100206/https://tip.golang.org/doc/go1.18
[ TEST ]
1) Import the coreboot project into some go project:
$cd path/to/go-project
$go get review.coreboot.org/coreboot.git
go: downloading review.coreboot.org/coreboot.git v0.0.0-20220903004133
-39914a50ae16
go: added review.coreboot.org/coreboot.git v0.0.0-20220903004133
-39914a50ae16
Thus, 'go get' correctly downloaded the contents of the repository.
2) Import intelp2m:
$cd path/to/go-project
$go get review.coreboot.org/coreboot.git/util/intelp2m
review.coreboot.org/coreboot.git/util/intelp2m imports
./config: "./config" is relative, but relative import paths are
not supported in module mode
review.coreboot.org/coreboot.git/util/intelp2m imports
./parser: "./parser" is relative, but relative import paths are
not supported in module mode
Thus, the problem is in the package names, but after this patch, the
import should be without errors.
3) Import a repository with an incorrect url:
$cd path/to/go-project
$go get review.coreboot.org/coreboot/test
go: unrecognized import path "review.coreboot.org/coreboot/test":
reading https://review.coreboot.org/coreboot/test?go-get=1:
404 Not Found
This has not happened in previous cases.
Change-Id: I12efae31227129b8c884af10fb233f398c4094e7
Signed-off-by: Maxim Polyakov <max.senia.poliak@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/64724
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: David Hendricks <david.hendricks@gmail.com>
2022-05-11 21:49:14 +02:00
|
|
|
|
|
|
|
"review.coreboot.org/coreboot.git/util/intelp2m/config"
|
2021-06-30 15:14:53 +02:00
|
|
|
)
|
2020-04-26 21:12:01 +02:00
|
|
|
|
|
|
|
type Fields interface {
|
|
|
|
DecodeDW0()
|
|
|
|
DecodeDW1()
|
|
|
|
GenerateString()
|
|
|
|
}
|
|
|
|
|
|
|
|
const (
|
|
|
|
PAD_OWN_ACPI = 0
|
|
|
|
PAD_OWN_DRIVER = 1
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
TxLASTRxE = 0x0
|
|
|
|
Tx0RxDCRx0 = 0x1
|
|
|
|
Tx0RxDCRx1 = 0x2
|
|
|
|
Tx1RxDCRx0 = 0x3
|
|
|
|
Tx1RxDCRx1 = 0x4
|
|
|
|
Tx0RxE = 0x5
|
|
|
|
Tx1RxE = 0x6
|
|
|
|
HIZCRx0 = 0x7
|
|
|
|
HIZCRx1 = 0x8
|
|
|
|
TxDRxE = 0x9
|
|
|
|
StandbyIgnore = 0xf
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
IOSTERM_SAME = 0x0
|
|
|
|
IOSTERM_DISPUPD = 0x1
|
|
|
|
IOSTERM_ENPD = 0x2
|
|
|
|
IOSTERM_ENPU = 0x3
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
TRIG_LEVEL = 0
|
|
|
|
TRIG_EDGE_SINGLE = 1
|
|
|
|
TRIG_OFF = 2
|
|
|
|
TRIG_EDGE_BOTH = 3
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
RST_PWROK = 0
|
|
|
|
RST_DEEP = 1
|
|
|
|
RST_PLTRST = 2
|
|
|
|
RST_RSMRST = 3
|
|
|
|
)
|
|
|
|
|
|
|
|
// PlatformSpecific - platform-specific interface
|
|
|
|
type PlatformSpecific interface {
|
|
|
|
RemmapRstSrc()
|
|
|
|
Pull()
|
|
|
|
GpiMacroAdd()
|
|
|
|
GpoMacroAdd()
|
|
|
|
NativeFunctionMacroAdd()
|
|
|
|
NoConnMacroAdd()
|
|
|
|
}
|
|
|
|
|
|
|
|
// Macro - contains macro information and methods
|
|
|
|
// Platform : platform-specific interface
|
|
|
|
// padID : pad ID string
|
|
|
|
// str : macro string entirely
|
|
|
|
// Reg : structure of configuration register values and their masks
|
|
|
|
type Macro struct {
|
|
|
|
Platform PlatformSpecific
|
|
|
|
Reg [MAX_DW_NUM]Register
|
|
|
|
padID string
|
|
|
|
str string
|
|
|
|
ownership uint8
|
|
|
|
Fields
|
|
|
|
}
|
|
|
|
|
|
|
|
var instanceMacro *Macro
|
|
|
|
var once sync.Once
|
|
|
|
|
|
|
|
// GetInstance returns singleton
|
|
|
|
func GetInstanceMacro(p PlatformSpecific, f Fields) *Macro {
|
|
|
|
once.Do(func() {
|
|
|
|
instanceMacro = &Macro{ Platform : p, Fields : f }
|
|
|
|
})
|
|
|
|
return instanceMacro
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetMacro() *Macro {
|
|
|
|
return GetInstanceMacro(nil, nil)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (macro *Macro) PadIdGet() string {
|
|
|
|
return macro.padID
|
|
|
|
}
|
|
|
|
|
|
|
|
func (macro *Macro) PadIdSet(padid string) *Macro {
|
|
|
|
macro.padID = padid
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
func (macro *Macro) SetPadOwnership(own uint8) *Macro {
|
|
|
|
macro.ownership = own
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
func (macro *Macro) IsOwnershipDriver() bool {
|
|
|
|
return macro.ownership == PAD_OWN_DRIVER
|
|
|
|
}
|
|
|
|
|
|
|
|
// returns <Register> data configuration structure
|
|
|
|
// number : register number
|
|
|
|
func (macro *Macro) Register(number uint8) *Register {
|
|
|
|
return ¯o.Reg[number]
|
|
|
|
}
|
|
|
|
|
|
|
|
// add a string to macro
|
|
|
|
func (macro *Macro) Add(str string) *Macro {
|
|
|
|
macro.str += str
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
// set a string in a macro instead of its previous contents
|
|
|
|
func (macro *Macro) Set(str string) *Macro {
|
|
|
|
macro.str = str
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
// get macro string
|
|
|
|
func (macro *Macro) Get() string {
|
|
|
|
return macro.str
|
|
|
|
}
|
|
|
|
|
|
|
|
// set a string in a macro instead of its previous contents
|
|
|
|
func (macro *Macro) Clear() *Macro {
|
|
|
|
macro.Set("")
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adds PAD Id to the macro as a new argument
|
|
|
|
// return: Macro
|
|
|
|
func (macro *Macro) Id() *Macro {
|
|
|
|
return macro.Add(macro.padID)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add Separator to macro if needed
|
|
|
|
func (macro *Macro) Separator() *Macro {
|
|
|
|
str := macro.Get()
|
|
|
|
c := str[len(str)-1]
|
|
|
|
if c != '(' && c != '_' {
|
|
|
|
macro.Add(", ")
|
|
|
|
}
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adds the PADRSTCFG parameter from DW0 to the macro as a new argument
|
|
|
|
// return: Macro
|
|
|
|
func (macro *Macro) Rstsrc() *Macro {
|
|
|
|
dw0 := macro.Register(PAD_CFG_DW0)
|
|
|
|
var resetsrc = map[uint8]string {
|
|
|
|
0: "PWROK",
|
|
|
|
1: "DEEP",
|
|
|
|
2: "PLTRST",
|
|
|
|
3: "RSMRST",
|
|
|
|
}
|
|
|
|
return macro.Separator().Add(resetsrc[dw0.GetResetConfig()])
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adds The Pad Termination (TERM) parameter from DW1 to the macro as a new argument
|
|
|
|
// return: Macro
|
|
|
|
func (macro *Macro) Pull() *Macro {
|
|
|
|
macro.Platform.Pull()
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adds Pad GPO value to macro string as a new argument
|
|
|
|
// return: Macro
|
|
|
|
func (macro *Macro) Val() *Macro {
|
|
|
|
dw0 := macro.Register(PAD_CFG_DW0)
|
|
|
|
return macro.Separator().Add(strconv.Itoa(int(dw0.GetGPIOTXState())))
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adds Pad GPO value to macro string as a new argument
|
|
|
|
// return: Macro
|
|
|
|
func (macro *Macro) Trig() *Macro {
|
|
|
|
dw0 := macro.Register(PAD_CFG_DW0)
|
|
|
|
var trig = map[uint8]string{
|
|
|
|
0x0: "LEVEL",
|
|
|
|
0x1: "EDGE_SINGLE",
|
|
|
|
0x2: "OFF",
|
|
|
|
0x3: "EDGE_BOTH",
|
|
|
|
}
|
|
|
|
return macro.Separator().Add(trig[dw0.GetRXLevelEdgeConfiguration()])
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adds Pad Polarity Inversion Stage (RXINV) to macro string as a new argument
|
|
|
|
// return: Macro
|
|
|
|
func (macro *Macro) Invert() *Macro {
|
|
|
|
macro.Separator()
|
|
|
|
if macro.Register(PAD_CFG_DW0).GetRxInvert() !=0 {
|
|
|
|
return macro.Add("INVERT")
|
|
|
|
}
|
|
|
|
return macro.Add("NONE")
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adds input/output buffer state
|
|
|
|
// return: Macro
|
|
|
|
func (macro *Macro) Bufdis() *Macro {
|
|
|
|
var buffDisStat = map[uint8]string{
|
|
|
|
0x0: "NO_DISABLE", // both buffers are enabled
|
|
|
|
0x1: "TX_DISABLE", // output buffer is disabled
|
|
|
|
0x2: "RX_DISABLE", // input buffer is disabled
|
|
|
|
0x3: "TX_RX_DISABLE", // both buffers are disabled
|
|
|
|
}
|
|
|
|
state := macro.Register(PAD_CFG_DW0).GetGPIORxTxDisableStatus()
|
|
|
|
return macro.Separator().Add(buffDisStat[state])
|
|
|
|
}
|
|
|
|
|
|
|
|
// Adds macro to set the host software ownership
|
|
|
|
// return: Macro
|
|
|
|
func (macro *Macro) Own() *Macro {
|
|
|
|
if macro.IsOwnershipDriver() {
|
|
|
|
return macro.Separator().Add("DRIVER")
|
|
|
|
}
|
|
|
|
return macro.Separator().Add("ACPI")
|
|
|
|
}
|
|
|
|
|
|
|
|
//Adds pad native function (PMODE) as a new argument
|
|
|
|
//return: Macro
|
|
|
|
func (macro *Macro) Padfn() *Macro {
|
|
|
|
dw0 := macro.Register(PAD_CFG_DW0)
|
|
|
|
nfnum := int(dw0.GetPadMode())
|
|
|
|
if nfnum != 0 {
|
|
|
|
return macro.Separator().Add("NF" + strconv.Itoa(nfnum))
|
|
|
|
}
|
|
|
|
// GPIO used only for PAD_FUNC(x) macro
|
|
|
|
return macro.Add("GPIO")
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add a line to the macro that defines IO Standby State
|
|
|
|
// return: macro
|
|
|
|
func (macro *Macro) IOSstate() *Macro {
|
|
|
|
var stateMacro = map[uint8]string{
|
|
|
|
TxLASTRxE: "TxLASTRxE",
|
|
|
|
Tx0RxDCRx0: "Tx0RxDCRx0",
|
|
|
|
Tx0RxDCRx1: "Tx0RxDCRx1",
|
|
|
|
Tx1RxDCRx0: "Tx1RxDCRx0",
|
|
|
|
Tx1RxDCRx1: "Tx1RxDCRx1",
|
|
|
|
Tx0RxE: "Tx0RxE",
|
|
|
|
Tx1RxE: "Tx1RxE",
|
|
|
|
HIZCRx0: "HIZCRx0",
|
|
|
|
HIZCRx1: "HIZCRx1",
|
|
|
|
TxDRxE: "TxDRxE",
|
|
|
|
StandbyIgnore: "IGNORE",
|
|
|
|
}
|
|
|
|
dw1 := macro.Register(PAD_CFG_DW1)
|
|
|
|
str, valid := stateMacro[dw1.GetIOStandbyState()]
|
|
|
|
if !valid {
|
|
|
|
// ignore setting for incorrect value
|
|
|
|
str = "IGNORE"
|
|
|
|
}
|
|
|
|
return macro.Separator().Add(str)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add a line to the macro that defines IO Standby Termination
|
|
|
|
// return: macro
|
|
|
|
func (macro *Macro) IOTerm() *Macro {
|
|
|
|
var ioTermMacro = map[uint8]string{
|
|
|
|
IOSTERM_SAME: "SAME",
|
|
|
|
IOSTERM_DISPUPD: "DISPUPD",
|
|
|
|
IOSTERM_ENPD: "ENPD",
|
|
|
|
IOSTERM_ENPU: "ENPU",
|
|
|
|
}
|
|
|
|
dw1 := macro.Register(PAD_CFG_DW1)
|
|
|
|
return macro.Separator().Add(ioTermMacro[dw1.GetIOStandbyTermination()])
|
|
|
|
}
|
|
|
|
|
|
|
|
// Check created macro
|
|
|
|
func (macro *Macro) check() *Macro {
|
|
|
|
if !macro.Register(PAD_CFG_DW0).MaskCheck() {
|
|
|
|
return macro.GenerateFields()
|
|
|
|
}
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
// or - Set " | " if its needed
|
|
|
|
func (macro *Macro) Or() *Macro {
|
|
|
|
|
|
|
|
if str := macro.Get(); str[len(str) - 1] == ')' {
|
|
|
|
macro.Add(" | ")
|
|
|
|
}
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
util/intelp2m: Update output information format in the comments
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>
2020-09-30 15:46:11 +02:00
|
|
|
// DecodeIgnored - Add info about ignored field mask
|
|
|
|
// reg : PAD_CFG_DW0 or PAD_CFG_DW1 register
|
|
|
|
func (macro *Macro) DecodeIgnored(reg uint8) *Macro {
|
|
|
|
var decode = map[uint8]func() {
|
|
|
|
PAD_CFG_DW0: macro.Fields.DecodeDW0,
|
|
|
|
PAD_CFG_DW1: macro.Fields.DecodeDW1,
|
2020-04-26 21:12:01 +02:00
|
|
|
}
|
util/intelp2m: Update output information format in the comments
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>
2020-09-30 15:46:11 +02:00
|
|
|
decodefn, valid := decode[reg]
|
|
|
|
if !valid || config.IsFspStyleMacro() {
|
|
|
|
return macro
|
2020-04-26 21:12:01 +02:00
|
|
|
}
|
util/intelp2m: Update output information format in the comments
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>
2020-09-30 15:46:11 +02:00
|
|
|
dw := macro.Register(reg)
|
|
|
|
ignored := dw.IgnoredFieldsGet()
|
|
|
|
if ignored != 0 {
|
|
|
|
temp := dw.ValueGet()
|
|
|
|
dw.ValueSet(ignored)
|
|
|
|
regnum := strconv.Itoa(int(reg))
|
|
|
|
macro.Add("/* DW" + regnum + ": ")
|
|
|
|
decodefn()
|
|
|
|
macro.Add(" - IGNORED */\n\t")
|
|
|
|
dw.ValueSet(temp)
|
2020-04-26 21:12:01 +02:00
|
|
|
}
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
// GenerateFields - generate bitfield macros
|
|
|
|
func (macro *Macro) GenerateFields() *Macro {
|
|
|
|
dw0 := macro.Register(PAD_CFG_DW0)
|
|
|
|
dw1 := macro.Register(PAD_CFG_DW1)
|
|
|
|
|
|
|
|
// Get mask of ignored bit fields.
|
|
|
|
dw0Ignored := dw0.IgnoredFieldsGet()
|
|
|
|
dw1Ignored := dw1.IgnoredFieldsGet()
|
|
|
|
|
util/intelp2m: Update output information format in the comments
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>
2020-09-30 15:46:11 +02:00
|
|
|
if config.InfoLevelGet() != 4 {
|
2020-04-26 21:12:01 +02:00
|
|
|
macro.Clear()
|
util/intelp2m: Update output information format in the comments
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>
2020-09-30 15:46:11 +02:00
|
|
|
}
|
|
|
|
if config.InfoLevelGet() >= 3 {
|
2020-04-26 21:12:01 +02:00
|
|
|
// Add string of reference macro as a comment
|
|
|
|
reference := macro.Get()
|
|
|
|
macro.Clear()
|
util/intelp2m: Update output information format in the comments
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>
2020-09-30 15:46:11 +02:00
|
|
|
/* DW0 : PAD_TRIG(OFF) | PAD_BUF(RX_DISABLE) | 1 - IGNORED */
|
|
|
|
macro.DecodeIgnored(PAD_CFG_DW0).DecodeIgnored(PAD_CFG_DW1)
|
|
|
|
if config.InfoLevelGet() >= 4 {
|
|
|
|
/* PAD_CFG_NF(GPP_B23, 20K_PD, PLTRST, NF2), */
|
|
|
|
macro.Add("/* ").Add(reference).Add(" */\n\t")
|
|
|
|
}
|
2020-04-26 21:12:01 +02:00
|
|
|
}
|
|
|
|
if config.AreFieldsIgnored() {
|
|
|
|
// Consider bit fields that should be ignored when regenerating
|
|
|
|
// advansed macros
|
|
|
|
var tempVal uint32 = dw0.ValueGet() & ^dw0Ignored
|
|
|
|
dw0.ValueSet(tempVal)
|
|
|
|
|
|
|
|
tempVal = dw1.ValueGet() & ^dw1Ignored
|
|
|
|
dw1.ValueSet(tempVal)
|
|
|
|
}
|
|
|
|
|
|
|
|
macro.Fields.GenerateString()
|
|
|
|
return macro
|
|
|
|
}
|
|
|
|
|
|
|
|
// Generate macro for bi-directional GPIO port
|
|
|
|
func (macro *Macro) Bidirection() {
|
|
|
|
dw1 := macro.Register(PAD_CFG_DW1)
|
|
|
|
ios := dw1.GetIOStandbyState() != 0 || dw1.GetIOStandbyTermination() != 0
|
|
|
|
macro.Set("PAD_CFG_GPIO_BIDIRECT")
|
|
|
|
if ios {
|
|
|
|
macro.Add("_IOS")
|
|
|
|
}
|
|
|
|
// PAD_CFG_GPIO_BIDIRECT(pad, val, pull, rst, trig, own)
|
|
|
|
macro.Add("(").Id().Val().Pull().Rstsrc().Trig()
|
|
|
|
if ios {
|
|
|
|
// PAD_CFG_GPIO_BIDIRECT_IOS(pad, val, pull, rst, trig, iosstate, iosterm, own)
|
|
|
|
macro.IOSstate().IOTerm()
|
|
|
|
}
|
|
|
|
macro.Own().Add("),")
|
|
|
|
}
|
|
|
|
|
|
|
|
const (
|
|
|
|
rxDisable uint8 = 0x2
|
|
|
|
txDisable uint8 = 0x1
|
|
|
|
)
|
|
|
|
|
|
|
|
// Gets base string of current macro
|
|
|
|
// return: string of macro
|
|
|
|
func (macro *Macro) Generate() string {
|
|
|
|
dw0 := macro.Register(PAD_CFG_DW0)
|
|
|
|
|
|
|
|
macro.Platform.RemmapRstSrc()
|
|
|
|
macro.Set("PAD_CFG")
|
|
|
|
if dw0.GetPadMode() == 0 {
|
|
|
|
// GPIO
|
|
|
|
switch dw0.GetGPIORxTxDisableStatus() {
|
|
|
|
case txDisable:
|
|
|
|
macro.Platform.GpiMacroAdd() // GPI
|
|
|
|
|
|
|
|
case rxDisable:
|
|
|
|
macro.Platform.GpoMacroAdd() // GPO
|
|
|
|
|
|
|
|
case rxDisable | txDisable:
|
|
|
|
macro.Platform.NoConnMacroAdd() // NC
|
|
|
|
|
|
|
|
default:
|
|
|
|
macro.Bidirection()
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
macro.Platform.NativeFunctionMacroAdd()
|
|
|
|
}
|
|
|
|
|
|
|
|
if config.IsFieldsMacroUsed() {
|
|
|
|
// Clear control mask to generate advanced macro only
|
|
|
|
return macro.GenerateFields().Get()
|
|
|
|
}
|
|
|
|
|
|
|
|
if config.IsNonCheckingFlagUsed() {
|
util/intelp2m: Update output information format in the comments
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>
2020-09-30 15:46:11 +02:00
|
|
|
body := macro.Get()
|
|
|
|
if config.InfoLevelGet() >= 3 {
|
|
|
|
macro.Clear().DecodeIgnored(PAD_CFG_DW0).DecodeIgnored(PAD_CFG_DW1)
|
|
|
|
comment := macro.Get()
|
|
|
|
if config.InfoLevelGet() >= 4 {
|
|
|
|
macro.Clear().Add("/* ")
|
|
|
|
macro.Fields.GenerateString()
|
|
|
|
macro.Add(" */\n\t")
|
|
|
|
comment += macro.Get()
|
|
|
|
}
|
|
|
|
return comment + body
|
|
|
|
}
|
|
|
|
return body
|
2020-04-26 21:12:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
return macro.check().Get()
|
|
|
|
}
|