From patchwork Wed Sep 16 05:36:17 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: patch: disable IPMI on the dell s1850 Date: Wed, 16 Sep 2009 05:36:17 -0000 From: ron minnich X-Patchwork-Id: 255 Message-Id: <13426df10909152236r3df6ff86g29810b5aa2ad4cff@mail.gmail.com> To: coreboot attached. ron Acked-by: Peter Stuge This is a patch for killing IPMI on the s1850 -- or at least geting the BMC out of the way of the serial port. Tested extensively in user mode. Works and gets the BMC out of my way, which is good, because there are few more useless things than IPMI and the BMC. The BMC, all by itself, is the cause of most of our problems in booting and talking to these nodes. Signed-off-by: Ronald G. Minnich Index: src/mainboard/dell/s1850/auto.c =================================================================== --- src/mainboard/dell/s1850/auto.c (revision 4636) +++ src/mainboard/dell/s1850/auto.c (working copy) @@ -74,6 +74,107 @@ #include "sdram/generic_sdram.c" +/* IPMI garbage. This is all test stuff, if it really works we'll move it somewhere + */ + +#define nftransport 0xc + +#define OBF 0 +#define IBF 1 + +#define ipmidata 0xca0 +#define ipmicsr 0xca4 + + +static inline void ibfzero(void) +{ + while(inb(ipmicsr) & (1<>6) != 1) + return; + + ibfzero(); + waitobf(); + val = inb(ipmidata); + outb(0x68, ipmidata); + + /* see if it is done */ + if ((inb(ipmicsr)>>6) != 1){ + /* wait for the dummy read. Which describes this protocol */ + waitobf(); + (void)inb(ipmidata); + } +} + +static inline void ipmidelay(void) +{ + int i; + for(i = 0; i < 1000; i++) { + inb(0x80); + } +} + +static inline void bmc_foad(void) +{ + unsigned char c; + /* be safe; make sure it is really ready */ + while ((inb(ipmicsr)>>6)) { + outb(0x60, ipmicsr); + inb(ipmidata); + } + first_cmd_byte(nftransport << 2); + ipmidelay(); + next_cmd_byte(0x12); + ipmidelay(); + next_cmd_byte(2); + ipmidelay(); + last_cmd_byte(3); + ipmidelay(); +} + +/* end IPMI garbage */ static void main(unsigned long bist) { /* @@ -100,6 +201,7 @@ } } /* Setup the console */ + bmc_foad(); outb(0x87,0x2e); outb(0x87,0x2e); pnp_write_config(CONSOLE_SERIAL_DEV, 0x24, 0x84 | (1 << 6));