blob: 3362f3d8252a0223bd1ce506daaebcd5bb330f47 [file] [log] [blame]
Reka Norman457d98d2022-02-04 11:17:32 +11001/* SPDX-License-Identifier: GPL-2.0-or-later */
2
3#include <baseboard/gpio.h>
Eric Laia8d2cb82022-05-27 09:43:43 +08004#include <baseboard/variants.h>
Reka Normane4ebc862022-05-09 16:08:01 +10005#include <boardid.h>
Reka Norman457d98d2022-02-04 11:17:32 +11006#include <bootstate.h>
7#include <console/console.h>
8#include <fw_config.h>
9
Reka Normane46a9772022-05-12 14:48:17 +100010static const struct pad_config lte_enable_pads[] = {
Reka Norman457d98d2022-02-04 11:17:32 +110011 /* A8 : WWAN_RF_DISABLE_ODL */
Reka Normane46a9772022-05-12 14:48:17 +100012 PAD_CFG_GPO(GPP_A8, 1, DEEP),
13 /* H19 : SOC_I2C_SUB_INT_ODL */
14 PAD_CFG_GPI_APIC(GPP_H19, NONE, PLTRST, LEVEL, NONE),
15 /* H23 : WWAN_SAR_DETECT_ODL */
16 PAD_CFG_GPO(GPP_H23, 1, DEEP),
17};
18
19static const struct pad_config lte_disable_pads_nivviks[] = {
Reka Norman457d98d2022-02-04 11:17:32 +110020 /* D6 : WWAN_EN */
21 PAD_NC(GPP_D6, NONE),
22 /* F12 : WWAN_RST_L */
Eric Laif777cad2022-07-01 14:03:24 +080023 PAD_NC_LOCK(GPP_F12, NONE, LOCK_CONFIG),
Reka Norman457d98d2022-02-04 11:17:32 +110024};
25
Reka Normane4ebc862022-05-09 16:08:01 +100026static const struct pad_config lte_disable_pads_nirwen[] = {
Reka Normane4ebc862022-05-09 16:08:01 +100027 /* E13 : WWAN_EN */
Eric Laif777cad2022-07-01 14:03:24 +080028 PAD_NC_LOCK(GPP_E13, NONE, LOCK_CONFIG),
Reka Normane4ebc862022-05-09 16:08:01 +100029 /* F12 : WWAN_RST_L */
Eric Laif777cad2022-07-01 14:03:24 +080030 PAD_NC_LOCK(GPP_F12, NONE, LOCK_CONFIG),
Reka Normane4ebc862022-05-09 16:08:01 +100031};
32
Reka Normanbaf22462022-05-06 19:55:11 +100033static const struct pad_config sd_disable_pads[] = {
34 /* D8 : SD_CLKREQ_ODL */
35 PAD_NC(GPP_D8, NONE),
36 /* H12 : SD_PERST_L */
Eric Laif777cad2022-07-01 14:03:24 +080037 PAD_NC_LOCK(GPP_H12, NONE, LOCK_CONFIG),
Reka Normanbaf22462022-05-06 19:55:11 +100038 /* H13 : EN_PP3300_SD_X */
Eric Laif777cad2022-07-01 14:03:24 +080039 PAD_NC_LOCK(GPP_H13, NONE, LOCK_CONFIG),
Reka Normanbaf22462022-05-06 19:55:11 +100040};
41
Reka Normanf1b8cee2022-05-06 20:04:54 +100042static const struct pad_config wfc_disable_pads[] = {
43 /* D3 : WCAM_RST_L */
Eric Laif777cad2022-07-01 14:03:24 +080044 PAD_NC_LOCK(GPP_D3, NONE, LOCK_CONFIG),
Reka Normanf1b8cee2022-05-06 20:04:54 +100045 /* D15 : EN_PP2800_WCAM_X */
Eric Laif777cad2022-07-01 14:03:24 +080046 PAD_NC_LOCK(GPP_D15, NONE, LOCK_CONFIG),
Reka Normanf1b8cee2022-05-06 20:04:54 +100047 /* D16 : EN_PP1800_PP1200_WCAM_X */
Eric Laif777cad2022-07-01 14:03:24 +080048 PAD_NC_LOCK(GPP_D16, NONE, LOCK_CONFIG),
Reka Normanf1b8cee2022-05-06 20:04:54 +100049 /* H22 : WCAM_MCLK_R */
50 PAD_NC(GPP_H22, NONE),
51 /* R6 : DMIC_WCAM_CLK_R */
52 PAD_NC(GPP_R6, NONE),
53 /* R7 : DMIC_WCAM_DATA */
54 PAD_NC(GPP_R7, NONE),
55};
56
Reka Normanf2f785d2022-05-06 20:22:21 +100057static const struct pad_config emmc_disable_pads[] = {
58 /* I7 : EMMC_CMD */
59 PAD_NC(GPP_I7, NONE),
60 /* I8 : EMMC_D0 */
61 PAD_NC(GPP_I8, NONE),
62 /* I9 : EMMC_D1 */
63 PAD_NC(GPP_I9, NONE),
64 /* I10 : EMMC_D2 */
65 PAD_NC(GPP_I10, NONE),
66 /* I11 : EMMC_D3 */
67 PAD_NC(GPP_I11, NONE),
68 /* I12 : EMMC_D4 */
69 PAD_NC(GPP_I12, NONE),
70 /* I13 : EMMC_D5 */
71 PAD_NC(GPP_I13, NONE),
72 /* I14 : EMMC_D6 */
73 PAD_NC(GPP_I14, NONE),
74 /* I15 : EMMC_D7 */
75 PAD_NC(GPP_I15, NONE),
76 /* I16 : EMMC_RCLK */
77 PAD_NC(GPP_I16, NONE),
78 /* I17 : EMMC_CLK */
79 PAD_NC(GPP_I17, NONE),
80 /* I18 : EMMC_RST_L */
81 PAD_NC(GPP_I18, NONE),
82};
83
84static const struct pad_config nvme_disable_pads[] = {
85 /* B4 : SSD_PERST_L */
Eric Laif777cad2022-07-01 14:03:24 +080086 PAD_NC_LOCK(GPP_B4, NONE, LOCK_CONFIG),
Reka Normanf2f785d2022-05-06 20:22:21 +100087 /* D6 : SSD_CLKREQ_ODL */
88 PAD_NC(GPP_D6, NONE),
89 /* D11 : EN_PP3300_SSD */
Eric Laif777cad2022-07-01 14:03:24 +080090 PAD_NC_LOCK(GPP_D11, NONE, LOCK_CONFIG),
Reka Normanf2f785d2022-05-06 20:22:21 +100091 /* E17 : SSD_PLN_L */
Eric Laif777cad2022-07-01 14:03:24 +080092 PAD_NC_LOCK(GPP_E17, NONE, LOCK_CONFIG),
Reka Normanf2f785d2022-05-06 20:22:21 +100093};
94
Eric Laia8d2cb82022-05-27 09:43:43 +080095void fw_config_gpio_padbased_override(struct pad_config *padbased_table)
Reka Norman457d98d2022-02-04 11:17:32 +110096{
Reka Normane46a9772022-05-12 14:48:17 +100097 if (fw_config_probe(FW_CONFIG(DB_USB, DB_1C_LTE))) {
98 printk(BIOS_INFO, "Enable LTE-related GPIO pins.\n");
Eric Laia8d2cb82022-05-27 09:43:43 +080099 gpio_padbased_override(padbased_table, lte_enable_pads,
100 ARRAY_SIZE(lte_enable_pads));
Reka Normane46a9772022-05-12 14:48:17 +1000101 } else {
Reka Normanf2f785d2022-05-06 20:22:21 +1000102 if (board_id() >= 2) {
Reka Normane4ebc862022-05-09 16:08:01 +1000103 printk(BIOS_INFO, "Disable LTE-related GPIO pins on nirwen.\n");
Eric Laia8d2cb82022-05-27 09:43:43 +0800104 gpio_padbased_override(padbased_table, lte_disable_pads_nirwen,
105 ARRAY_SIZE(lte_disable_pads_nirwen)
Reka Normane4ebc862022-05-09 16:08:01 +1000106 );
107 } else {
108 printk(BIOS_INFO, "Disable LTE-related GPIO pins on nivviks.\n");
Eric Laia8d2cb82022-05-27 09:43:43 +0800109 gpio_padbased_override(padbased_table, lte_disable_pads_nivviks,
110 ARRAY_SIZE(lte_disable_pads_nivviks)
Reka Normane4ebc862022-05-09 16:08:01 +1000111 );
112 }
Reka Norman457d98d2022-02-04 11:17:32 +1100113 }
Reka Normanbaf22462022-05-06 19:55:11 +1000114
115 if (fw_config_probe(FW_CONFIG(SD_CARD, SD_ABSENT))) {
116 printk(BIOS_INFO, "Disable SD card GPIO pins.\n");
Eric Laia8d2cb82022-05-27 09:43:43 +0800117 gpio_padbased_override(padbased_table, sd_disable_pads,
118 ARRAY_SIZE(sd_disable_pads));
Reka Normanbaf22462022-05-06 19:55:11 +1000119 }
Reka Normanf1b8cee2022-05-06 20:04:54 +1000120
121 if (fw_config_probe(FW_CONFIG(WFC, WFC_ABSENT))) {
122 printk(BIOS_INFO, "Disable MIPI WFC GPIO pins.\n");
Eric Laia8d2cb82022-05-27 09:43:43 +0800123 gpio_padbased_override(padbased_table, wfc_disable_pads,
124 ARRAY_SIZE(wfc_disable_pads));
Reka Normanf1b8cee2022-05-06 20:04:54 +1000125 }
Reka Normanf2f785d2022-05-06 20:22:21 +1000126
127 if (!fw_config_probe(FW_CONFIG(STORAGE, STORAGE_EMMC))) {
128 printk(BIOS_INFO, "Disable eMMC SSD GPIO pins.\n");
Eric Laia8d2cb82022-05-27 09:43:43 +0800129 gpio_padbased_override(padbased_table, emmc_disable_pads,
130 ARRAY_SIZE(emmc_disable_pads));
Reka Normanf2f785d2022-05-06 20:22:21 +1000131 }
132
133 if (board_id() >= 2 && !fw_config_probe(FW_CONFIG(STORAGE, STORAGE_NVME))) {
134 printk(BIOS_INFO, "Disable NVMe SSD GPIO pins.\n");
Eric Laia8d2cb82022-05-27 09:43:43 +0800135 gpio_padbased_override(padbased_table, nvme_disable_pads,
136 ARRAY_SIZE(nvme_disable_pads));
Reka Normanf2f785d2022-05-06 20:22:21 +1000137 }
Reka Norman457d98d2022-02-04 11:17:32 +1100138}