diff options
Diffstat (limited to 'src/mainboard/hp/dl165_g6_fam10/bootblock.c')
-rw-r--r-- | src/mainboard/hp/dl165_g6_fam10/bootblock.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/mainboard/hp/dl165_g6_fam10/bootblock.c b/src/mainboard/hp/dl165_g6_fam10/bootblock.c new file mode 100644 index 0000000000..2c56c4ccf5 --- /dev/null +++ b/src/mainboard/hp/dl165_g6_fam10/bootblock.c @@ -0,0 +1,48 @@ +#include <device/pnp_def.h> + +#define SCH4307_CONFIG_PORT 0x162e +static inline void shc4307_enter_ext_func_mode(device_t dev) +{ + unsigned port = dev >> 8; + outb(0x55, port); +} + +static inline void shc4307_exit_ext_func_mode(device_t dev) +{ + unsigned port = dev >> 8; + outb(0xaa, port); +} + +#define CMOS_DEV PNP_DEV(SCH4307_CONFIG_PORT, 0x6) +#define KBD_DEV PNP_DEV(SCH4307_CONFIG_PORT, 0x7) +#define DBG_DEV PNP_DEV(SCH4307_CONFIG_PORT, 0x3) +#define REGS_DEV PNP_DEV(SCH4307_CONFIG_PORT, 0xa) + +void shc4307_init(void) +{ + shc4307_enter_ext_func_mode(CMOS_DEV); + pnp_set_logical_device(CMOS_DEV); /* CMOS/RTC */ + pnp_set_iobase(CMOS_DEV, PNP_IDX_IO0, 0x70); + pnp_set_iobase(CMOS_DEV, PNP_IDX_IO1, 0x72); + pnp_set_irq(CMOS_DEV, PNP_IDX_IRQ0, 8); + /* pnp_set_enable(CMOS_DEV, 3); */ + pnp_write_config(CMOS_DEV, 0x30, 3); + + pnp_set_logical_device(KBD_DEV); /* Keyboard */ + pnp_set_irq(KBD_DEV, PNP_IDX_IRQ0, 1); + pnp_set_enable(KBD_DEV, 1); + + pnp_set_logical_device(DBG_DEV); /* Debug */ + pnp_set_iobase(DBG_DEV, PNP_IDX_IO0, 0x80); + pnp_set_enable(DBG_DEV, 1); + + pnp_set_logical_device(REGS_DEV); + pnp_set_iobase(REGS_DEV, PNP_IDX_IO0, 0x600); + pnp_set_enable(REGS_DEV, 1); + + shc4307_exit_ext_func_mode(CMOS_DEV); +} + +static void bootblock_southbridge_init(void) { + shc4307_init(); +} |