Patrick Georgi (pgeorgi@google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/16700
-gerrit
commit 455e4f4b068970b0512191d62a054fab5031b666 Author: Douglas Anderson dianders@chromium.org Date: Tue Sep 6 13:51:03 2016 -0700
google/gru: Init the PWM pinmux after setting up the PWM
If we setup the PWM _after_ the pinmux then there's a period of time when we're driving the PWM incorrectly. Let's setup the regulator and _then_ configure the pinmux.
This fixes no known bugs, but it is more correct and probably makes the signals look better at bootup.
BRANCH=None BUG=None TEST=scope
Change-Id: I311c0eded873b65e0489373e87b88bcdd8e4b806 Signed-off-by: Patrick Georgi pgeorgi@chromium.org Original-Commit-Id: fcf4d0ba29d82cce779c0b25ead36de4a95d97a1 Original-Change-Id: I5124f48d04a18c07bbd2d54bc08ee001c9c7e8d1 Original-Signed-off-by: Douglas Anderson dianders@chromium.org Original-Reviewed-on: https://chromium-review.googlesource.com/381592 Original-Reviewed-by: Simon Glass sjg@google.com Original-Reviewed-by: Julius Werner jwerner@chromium.org --- src/mainboard/google/gru/pwm_regulator.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-)
diff --git a/src/mainboard/google/gru/pwm_regulator.c b/src/mainboard/google/gru/pwm_regulator.c index d0cdf43..d6d2eec 100644 --- a/src/mainboard/google/gru/pwm_regulator.c +++ b/src/mainboard/google/gru/pwm_regulator.c @@ -44,21 +44,6 @@ void pwm_regulator_configure(enum pwm_regulator pwm, int millivolt) int duty_ns, voltage_max, voltage_min; int voltage = millivolt * 10; /* for higer calculation accuracy */
- switch (pwm) { - case PWM_REGULATOR_GPU: - write32(&rk3399_grf->iomux_pwm_0, IOMUX_PWM_0); - break; - case PWM_REGULATOR_BIG: - write32(&rk3399_grf->iomux_pwm_1, IOMUX_PWM_1); - break; - case PWM_REGULATOR_LIT: - write32(&rk3399_pmugrf->iomux_pwm_2, IOMUX_PWM_2); - break; - case PWM_REGULATOR_CENTERLOG: - write32(&rk3399_pmugrf->iomux_pwm_3a, IOMUX_PWM_3_A); - break; - } - voltage_min = PWM_DESIGN_VOLTAGE_MIN; voltage_max = PWM_DESIGN_VOLTAGE_MAX; if (!(IS_ENABLED(CONFIG_BOARD_GOOGLE_KEVIN) && board_id() < 6) && @@ -80,4 +65,19 @@ void pwm_regulator_configure(enum pwm_regulator pwm, int millivolt) / (voltage_max - voltage_min);
pwm_init(pwm, PWM_PERIOD, duty_ns); + + switch (pwm) { + case PWM_REGULATOR_GPU: + write32(&rk3399_grf->iomux_pwm_0, IOMUX_PWM_0); + break; + case PWM_REGULATOR_BIG: + write32(&rk3399_grf->iomux_pwm_1, IOMUX_PWM_1); + break; + case PWM_REGULATOR_LIT: + write32(&rk3399_pmugrf->iomux_pwm_2, IOMUX_PWM_2); + break; + case PWM_REGULATOR_CENTERLOG: + write32(&rk3399_pmugrf->iomux_pwm_3a, IOMUX_PWM_3_A); + break; + } }