Tom Rini | 10e4779 | 2018-05-06 17:58:06 -0400 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
Bin Meng | fde66f4 | 2017-08-15 22:42:00 -0700 | [diff] [blame] | 2 | /* |
| 3 | * Copyright (C) 2017, Bin Meng <bmeng.cn@gmail.com> |
| 4 | * |
Bin Meng | fde66f4 | 2017-08-15 22:42:00 -0700 | [diff] [blame] | 5 | * From coreboot src/soc/intel/braswell/include/soc/gpio.h |
| 6 | */ |
| 7 | |
| 8 | #ifndef _BRASWELL_GPIO_H_ |
| 9 | #define _BRASWELL_GPIO_H_ |
| 10 | |
| 11 | #include <asm/arch/iomap.h> |
| 12 | |
| 13 | enum mode_list { |
| 14 | M0, |
| 15 | M1, |
| 16 | M2, |
| 17 | M3, |
| 18 | M4, |
| 19 | M5, |
| 20 | M6, |
| 21 | M7, |
| 22 | M8, |
| 23 | M9, |
| 24 | M10, |
| 25 | M11, |
| 26 | M12, |
| 27 | M13, |
| 28 | }; |
| 29 | |
| 30 | enum int_select { |
| 31 | L0, |
| 32 | L1, |
| 33 | L2, |
| 34 | L3, |
| 35 | L4, |
| 36 | L5, |
| 37 | L6, |
| 38 | L7, |
| 39 | L8, |
| 40 | L9, |
| 41 | L10, |
| 42 | L11, |
| 43 | L12, |
| 44 | L13, |
| 45 | L14, |
| 46 | L15, |
| 47 | }; |
| 48 | |
| 49 | enum gpio_en { |
| 50 | NATIVE = 0xff, |
| 51 | GPIO = 0, /* Native, no need to set PAD_VALUE */ |
| 52 | GPO = 1, /* GPO, output only in PAD_VALUE */ |
| 53 | GPI = 2, /* GPI, input only in PAD_VALUE */ |
| 54 | HI_Z = 3, |
| 55 | NA_GPO = 0, |
| 56 | }; |
| 57 | |
| 58 | enum gpio_state { |
| 59 | LOW, |
| 60 | HIGH, |
| 61 | }; |
| 62 | |
| 63 | enum en_dis { |
| 64 | DISABLE, /* Disable */ |
| 65 | ENABLE, /* Enable */ |
| 66 | }; |
| 67 | |
| 68 | enum int_type { |
| 69 | INT_DIS, |
| 70 | TRIG_EDGE_LOW, |
| 71 | TRIG_EDGE_HIGH, |
| 72 | TRIG_EDGE_BOTH, |
| 73 | TRIG_LEVEL, |
| 74 | }; |
| 75 | |
| 76 | enum mask { |
| 77 | MASKABLE, |
| 78 | NON_MASKABLE, |
| 79 | }; |
| 80 | |
| 81 | enum glitch_cfg { |
| 82 | GLITCH_DISABLE, |
| 83 | EN_EDGE_DETECT, |
| 84 | EN_RX_DATA, |
| 85 | EN_EDGE_RX_DATA, |
| 86 | }; |
| 87 | |
| 88 | enum inv_rx_tx { |
| 89 | NO_INVERSION = 0, |
| 90 | INV_RX_ENABLE = 1, |
| 91 | INV_TX_ENABLE = 2, |
| 92 | INV_RX_TX_ENABLE = 3, |
| 93 | INV_RX_DATA = 4, |
| 94 | INV_TX_DATA = 8, |
| 95 | }; |
| 96 | |
| 97 | enum voltage { |
| 98 | VOLT_3_3, /* Working on 3.3 Volts */ |
| 99 | VOLT_1_8, /* Working on 1.8 Volts */ |
| 100 | }; |
| 101 | |
| 102 | enum hs_mode { |
| 103 | DISABLE_HS, /* Disable high speed mode */ |
| 104 | ENABLE_HS, /* Enable high speed mode */ |
| 105 | }; |
| 106 | |
| 107 | enum odt_up_dn { |
| 108 | PULL_UP, /* On Die Termination Up */ |
| 109 | PULL_DOWN, /* On Die Termination Down */ |
| 110 | }; |
| 111 | |
| 112 | enum odt_en { |
| 113 | DISABLE_OD, /* On Die Termination Disable */ |
| 114 | ENABLE_OD, /* On Die Termination Enable */ |
| 115 | }; |
| 116 | |
| 117 | enum pull_type { |
| 118 | P_NONE = 0, /* Pull None */ |
| 119 | P_20K_L = 1, /* Pull Down 20K */ |
| 120 | P_5K_L = 2, /* Pull Down 5K */ |
| 121 | P_1K_L = 4, /* Pull Down 1K */ |
| 122 | P_20K_H = 9, /* Pull Up 20K */ |
| 123 | P_5K_H = 10, /* Pull Up 5K */ |
| 124 | P_1K_H = 12 /* Pull Up 1K */ |
| 125 | }; |
| 126 | |
| 127 | enum bit { |
| 128 | ONE_BIT = 1, |
| 129 | TWO_BIT = 3, |
| 130 | THREE_BIT = 7, |
| 131 | FOUR_BIT = 15, |
| 132 | FIVE_BIT = 31, |
| 133 | SIX_BIT = 63, |
| 134 | SEVEN_BIT = 127, |
| 135 | EIGHT_BIT = 255 |
| 136 | }; |
| 137 | |
| 138 | enum gpe_config { |
| 139 | GPE, |
| 140 | SMI, |
| 141 | SCI, |
| 142 | }; |
| 143 | |
| 144 | enum community { |
| 145 | SOUTHWEST = 0x0000, |
| 146 | NORTH = 0x8000, |
| 147 | EAST = 0x10000, |
| 148 | SOUTHEAST = 0x18000, |
| 149 | VIRTUAL = 0x20000, |
| 150 | }; |
| 151 | |
| 152 | #define NA 0xff |
| 153 | #define TERMINATOR 0xffffffff |
| 154 | |
| 155 | #define GPIO_FAMILY_CONF(family_name, park_mode, hysctl, vp18_mode, hs_mode, \ |
| 156 | odt_up_dn, odt_en, curr_src_str, rcomp, family_no, community_offset) { \ |
| 157 | .confg = ((((park_mode) != NA) ? park_mode << 26 : 0) | \ |
| 158 | (((hysctl) != NA) ? hysctl << 24 : 0) | \ |
| 159 | (((vp18_mode) != NA) ? vp18_mode << 21 : 0) | \ |
| 160 | (((hs_mode) != NA) ? hs_mode << 19 : 0) | \ |
| 161 | (((odt_up_dn) != NA) ? odt_up_dn << 18 : 0) | \ |
| 162 | (((odt_en) != NA) ? odt_en << 17 : 0) | \ |
| 163 | (curr_src_str)), \ |
| 164 | .confg_changes = ((((park_mode) != NA) ? ONE_BIT << 26 : 0) | \ |
| 165 | (((hysctl) != NA) ? TWO_BIT << 24 : 0) | \ |
| 166 | (((vp18_mode) != NA) ? ONE_BIT << 21 : 0) | \ |
| 167 | (((hs_mode) != NA) ? ONE_BIT << 19 : 0) | \ |
| 168 | (((odt_up_dn) != NA) ? ONE_BIT << 18 : 0) | \ |
| 169 | (((odt_en) != NA) ? ONE_BIT << 17 : 0) | \ |
| 170 | (THREE_BIT)), \ |
| 171 | .misc = ((rcomp == ENABLE) ? 1 : 0) , \ |
| 172 | .mmio_addr = (community_offset == TERMINATOR) ? TERMINATOR : \ |
| 173 | ((family_no != NA) ? (IO_BASE_ADDRESS + community_offset +\ |
| 174 | (0x80 * family_no) + 0x1080) : 0) , \ |
| 175 | .name = 0 \ |
| 176 | } |
| 177 | |
| 178 | #define GPIO_PAD_CONF(pad_name, mode_select, mode, gpio_config, gpio_state, \ |
| 179 | gpio_light_mode, int_type, int_sel, term, open_drain, current_source,\ |
| 180 | int_mask, glitch, inv_rx_tx, wake_mask, wake_mask_bit, gpe, \ |
| 181 | mmio_offset, community_offset) { \ |
| 182 | .confg0 = ((((int_sel) != NA) ? (int_sel << 28) : 0) | \ |
| 183 | (((glitch) != NA) ? (glitch << 26) : 0) | \ |
| 184 | (((term) != NA) ? (term << 20) : 0) | \ |
| 185 | (((mode_select) == GPIO) ? ((mode << 16) | (1 << 15)) : \ |
| 186 | ((mode << 16))) | \ |
| 187 | (((gpio_config) != NA) ? (gpio_config << 8) : 0) | \ |
| 188 | (((gpio_light_mode) != NA) ? (gpio_light_mode << 7) : 0) | \ |
| 189 | (((gpio_state) == HIGH) ? 2 : 0)), \ |
| 190 | .confg0_changes = ((((int_sel) != NA) ? (FOUR_BIT << 28) : 0) | \ |
| 191 | (((glitch) != NA) ? (TWO_BIT << 26) : 0) | \ |
| 192 | (((term) != NA) ? (FOUR_BIT << 20) : 0) | \ |
| 193 | (FIVE_BIT << 15) | \ |
| 194 | (((gpio_config) != NA) ? (THREE_BIT << 8) : 0) | \ |
| 195 | (((gpio_light_mode) != NA) ? (ONE_BIT << 7) : 0) | \ |
| 196 | (((gpio_state) != NA) ? ONE_BIT << 1 : 0)), \ |
| 197 | .confg1 = ((((current_source) != NA) ? (current_source << 27) : 0) | \ |
| 198 | (((inv_rx_tx) != NA) ? inv_rx_tx << 4 : 0) | \ |
| 199 | (((open_drain) != NA) ? open_drain << 3 : 0) | \ |
| 200 | (((int_type) != NA) ? int_type : 0)), \ |
| 201 | .confg1_changes = ((((current_source) != NA) ? (ONE_BIT << 27) : 0) | \ |
| 202 | (((inv_rx_tx) != NA) ? FOUR_BIT << 4 : 0) | \ |
| 203 | (((open_drain) != NA) ? ONE_BIT << 3 : 0) | \ |
| 204 | (((int_type) != NA) ? THREE_BIT : 0)), \ |
| 205 | .community = community_offset, \ |
| 206 | .mmio_addr = (community_offset == TERMINATOR) ? TERMINATOR : \ |
| 207 | ((mmio_offset != NA) ? (IO_BASE_ADDRESS + \ |
| 208 | community_offset + mmio_offset) : 0), \ |
| 209 | .name = 0, \ |
| 210 | .misc = ((((gpe) != NA) ? (gpe << 0) : 0) | \ |
| 211 | (((wake_mask) != NA) ? (wake_mask << 2) : 0) | \ |
| 212 | (((int_mask) != NA) ? (int_mask << 3) : 0)) | \ |
| 213 | (((wake_mask_bit) != NA) ? (wake_mask_bit << 4) : (NA << 4)) \ |
| 214 | } |
| 215 | |
| 216 | #endif /* _BRASWELL_GPIO_H_ */ |