Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 1 | /* |
| 2 | * This file is part of the coreboot project. |
| 3 | * |
| 4 | * Copyright 2015 MediaTek Inc. |
| 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify |
| 7 | * it under the terms of the GNU General Public License as published by |
| 8 | * the Free Software Foundation; version 2 of the License. |
| 9 | * |
| 10 | * This program is distributed in the hope that it will be useful, |
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | * GNU General Public License for more details. |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 14 | */ |
| 15 | |
| 16 | #include <arch/io.h> |
henryc.chen | 31ae314 | 2015-07-31 17:10:52 +0800 | [diff] [blame] | 17 | #include <boardid.h> |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 18 | #include <bootblock_common.h> |
| 19 | #include <delay.h> |
Yidi Lin | 22d94ba | 2015-12-28 16:14:42 +0800 | [diff] [blame^] | 20 | #include <gpio.h> |
Biao Huang | 9d48e17 | 2015-07-31 17:10:56 +0800 | [diff] [blame] | 21 | #include <soc/gpio.h> |
jun.gao | f059e97 | 2015-12-17 16:59:55 +0800 | [diff] [blame] | 22 | #include <soc/i2c.h> |
henryc.chen | 31ae314 | 2015-07-31 17:10:52 +0800 | [diff] [blame] | 23 | #include <soc/mt6391.h> |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 24 | #include <soc/pericfg.h> |
Biao Huang | 9d48e17 | 2015-07-31 17:10:56 +0800 | [diff] [blame] | 25 | #include <soc/pinmux.h> |
Leilk Liu | 2610594 | 2015-07-31 17:10:46 +0800 | [diff] [blame] | 26 | #include <soc/spi.h> |
Biao Huang | 9d48e17 | 2015-07-31 17:10:56 +0800 | [diff] [blame] | 27 | |
Yidi Lin | 65873ca | 2015-07-31 17:10:57 +0800 | [diff] [blame] | 28 | #include "gpio.h" |
| 29 | |
Biao Huang | 9d48e17 | 2015-07-31 17:10:56 +0800 | [diff] [blame] | 30 | static void i2c_set_gpio_pinmux(void) |
| 31 | { |
| 32 | gpio_set_mode(PAD_SDA1, PAD_SDA1_FUNC_SDA1); |
| 33 | gpio_set_mode(PAD_SCL1, PAD_SCL1_FUNC_SCL1); |
| 34 | gpio_set_mode(PAD_SDA4, PAD_SDA4_FUNC_SDA4); |
| 35 | gpio_set_mode(PAD_SCL4, PAD_SCL4_FUNC_SCL4); |
| 36 | } |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 37 | |
mtk05962 | a3f7fe8 | 2015-10-16 13:42:49 +0800 | [diff] [blame] | 38 | static void nor_set_gpio_pinmux(void) |
| 39 | { |
| 40 | /* Set driving strength of EINT4~EINT9 to 8mA |
| 41 | * 0: 2mA |
| 42 | * 1: 4mA |
| 43 | * 2: 8mA |
| 44 | * 3: 16mA |
| 45 | */ |
| 46 | /* EINT4: 0x10005B20[14:13] */ |
| 47 | clrsetbits_le16(&mt8173_gpio->drv_mode[2].val, 0xf << 12, 2 << 13); |
| 48 | /* EINT5~EINT9: 0x10005B30[2:1] */ |
| 49 | clrsetbits_le16(&mt8173_gpio->drv_mode[3].val, 0xf << 0, 2 << 1), |
| 50 | |
| 51 | gpio_set_pull(PAD_EINT4, GPIO_PULL_ENABLE, GPIO_PULL_UP); |
| 52 | gpio_set_pull(PAD_EINT5, GPIO_PULL_ENABLE, GPIO_PULL_UP); |
| 53 | gpio_set_pull(PAD_EINT6, GPIO_PULL_ENABLE, GPIO_PULL_UP); |
| 54 | gpio_set_pull(PAD_EINT7, GPIO_PULL_ENABLE, GPIO_PULL_UP); |
| 55 | gpio_set_pull(PAD_EINT8, GPIO_PULL_ENABLE, GPIO_PULL_UP); |
| 56 | gpio_set_pull(PAD_EINT9, GPIO_PULL_ENABLE, GPIO_PULL_UP); |
| 57 | |
| 58 | gpio_set_mode(PAD_EINT4, PAD_EINT4_FUNC_SFWP_B); |
| 59 | gpio_set_mode(PAD_EINT5, PAD_EINT5_FUNC_SFOUT); |
| 60 | gpio_set_mode(PAD_EINT6, PAD_EINT6_FUNC_SFCS0); |
| 61 | gpio_set_mode(PAD_EINT7, PAD_EINT7_FUNC_SFHOLD); |
| 62 | gpio_set_mode(PAD_EINT8, PAD_EINT8_FUNC_SFIN); |
| 63 | gpio_set_mode(PAD_EINT9, PAD_EINT9_FUNC_SFCK); |
| 64 | } |
| 65 | |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 66 | void bootblock_mainboard_early_init(void) |
| 67 | { |
| 68 | /* Clear UART0 power down signal */ |
| 69 | clrbits_le32(&mt8173_pericfg->pdn0_set, PERICFG_UART0_PDN); |
| 70 | } |
| 71 | |
| 72 | void bootblock_mainboard_init(void) |
| 73 | { |
Biao Huang | 9d48e17 | 2015-07-31 17:10:56 +0800 | [diff] [blame] | 74 | /* adjust gpio params when external voltage is 1.8V */ |
| 75 | gpio_init(GPIO_EINT_1P8V); |
| 76 | |
| 77 | /* set i2c related gpio */ |
| 78 | i2c_set_gpio_pinmux(); |
Yidi Lin | 65873ca | 2015-07-31 17:10:57 +0800 | [diff] [blame] | 79 | |
mtk05962 | a3f7fe8 | 2015-10-16 13:42:49 +0800 | [diff] [blame] | 80 | /* set nor related GPIO */ |
| 81 | nor_set_gpio_pinmux(); |
| 82 | |
Yidi Lin | 22d94ba | 2015-12-28 16:14:42 +0800 | [diff] [blame^] | 83 | /* SPI_LEVEL_ENABLE: Enable 1.8V to 3.3V level shifter for EC SPI bus */ |
| 84 | if (board_id() > 4) |
| 85 | gpio_output(PAD_SRCLKENAI2, 1); |
| 86 | |
jun.gao | f059e97 | 2015-12-17 16:59:55 +0800 | [diff] [blame] | 87 | /* Init i2c bus 2 Timing register for TPM */ |
| 88 | mtk_i2c_bus_init(CONFIG_DRIVER_TPM_I2C_BUS); |
| 89 | |
Leilk Liu | 2610594 | 2015-07-31 17:10:46 +0800 | [diff] [blame] | 90 | mtk_spi_init(CONFIG_EC_GOOGLE_CHROMEEC_SPI_BUS, SPI_PAD1_MASK, 6*MHz); |
| 91 | |
Yidi Lin | 65873ca | 2015-07-31 17:10:57 +0800 | [diff] [blame] | 92 | setup_chromeos_gpios(); |
henryc.chen | 31ae314 | 2015-07-31 17:10:52 +0800 | [diff] [blame] | 93 | |
| 94 | if (board_id() < 4) |
| 95 | mt6391_enable_reset_when_ap_resets(); |
Yidi Lin | 3d7b606 | 2015-07-31 17:10:40 +0800 | [diff] [blame] | 96 | } |