Add support to extended EC series

Signed-off-by: Anton Kochkov <anton.kochkov@gmail.com>
Acked-by: Stefan Reinauer <stepan@coresystems.de>



git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5650 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
Anton Kochkov 2010-06-29 21:13:20 +00:00 committed by Stefan Reinauer
parent 9a82eebe1a
commit 7e59f769ef
3 changed files with 52 additions and 19 deletions

View File

@ -38,7 +38,7 @@ int send_ec_command(uint8_t command)
debug(".");
}
if (!timeout) {
printf("Timeout while sending command 0x%02x to EC!\n",
debug("Timeout while sending command 0x%02x to EC!\n",
command);
// return -1;
}
@ -57,8 +57,8 @@ int send_ec_data(uint8_t data)
if ((timeout & 0xff) == 0)
debug(".");
}
if (!timeout) {
printf("Timeout while sending data 0x%02x to EC!\n", data);
if (timeout) {
debug("Timeout while sending data 0x%02x to EC!\n", data);
// return -1;
}
@ -89,7 +89,7 @@ uint8_t recv_ec_data(void)
debug(".");
}
if (!timeout) {
printf("\nTimeout while receiving data from EC!\n");
debug("\nTimeout while receiving data from EC!\n");
// return -1;
}
@ -101,15 +101,37 @@ uint8_t recv_ec_data(void)
uint8_t ec_read(uint8_t addr)
{
send_ec_command(0x80);
send_ec_command(RD_EC);
send_ec_data(addr);
return recv_ec_data();
}
uint8_t ec_ext_read(uint16_t addr)
{
send_ec_command(WR_EC);
send_ec_data(0x02);
send_ec_data(addr & 0xff);
send_ec_command(RX_EC);
send_ec_data(addr >> 8);
return recv_ec_data();
}
int ec_ext_write(uint16_t addr, uint8_t data)
{
send_ec_command(WR_EC);
send_ec_data(0x02);
send_ec_data(addr & 0xff);
send_ec_command(WX_EC);
send_ec_data(addr >> 8);
return send_ec_data(data);
}
int ec_write(uint8_t addr, uint8_t data)
{
send_ec_command(0x81);
send_ec_command(WR_EC);
send_ec_data(addr);
return send_ec_data(data);

View File

@ -40,12 +40,16 @@
#define BE_EC 0x82 // Burst Enable Embedded Controller
#define BD_EC 0x83 // Burst Disable Embedded Controller
#define QR_EC 0x84 // Query Embedded Controller
#define RX_EC 0xf0 // Read Extended operation
#define WX_EC 0xf1 // Write Extended operation
int send_ec_command(uint8_t command);
int send_ec_data(uint8_t data);
int send_ec_data_nowait(uint8_t data);
uint8_t recv_ec_data(void);
uint8_t ec_read(uint8_t addr);
int ec_write(uint8_t addr, uint8_t data);
uint8_t ec_ext_read(uint16_t addr);
int ec_ext_write(uint16_t addr, uint8_t data);
uint8_t ec_idx_read(uint16_t addr);
#endif

View File

@ -45,16 +45,17 @@ void print_version(void)
void print_usage(const char *name)
{
printf("usage: %s [-vh?V]\n", name);
printf("usage: %s [-vh?Vi]\n", name);
printf("\n"
" -v | --version: print the version\n"
" -h | --help: print this help\n\n"
" -V | --verbose: print debug information\n"
" -i | --idx: print IDX RAM\n"
"\n");
exit(1);
}
int verbose = 0;
int verbose = 0, dump_idx = 0;
int main(int argc, char *argv[])
{
@ -64,10 +65,11 @@ int main(int argc, char *argv[])
{"version", 0, 0, 'v'},
{"help", 0, 0, 'h'},
{"verbose", 0, 0, 'V'},
{"idx", 0, 0, 'i'},
{0, 0, 0, 0}
};
while ((opt = getopt_long(argc, argv, "vh?V",
while ((opt = getopt_long(argc, argv, "vh?Vi",
long_options, &option_index)) != EOF) {
switch (opt) {
case 'v':
@ -77,6 +79,8 @@ int main(int argc, char *argv[])
case 'V':
verbose = 1;
break;
case 'i':
dump_idx = 1;
case 'h':
case '?':
default:
@ -99,6 +103,7 @@ int main(int argc, char *argv[])
}
printf("\n\n");
if (dump_idx) {
printf("EC IDX RAM:\n");
for (i = 0; i < 0x10000; i++) {
if ((i % 0x10) == 0)
@ -106,7 +111,9 @@ int main(int argc, char *argv[])
printf("%02x ", ec_idx_read(i));
}
printf("\n\n");
} else {
printf("Not dumping EC IDX RAM.\n");
}
return 0;
}