superio/common/conf_mode.c: Introduce 'new' enter/exit keys for SIO's

Super I/O manufactures have found new and innovative ways to enter
and exit out of LDN config in PNP config space.

Change-Id: Id3f5882664f1b2b18b49f32373430cf4b037ad22
Signed-off-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Reviewed-on: http://review.coreboot.org/7308
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Bruce Griffith <Bruce.Griffith@se-eng.com>
This commit is contained in:
Edward O'Callaghan 2014-11-01 09:14:58 +11:00
parent d2040737a9
commit b14bf88697
2 changed files with 39 additions and 0 deletions

View File

@ -25,13 +25,19 @@
/* Common enter/exit implementations */ /* Common enter/exit implementations */
void pnp_enter_conf_mode_55(struct device *dev); void pnp_enter_conf_mode_55(struct device *dev);
void pnp_enter_conf_mode_6767(struct device *dev);
void pnp_enter_conf_mode_7777(struct device *dev);
void pnp_enter_conf_mode_8787(struct device *dev); void pnp_enter_conf_mode_8787(struct device *dev);
void pnp_enter_conf_mode_a0a0(struct device *dev);
void pnp_exit_conf_mode_aa(struct device *dev); void pnp_exit_conf_mode_aa(struct device *dev);
void pnp_enter_conf_mode_870155aa(struct device *dev); void pnp_enter_conf_mode_870155aa(struct device *dev);
void pnp_exit_conf_mode_0202(struct device *dev); void pnp_exit_conf_mode_0202(struct device *dev);
extern const struct pnp_mode_ops pnp_conf_mode_55_aa; extern const struct pnp_mode_ops pnp_conf_mode_55_aa;
extern const struct pnp_mode_ops pnp_conf_mode_6767_aa;
extern const struct pnp_mode_ops pnp_conf_mode_7777_aa;
extern const struct pnp_mode_ops pnp_conf_mode_8787_aa; extern const struct pnp_mode_ops pnp_conf_mode_8787_aa;
extern const struct pnp_mode_ops pnp_conf_mode_a0a0_aa;
extern const struct pnp_mode_ops pnp_conf_mode_870155_aa; extern const struct pnp_mode_ops pnp_conf_mode_870155_aa;
#endif /* DEVICE_PNP_CONF_MODE_H */ #endif /* DEVICE_PNP_CONF_MODE_H */

View File

@ -28,12 +28,30 @@ void pnp_enter_conf_mode_55(struct device *dev)
outb(0x55, dev->path.pnp.port); outb(0x55, dev->path.pnp.port);
} }
void pnp_enter_conf_mode_6767(struct device *dev)
{
outb(0x67, dev->path.pnp.port);
outb(0x67, dev->path.pnp.port);
}
void pnp_enter_conf_mode_7777(struct device *dev)
{
outb(0x77, dev->path.pnp.port);
outb(0x77, dev->path.pnp.port);
}
void pnp_enter_conf_mode_8787(struct device *dev) void pnp_enter_conf_mode_8787(struct device *dev)
{ {
outb(0x87, dev->path.pnp.port); outb(0x87, dev->path.pnp.port);
outb(0x87, dev->path.pnp.port); outb(0x87, dev->path.pnp.port);
} }
void pnp_enter_conf_mode_a0a0(struct device *dev)
{
outb(0xa0, dev->path.pnp.port);
outb(0xa0, dev->path.pnp.port);
}
void pnp_exit_conf_mode_aa(struct device *dev) void pnp_exit_conf_mode_aa(struct device *dev)
{ {
outb(0xaa, dev->path.pnp.port); outb(0xaa, dev->path.pnp.port);
@ -63,11 +81,26 @@ const struct pnp_mode_ops pnp_conf_mode_55_aa = {
.exit_conf_mode = pnp_exit_conf_mode_aa, .exit_conf_mode = pnp_exit_conf_mode_aa,
}; };
const struct pnp_mode_ops pnp_conf_mode_6767_aa = {
.enter_conf_mode = pnp_enter_conf_mode_6767,
.exit_conf_mode = pnp_exit_conf_mode_aa,
};
const struct pnp_mode_ops pnp_conf_mode_7777_aa = {
.enter_conf_mode = pnp_enter_conf_mode_7777,
.exit_conf_mode = pnp_exit_conf_mode_aa,
};
const struct pnp_mode_ops pnp_conf_mode_8787_aa = { const struct pnp_mode_ops pnp_conf_mode_8787_aa = {
.enter_conf_mode = pnp_enter_conf_mode_8787, .enter_conf_mode = pnp_enter_conf_mode_8787,
.exit_conf_mode = pnp_exit_conf_mode_aa, .exit_conf_mode = pnp_exit_conf_mode_aa,
}; };
const struct pnp_mode_ops pnp_conf_mode_a0a0_aa = {
.enter_conf_mode = pnp_enter_conf_mode_a0a0,
.exit_conf_mode = pnp_exit_conf_mode_aa,
};
const struct pnp_mode_ops pnp_conf_mode_870155_aa = { const struct pnp_mode_ops pnp_conf_mode_870155_aa = {
.enter_conf_mode = pnp_enter_conf_mode_870155aa, .enter_conf_mode = pnp_enter_conf_mode_870155aa,
.exit_conf_mode = pnp_exit_conf_mode_0202, .exit_conf_mode = pnp_exit_conf_mode_0202,