Peter Marheine has uploaded this change for review. ( https://review.coreboot.org/c/flashrom/+/55403 )
Change subject: lspcon: restart MPU on programmer shutdown ......................................................................
lspcon: restart MPU on programmer shutdown
Programmer initialization stops the on-chip MPU, and it was never restarted. Leaving it stopped seems to prevent some display detection from working, so implement restarting the MPU on programmer shutdown.
BUG=b:190359231 TEST=display hotplug works reliably after device communication
Change-Id: I66cd68f8f6905a2bfaf5b085bf08dcb218f42855 --- M lspcon_i2c_spi.c 1 file changed, 12 insertions(+), 1 deletion(-)
git pull ssh://review.coreboot.org:29418/flashrom refs/changes/03/55403/1
diff --git a/lspcon_i2c_spi.c b/lspcon_i2c_spi.c index 9f3bb9a..f8df9e4 100644 --- a/lspcon_i2c_spi.c +++ b/lspcon_i2c_spi.c @@ -327,6 +327,16 @@ return ret; }
+static int lspcon_i2c_spi_start_mpu(int fd) +{ + int ret; + // Assert reset + if ((ret = lspcon_i2c_spi_write_register(fd, MPU, 0xc0)) != 0) + return ret; + // Release reset and start MPU + return lspcon_i2c_spi_write_register(fd, MPU, 0); +} + static int lspcon_i2c_spi_map_page(int fd, unsigned int offset) { int ret = 0; @@ -418,15 +428,16 @@ .write_aai = lspcon_i2c_spi_write_aai, };
-/* TODO: MPU still stopped at this point, probably need to reset it. */ static int lspcon_i2c_spi_shutdown(void *data) { int ret = 0; struct lspcon_i2c_spi_data *lspcon_data = (struct lspcon_i2c_spi_data *)data; int fd = lspcon_data->fd; + ret |= lspcon_i2c_spi_enable_write_protection(fd); ret |= lspcon_i2c_spi_toggle_register_protection(fd, 0); + ret |= lspcon_i2c_spi_start_mpu(fd); i2c_close(fd); free(data);