1
0
mirror of https://review.coreboot.org/flashrom.git synced 2025-07-01 14:11:15 +02:00

mediatek_i2c_spi.c: Add allow_brick=yes programmer param

Currently i2c programmers do not have a safe allow listing
mechanism via board_enable to facilitate fully qualified
chip detection.

Since i2c addresses alone can overlap a user may make the mistake
of using the wrong programmer. Although unlikely, it is within the
realm of possibility that a user could accidently somehow program
another chip on their board.

Change-Id: I2b8f7a9bfae68354105f3196cc40b9d5e795afdf
Signed-off-by: Edward O'Callaghan <quasisec@google.com>
Reviewed-on: https://review.coreboot.org/c/flashrom/+/65554
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Felix Singer <felixsinger@posteo.net>
Reviewed-by: Anastasia Klimchuk <aklm@chromium.org>
Reviewed-by: Thomas Heijligen <src@posteo.de>
This commit is contained in:
Edward O'Callaghan
2022-06-30 19:53:16 +10:00
committed by Thomas Heijligen
parent 84ba82c0e8
commit a97bbba09a

View File

@ -464,9 +464,46 @@ static const struct spi_master spi_master_i2c_mediatek = {
.probe_opcode = default_spi_probe_opcode, .probe_opcode = default_spi_probe_opcode,
}; };
static int get_params(bool *allow_brick)
{
char *brick_str = NULL;
int ret = 0;
*allow_brick = false; /* Default behaviour is to bail. */
brick_str = extract_programmer_param_str("allow_brick");
if (brick_str) {
if (!strcmp(brick_str, "yes")) {
*allow_brick = true;
} else {
msg_perr("%s: Incorrect param format, allow_brick=yes.\n", __func__);
ret = SPI_GENERIC_ERROR;
}
}
free(brick_str);
return ret;
}
static int mediatek_init(void) static int mediatek_init(void)
{ {
int ret; int ret;
bool allow_brick;
if (get_params(&allow_brick))
return SPI_GENERIC_ERROR;
/*
* TODO: Once board_enable can facilitate safe i2c allow listing
* then this can be removed.
*/
if (!allow_brick) {
msg_perr("%s: For i2c drivers you must explicitly 'allow_brick=yes'. ", __func__);
msg_perr("There is currently no way to determine if the programmer works on a board "
"as i2c device address space can be overloaded. Set 'allow_brick=yes' if "
"you are sure you know what you are doing.\n");
return SPI_GENERIC_ERROR;
}
int fd = i2c_open_from_programmer_params(ISP_PORT, 0); int fd = i2c_open_from_programmer_params(ISP_PORT, 0);
if (fd < 0) { if (fd < 0) {
msg_perr("Failed to open i2c\n"); msg_perr("Failed to open i2c\n");