coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
gpio.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #include <assert.h>
4 #include <device/mmio.h>
5 #include <gpio.h>
6 
8  uint32_t drive_str, uint32_t enable)
9 {
10  struct tlmm_gpio *regs = (void *)(uintptr_t)gpio.addr;
11  uint32_t reg_val;
12 
13  /* gpio pull only PULLNONE, PULLUP, KEEPER, PULLDOWN status */
15 
16  reg_val = ((enable & GPIO_BMSK) << GPIO_CFG_OE_SHFT) |
17  ((drive_str & GPIO_CFG_DRV_BMSK) << GPIO_CFG_DRV_SHFT) |
20  ((read32(&regs->cfg) & GPIO_CFG_EGPIO_BMSK)
22 
23  write32(&regs->cfg, reg_val);
24 }
25 
27 {
28  struct tlmm_gpio *regs = (void *)(uintptr_t)gpio.addr;
29 
30  write32(&regs->in_out, (!!value) << GPIO_IO_OUT_SHFT);
31 }
32 
34 {
35  struct tlmm_gpio *regs = (void *)(uintptr_t)gpio.addr;
36 
37  return ((read32(&regs->in_out) >> GPIO_IO_IN_SHFT) & GPIO_BMSK);
38 }
39 
41 {
44 }
45 
47 {
50 }
51 
53 {
56 }
57 
59 {
63 }
64 
66 {
67  struct tlmm_gpio *regs = (void *)(uintptr_t)gpio.addr;
68 
71 
77 }
78 
80 {
81  struct tlmm_gpio *regs = (void *)(uintptr_t)gpio.addr;
82 
83  if (!(read32(&regs->intr_status) & GPIO_INTR_STATUS_MASK))
85 
86  write32(&regs->intr_status, GPIO_INTR_STATUS_DISABLE);
87 
89 }
#define GPIO_OUTPUT
Definition: gpio_ftns.h:23
#define GPIO_INPUT
Definition: gpio_ftns.h:24
pte_t value
Definition: mmu.c:91
static void write32(void *addr, uint32_t val)
Definition: mmio.h:40
static uint32_t read32(const void *addr)
Definition: mmio.h:22
#define pull
Definition: asmlib.h:26
#define assert(statement)
Definition: assert.h:74
#define clrsetbits32(addr, clear, set)
Definition: mmio.h:16
unsigned int type
Definition: edid.c:57
gpio_irq_type
Definition: gpio_common.h:54
@ GPIO_2MA
Definition: gpio_common.h:70
@ GPIO_INTR_STATUS_DISABLE
Definition: gpio_common.h:50
@ GPIO_INTR_STATUS_ENABLE
Definition: gpio_common.h:51
@ GPIO_INTR_DECT_CTL_MASK
Definition: gpio_common.h:15
@ GPIO_INTR_STATUS_MASK
Definition: gpio_common.h:14
#define GPIO_FUNC_GPIO
Definition: gpio_common.h:9
@ GPIO_IO_OUT_SHFT
Definition: gpio_common.h:45
@ GPIO_IO_IN_SHFT
Definition: gpio_common.h:44
@ GPIO_INTR_DECT_CTL_SHFT
Definition: gpio_common.h:29
@ GPIO_INTR_RAW_STATUS_EN_SHFT
Definition: gpio_common.h:30
@ GPIO_NO_PULL
Definition: gpio_common.h:62
@ GPIO_CFG_EGPIO_SHFT
Definition: gpio_common.h:39
@ GPIO_CFG_FUNC_SHFT
Definition: gpio_common.h:36
@ GPIO_CFG_DRV_SHFT
Definition: gpio_common.h:37
@ GPIO_CFG_PULL_SHFT
Definition: gpio_common.h:35
@ GPIO_CFG_OE_SHFT
Definition: gpio_common.h:38
@ GPIO_CFG_PULL_BMSK
Definition: gpio_common.h:21
@ GPIO_CFG_DRV_BMSK
Definition: gpio_common.h:23
@ GPIO_CFG_EGPIO_BMSK
Definition: gpio_common.h:24
@ GPIO_BMSK
Definition: gpio_common.h:20
@ GPIO_CFG_FUNC_BMSK
Definition: gpio_common.h:22
void gpio_set(gpio_t gpio_num, int value)
Definition: gpio.c:174
void gpio_output(gpio_t gpio_num, int value)
Definition: gpio.c:194
int gpio_get(gpio_t gpio_num)
Definition: gpio.c:166
void gpio_input_pullup(gpio_t gpio_num)
Definition: gpio.c:184
void gpio_input_pulldown(gpio_t gpio_num)
Definition: gpio.c:179
void gpio_input(gpio_t gpio_num)
Definition: gpio.c:189
void gpio_input_irq(gpio_t gpio, enum gpio_irq_type type, uint32_t pull)
Definition: gpio.c:65
int gpio_irq_status(gpio_t gpio)
Definition: gpio.c:79
void gpio_configure(gpio_t gpio, uint32_t func, uint32_t pull, uint32_t drive_str, uint32_t enable)
Definition: gpio.c:7
#define GPIO_PULL_UP
Definition: gpio.h:24
#define GPIO_PULL_DOWN
Definition: gpio.h:23
unsigned int uint32_t
Definition: stdint.h:14
unsigned long uintptr_t
Definition: stdint.h:21
Definition: pinmux.c:36