diff --git a/src/mainboard/google/veyron_jerry/bootblock.c b/src/mainboard/google/veyron_jerry/bootblock.c index 4536f31069..5571d456f8 100644 --- a/src/mainboard/google/veyron_jerry/bootblock.c +++ b/src/mainboard/google/veyron_jerry/bootblock.c @@ -64,6 +64,7 @@ void bootblock_mainboard_init(void) /* i2c1 for tpm */ writel(IOMUX_I2C1, &rk3288_grf->iomux_i2c1); + i2c_init(1, 400*KHz); /* spi2 for firmware ROM */ writel(IOMUX_SPI2_CSCLK, &rk3288_grf->iomux_spi2csclk); diff --git a/src/mainboard/google/veyron_jerry/mainboard.c b/src/mainboard/google/veyron_jerry/mainboard.c index 9d8bb5d6dd..d9952605dc 100644 --- a/src/mainboard/google/veyron_jerry/mainboard.c +++ b/src/mainboard/google/veyron_jerry/mainboard.c @@ -72,7 +72,7 @@ static void configure_emmc(void) static void configure_codec(void) { writel(IOMUX_I2C2, &rk3288_grf->iomux_i2c2); /* CODEC I2C */ - i2c_init(2, 400000); /* CODEC I2C */ + i2c_init(2, 400*KHz); /* CODEC I2C */ writel(IOMUX_I2S, &rk3288_grf->iomux_i2s); writel(IOMUX_I2SCLK, &rk3288_grf->iomux_i2sclk); @@ -108,10 +108,6 @@ static void configure_vop(void) static void mainboard_init(device_t dev) { - setbits_le32(&rk3288_pmu->iomux_i2c0scl, IOMUX_I2C0SCL); /* PMIC I2C */ - setbits_le32(&rk3288_pmu->iomux_i2c0sda, IOMUX_I2C0SDA); /* PMIC I2C */ - i2c_init(0, 400000); /* PMIC I2C */ - gpio_output(GPIO_RESET, 0); configure_usb(); diff --git a/src/mainboard/google/veyron_mighty/bootblock.c b/src/mainboard/google/veyron_mighty/bootblock.c index 4536f31069..5571d456f8 100644 --- a/src/mainboard/google/veyron_mighty/bootblock.c +++ b/src/mainboard/google/veyron_mighty/bootblock.c @@ -64,6 +64,7 @@ void bootblock_mainboard_init(void) /* i2c1 for tpm */ writel(IOMUX_I2C1, &rk3288_grf->iomux_i2c1); + i2c_init(1, 400*KHz); /* spi2 for firmware ROM */ writel(IOMUX_SPI2_CSCLK, &rk3288_grf->iomux_spi2csclk); diff --git a/src/mainboard/google/veyron_mighty/mainboard.c b/src/mainboard/google/veyron_mighty/mainboard.c index dd2274840e..c7d51cc948 100644 --- a/src/mainboard/google/veyron_mighty/mainboard.c +++ b/src/mainboard/google/veyron_mighty/mainboard.c @@ -72,7 +72,7 @@ static void configure_emmc(void) static void configure_codec(void) { writel(IOMUX_I2C2, &rk3288_grf->iomux_i2c2); /* CODEC I2C */ - i2c_init(2, 400000); /* CODEC I2C */ + i2c_init(2, 400*KHz); /* CODEC I2C */ writel(IOMUX_I2S, &rk3288_grf->iomux_i2s); writel(IOMUX_I2SCLK, &rk3288_grf->iomux_i2sclk); @@ -108,10 +108,6 @@ static void configure_vop(void) static void mainboard_init(device_t dev) { - setbits_le32(&rk3288_pmu->iomux_i2c0scl, IOMUX_I2C0SCL); /* PMIC I2C */ - setbits_le32(&rk3288_pmu->iomux_i2c0sda, IOMUX_I2C0SDA); /* PMIC I2C */ - i2c_init(0, 400000); /* PMIC I2C */ - gpio_output(GPIO_RESET, 0); configure_usb(); diff --git a/src/mainboard/google/veyron_pinky/bootblock.c b/src/mainboard/google/veyron_pinky/bootblock.c index 4536f31069..5571d456f8 100644 --- a/src/mainboard/google/veyron_pinky/bootblock.c +++ b/src/mainboard/google/veyron_pinky/bootblock.c @@ -64,6 +64,7 @@ void bootblock_mainboard_init(void) /* i2c1 for tpm */ writel(IOMUX_I2C1, &rk3288_grf->iomux_i2c1); + i2c_init(1, 400*KHz); /* spi2 for firmware ROM */ writel(IOMUX_SPI2_CSCLK, &rk3288_grf->iomux_spi2csclk); diff --git a/src/mainboard/google/veyron_pinky/mainboard.c b/src/mainboard/google/veyron_pinky/mainboard.c index 4752547f6f..0266965753 100644 --- a/src/mainboard/google/veyron_pinky/mainboard.c +++ b/src/mainboard/google/veyron_pinky/mainboard.c @@ -103,7 +103,7 @@ static void configure_emmc(void) static void configure_codec(void) { writel(IOMUX_I2C2, &rk3288_grf->iomux_i2c2); /* CODEC I2C */ - i2c_init(2, 400000); /* CODEC I2C */ + i2c_init(2, 400*KHz); /* CODEC I2C */ writel(IOMUX_I2S, &rk3288_grf->iomux_i2s); writel(IOMUX_I2SCLK, &rk3288_grf->iomux_i2sclk); @@ -152,10 +152,6 @@ static void configure_vop(void) static void mainboard_init(device_t dev) { - setbits_le32(&rk3288_pmu->iomux_i2c0scl, IOMUX_I2C0SCL); /* PMIC I2C */ - setbits_le32(&rk3288_pmu->iomux_i2c0sda, IOMUX_I2C0SDA); /* PMIC I2C */ - i2c_init(0, 400000); /* PMIC I2C */ - gpio_output(GPIO_RESET, 0); configure_usb(); diff --git a/src/mainboard/google/veyron_speedy/bootblock.c b/src/mainboard/google/veyron_speedy/bootblock.c index 4536f31069..5571d456f8 100644 --- a/src/mainboard/google/veyron_speedy/bootblock.c +++ b/src/mainboard/google/veyron_speedy/bootblock.c @@ -64,6 +64,7 @@ void bootblock_mainboard_init(void) /* i2c1 for tpm */ writel(IOMUX_I2C1, &rk3288_grf->iomux_i2c1); + i2c_init(1, 400*KHz); /* spi2 for firmware ROM */ writel(IOMUX_SPI2_CSCLK, &rk3288_grf->iomux_spi2csclk); diff --git a/src/mainboard/google/veyron_speedy/mainboard.c b/src/mainboard/google/veyron_speedy/mainboard.c index 73595d79c1..8efc65d4dd 100644 --- a/src/mainboard/google/veyron_speedy/mainboard.c +++ b/src/mainboard/google/veyron_speedy/mainboard.c @@ -53,6 +53,7 @@ static void configure_sdmmc(void) /* use sdmmc0 io, disable JTAG function */ writel(RK_CLRBITS(1 << 12), &rk3288_grf->soc_con0); + /* Note: these power rail definitions are copied in romstage.c */ rk808_configure_ldo(PMIC_BUS, 4, 3300); /* VCCIO_SD */ rk808_configure_ldo(PMIC_BUS, 5, 3300); /* VCC33_SD */ @@ -71,7 +72,7 @@ static void configure_emmc(void) static void configure_codec(void) { writel(IOMUX_I2C2, &rk3288_grf->iomux_i2c2); /* CODEC I2C */ - i2c_init(2, 400000); /* CODEC I2C */ + i2c_init(2, 400*KHz); /* CODEC I2C */ writel(IOMUX_I2S, &rk3288_grf->iomux_i2s); writel(IOMUX_I2SCLK, &rk3288_grf->iomux_i2sclk); @@ -97,10 +98,6 @@ static void configure_vop(void) static void mainboard_init(device_t dev) { - setbits_le32(&rk3288_pmu->iomux_i2c0scl, IOMUX_I2C0SCL); /* PMIC I2C */ - setbits_le32(&rk3288_pmu->iomux_i2c0sda, IOMUX_I2C0SDA); /* PMIC I2C */ - i2c_init(0, 400000); /* PMIC I2C */ - gpio_output(GPIO_RESET, 0); configure_usb(); diff --git a/src/mainboard/google/veyron_speedy/romstage.c b/src/mainboard/google/veyron_speedy/romstage.c index 958b4dfb58..64a00a960b 100644 --- a/src/mainboard/google/veyron_speedy/romstage.c +++ b/src/mainboard/google/veyron_speedy/romstage.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -38,7 +39,7 @@ #include #include -#include "timer.h" +#include "board.h" static void regulate_vdd_log(unsigned int mv) { @@ -76,6 +77,12 @@ static void configure_l2ctlr(void) write_l2ctlr(l2ctlr); } +static void sdmmc_power_off(void) +{ + rk808_configure_ldo(PMIC_BUS, 4, 0); /* VCCIO_SD */ + rk808_configure_ldo(PMIC_BUS, 5, 0); /* VCC33_SD */ +} + void main(void) { void *entry; @@ -86,6 +93,9 @@ void main(void) configure_l2ctlr(); tsadc_init(); + /* Need to power cycle SD card to ensure it is properly reset. */ + sdmmc_power_off(); + /* vdd_log 1200mv is enough for ddr run 666Mhz */ regulate_vdd_log(1200); timestamp_add_now(TS_BEFORE_INITRAM);