mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 15:12:36 +02:00
Convert various prints to use msg_p* and msg_g* respectively
Convert programmer print messages to msg_p* convert general print messages to msg_g* a few fixes as suggested by Carl-Daniel. Corresponding to flashrom svn r997. Signed-off-by: Sean Nelson <audiohacked@gmail.com> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net>
This commit is contained in:
parent
270237687a
commit
316a29f33f
@ -87,7 +87,7 @@ static int enable_flash_decode_superio(void)
|
|||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf_debug("Unhandled Super I/O type!\n");
|
msg_pdbg("Unhandled Super I/O type!\n");
|
||||||
ret = -1;
|
ret = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -108,7 +108,7 @@ static int w83627hf_gpio24_raise(uint16_t port, const char *name)
|
|||||||
|
|
||||||
/* Is this the W83627HF? */
|
/* Is this the W83627HF? */
|
||||||
if (sio_read(port, 0x20) != 0x52) { /* Super I/O device ID reg. */
|
if (sio_read(port, 0x20) != 0x52) { /* Super I/O device ID reg. */
|
||||||
fprintf(stderr, "\nERROR: %s: W83627HF: Wrong ID: 0x%02X.\n",
|
msg_perr("\nERROR: %s: W83627HF: Wrong ID: 0x%02X.\n",
|
||||||
name, sio_read(port, 0x20));
|
name, sio_read(port, 0x20));
|
||||||
w836xx_ext_leave(port);
|
w836xx_ext_leave(port);
|
||||||
return -1;
|
return -1;
|
||||||
@ -148,7 +148,7 @@ static int w83627thf_gpio4_4_raise(uint16_t port, const char *name)
|
|||||||
|
|
||||||
/* Is this the W83627THF? */
|
/* Is this the W83627THF? */
|
||||||
if (sio_read(port, 0x20) != 0x82) { /* Super I/O device ID reg. */
|
if (sio_read(port, 0x20) != 0x82) { /* Super I/O device ID reg. */
|
||||||
fprintf(stderr, "\nERROR: %s: W83627THF: Wrong ID: 0x%02X.\n",
|
msg_perr("\nERROR: %s: W83627THF: Wrong ID: 0x%02X.\n",
|
||||||
name, sio_read(port, 0x20));
|
name, sio_read(port, 0x20));
|
||||||
w836xx_ext_leave(port);
|
w836xx_ext_leave(port);
|
||||||
return -1;
|
return -1;
|
||||||
@ -253,20 +253,20 @@ static int pc87360_gpio_set(uint8_t gpio, int raise)
|
|||||||
uint8_t id, val;
|
uint8_t id, val;
|
||||||
|
|
||||||
if (gpio_bank > 4) {
|
if (gpio_bank > 4) {
|
||||||
fprintf(stderr, "PC87360: Invalid GPIO %d\n", gpio);
|
msg_perr("PC87360: Invalid GPIO %d\n", gpio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
id = sio_read(0x2E, 0x20);
|
id = sio_read(0x2E, 0x20);
|
||||||
if (id != 0xE1) {
|
if (id != 0xE1) {
|
||||||
fprintf(stderr, "PC87360: unexpected ID %02x\n", id);
|
msg_perr("PC87360: unexpected ID %02x\n", id);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sio_write(0x2E, 0x07, 0x07); /* Select GPIO device */
|
sio_write(0x2E, 0x07, 0x07); /* Select GPIO device */
|
||||||
baseport = (sio_read(0x2E, 0x60) << 8) | sio_read(0x2E, 0x61);
|
baseport = (sio_read(0x2E, 0x60) << 8) | sio_read(0x2E, 0x61);
|
||||||
if ((baseport & 0xFFF0) == 0xFFF0 || baseport == 0) {
|
if ((baseport & 0xFFF0) == 0xFFF0 || baseport == 0) {
|
||||||
fprintf (stderr, "PC87360: invalid GPIO base address %04x\n",
|
msg_perr("PC87360: invalid GPIO base address %04x\n",
|
||||||
baseport);
|
baseport);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -300,7 +300,7 @@ static int via_vt823x_gpio_set(uint8_t gpio, int raise)
|
|||||||
case 0x3337: /* VT8237A */
|
case 0x3337: /* VT8237A */
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "\nERROR: VT823x ISA bridge not found.\n");
|
msg_perr("\nERROR: VT823x ISA bridge not found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -319,7 +319,7 @@ static int via_vt823x_gpio_set(uint8_t gpio, int raise)
|
|||||||
val |= 0x01;
|
val |= 0x01;
|
||||||
pci_write_byte(dev, 0xE4, val);
|
pci_write_byte(dev, 0xE4, val);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "\nERROR: "
|
msg_perr("\nERROR: "
|
||||||
"VT823x GPIO%02d is not implemented.\n", gpio);
|
"VT823x GPIO%02d is not implemented.\n", gpio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -411,7 +411,7 @@ static int board_asus_p5a(const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (i == ASUSP5A_LOOP) {
|
if (i == ASUSP5A_LOOP) {
|
||||||
printf("%s: Unable to contact device.\n", name);
|
msg_perr("%s: Unable to contact device.\n", name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -427,7 +427,7 @@ static int board_asus_p5a(const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((i == ASUSP5A_LOOP) || !(tmp & 0x10)) {
|
if ((i == ASUSP5A_LOOP) || !(tmp & 0x10)) {
|
||||||
printf("%s: failed to read device.\n", name);
|
msg_perr("%s: failed to read device.\n", name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +454,7 @@ static int board_asus_p5a(const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((i == ASUSP5A_LOOP) || !(tmp & 0x10)) {
|
if ((i == ASUSP5A_LOOP) || !(tmp & 0x10)) {
|
||||||
printf("%s: failed to write to device.\n", name);
|
msg_perr("%s: failed to write to device.\n", name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -492,8 +492,7 @@ static int board_shuttle_fn25(const char *name)
|
|||||||
|
|
||||||
dev = pci_dev_find(0x10DE, 0x0050); /* NVIDIA CK804 ISA Bridge. */
|
dev = pci_dev_find(0x10DE, 0x0050); /* NVIDIA CK804 ISA Bridge. */
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
fprintf(stderr,
|
msg_perr("\nERROR: NVIDIA nForce4 ISA bridge not found.\n");
|
||||||
"\nERROR: NVIDIA nForce4 ISA bridge not found.\n");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -513,7 +512,7 @@ static int nvidia_mcp_gpio_set(int gpio, int raise)
|
|||||||
uint8_t tmp;
|
uint8_t tmp;
|
||||||
|
|
||||||
if ((gpio < 0) || (gpio >= 0x40)) {
|
if ((gpio < 0) || (gpio >= 0x40)) {
|
||||||
fprintf(stderr, "\nERROR: unsupported GPIO: %d.\n", gpio);
|
msg_perr("\nERROR: unsupported GPIO: %d.\n", gpio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -531,8 +530,7 @@ static int nvidia_mcp_gpio_set(int gpio, int raise)
|
|||||||
case 0x0264: /* MCP51 */
|
case 0x0264: /* MCP51 */
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fprintf(stderr,
|
msg_perr("\nERROR: no NVIDIA LPC/SMBus controller found.\n");
|
||||||
"\nERROR: no NVIDIA LPC/SMBus controller found.\n");
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -661,20 +659,20 @@ static int intel_piix4_gpo_set(unsigned int gpo, int raise)
|
|||||||
|
|
||||||
dev = pci_dev_find(0x8086, 0x7110); /* Intel PIIX4 ISA bridge */
|
dev = pci_dev_find(0x8086, 0x7110); /* Intel PIIX4 ISA bridge */
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
fprintf(stderr, "\nERROR: Intel PIIX4 ISA bridge not found.\n");
|
msg_perr("\nERROR: Intel PIIX4 ISA bridge not found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sanity check */
|
/* sanity check */
|
||||||
if (gpo > 30) {
|
if (gpo > 30) {
|
||||||
fprintf(stderr, "\nERROR: Intel PIIX4 has no GPO%d.\n", gpo);
|
msg_perr("\nERROR: Intel PIIX4 has no GPO%d.\n", gpo);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* these are dual function pins which are most likely in use already */
|
/* these are dual function pins which are most likely in use already */
|
||||||
if (((gpo >= 1) && (gpo <= 7)) ||
|
if (((gpo >= 1) && (gpo <= 7)) ||
|
||||||
((gpo >= 9) && (gpo <= 21)) || (gpo == 29)) {
|
((gpo >= 9) && (gpo <= 21)) || (gpo == 29)) {
|
||||||
fprintf(stderr, "\nERROR: Unsupported PIIX4 GPO%d.\n", gpo);
|
msg_perr("\nERROR: Unsupported PIIX4 GPO%d.\n", gpo);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,7 +701,7 @@ static int intel_piix4_gpo_set(unsigned int gpo, int raise)
|
|||||||
|
|
||||||
dev = pci_dev_find(0x8086, 0x7113); /* Intel PIIX4 PM */
|
dev = pci_dev_find(0x8086, 0x7113); /* Intel PIIX4 PM */
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
fprintf(stderr, "\nERROR: Intel PIIX4 PM not found.\n");
|
msg_perr("\nERROR: Intel PIIX4 PM not found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -805,7 +803,7 @@ static int intel_ich_gpio_set(int gpio, int raise)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
fprintf(stderr, "\nERROR: No Known Intel LPC Bridge found.\n");
|
msg_perr("\nERROR: No Known Intel LPC Bridge found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -823,12 +821,12 @@ static int intel_ich_gpio_set(int gpio, int raise)
|
|||||||
allowed = (intel_ich_gpio_table[i].bank2 >> (gpio - 64)) & 0x01;
|
allowed = (intel_ich_gpio_table[i].bank2 >> (gpio - 64)) & 0x01;
|
||||||
|
|
||||||
if (!allowed) {
|
if (!allowed) {
|
||||||
fprintf(stderr, "\nERROR: This Intel LPC Bridge does not allow"
|
msg_perr("\nERROR: This Intel LPC Bridge does not allow"
|
||||||
" setting GPIO%02d\n", gpio);
|
" setting GPIO%02d\n", gpio);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\nIntel ICH LPC Bridge: %sing GPIO%02d.\n",
|
msg_pdbg("\nIntel ICH LPC Bridge: %sing GPIO%02d.\n",
|
||||||
raise ? "Rais" : "Dropp", gpio);
|
raise ? "Rais" : "Dropp", gpio);
|
||||||
|
|
||||||
if (gpio < 32) {
|
if (gpio < 32) {
|
||||||
@ -847,7 +845,7 @@ static int intel_ich_gpio_set(int gpio, int raise)
|
|||||||
if (dev->device_id > 0x2800) {
|
if (dev->device_id > 0x2800) {
|
||||||
tmp = INL(base);
|
tmp = INL(base);
|
||||||
if (!(tmp & (1 << gpio))) {
|
if (!(tmp & (1 << gpio))) {
|
||||||
fprintf(stderr, "\nERROR: This Intel LPC Bridge"
|
msg_perr("\nERROR: This Intel LPC Bridge"
|
||||||
" does not allow setting GPIO%02d\n",
|
" does not allow setting GPIO%02d\n",
|
||||||
gpio);
|
gpio);
|
||||||
return -1;
|
return -1;
|
||||||
@ -879,7 +877,7 @@ static int intel_ich_gpio_set(int gpio, int raise)
|
|||||||
if (dev->device_id > 0x2800) {
|
if (dev->device_id > 0x2800) {
|
||||||
tmp = INL(base + 30);
|
tmp = INL(base + 30);
|
||||||
if (!(tmp & (1 << gpio))) {
|
if (!(tmp & (1 << gpio))) {
|
||||||
fprintf(stderr, "\nERROR: This Intel LPC Bridge"
|
msg_perr("\nERROR: This Intel LPC Bridge"
|
||||||
" does not allow setting GPIO%02d\n",
|
" does not allow setting GPIO%02d\n",
|
||||||
gpio + 32);
|
gpio + 32);
|
||||||
return -1;
|
return -1;
|
||||||
@ -908,7 +906,7 @@ static int intel_ich_gpio_set(int gpio, int raise)
|
|||||||
|
|
||||||
tmp = INL(base + 40);
|
tmp = INL(base + 40);
|
||||||
if (!(tmp & (1 << gpio))) {
|
if (!(tmp & (1 << gpio))) {
|
||||||
fprintf(stderr, "\nERROR: This Intel LPC Bridge does "
|
msg_perr("\nERROR: This Intel LPC Bridge does "
|
||||||
"not allow setting GPIO%02d\n", gpio + 64);
|
"not allow setting GPIO%02d\n", gpio + 64);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1051,11 +1049,11 @@ static int via_apollo_gpo_set(int gpio, int raise)
|
|||||||
/* VT82C686 Power management */
|
/* VT82C686 Power management */
|
||||||
dev = pci_dev_find(0x1106, 0x3057);
|
dev = pci_dev_find(0x1106, 0x3057);
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
fprintf(stderr, "\nERROR: VT82C686 PM device not found.\n");
|
msg_perr("\nERROR: VT82C686 PM device not found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\nVIA Apollo ACPI: %sing GPIO%02d.\n",
|
msg_pdbg("\nVIA Apollo ACPI: %sing GPIO%02d.\n",
|
||||||
raise ? "Rais" : "Dropp", gpio);
|
raise ? "Rais" : "Dropp", gpio);
|
||||||
|
|
||||||
/* select GPO function on multiplexed pins */
|
/* select GPO function on multiplexed pins */
|
||||||
@ -1118,7 +1116,7 @@ static int board_msi_651ml(const char *name)
|
|||||||
|
|
||||||
dev = pci_dev_find(0x1039, 0x0962);
|
dev = pci_dev_find(0x1039, 0x0962);
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
fprintf(stderr, "Expected south bridge not found\n");
|
msg_perr("Expected south bridge not found\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1151,7 +1149,7 @@ static uint16_t smsc_find_runtime(uint16_t sio_port, uint16_t chip_id,
|
|||||||
/* Verify the chip ID. */
|
/* Verify the chip ID. */
|
||||||
OUTB(0x55, sio_port); /* Enable configuration. */
|
OUTB(0x55, sio_port); /* Enable configuration. */
|
||||||
if (sio_read(sio_port, 0x20) != chip_id) {
|
if (sio_read(sio_port, 0x20) != chip_id) {
|
||||||
fprintf(stderr, "\nERROR: SMSC Super I/O not found.\n");
|
msg_perr("\nERROR: SMSC Super I/O not found.\n");
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1163,7 +1161,7 @@ static uint16_t smsc_find_runtime(uint16_t sio_port, uint16_t chip_id,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (rt_port == 0) {
|
if (rt_port == 0) {
|
||||||
fprintf(stderr, "\nERROR: "
|
msg_perr("\nERROR: "
|
||||||
"Super I/O runtime interface not available.\n");
|
"Super I/O runtime interface not available.\n");
|
||||||
}
|
}
|
||||||
out:
|
out:
|
||||||
@ -1183,7 +1181,7 @@ static int board_mitac_6513wu(const char *name)
|
|||||||
|
|
||||||
dev = pci_dev_find(0x8086, 0x2410); /* Intel 82801AA ISA bridge */
|
dev = pci_dev_find(0x8086, 0x2410); /* Intel 82801AA ISA bridge */
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
fprintf(stderr, "\nERROR: Intel 82801AA ISA bridge not found.\n");
|
msg_perr("\nERROR: Intel 82801AA ISA bridge not found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1218,7 +1216,7 @@ static int board_asus_a7v8x(const char *name)
|
|||||||
w836xx_ext_leave(0x2E);
|
w836xx_ext_leave(0x2E);
|
||||||
|
|
||||||
if (id != 0x8701) {
|
if (id != 0x8701) {
|
||||||
fprintf(stderr, "\nERROR: IT8703F Super I/O not found.\n");
|
msg_perr("\nERROR: IT8703F Super I/O not found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1229,7 +1227,7 @@ static int board_asus_a7v8x(const char *name)
|
|||||||
w836xx_ext_leave(0x2E);
|
w836xx_ext_leave(0x2E);
|
||||||
|
|
||||||
if (!base) {
|
if (!base) {
|
||||||
fprintf(stderr, "\nERROR: Failed to read IT8703F Super I/O GPIO"
|
msg_perr("\nERROR: Failed to read IT8703F Super I/O GPIO"
|
||||||
" Base.\n");
|
" Base.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1259,8 +1257,7 @@ static int it8712f_gpio_set(unsigned int line, int raise)
|
|||||||
/* Check line */
|
/* Check line */
|
||||||
if ((port > 4) || /* also catches unsigned -1 */
|
if ((port > 4) || /* also catches unsigned -1 */
|
||||||
((port < 4) && (line > 7)) || ((port == 4) && (line > 5))) {
|
((port < 4) && (line > 7)) || ((port == 4) && (line > 5))) {
|
||||||
fprintf(stderr,
|
msg_perr("\nERROR: Unsupported IT8712F GPIO Line %02d.\n", line);
|
||||||
"\nERROR: Unsupported IT8712F GPIO Line %02d.\n", line);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1270,7 +1267,7 @@ static int it8712f_gpio_set(unsigned int line, int raise)
|
|||||||
exit_conf_mode_ite(0x2E);
|
exit_conf_mode_ite(0x2E);
|
||||||
|
|
||||||
if (id != 0x8712) {
|
if (id != 0x8712) {
|
||||||
fprintf(stderr, "\nERROR: IT8712F Super I/O not found.\n");
|
msg_perr("\nERROR: IT8712F Super I/O not found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1281,7 +1278,7 @@ static int it8712f_gpio_set(unsigned int line, int raise)
|
|||||||
exit_conf_mode_ite(0x2E);
|
exit_conf_mode_ite(0x2E);
|
||||||
|
|
||||||
if (!base) {
|
if (!base) {
|
||||||
fprintf(stderr, "\nERROR: Failed to read IT8712F Super I/O GPIO"
|
msg_perr("\nERROR: Failed to read IT8712F Super I/O GPIO"
|
||||||
" Base.\n");
|
" Base.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -1450,10 +1447,10 @@ static struct board_pciid_enable *board_match_coreboot_name(const char *vendor,
|
|||||||
|
|
||||||
if (partmatch) {
|
if (partmatch) {
|
||||||
/* a second entry has a matching part name */
|
/* a second entry has a matching part name */
|
||||||
printf("AMBIGUOUS BOARD NAME: %s\n", part);
|
msg_pinfo("AMBIGUOUS BOARD NAME: %s\n", part);
|
||||||
printf("At least vendors '%s' and '%s' match.\n",
|
msg_pinfo("At least vendors '%s' and '%s' match.\n",
|
||||||
partmatch->lb_vendor, board->lb_vendor);
|
partmatch->lb_vendor, board->lb_vendor);
|
||||||
printf("Please use the full -m vendor:part syntax.\n");
|
msg_perr("Please use the full -m vendor:part syntax.\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
partmatch = board;
|
partmatch = board;
|
||||||
@ -1467,7 +1464,7 @@ static struct board_pciid_enable *board_match_coreboot_name(const char *vendor,
|
|||||||
* coreboot table. If it was, the coreboot implementor is
|
* coreboot table. If it was, the coreboot implementor is
|
||||||
* expected to fix flashrom, too.
|
* expected to fix flashrom, too.
|
||||||
*/
|
*/
|
||||||
printf("\nUnknown vendor:board from -m option: %s:%s\n\n",
|
msg_perr("\nUnknown vendor:board from -m option: %s:%s\n\n",
|
||||||
vendor, part);
|
vendor, part);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1507,7 +1504,7 @@ static struct board_pciid_enable *board_match_pci_card_ids(void)
|
|||||||
|
|
||||||
if (board->dmi_pattern) {
|
if (board->dmi_pattern) {
|
||||||
if (!has_dmi_support) {
|
if (!has_dmi_support) {
|
||||||
fprintf(stderr, "WARNING: Can't autodetect %s %s,"
|
msg_perr("WARNING: Can't autodetect %s %s,"
|
||||||
" DMI info unavailable.\n",
|
" DMI info unavailable.\n",
|
||||||
board->vendor_name, board->board_name);
|
board->vendor_name, board->board_name);
|
||||||
continue;
|
continue;
|
||||||
@ -1536,7 +1533,7 @@ int board_flash_enable(const char *vendor, const char *part)
|
|||||||
|
|
||||||
if (board && board->status == NT) {
|
if (board && board->status == NT) {
|
||||||
if (!force_boardenable) {
|
if (!force_boardenable) {
|
||||||
printf("WARNING: Your mainboard is %s %s, but the mainboard-specific\n"
|
msg_pinfo("WARNING: Your mainboard is %s %s, but the mainboard-specific\n"
|
||||||
"code has not been tested, and thus will not not be executed by default.\n"
|
"code has not been tested, and thus will not not be executed by default.\n"
|
||||||
"Depending on your hardware environment, erasing, writing or even probing\n"
|
"Depending on your hardware environment, erasing, writing or even probing\n"
|
||||||
"can fail without running the board specific code.\n\n"
|
"can fail without running the board specific code.\n\n"
|
||||||
@ -1545,7 +1542,7 @@ int board_flash_enable(const char *vendor, const char *part)
|
|||||||
board->vendor_name, board->board_name);
|
board->vendor_name, board->board_name);
|
||||||
board = NULL;
|
board = NULL;
|
||||||
} else {
|
} else {
|
||||||
printf("NOTE: Running an untested board enable procedure.\n"
|
msg_pinfo("NOTE: Running an untested board enable procedure.\n"
|
||||||
"Please report success/failure to flashrom@flashrom.org.\n");
|
"Please report success/failure to flashrom@flashrom.org.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1556,15 +1553,15 @@ int board_flash_enable(const char *vendor, const char *part)
|
|||||||
board->max_rom_decode_parallel * 1024;
|
board->max_rom_decode_parallel * 1024;
|
||||||
|
|
||||||
if (board->enable != NULL) {
|
if (board->enable != NULL) {
|
||||||
printf("Disabling flash write protection for "
|
msg_pinfo("Disabling flash write protection for "
|
||||||
"board \"%s %s\"... ", board->vendor_name,
|
"board \"%s %s\"... ", board->vendor_name,
|
||||||
board->board_name);
|
board->board_name);
|
||||||
|
|
||||||
ret = board->enable(board->vendor_name);
|
ret = board->enable(board->vendor_name);
|
||||||
if (ret)
|
if (ret)
|
||||||
printf("FAILED!\n");
|
msg_pinfo("FAILED!\n");
|
||||||
else
|
else
|
||||||
printf("OK.\n");
|
msg_pinfo("OK.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
22
cbtable.c
22
cbtable.c
@ -112,29 +112,29 @@ static struct lb_header *find_lb_table(void *base, unsigned long start,
|
|||||||
(struct lb_record *)(((char *)base) + addr + sizeof(*head));
|
(struct lb_record *)(((char *)base) + addr + sizeof(*head));
|
||||||
if (memcmp(head->signature, "LBIO", 4) != 0)
|
if (memcmp(head->signature, "LBIO", 4) != 0)
|
||||||
continue;
|
continue;
|
||||||
printf_debug("Found candidate at: %08lx-%08lx\n",
|
msg_pdbg("Found candidate at: %08lx-%08lx\n",
|
||||||
addr, addr + head->table_bytes);
|
addr, addr + head->table_bytes);
|
||||||
if (head->header_bytes != sizeof(*head)) {
|
if (head->header_bytes != sizeof(*head)) {
|
||||||
fprintf(stderr, "Header bytes of %d are incorrect.\n",
|
msg_perr("Header bytes of %d are incorrect.\n",
|
||||||
head->header_bytes);
|
head->header_bytes);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (count_lb_records(head) != head->table_entries) {
|
if (count_lb_records(head) != head->table_entries) {
|
||||||
fprintf(stderr, "Bad record count: %d.\n",
|
msg_perr("Bad record count: %d.\n",
|
||||||
head->table_entries);
|
head->table_entries);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (compute_checksum((uint8_t *) head, sizeof(*head)) != 0) {
|
if (compute_checksum((uint8_t *) head, sizeof(*head)) != 0) {
|
||||||
fprintf(stderr, "Bad header checksum.\n");
|
msg_perr("Bad header checksum.\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (compute_checksum(recs, head->table_bytes)
|
if (compute_checksum(recs, head->table_bytes)
|
||||||
!= head->table_checksum) {
|
!= head->table_checksum) {
|
||||||
fprintf(stderr, "Bad table checksum: %04x.\n",
|
msg_perr("Bad table checksum: %04x.\n",
|
||||||
head->table_checksum);
|
head->table_checksum);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
printf_debug("Found coreboot table at 0x%08lx.\n", addr);
|
msg_pdbg("Found coreboot table at 0x%08lx.\n", addr);
|
||||||
return head;
|
return head;
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -150,7 +150,7 @@ static void find_mainboard(struct lb_record *ptr, unsigned long addr)
|
|||||||
|
|
||||||
rec = (struct lb_mainboard *)ptr;
|
rec = (struct lb_mainboard *)ptr;
|
||||||
max_size = rec->size - sizeof(*rec);
|
max_size = rec->size - sizeof(*rec);
|
||||||
printf("Vendor ID: %.*s, part ID: %.*s\n",
|
msg_pdbg("Vendor ID: %.*s, part ID: %.*s\n",
|
||||||
max_size - rec->vendor_idx,
|
max_size - rec->vendor_idx,
|
||||||
rec->strings + rec->vendor_idx,
|
rec->strings + rec->vendor_idx,
|
||||||
max_size - rec->part_number_idx,
|
max_size - rec->part_number_idx,
|
||||||
@ -161,7 +161,7 @@ static void find_mainboard(struct lb_record *ptr, unsigned long addr)
|
|||||||
rec->strings + rec->part_number_idx);
|
rec->strings + rec->part_number_idx);
|
||||||
|
|
||||||
if (lb_part) {
|
if (lb_part) {
|
||||||
printf("Overwritten by command line, vendor ID: %s, part ID: %s.\n", lb_vendor, lb_part);
|
msg_pdbg("Overwritten by command line, vendor ID: %s, part ID: %s.\n", lb_vendor, lb_part);
|
||||||
} else {
|
} else {
|
||||||
partvendor_from_cbtable = 1;
|
partvendor_from_cbtable = 1;
|
||||||
lb_part = strdup(part);
|
lb_part = strdup(part);
|
||||||
@ -235,16 +235,16 @@ int coreboot_init(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!lb_table) {
|
if (!lb_table) {
|
||||||
printf("No coreboot table found.\n");
|
msg_pinfo("No coreboot table found.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
addr = ((char *)lb_table) - ((char *)table_area) + start;
|
addr = ((char *)lb_table) - ((char *)table_area) + start;
|
||||||
fprintf(stdout, "coreboot table found at 0x%lx.\n",
|
msg_pinfo("coreboot table found at 0x%lx.\n",
|
||||||
(unsigned long)lb_table - (unsigned long)table_area + start);
|
(unsigned long)lb_table - (unsigned long)table_area + start);
|
||||||
rec = (struct lb_record *)(((char *)lb_table) + lb_table->header_bytes);
|
rec = (struct lb_record *)(((char *)lb_table) + lb_table->header_bytes);
|
||||||
last = (struct lb_record *)(((char *)rec) + lb_table->table_bytes);
|
last = (struct lb_record *)(((char *)rec) + lb_table->table_bytes);
|
||||||
printf_debug("coreboot header(%d) checksum: %04x table(%d) checksum: %04x entries: %d\n",
|
msg_pdbg("coreboot header(%d) checksum: %04x table(%d) checksum: %04x entries: %d\n",
|
||||||
lb_table->header_bytes, lb_table->header_checksum,
|
lb_table->header_bytes, lb_table->header_checksum,
|
||||||
lb_table->table_bytes, lb_table->table_checksum,
|
lb_table->table_bytes, lb_table->table_checksum,
|
||||||
lb_table->table_entries);
|
lb_table->table_entries);
|
||||||
|
216
chipset_enable.c
216
chipset_enable.c
@ -74,8 +74,8 @@ static int enable_flash_sis_mapping(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_byte(dev, 0x40, new);
|
pci_write_byte(dev, 0x40, new);
|
||||||
newer = pci_read_byte(dev, 0x40);
|
newer = pci_read_byte(dev, 0x40);
|
||||||
if (newer != new) {
|
if (newer != new) {
|
||||||
printf_debug("tried to set register 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x40, new, name);
|
msg_pinfo("tried to set register 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x40, new, name);
|
||||||
printf_debug("Stuck at 0x%x\n", newer);
|
msg_pinfo("Stuck at 0x%x\n", newer);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -91,9 +91,9 @@ static struct pci_dev *find_southbridge(uint16_t vendor, const char *name)
|
|||||||
if (!sbdev)
|
if (!sbdev)
|
||||||
sbdev = pci_dev_find_vendorclass(vendor, 0x0000);
|
sbdev = pci_dev_find_vendorclass(vendor, 0x0000);
|
||||||
if (!sbdev)
|
if (!sbdev)
|
||||||
fprintf(stderr, "No southbridge found for %s!\n", name);
|
msg_perr("No southbridge found for %s!\n", name);
|
||||||
if (sbdev)
|
if (sbdev)
|
||||||
printf_debug("Found southbridge %04x:%04x at %02x:%02x:%01x\n",
|
msg_pdbg("Found southbridge %04x:%04x at %02x:%02x:%01x\n",
|
||||||
sbdev->vendor_id, sbdev->device_id,
|
sbdev->vendor_id, sbdev->device_id,
|
||||||
sbdev->bus, sbdev->dev, sbdev->func);
|
sbdev->bus, sbdev->dev, sbdev->func);
|
||||||
return sbdev;
|
return sbdev;
|
||||||
@ -162,8 +162,8 @@ static int enable_flash_sis530(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_byte(sbdev, 0x45, new);
|
pci_write_byte(sbdev, 0x45, new);
|
||||||
newer = pci_read_byte(sbdev, 0x45);
|
newer = pci_read_byte(sbdev, 0x45);
|
||||||
if (newer != new) {
|
if (newer != new) {
|
||||||
printf_debug("tried to set register 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x45, new, name);
|
msg_pinfo("tried to set register 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x45, new, name);
|
||||||
printf_debug("Stuck at 0x%x\n", newer);
|
msg_pinfo("Stuck at 0x%x\n", newer);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,8 +188,8 @@ static int enable_flash_sis540(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_byte(sbdev, 0x45, new);
|
pci_write_byte(sbdev, 0x45, new);
|
||||||
newer = pci_read_byte(sbdev, 0x45);
|
newer = pci_read_byte(sbdev, 0x45);
|
||||||
if (newer != new) {
|
if (newer != new) {
|
||||||
printf_debug("tried to set register 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x45, new, name);
|
msg_pinfo("tried to set register 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x45, new, name);
|
||||||
printf_debug("Stuck at 0x%x\n", newer);
|
msg_pinfo("Stuck at 0x%x\n", newer);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -235,7 +235,7 @@ static int enable_flash_piix4(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_word(dev, xbcs, new);
|
pci_write_word(dev, xbcs, new);
|
||||||
|
|
||||||
if (pci_read_word(dev, xbcs) != new) {
|
if (pci_read_word(dev, xbcs) != new) {
|
||||||
printf_debug("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", xbcs, new, name);
|
msg_pinfo("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", xbcs, new, name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,11 +257,11 @@ static int enable_flash_ich(struct pci_dev *dev, const char *name,
|
|||||||
*/
|
*/
|
||||||
old = pci_read_byte(dev, bios_cntl);
|
old = pci_read_byte(dev, bios_cntl);
|
||||||
|
|
||||||
printf_debug("\nBIOS Lock Enable: %sabled, ",
|
msg_pdbg("\nBIOS Lock Enable: %sabled, ",
|
||||||
(old & (1 << 1)) ? "en" : "dis");
|
(old & (1 << 1)) ? "en" : "dis");
|
||||||
printf_debug("BIOS Write Enable: %sabled, ",
|
msg_pdbg("BIOS Write Enable: %sabled, ",
|
||||||
(old & (1 << 0)) ? "en" : "dis");
|
(old & (1 << 0)) ? "en" : "dis");
|
||||||
printf_debug("BIOS_CNTL is 0x%x\n", old);
|
msg_pdbg("BIOS_CNTL is 0x%x\n", old);
|
||||||
|
|
||||||
new = old | 1;
|
new = old | 1;
|
||||||
|
|
||||||
@ -271,7 +271,7 @@ static int enable_flash_ich(struct pci_dev *dev, const char *name,
|
|||||||
pci_write_byte(dev, bios_cntl, new);
|
pci_write_byte(dev, bios_cntl, new);
|
||||||
|
|
||||||
if (pci_read_byte(dev, bios_cntl) != new) {
|
if (pci_read_byte(dev, bios_cntl) != new) {
|
||||||
printf_debug("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", bios_cntl, new, name);
|
msg_pinfo("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", bios_cntl, new, name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,7 +306,7 @@ static int enable_flash_ich_dc(struct pci_dev *dev, const char *name)
|
|||||||
fwh_conf = (uint32_t)strtoul(idsel, NULL, 0);
|
fwh_conf = (uint32_t)strtoul(idsel, NULL, 0);
|
||||||
|
|
||||||
/* FIXME: Need to undo this on shutdown. */
|
/* FIXME: Need to undo this on shutdown. */
|
||||||
printf("\nSetting IDSEL=0x%x for top 16 MB", fwh_conf);
|
msg_pinfo("\nSetting IDSEL=0x%x for top 16 MB", fwh_conf);
|
||||||
pci_write_long(dev, 0xd0, fwh_conf);
|
pci_write_long(dev, 0xd0, fwh_conf);
|
||||||
pci_write_word(dev, 0xd4, fwh_conf);
|
pci_write_word(dev, 0xd4, fwh_conf);
|
||||||
/* FIXME: Decode settings are not changed. */
|
/* FIXME: Decode settings are not changed. */
|
||||||
@ -321,7 +321,7 @@ static int enable_flash_ich_dc(struct pci_dev *dev, const char *name)
|
|||||||
fwh_conf = pci_read_long(dev, 0xd0);
|
fwh_conf = pci_read_long(dev, 0xd0);
|
||||||
for (i = 7; i >= 0; i--) {
|
for (i = 7; i >= 0; i--) {
|
||||||
tmp = (fwh_conf >> (i * 4)) & 0xf;
|
tmp = (fwh_conf >> (i * 4)) & 0xf;
|
||||||
printf_debug("\n0x%08x/0x%08x FWH IDSEL: 0x%x",
|
msg_pdbg("\n0x%08x/0x%08x FWH IDSEL: 0x%x",
|
||||||
(0x1ff8 + i) * 0x80000,
|
(0x1ff8 + i) * 0x80000,
|
||||||
(0x1ff0 + i) * 0x80000,
|
(0x1ff0 + i) * 0x80000,
|
||||||
tmp);
|
tmp);
|
||||||
@ -335,7 +335,7 @@ static int enable_flash_ich_dc(struct pci_dev *dev, const char *name)
|
|||||||
fwh_conf = pci_read_word(dev, 0xd4);
|
fwh_conf = pci_read_word(dev, 0xd4);
|
||||||
for (i = 3; i >= 0; i--) {
|
for (i = 3; i >= 0; i--) {
|
||||||
tmp = (fwh_conf >> (i * 4)) & 0xf;
|
tmp = (fwh_conf >> (i * 4)) & 0xf;
|
||||||
printf_debug("\n0x%08x/0x%08x FWH IDSEL: 0x%x",
|
msg_pdbg("\n0x%08x/0x%08x FWH IDSEL: 0x%x",
|
||||||
(0xff4 + i) * 0x100000,
|
(0xff4 + i) * 0x100000,
|
||||||
(0xff0 + i) * 0x100000,
|
(0xff0 + i) * 0x100000,
|
||||||
tmp);
|
tmp);
|
||||||
@ -350,7 +350,7 @@ static int enable_flash_ich_dc(struct pci_dev *dev, const char *name)
|
|||||||
fwh_conf = pci_read_word(dev, 0xd8);
|
fwh_conf = pci_read_word(dev, 0xd8);
|
||||||
for (i = 7; i >= 0; i--) {
|
for (i = 7; i >= 0; i--) {
|
||||||
tmp = (fwh_conf >> (i + 0x8)) & 0x1;
|
tmp = (fwh_conf >> (i + 0x8)) & 0x1;
|
||||||
printf_debug("\n0x%08x/0x%08x FWH decode %sabled",
|
msg_pdbg("\n0x%08x/0x%08x FWH decode %sabled",
|
||||||
(0x1ff8 + i) * 0x80000,
|
(0x1ff8 + i) * 0x80000,
|
||||||
(0x1ff0 + i) * 0x80000,
|
(0x1ff0 + i) * 0x80000,
|
||||||
tmp ? "en" : "dis");
|
tmp ? "en" : "dis");
|
||||||
@ -362,7 +362,7 @@ static int enable_flash_ich_dc(struct pci_dev *dev, const char *name)
|
|||||||
}
|
}
|
||||||
for (i = 3; i >= 0; i--) {
|
for (i = 3; i >= 0; i--) {
|
||||||
tmp = (fwh_conf >> i) & 0x1;
|
tmp = (fwh_conf >> i) & 0x1;
|
||||||
printf_debug("\n0x%08x/0x%08x FWH decode %sabled",
|
msg_pdbg("\n0x%08x/0x%08x FWH decode %sabled",
|
||||||
(0xff4 + i) * 0x100000,
|
(0xff4 + i) * 0x100000,
|
||||||
(0xff0 + i) * 0x100000,
|
(0xff0 + i) * 0x100000,
|
||||||
tmp ? "en" : "dis");
|
tmp ? "en" : "dis");
|
||||||
@ -373,7 +373,7 @@ static int enable_flash_ich_dc(struct pci_dev *dev, const char *name)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
max_rom_decode.fwh = min(max_decode_fwh_idsel, max_decode_fwh_decode);
|
max_rom_decode.fwh = min(max_decode_fwh_idsel, max_decode_fwh_decode);
|
||||||
printf_debug("\nMaximum FWH chip size: 0x%x bytes", max_rom_decode.fwh);
|
msg_pdbg("\nMaximum FWH chip size: 0x%x bytes", max_rom_decode.fwh);
|
||||||
|
|
||||||
/* If we're called by enable_flash_ich_dc_spi, it will override
|
/* If we're called by enable_flash_ich_dc_spi, it will override
|
||||||
* buses_supported anyway.
|
* buses_supported anyway.
|
||||||
@ -391,7 +391,7 @@ static int enable_flash_poulsbo(struct pci_dev *dev, const char *name)
|
|||||||
return err;
|
return err;
|
||||||
|
|
||||||
old = pci_read_byte(dev, 0xd9);
|
old = pci_read_byte(dev, 0xd9);
|
||||||
printf_debug("BIOS Prefetch Enable: %sabled, ",
|
msg_pdbg("BIOS Prefetch Enable: %sabled, ",
|
||||||
(old & 1) ? "en" : "dis");
|
(old & 1) ? "en" : "dis");
|
||||||
new = old & ~1;
|
new = old & ~1;
|
||||||
|
|
||||||
@ -413,10 +413,10 @@ static int enable_flash_vt8237s_spi(struct pci_dev *dev, const char *name)
|
|||||||
|
|
||||||
/* Do we really need no write enable? */
|
/* Do we really need no write enable? */
|
||||||
mmio_base = (pci_read_long(dev, 0xbc)) << 8;
|
mmio_base = (pci_read_long(dev, 0xbc)) << 8;
|
||||||
printf_debug("MMIO base at = 0x%x\n", mmio_base);
|
msg_pdbg("MMIO base at = 0x%x\n", mmio_base);
|
||||||
spibar = physmap("VT8237S MMIO registers", mmio_base, 0x70);
|
spibar = physmap("VT8237S MMIO registers", mmio_base, 0x70);
|
||||||
|
|
||||||
printf_debug("0x6c: 0x%04x (CLOCK/DEBUG)\n",
|
msg_pdbg("0x6c: 0x%04x (CLOCK/DEBUG)\n",
|
||||||
mmio_readw(spibar + 0x6c));
|
mmio_readw(spibar + 0x6c));
|
||||||
|
|
||||||
/* Not sure if it speaks all these bus protocols. */
|
/* Not sure if it speaks all these bus protocols. */
|
||||||
@ -444,20 +444,20 @@ static int enable_flash_ich_dc_spi(struct pci_dev *dev, const char *name,
|
|||||||
|
|
||||||
/* Get physical address of Root Complex Register Block */
|
/* Get physical address of Root Complex Register Block */
|
||||||
tmp = pci_read_long(dev, 0xf0) & 0xffffc000;
|
tmp = pci_read_long(dev, 0xf0) & 0xffffc000;
|
||||||
printf_debug("\nRoot Complex Register Block address = 0x%x\n", tmp);
|
msg_pdbg("\nRoot Complex Register Block address = 0x%x\n", tmp);
|
||||||
|
|
||||||
/* Map RCBA to virtual memory */
|
/* Map RCBA to virtual memory */
|
||||||
rcrb = physmap("ICH RCRB", tmp, 0x4000);
|
rcrb = physmap("ICH RCRB", tmp, 0x4000);
|
||||||
|
|
||||||
gcs = mmio_readl(rcrb + 0x3410);
|
gcs = mmio_readl(rcrb + 0x3410);
|
||||||
printf_debug("GCS = 0x%x: ", gcs);
|
msg_pdbg("GCS = 0x%x: ", gcs);
|
||||||
printf_debug("BIOS Interface Lock-Down: %sabled, ",
|
msg_pdbg("BIOS Interface Lock-Down: %sabled, ",
|
||||||
(gcs & 0x1) ? "en" : "dis");
|
(gcs & 0x1) ? "en" : "dis");
|
||||||
bbs = (gcs >> 10) & 0x3;
|
bbs = (gcs >> 10) & 0x3;
|
||||||
printf_debug("BOOT BIOS Straps: 0x%x (%s)\n", bbs, straps_names[bbs]);
|
msg_pdbg("BOOT BIOS Straps: 0x%x (%s)\n", bbs, straps_names[bbs]);
|
||||||
|
|
||||||
buc = mmio_readb(rcrb + 0x3414);
|
buc = mmio_readb(rcrb + 0x3414);
|
||||||
printf_debug("Top Swap : %s\n",
|
msg_pdbg("Top Swap : %s\n",
|
||||||
(buc & 1) ? "enabled (A16 inverted)" : "not enabled");
|
(buc & 1) ? "enabled (A16 inverted)" : "not enabled");
|
||||||
|
|
||||||
/* It seems the ICH7 does not support SPI and LPC chips at the same
|
/* It seems the ICH7 does not support SPI and LPC chips at the same
|
||||||
@ -492,105 +492,105 @@ static int enable_flash_ich_dc_spi(struct pci_dev *dev, const char *name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* SPIBAR is at RCRB+0x3020 for ICH[78] and RCRB+0x3800 for ICH9. */
|
/* SPIBAR is at RCRB+0x3020 for ICH[78] and RCRB+0x3800 for ICH9. */
|
||||||
printf_debug("SPIBAR = 0x%x + 0x%04x\n", tmp, spibar_offset);
|
msg_pdbg("SPIBAR = 0x%x + 0x%04x\n", tmp, spibar_offset);
|
||||||
|
|
||||||
/* Assign Virtual Address */
|
/* Assign Virtual Address */
|
||||||
spibar = rcrb + spibar_offset;
|
spibar = rcrb + spibar_offset;
|
||||||
|
|
||||||
switch (spi_controller) {
|
switch (spi_controller) {
|
||||||
case SPI_CONTROLLER_ICH7:
|
case SPI_CONTROLLER_ICH7:
|
||||||
printf_debug("0x00: 0x%04x (SPIS)\n",
|
msg_pdbg("0x00: 0x%04x (SPIS)\n",
|
||||||
mmio_readw(spibar + 0));
|
mmio_readw(spibar + 0));
|
||||||
printf_debug("0x02: 0x%04x (SPIC)\n",
|
msg_pdbg("0x02: 0x%04x (SPIC)\n",
|
||||||
mmio_readw(spibar + 2));
|
mmio_readw(spibar + 2));
|
||||||
printf_debug("0x04: 0x%08x (SPIA)\n",
|
msg_pdbg("0x04: 0x%08x (SPIA)\n",
|
||||||
mmio_readl(spibar + 4));
|
mmio_readl(spibar + 4));
|
||||||
for (i = 0; i < 8; i++) {
|
for (i = 0; i < 8; i++) {
|
||||||
int offs;
|
int offs;
|
||||||
offs = 8 + (i * 8);
|
offs = 8 + (i * 8);
|
||||||
printf_debug("0x%02x: 0x%08x (SPID%d)\n", offs,
|
msg_pdbg("0x%02x: 0x%08x (SPID%d)\n", offs,
|
||||||
mmio_readl(spibar + offs), i);
|
mmio_readl(spibar + offs), i);
|
||||||
printf_debug("0x%02x: 0x%08x (SPID%d+4)\n", offs + 4,
|
msg_pdbg("0x%02x: 0x%08x (SPID%d+4)\n", offs + 4,
|
||||||
mmio_readl(spibar + offs + 4), i);
|
mmio_readl(spibar + offs + 4), i);
|
||||||
}
|
}
|
||||||
printf_debug("0x50: 0x%08x (BBAR)\n",
|
msg_pdbg("0x50: 0x%08x (BBAR)\n",
|
||||||
mmio_readl(spibar + 0x50));
|
mmio_readl(spibar + 0x50));
|
||||||
printf_debug("0x54: 0x%04x (PREOP)\n",
|
msg_pdbg("0x54: 0x%04x (PREOP)\n",
|
||||||
mmio_readw(spibar + 0x54));
|
mmio_readw(spibar + 0x54));
|
||||||
printf_debug("0x56: 0x%04x (OPTYPE)\n",
|
msg_pdbg("0x56: 0x%04x (OPTYPE)\n",
|
||||||
mmio_readw(spibar + 0x56));
|
mmio_readw(spibar + 0x56));
|
||||||
printf_debug("0x58: 0x%08x (OPMENU)\n",
|
msg_pdbg("0x58: 0x%08x (OPMENU)\n",
|
||||||
mmio_readl(spibar + 0x58));
|
mmio_readl(spibar + 0x58));
|
||||||
printf_debug("0x5c: 0x%08x (OPMENU+4)\n",
|
msg_pdbg("0x5c: 0x%08x (OPMENU+4)\n",
|
||||||
mmio_readl(spibar + 0x5c));
|
mmio_readl(spibar + 0x5c));
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
int offs;
|
int offs;
|
||||||
offs = 0x60 + (i * 4);
|
offs = 0x60 + (i * 4);
|
||||||
printf_debug("0x%02x: 0x%08x (PBR%d)\n", offs,
|
msg_pdbg("0x%02x: 0x%08x (PBR%d)\n", offs,
|
||||||
mmio_readl(spibar + offs), i);
|
mmio_readl(spibar + offs), i);
|
||||||
}
|
}
|
||||||
printf_debug("\n");
|
msg_pdbg("\n");
|
||||||
if (mmio_readw(spibar) & (1 << 15)) {
|
if (mmio_readw(spibar) & (1 << 15)) {
|
||||||
printf("WARNING: SPI Configuration Lockdown activated.\n");
|
msg_pinfo("WARNING: SPI Configuration Lockdown activated.\n");
|
||||||
ichspi_lock = 1;
|
ichspi_lock = 1;
|
||||||
}
|
}
|
||||||
ich_init_opcodes();
|
ich_init_opcodes();
|
||||||
break;
|
break;
|
||||||
case SPI_CONTROLLER_ICH9:
|
case SPI_CONTROLLER_ICH9:
|
||||||
tmp2 = mmio_readw(spibar + 4);
|
tmp2 = mmio_readw(spibar + 4);
|
||||||
printf_debug("0x04: 0x%04x (HSFS)\n", tmp2);
|
msg_pdbg("0x04: 0x%04x (HSFS)\n", tmp2);
|
||||||
printf_debug("FLOCKDN %i, ", (tmp2 >> 15 & 1));
|
msg_pdbg("FLOCKDN %i, ", (tmp2 >> 15 & 1));
|
||||||
printf_debug("FDV %i, ", (tmp2 >> 14) & 1);
|
msg_pdbg("FDV %i, ", (tmp2 >> 14) & 1);
|
||||||
printf_debug("FDOPSS %i, ", (tmp2 >> 13) & 1);
|
msg_pdbg("FDOPSS %i, ", (tmp2 >> 13) & 1);
|
||||||
printf_debug("SCIP %i, ", (tmp2 >> 5) & 1);
|
msg_pdbg("SCIP %i, ", (tmp2 >> 5) & 1);
|
||||||
printf_debug("BERASE %i, ", (tmp2 >> 3) & 3);
|
msg_pdbg("BERASE %i, ", (tmp2 >> 3) & 3);
|
||||||
printf_debug("AEL %i, ", (tmp2 >> 2) & 1);
|
msg_pdbg("AEL %i, ", (tmp2 >> 2) & 1);
|
||||||
printf_debug("FCERR %i, ", (tmp2 >> 1) & 1);
|
msg_pdbg("FCERR %i, ", (tmp2 >> 1) & 1);
|
||||||
printf_debug("FDONE %i\n", (tmp2 >> 0) & 1);
|
msg_pdbg("FDONE %i\n", (tmp2 >> 0) & 1);
|
||||||
|
|
||||||
tmp = mmio_readl(spibar + 0x50);
|
tmp = mmio_readl(spibar + 0x50);
|
||||||
printf_debug("0x50: 0x%08x (FRAP)\n", tmp);
|
msg_pdbg("0x50: 0x%08x (FRAP)\n", tmp);
|
||||||
printf_debug("BMWAG %i, ", (tmp >> 24) & 0xff);
|
msg_pdbg("BMWAG %i, ", (tmp >> 24) & 0xff);
|
||||||
printf_debug("BMRAG %i, ", (tmp >> 16) & 0xff);
|
msg_pdbg("BMRAG %i, ", (tmp >> 16) & 0xff);
|
||||||
printf_debug("BRWA %i, ", (tmp >> 8) & 0xff);
|
msg_pdbg("BRWA %i, ", (tmp >> 8) & 0xff);
|
||||||
printf_debug("BRRA %i\n", (tmp >> 0) & 0xff);
|
msg_pdbg("BRRA %i\n", (tmp >> 0) & 0xff);
|
||||||
|
|
||||||
printf_debug("0x54: 0x%08x (FREG0)\n",
|
msg_pdbg("0x54: 0x%08x (FREG0)\n",
|
||||||
mmio_readl(spibar + 0x54));
|
mmio_readl(spibar + 0x54));
|
||||||
printf_debug("0x58: 0x%08x (FREG1)\n",
|
msg_pdbg("0x58: 0x%08x (FREG1)\n",
|
||||||
mmio_readl(spibar + 0x58));
|
mmio_readl(spibar + 0x58));
|
||||||
printf_debug("0x5C: 0x%08x (FREG2)\n",
|
msg_pdbg("0x5C: 0x%08x (FREG2)\n",
|
||||||
mmio_readl(spibar + 0x5C));
|
mmio_readl(spibar + 0x5C));
|
||||||
printf_debug("0x60: 0x%08x (FREG3)\n",
|
msg_pdbg("0x60: 0x%08x (FREG3)\n",
|
||||||
mmio_readl(spibar + 0x60));
|
mmio_readl(spibar + 0x60));
|
||||||
printf_debug("0x64: 0x%08x (FREG4)\n",
|
msg_pdbg("0x64: 0x%08x (FREG4)\n",
|
||||||
mmio_readl(spibar + 0x64));
|
mmio_readl(spibar + 0x64));
|
||||||
printf_debug("0x74: 0x%08x (PR0)\n",
|
msg_pdbg("0x74: 0x%08x (PR0)\n",
|
||||||
mmio_readl(spibar + 0x74));
|
mmio_readl(spibar + 0x74));
|
||||||
printf_debug("0x78: 0x%08x (PR1)\n",
|
msg_pdbg("0x78: 0x%08x (PR1)\n",
|
||||||
mmio_readl(spibar + 0x78));
|
mmio_readl(spibar + 0x78));
|
||||||
printf_debug("0x7C: 0x%08x (PR2)\n",
|
msg_pdbg("0x7C: 0x%08x (PR2)\n",
|
||||||
mmio_readl(spibar + 0x7C));
|
mmio_readl(spibar + 0x7C));
|
||||||
printf_debug("0x80: 0x%08x (PR3)\n",
|
msg_pdbg("0x80: 0x%08x (PR3)\n",
|
||||||
mmio_readl(spibar + 0x80));
|
mmio_readl(spibar + 0x80));
|
||||||
printf_debug("0x84: 0x%08x (PR4)\n",
|
msg_pdbg("0x84: 0x%08x (PR4)\n",
|
||||||
mmio_readl(spibar + 0x84));
|
mmio_readl(spibar + 0x84));
|
||||||
printf_debug("0x90: 0x%08x (SSFS, SSFC)\n",
|
msg_pdbg("0x90: 0x%08x (SSFS, SSFC)\n",
|
||||||
mmio_readl(spibar + 0x90));
|
mmio_readl(spibar + 0x90));
|
||||||
printf_debug("0x94: 0x%04x (PREOP)\n",
|
msg_pdbg("0x94: 0x%04x (PREOP)\n",
|
||||||
mmio_readw(spibar + 0x94));
|
mmio_readw(spibar + 0x94));
|
||||||
printf_debug("0x96: 0x%04x (OPTYPE)\n",
|
msg_pdbg("0x96: 0x%04x (OPTYPE)\n",
|
||||||
mmio_readw(spibar + 0x96));
|
mmio_readw(spibar + 0x96));
|
||||||
printf_debug("0x98: 0x%08x (OPMENU)\n",
|
msg_pdbg("0x98: 0x%08x (OPMENU)\n",
|
||||||
mmio_readl(spibar + 0x98));
|
mmio_readl(spibar + 0x98));
|
||||||
printf_debug("0x9C: 0x%08x (OPMENU+4)\n",
|
msg_pdbg("0x9C: 0x%08x (OPMENU+4)\n",
|
||||||
mmio_readl(spibar + 0x9C));
|
mmio_readl(spibar + 0x9C));
|
||||||
printf_debug("0xA0: 0x%08x (BBAR)\n",
|
msg_pdbg("0xA0: 0x%08x (BBAR)\n",
|
||||||
mmio_readl(spibar + 0xA0));
|
mmio_readl(spibar + 0xA0));
|
||||||
printf_debug("0xB0: 0x%08x (FDOC)\n",
|
msg_pdbg("0xB0: 0x%08x (FDOC)\n",
|
||||||
mmio_readl(spibar + 0xB0));
|
mmio_readl(spibar + 0xB0));
|
||||||
if (tmp2 & (1 << 15)) {
|
if (tmp2 & (1 << 15)) {
|
||||||
printf("WARNING: SPI Configuration Lockdown activated.\n");
|
msg_pinfo("WARNING: SPI Configuration Lockdown activated.\n");
|
||||||
ichspi_lock = 1;
|
ichspi_lock = 1;
|
||||||
}
|
}
|
||||||
ich_init_opcodes();
|
ich_init_opcodes();
|
||||||
@ -601,18 +601,18 @@ static int enable_flash_ich_dc_spi(struct pci_dev *dev, const char *name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
old = pci_read_byte(dev, 0xdc);
|
old = pci_read_byte(dev, 0xdc);
|
||||||
printf_debug("SPI Read Configuration: ");
|
msg_pdbg("SPI Read Configuration: ");
|
||||||
new = (old >> 2) & 0x3;
|
new = (old >> 2) & 0x3;
|
||||||
switch (new) {
|
switch (new) {
|
||||||
case 0:
|
case 0:
|
||||||
case 1:
|
case 1:
|
||||||
case 2:
|
case 2:
|
||||||
printf_debug("prefetching %sabled, caching %sabled, ",
|
msg_pdbg("prefetching %sabled, caching %sabled, ",
|
||||||
(new & 0x2) ? "en" : "dis",
|
(new & 0x2) ? "en" : "dis",
|
||||||
(new & 0x1) ? "dis" : "en");
|
(new & 0x1) ? "dis" : "en");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf_debug("invalid prefetching/caching settings, ");
|
msg_pdbg("invalid prefetching/caching settings, ");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -652,7 +652,7 @@ static int enable_flash_vt823x(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_byte(dev, 0x40, val);
|
pci_write_byte(dev, 0x40, val);
|
||||||
|
|
||||||
if (pci_read_byte(dev, 0x40) != val) {
|
if (pci_read_byte(dev, 0x40) != val) {
|
||||||
printf("\nWARNING: Failed to enable flash write on \"%s\"\n",
|
msg_pinfo("\nWARNING: Failed to enable flash write on \"%s\"\n",
|
||||||
name);
|
name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -769,7 +769,7 @@ static int enable_flash_sc1100(struct pci_dev *dev, const char *name)
|
|||||||
new = pci_read_byte(dev, 0x52);
|
new = pci_read_byte(dev, 0x52);
|
||||||
|
|
||||||
if (new != 0xee) {
|
if (new != 0xee) {
|
||||||
printf_debug("tried to set register 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x52, new, name);
|
msg_pinfo("tried to set register 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x52, new, name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -787,7 +787,7 @@ static int enable_flash_amd8111(struct pci_dev *dev, const char *name)
|
|||||||
if (new != old) {
|
if (new != old) {
|
||||||
pci_write_byte(dev, 0x43, new);
|
pci_write_byte(dev, 0x43, new);
|
||||||
if (pci_read_byte(dev, 0x43) != new) {
|
if (pci_read_byte(dev, 0x43) != new) {
|
||||||
printf_debug("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x43, new, name);
|
msg_pinfo("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x43, new, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -799,7 +799,7 @@ static int enable_flash_amd8111(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_byte(dev, 0x40, new);
|
pci_write_byte(dev, 0x40, new);
|
||||||
|
|
||||||
if (pci_read_byte(dev, 0x40) != new) {
|
if (pci_read_byte(dev, 0x40) != new) {
|
||||||
printf_debug("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x40, new, name);
|
msg_pinfo("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x40, new, name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -819,7 +819,7 @@ static int enable_flash_sb600(struct pci_dev *dev, const char *name)
|
|||||||
/* No protection flags for this region?*/
|
/* No protection flags for this region?*/
|
||||||
if ((prot & 0x3) == 0)
|
if ((prot & 0x3) == 0)
|
||||||
continue;
|
continue;
|
||||||
printf_debug("SB600 %s%sprotected from %u to %u\n",
|
msg_pinfo("SB600 %s%sprotected from %u to %u\n",
|
||||||
(prot & 0x1) ? "write " : "",
|
(prot & 0x1) ? "write " : "",
|
||||||
(prot & 0x2) ? "read " : "",
|
(prot & 0x2) ? "read " : "",
|
||||||
(prot & 0xfffffc00),
|
(prot & 0xfffffc00),
|
||||||
@ -828,7 +828,7 @@ static int enable_flash_sb600(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_byte(dev, reg, prot);
|
pci_write_byte(dev, reg, prot);
|
||||||
prot = pci_read_long(dev, reg);
|
prot = pci_read_long(dev, reg);
|
||||||
if (prot & 0x3)
|
if (prot & 0x3)
|
||||||
printf("SB600 %s%sunprotect failed from %u to %u\n",
|
msg_perr("SB600 %s%sunprotect failed from %u to %u\n",
|
||||||
(prot & 0x1) ? "write " : "",
|
(prot & 0x1) ? "write " : "",
|
||||||
(prot & 0x2) ? "read " : "",
|
(prot & 0x2) ? "read " : "",
|
||||||
(prot & 0xfffffc00),
|
(prot & 0xfffffc00),
|
||||||
@ -838,7 +838,7 @@ static int enable_flash_sb600(struct pci_dev *dev, const char *name)
|
|||||||
/* Read SPI_BaseAddr */
|
/* Read SPI_BaseAddr */
|
||||||
tmp = pci_read_long(dev, 0xa0);
|
tmp = pci_read_long(dev, 0xa0);
|
||||||
tmp &= 0xffffffe0; /* remove bits 4-0 (reserved) */
|
tmp &= 0xffffffe0; /* remove bits 4-0 (reserved) */
|
||||||
printf_debug("SPI base address is at 0x%x\n", tmp);
|
msg_pdbg("SPI base address is at 0x%x\n", tmp);
|
||||||
|
|
||||||
/* If the BAR has address 0, it is unlikely SPI is used. */
|
/* If the BAR has address 0, it is unlikely SPI is used. */
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
@ -854,17 +854,17 @@ static int enable_flash_sb600(struct pci_dev *dev, const char *name)
|
|||||||
sb600_spibar += tmp & 0xfff;
|
sb600_spibar += tmp & 0xfff;
|
||||||
|
|
||||||
tmp = pci_read_long(dev, 0xa0);
|
tmp = pci_read_long(dev, 0xa0);
|
||||||
printf_debug("AltSpiCSEnable=%i, SpiRomEnable=%i, "
|
msg_pdbg("AltSpiCSEnable=%i, SpiRomEnable=%i, "
|
||||||
"AbortEnable=%i\n", tmp & 0x1, (tmp & 0x2) >> 1,
|
"AbortEnable=%i\n", tmp & 0x1, (tmp & 0x2) >> 1,
|
||||||
(tmp & 0x4) >> 2);
|
(tmp & 0x4) >> 2);
|
||||||
tmp = (pci_read_byte(dev, 0xba) & 0x4) >> 2;
|
tmp = (pci_read_byte(dev, 0xba) & 0x4) >> 2;
|
||||||
printf_debug("PrefetchEnSPIFromIMC=%i, ", tmp);
|
msg_pdbg("PrefetchEnSPIFromIMC=%i, ", tmp);
|
||||||
|
|
||||||
tmp = pci_read_byte(dev, 0xbb);
|
tmp = pci_read_byte(dev, 0xbb);
|
||||||
printf_debug("PrefetchEnSPIFromHost=%i, SpiOpEnInLpcMode=%i\n",
|
msg_pdbg("PrefetchEnSPIFromHost=%i, SpiOpEnInLpcMode=%i\n",
|
||||||
tmp & 0x1, (tmp & 0x20) >> 5);
|
tmp & 0x1, (tmp & 0x20) >> 5);
|
||||||
tmp = mmio_readl(sb600_spibar);
|
tmp = mmio_readl(sb600_spibar);
|
||||||
printf_debug("SpiArbEnable=%i, SpiAccessMacRomEn=%i, "
|
msg_pdbg("SpiArbEnable=%i, SpiAccessMacRomEn=%i, "
|
||||||
"SpiHostAccessRomEn=%i, ArbWaitCount=%i, "
|
"SpiHostAccessRomEn=%i, ArbWaitCount=%i, "
|
||||||
"SpiBridgeDisable=%i, DropOneClkOnRd=%i\n",
|
"SpiBridgeDisable=%i, DropOneClkOnRd=%i\n",
|
||||||
(tmp >> 19) & 0x1, (tmp >> 22) & 0x1,
|
(tmp >> 19) & 0x1, (tmp >> 22) & 0x1,
|
||||||
@ -876,7 +876,7 @@ static int enable_flash_sb600(struct pci_dev *dev, const char *name)
|
|||||||
smbus_dev = pci_dev_find(0x1002, 0x4385);
|
smbus_dev = pci_dev_find(0x1002, 0x4385);
|
||||||
|
|
||||||
if (has_spi && !smbus_dev) {
|
if (has_spi && !smbus_dev) {
|
||||||
fprintf(stderr, "ERROR: SMBus device not found. Not enabling SPI.\n");
|
msg_perr("ERROR: SMBus device not found. Not enabling SPI.\n");
|
||||||
has_spi = 0;
|
has_spi = 0;
|
||||||
}
|
}
|
||||||
if (has_spi) {
|
if (has_spi) {
|
||||||
@ -884,22 +884,22 @@ static int enable_flash_sb600(struct pci_dev *dev, const char *name)
|
|||||||
/* GPIO11/SPI_DO and GPIO12/SPI_DI status */
|
/* GPIO11/SPI_DO and GPIO12/SPI_DI status */
|
||||||
reg = pci_read_byte(smbus_dev, 0xAB);
|
reg = pci_read_byte(smbus_dev, 0xAB);
|
||||||
reg &= 0xC0;
|
reg &= 0xC0;
|
||||||
printf_debug("GPIO11 used for %s\n", (reg & (1 << 6)) ? "GPIO" : "SPI_DO");
|
msg_pdbg("GPIO11 used for %s\n", (reg & (1 << 6)) ? "GPIO" : "SPI_DO");
|
||||||
printf_debug("GPIO12 used for %s\n", (reg & (1 << 7)) ? "GPIO" : "SPI_DI");
|
msg_pdbg("GPIO12 used for %s\n", (reg & (1 << 7)) ? "GPIO" : "SPI_DI");
|
||||||
if (reg != 0x00)
|
if (reg != 0x00)
|
||||||
has_spi = 0;
|
has_spi = 0;
|
||||||
/* GPIO31/SPI_HOLD and GPIO32/SPI_CS status */
|
/* GPIO31/SPI_HOLD and GPIO32/SPI_CS status */
|
||||||
reg = pci_read_byte(smbus_dev, 0x83);
|
reg = pci_read_byte(smbus_dev, 0x83);
|
||||||
reg &= 0xC0;
|
reg &= 0xC0;
|
||||||
printf_debug("GPIO31 used for %s\n", (reg & (1 << 6)) ? "GPIO" : "SPI_HOLD");
|
msg_pdbg("GPIO31 used for %s\n", (reg & (1 << 6)) ? "GPIO" : "SPI_HOLD");
|
||||||
printf_debug("GPIO32 used for %s\n", (reg & (1 << 7)) ? "GPIO" : "SPI_CS");
|
msg_pdbg("GPIO32 used for %s\n", (reg & (1 << 7)) ? "GPIO" : "SPI_CS");
|
||||||
/* SPI_HOLD is not used on all boards, filter it out. */
|
/* SPI_HOLD is not used on all boards, filter it out. */
|
||||||
if ((reg & 0x80) != 0x00)
|
if ((reg & 0x80) != 0x00)
|
||||||
has_spi = 0;
|
has_spi = 0;
|
||||||
/* GPIO47/SPI_CLK status */
|
/* GPIO47/SPI_CLK status */
|
||||||
reg = pci_read_byte(smbus_dev, 0xA7);
|
reg = pci_read_byte(smbus_dev, 0xA7);
|
||||||
reg &= 0x40;
|
reg &= 0x40;
|
||||||
printf_debug("GPIO47 used for %s\n", (reg & (1 << 6)) ? "GPIO" : "SPI_CLK");
|
msg_pdbg("GPIO47 used for %s\n", (reg & (1 << 6)) ? "GPIO" : "SPI_CLK");
|
||||||
if (reg != 0x00)
|
if (reg != 0x00)
|
||||||
has_spi = 0;
|
has_spi = 0;
|
||||||
}
|
}
|
||||||
@ -914,24 +914,24 @@ static int enable_flash_sb600(struct pci_dev *dev, const char *name)
|
|||||||
OUTB(0x8f, 0xcd6);
|
OUTB(0x8f, 0xcd6);
|
||||||
reg = INB(0xcd7);
|
reg = INB(0xcd7);
|
||||||
reg &= 0x0e;
|
reg &= 0x0e;
|
||||||
printf_debug("ROM strap override is %sactive", (reg & 0x02) ? "" : "not ");
|
msg_pdbg("ROM strap override is %sactive", (reg & 0x02) ? "" : "not ");
|
||||||
if (reg & 0x02) {
|
if (reg & 0x02) {
|
||||||
switch ((reg & 0x0c) >> 2) {
|
switch ((reg & 0x0c) >> 2) {
|
||||||
case 0x00:
|
case 0x00:
|
||||||
printf_debug(": LPC");
|
msg_pdbg(": LPC");
|
||||||
break;
|
break;
|
||||||
case 0x01:
|
case 0x01:
|
||||||
printf_debug(": PCI");
|
msg_pdbg(": PCI");
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case 0x02:
|
||||||
printf_debug(": FWH");
|
msg_pdbg(": FWH");
|
||||||
break;
|
break;
|
||||||
case 0x03:
|
case 0x03:
|
||||||
printf_debug(": SPI");
|
msg_pdbg(": SPI");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
printf_debug("\n");
|
msg_pdbg("\n");
|
||||||
|
|
||||||
/* Force enable SPI ROM in SB600 PM register.
|
/* Force enable SPI ROM in SB600 PM register.
|
||||||
* If we enable SPI ROM here, we have to disable it after we leave.
|
* If we enable SPI ROM here, we have to disable it after we leave.
|
||||||
@ -970,7 +970,7 @@ static int enable_flash_ck804(struct pci_dev *dev, const char *name)
|
|||||||
if (new != old) {
|
if (new != old) {
|
||||||
pci_write_byte(dev, 0x88, new);
|
pci_write_byte(dev, 0x88, new);
|
||||||
if (pci_read_byte(dev, 0x88) != new) {
|
if (pci_read_byte(dev, 0x88) != new) {
|
||||||
printf_debug("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x88, new, name);
|
msg_pinfo("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x88, new, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -981,7 +981,7 @@ static int enable_flash_ck804(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_byte(dev, 0x6d, new);
|
pci_write_byte(dev, 0x6d, new);
|
||||||
|
|
||||||
if (pci_read_byte(dev, 0x6d) != new) {
|
if (pci_read_byte(dev, 0x6d) != new) {
|
||||||
printf_debug("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x6d, new, name);
|
msg_pinfo("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x6d, new, name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -998,7 +998,7 @@ static int enable_flash_sb400(struct pci_dev *dev, const char *name)
|
|||||||
smbusdev = pci_dev_find(0x1002, 0x4372);
|
smbusdev = pci_dev_find(0x1002, 0x4372);
|
||||||
|
|
||||||
if (!smbusdev) {
|
if (!smbusdev) {
|
||||||
fprintf(stderr, "ERROR: SMBus device not found. Aborting.\n");
|
msg_perr("ERROR: SMBus device not found. Aborting.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1047,7 +1047,7 @@ static int enable_flash_mcp55(struct pci_dev *dev, const char *name)
|
|||||||
pci_write_byte(dev, 0x6d, new);
|
pci_write_byte(dev, 0x6d, new);
|
||||||
|
|
||||||
if (pci_read_byte(dev, 0x6d) != new) {
|
if (pci_read_byte(dev, 0x6d) != new) {
|
||||||
printf_debug("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x6d, new, name);
|
msg_pinfo("tried to set 0x%x to 0x%x on %s failed (WARNING ONLY)\n", 0x6d, new, name);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1277,7 +1277,7 @@ static int get_flashbase_sc520(struct pci_dev *dev, const char *name)
|
|||||||
flashbase = parx << 12;
|
flashbase = parx << 12;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
printf("AMD Elan SC520 detected, but no BOOTCS. Assuming flash at 4G\n");
|
msg_pinfo("AMD Elan SC520 detected, but no BOOTCS. Assuming flash at 4G\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 4. Clean up */
|
/* 4. Clean up */
|
||||||
@ -1436,18 +1436,18 @@ int chipset_flash_enable(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dev) {
|
if (dev) {
|
||||||
printf("Found chipset \"%s %s\", enabling flash write... ",
|
msg_pinfo("Found chipset \"%s %s\", enabling flash write... ",
|
||||||
chipset_enables[i].vendor_name,
|
chipset_enables[i].vendor_name,
|
||||||
chipset_enables[i].device_name);
|
chipset_enables[i].device_name);
|
||||||
|
|
||||||
ret = chipset_enables[i].doit(dev,
|
ret = chipset_enables[i].doit(dev,
|
||||||
chipset_enables[i].device_name);
|
chipset_enables[i].device_name);
|
||||||
if (ret)
|
if (ret)
|
||||||
printf("FAILED!\n");
|
msg_pinfo("FAILED!\n");
|
||||||
else
|
else
|
||||||
printf("OK.\n");
|
msg_pinfo("OK.\n");
|
||||||
}
|
}
|
||||||
printf("This chipset supports the following protocols: %s.\n",
|
msg_pinfo("This chipset supports the following protocols: %s.\n",
|
||||||
flashbuses_to_text(buses_supported));
|
flashbuses_to_text(buses_supported));
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
13
dmi.c
13
dmi.c
@ -53,12 +53,12 @@ static char *get_dmi_string(const char *string_name)
|
|||||||
"%s -s %s", dmidecode_command, string_name);
|
"%s -s %s", dmidecode_command, string_name);
|
||||||
dmidecode_pipe = popen(commandline, "r");
|
dmidecode_pipe = popen(commandline, "r");
|
||||||
if (!dmidecode_pipe) {
|
if (!dmidecode_pipe) {
|
||||||
printf_debug("DMI pipe open error\n");
|
msg_perr("DMI pipe open error\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (!fgets(answerbuf, DMI_MAX_ANSWER_LEN, dmidecode_pipe)) {
|
if (!fgets(answerbuf, DMI_MAX_ANSWER_LEN, dmidecode_pipe)) {
|
||||||
if(ferror(dmidecode_pipe)) {
|
if(ferror(dmidecode_pipe)) {
|
||||||
printf_debug("DMI pipe read error\n");
|
msg_perr("DMI pipe read error\n");
|
||||||
pclose(dmidecode_pipe);
|
pclose(dmidecode_pipe);
|
||||||
return NULL;
|
return NULL;
|
||||||
} else {
|
} else {
|
||||||
@ -70,7 +70,8 @@ static char *get_dmi_string(const char *string_name)
|
|||||||
while (!feof(dmidecode_pipe))
|
while (!feof(dmidecode_pipe))
|
||||||
getc(dmidecode_pipe);
|
getc(dmidecode_pipe);
|
||||||
if (pclose(dmidecode_pipe) != 0) {
|
if (pclose(dmidecode_pipe) != 0) {
|
||||||
printf_debug("DMI pipe close error\n");
|
msg_pinfo("dmidecode execution unsucessfull - continuing "
|
||||||
|
"without DMI info\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +79,7 @@ static char *get_dmi_string(const char *string_name)
|
|||||||
if (answerbuf[0] != 0 &&
|
if (answerbuf[0] != 0 &&
|
||||||
answerbuf[strlen(answerbuf) - 1] == '\n')
|
answerbuf[strlen(answerbuf) - 1] == '\n')
|
||||||
answerbuf[strlen(answerbuf) - 1] = 0;
|
answerbuf[strlen(answerbuf) - 1] = 0;
|
||||||
printf_debug("DMI string %s: \"%s\"\n", string_name, answerbuf);
|
msg_pdbg("DMI string %s: \"%s\"\n", string_name, answerbuf);
|
||||||
|
|
||||||
result = strdup(answerbuf);
|
result = strdup(answerbuf);
|
||||||
if (!result)
|
if (!result)
|
||||||
@ -104,7 +105,7 @@ void dmi_init(void)
|
|||||||
chassis_type = get_dmi_string("chassis-type");
|
chassis_type = get_dmi_string("chassis-type");
|
||||||
if (chassis_type && (!strcmp(chassis_type, "Notebook") ||
|
if (chassis_type && (!strcmp(chassis_type, "Notebook") ||
|
||||||
!strcmp(chassis_type, "Portable"))) {
|
!strcmp(chassis_type, "Portable"))) {
|
||||||
printf_debug("Laptop detected via DMI\n");
|
msg_pdbg("Laptop detected via DMI\n");
|
||||||
is_laptop = 1;
|
is_laptop = 1;
|
||||||
}
|
}
|
||||||
free(chassis_type);
|
free(chassis_type);
|
||||||
@ -126,7 +127,7 @@ static int dmi_compare(const char *value, const char *pattern)
|
|||||||
int anchored = 0;
|
int anchored = 0;
|
||||||
int patternlen;
|
int patternlen;
|
||||||
|
|
||||||
printf_debug("matching %s against %s\n", value, pattern);
|
msg_pspew("matching %s against %s\n", value, pattern);
|
||||||
/* The empty string is part of all strings! */
|
/* The empty string is part of all strings! */
|
||||||
if (pattern[0] == 0)
|
if (pattern[0] == 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
142
flashrom.c
142
flashrom.c
@ -520,7 +520,7 @@ char *extract_param(char **haystack, char *needle, char *delim)
|
|||||||
if (devlen) {
|
if (devlen) {
|
||||||
dev = malloc(devlen + 1);
|
dev = malloc(devlen + 1);
|
||||||
if (!dev) {
|
if (!dev) {
|
||||||
fprintf(stderr, "Out of memory!\n");
|
msg_gerr("Out of memory!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
strncpy(dev, param_pos, devlen);
|
strncpy(dev, param_pos, devlen);
|
||||||
@ -532,7 +532,7 @@ char *extract_param(char **haystack, char *needle, char *delim)
|
|||||||
memmove(param_pos, rest, strlen(rest) + 1);
|
memmove(param_pos, rest, strlen(rest) + 1);
|
||||||
tmp = realloc(*haystack, strlen(*haystack) + 1);
|
tmp = realloc(*haystack, strlen(*haystack) + 1);
|
||||||
if (!tmp) {
|
if (!tmp) {
|
||||||
fprintf(stderr, "Out of memory!\n");
|
msg_gerr("Out of memory!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
*haystack = tmp;
|
*haystack = tmp;
|
||||||
@ -549,7 +549,7 @@ int check_erased_range(struct flashchip *flash, int start, int len)
|
|||||||
uint8_t *cmpbuf = malloc(len);
|
uint8_t *cmpbuf = malloc(len);
|
||||||
|
|
||||||
if (!cmpbuf) {
|
if (!cmpbuf) {
|
||||||
fprintf(stderr, "Could not allocate memory!\n");
|
msg_gerr("Could not allocate memory!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
memset(cmpbuf, 0xff, len);
|
memset(cmpbuf, 0xff, len);
|
||||||
@ -577,16 +577,16 @@ int verify_range(struct flashchip *flash, uint8_t *cmpbuf, int start, int len, c
|
|||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
||||||
if (!flash->read) {
|
if (!flash->read) {
|
||||||
fprintf(stderr, "ERROR: flashrom has no read function for this flash chip.\n");
|
msg_cerr("ERROR: flashrom has no read function for this flash chip.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (!readbuf) {
|
if (!readbuf) {
|
||||||
fprintf(stderr, "Could not allocate memory!\n");
|
msg_gerr("Could not allocate memory!\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start + len > flash->total_size * 1024) {
|
if (start + len > flash->total_size * 1024) {
|
||||||
fprintf(stderr, "Error: %s called with start 0x%x + len 0x%x >"
|
msg_gerr("Error: %s called with start 0x%x + len 0x%x >"
|
||||||
" total_size 0x%x\n", __func__, start, len,
|
" total_size 0x%x\n", __func__, start, len,
|
||||||
flash->total_size * 1024);
|
flash->total_size * 1024);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
@ -614,7 +614,7 @@ int verify_range(struct flashchip *flash, uint8_t *cmpbuf, int start, int len, c
|
|||||||
if (cmpbuf[starthere - start + j] != readbuf[j]) {
|
if (cmpbuf[starthere - start + j] != readbuf[j]) {
|
||||||
/* Only print the first failure. */
|
/* Only print the first failure. */
|
||||||
if (!failcount++)
|
if (!failcount++)
|
||||||
fprintf(stderr, "%s FAILED at 0x%08x! "
|
msg_cerr("%s FAILED at 0x%08x! "
|
||||||
"Expected=0x%02x, Read=0x%02x,",
|
"Expected=0x%02x, Read=0x%02x,",
|
||||||
message, starthere + j,
|
message, starthere + j,
|
||||||
cmpbuf[starthere - start + j],
|
cmpbuf[starthere - start + j],
|
||||||
@ -623,7 +623,7 @@ int verify_range(struct flashchip *flash, uint8_t *cmpbuf, int start, int len, c
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (failcount) {
|
if (failcount) {
|
||||||
fprintf(stderr, " failed byte count from 0x%08x-0x%08x: 0x%x\n",
|
msg_cerr(" failed byte count from 0x%08x-0x%08x: 0x%x\n",
|
||||||
start, start + len - 1, failcount);
|
start, start + len - 1, failcount);
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
@ -748,7 +748,7 @@ int generate_testpattern(uint8_t *buf, uint32_t size, int variant)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!buf) {
|
if (!buf) {
|
||||||
fprintf(stderr, "Invalid buffer!\n");
|
msg_gerr("Invalid buffer!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -836,7 +836,7 @@ int check_max_decode(enum chipbustype buses, uint32_t size)
|
|||||||
if ((buses & CHIP_BUSTYPE_PARALLEL) &&
|
if ((buses & CHIP_BUSTYPE_PARALLEL) &&
|
||||||
(max_rom_decode.parallel < size)) {
|
(max_rom_decode.parallel < size)) {
|
||||||
limitexceeded++;
|
limitexceeded++;
|
||||||
printf_debug("Chip size %u kB is bigger than supported "
|
msg_pdbg("Chip size %u kB is bigger than supported "
|
||||||
"size %u kB of chipset/board/programmer "
|
"size %u kB of chipset/board/programmer "
|
||||||
"for %s interface, "
|
"for %s interface, "
|
||||||
"probe/read/erase/write may fail. ", size / 1024,
|
"probe/read/erase/write may fail. ", size / 1024,
|
||||||
@ -844,7 +844,7 @@ int check_max_decode(enum chipbustype buses, uint32_t size)
|
|||||||
}
|
}
|
||||||
if ((buses & CHIP_BUSTYPE_LPC) && (max_rom_decode.lpc < size)) {
|
if ((buses & CHIP_BUSTYPE_LPC) && (max_rom_decode.lpc < size)) {
|
||||||
limitexceeded++;
|
limitexceeded++;
|
||||||
printf_debug("Chip size %u kB is bigger than supported "
|
msg_pdbg("Chip size %u kB is bigger than supported "
|
||||||
"size %u kB of chipset/board/programmer "
|
"size %u kB of chipset/board/programmer "
|
||||||
"for %s interface, "
|
"for %s interface, "
|
||||||
"probe/read/erase/write may fail. ", size / 1024,
|
"probe/read/erase/write may fail. ", size / 1024,
|
||||||
@ -852,7 +852,7 @@ int check_max_decode(enum chipbustype buses, uint32_t size)
|
|||||||
}
|
}
|
||||||
if ((buses & CHIP_BUSTYPE_FWH) && (max_rom_decode.fwh < size)) {
|
if ((buses & CHIP_BUSTYPE_FWH) && (max_rom_decode.fwh < size)) {
|
||||||
limitexceeded++;
|
limitexceeded++;
|
||||||
printf_debug("Chip size %u kB is bigger than supported "
|
msg_pdbg("Chip size %u kB is bigger than supported "
|
||||||
"size %u kB of chipset/board/programmer "
|
"size %u kB of chipset/board/programmer "
|
||||||
"for %s interface, "
|
"for %s interface, "
|
||||||
"probe/read/erase/write may fail. ", size / 1024,
|
"probe/read/erase/write may fail. ", size / 1024,
|
||||||
@ -860,7 +860,7 @@ int check_max_decode(enum chipbustype buses, uint32_t size)
|
|||||||
}
|
}
|
||||||
if ((buses & CHIP_BUSTYPE_SPI) && (max_rom_decode.spi < size)) {
|
if ((buses & CHIP_BUSTYPE_SPI) && (max_rom_decode.spi < size)) {
|
||||||
limitexceeded++;
|
limitexceeded++;
|
||||||
printf_debug("Chip size %u kB is bigger than supported "
|
msg_pdbg("Chip size %u kB is bigger than supported "
|
||||||
"size %u kB of chipset/board/programmer "
|
"size %u kB of chipset/board/programmer "
|
||||||
"for %s interface, "
|
"for %s interface, "
|
||||||
"probe/read/erase/write may fail. ", size / 1024,
|
"probe/read/erase/write may fail. ", size / 1024,
|
||||||
@ -873,7 +873,7 @@ int check_max_decode(enum chipbustype buses, uint32_t size)
|
|||||||
*/
|
*/
|
||||||
if (bitcount(buses) > limitexceeded)
|
if (bitcount(buses) > limitexceeded)
|
||||||
/* FIXME: This message is designed towards CLI users. */
|
/* FIXME: This message is designed towards CLI users. */
|
||||||
printf_debug("There is at least one common chip/programmer "
|
msg_pdbg("There is at least one common chip/programmer "
|
||||||
"interface which can support a chip of this size. "
|
"interface which can support a chip of this size. "
|
||||||
"You can try --force at your own risk.\n");
|
"You can try --force at your own risk.\n");
|
||||||
return 1;
|
return 1;
|
||||||
@ -934,7 +934,7 @@ notfound:
|
|||||||
if (!flash || !flash->name)
|
if (!flash || !flash->name)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
printf("%s chip \"%s %s\" (%d KB, %s) at physical address 0x%lx.\n",
|
msg_cinfo("%s chip \"%s %s\" (%d KB, %s) at physical address 0x%lx.\n",
|
||||||
force ? "Assuming" : "Found",
|
force ? "Assuming" : "Found",
|
||||||
flash->vendor, flash->name, flash->total_size,
|
flash->vendor, flash->name, flash->total_size,
|
||||||
flashbuses_to_text(flash->bustype), base);
|
flashbuses_to_text(flash->bustype), base);
|
||||||
@ -950,12 +950,12 @@ int verify_flash(struct flashchip *flash, uint8_t *buf)
|
|||||||
int ret;
|
int ret;
|
||||||
int total_size = flash->total_size * 1024;
|
int total_size = flash->total_size * 1024;
|
||||||
|
|
||||||
printf("Verifying flash... ");
|
msg_cinfo("Verifying flash... ");
|
||||||
|
|
||||||
ret = verify_range(flash, buf, 0, total_size, NULL);
|
ret = verify_range(flash, buf, 0, total_size, NULL);
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
printf("VERIFIED. \n");
|
msg_cinfo("VERIFIED. \n");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -968,17 +968,17 @@ int read_flash(struct flashchip *flash, char *filename)
|
|||||||
unsigned char *buf = calloc(size, sizeof(char));
|
unsigned char *buf = calloc(size, sizeof(char));
|
||||||
|
|
||||||
if (!filename) {
|
if (!filename) {
|
||||||
printf("Error: No filename specified.\n");
|
msg_gerr("Error: No filename specified.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if ((image = fopen(filename, "wb")) == NULL) {
|
if ((image = fopen(filename, "wb")) == NULL) {
|
||||||
perror(filename);
|
perror(filename);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
printf("Reading flash... ");
|
msg_cinfo("Reading flash... ");
|
||||||
if (!flash->read) {
|
if (!flash->read) {
|
||||||
printf("FAILED!\n");
|
msg_cinfo("FAILED!\n");
|
||||||
fprintf(stderr, "ERROR: flashrom has no read function for this flash chip.\n");
|
msg_cerr("ERROR: flashrom has no read function for this flash chip.\n");
|
||||||
return 1;
|
return 1;
|
||||||
} else
|
} else
|
||||||
flash->read(flash, buf, 0, size);
|
flash->read(flash, buf, 0, size);
|
||||||
@ -986,7 +986,7 @@ int read_flash(struct flashchip *flash, char *filename)
|
|||||||
numbytes = fwrite(buf, 1, size, image);
|
numbytes = fwrite(buf, 1, size, image);
|
||||||
fclose(image);
|
fclose(image);
|
||||||
free(buf);
|
free(buf);
|
||||||
printf("%s.\n", numbytes == size ? "done" : "FAILED");
|
msg_cinfo("%s.\n", numbytes == size ? "done" : "FAILED");
|
||||||
if (numbytes != size)
|
if (numbytes != size)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
@ -1028,7 +1028,7 @@ int selfcheck_eraseblocks(struct flashchip *flash)
|
|||||||
}
|
}
|
||||||
/* Empty eraseblock definition with erase function. */
|
/* Empty eraseblock definition with erase function. */
|
||||||
if (!done && eraser.block_erase)
|
if (!done && eraser.block_erase)
|
||||||
msg_pspew("Strange: Empty eraseblock definition with "
|
msg_gspew("Strange: Empty eraseblock definition with "
|
||||||
"non-empty erase function. Not an error.\n");
|
"non-empty erase function. Not an error.\n");
|
||||||
if (!done)
|
if (!done)
|
||||||
continue;
|
continue;
|
||||||
@ -1065,31 +1065,31 @@ int erase_flash(struct flashchip *flash)
|
|||||||
int i, j, k, ret = 0, found = 0;
|
int i, j, k, ret = 0, found = 0;
|
||||||
unsigned int start, len;
|
unsigned int start, len;
|
||||||
|
|
||||||
printf("Erasing flash chip... ");
|
msg_cinfo("Erasing flash chip... ");
|
||||||
for (k = 0; k < NUM_ERASEFUNCTIONS; k++) {
|
for (k = 0; k < NUM_ERASEFUNCTIONS; k++) {
|
||||||
unsigned int done = 0;
|
unsigned int done = 0;
|
||||||
struct block_eraser eraser = flash->block_erasers[k];
|
struct block_eraser eraser = flash->block_erasers[k];
|
||||||
|
|
||||||
printf_debug("Looking at blockwise erase function %i... ", k);
|
msg_cdbg("Looking at blockwise erase function %i... ", k);
|
||||||
if (!eraser.block_erase && !eraser.eraseblocks[0].count) {
|
if (!eraser.block_erase && !eraser.eraseblocks[0].count) {
|
||||||
printf_debug("not defined. "
|
msg_cdbg("not defined. "
|
||||||
"Looking for another erase function.\n");
|
"Looking for another erase function.\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (!eraser.block_erase && eraser.eraseblocks[0].count) {
|
if (!eraser.block_erase && eraser.eraseblocks[0].count) {
|
||||||
printf_debug("eraseblock layout is known, but no "
|
msg_cdbg("eraseblock layout is known, but no "
|
||||||
"matching block erase function found. "
|
"matching block erase function found. "
|
||||||
"Looking for another erase function.\n");
|
"Looking for another erase function.\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (eraser.block_erase && !eraser.eraseblocks[0].count) {
|
if (eraser.block_erase && !eraser.eraseblocks[0].count) {
|
||||||
printf_debug("block erase function found, but "
|
msg_cdbg("block erase function found, but "
|
||||||
"eraseblock layout is unknown. "
|
"eraseblock layout is unknown. "
|
||||||
"Looking for another erase function.\n");
|
"Looking for another erase function.\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
found = 1;
|
found = 1;
|
||||||
printf_debug("trying... ");
|
msg_cdbg("trying... ");
|
||||||
for (i = 0; i < NUM_ERASEREGIONS; i++) {
|
for (i = 0; i < NUM_ERASEREGIONS; i++) {
|
||||||
/* count==0 for all automatically initialized array
|
/* count==0 for all automatically initialized array
|
||||||
* members so the loop below won't be executed for them.
|
* members so the loop below won't be executed for them.
|
||||||
@ -1097,7 +1097,7 @@ int erase_flash(struct flashchip *flash)
|
|||||||
for (j = 0; j < eraser.eraseblocks[i].count; j++) {
|
for (j = 0; j < eraser.eraseblocks[i].count; j++) {
|
||||||
start = done + eraser.eraseblocks[i].size * j;
|
start = done + eraser.eraseblocks[i].size * j;
|
||||||
len = eraser.eraseblocks[i].size;
|
len = eraser.eraseblocks[i].size;
|
||||||
printf_debug("0x%06x-0x%06x, ", start,
|
msg_cdbg("0x%06x-0x%06x, ", start,
|
||||||
start + len - 1);
|
start + len - 1);
|
||||||
ret = eraser.block_erase(flash, start, len);
|
ret = eraser.block_erase(flash, start, len);
|
||||||
if (ret)
|
if (ret)
|
||||||
@ -1108,27 +1108,27 @@ int erase_flash(struct flashchip *flash)
|
|||||||
done += eraser.eraseblocks[i].count *
|
done += eraser.eraseblocks[i].count *
|
||||||
eraser.eraseblocks[i].size;
|
eraser.eraseblocks[i].size;
|
||||||
}
|
}
|
||||||
printf_debug("\n");
|
msg_cdbg("\n");
|
||||||
/* If everything is OK, don't try another erase function. */
|
/* If everything is OK, don't try another erase function. */
|
||||||
if (!ret)
|
if (!ret)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!found) {
|
if (!found) {
|
||||||
fprintf(stderr, "ERROR: flashrom has no erase function for this flash chip.\n");
|
msg_cerr("ERROR: flashrom has no erase function for this flash chip.\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
fprintf(stderr, "FAILED!\n");
|
msg_cerr("FAILED!\n");
|
||||||
} else {
|
} else {
|
||||||
printf("SUCCESS.\n");
|
msg_cinfo("SUCCESS.\n");
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void emergency_help_message(void)
|
void emergency_help_message(void)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Your flash chip is in an unknown state.\n"
|
msg_gerr("Your flash chip is in an unknown state.\n"
|
||||||
"Get help on IRC at irc.freenode.net (channel #flashrom) or\n"
|
"Get help on IRC at irc.freenode.net (channel #flashrom) or\n"
|
||||||
"mail flashrom@flashrom.org!\n--------------------"
|
"mail flashrom@flashrom.org!\n--------------------"
|
||||||
"-----------------------------------------------------------\n"
|
"-----------------------------------------------------------\n"
|
||||||
@ -1140,11 +1140,11 @@ void list_programmers(char *delim)
|
|||||||
{
|
{
|
||||||
enum programmer p;
|
enum programmer p;
|
||||||
for (p = 0; p < PROGRAMMER_INVALID; p++) {
|
for (p = 0; p < PROGRAMMER_INVALID; p++) {
|
||||||
printf("%s", programmer_table[p].name);
|
msg_ginfo("%s", programmer_table[p].name);
|
||||||
if (p < PROGRAMMER_INVALID - 1)
|
if (p < PROGRAMMER_INVALID - 1)
|
||||||
printf("%s", delim);
|
msg_ginfo("%s", delim);
|
||||||
}
|
}
|
||||||
printf("\n");
|
msg_ginfo("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_sysinfo(void)
|
void print_sysinfo(void)
|
||||||
@ -1183,7 +1183,7 @@ void print_sysinfo(void)
|
|||||||
|
|
||||||
void print_version(void)
|
void print_version(void)
|
||||||
{
|
{
|
||||||
printf("flashrom v%s", flashrom_version);
|
msg_ginfo("flashrom v%s\n", flashrom_version);
|
||||||
print_sysinfo();
|
print_sysinfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1196,16 +1196,16 @@ int selfcheck(void)
|
|||||||
* if more errors exist.
|
* if more errors exist.
|
||||||
*/
|
*/
|
||||||
if (ARRAY_SIZE(programmer_table) - 1 != PROGRAMMER_INVALID) {
|
if (ARRAY_SIZE(programmer_table) - 1 != PROGRAMMER_INVALID) {
|
||||||
fprintf(stderr, "Programmer table miscompilation!\n");
|
msg_gerr("Programmer table miscompilation!\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
if (spi_programmer_count - 1 != SPI_CONTROLLER_INVALID) {
|
if (spi_programmer_count - 1 != SPI_CONTROLLER_INVALID) {
|
||||||
fprintf(stderr, "SPI programmer table miscompilation!\n");
|
msg_gerr("SPI programmer table miscompilation!\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
#if BITBANG_SPI_SUPPORT == 1
|
#if BITBANG_SPI_SUPPORT == 1
|
||||||
if (bitbang_spi_master_count - 1 != BITBANG_SPI_INVALID) {
|
if (bitbang_spi_master_count - 1 != BITBANG_SPI_INVALID) {
|
||||||
fprintf(stderr, "Bitbanging SPI master table miscompilation!\n");
|
msg_gerr("Bitbanging SPI master table miscompilation!\n");
|
||||||
ret = 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1218,36 +1218,36 @@ int selfcheck(void)
|
|||||||
void check_chip_supported(struct flashchip *flash)
|
void check_chip_supported(struct flashchip *flash)
|
||||||
{
|
{
|
||||||
if (TEST_OK_MASK != (flash->tested & TEST_OK_MASK)) {
|
if (TEST_OK_MASK != (flash->tested & TEST_OK_MASK)) {
|
||||||
printf("===\n");
|
msg_cinfo("===\n");
|
||||||
if (flash->tested & TEST_BAD_MASK) {
|
if (flash->tested & TEST_BAD_MASK) {
|
||||||
printf("This flash part has status NOT WORKING for operations:");
|
msg_cinfo("This flash part has status NOT WORKING for operations:");
|
||||||
if (flash->tested & TEST_BAD_PROBE)
|
if (flash->tested & TEST_BAD_PROBE)
|
||||||
printf(" PROBE");
|
msg_cinfo(" PROBE");
|
||||||
if (flash->tested & TEST_BAD_READ)
|
if (flash->tested & TEST_BAD_READ)
|
||||||
printf(" READ");
|
msg_cinfo(" READ");
|
||||||
if (flash->tested & TEST_BAD_ERASE)
|
if (flash->tested & TEST_BAD_ERASE)
|
||||||
printf(" ERASE");
|
msg_cinfo(" ERASE");
|
||||||
if (flash->tested & TEST_BAD_WRITE)
|
if (flash->tested & TEST_BAD_WRITE)
|
||||||
printf(" WRITE");
|
msg_cinfo(" WRITE");
|
||||||
printf("\n");
|
msg_cinfo("\n");
|
||||||
}
|
}
|
||||||
if ((!(flash->tested & TEST_BAD_PROBE) && !(flash->tested & TEST_OK_PROBE)) ||
|
if ((!(flash->tested & TEST_BAD_PROBE) && !(flash->tested & TEST_OK_PROBE)) ||
|
||||||
(!(flash->tested & TEST_BAD_READ) && !(flash->tested & TEST_OK_READ)) ||
|
(!(flash->tested & TEST_BAD_READ) && !(flash->tested & TEST_OK_READ)) ||
|
||||||
(!(flash->tested & TEST_BAD_ERASE) && !(flash->tested & TEST_OK_ERASE)) ||
|
(!(flash->tested & TEST_BAD_ERASE) && !(flash->tested & TEST_OK_ERASE)) ||
|
||||||
(!(flash->tested & TEST_BAD_WRITE) && !(flash->tested & TEST_OK_WRITE))) {
|
(!(flash->tested & TEST_BAD_WRITE) && !(flash->tested & TEST_OK_WRITE))) {
|
||||||
printf("This flash part has status UNTESTED for operations:");
|
msg_cinfo("This flash part has status UNTESTED for operations:");
|
||||||
if (!(flash->tested & TEST_BAD_PROBE) && !(flash->tested & TEST_OK_PROBE))
|
if (!(flash->tested & TEST_BAD_PROBE) && !(flash->tested & TEST_OK_PROBE))
|
||||||
printf(" PROBE");
|
msg_cinfo(" PROBE");
|
||||||
if (!(flash->tested & TEST_BAD_READ) && !(flash->tested & TEST_OK_READ))
|
if (!(flash->tested & TEST_BAD_READ) && !(flash->tested & TEST_OK_READ))
|
||||||
printf(" READ");
|
msg_cinfo(" READ");
|
||||||
if (!(flash->tested & TEST_BAD_ERASE) && !(flash->tested & TEST_OK_ERASE))
|
if (!(flash->tested & TEST_BAD_ERASE) && !(flash->tested & TEST_OK_ERASE))
|
||||||
printf(" ERASE");
|
msg_cinfo(" ERASE");
|
||||||
if (!(flash->tested & TEST_BAD_WRITE) && !(flash->tested & TEST_OK_WRITE))
|
if (!(flash->tested & TEST_BAD_WRITE) && !(flash->tested & TEST_OK_WRITE))
|
||||||
printf(" WRITE");
|
msg_cinfo(" WRITE");
|
||||||
printf("\n");
|
msg_cinfo("\n");
|
||||||
}
|
}
|
||||||
/* FIXME: This message is designed towards CLI users. */
|
/* FIXME: This message is designed towards CLI users. */
|
||||||
printf("Please email a report to flashrom@flashrom.org if any "
|
msg_cinfo("Please email a report to flashrom@flashrom.org if any "
|
||||||
"of the above operations\nwork correctly for you with "
|
"of the above operations\nwork correctly for you with "
|
||||||
"this flash part. Please include the flashrom\noutput "
|
"this flash part. Please include the flashrom\noutput "
|
||||||
"with the additional -V option for all operations you "
|
"with the additional -V option for all operations you "
|
||||||
@ -1278,13 +1278,13 @@ int doit(struct flashchip *flash, int force, char *filename, int read_it, int wr
|
|||||||
|
|
||||||
if (erase_it) {
|
if (erase_it) {
|
||||||
if (flash->tested & TEST_BAD_ERASE) {
|
if (flash->tested & TEST_BAD_ERASE) {
|
||||||
fprintf(stderr, "Erase is not working on this chip. ");
|
msg_cerr("Erase is not working on this chip. ");
|
||||||
if (!force) {
|
if (!force) {
|
||||||
fprintf(stderr, "Aborting.\n");
|
msg_cerr("Aborting.\n");
|
||||||
programmer_shutdown();
|
programmer_shutdown();
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Continuing anyway.\n");
|
msg_cerr("Continuing anyway.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flash->unlock)
|
if (flash->unlock)
|
||||||
@ -1310,24 +1310,24 @@ int doit(struct flashchip *flash, int force, char *filename, int read_it, int wr
|
|||||||
flash->unlock(flash);
|
flash->unlock(flash);
|
||||||
|
|
||||||
if (flash->tested & TEST_BAD_ERASE) {
|
if (flash->tested & TEST_BAD_ERASE) {
|
||||||
fprintf(stderr, "Erase is not working on this chip "
|
msg_cerr("Erase is not working on this chip "
|
||||||
"and erase is needed for write. ");
|
"and erase is needed for write. ");
|
||||||
if (!force) {
|
if (!force) {
|
||||||
fprintf(stderr, "Aborting.\n");
|
msg_cerr("Aborting.\n");
|
||||||
programmer_shutdown();
|
programmer_shutdown();
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Continuing anyway.\n");
|
msg_cerr("Continuing anyway.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flash->tested & TEST_BAD_WRITE) {
|
if (flash->tested & TEST_BAD_WRITE) {
|
||||||
fprintf(stderr, "Write is not working on this chip. ");
|
msg_cerr("Write is not working on this chip. ");
|
||||||
if (!force) {
|
if (!force) {
|
||||||
fprintf(stderr, "Aborting.\n");
|
msg_cerr("Aborting.\n");
|
||||||
programmer_shutdown();
|
programmer_shutdown();
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Continuing anyway.\n");
|
msg_cerr("Continuing anyway.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((image = fopen(filename, "rb")) == NULL) {
|
if ((image = fopen(filename, "rb")) == NULL) {
|
||||||
@ -1341,7 +1341,7 @@ int doit(struct flashchip *flash, int force, char *filename, int read_it, int wr
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
if (image_stat.st_size != flash->total_size * 1024) {
|
if (image_stat.st_size != flash->total_size * 1024) {
|
||||||
fprintf(stderr, "Error: Image size doesn't match\n");
|
msg_gerr("Error: Image size doesn't match\n");
|
||||||
programmer_shutdown();
|
programmer_shutdown();
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
@ -1352,7 +1352,7 @@ int doit(struct flashchip *flash, int force, char *filename, int read_it, int wr
|
|||||||
#endif
|
#endif
|
||||||
fclose(image);
|
fclose(image);
|
||||||
if (numbytes != size) {
|
if (numbytes != size) {
|
||||||
fprintf(stderr, "Error: Failed to read file. Got %ld bytes, wanted %ld!\n", numbytes, size);
|
msg_gerr("Error: Failed to read file. Got %ld bytes, wanted %ld!\n", numbytes, size);
|
||||||
programmer_shutdown();
|
programmer_shutdown();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -1365,20 +1365,20 @@ int doit(struct flashchip *flash, int force, char *filename, int read_it, int wr
|
|||||||
// ////////////////////////////////////////////////////////////
|
// ////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
if (write_it) {
|
if (write_it) {
|
||||||
printf("Writing flash chip... ");
|
msg_cinfo("Writing flash chip... ");
|
||||||
if (!flash->write) {
|
if (!flash->write) {
|
||||||
fprintf(stderr, "Error: flashrom has no write function for this flash chip.\n");
|
msg_cerr("Error: flashrom has no write function for this flash chip.\n");
|
||||||
programmer_shutdown();
|
programmer_shutdown();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
ret = flash->write(flash, buf);
|
ret = flash->write(flash, buf);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
fprintf(stderr, "FAILED!\n");
|
msg_cerr("FAILED!\n");
|
||||||
emergency_help_message();
|
emergency_help_message();
|
||||||
programmer_shutdown();
|
programmer_shutdown();
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
printf("COMPLETE.\n");
|
msg_cinfo("COMPLETE.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ void get_io_perms(void)
|
|||||||
#else
|
#else
|
||||||
if (iopl(3) != 0) {
|
if (iopl(3) != 0) {
|
||||||
#endif
|
#endif
|
||||||
fprintf(stderr, "ERROR: Could not get I/O privileges (%s).\n"
|
msg_perr("ERROR: Could not get I/O privileges (%s).\n"
|
||||||
"You need to be root.\n", strerror(errno));
|
"You need to be root.\n", strerror(errno));
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
79
ichspi.c
79
ichspi.c
@ -38,17 +38,6 @@
|
|||||||
#include "chipdrivers.h"
|
#include "chipdrivers.h"
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
|
||||||
/* Change this to #define if you want lowlevel debugging of commands
|
|
||||||
* sent to the ICH/VIA SPI controller.
|
|
||||||
*/
|
|
||||||
#undef COMM_DEBUG
|
|
||||||
|
|
||||||
#ifdef COMM_DEBUG
|
|
||||||
#define msg_comm_debug printf_debug
|
|
||||||
#else
|
|
||||||
#define msg_comm_debug(...) do {} while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* ICH9 controller register definition */
|
/* ICH9 controller register definition */
|
||||||
#define ICH9_REG_FADDR 0x08 /* 32 Bits */
|
#define ICH9_REG_FADDR 0x08 /* 32 Bits */
|
||||||
#define ICH9_REG_FDATA0 0x10 /* 64 Bytes */
|
#define ICH9_REG_FDATA0 0x10 /* 64 Bytes */
|
||||||
@ -237,7 +226,7 @@ static int generate_opcodes(OPCODES * op)
|
|||||||
uint32_t opmenu[2];
|
uint32_t opmenu[2];
|
||||||
|
|
||||||
if (op == NULL) {
|
if (op == NULL) {
|
||||||
printf_debug("\n%s: null OPCODES pointer!\n", __func__);
|
msg_perr("\n%s: null OPCODES pointer!\n", __func__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -256,7 +245,7 @@ static int generate_opcodes(OPCODES * op)
|
|||||||
opmenu[1] = REGREAD32(ICH9_REG_OPMENU + 4);
|
opmenu[1] = REGREAD32(ICH9_REG_OPMENU + 4);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf_debug("%s: unsupported chipset\n", __func__);
|
msg_perr("%s: unsupported chipset\n", __func__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,7 +304,7 @@ int program_opcodes(OPCODES * op)
|
|||||||
opmenu[1] |= ((uint32_t) op->opcode[a].opcode) << ((a - 4) * 8);
|
opmenu[1] |= ((uint32_t) op->opcode[a].opcode) << ((a - 4) * 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
printf_debug("\n%s: preop=%04x optype=%04x opmenu=%08x%08x\n", __func__, preop, optype, opmenu[0], opmenu[1]);
|
msg_pdbg("\n%s: preop=%04x optype=%04x opmenu=%08x%08x\n", __func__, preop, optype, opmenu[0], opmenu[1]);
|
||||||
switch (spi_controller) {
|
switch (spi_controller) {
|
||||||
case SPI_CONTROLLER_ICH7:
|
case SPI_CONTROLLER_ICH7:
|
||||||
case SPI_CONTROLLER_VIA:
|
case SPI_CONTROLLER_VIA:
|
||||||
@ -331,7 +320,7 @@ int program_opcodes(OPCODES * op)
|
|||||||
REGWRITE32(ICH9_REG_OPMENU + 4, opmenu[1]);
|
REGWRITE32(ICH9_REG_OPMENU + 4, opmenu[1]);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printf_debug("%s: unsupported chipset\n", __func__);
|
msg_perr("%s: unsupported chipset\n", __func__);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -352,22 +341,22 @@ int ich_init_opcodes(void)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (ichspi_lock) {
|
if (ichspi_lock) {
|
||||||
printf_debug("Generating OPCODES... ");
|
msg_pdbg("Generating OPCODES... ");
|
||||||
curopcodes_done = &O_EXISTING;
|
curopcodes_done = &O_EXISTING;
|
||||||
rc = generate_opcodes(curopcodes_done);
|
rc = generate_opcodes(curopcodes_done);
|
||||||
} else {
|
} else {
|
||||||
printf_debug("Programming OPCODES... ");
|
msg_pdbg("Programming OPCODES... ");
|
||||||
curopcodes_done = &O_ST_M25P;
|
curopcodes_done = &O_ST_M25P;
|
||||||
rc = program_opcodes(curopcodes_done);
|
rc = program_opcodes(curopcodes_done);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rc) {
|
if (rc) {
|
||||||
curopcodes = NULL;
|
curopcodes = NULL;
|
||||||
printf_debug("failed\n");
|
msg_perr("failed\n");
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
curopcodes = curopcodes_done;
|
curopcodes = curopcodes_done;
|
||||||
printf_debug("done\n");
|
msg_pdbg("done\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -439,7 +428,7 @@ static int ich7_run_opcode(OPCODE op, uint32_t offset,
|
|||||||
opmenu >>= 8;
|
opmenu >>= 8;
|
||||||
}
|
}
|
||||||
if (opcode_index == 8) {
|
if (opcode_index == 8) {
|
||||||
printf_debug("Opcode %x not found.\n", op.opcode);
|
msg_pdbg("Opcode %x not found.\n", op.opcode);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
temp16 |= ((uint16_t) (opcode_index & 0x07)) << 4;
|
temp16 |= ((uint16_t) (opcode_index & 0x07)) << 4;
|
||||||
@ -468,11 +457,12 @@ static int ich7_run_opcode(OPCODE op, uint32_t offset,
|
|||||||
programmer_delay(10);
|
programmer_delay(10);
|
||||||
}
|
}
|
||||||
if (!timeout) {
|
if (!timeout) {
|
||||||
printf_debug("timeout\n");
|
msg_perr("timeout\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME: make sure we do not needlessly cause transaction errors. */
|
||||||
if ((REGREAD16(ICH7_REG_SPIS) & SPIS_FCERR) != 0) {
|
if ((REGREAD16(ICH7_REG_SPIS) & SPIS_FCERR) != 0) {
|
||||||
printf_debug("Transaction error!\n");
|
msg_pdbg("Transaction error!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -557,7 +547,7 @@ static int ich9_run_opcode(OPCODE op, uint32_t offset,
|
|||||||
opmenu >>= 8;
|
opmenu >>= 8;
|
||||||
}
|
}
|
||||||
if (opcode_index == 8) {
|
if (opcode_index == 8) {
|
||||||
printf_debug("Opcode %x not found.\n", op.opcode);
|
msg_pdbg("Opcode %x not found.\n", op.opcode);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
temp32 |= ((uint32_t) (opcode_index & 0x07)) << (8 + 4);
|
temp32 |= ((uint32_t) (opcode_index & 0x07)) << (8 + 4);
|
||||||
@ -586,11 +576,12 @@ static int ich9_run_opcode(OPCODE op, uint32_t offset,
|
|||||||
programmer_delay(10);
|
programmer_delay(10);
|
||||||
}
|
}
|
||||||
if (!timeout) {
|
if (!timeout) {
|
||||||
printf_debug("timeout\n");
|
msg_perr("timeout\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* FIXME make sure we do not needlessly cause transaction errors. */
|
||||||
if ((REGREAD32(ICH9_REG_SSFS) & SSFS_FCERR) != 0) {
|
if ((REGREAD32(ICH9_REG_SSFS) & SSFS_FCERR) != 0) {
|
||||||
printf_debug("Transaction error!\n");
|
msg_pdbg("Transaction error!\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -615,7 +606,7 @@ static int run_opcode(OPCODE op, uint32_t offset,
|
|||||||
switch (spi_controller) {
|
switch (spi_controller) {
|
||||||
case SPI_CONTROLLER_VIA:
|
case SPI_CONTROLLER_VIA:
|
||||||
if (datalength > 16) {
|
if (datalength > 16) {
|
||||||
fprintf(stderr, "%s: Internal command size error for "
|
msg_perr("%s: Internal command size error for "
|
||||||
"opcode 0x%02x, got datalength=%i, want <=16\n",
|
"opcode 0x%02x, got datalength=%i, want <=16\n",
|
||||||
__func__, op.opcode, datalength);
|
__func__, op.opcode, datalength);
|
||||||
return SPI_INVALID_LENGTH;
|
return SPI_INVALID_LENGTH;
|
||||||
@ -623,7 +614,7 @@ static int run_opcode(OPCODE op, uint32_t offset,
|
|||||||
return ich7_run_opcode(op, offset, datalength, data, 16);
|
return ich7_run_opcode(op, offset, datalength, data, 16);
|
||||||
case SPI_CONTROLLER_ICH7:
|
case SPI_CONTROLLER_ICH7:
|
||||||
if (datalength > 64) {
|
if (datalength > 64) {
|
||||||
fprintf(stderr, "%s: Internal command size error for "
|
msg_perr("%s: Internal command size error for "
|
||||||
"opcode 0x%02x, got datalength=%i, want <=16\n",
|
"opcode 0x%02x, got datalength=%i, want <=16\n",
|
||||||
__func__, op.opcode, datalength);
|
__func__, op.opcode, datalength);
|
||||||
return SPI_INVALID_LENGTH;
|
return SPI_INVALID_LENGTH;
|
||||||
@ -631,14 +622,14 @@ static int run_opcode(OPCODE op, uint32_t offset,
|
|||||||
return ich7_run_opcode(op, offset, datalength, data, 64);
|
return ich7_run_opcode(op, offset, datalength, data, 64);
|
||||||
case SPI_CONTROLLER_ICH9:
|
case SPI_CONTROLLER_ICH9:
|
||||||
if (datalength > 64) {
|
if (datalength > 64) {
|
||||||
fprintf(stderr, "%s: Internal command size error for "
|
msg_perr("%s: Internal command size error for "
|
||||||
"opcode 0x%02x, got datalength=%i, want <=16\n",
|
"opcode 0x%02x, got datalength=%i, want <=16\n",
|
||||||
__func__, op.opcode, datalength);
|
__func__, op.opcode, datalength);
|
||||||
return SPI_INVALID_LENGTH;
|
return SPI_INVALID_LENGTH;
|
||||||
}
|
}
|
||||||
return ich9_run_opcode(op, offset, datalength, data);
|
return ich9_run_opcode(op, offset, datalength, data);
|
||||||
default:
|
default:
|
||||||
printf_debug("%s: unsupported chipset\n", __func__);
|
msg_perr("%s: unsupported chipset\n", __func__);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we ever get here, something really weird happened */
|
/* If we ever get here, something really weird happened */
|
||||||
@ -652,14 +643,14 @@ static int ich_spi_write_page(struct flashchip *flash, uint8_t * bytes,
|
|||||||
uint32_t remaining = page_size;
|
uint32_t remaining = page_size;
|
||||||
int towrite;
|
int towrite;
|
||||||
|
|
||||||
msg_comm_debug("ich_spi_write_page: offset=%d, number=%d, buf=%p\n",
|
msg_pspew("ich_spi_write_page: offset=%d, number=%d, buf=%p\n",
|
||||||
offset, page_size, bytes);
|
offset, page_size, bytes);
|
||||||
|
|
||||||
for (; remaining > 0; remaining -= towrite) {
|
for (; remaining > 0; remaining -= towrite) {
|
||||||
towrite = min(remaining, maxdata);
|
towrite = min(remaining, maxdata);
|
||||||
if (spi_nbyte_program(offset + (page_size - remaining),
|
if (spi_nbyte_program(offset + (page_size - remaining),
|
||||||
&bytes[page_size - remaining], towrite)) {
|
&bytes[page_size - remaining], towrite)) {
|
||||||
printf_debug("Error writing");
|
msg_perr("Error writing");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -687,14 +678,14 @@ int ich_spi_write_256(struct flashchip *flash, uint8_t * buf)
|
|||||||
|
|
||||||
spi_disable_blockprotect();
|
spi_disable_blockprotect();
|
||||||
/* Erase first */
|
/* Erase first */
|
||||||
printf("Erasing flash before programming... ");
|
msg_pinfo("Erasing flash before programming... ");
|
||||||
if (erase_flash(flash)) {
|
if (erase_flash(flash)) {
|
||||||
fprintf(stderr, "ERASE FAILED!\n");
|
msg_perr("ERASE FAILED!\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
printf("done.\n");
|
msg_pinfo("done.\n");
|
||||||
|
|
||||||
printf("Programming page: \n");
|
msg_pinfo("Programming page: \n");
|
||||||
for (i = 0; i < total_size / erase_size; i++) {
|
for (i = 0; i < total_size / erase_size; i++) {
|
||||||
if (spi_controller == SPI_CONTROLLER_VIA)
|
if (spi_controller == SPI_CONTROLLER_VIA)
|
||||||
maxdata = 16;
|
maxdata = 16;
|
||||||
@ -706,7 +697,7 @@ int ich_spi_write_256(struct flashchip *flash, uint8_t * buf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("\n");
|
msg_pinfo("\n");
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
@ -728,7 +719,7 @@ int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
|
|||||||
/* FIXME: Reprogram opcodes if possible. Autodetect type of
|
/* FIXME: Reprogram opcodes if possible. Autodetect type of
|
||||||
* opcode by checking readcnt/writecnt.
|
* opcode by checking readcnt/writecnt.
|
||||||
*/
|
*/
|
||||||
printf_debug("Invalid OPCODE 0x%02x\n", cmd);
|
msg_pdbg("Invalid OPCODE 0x%02x\n", cmd);
|
||||||
return SPI_INVALID_OPCODE;
|
return SPI_INVALID_OPCODE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -743,21 +734,21 @@ int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
|
|||||||
*/
|
*/
|
||||||
if ((opcode->spi_type == SPI_OPCODE_TYPE_READ_WITH_ADDRESS) &&
|
if ((opcode->spi_type == SPI_OPCODE_TYPE_READ_WITH_ADDRESS) &&
|
||||||
(writecnt != 4)) {
|
(writecnt != 4)) {
|
||||||
fprintf(stderr, "%s: Internal command size error for opcode "
|
msg_perr("%s: Internal command size error for opcode "
|
||||||
"0x%02x, got writecnt=%i, want =4\n", __func__, cmd,
|
"0x%02x, got writecnt=%i, want =4\n", __func__, cmd,
|
||||||
writecnt);
|
writecnt);
|
||||||
return SPI_INVALID_LENGTH;
|
return SPI_INVALID_LENGTH;
|
||||||
}
|
}
|
||||||
if ((opcode->spi_type == SPI_OPCODE_TYPE_READ_NO_ADDRESS) &&
|
if ((opcode->spi_type == SPI_OPCODE_TYPE_READ_NO_ADDRESS) &&
|
||||||
(writecnt != 1)) {
|
(writecnt != 1)) {
|
||||||
fprintf(stderr, "%s: Internal command size error for opcode "
|
msg_perr("%s: Internal command size error for opcode "
|
||||||
"0x%02x, got writecnt=%i, want =1\n", __func__, cmd,
|
"0x%02x, got writecnt=%i, want =1\n", __func__, cmd,
|
||||||
writecnt);
|
writecnt);
|
||||||
return SPI_INVALID_LENGTH;
|
return SPI_INVALID_LENGTH;
|
||||||
}
|
}
|
||||||
if ((opcode->spi_type == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS) &&
|
if ((opcode->spi_type == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS) &&
|
||||||
(writecnt < 4)) {
|
(writecnt < 4)) {
|
||||||
fprintf(stderr, "%s: Internal command size error for opcode "
|
msg_perr("%s: Internal command size error for opcode "
|
||||||
"0x%02x, got writecnt=%i, want >=4\n", __func__, cmd,
|
"0x%02x, got writecnt=%i, want >=4\n", __func__, cmd,
|
||||||
writecnt);
|
writecnt);
|
||||||
return SPI_INVALID_LENGTH;
|
return SPI_INVALID_LENGTH;
|
||||||
@ -765,7 +756,7 @@ int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
|
|||||||
if (((opcode->spi_type == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS) ||
|
if (((opcode->spi_type == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS) ||
|
||||||
(opcode->spi_type == SPI_OPCODE_TYPE_WRITE_NO_ADDRESS)) &&
|
(opcode->spi_type == SPI_OPCODE_TYPE_WRITE_NO_ADDRESS)) &&
|
||||||
(readcnt)) {
|
(readcnt)) {
|
||||||
fprintf(stderr, "%s: Internal command size error for opcode "
|
msg_perr("%s: Internal command size error for opcode "
|
||||||
"0x%02x, got readcnt=%i, want =0\n", __func__, cmd,
|
"0x%02x, got readcnt=%i, want =0\n", __func__, cmd,
|
||||||
readcnt);
|
readcnt);
|
||||||
return SPI_INVALID_LENGTH;
|
return SPI_INVALID_LENGTH;
|
||||||
@ -792,7 +783,7 @@ int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
|
|||||||
|
|
||||||
result = run_opcode(*opcode, addr, count, data);
|
result = run_opcode(*opcode, addr, count, data);
|
||||||
if (result) {
|
if (result) {
|
||||||
printf_debug("run OPCODE 0x%02x failed\n", opcode->opcode);
|
msg_pdbg("run OPCODE 0x%02x failed\n", opcode->opcode);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@ -817,7 +808,7 @@ int ich_spi_send_multicommand(struct spi_command *cmds)
|
|||||||
*/
|
*/
|
||||||
if (find_preop(curopcodes,
|
if (find_preop(curopcodes,
|
||||||
(cmds + 1)->writearr[0]) != -1) {
|
(cmds + 1)->writearr[0]) != -1) {
|
||||||
fprintf(stderr, "%s: Two subsequent "
|
msg_perr("%s: Two subsequent "
|
||||||
"preopcodes 0x%02x and 0x%02x, "
|
"preopcodes 0x%02x and 0x%02x, "
|
||||||
"ignoring the first.\n",
|
"ignoring the first.\n",
|
||||||
__func__, cmds->writearr[0],
|
__func__, cmds->writearr[0],
|
||||||
@ -829,7 +820,7 @@ int ich_spi_send_multicommand(struct spi_command *cmds)
|
|||||||
* No need to bother with fixups.
|
* No need to bother with fixups.
|
||||||
*/
|
*/
|
||||||
if (!ichspi_lock) {
|
if (!ichspi_lock) {
|
||||||
printf_debug("%s: FIXME: Add on-the-fly"
|
msg_pdbg("%s: FIXME: Add on-the-fly"
|
||||||
" reprogramming of the "
|
" reprogramming of the "
|
||||||
"chipset opcode list.\n",
|
"chipset opcode list.\n",
|
||||||
__func__);
|
__func__);
|
||||||
|
12
pcidev.c
12
pcidev.c
@ -45,7 +45,7 @@ uint32_t pcidev_validate(struct pci_dev *dev, uint32_t bar,
|
|||||||
*/
|
*/
|
||||||
addr = pci_read_long(dev, bar);
|
addr = pci_read_long(dev, bar);
|
||||||
|
|
||||||
printf("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x).\n",
|
msg_pinfo("Found \"%s %s\" (%04x:%04x, BDF %02x:%02x.%x).\n",
|
||||||
devs[i].vendor_name, devs[i].device_name,
|
devs[i].vendor_name, devs[i].device_name,
|
||||||
dev->vendor_id, dev->device_id, dev->bus, dev->dev,
|
dev->vendor_id, dev->device_id, dev->bus, dev->dev,
|
||||||
dev->func);
|
dev->func);
|
||||||
@ -66,7 +66,7 @@ uint32_t pcidev_validate(struct pci_dev *dev, uint32_t bar,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (devs[i].status == NT) {
|
if (devs[i].status == NT) {
|
||||||
printf("===\nThis PCI device is UNTESTED. Please "
|
msg_pinfo("===\nThis PCI device is UNTESTED. Please "
|
||||||
"report the 'flashrom -p xxxx' output \n"
|
"report the 'flashrom -p xxxx' output \n"
|
||||||
"to flashrom@flashrom.org if it works "
|
"to flashrom@flashrom.org if it works "
|
||||||
"for you. Thank you for your help!\n===\n");
|
"for you. Thank you for your help!\n===\n");
|
||||||
@ -95,7 +95,7 @@ uint32_t pcidev_init(uint16_t vendor_id, uint32_t bar,
|
|||||||
filter.vendor = vendor_id;
|
filter.vendor = vendor_id;
|
||||||
if (pcidev_bdf != NULL) {
|
if (pcidev_bdf != NULL) {
|
||||||
if ((msg = pci_filter_parse_slot(&filter, pcidev_bdf))) {
|
if ((msg = pci_filter_parse_slot(&filter, pcidev_bdf))) {
|
||||||
fprintf(stderr, "Error: %s\n", msg);
|
msg_perr("Error: %s\n", msg);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -112,10 +112,10 @@ uint32_t pcidev_init(uint16_t vendor_id, uint32_t bar,
|
|||||||
|
|
||||||
/* Only continue if exactly one supported PCI dev has been found. */
|
/* Only continue if exactly one supported PCI dev has been found. */
|
||||||
if (found == 0) {
|
if (found == 0) {
|
||||||
fprintf(stderr, "Error: No supported PCI device found.\n");
|
msg_perr("Error: No supported PCI device found.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
} else if (found > 1) {
|
} else if (found > 1) {
|
||||||
fprintf(stderr, "Error: Multiple supported PCI devices found. "
|
msg_perr("Error: Multiple supported PCI devices found. "
|
||||||
"Use 'flashrom -p xxxx:bb:dd.f' \n"
|
"Use 'flashrom -p xxxx:bb:dd.f' \n"
|
||||||
"to explicitly select the card with the given BDF "
|
"to explicitly select the card with the given BDF "
|
||||||
"(PCI bus, device, function).\n");
|
"(PCI bus, device, function).\n");
|
||||||
@ -130,7 +130,7 @@ void print_supported_pcidevs(struct pcidev_status *devs)
|
|||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; devs[i].vendor_name != NULL; i++) {
|
for (i = 0; devs[i].vendor_name != NULL; i++) {
|
||||||
printf("%s %s [%02x:%02x]%s\n", devs[i].vendor_name,
|
msg_pinfo("%s %s [%02x:%02x]%s\n", devs[i].vendor_name,
|
||||||
devs[i].device_name, devs[i].vendor_id,
|
devs[i].device_name, devs[i].vendor_id,
|
||||||
devs[i].device_id,
|
devs[i].device_id,
|
||||||
(devs[i].status == NT) ? " (untested)" : "");
|
(devs[i].status == NT) ? " (untested)" : "");
|
||||||
|
38
physmap.c
38
physmap.c
@ -158,7 +158,7 @@ void *sys_physmap_ro_cached(unsigned long phys_addr, size_t len)
|
|||||||
if (-1 == fd_mem_cached) {
|
if (-1 == fd_mem_cached) {
|
||||||
/* Open the memory device CACHED. */
|
/* Open the memory device CACHED. */
|
||||||
if (-1 == (fd_mem_cached = open(MEM_DEV, O_RDWR))) {
|
if (-1 == (fd_mem_cached = open(MEM_DEV, O_RDWR))) {
|
||||||
perror("Critical error: open(" MEM_DEV ")");
|
msg_perr("Critical error: open(" MEM_DEV "): %s", strerror(errno));
|
||||||
exit(2);
|
exit(2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -171,7 +171,7 @@ void *sys_physmap_ro_cached(unsigned long phys_addr, size_t len)
|
|||||||
void physunmap(void *virt_addr, size_t len)
|
void physunmap(void *virt_addr, size_t len)
|
||||||
{
|
{
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
printf_debug("Not unmapping zero size at %p\n", virt_addr);
|
msg_pspew("Not unmapping zero size at %p\n", virt_addr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -189,18 +189,18 @@ void *physmap_common(const char *descr, unsigned long phys_addr, size_t len, int
|
|||||||
void *virt_addr;
|
void *virt_addr;
|
||||||
|
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
printf_debug("Not mapping %s, zero size at 0x%08lx.\n",
|
msg_pspew("Not mapping %s, zero size at 0x%08lx.\n",
|
||||||
descr, phys_addr);
|
descr, phys_addr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((getpagesize() - 1) & len) {
|
if ((getpagesize() - 1) & len) {
|
||||||
fprintf(stderr, "Mapping %s at 0x%08lx, unaligned size 0x%lx.\n",
|
msg_perr("Mapping %s at 0x%08lx, unaligned size 0x%lx.\n",
|
||||||
descr, phys_addr, (unsigned long)len);
|
descr, phys_addr, (unsigned long)len);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((getpagesize() - 1) & phys_addr) {
|
if ((getpagesize() - 1) & phys_addr) {
|
||||||
fprintf(stderr, "Mapping %s, 0x%lx bytes at unaligned 0x%08lx.\n",
|
msg_perr("Mapping %s, 0x%lx bytes at unaligned 0x%08lx.\n",
|
||||||
descr, (unsigned long)len, phys_addr);
|
descr, (unsigned long)len, phys_addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,15 +213,17 @@ void *physmap_common(const char *descr, unsigned long phys_addr, size_t len, int
|
|||||||
if (NULL == virt_addr) {
|
if (NULL == virt_addr) {
|
||||||
if (NULL == descr)
|
if (NULL == descr)
|
||||||
descr = "memory";
|
descr = "memory";
|
||||||
fprintf(stderr, "Error accessing %s, 0x%lx bytes at 0x%08lx\n", descr, (unsigned long)len, phys_addr);
|
msg_perr("Error accessing %s, 0x%lx bytes at 0x%08lx\n", descr, (unsigned long)len, phys_addr);
|
||||||
perror(MEM_DEV " mmap failed");
|
perror(MEM_DEV " mmap failed");
|
||||||
|
#ifdef __linux__
|
||||||
if (EINVAL == errno) {
|
if (EINVAL == errno) {
|
||||||
fprintf(stderr, "In Linux this error can be caused by the CONFIG_NONPROMISC_DEVMEM (<2.6.27),\n");
|
msg_perr("In Linux this error can be caused by the CONFIG_NONPROMISC_DEVMEM (<2.6.27),\n");
|
||||||
fprintf(stderr, "CONFIG_STRICT_DEVMEM (>=2.6.27) and CONFIG_X86_PAT kernel options.\n");
|
msg_perr("CONFIG_STRICT_DEVMEM (>=2.6.27) and CONFIG_X86_PAT kernel options.\n");
|
||||||
fprintf(stderr, "Please check if either is enabled in your kernel before reporting a failure.\n");
|
msg_perr("Please check if either is enabled in your kernel before reporting a failure.\n");
|
||||||
fprintf(stderr, "You can override CONFIG_X86_PAT at boot with the nopat kernel parameter but\n");
|
msg_perr("You can override CONFIG_X86_PAT at boot with the nopat kernel parameter but\n");
|
||||||
fprintf(stderr, "disabling the other option unfortunately requires a kernel recompile. Sorry!\n");
|
msg_perr("disabling the other option unfortunately requires a kernel recompile. Sorry!\n");
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
if (!mayfail)
|
if (!mayfail)
|
||||||
exit(3);
|
exit(3);
|
||||||
}
|
}
|
||||||
@ -306,7 +308,7 @@ int setup_cpu_msr(int cpu)
|
|||||||
sprintf(msrfilename, "/dev/cpu/%d/msr", cpu);
|
sprintf(msrfilename, "/dev/cpu/%d/msr", cpu);
|
||||||
|
|
||||||
if (fd_msr != -1) {
|
if (fd_msr != -1) {
|
||||||
printf("MSR was already initialized\n");
|
msg_pinfo("MSR was already initialized\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +316,7 @@ int setup_cpu_msr(int cpu)
|
|||||||
|
|
||||||
if (fd_msr < 0) {
|
if (fd_msr < 0) {
|
||||||
perror("Error while opening /dev/cpu/0/msr");
|
perror("Error while opening /dev/cpu/0/msr");
|
||||||
printf("Did you run 'modprobe msr'?\n");
|
msg_pinfo("Did you run 'modprobe msr'?\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,7 +326,7 @@ int setup_cpu_msr(int cpu)
|
|||||||
void cleanup_cpu_msr(void)
|
void cleanup_cpu_msr(void)
|
||||||
{
|
{
|
||||||
if (fd_msr == -1) {
|
if (fd_msr == -1) {
|
||||||
printf("No MSR initialized.\n");
|
msg_pinfo("No MSR initialized.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,7 +391,7 @@ int setup_cpu_msr(int cpu)
|
|||||||
sprintf(msrfilename, "/dev/cpu%d", cpu);
|
sprintf(msrfilename, "/dev/cpu%d", cpu);
|
||||||
|
|
||||||
if (fd_msr != -1) {
|
if (fd_msr != -1) {
|
||||||
printf("MSR was already initialized\n");
|
msg_pinfo("MSR was already initialized\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -397,7 +399,7 @@ int setup_cpu_msr(int cpu)
|
|||||||
|
|
||||||
if (fd_msr < 0) {
|
if (fd_msr < 0) {
|
||||||
perror("Error while opening /dev/cpu0");
|
perror("Error while opening /dev/cpu0");
|
||||||
printf("Did you install ports/sysutils/devcpu?\n");
|
msg_pinfo("Did you install ports/sysutils/devcpu?\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -407,7 +409,7 @@ int setup_cpu_msr(int cpu)
|
|||||||
void cleanup_cpu_msr(void)
|
void cleanup_cpu_msr(void)
|
||||||
{
|
{
|
||||||
if (fd_msr == -1) {
|
if (fd_msr == -1) {
|
||||||
printf("No MSR initialized.\n");
|
msg_pinfo("No MSR initialized.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -445,7 +447,7 @@ int wrmsr(int addr, msr_t msr)
|
|||||||
|
|
||||||
int setup_cpu_msr(int cpu)
|
int setup_cpu_msr(int cpu)
|
||||||
{
|
{
|
||||||
printf("No MSR support for your OS yet.\n");
|
msg_pinfo("No MSR support for your OS yet.\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
8
spi.c
8
spi.c
@ -130,7 +130,7 @@ int spi_send_command(unsigned int writecnt, unsigned int readcnt,
|
|||||||
const unsigned char *writearr, unsigned char *readarr)
|
const unsigned char *writearr, unsigned char *readarr)
|
||||||
{
|
{
|
||||||
if (!spi_programmer[spi_controller].command) {
|
if (!spi_programmer[spi_controller].command) {
|
||||||
fprintf(stderr, "%s called, but SPI is unsupported on this "
|
msg_perr("%s called, but SPI is unsupported on this "
|
||||||
"hardware. Please report a bug.\n", __func__);
|
"hardware. Please report a bug.\n", __func__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -142,7 +142,7 @@ int spi_send_command(unsigned int writecnt, unsigned int readcnt,
|
|||||||
int spi_send_multicommand(struct spi_command *cmds)
|
int spi_send_multicommand(struct spi_command *cmds)
|
||||||
{
|
{
|
||||||
if (!spi_programmer[spi_controller].multicommand) {
|
if (!spi_programmer[spi_controller].multicommand) {
|
||||||
fprintf(stderr, "%s called, but SPI is unsupported on this "
|
msg_perr("%s called, but SPI is unsupported on this "
|
||||||
"hardware. Please report a bug.\n", __func__);
|
"hardware. Please report a bug.\n", __func__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -182,7 +182,7 @@ int default_spi_send_multicommand(struct spi_command *cmds)
|
|||||||
int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len)
|
int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len)
|
||||||
{
|
{
|
||||||
if (!spi_programmer[spi_controller].read) {
|
if (!spi_programmer[spi_controller].read) {
|
||||||
fprintf(stderr, "%s called, but SPI read is unsupported on this"
|
msg_perr("%s called, but SPI read is unsupported on this"
|
||||||
" hardware. Please report a bug.\n", __func__);
|
" hardware. Please report a bug.\n", __func__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -197,7 +197,7 @@ int spi_chip_read(struct flashchip *flash, uint8_t *buf, int start, int len)
|
|||||||
int spi_chip_write_256(struct flashchip *flash, uint8_t *buf)
|
int spi_chip_write_256(struct flashchip *flash, uint8_t *buf)
|
||||||
{
|
{
|
||||||
if (!spi_programmer[spi_controller].write_256) {
|
if (!spi_programmer[spi_controller].write_256) {
|
||||||
fprintf(stderr, "%s called, but SPI page write is unsupported "
|
msg_perr("%s called, but SPI page write is unsupported "
|
||||||
" on this hardware. Please report a bug.\n", __func__);
|
" on this hardware. Please report a bug.\n", __func__);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user