From f7a42a70f82701e4b28a508b50c304aed34783f1 Mon Sep 17 00:00:00 2001 From: Daniel Leung Date: Tue, 29 Jan 2019 19:34:41 -0800 Subject: [PATCH] gpio: intel_apl: rework driver for pin_mask callback To avoid confusion, callbacks using ordinal pin numbers is going to be reverted. So the driver has to be re-worked to expose multiple devices so each device has 32 pins. Also fixes #12765 Signed-off-by: Daniel Leung --- boards/x86/up_squared/board.h | 111 +++- drivers/gpio/gpio_intel_apl.c | 234 ++++---- dts/bindings/gpio/intel,apl-gpio.yaml | 8 +- dts/x86/apollo_lake.dtsi | 15 +- .../boards/up_squared/gpio_counter/src/main.c | 75 ++- soc/x86/apollo_lake/Kconfig.defconfig | 11 +- soc/x86/apollo_lake/dts_fixup.h | 69 ++- soc/x86/apollo_lake/soc.c | 16 +- soc/x86/apollo_lake/soc.h | 4 +- soc/x86/apollo_lake/soc_gpio.h | 516 +++++++++--------- 10 files changed, 619 insertions(+), 440 deletions(-) diff --git a/boards/x86/up_squared/board.h b/boards/x86/up_squared/board.h index 044f809f6c0..bb1f4fde3dd 100644 --- a/boards/x86/up_squared/board.h +++ b/boards/x86/up_squared/board.h @@ -8,33 +8,88 @@ #define __INC_BOARD_H /* Map APL GPIO pins to pins on UP Squared HAT */ -#define UP2_HAT_PIN_3 APL_GPIO_28 -#define UP2_HAT_PIN_5 APL_GPIO_29 -#define UP2_HAT_PIN_7 APL_GPIO_123 -#define UP2_HAT_PIN_8 APL_GPIO_43 -#define UP2_HAT_PIN_10 APL_GPIO_42 -#define UP2_HAT_PIN_11 APL_GPIO_44 -#define UP2_HAT_PIN_12 APL_GPIO_146 -#define UP2_HAT_PIN_13 APL_GPIO_122 -#define UP2_HAT_PIN_15 APL_GPIO_121 -#define UP2_HAT_PIN_16 APL_GPIO_37 -#define UP2_HAT_PIN_18 APL_GPIO_88 -#define UP2_HAT_PIN_19 APL_GPIO_110 -#define UP2_HAT_PIN_21 APL_GPIO_109 -#define UP2_HAT_PIN_22 APL_GPIO_85 -#define UP2_HAT_PIN_23 APL_GPIO_104 -#define UP2_HAT_PIN_24 APL_GPIO_105 -#define UP2_HAT_PIN_26 APL_GPIO_106 -#define UP2_HAT_PIN_27 APL_GPIO_30 -#define UP2_HAT_PIN_28 APL_GPIO_31 -#define UP2_HAT_PIN_29 APL_GPIO_120 -#define UP2_HAT_PIN_31 APL_GPIO_87 -#define UP2_HAT_PIN_32 APL_GPIO_34 -#define UP2_HAT_PIN_33 APL_GPIO_35 -#define UP2_HAT_PIN_35 APL_GPIO_147 -#define UP2_HAT_PIN_36 APL_GPIO_45 -#define UP2_HAT_PIN_37 APL_GPIO_86 -#define UP2_HAT_PIN_38 APL_GPIO_148 -#define UP2_HAT_PIN_40 APL_GPIO_149 +#define UP2_HAT_PIN_3_DEV APL_GPIO_DEV_N_0 +#define UP2_HAT_PIN_3 APL_GPIO_28 + +#define UP2_HAT_PIN_5_DEV APL_GPIO_DEV_N_0 +#define UP2_HAT_PIN_5 APL_GPIO_29 + +#define UP2_HAT_PIN_7_DEV APL_GPIO_DEV_NW_2 +#define UP2_HAT_PIN_7 APL_GPIO_123 + +#define UP2_HAT_PIN_8_DEV APL_GPIO_DEV_N_1 +#define UP2_HAT_PIN_8 APL_GPIO_43 + +#define UP2_HAT_PIN_10_DEV APL_GPIO_DEV_N_1 +#define UP2_HAT_PIN_10 APL_GPIO_42 + +#define UP2_HAT_PIN_11_DEV APL_GPIO_DEV_N_1 +#define UP2_HAT_PIN_11 APL_GPIO_44 + +#define UP2_HAT_PIN_12_DEV APL_GPIO_DEV_W_0 +#define UP2_HAT_PIN_12 APL_GPIO_146 + +#define UP2_HAT_PIN_13_DEV APL_GPIO_DEV_NW_2 +#define UP2_HAT_PIN_13 APL_GPIO_122 + +#define UP2_HAT_PIN_15_DEV APL_GPIO_DEV_NW_2 +#define UP2_HAT_PIN_15 APL_GPIO_121 + +#define UP2_HAT_PIN_16_DEV APL_GPIO_DEV_N_1 +#define UP2_HAT_PIN_16 APL_GPIO_37 + +#define UP2_HAT_PIN_18_DEV APL_GPIO_DEV_NW_1 +#define UP2_HAT_PIN_18 APL_GPIO_88 + +#define UP2_HAT_PIN_19_DEV APL_GPIO_DEV_NW_2 +#define UP2_HAT_PIN_19 APL_GPIO_110 + +#define UP2_HAT_PIN_21_DEV APL_GPIO_DEV_NW_2 +#define UP2_HAT_PIN_21 APL_GPIO_109 + +#define UP2_HAT_PIN_22_DEV APL_GPIO_DEV_NW_1 +#define UP2_HAT_PIN_22 APL_GPIO_85 + +#define UP2_HAT_PIN_23_DEV APL_GPIO_DEV_NW_1 +#define UP2_HAT_PIN_23 APL_GPIO_104 + +#define UP2_HAT_PIN_24_DEV APL_GPIO_DEV_NW_1 +#define UP2_HAT_PIN_24 APL_GPIO_105 + +#define UP2_HAT_PIN_26_DEV APL_GPIO_DEV_NW_1 +#define UP2_HAT_PIN_26 APL_GPIO_106 + +#define UP2_HAT_PIN_27_DEV APL_GPIO_DEV_N_0 +#define UP2_HAT_PIN_27 APL_GPIO_30 + +#define UP2_HAT_PIN_28_DEV APL_GPIO_DEV_N_0 +#define UP2_HAT_PIN_28 APL_GPIO_31 + +#define UP2_HAT_PIN_29_DEV APL_GPIO_DEV_NW_2 +#define UP2_HAT_PIN_29 APL_GPIO_120 + +#define UP2_HAT_PIN_31_DEV APL_GPIO_DEV_NW_1 +#define UP2_HAT_PIN_31 APL_GPIO_87 + +#define UP2_HAT_PIN_32_DEV APL_GPIO_DEV_N_1 +#define UP2_HAT_PIN_32 APL_GPIO_34 + +#define UP2_HAT_PIN_33_DEV APL_GPIO_DEV_N_1 +#define UP2_HAT_PIN_33 APL_GPIO_35 + +#define UP2_HAT_PIN_35_DEV APL_GPIO_DEV_W_0 +#define UP2_HAT_PIN_35 APL_GPIO_147 + +#define UP2_HAT_PIN_36_DEV APL_GPIO_DEV_N_1 +#define UP2_HAT_PIN_36 APL_GPIO_45 + +#define UP2_HAT_PIN_37_DEV APL_GPIO_DEV_NW_1 +#define UP2_HAT_PIN_37 APL_GPIO_86 + +#define UP2_HAT_PIN_38_DEV APL_GPIO_DEV_W_0 +#define UP2_HAT_PIN_38 APL_GPIO_148 + +#define UP2_HAT_PIN_40_DEV APL_GPIO_DEV_W_0 +#define UP2_HAT_PIN_40 APL_GPIO_149 #endif /* __INC_BOARD_H */ diff --git a/drivers/gpio/gpio_intel_apl.c b/drivers/gpio/gpio_intel_apl.c index 08a3862f2b9..3b1e9e22c5c 100644 --- a/drivers/gpio/gpio_intel_apl.c +++ b/drivers/gpio/gpio_intel_apl.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Intel Corporation + * Copyright (c) 2018-2019 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ @@ -12,21 +12,26 @@ * both GPIOs and Pinmuxing function. This driver provides * the GPIO function. * - * Currently, this driver does not handle pin triggering. - * - * Note that since the GPIO controller controls more then 32 pins, - * the pin_mux of the API does not work anymore. + * The GPIO controller has 245 pins divided into four sets. + * Each set has its own MMIO address space. Due to GPIO + * callback only allowing 32 pins (as a 32-bit mask) at once, + * each set is further sub-divided into multiple devices. + * Because of this, shared IRQ must be used. */ #include #include +#include #include #include +#include #include #include "gpio_utils.h" -#define NUM_ISLANDS 4 +#ifndef CONFIG_SHARED_IRQ +#error "Need CONFIG_SHARED_IRQ!" +#endif #define REG_PAD_BASE_ADDR 0x000C @@ -85,40 +90,30 @@ #define PAD_CFG1_IOSSTATE_MASK (0x0F << PAD_CFG1_IOSSTATE_POS) #define PAD_CFG1_IOSSTATE_IGNORE (0x0F << PAD_CFG1_IOSSTATE_POS) -struct apl_gpio_island { - u32_t reg_base; - u32_t num_pins; -}; - struct gpio_intel_apl_config { - struct apl_gpio_island islands[NUM_ISLANDS]; + u32_t reg_base; + + u8_t pin_offset; + u8_t num_pins; }; struct gpio_intel_apl_data { - /* Pad base address for each island */ - u32_t pad_base[NUM_ISLANDS]; + /* Pad base address */ + u32_t pad_base; - sys_slist_t cb; + sys_slist_t cb; }; -static inline void extract_island_and_pin(u32_t pin, u32_t *island, - u32_t *raw_pin) -{ - *island = pin >> APL_GPIO_ISLAND_POS; - *raw_pin = pin & APL_GPIO_PIN_MASK; -} - #ifdef CONFIG_GPIO_INTEL_APL_CHECK_PERMS /** * @brief Check if host has permission to alter this GPIO pin. * * @param "struct device *dev" Device struct - * @param "u32_t island" Island index * @param "u32_t raw_pin" Raw GPIO pin * * @return true if host owns the GPIO pin, false otherwise */ -static bool check_perm(struct device *dev, u32_t island, u32_t raw_pin) +static bool check_perm(struct device *dev, u32_t raw_pin) { const struct gpio_intel_apl_config *cfg = dev->config->config_info; struct gpio_intel_apl_data *data = dev->driver_data; @@ -128,7 +123,7 @@ static bool check_perm(struct device *dev, u32_t island, u32_t raw_pin) /* read the Pad Ownership register related to the pin */ offset = REG_PAD_OWNER_BASE + ((raw_pin >> 3) << 2); - val = sys_read32(cfg->islands[island].reg_base + offset); + val = sys_read32(cfg->reg_base + offset); /* get the bits about ownership */ offset = raw_pin % 8; @@ -139,8 +134,8 @@ static bool check_perm(struct device *dev, u32_t island, u32_t raw_pin) } /* Also need to make sure the function of pad is GPIO */ - offset = data->pad_base[island] + (raw_pin << 3); - val = sys_read32(cfg->islands[island].reg_base + offset); + offset = data->pad_base + (raw_pin << 3); + val = sys_read32(cfg->reg_base + offset); if (val & PAD_CFG0_PMODE_MASK) { /* mode is not zero => not functioning as GPIO */ return false; @@ -152,24 +147,31 @@ static bool check_perm(struct device *dev, u32_t island, u32_t raw_pin) #define check_perm(...) (1) #endif -static void gpio_intel_apl_isr(void *arg) +static int gpio_intel_apl_isr(struct device *dev) { - struct device *dev = arg; const struct gpio_intel_apl_config *cfg = dev->config->config_info; struct gpio_intel_apl_data *data = dev->driver_data; - struct gpio_callback *cb; - u32_t island, raw_pin, reg; + struct gpio_callback *cb, *tmp; + u32_t reg, int_sts, cur_mask, acc_mask; - SYS_SLIST_FOR_EACH_CONTAINER(&data->cb, cb, node) { - extract_island_and_pin(cb->pin, &island, &raw_pin); + reg = cfg->reg_base + REG_GPI_INT_STS_BASE + + ((cfg->pin_offset >> 5) << 2); + int_sts = sys_read32(reg); + acc_mask = 0; - reg = cfg->islands[island].reg_base + REG_GPI_INT_STS_BASE; - - if (sys_bitfield_test_and_set_bit(reg, raw_pin)) { + SYS_SLIST_FOR_EACH_CONTAINER_SAFE(&data->cb, cb, tmp, node) { + cur_mask = int_sts & cb->pin_mask; + acc_mask |= cur_mask; + if (cur_mask) { __ASSERT(cb->handler, "No callback handler!"); - cb->handler(dev, cb, cb->pin); + cb->handler(dev, cb, cur_mask); } } + + /* clear handled interrupt bits */ + sys_write32(acc_mask, reg); + + return 0; } static int gpio_intel_apl_config(struct device *dev, int access_op, @@ -177,13 +179,20 @@ static int gpio_intel_apl_config(struct device *dev, int access_op, { const struct gpio_intel_apl_config *cfg = dev->config->config_info; struct gpio_intel_apl_data *data = dev->driver_data; - u32_t island, raw_pin, reg, cfg0, cfg1, val; + u32_t raw_pin, reg, cfg0, cfg1, val; if (access_op != GPIO_ACCESS_BY_PIN) { return -ENOTSUP; } - if ((flags & GPIO_INT) && (flags & GPIO_DIR_OUT)) { + /* + * Pin must be input for interrupt to work. + * And there is no double-edge trigger according + * to datasheet. + */ + if ((flags & GPIO_INT) + && ((flags & GPIO_DIR_OUT) + || (flags & GPIO_INT_DOUBLE_EDGE))) { return -EINVAL; } @@ -192,21 +201,24 @@ static int gpio_intel_apl_config(struct device *dev, int access_op, return -EINVAL; } - extract_island_and_pin(pin, &island, &raw_pin); + if (pin > cfg->num_pins) { + return -EINVAL; + } - if (!check_perm(dev, island, raw_pin)) { + raw_pin = cfg->pin_offset + pin; + + if (!check_perm(dev, raw_pin)) { return -EPERM; } /* Set GPIO to trigger legacy interrupt */ if (flags & GPIO_INT) { - reg = cfg->islands[island].reg_base + REG_PAD_HOST_SW_OWNER; + reg = cfg->reg_base + REG_PAD_HOST_SW_OWNER; sys_bitfield_set_bit(reg, raw_pin); } /* read in pad configuration register */ - reg = cfg->islands[island].reg_base - + data->pad_base[island] + (raw_pin * 8); + reg = cfg->reg_base + data->pad_base + (raw_pin * 8); cfg0 = sys_read32(reg); cfg1 = sys_read32(reg + 4); @@ -273,20 +285,23 @@ static int gpio_intel_apl_write(struct device *dev, int access_op, { const struct gpio_intel_apl_config *cfg = dev->config->config_info; struct gpio_intel_apl_data *data = dev->driver_data; - u32_t island, raw_pin, reg, val; + u32_t raw_pin, reg, val; if (access_op != GPIO_ACCESS_BY_PIN) { return -ENOTSUP; } - extract_island_and_pin(pin, &island, &raw_pin); + if (pin > cfg->num_pins) { + return -EINVAL; + } - if (!check_perm(dev, island, raw_pin)) { + raw_pin = cfg->pin_offset + pin; + + if (!check_perm(dev, raw_pin)) { return -EPERM; } - reg = cfg->islands[island].reg_base - + data->pad_base[island] + (raw_pin * 8); + reg = cfg->reg_base + data->pad_base + (raw_pin * 8); val = sys_read32(reg); if (value) { @@ -305,20 +320,23 @@ static int gpio_intel_apl_read(struct device *dev, int access_op, { const struct gpio_intel_apl_config *cfg = dev->config->config_info; struct gpio_intel_apl_data *data = dev->driver_data; - u32_t island, raw_pin, reg, val; + u32_t raw_pin, reg, val; if (access_op != GPIO_ACCESS_BY_PIN) { return -ENOTSUP; } - extract_island_and_pin(pin, &island, &raw_pin); + if (pin > cfg->num_pins) { + return -EINVAL; + } - if (!check_perm(dev, island, raw_pin)) { + raw_pin = cfg->pin_offset + pin; + + if (!check_perm(dev, raw_pin)) { return -EPERM; } - reg = cfg->islands[island].reg_base - + data->pad_base[island] + (raw_pin * 8); + reg = cfg->reg_base + data->pad_base + (raw_pin * 8); val = sys_read32(reg); if (!(val & PAD_CFG0_TXDIS)) { @@ -345,24 +363,28 @@ static int gpio_intel_apl_enable_callback(struct device *dev, int access_op, u32_t pin) { const struct gpio_intel_apl_config *cfg = dev->config->config_info; - u32_t island, raw_pin, reg; + u32_t raw_pin, reg; if (access_op != GPIO_ACCESS_BY_PIN) { return -ENOTSUP; } - extract_island_and_pin(pin, &island, &raw_pin); + if (pin > cfg->num_pins) { + return -EINVAL; + } - if (!check_perm(dev, island, raw_pin)) { + raw_pin = cfg->pin_offset + pin; + + if (!check_perm(dev, raw_pin)) { return -EPERM; } /* clear (by setting) interrupt status bit */ - reg = cfg->islands[island].reg_base + REG_GPI_INT_STS_BASE; + reg = cfg->reg_base + REG_GPI_INT_STS_BASE; sys_bitfield_set_bit(reg, raw_pin); /* enable interrupt bit */ - reg = cfg->islands[island].reg_base + REG_GPI_INT_EN_BASE; + reg = cfg->reg_base + REG_GPI_INT_EN_BASE; sys_bitfield_set_bit(reg, raw_pin); return 0; @@ -372,20 +394,24 @@ static int gpio_intel_apl_disable_callback(struct device *dev, int access_op, u32_t pin) { const struct gpio_intel_apl_config *cfg = dev->config->config_info; - u32_t island, raw_pin, reg; + u32_t raw_pin, reg; if (access_op != GPIO_ACCESS_BY_PIN) { return -ENOTSUP; } - extract_island_and_pin(pin, &island, &raw_pin); + if (pin > cfg->num_pins) { + return -EINVAL; + } - if (!check_perm(dev, island, raw_pin)) { + raw_pin = cfg->pin_offset + pin; + + if (!check_perm(dev, raw_pin)) { return -EPERM; } /* disable interrupt bit */ - reg = cfg->islands[island].reg_base + REG_GPI_INT_EN_BASE; + reg = cfg->reg_base + REG_GPI_INT_EN_BASE; sys_bitfield_clear_bit(reg, raw_pin); return 0; @@ -406,62 +432,60 @@ int gpio_intel_apl_init(struct device *dev) { const struct gpio_intel_apl_config *cfg = dev->config->config_info; struct gpio_intel_apl_data *data = dev->driver_data; - int i; gpio_intel_apl_irq_config(dev); - for (i = 0; i < NUM_ISLANDS; i++) { - data->pad_base[i] = sys_read32(cfg->islands[i].reg_base - + REG_PAD_BASE_ADDR); + data->pad_base = sys_read32(cfg->reg_base + REG_PAD_BASE_ADDR); - /* Set to route interrupt through IRQ 14 */ - sys_bitfield_clear_bit(data->pad_base[i] + REG_MISCCFG, - MISCCFG_IRQ_ROUTE_POS); - } + /* Set to route interrupt through IRQ 14 */ + sys_bitfield_clear_bit(data->pad_base + REG_MISCCFG, + MISCCFG_IRQ_ROUTE_POS); dev->driver_api = &gpio_intel_apl_api; return 0; } -static const struct gpio_intel_apl_config gpio_intel_apl_cfg = { - .islands = { - { - /* North island */ - .reg_base = DT_APL_GPIO_BASE_ADDRESS_0, - .num_pins = 78, - }, - { - /* Northwest island */ - .reg_base = DT_APL_GPIO_BASE_ADDRESS_1, - .num_pins = 77, - }, - { - /* West island */ - .reg_base = DT_APL_GPIO_BASE_ADDRESS_2, - .num_pins = 47, - }, - { - /* Southwest island */ - .reg_base = DT_APL_GPIO_BASE_ADDRESS_3, - .num_pins = 43, - }, - }, -}; +#define GPIO_INTEL_APL_DEV_CFG_DATA(dir_l, dir_u, pos, offset, pins) \ +static const struct gpio_intel_apl_config \ + gpio_intel_apl_cfg_##dir_l##_##pos = { \ + .reg_base = DT_APL_GPIO_BASE_ADDRESS_##dir_u, \ + .pin_offset = offset, \ + .num_pins = pins, \ +}; \ + \ +static struct gpio_intel_apl_data gpio_intel_apl_data_##dir_l##_##pos; \ + \ +DEVICE_AND_API_INIT(gpio_intel_apl_##dir_l##_##pos, \ + DT_APL_GPIO_LABEL_##dir_u##_##pos, \ + gpio_intel_apl_init, \ + &gpio_intel_apl_data_##dir_l##_##pos, \ + &gpio_intel_apl_cfg_##dir_l##_##pos, \ + POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \ + &gpio_intel_apl_api) -static struct gpio_intel_apl_data gpio_intel_apl_data; +GPIO_INTEL_APL_DEV_CFG_DATA(n, N, 0, 0, 32); +GPIO_INTEL_APL_DEV_CFG_DATA(n, N, 1, 32, 32); +GPIO_INTEL_APL_DEV_CFG_DATA(n, N, 2, 32, 14); -DEVICE_AND_API_INIT(gpio_intel_apl, DT_APL_GPIO_LABEL, - gpio_intel_apl_init, - &gpio_intel_apl_data, &gpio_intel_apl_cfg, - POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, - &gpio_intel_apl_api); +GPIO_INTEL_APL_DEV_CFG_DATA(nw, NW, 0, 0, 32); +GPIO_INTEL_APL_DEV_CFG_DATA(nw, NW, 1, 32, 32); +GPIO_INTEL_APL_DEV_CFG_DATA(nw, NW, 2, 32, 13); + +GPIO_INTEL_APL_DEV_CFG_DATA(w, W, 0, 0, 32); +GPIO_INTEL_APL_DEV_CFG_DATA(w, W, 1, 32, 15); + +GPIO_INTEL_APL_DEV_CFG_DATA(sw, SW, 0, 0, 32); +GPIO_INTEL_APL_DEV_CFG_DATA(sw, SW, 1, 32, 11); static void gpio_intel_apl_irq_config(struct device *dev) { - IRQ_CONNECT(DT_APL_GPIO_IRQ, DT_APL_GPIO_IRQ_PRIORITY, - gpio_intel_apl_isr, DEVICE_GET(gpio_intel_apl), - DT_APL_GPIO_IRQ_SENSE); + struct device *irq_dev; - irq_enable(DT_APL_GPIO_IRQ); + irq_dev = device_get_binding(DT_SHARED_IRQ_SHAREDIRQ0_LABEL); + __ASSERT(irq_dev != NULL, + "Failed to get shared IRQ device binding"); + + shared_irq_isr_register(irq_dev, gpio_intel_apl_isr, dev); + shared_irq_enable(irq_dev, dev); } diff --git a/dts/bindings/gpio/intel,apl-gpio.yaml b/dts/bindings/gpio/intel,apl-gpio.yaml index 4017c8abbee..799ff523976 100644 --- a/dts/bindings/gpio/intel,apl-gpio.yaml +++ b/dts/bindings/gpio/intel,apl-gpio.yaml @@ -1,5 +1,5 @@ # -# Copyright (c) 2018 Intel Corporation +# Copyright (c) 2018-2019 Intel Corporation # # SPDX-License-Identifier: Apache-2.0 # @@ -24,12 +24,6 @@ properties: generation: define category: required - interrupts: - type: array - category: required - description: required interrupts - generation: define - label: type: string category: required diff --git a/dts/x86/apollo_lake.dtsi b/dts/x86/apollo_lake.dtsi index 143dfa19d8d..5a845aefd10 100644 --- a/dts/x86/apollo_lake.dtsi +++ b/dts/x86/apollo_lake.dtsi @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018 Intel Corporation. + * Copyright (c) 2017-2019 Intel Corporation. * * SPDX-License-Identifier: Apache-2.0 */ @@ -50,9 +50,7 @@ <0xd0c40000 0x1000>, <0xd0c70000 0x1000>, <0xd0c00000 0x1000>; - interrupts = <14 IRQ_TYPE_LEVEL_LOW 3>; - interrupt-parent = <&intc>; - label = "GPIO_0"; + label = "APL_GPIO"; gpio-controller ; #gpio-cells = <2>; @@ -60,4 +58,13 @@ status = "disabled"; }; }; + + sharedirq0: sharedirq0 { + compatible = "shared-irq"; + label = "APL_GPIO_IRQ"; + interrupts = <14 IRQ_TYPE_LEVEL_LOW 3>; + interrupt-parent = <&intc>; + + status = "ok"; + }; }; diff --git a/samples/boards/up_squared/gpio_counter/src/main.c b/samples/boards/up_squared/gpio_counter/src/main.c index 00280a66cd1..85a91a50ad1 100644 --- a/samples/boards/up_squared/gpio_counter/src/main.c +++ b/samples/boards/up_squared/gpio_counter/src/main.c @@ -38,18 +38,40 @@ */ struct _pin { - u32_t hat_num; - u32_t pin; + u32_t hat_num; + u32_t pin; + const char *gpio_dev_name; + struct device *gpio_dev; }; struct _pin counter_pins[] = { - { 35, UP2_HAT_PIN_35 }, - { 37, UP2_HAT_PIN_37 }, - { 38, UP2_HAT_PIN_38 }, - { 40, UP2_HAT_PIN_40 }, + { + .hat_num = 35, + .pin = UP2_HAT_PIN_35, + .gpio_dev_name = UP2_HAT_PIN_35_DEV, + }, + { + .hat_num = 37, + .pin = UP2_HAT_PIN_37, + .gpio_dev_name = UP2_HAT_PIN_37_DEV, + }, + { + .hat_num = 38, + .pin = UP2_HAT_PIN_38, + .gpio_dev_name = UP2_HAT_PIN_38_DEV, + }, + { + .hat_num = 40, + .pin = UP2_HAT_PIN_40, + .gpio_dev_name = UP2_HAT_PIN_40_DEV, + }, }; -struct _pin intr_pin = { 16, UP2_HAT_PIN_16 }; +struct _pin intr_pin = { + .hat_num = 16, + .pin = UP2_HAT_PIN_16, + .gpio_dev_name = UP2_HAT_PIN_16_DEV, +}; static struct gpio_callback gpio_cb; @@ -72,21 +94,37 @@ void button_cb(struct device *gpiodev, struct gpio_callback *cb, u32_t pin) k_sem_give(&counter_sem); } +int get_gpio_dev(struct _pin *pin) +{ + pin->gpio_dev = device_get_binding(pin->gpio_dev_name); + if (!pin->gpio_dev) { + printk("ERROR: cannot get device binding for %s\n", + pin->gpio_dev_name); + return -1; + } + + return 0; +} + void main(void) { - struct device *gpiodev = device_get_binding(GPIO_DEV); u32_t val; int i, ret; - if (!gpiodev) { - printk("ERROR: cannot get device binding for %s\n", - GPIO_DEV); + for (i = 0; i < NUM_PINS; i++) { + if (get_gpio_dev(&counter_pins[i]) != 0) { + return; + } + } + + if (get_gpio_dev(&intr_pin) != 0) { return; } /* Set pins to output */ for (i = 0; i < NUM_PINS; i++) { - ret = gpio_pin_configure(gpiodev, counter_pins[i].pin, + ret = gpio_pin_configure(counter_pins[i].gpio_dev, + counter_pins[i].pin, GPIO_DIR_OUT); if (ret) { printk("ERROR: cannot set HAT pin %d to OUT (%d)\n", @@ -96,16 +134,18 @@ void main(void) } /* Setup input pin */ - ret = gpio_pin_configure(gpiodev, intr_pin.pin, INTR_PIN_FLAGS); + ret = gpio_pin_configure(intr_pin.gpio_dev, intr_pin.pin, + INTR_PIN_FLAGS); if (ret) { printk("ERROR: cannot set HAT pin %d to OUT (%d)\n", intr_pin.hat_num, ret); return; } - gpio_init_callback(&gpio_cb, button_cb, intr_pin.pin); - gpio_add_callback(gpiodev, &gpio_cb); - gpio_pin_enable_callback(gpiodev, intr_pin.pin); + /* Callback uses pin_mask, so need bit shifting */ + gpio_init_callback(&gpio_cb, button_cb, (1 << intr_pin.pin)); + gpio_add_callback(intr_pin.gpio_dev, &gpio_cb); + gpio_pin_enable_callback(intr_pin.gpio_dev, intr_pin.pin); /* main loop */ val = 0U; @@ -113,7 +153,8 @@ void main(void) printk("counter: 0x%x\n", val); for (i = 0; i < NUM_PINS; i++) { - ret = gpio_pin_write(gpiodev, counter_pins[i].pin, + ret = gpio_pin_write(counter_pins[i].gpio_dev, + counter_pins[i].pin, (val & BIT(i))); if (ret) { printk("ERROR: cannot set HAT pin %d value (%d)\n", diff --git a/soc/x86/apollo_lake/Kconfig.defconfig b/soc/x86/apollo_lake/Kconfig.defconfig index 04f0b044fbe..bf4c6502cd3 100644 --- a/soc/x86/apollo_lake/Kconfig.defconfig +++ b/soc/x86/apollo_lake/Kconfig.defconfig @@ -1,7 +1,7 @@ # # Kconfig - Apollo Lake SoC configuration options # -# Copyright (c) 2018 Intel Corporation +# Copyright (c) 2018-2019 Intel Corporation # Copyright (c) 2014-2015 Wind River Systems, Inc. # # SPDX-License-Identifier: Apache-2.0 @@ -77,6 +77,15 @@ if GPIO config GPIO_INTEL_APL default y +config SHARED_IRQ + default y if GPIO_INTEL_APL + +config SHARED_IRQ_0 + default y if SHARED_IRQ + +config SHARED_IRQ_NUM_CLIENTS + default 10 if SHARED_IRQ + endif # GPIO endif # SOC_APOLLO_LAKE diff --git a/soc/x86/apollo_lake/dts_fixup.h b/soc/x86/apollo_lake/dts_fixup.h index 7e5baa6e5c8..163f4d99709 100644 --- a/soc/x86/apollo_lake/dts_fixup.h +++ b/soc/x86/apollo_lake/dts_fixup.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Intel Corporation Inc. + * Copyright (c) 2018-2019 Intel Corporation Inc. * * SPDX-License-Identifier: Apache-2.0 */ @@ -14,19 +14,62 @@ #define DT_ROM_SIZE CONFIG_FLASH_SIZE -#define DT_IOAPIC_BASE_ADDRESS DT_INTEL_IOAPIC_FEC00000_BASE_ADDRESS +#define DT_IOAPIC_BASE_ADDRESS \ + DT_INTEL_IOAPIC_FEC00000_BASE_ADDRESS + +#define DT_APL_GPIO_BASE_ADDRESS_N \ + DT_INTEL_APL_GPIO_D0C50000_BASE_ADDRESS_0 + +#define DT_APL_GPIO_BASE_ADDRESS_NW \ + DT_INTEL_APL_GPIO_D0C50000_BASE_ADDRESS_1 + +#define DT_APL_GPIO_BASE_ADDRESS_W \ + DT_INTEL_APL_GPIO_D0C50000_BASE_ADDRESS_2 + +#define DT_APL_GPIO_BASE_ADDRESS_SW \ + DT_INTEL_APL_GPIO_D0C50000_BASE_ADDRESS_3 -#define DT_APL_GPIO_BASE_ADDRESS_0 DT_INTEL_APL_GPIO_D0C50000_BASE_ADDRESS_0 -#define DT_APL_GPIO_BASE_ADDRESS_1 DT_INTEL_APL_GPIO_D0C50000_BASE_ADDRESS_1 -#define DT_APL_GPIO_BASE_ADDRESS_2 DT_INTEL_APL_GPIO_D0C50000_BASE_ADDRESS_2 -#define DT_APL_GPIO_BASE_ADDRESS_3 DT_INTEL_APL_GPIO_D0C50000_BASE_ADDRESS_3 #define DT_APL_GPIO_IRQ DT_INTEL_APL_GPIO_D0C50000_IRQ_0 -#define DT_APL_GPIO_IRQ_PRIORITY DT_INTEL_APL_GPIO_D0C50000_IRQ_0_PRIORITY -#define DT_APL_GPIO_IRQ_SENSE DT_INTEL_APL_GPIO_D0C50000_IRQ_0_SENSE -#define DT_APL_GPIO_LABEL DT_INTEL_APL_GPIO_D0C50000_LABEL -#define DT_APL_GPIO_MEM_SIZE_0 DT_INTEL_APL_GPIO_D0C50000_SIZE_0 -#define DT_APL_GPIO_MEM_SIZE_1 DT_INTEL_APL_GPIO_D0C50000_SIZE_1 -#define DT_APL_GPIO_MEM_SIZE_2 DT_INTEL_APL_GPIO_D0C50000_SIZE_2 -#define DT_APL_GPIO_MEM_SIZE_3 DT_oINTEL_APL_GPIO_D0C50000_SIZE_3 + +#define DT_APL_GPIO_IRQ_PRIORITY \ + DT_INTEL_APL_GPIO_D0C50000_IRQ_0_PRIORITY + +#define DT_APL_GPIO_IRQ_SENSE \ + DT_INTEL_APL_GPIO_D0C50000_IRQ_0_SENSE + +#define DT_APL_GPIO_MEM_SIZE_N DT_INTEL_APL_GPIO_D0C50000_SIZE_0 +#define DT_APL_GPIO_MEM_SIZE_NW DT_INTEL_APL_GPIO_D0C50000_SIZE_1 +#define DT_APL_GPIO_MEM_SIZE_W DT_INTEL_APL_GPIO_D0C50000_SIZE_2 +#define DT_APL_GPIO_MEM_SIZE_SW DT_INTEL_APL_GPIO_D0C50000_SIZE_3 + +#define DT_APL_GPIO_LABEL_N_0 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_N_0" + +#define DT_APL_GPIO_LABEL_N_1 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_N_1" + +#define DT_APL_GPIO_LABEL_N_2 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_N_2" + +#define DT_APL_GPIO_LABEL_NW_0 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_NW_0" + +#define DT_APL_GPIO_LABEL_NW_1 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_NW_1" + +#define DT_APL_GPIO_LABEL_NW_2 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_NW_2" + +#define DT_APL_GPIO_LABEL_W_0 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_W_0" + +#define DT_APL_GPIO_LABEL_W_1 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_W_1" + +#define DT_APL_GPIO_LABEL_SW_0 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_SW_0" + +#define DT_APL_GPIO_LABEL_SW_1 \ + DT_INTEL_APL_GPIO_D0C50000_LABEL "_SW_1" /* End of SoC Level DTS fixup file */ diff --git a/soc/x86/apollo_lake/soc.c b/soc/x86/apollo_lake/soc.c index 33a15b82b9f..cb735558925 100644 --- a/soc/x86/apollo_lake/soc.c +++ b/soc/x86/apollo_lake/soc.c @@ -102,17 +102,17 @@ MMU_BOOT_REGION(DT_I2C_7_BASE_ADDR, 0x1000, /* for GPIO controller */ #ifdef CONFIG_GPIO_INTEL_APL -MMU_BOOT_REGION(DT_APL_GPIO_BASE_ADDRESS_0, - DT_APL_GPIO_MEM_SIZE_0, +MMU_BOOT_REGION(DT_APL_GPIO_BASE_ADDRESS_N, + DT_APL_GPIO_MEM_SIZE_N, (MMU_ENTRY_READ | MMU_ENTRY_WRITE)); -MMU_BOOT_REGION(DT_APL_GPIO_BASE_ADDRESS_1, - DT_APL_GPIO_MEM_SIZE_1, +MMU_BOOT_REGION(DT_APL_GPIO_BASE_ADDRESS_NW, + DT_APL_GPIO_MEM_SIZE_NW, (MMU_ENTRY_READ | MMU_ENTRY_WRITE)); -MMU_BOOT_REGION(DT_APL_GPIO_BASE_ADDRESS_2, - DT_APL_GPIO_MEM_SIZE_2, +MMU_BOOT_REGION(DT_APL_GPIO_BASE_ADDRESS_W, + DT_APL_GPIO_MEM_SIZE_W, (MMU_ENTRY_READ | MMU_ENTRY_WRITE)); -MMU_BOOT_REGION(DT_APL_GPIO_BASE_ADDRESS_3, - DT_APL_GPIO_MEM_SIZE_3, +MMU_BOOT_REGION(DT_APL_GPIO_BASE_ADDRESS_SW, + DT_APL_GPIO_MEM_SIZE_SW, (MMU_ENTRY_READ | MMU_ENTRY_WRITE)); #endif diff --git a/soc/x86/apollo_lake/soc.h b/soc/x86/apollo_lake/soc.h index eb815366f66..5efe6f33d0a 100644 --- a/soc/x86/apollo_lake/soc.h +++ b/soc/x86/apollo_lake/soc.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Intel Corporation + * Copyright (c) 2018-2019, Intel Corporation * Copyright (c) 2010-2015, Wind River Systems, Inc. * * SPDX-License-Identifier: Apache-2.0 @@ -23,7 +23,9 @@ #include #endif +#ifdef CONFIG_GPIO_INTEL_APL #include "soc_gpio.h" +#endif #ifdef CONFIG_PCI diff --git a/soc/x86/apollo_lake/soc_gpio.h b/soc/x86/apollo_lake/soc_gpio.h index 5e016ff1f57..4412923172e 100644 --- a/soc/x86/apollo_lake/soc_gpio.h +++ b/soc/x86/apollo_lake/soc_gpio.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018, Intel Corporation + * Copyright (c) 2018-2019, Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ @@ -15,265 +15,269 @@ #ifndef __SOC_GPIO_H_ #define __SOC_GPIO_H_ -#define APL_GPIO_N 0 -#define APL_GPIO_NW 1 -#define APL_GPIO_W 2 -#define APL_GPIO_SW 3 +#define APL_GPIO_DEV_N_0 DT_APL_GPIO_LABEL_N_0 +#define APL_GPIO_0 00 +#define APL_GPIO_1 01 +#define APL_GPIO_2 02 +#define APL_GPIO_3 03 +#define APL_GPIO_4 04 +#define APL_GPIO_5 05 +#define APL_GPIO_6 06 +#define APL_GPIO_7 07 +#define APL_GPIO_8 08 +#define APL_GPIO_9 09 +#define APL_GPIO_10 10 +#define APL_GPIO_11 11 +#define APL_GPIO_12 12 +#define APL_GPIO_13 13 +#define APL_GPIO_14 14 +#define APL_GPIO_15 15 +#define APL_GPIO_16 16 +#define APL_GPIO_17 17 +#define APL_GPIO_18 18 +#define APL_GPIO_19 19 +#define APL_GPIO_20 20 +#define APL_GPIO_21 21 +#define APL_GPIO_22 22 +#define APL_GPIO_23 23 +#define APL_GPIO_24 24 +#define APL_GPIO_25 25 +#define APL_GPIO_26 26 +#define APL_GPIO_27 27 +#define APL_GPIO_28 28 +#define APL_GPIO_29 29 +#define APL_GPIO_30 30 +#define APL_GPIO_31 31 -#define APL_GPIO_ISLAND_POS 16 -#define APL_GPIO_PIN_MASK 0xFFFF -#define APL_GPIO_N_PREFIX (APL_GPIO_N << APL_GPIO_ISLAND_POS) -#define APL_GPIO_NW_PREFIX (APL_GPIO_NW << APL_GPIO_ISLAND_POS) -#define APL_GPIO_W_PREFIX (APL_GPIO_W << APL_GPIO_ISLAND_POS) -#define APL_GPIO_SW_PREFIX (APL_GPIO_SW << APL_GPIO_ISLAND_POS) +#define APL_GPIO_DEV_N_1 DT_APL_GPIO_LABEL_N_1 +#define APL_GPIO_32 00 +#define APL_GPIO_33 01 +#define APL_GPIO_34 02 +#define APL_GPIO_35 03 +#define APL_GPIO_36 04 +#define APL_GPIO_37 05 +#define APL_GPIO_38 06 +#define APL_GPIO_39 07 +#define APL_GPIO_40 08 +#define APL_GPIO_41 09 +#define APL_GPIO_42 10 +#define APL_GPIO_43 11 +#define APL_GPIO_44 12 +#define APL_GPIO_45 13 +#define APL_GPIO_46 14 +#define APL_GPIO_47 15 +#define APL_GPIO_48 16 +#define APL_GPIO_49 17 +#define APL_GPIO_62 18 +#define APL_GPIO_63 19 +#define APL_GPIO_64 20 +#define APL_GPIO_65 21 +#define APL_GPIO_66 22 +#define APL_GPIO_67 23 +#define APL_GPIO_68 24 +#define APL_GPIO_69 25 +#define APL_GPIO_70 26 +#define APL_GPIO_71 27 +#define APL_GPIO_72 28 +#define APL_GPIO_73 29 +#define APL_GPIO_TCK 30 +#define APL_GPIO_TRST_B 31 -#define APL_GPIO_0 (00 | APL_GPIO_N_PREFIX) -#define APL_GPIO_1 (01 | APL_GPIO_N_PREFIX) -#define APL_GPIO_2 (02 | APL_GPIO_N_PREFIX) -#define APL_GPIO_3 (03 | APL_GPIO_N_PREFIX) -#define APL_GPIO_4 (04 | APL_GPIO_N_PREFIX) -#define APL_GPIO_5 (05 | APL_GPIO_N_PREFIX) -#define APL_GPIO_6 (06 | APL_GPIO_N_PREFIX) -#define APL_GPIO_7 (07 | APL_GPIO_N_PREFIX) -#define APL_GPIO_8 (08 | APL_GPIO_N_PREFIX) -#define APL_GPIO_9 (09 | APL_GPIO_N_PREFIX) -#define APL_GPIO_10 (10 | APL_GPIO_N_PREFIX) -#define APL_GPIO_11 (11 | APL_GPIO_N_PREFIX) -#define APL_GPIO_12 (12 | APL_GPIO_N_PREFIX) -#define APL_GPIO_13 (13 | APL_GPIO_N_PREFIX) -#define APL_GPIO_14 (14 | APL_GPIO_N_PREFIX) -#define APL_GPIO_15 (15 | APL_GPIO_N_PREFIX) -#define APL_GPIO_16 (16 | APL_GPIO_N_PREFIX) -#define APL_GPIO_17 (17 | APL_GPIO_N_PREFIX) -#define APL_GPIO_18 (18 | APL_GPIO_N_PREFIX) -#define APL_GPIO_19 (19 | APL_GPIO_N_PREFIX) -#define APL_GPIO_20 (20 | APL_GPIO_N_PREFIX) -#define APL_GPIO_21 (21 | APL_GPIO_N_PREFIX) -#define APL_GPIO_22 (22 | APL_GPIO_N_PREFIX) -#define APL_GPIO_23 (23 | APL_GPIO_N_PREFIX) -#define APL_GPIO_24 (24 | APL_GPIO_N_PREFIX) -#define APL_GPIO_25 (25 | APL_GPIO_N_PREFIX) -#define APL_GPIO_26 (26 | APL_GPIO_N_PREFIX) -#define APL_GPIO_27 (27 | APL_GPIO_N_PREFIX) -#define APL_GPIO_28 (28 | APL_GPIO_N_PREFIX) -#define APL_GPIO_29 (29 | APL_GPIO_N_PREFIX) -#define APL_GPIO_30 (30 | APL_GPIO_N_PREFIX) -#define APL_GPIO_31 (31 | APL_GPIO_N_PREFIX) -#define APL_GPIO_32 (32 | APL_GPIO_N_PREFIX) -#define APL_GPIO_33 (33 | APL_GPIO_N_PREFIX) -#define APL_GPIO_34 (34 | APL_GPIO_N_PREFIX) -#define APL_GPIO_35 (35 | APL_GPIO_N_PREFIX) -#define APL_GPIO_36 (36 | APL_GPIO_N_PREFIX) -#define APL_GPIO_37 (37 | APL_GPIO_N_PREFIX) -#define APL_GPIO_38 (38 | APL_GPIO_N_PREFIX) -#define APL_GPIO_39 (39 | APL_GPIO_N_PREFIX) -#define APL_GPIO_40 (40 | APL_GPIO_N_PREFIX) -#define APL_GPIO_41 (41 | APL_GPIO_N_PREFIX) -#define APL_GPIO_42 (42 | APL_GPIO_N_PREFIX) -#define APL_GPIO_43 (43 | APL_GPIO_N_PREFIX) -#define APL_GPIO_44 (44 | APL_GPIO_N_PREFIX) -#define APL_GPIO_45 (45 | APL_GPIO_N_PREFIX) -#define APL_GPIO_46 (46 | APL_GPIO_N_PREFIX) -#define APL_GPIO_47 (47 | APL_GPIO_N_PREFIX) -#define APL_GPIO_48 (48 | APL_GPIO_N_PREFIX) -#define APL_GPIO_49 (49 | APL_GPIO_N_PREFIX) -#define APL_GPIO_62 (50 | APL_GPIO_N_PREFIX) -#define APL_GPIO_63 (51 | APL_GPIO_N_PREFIX) -#define APL_GPIO_64 (52 | APL_GPIO_N_PREFIX) -#define APL_GPIO_65 (53 | APL_GPIO_N_PREFIX) -#define APL_GPIO_66 (54 | APL_GPIO_N_PREFIX) -#define APL_GPIO_67 (55 | APL_GPIO_N_PREFIX) -#define APL_GPIO_68 (56 | APL_GPIO_N_PREFIX) -#define APL_GPIO_69 (57 | APL_GPIO_N_PREFIX) -#define APL_GPIO_70 (58 | APL_GPIO_N_PREFIX) -#define APL_GPIO_71 (59 | APL_GPIO_N_PREFIX) -#define APL_GPIO_72 (60 | APL_GPIO_N_PREFIX) -#define APL_GPIO_73 (61 | APL_GPIO_N_PREFIX) -#define APL_GPIO_TCK (62 | APL_GPIO_N_PREFIX) -#define APL_GPIO_TRST_B (63 | APL_GPIO_N_PREFIX) -#define APL_GPIO_TMS (64 | APL_GPIO_N_PREFIX) -#define APL_GPIO_TDI (65 | APL_GPIO_N_PREFIX) -#define APL_GPIO_CX_PMODE (66 | APL_GPIO_N_PREFIX) -#define APL_GPIO_CX_PREQ_B (67 | APL_GPIO_N_PREFIX) -#define APL_GPIO_JTAGX (68 | APL_GPIO_N_PREFIX) -#define APL_GPIO_CX_PRDY_B (69 | APL_GPIO_N_PREFIX) -#define APL_GPIO_TDO (70 | APL_GPIO_N_PREFIX) -#define APL_GPIO_CNV_BRI_DT (71 | APL_GPIO_N_PREFIX) -#define APL_GPIO_CNV_BRI_RSP (72 | APL_GPIO_N_PREFIX) -#define APL_GPIO_CNV_RGI_DT (73 | APL_GPIO_N_PREFIX) -#define APL_GPIO_CNV_RGI_RSP (74 | APL_GPIO_N_PREFIX) -#define APL_GPIO_SVID0_ALERT_B (75 | APL_GPIO_N_PREFIX) -#define APL_GPIO_SVOD0_DATA (76 | APL_GPIO_N_PREFIX) -#define APL_GPIO_SVOD0_CLK (77 | APL_GPIO_N_PREFIX) +#define APL_GPIO_DEV_N_2 DT_APL_GPIO_LABEL_N_2 +#define APL_GPIO_TMS 00 +#define APL_GPIO_TDI 01 +#define APL_GPIO_CX_PMODE 02 +#define APL_GPIO_CX_PREQ_B 03 +#define APL_GPIO_JTAGX 04 +#define APL_GPIO_CX_PRDY_B 05 +#define APL_GPIO_TDO 06 +#define APL_GPIO_CNV_BRI_DT 07 +#define APL_GPIO_CNV_BRI_RSP 08 +#define APL_GPIO_CNV_RGI_DT 09 +#define APL_GPIO_CNV_RGI_RSP 10 +#define APL_GPIO_SVID0_ALERT_B 11 +#define APL_GPIO_SVOD0_DATA 12 +#define APL_GPIO_SVOD0_CLK 13 -#define APL_GPIO_187 (00 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_188 (01 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_189 (02 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_190 (03 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_191 (04 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_192 (05 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_193 (06 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_194 (07 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_195 (08 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_196 (09 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_197 (10 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_198 (11 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_199 (12 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_200 (13 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_201 (14 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_202 (15 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_203 (16 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_204 (17 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMC_SPI_FS0 (18 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMC_SPI_FS1 (19 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMC_SPI_FS2 (20 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMC_SPI_RXD (21 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMC_SPI_TXC (22 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMC_SPI_CLK (23 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMIC_PWRGOOD (24 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMIC_RESET_B (25 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_213 (26 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_214 (27 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_215 (28 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMIC_THERMTRIP_B (29 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMIC_STDBY (30 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PROCHOT_B (31 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMIC_I2C_SCL (32 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_PMIC_I2C_SDA (33 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_74 (34 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_75 (35 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_76 (36 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_77 (37 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_78 (38 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_79 (39 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_80 (40 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_81 (41 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_82 (42 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_83 (43 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_84 (44 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_85 (45 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_86 (46 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_87 (47 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_88 (48 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_89 (49 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_90 (50 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_91 (51 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_92 (52 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_97 (53 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_98 (54 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_99 (55 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_100 (56 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_101 (57 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_102 (58 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_103 (59 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_FST_SPI_CLK_FB (60 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_104 (61 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_105 (62 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_106 (63 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_109 (64 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_110 (65 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_111 (66 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_112 (67 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_113 (68 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_116 (69 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_117 (70 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_118 (71 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_119 (72 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_120 (73 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_121 (74 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_122 (75 | APL_GPIO_NW_PREFIX) -#define APL_GPIO_123 (76 | APL_GPIO_NW_PREFIX) +#define APL_GPIO_DEV_NW_0 DT_APL_GPIO_LABEL_NW_0 +#define APL_GPIO_187 00 +#define APL_GPIO_188 01 +#define APL_GPIO_189 02 +#define APL_GPIO_190 03 +#define APL_GPIO_191 04 +#define APL_GPIO_192 05 +#define APL_GPIO_193 06 +#define APL_GPIO_194 07 +#define APL_GPIO_195 08 +#define APL_GPIO_196 09 +#define APL_GPIO_197 10 +#define APL_GPIO_198 11 +#define APL_GPIO_199 12 +#define APL_GPIO_200 13 +#define APL_GPIO_201 14 +#define APL_GPIO_202 15 +#define APL_GPIO_203 16 +#define APL_GPIO_204 17 +#define APL_GPIO_PMC_SPI_FS0 18 +#define APL_GPIO_PMC_SPI_FS1 19 +#define APL_GPIO_PMC_SPI_FS2 20 +#define APL_GPIO_PMC_SPI_RXD 21 +#define APL_GPIO_PMC_SPI_TXC 22 +#define APL_GPIO_PMC_SPI_CLK 23 +#define APL_GPIO_PMIC_PWRGOOD 24 +#define APL_GPIO_PMIC_RESET_B 25 +#define APL_GPIO_213 26 +#define APL_GPIO_214 27 +#define APL_GPIO_215 28 +#define APL_GPIO_PMIC_THERMTRIP_B 29 +#define APL_GPIO_PMIC_STDBY 30 +#define APL_GPIO_PROCHOT_B 31 -#define APL_GPIO_124 (00 | APL_GPIO_W_PREFIX) -#define APL_GPIO_125 (01 | APL_GPIO_W_PREFIX) -#define APL_GPIO_126 (02 | APL_GPIO_W_PREFIX) -#define APL_GPIO_127 (03 | APL_GPIO_W_PREFIX) -#define APL_GPIO_128 (04 | APL_GPIO_W_PREFIX) -#define APL_GPIO_129 (05 | APL_GPIO_W_PREFIX) -#define APL_GPIO_130 (06 | APL_GPIO_W_PREFIX) -#define APL_GPIO_131 (07 | APL_GPIO_W_PREFIX) -#define APL_GPIO_132 (08 | APL_GPIO_W_PREFIX) -#define APL_GPIO_133 (09 | APL_GPIO_W_PREFIX) -#define APL_GPIO_134 (10 | APL_GPIO_W_PREFIX) -#define APL_GPIO_135 (11 | APL_GPIO_W_PREFIX) -#define APL_GPIO_136 (12 | APL_GPIO_W_PREFIX) -#define APL_GPIO_137 (13 | APL_GPIO_W_PREFIX) -#define APL_GPIO_138 (14 | APL_GPIO_W_PREFIX) -#define APL_GPIO_139 (15 | APL_GPIO_W_PREFIX) -#define APL_GPIO_146 (16 | APL_GPIO_W_PREFIX) -#define APL_GPIO_147 (17 | APL_GPIO_W_PREFIX) -#define APL_GPIO_148 (18 | APL_GPIO_W_PREFIX) -#define APL_GPIO_149 (19 | APL_GPIO_W_PREFIX) -#define APL_GPIO_150 (20 | APL_GPIO_W_PREFIX) -#define APL_GPIO_151 (21 | APL_GPIO_W_PREFIX) -#define APL_GPIO_152 (22 | APL_GPIO_W_PREFIX) -#define APL_GPIO_153 (23 | APL_GPIO_W_PREFIX) -#define APL_GPIO_154 (24 | APL_GPIO_W_PREFIX) -#define APL_GPIO_155 (25 | APL_GPIO_W_PREFIX) -#define APL_GPIO_209 (26 | APL_GPIO_W_PREFIX) -#define APL_GPIO_210 (27 | APL_GPIO_W_PREFIX) -#define APL_GPIO_211 (28 | APL_GPIO_W_PREFIX) -#define APL_GPIO_212 (29 | APL_GPIO_W_PREFIX) -#define APL_GPIO_OSC_CLK_OUT_0 (30 | APL_GPIO_W_PREFIX) -#define APL_GPIO_OSC_CLK_OUT_1 (31 | APL_GPIO_W_PREFIX) -#define APL_GPIO_OSC_CLK_OUT_2 (32 | APL_GPIO_W_PREFIX) -#define APL_GPIO_OSC_CLK_OUT_3 (33 | APL_GPIO_W_PREFIX) -#define APL_GPIO_OSC_CLK_OUT_4 (34 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_AC_PRESENT (35 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_BATLOW_B (36 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_PLTRST_B (37 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_PWRBTN_B (38 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_RESETBUTTON_B (39 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_SLP_S0_B (40 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_SLP_S3_B (41 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_SLP_S4_B (42 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_SUSCLK (43 | APL_GPIO_W_PREFIX) -#define APL_GPIO_PMU_WAKE_B (44 | APL_GPIO_W_PREFIX) -#define APL_GPIO_SUS_STAT_B (45 | APL_GPIO_W_PREFIX) -#define APL_GPIO_SUSPWRDNACK (46 | APL_GPIO_W_PREFIX) +#define APL_GPIO_DEV_NW_1 DT_APL_GPIO_LABEL_NW_1 +#define APL_GPIO_PMIC_I2C_SCL 00 +#define APL_GPIO_PMIC_I2C_SDA 01 +#define APL_GPIO_74 02 +#define APL_GPIO_75 03 +#define APL_GPIO_76 04 +#define APL_GPIO_77 05 +#define APL_GPIO_78 06 +#define APL_GPIO_79 07 +#define APL_GPIO_80 08 +#define APL_GPIO_81 09 +#define APL_GPIO_82 10 +#define APL_GPIO_83 11 +#define APL_GPIO_84 12 +#define APL_GPIO_85 13 +#define APL_GPIO_86 14 +#define APL_GPIO_87 15 +#define APL_GPIO_88 16 +#define APL_GPIO_89 17 +#define APL_GPIO_90 18 +#define APL_GPIO_91 19 +#define APL_GPIO_92 20 +#define APL_GPIO_97 21 +#define APL_GPIO_98 22 +#define APL_GPIO_99 23 +#define APL_GPIO_100 24 +#define APL_GPIO_101 25 +#define APL_GPIO_102 26 +#define APL_GPIO_103 27 +#define APL_GPIO_FST_SPI_CLK_FB 28 +#define APL_GPIO_104 29 +#define APL_GPIO_105 30 +#define APL_GPIO_106 31 -#define APL_GPIO_205 (00 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_206 (01 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_207 (02 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_208 (03 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_156 (04 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_157 (05 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_158 (06 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_159 (07 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_160 (08 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_161 (09 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_162 (10 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_163 (11 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_164 (12 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_165 (13 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_166 (14 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_167 (15 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_168 (16 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_169 (17 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_170 (18 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_171 (19 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_172 (20 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_179 (21 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_173 (22 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_174 (23 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_175 (24 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_176 (25 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_177 (26 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_178 (27 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_186 (28 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_182 (29 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_183 (30 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_SMB_ALERTB (31 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_SMB_CLK (32 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_SMB_DATA (33 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_ILB_SERIRQ (34 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_CLKOUT0 (35 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_CLKOUT1 (36 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_AD0 (37 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_AD1 (38 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_AD2 (39 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_AD3 (40 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_CLKRUNB (41 | APL_GPIO_SW_PREFIX) -#define APL_GPIO_LPC_FRAMEB (42 | APL_GPIO_SW_PREFIX) +#define APL_GPIO_DEV_NW_2 DT_APL_GPIO_LABEL_NW_2 +#define APL_GPIO_109 00 +#define APL_GPIO_110 01 +#define APL_GPIO_111 02 +#define APL_GPIO_112 03 +#define APL_GPIO_113 04 +#define APL_GPIO_116 05 +#define APL_GPIO_117 06 +#define APL_GPIO_118 07 +#define APL_GPIO_119 08 +#define APL_GPIO_120 09 +#define APL_GPIO_121 10 +#define APL_GPIO_122 11 +#define APL_GPIO_123 12 + +#define APL_GPIO_DEV_W_0 DT_APL_GPIO_LABEL_W_0 +#define APL_GPIO_124 00 +#define APL_GPIO_125 01 +#define APL_GPIO_126 02 +#define APL_GPIO_127 03 +#define APL_GPIO_128 04 +#define APL_GPIO_129 05 +#define APL_GPIO_130 06 +#define APL_GPIO_131 07 +#define APL_GPIO_132 08 +#define APL_GPIO_133 09 +#define APL_GPIO_134 10 +#define APL_GPIO_135 11 +#define APL_GPIO_136 12 +#define APL_GPIO_137 13 +#define APL_GPIO_138 14 +#define APL_GPIO_139 15 +#define APL_GPIO_146 16 +#define APL_GPIO_147 17 +#define APL_GPIO_148 18 +#define APL_GPIO_149 19 +#define APL_GPIO_150 20 +#define APL_GPIO_151 21 +#define APL_GPIO_152 22 +#define APL_GPIO_153 23 +#define APL_GPIO_154 24 +#define APL_GPIO_155 25 +#define APL_GPIO_209 26 +#define APL_GPIO_210 27 +#define APL_GPIO_211 28 +#define APL_GPIO_212 29 +#define APL_GPIO_OSC_CLK_OUT_0 30 +#define APL_GPIO_OSC_CLK_OUT_1 31 + +#define APL_GPIO_DEV_W_1 DT_APL_GPIO_LABEL_W_1 +#define APL_GPIO_OSC_CLK_OUT_2 00 +#define APL_GPIO_OSC_CLK_OUT_3 01 +#define APL_GPIO_OSC_CLK_OUT_4 02 +#define APL_GPIO_PMU_AC_PRESENT 03 +#define APL_GPIO_PMU_BATLOW_B 04 +#define APL_GPIO_PMU_PLTRST_B 05 +#define APL_GPIO_PMU_PWRBTN_B 06 +#define APL_GPIO_PMU_RESETBUTTON_B 07 +#define APL_GPIO_PMU_SLP_S0_B 08 +#define APL_GPIO_PMU_SLP_S3_B 09 +#define APL_GPIO_PMU_SLP_S4_B 10 +#define APL_GPIO_PMU_SUSCLK 11 +#define APL_GPIO_PMU_WAKE_B 12 +#define APL_GPIO_SUS_STAT_B 13 +#define APL_GPIO_SUSPWRDNACK 14 + +#define APL_GPIO_DEV_SW_0 DT_APL_GPIO_LABEL_SW_0 +#define APL_GPIO_205 00 +#define APL_GPIO_206 01 +#define APL_GPIO_207 02 +#define APL_GPIO_208 03 +#define APL_GPIO_156 04 +#define APL_GPIO_157 05 +#define APL_GPIO_158 06 +#define APL_GPIO_159 07 +#define APL_GPIO_160 08 +#define APL_GPIO_161 09 +#define APL_GPIO_162 10 +#define APL_GPIO_163 11 +#define APL_GPIO_164 12 +#define APL_GPIO_165 13 +#define APL_GPIO_166 14 +#define APL_GPIO_167 15 +#define APL_GPIO_168 16 +#define APL_GPIO_169 17 +#define APL_GPIO_170 18 +#define APL_GPIO_171 19 +#define APL_GPIO_172 20 +#define APL_GPIO_179 21 +#define APL_GPIO_173 22 +#define APL_GPIO_174 23 +#define APL_GPIO_175 24 +#define APL_GPIO_176 25 +#define APL_GPIO_177 26 +#define APL_GPIO_178 27 +#define APL_GPIO_186 28 +#define APL_GPIO_182 29 +#define APL_GPIO_183 30 +#define APL_GPIO_SMB_ALERTB 31 + +#define APL_GPIO_DEV_SW_1 DT_APL_GPIO_LABEL_SW_1 +#define APL_GPIO_SMB_CLK 00 +#define APL_GPIO_SMB_DATA 01 +#define APL_GPIO_LPC_ILB_SERIRQ 02 +#define APL_GPIO_LPC_CLKOUT0 03 +#define APL_GPIO_LPC_CLKOUT1 04 +#define APL_GPIO_LPC_AD0 05 +#define APL_GPIO_LPC_AD1 06 +#define APL_GPIO_LPC_AD2 07 +#define APL_GPIO_LPC_AD3 08 +#define APL_GPIO_LPC_CLKRUNB 09 +#define APL_GPIO_LPC_FRAMEB 10 #endif /* __SOC_GPIO_H_ */