summaryrefslogtreecommitdiff
path: root/src/superio/winbond/w83627hf
diff options
context:
space:
mode:
authorYinghai Lu <yinghailu@gmail.com>2005-07-08 02:49:49 +0000
committerYinghai Lu <yinghailu@gmail.com>2005-07-08 02:49:49 +0000
commit13f1c2af8be2cd7f7e99a678f5d428a65b771811 (patch)
tree27cad5581f1fa150f573149d48e82f70ba1b1d9f /src/superio/winbond/w83627hf
parent14cde9e96a777f9d75016a13b23fab0480515f58 (diff)
downloadcoreboot-13f1c2af8be2cd7f7e99a678f5d428a65b771811.tar.xz
eric patch
1. x86_setup_mtrr take address bit. 2. generic ht, pcix, pcie beidge... 3. scan bus and reset_bus 4. ht read ctrl to decide if the ht chain is ready 5. Intel e7520 and e7525 support 6. new ich5r support 7. intel sb 6300 support. yhlu patch 1. split x86_setup_mtrrs to fixed and var 2. if (resource->flags & IORESOURCE_FIXED ) return; in device.c pick_largest_resource 3. in_conherent.c K8_SCAN_PCI_BUS git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1982 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/superio/winbond/w83627hf')
-rw-r--r--src/superio/winbond/w83627hf/superio.c60
-rw-r--r--src/superio/winbond/w83627hf/w83627hf.h80
-rw-r--r--src/superio/winbond/w83627hf/w83627hf_early_init.c15
3 files changed, 113 insertions, 42 deletions
diff --git a/src/superio/winbond/w83627hf/superio.c b/src/superio/winbond/w83627hf/superio.c
index 57d475b00f..559bdf1189 100644
--- a/src/superio/winbond/w83627hf/superio.c
+++ b/src/superio/winbond/w83627hf/superio.c
@@ -12,6 +12,7 @@
#include <bitops.h>
#include <uart8250.h>
#include <pc80/keyboard.h>
+#include <pc80/mc146818rtc.h>
#include "chip.h"
#include "w83627hf.h"
@@ -47,33 +48,22 @@ static void enable_hwm_smbus(device_t dev) {
pnp_write_config(dev, reg, value);
}
-#if 0
-static void dump_pnp_device(device_t dev)
+static void init_acpi(device_t dev)
{
- int i;
- print_debug("\r\n");
-
- for(i = 0; i <= 255; i++) {
- uint8_t reg, val;
- if ((i & 0x0f) == 0) {
- print_debug_hex8(i);
- print_debug_char(':');
- }
- reg = i;
- if(i!=0xaa) {
- val = pnp_read_config(dev, reg);
- }
- else {
- val = 0xaa;
- }
- print_debug_char(' ');
- print_debug_hex8(val);
- if ((i & 0x0f) == 0x0f) {
- print_debug("\r\n");
- }
- }
+ uint8_t value = 0x20;
+ int power_on = 1;
+
+ get_option(&power_on, "power_on_after_fail");
+ pnp_enter_ext_func_mode(dev);
+ pnp_write_index(dev->path.u.pnp.port,7,0x0a);
+ value = pnp_read_config(dev, 0xE4);
+ value &= ~(3<<5);
+ if(power_on) {
+ value |= (1<<5);
+ }
+ pnp_write_config(dev, 0xE4, value);
+ pnp_exit_ext_func_mode(dev);
}
-#endif
static void init_hwm(unsigned long base)
{
@@ -105,7 +95,6 @@ static void init_hwm(unsigned long base)
}
}
-
static void w83627hf_init(device_t dev)
{
struct superio_winbond_w83627hf_config *conf;
@@ -133,21 +122,16 @@ static void w83627hf_init(device_t dev)
#define HWM_INDEX_PORT 5
init_hwm(res0->base + HWM_INDEX_PORT);
break;
+ case W83627HF_ACPI:
+ init_acpi(dev);
+ break;
}
-
}
void w83627hf_pnp_set_resources(device_t dev)
{
-
pnp_enter_ext_func_mode(dev);
-
pnp_set_resources(dev);
-
-#if 0
- dump_pnp_device(dev);
-#endif
-
pnp_exit_ext_func_mode(dev);
}
@@ -155,20 +139,13 @@ void w83627hf_pnp_set_resources(device_t dev)
void w83627hf_pnp_enable_resources(device_t dev)
{
pnp_enter_ext_func_mode(dev);
-
pnp_enable_resources(dev);
-
switch(dev->path.u.pnp.device) {
case W83627HF_HWM:
printk_debug("w83627hf hwm smbus enabled\n");
enable_hwm_smbus(dev);
break;
}
-
-#if 0
- dump_pnp_device(dev);
-#endif
-
pnp_exit_ext_func_mode(dev);
}
@@ -219,4 +196,3 @@ struct chip_operations superio_winbond_w83627hf_ops = {
CHIP_NAME("Winbond w83627hf")
.enable_dev = enable_dev,
};
-
diff --git a/src/superio/winbond/w83627hf/w83627hf.h b/src/superio/winbond/w83627hf/w83627hf.h
index 0cf16310c3..7cd664cd16 100644
--- a/src/superio/winbond/w83627hf/w83627hf.h
+++ b/src/superio/winbond/w83627hf/w83627hf.h
@@ -9,3 +9,83 @@
#define W83627HF_GPIO3 9
#define W83627HF_ACPI 10
#define W83627HF_HWM 11 /* Hardware Monitor */
+
+//#define W83627HF_GPIO_DEV PNP_DEV(0x2e, W83627HF_GPIO)
+//#define W83627HF_XBUS_DEV PNP_DEV(0x2e, W83627HF_XBUS)
+
+#define W83627HF_GPSEL 0xf0
+#define W83627HF_GPCFG1 0xf1
+#define W83627HF_GPEVR 0xf2
+#define W83627HF_GPCFG2 0xf3
+#define W83627HF_EXTCFG 0xf4
+#define W83627HF_IOEXT1A 0xf5
+#define W83627HF_IOEXT1B 0xf6
+#define W83627HF_IOEXT2A 0xf7
+#define W83627HF_IOEXT2B 0xf8
+
+#define W83627HF_GPDO_0 0x00
+#define W83627HF_GPDI_0 0x01
+#define W83627HF_GPDO_1 0x02
+#define W83627HF_GPDI_1 0x03
+#define W83627HF_GPEVEN_1 0x04
+#define W83627HF_GPEVST_1 0x05
+#define W83627HF_GPDO_2 0x06
+#define W83627HF_GPDI_2 0x07
+#define W83627HF_GPDO_3 0x08
+#define W83627HF_GPDI_3 0x09
+#define W83627HF_GPDO_4 0x0a
+#define W83627HF_GPDI_4 0x0b
+#define W83627HF_GPEVEN_4 0x0c
+#define W83627HF_GPEVST_4 0x0d
+#define W83627HF_GPDO_5 0x0e
+#define W83627HF_GPDI_5 0x0f
+#define W83627HF_GPDO_6 0x10
+#define W83627HF_GPDO_7A 0x11
+#define W83627HF_GPDO_7B 0x12
+#define W83627HF_GPDO_7C 0x13
+#define W83627HF_GPDO_7D 0x14
+#define W83627HF_GPDI_7A 0x15
+#define W83627HF_GPDI_7B 0x16
+#define W83627HF_GPDI_7C 0x17
+#define W83627HF_GPDI_7D 0x18
+
+#define W83627HF_XIOCNF 0xf0
+#define W83627HF_XIOBA1H 0xf1
+#define W83627HF_XIOBA1L 0xf2
+#define W83627HF_XIOSIZE1 0xf3
+#define W83627HF_XIOBA2H 0xf4
+#define W83627HF_XIOBA2L 0xf5
+#define W83627HF_XIOSIZE2 0xf6
+#define W83627HF_XMEMCNF1 0xf7
+#define W83627HF_XMEMCNF2 0xf8
+#define W83627HF_XMEMBAH 0xf9
+#define W83627HF_XMEMBAL 0xfa
+#define W83627HF_XMEMSIZE 0xfb
+#define W83627HF_XIRQMAP1 0xfc
+#define W83627HF_XIRQMAP2 0xfd
+#define W83627HF_XBIMM 0xfe
+#define W83627HF_XBBSL 0xff
+
+#define W83627HF_XBCNF 0x00
+#define W83627HF_XZCNF0 0x01
+#define W83627HF_XZCNF1 0x02
+#define W83627HF_XIRQC0 0x04
+#define W83627HF_XIRQC1 0x05
+#define W83627HF_XIRQC2 0x06
+#define W83627HF_XIMA0 0x08
+#define W83627HF_XIMA1 0x09
+#define W83627HF_XIMA2 0x0a
+#define W83627HF_XIMA3 0x0b
+#define W83627HF_XIMD 0x0c
+#define W83627HF_XZCNF2 0x0d
+#define W83627HF_XZCNF3 0x0e
+#define W83627HF_XZM0 0x0f
+#define W83627HF_XZM1 0x10
+#define W83627HF_XZM2 0x11
+#define W83627HF_XZM3 0x12
+#define W83627HF_HAP0 0x13
+#define W83627HF_HAP1 0x14
+#define W83627HF_XSCNF 0x15
+#define W83627HF_XWBCNF 0x16
+
+
diff --git a/src/superio/winbond/w83627hf/w83627hf_early_init.c b/src/superio/winbond/w83627hf/w83627hf_early_init.c
new file mode 100644
index 0000000000..e449c4ae9c
--- /dev/null
+++ b/src/superio/winbond/w83627hf/w83627hf_early_init.c
@@ -0,0 +1,15 @@
+#include <arch/romcc_io.h>
+#include "w83627hf.h"
+
+static void w83627hf_disable_dev(device_t dev)
+{
+ pnp_set_logical_device(dev);
+ pnp_set_enable(dev, 0);
+}
+static void w83627hf_enable_dev(device_t dev, unsigned iobase)
+{
+ pnp_set_logical_device(dev);
+ pnp_set_enable(dev, 0);
+ pnp_set_iobase(dev, PNP_IDX_IO0, iobase);
+ pnp_set_enable(dev, 1);
+}