summaryrefslogtreecommitdiff
path: root/util/autoport/lynxpoint_lp_gpio.go
diff options
context:
space:
mode:
Diffstat (limited to 'util/autoport/lynxpoint_lp_gpio.go')
-rw-r--r--util/autoport/lynxpoint_lp_gpio.go252
1 files changed, 0 insertions, 252 deletions
diff --git a/util/autoport/lynxpoint_lp_gpio.go b/util/autoport/lynxpoint_lp_gpio.go
deleted file mode 100644
index fbc1686a..00000000
--- a/util/autoport/lynxpoint_lp_gpio.go
+++ /dev/null
@@ -1,252 +0,0 @@
-package main
-
-import (
- "fmt"
- "os"
- "strings"
-)
-
-const (
- PIRQI = 0
- PIRQJ = 1
- PIRQK = 2
- PIRQL = 3
- PIRQM = 4
- PIRQN = 5
- PIRQO = 6
- PIRQP = 7
- PIRQQ = 8
- PIRQR = 9
- PIRQS = 10
- PIRQT = 11
- PIRQU = 12
- PIRQV = 13
- PIRQW = 14
- PIRQX = 15
-)
-
-/* from sb/intel/lynxpoint/lp_gpio.c */
-func lp_gpio_to_pirq(gpioNum uint16) int {
- switch gpioNum {
- case 8:
- return PIRQI
- case 9:
- return PIRQJ
- case 10:
- return PIRQK
- case 13:
- return PIRQL
- case 14:
- return PIRQM
- case 45:
- return PIRQN
- case 46:
- return PIRQO
- case 47:
- return PIRQP
- case 48:
- return PIRQQ
- case 49:
- return PIRQR
- case 50:
- return PIRQS
- case 51:
- return PIRQT
- case 52:
- return PIRQU
- case 53:
- return PIRQV
- case 54:
- return PIRQW
- case 55:
- return PIRQX
- default:
- return -1
- }
-}
-
-func conf0str(conf0 uint32) string {
- if (conf0 & 1) == 0 {
- return "GPIO_MODE_NATIVE"
- } else {
- s := []string{"GPIO_MODE_GPIO"}
- var gpio_output bool
- if ((conf0 >> 2) & 1) == 1 {
- s = append(s, "GPIO_DIR_INPUT")
- gpio_output = false
- } else {
- s = append(s, "GPIO_DIR_OUTPUT")
- gpio_output = true
- }
- if ((conf0 >> 3) & 1) == 1 {
- s = append(s, "GPIO_INVERT")
- }
- if ((conf0 >> 4) & 1) == 1 {
- s = append(s, "GPIO_IRQ_LEVEL")
- }
- if gpio_output {
- if ((conf0 >> 31) & 1) == 1 {
- s = append(s, "GPO_LEVEL_HIGH")
- } else {
- s = append(s, "GPO_LEVEL_LOW")
- }
- }
- return strings.Join(s, " | ")
- }
-}
-
-func lpgpio_preset(conf0 uint32, owner uint32, route uint32, irqen uint32, pirq uint32) string {
- if conf0 == 0xd { /* 0b1101: MODE_GPIO | INPUT | INVERT */
- if owner == 0 { /* OWNER_ACPI */
- if irqen == 0 && pirq == 0 {
- if route == 0 { /* SCI */
- return "GPIO_ACPI_SCI"
- } else {
- return "GPIO_ACPI_SMI"
- }
- }
- return ""
- } else { /* OWNER_GPIO */
- if route == 0 && irqen == 0 && pirq != 0 {
- return "GPIO_INPUT_INVERT"
- }
- return ""
- }
- }
-
- if conf0 == 0x5 && owner == 1 { /* 0b101: MODE_GPIO | INPUT, OWNER_GPIO */
- if route == 0 && irqen == 0 {
- if pirq == 1 {
- return "GPIO_PIRQ"
- } else {
- return "GPIO_INPUT"
- }
- }
- return ""
- }
-
- if owner == 1 && irqen == 1 {
- if route == 0 && pirq == 0 {
- if conf0 == 0x5 { /* 0b00101 */
- return "GPIO_IRQ_EDGE"
- }
- if conf0 == 0x15 { /* 0b10101 */
- return "GPIO_IRQ_LEVEL"
- }
- }
- return ""
- }
- return ""
-}
-
-func gpio_str(conf0 uint32, conf1 uint32, owner uint32, route uint32, irqen uint32, reset uint32, blink uint32, pirq uint32) string {
- s := []string{}
- s = append(s, fmt.Sprintf(".conf0 = %s", conf0str(conf0)))
- if conf1 != 0 {
- s = append(s, fmt.Sprintf(".conf1 = 0x%x", conf1))
- }
- if owner != 0 {
- s = append(s, ".owner = GPIO_OWNER_GPIO")
- }
- if route != 0 {
- s = append(s, ".route = GPIO_ROUTE_SMI")
- }
- if irqen != 0 {
- s = append(s, ".irqen = GPIO_IRQ_ENABLE")
- }
- if reset != 0 {
- s = append(s, ".reset = GPIO_RESET_RSMRST")
- }
- if blink != 0 {
- s = append(s, ".blink = GPO_BLINK")
- }
- if pirq != 0 {
- s = append(s, ".pirq = GPIO_PIRQ_APIC_ROUTE")
- }
- return strings.Join(s, ", ")
-}
-
-/* start addresses of GPIO registers */
-const (
- GPIO_OWN = 0x0
- GPIPIRQ2IOXAPIC = 0x10
- GPO_BLINK = 0x18
- GPI_ROUT = 0x30
- GP_RST_SEL = 0x60
- GPI_IE = 0x90
- GPnCONFIGA = 0x100
- GPnCONFIGB = 0x104
-)
-
-func PrintLPGPIO(gpio *os.File, inteltool InteltoolData) {
- for gpioNum := uint16(0); gpioNum <= 94; gpioNum++ {
- if gpioNum < 10 {
- fmt.Fprintf(gpio, "\t[%d] = ", gpioNum)
- } else {
- fmt.Fprintf(gpio, "\t[%d] = ", gpioNum)
- }
- conf0 := inteltool.GPIO[GPnCONFIGA+gpioNum*8]
- conf1 := inteltool.GPIO[GPnCONFIGB+gpioNum*8]
- set := gpioNum / 32
- bit := gpioNum % 32
- /* owner only effective in GPIO mode */
- owner := (inteltool.GPIO[GPIO_OWN+set*4] >> bit) & 1
- route := (inteltool.GPIO[GPI_ROUT+set*4] >> bit) & 1
- irqen := (inteltool.GPIO[GPI_IE+set*4] >> bit) & 1
- reset := (inteltool.GPIO[GP_RST_SEL+set*4] >> bit) & 1
- var blink, pirq uint32
- /* blink only effective in GPIO output mode */
- if set == 0 {
- blink = (inteltool.GPIO[GPO_BLINK] >> bit) & 1
- } else {
- blink = 0
- }
- irqset := lp_gpio_to_pirq(gpioNum)
- if irqset >= 0 {
- pirq = (inteltool.GPIO[GPIPIRQ2IOXAPIC] >> uint(irqset)) & 1
- } else {
- pirq = 0
- }
-
- if (conf0 & 1) == 0 {
- fmt.Fprintf(gpio, "LP_GPIO_NATIVE,\n")
- } else if (conf0 & 4) == 0 {
- /* configured as output */
- if ((conf0 >> 31) & 1) == 0 {
- fmt.Fprintf(gpio, "LP_GPIO_OUT_LOW,\n")
- } else {
- fmt.Fprintf(gpio, "LP_GPIO_OUT_HIGH,\n")
- }
- } else if (conf1 & 4) != 0 {
- /* configured as input and sensing disabled */
- fmt.Fprintf(gpio, "LP_GPIO_UNUSED,\n")
- } else {
- is_preset := false
- if conf1 == 0 && reset == 0 && blink == 0 {
- preset := lpgpio_preset(conf0, owner, route, irqen, pirq)
- if preset != "" {
- fmt.Fprintf(gpio, "LP_%s,\n", preset)
- is_preset = true
- }
- }
- if !is_preset {
- fmt.Fprintf(gpio, "{ %s },\n", gpio_str(conf0, conf1, owner, route, irqen, reset, blink, pirq))
- }
- }
- }
-}
-
-func Lynxpoint_LP_GPIO(ctx Context, inteltool InteltoolData) {
- gpio := Create(ctx, "gpio.c")
- defer gpio.Close()
-
- AddROMStageFile("gpio.c", "")
-
- Add_gpl(gpio)
- gpio.WriteString(`#include <southbridge/intel/lynxpoint/lp_gpio.h>
-
-const struct pch_lp_gpio_map mainboard_lp_gpio_map[] = {
-`)
- PrintLPGPIO(gpio, inteltool)
- gpio.WriteString("\tLP_GPIO_END\n};\n")
-}