From 6e9cf5e751a8506f7e815f45929a2f4c269cdbd7 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Wed, 30 Jan 2019 23:44:48 -0600 Subject: [PATCH] i801 working on Gigabyte X58-UD3R at 0x0500 --- OpenAuraSDK/OpenAuraSDK.cpp | Bin 16978 -> 16908 bytes OpenAuraSDK/OpenAuraSDK.vcxproj | 1 - OpenAuraSDK/OpenAuraSDK.vcxproj.filters | 3 --- OpenAuraSDK/i2c_smbus_i801.cpp | 9 +++++---- OpenAuraSDK/i2c_smbus_i801.h | 9 +++++++++ 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/OpenAuraSDK/OpenAuraSDK.cpp b/OpenAuraSDK/OpenAuraSDK.cpp index 711a178eda765eea38e58d22d1643d2bdcf08d57..adaab0fee9e0642a5c54aa846673d23988066d16 100644 GIT binary patch delta 141 zcmccA!r0ToxS@=jo09vvLhe8#VFLzJpfLsvI&dS6Cf9R`PJU*qGr5C{XY&oaDrNxb C@fQaG delta 207 zcmeBaVZ7ABxS@=Dau1ilWCw1J&HuPfjD+1748Tx_K> zG8pn1iWo|Ovc*6$5r|8HtY`*91|tRwhFAt`23`g(22O@FusQ_>jmf>j@{<*~cp|kK zv>7y^vei%;WFoRDnLra17;J&qlOd0xfWa7Oss`8{Fn1{cO;KRT1eyf1sdjU#T{|-X D^$jGI diff --git a/OpenAuraSDK/OpenAuraSDK.vcxproj b/OpenAuraSDK/OpenAuraSDK.vcxproj index 351f9daaa..9a42de144 100644 --- a/OpenAuraSDK/OpenAuraSDK.vcxproj +++ b/OpenAuraSDK/OpenAuraSDK.vcxproj @@ -170,7 +170,6 @@ - diff --git a/OpenAuraSDK/OpenAuraSDK.vcxproj.filters b/OpenAuraSDK/OpenAuraSDK.vcxproj.filters index d7d7b34d1..bc7567ac8 100644 --- a/OpenAuraSDK/OpenAuraSDK.vcxproj.filters +++ b/OpenAuraSDK/OpenAuraSDK.vcxproj.filters @@ -15,9 +15,6 @@ - - Header Files - Header Files diff --git a/OpenAuraSDK/i2c_smbus_i801.cpp b/OpenAuraSDK/i2c_smbus_i801.cpp index 267fc6bfc..5e5e1f0a8 100644 --- a/OpenAuraSDK/i2c_smbus_i801.cpp +++ b/OpenAuraSDK/i2c_smbus_i801.cpp @@ -93,8 +93,7 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, //if (hwpec) /* enable/disable hardware PEC */ // outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv)); //else - // outb_p(inb_p(SMBAUXCTL(priv)) & (~SMBAUXCTL_CRC), - // SMBAUXCTL(priv)); + Out32(SMBAUXCTL, Inp32(SMBAUXCTL) & (~SMBAUXCTL_CRC)); if (block) ret = i801_block_transaction(data, read_write, size, hwpec); @@ -105,8 +104,7 @@ s32 i2c_smbus_i801::i801_access(u16 addr, char read_write, u8 command, int size, time, so we forcibly disable it after every transaction. Turn off E32B for the same reason. */ //if (hwpec || block) - // outb_p(inb_p(SMBAUXCTL(priv)) & - // ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv)); + Out32(SMBAUXCTL, Inp32(SMBAUXCTL) & ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B)); if (block) goto out; @@ -299,6 +297,7 @@ int i2c_smbus_i801::i801_check_post(int status) /* try to stop the current command */ Out32(SMBHSTCNT, Inp32(SMBHSTCNT) | SMBHSTCNT_KILL); //usleep_range(1000, 2000); + Sleep(1); Out32(SMBHSTCNT, Inp32(SMBHSTCNT) & (~SMBHSTCNT_KILL)); Out32(SMBHSTSTS, STATUS_FLAGS); @@ -408,6 +407,7 @@ int i2c_smbus_i801::i801_transaction(int xact) if (result < 0) return result; + Out32(SMBHSTCNT, Inp32(SMBHSTCNT) & ~SMBHSTCNT_INTREN); //if (priv->features & FEATURE_IRQ) //{ // outb_p(xact | SMBHSTCNT_INTREN | SMBHSTCNT_START, @@ -441,6 +441,7 @@ int i2c_smbus_i801::i801_wait_byte_done() /* We will always wait for a fraction of a second! */ do { + Sleep(1); //usleep_range(250, 500); status = Inp32(SMBHSTSTS); } while (!(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_BYTE_DONE)) && (timeout++ < MAX_RETRIES)); diff --git a/OpenAuraSDK/i2c_smbus_i801.h b/OpenAuraSDK/i2c_smbus_i801.h index aeda780c7..34f1b1e9d 100644 --- a/OpenAuraSDK/i2c_smbus_i801.h +++ b/OpenAuraSDK/i2c_smbus_i801.h @@ -30,6 +30,15 @@ #define SMBSLVCMD (17 + i801_smba) /* ICH3 and later */ #define SMBNTFDADD (20 + i801_smba) /* ICH3 and later */ + +/* Auxiliary status register bits, ICH4+ only */ +#define SMBAUXSTS_CRCE BIT(0) +#define SMBAUXSTS_STCO BIT(1) + +/* Auxiliary control register bits, ICH4+ only */ +#define SMBAUXCTL_CRC BIT(0) +#define SMBAUXCTL_E32B BIT(1) + /* Other settings */ #define MAX_RETRIES 400