summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTimothy Pearson <tpearson@raptorengineering.com>2016-05-24 15:48:50 -0500
committerTimothy Pearson <tpearson@raptorengineering.com>2016-05-29 19:34:02 +0200
commite4cca16b426f3907983992352ae9ace7cce1c41f (patch)
treec801038722d6f3477617703d8f2c9f48a526956b /src
parent161d2334e863b26fc893c6bbf8f8cb8b811ce586 (diff)
downloadcoreboot-e4cca16b426f3907983992352ae9ace7cce1c41f.tar.xz
sio/winbond/common: Add function to configure pin mux
Certain mainboards require SuperIO pinmux configuration before peripherals will become operational. Allow each mainboard to configure the pinmux(es) of Winbond chips if needed. Change-Id: Ice19f8d8514b66b15920a5b893700d636ed75cec Signed-off-by: Timothy Pearson <tpearson@raptorengineering.com> Reviewed-on: https://review.coreboot.org/14960 Tested-by: build bot (Jenkins) Reviewed-by: Felix Held <felix-coreboot@felixheld.de>
Diffstat (limited to 'src')
-rw-r--r--src/superio/winbond/common/early_serial.c13
-rw-r--r--src/superio/winbond/common/winbond.h3
2 files changed, 15 insertions, 1 deletions
diff --git a/src/superio/winbond/common/early_serial.c b/src/superio/winbond/common/early_serial.c
index 6482a94838..aebbd38b46 100644
--- a/src/superio/winbond/common/early_serial.c
+++ b/src/superio/winbond/common/early_serial.c
@@ -66,3 +66,16 @@ void winbond_enable_serial(pnp_devfn_t dev, u16 iobase)
pnp_set_enable(dev, 1);
pnp_exit_conf_state(dev);
}
+
+void winbond_set_pinmux(pnp_devfn_t dev, uint8_t offset, uint8_t mask, uint8_t state)
+{
+ uint8_t byte;
+
+ /* Configure pin mux */
+ pnp_enter_conf_state(dev);
+ byte = pnp_read_config(dev, offset);
+ byte &= ~mask;
+ byte |= state;
+ pnp_write_config(dev, offset, byte);
+ pnp_exit_conf_state(dev);
+}
diff --git a/src/superio/winbond/common/winbond.h b/src/superio/winbond/common/winbond.h
index 1f7e7b1794..6e67eeb83d 100644
--- a/src/superio/winbond/common/winbond.h
+++ b/src/superio/winbond/common/winbond.h
@@ -20,7 +20,8 @@
#include <arch/io.h>
#include <stdint.h>
-void winbond_enable_serial(pnp_devfn_t dev, u16 iobase);
+void winbond_enable_serial(pnp_devfn_t dev, uint16_t iobase);
+void winbond_set_pinmux(pnp_devfn_t dev, uint8_t offset, uint8_t mask, uint8_t state);
void pnp_enter_conf_state(pnp_devfn_t dev);
void pnp_exit_conf_state(pnp_devfn_t dev);