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