[coreboot-gerrit] Change in coreboot[master]: autoport/bd82x6x.go: Improve gpio.c generation

Arthur Heymans (Code Review) gerrit at coreboot.org
Mon May 1 09:46:34 CEST 2017


Arthur Heymans has uploaded a new change for review. ( https://review.coreboot.org/19508 )

Change subject: autoport/bd82x6x.go: Improve gpio.c generation
......................................................................

autoport/bd82x6x.go: Improve gpio.c generation

This generates better gpio.c files where structs are initialised as
static to be able to drop some entries since those would be
initialised as 0.
This makes these files less cluttered since only relevant things are
shown:
* GPIO direction, level, invert, blink depend on GPIO mode
* GPIO level is read only on input
* GPIO invert is only valid on input
* only show when GPIO are inverted, blinking, reset by RSMRST#

Change-Id: I83382d38a4a3b7ed11b8e7077cc5fbe154e261a7
Signed-off-by: Arthur Heymans <arthur at aheymans.xyz>
---
M util/autoport/bd82x6x.go
1 file changed, 37 insertions(+), 8 deletions(-)


  git pull ssh://review.coreboot.org:29418/coreboot refs/changes/08/19508/1

diff --git a/util/autoport/bd82x6x.go b/util/autoport/bd82x6x.go
index ed94df7..9a41223 100644
--- a/util/autoport/bd82x6x.go
+++ b/util/autoport/bd82x6x.go
@@ -11,7 +11,7 @@
 }
 
 func (b bd82x6x) writeGPIOSet(ctx Context, sb *os.File,
-	val uint32, set uint, partno int) {
+	val uint32, set uint, partno int, constraint uint32) {
 
 	max := uint(32)
 	if set == 3 {
@@ -28,20 +28,22 @@
 	}
 
 	for i := uint(0); i < max; i++ {
-		fmt.Fprintf(sb, "	.gpio%d = %s,\n",
-			(set-1)*32+i,
-			bits[partno][(val>>i)&1])
+		if ((constraint>>i)&1 == 1) {
+			fmt.Fprintf(sb, "	.gpio%d = %s,\n",
+				(set-1)*32+i,
+				bits[partno][(val>>i)&1])
+		}
 	}
 }
 
 func (b bd82x6x) GPIO(ctx Context, inteltool InteltoolData) {
+	var constraint uint32
 	gpio := Create(ctx, "gpio.c")
 	defer gpio.Close()
 
 	AddROMStageFile("gpio.c", "")
 
-	gpio.WriteString(`#include <southbridge/intel/common/gpio.h>
-`)
+	gpio.WriteString(`#include <southbridge/intel/common/gpio.h>`)
 
 	adresses := [3][6]int{
 		{0x00, 0x04, 0x0c, 0x60, 0x2c, 0x18},
@@ -55,10 +57,37 @@
 			if addr < 0 {
 				continue
 			}
-			fmt.Fprintf(gpio, "const struct pch_gpio_set%d pch_gpio_set%d_%s = {\n",
+			fmt.Fprintf(gpio, "const static struct pch_gpio_set%d pch_gpio_set%d_%s = {\n",
 				set, set, part)
 
-			b.writeGPIOSet(ctx, gpio, inteltool.GPIO[uint16(addr)], uint(set), partno)
+			constraint = 0
+			if (part == "direction") {
+				/* Ignored on native mode */
+				constraint = inteltool.GPIO[uint16(adresses[set-1][0])]
+			}
+			if (part == "level") {
+				/* Level is Read only for input */
+				constraint = inteltool.GPIO[uint16(adresses[set-1][0])]
+				constraint &^= inteltool.GPIO[uint16(adresses[set-1][1])]
+			}
+			if (part == "reset") {
+				/* Only show reset */
+				constraint = inteltool.GPIO[uint16(adresses[set-1][3])]
+			}
+			if (part == "invert") {
+				/* Only on input and only show inverted GPIO */
+				constraint = inteltool.GPIO[uint16(adresses[set-1][0])]
+				constraint &= inteltool.GPIO[uint16(adresses[set-1][1])]
+				constraint &= inteltool.GPIO[uint16(adresses[set-1][4])]
+			}
+			if (part == "blink") {
+				/* Only on output and only show blinking GPIO */
+				constraint = inteltool.GPIO[uint16(adresses[set-1][0])]
+				constraint &^= inteltool.GPIO[uint16(adresses[set-1][1])]
+				constraint  &= inteltool.GPIO[uint16(adresses[set-1][5])]
+			}
+
+			b.writeGPIOSet(ctx, gpio, inteltool.GPIO[uint16(addr)], uint(set), partno, constraint)
 			gpio.WriteString("};\n\n")
 		}
 	}

-- 
To view, visit https://review.coreboot.org/19508
To unsubscribe, visit https://review.coreboot.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I83382d38a4a3b7ed11b8e7077cc5fbe154e261a7
Gerrit-PatchSet: 1
Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Owner: Arthur Heymans <arthur at aheymans.xyz>



More information about the coreboot-gerrit mailing list