superio/fintek: Add required changes so F81216H can be used

The amd/lamar mainboard is the first mainboard to use the f81216h.
These changes are needed to fix up commit 27a63d77 so the
Super I/O builds and functions correctly.
  - Wrong #include name
  - Removed global variable in romstage
  - Missing "case" in switch()

Change-Id: I1b2058a915b776664fba14e4341e8a410b50330f
Signed-off-by: Dave Frodin <dave.frodin@se-eng.com>
Reviewed-on: http://review.coreboot.org/8255
Tested-by: build bot (Jenkins)
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
This commit is contained in:
Dave Frodin 2015-01-19 13:33:12 -07:00
parent 1608f3651f
commit 17ace82552
3 changed files with 26 additions and 29 deletions

View File

@ -21,12 +21,11 @@
#include <arch/io.h> #include <arch/io.h>
#include <device/pnp.h> #include <device/pnp.h>
#include <stdint.h> #include <stdint.h>
#include "fintek.h" #include "f81216h.h"
static u8 f81216h_entry_key;
#define FINTEK_EXIT_KEY 0xAA #define FINTEK_EXIT_KEY 0xAA
static void pnp_enter_conf_state(pnp_devfn_t dev) static void pnp_enter_conf_state(pnp_devfn_t dev, u8 f81216h_entry_key)
{ {
u16 port = dev >> 8; u16 port = dev >> 8;
outb(f81216h_entry_key, port); outb(f81216h_entry_key, port);
@ -40,26 +39,27 @@ static void pnp_exit_conf_state(pnp_devfn_t dev)
} }
/* Bring up early serial debugging output before the RAM is initialized. */ /* Bring up early serial debugging output before the RAM is initialized. */
void f81216h_enable_serial(pnp_devfn_t dev, u16 iobase, enum mode_key k) void f81216h_enable_serial(pnp_devfn_t dev, u16 iobase, mode_key k)
{ {
u8 key;
switch(k) { switch(k) {
MODE_6767: case MODE_6767:
f81216h_entry_key = 0x67; key = 0x67;
break; break;
MODE_7777: case MODE_7777:
f81216h_entry_key = 0x77; key = 0x77;
break; break;
MODE_8787: case MODE_8787:
f81216h_entry_key = 0x87; key = 0x87;
break; break;
MODE_A0A0: case MODE_A0A0:
f81216h_entry_key = 0xa0; key = 0xA0;
break; break;
default: default:
f81216h_entry_key = 0x77; /* (safe to be hw default) */ key = 0x77; /* try the hw default */
break;
} }
pnp_enter_conf_state(dev, key);
pnp_enter_conf_state(dev);
pnp_set_logical_device(dev); pnp_set_logical_device(dev);
pnp_set_enable(dev, 0); pnp_set_enable(dev, 0);
pnp_set_iobase(dev, PNP_IDX_IO0, iobase); pnp_set_iobase(dev, PNP_IDX_IO0, iobase);

View File

@ -34,13 +34,13 @@
* the default key. * the default key.
* See page 17 of data sheet for details. * See page 17 of data sheet for details.
*/ */
enum { typedef enum {
MODE_6767, MODE_6767,
MODE_7777, MODE_7777,
MODE_8787, MODE_8787,
MODE_A0A0, MODE_A0A0,
} mode_key; } mode_key;
void f81216h_enable_serial(pnp_devfn_t dev, u16 iobase, enum mode_key k); void f81216h_enable_serial(pnp_devfn_t dev, u16 iobase, mode_key k);
#endif /* SUPERIO_FINTEK_F81216H_H */ #endif /* SUPERIO_FINTEK_F81216H_H */

View File

@ -45,20 +45,17 @@ static void pnp_enter_ext_func_mode(struct device *dev)
* See page 17 of data sheet. * See page 17 of data sheet.
*/ */
switch(conf->conf_key_mode) { switch(conf->conf_key_mode) {
case 0: case MODE_6767:
key = 0x77; /* (default) */ case MODE_7777:
break; case MODE_8787:
case 1: case MODE_A0A0:
key = 0xa0; key = conf->conf_key_mode;
break;
case 2:
key = 0x87;
break;
case 3:
key = 0x67;
break; break;
default: default:
key = 0x77; /* safe to be hw default */ printk(BIOS_WARNING, "Warning: Undefined F81216 unlock key assignment!\n");
printk(BIOS_WARNING, "Setting conf_key_mode to default\n");
key = MODE_7777; /* try the hw default */
break;
} }
outb(key, dev->path.pnp.port); outb(key, dev->path.pnp.port);