From 5016820cc95697151552c64c14ca1e06013a881f Mon Sep 17 00:00:00 2001 From: Julius Werner Date: Mon, 10 Nov 2014 21:37:12 -0800 Subject: [PATCH] veyron: Adapt to new board revisions This patch adds support for Pinky rev3 (board ID 2) and Jerry rev2: the power button GPIO changed polarity to low, the 5V_DRV pin for USB power was moved to the AP again (welcome back!), and the EMMC_RST_L is now finally on a port with the right IO voltage so we don't need any weird pull-up tricks anymore. Since there are very few Jerry rev1s around, we'll just move it over to the new code directly without introducing board ID differences (also, because I have no idea how they stuffed it this time... is this one actually called rev2?). BRANCH=None BUG=None TEST=Still boots on my Pinky rev2, though that doesn't say much. Change-Id: Id11044cedcaac5a4ae07e696893823925107a6db Signed-off-by: Patrick Georgi Original-Commit-Id: 55344a9518ff04edcef01bcd40817e9e4b613717 Original-Change-Id: Iddee360fbda357ecde4ae5fbb5c3a01fe0c22474 Original-Signed-off-by: Julius Werner Original-Reviewed-on: https://chromium-review.googlesource.com/229010 Original-Reviewed-by: Lin Huang Original-Reviewed-by: David Hendricks Reviewed-on: http://review.coreboot.org/9551 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer --- src/mainboard/google/veyron_jerry/chromeos.c | 2 +- src/mainboard/google/veyron_jerry/mainboard.c | 8 ++------ src/mainboard/google/veyron_pinky/chromeos.c | 3 ++- src/mainboard/google/veyron_pinky/mainboard.c | 15 +++++++++++++-- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/mainboard/google/veyron_jerry/chromeos.c b/src/mainboard/google/veyron_jerry/chromeos.c index 68f72a0e03..6e6a855edf 100644 --- a/src/mainboard/google/veyron_jerry/chromeos.c +++ b/src/mainboard/google/veyron_jerry/chromeos.c @@ -67,7 +67,7 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Power:GPIO active high */ gpios->gpios[count].port = GPIO_POWER.raw; - gpios->gpios[count].polarity = ACTIVE_HIGH; + gpios->gpios[count].polarity = ACTIVE_LOW; gpios->gpios[count].value = gpio_get(GPIO_POWER); strncpy((char *)gpios->gpios[count].name, "power", GPIO_MAX_NAME_LENGTH); diff --git a/src/mainboard/google/veyron_jerry/mainboard.c b/src/mainboard/google/veyron_jerry/mainboard.c index e6a90b9132..c15c765cf4 100644 --- a/src/mainboard/google/veyron_jerry/mainboard.c +++ b/src/mainboard/google/veyron_jerry/mainboard.c @@ -42,6 +42,7 @@ static void configure_usb(void) { gpio_output(GPIO(0, B, 3), 1); /* HOST1_PWR_EN */ gpio_output(GPIO(0, B, 4), 1); /* USBOTG_PWREN_H */ + gpio_output(GPIO(7, C, 5), 1); /* 5V_DRV */ } static void configure_sdmmc(void) @@ -63,12 +64,7 @@ static void configure_emmc(void) writel(IOMUX_EMMCPWREN, &rk3288_grf->iomux_emmcpwren); writel(IOMUX_EMMCCMD, &rk3288_grf->iomux_emmccmd); - /* - * Use a pullup instead of a drive since the output is 3.3V and - * really should be 1.8V (oops). The external pulldown will help - * bring the voltage down if we only drive with a pullup here. - */ - gpio_input_pullup(GPIO(7, B, 4)); /* EMMC_RST_L */ + gpio_output(GPIO(2, B, 1), 1); /* EMMC_RST_L */ } static void configure_codec(void) diff --git a/src/mainboard/google/veyron_pinky/chromeos.c b/src/mainboard/google/veyron_pinky/chromeos.c index dc224a5a2f..8cfad3edcd 100644 --- a/src/mainboard/google/veyron_pinky/chromeos.c +++ b/src/mainboard/google/veyron_pinky/chromeos.c @@ -69,7 +69,8 @@ void fill_lb_gpios(struct lb_gpios *gpios) /* Power:GPIO active high */ gpios->gpios[count].port = GPIO_POWER.raw; - gpios->gpios[count].polarity = ACTIVE_HIGH; + gpios->gpios[count].polarity = board_id() > 1 ? ACTIVE_LOW : + ACTIVE_HIGH; gpios->gpios[count].value = gpio_get(GPIO_POWER); strncpy((char *)gpios->gpios[count].name, "power", GPIO_MAX_NAME_LENGTH); diff --git a/src/mainboard/google/veyron_pinky/mainboard.c b/src/mainboard/google/veyron_pinky/mainboard.c index f891e21a0f..2a887497b0 100644 --- a/src/mainboard/google/veyron_pinky/mainboard.c +++ b/src/mainboard/google/veyron_pinky/mainboard.c @@ -47,8 +47,11 @@ static void configure_usb(void) case 0: gpio_output(GPIO(7, B, 3), 1); /* 5V_DRV */ break; + case 1: + break; /* 5V_DRV moved to EC in rev2 */ default: - break; /* 5V_DRV moved to EC after rev1 */ + gpio_output(GPIO(7, C, 5), 1); /* 5V_DRV, again */ + break; } } @@ -79,12 +82,20 @@ static void configure_emmc(void) writel(IOMUX_EMMCPWREN, &rk3288_grf->iomux_emmcpwren); writel(IOMUX_EMMCCMD, &rk3288_grf->iomux_emmccmd); + switch (board_id()) { + case 0: + case 1: /* * Use a pullup instead of a drive since the output is 3.3V and * really should be 1.8V (oops). The external pulldown will help * bring the voltage down if we only drive with a pullup here. */ - gpio_input_pullup(GPIO(7, B, 4)); /* EMMC_RST_L */ + gpio_input_pullup(GPIO(7, B, 4)); /* EMMC_RST_L */ + break; + default: + gpio_output(GPIO(2, B, 1), 1); /* EMMC_RST_L */ + break; + } } static void configure_codec(void)