diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/soc/amd/stoneyridge/gpio.c | 34 | ||||
-rw-r--r-- | src/soc/amd/stoneyridge/include/soc/gpio.h | 190 |
2 files changed, 123 insertions, 101 deletions
diff --git a/src/soc/amd/stoneyridge/gpio.c b/src/soc/amd/stoneyridge/gpio.c index 7e19d996ff..86655fceb4 100644 --- a/src/soc/amd/stoneyridge/gpio.c +++ b/src/soc/amd/stoneyridge/gpio.c @@ -16,26 +16,40 @@ */ #include <arch/io.h> +#include <console/console.h> #include <gpio.h> #include <soc/gpio.h> -/* The following functions must be implemented by SoC/board code. */ +static uintptr_t gpio_get_address(gpio_t gpio_num) +{ + uintptr_t gpio_address; + + if (gpio_num < 64) + gpio_address = GPIO_BANK0_CONTROL(gpio_num); + else if (gpio_num < 128) + gpio_address = GPIO_BANK1_CONTROL(gpio_num); + else + gpio_address = GPIO_BANK2_CONTROL(gpio_num); + + return gpio_address; +} int gpio_get(gpio_t gpio_num) { uint32_t reg; + uintptr_t gpio_address = gpio_get_address(gpio_num); - reg = read32((void *)(uintptr_t)gpio_num); + reg = read32((void *)gpio_address); return !!(reg & GPIO_PIN_STS); } - void gpio_set(gpio_t gpio_num, int value) { uint32_t reg; + uintptr_t gpio_address = gpio_get_address(gpio_num); - reg = read32((void *)(uintptr_t)gpio_num); + reg = read32((void *)gpio_address); reg &= ~GPIO_OUTPUT_MASK; reg |= !!value << GPIO_OUTPUT_SHIFT; write32((void *)(uintptr_t)gpio_num, reg); @@ -44,8 +58,9 @@ void gpio_set(gpio_t gpio_num, int value) void gpio_input_pulldown(gpio_t gpio_num) { uint32_t reg; + uintptr_t gpio_address = gpio_get_address(gpio_num); - reg = read32((void *)(uintptr_t)gpio_num); + reg = read32((void *)gpio_address); reg &= ~GPIO_PULLUP_ENABLE; reg |= GPIO_PULLDOWN_ENABLE; write32((void *)(uintptr_t)gpio_num, reg); @@ -54,8 +69,9 @@ void gpio_input_pulldown(gpio_t gpio_num) void gpio_input_pullup(gpio_t gpio_num) { uint32_t reg; + uintptr_t gpio_address = gpio_get_address(gpio_num); - reg = read32((void *)(uintptr_t)gpio_num); + reg = read32((void *)gpio_address); reg &= ~GPIO_PULLDOWN_ENABLE; reg |= GPIO_PULLUP_ENABLE; write32((void *)(uintptr_t)gpio_num, reg); @@ -64,8 +80,9 @@ void gpio_input_pullup(gpio_t gpio_num) void gpio_input(gpio_t gpio_num) { uint32_t reg; + uintptr_t gpio_address = gpio_get_address(gpio_num); - reg = read32((void *)(uintptr_t)gpio_num); + reg = read32((void *)gpio_address); reg &= ~GPIO_OUTPUT_ENABLE; write32((void *)(uintptr_t)gpio_num, reg); } @@ -73,8 +90,9 @@ void gpio_input(gpio_t gpio_num) void gpio_output(gpio_t gpio_num, int value) { uint32_t reg; + uintptr_t gpio_address = gpio_get_address(gpio_num); - reg = read32((void *)(uintptr_t)gpio_num); + reg = read32((void *)gpio_address); reg |= GPIO_OUTPUT_ENABLE; write32((void *)(uintptr_t)gpio_num, reg); } diff --git a/src/soc/amd/stoneyridge/include/soc/gpio.h b/src/soc/amd/stoneyridge/include/soc/gpio.h index c5b7c8a4d4..6378ca8580 100644 --- a/src/soc/amd/stoneyridge/include/soc/gpio.h +++ b/src/soc/amd/stoneyridge/include/soc/gpio.h @@ -29,103 +29,107 @@ #define GPIO_OUTPUT_ENABLE (1 << 23) /* GPIO_0 - GPIO_62 */ -#define GPIO_BANK0_CONTROL (AMD_SB_ACPI_MMIO_ADDR + 0x1500) -#define GPIO_0 (GPIO_BANK0_CONTROL + 0x00) -#define GPIO_1 (GPIO_BANK0_CONTROL + 0x04) -#define GPIO_2 (GPIO_BANK0_CONTROL + 0x08) -#define GPIO_3 (GPIO_BANK0_CONTROL + 0x0c) -#define GPIO_4 (GPIO_BANK0_CONTROL + 0x10) -#define GPIO_5 (GPIO_BANK0_CONTROL + 0x14) -#define GPIO_6 (GPIO_BANK0_CONTROL + 0x18) -#define GPIO_7 (GPIO_BANK0_CONTROL + 0x1c) -#define GPIO_8 (GPIO_BANK0_CONTROL + 0x20) -#define GPIO_9 (GPIO_BANK0_CONTROL + 0x24) -#define GPIO_10 (GPIO_BANK0_CONTROL + 0x28) -#define GPIO_11 (GPIO_BANK0_CONTROL + 0x2c) -#define GPIO_12 (GPIO_BANK0_CONTROL + 0x30) -#define GPIO_13 (GPIO_BANK0_CONTROL + 0x34) -#define GPIO_14 (GPIO_BANK0_CONTROL + 0x38) -#define GPIO_15 (GPIO_BANK0_CONTROL + 0x3c) -#define GPIO_16 (GPIO_BANK0_CONTROL + 0x40) -#define GPIO_17 (GPIO_BANK0_CONTROL + 0x44) -#define GPIO_18 (GPIO_BANK0_CONTROL + 0x48) -#define GPIO_19 (GPIO_BANK0_CONTROL + 0x4c) -#define GPIO_20 (GPIO_BANK0_CONTROL + 0x50) -#define GPIO_21 (GPIO_BANK0_CONTROL + 0x54) -#define GPIO_22 (GPIO_BANK0_CONTROL + 0x58) -#define GPIO_23 (GPIO_BANK0_CONTROL + 0x5c) -#define GPIO_24 (GPIO_BANK0_CONTROL + 0x60) -#define GPIO_25 (GPIO_BANK0_CONTROL + 0x64) -#define GPIO_26 (GPIO_BANK0_CONTROL + 0x68) -#define GPIO_39 (GPIO_BANK0_CONTROL + 0x9c) -#define GPIO_42 (GPIO_BANK0_CONTROL + 0xa8) +#define GPIO_BANK0_CONTROL(gpio) \ + (AMD_SB_ACPI_MMIO_ADDR + 0x1500 + ((gpio) * 4)) +#define GPIO_0 0 +#define GPIO_1 1 +#define GPIO_2 2 +#define GPIO_3 3 +#define GPIO_4 4 +#define GPIO_5 5 +#define GPIO_6 6 +#define GPIO_7 7 +#define GPIO_8 8 +#define GPIO_9 9 +#define GPIO_10 10 +#define GPIO_11 11 +#define GPIO_12 12 +#define GPIO_13 13 +#define GPIO_14 14 +#define GPIO_15 15 +#define GPIO_16 16 +#define GPIO_17 17 +#define GPIO_18 18 +#define GPIO_19 19 +#define GPIO_20 20 +#define GPIO_21 21 +#define GPIO_22 22 +#define GPIO_23 23 +#define GPIO_24 24 +#define GPIO_25 25 +#define GPIO_26 26 +#define GPIO_39 39 +#define GPIO_42 42 /* GPIO_64 - GPIO_127 */ -#define GPIO_BANK1_CONTROL (AMD_SB_ACPI_MMIO_ADDR + 0x1600) -#define GPIO_64 (GPIO_BANK1_CONTROL + 0x00) -#define GPIO_65 (GPIO_BANK1_CONTROL + 0x04) -#define GPIO_66 (GPIO_BANK1_CONTROL + 0x08) -#define GPIO_67 (GPIO_BANK1_CONTROL + 0x0c) -#define GPIO_68 (GPIO_BANK1_CONTROL + 0x10) -#define GPIO_69 (GPIO_BANK1_CONTROL + 0x14) -#define GPIO_70 (GPIO_BANK1_CONTROL + 0x18) -#define GPIO_71 (GPIO_BANK1_CONTROL + 0x1c) -#define GPIO_72 (GPIO_BANK1_CONTROL + 0x20) -#define GPIO_74 (GPIO_BANK1_CONTROL + 0x28) -#define GPIO_75 (GPIO_BANK1_CONTROL + 0x2c) -#define GPIO_76 (GPIO_BANK1_CONTROL + 0x30) -#define GPIO_84 (GPIO_BANK1_CONTROL + 0x50) -#define GPIO_85 (GPIO_BANK1_CONTROL + 0x54) -#define GPIO_86 (GPIO_BANK1_CONTROL + 0x58) -#define GPIO_87 (GPIO_BANK1_CONTROL + 0x5c) -#define GPIO_88 (GPIO_BANK1_CONTROL + 0x60) -#define GPIO_89 (GPIO_BANK1_CONTROL + 0x64) -#define GPIO_90 (GPIO_BANK1_CONTROL + 0x68) -#define GPIO_91 (GPIO_BANK1_CONTROL + 0x6c) -#define GPIO_92 (GPIO_BANK1_CONTROL + 0x70) -#define GPIO_93 (GPIO_BANK1_CONTROL + 0x74) -#define GPIO_95 (GPIO_BANK1_CONTROL + 0x7c) -#define GPIO_96 (GPIO_BANK1_CONTROL + 0x80) -#define GPIO_97 (GPIO_BANK1_CONTROL + 0x84) -#define GPIO_98 (GPIO_BANK1_CONTROL + 0x88) -#define GPIO_99 (GPIO_BANK1_CONTROL + 0x8c) -#define GPIO_100 (GPIO_BANK1_CONTROL + 0x90) -#define GPIO_101 (GPIO_BANK1_CONTROL + 0x94) -#define GPIO_102 (GPIO_BANK1_CONTROL + 0x98) -#define GPIO_113 (GPIO_BANK1_CONTROL + 0xc4) -#define GPIO_114 (GPIO_BANK1_CONTROL + 0xc8) -#define GPIO_115 (GPIO_BANK1_CONTROL + 0xcc) -#define GPIO_116 (GPIO_BANK1_CONTROL + 0xd0) -#define GPIO_117 (GPIO_BANK1_CONTROL + 0xd4) -#define GPIO_118 (GPIO_BANK1_CONTROL + 0xd8) -#define GPIO_119 (GPIO_BANK1_CONTROL + 0xdc) -#define GPIO_120 (GPIO_BANK1_CONTROL + 0xe0) -#define GPIO_121 (GPIO_BANK1_CONTROL + 0xe4) -#define GPIO_122 (GPIO_BANK1_CONTROL + 0xe8) -#define GPIO_126 (GPIO_BANK1_CONTROL + 0xf8) +#define GPIO_BANK1_CONTROL(gpio) \ + (AMD_SB_ACPI_MMIO_ADDR + 0x1600 + (((gpio) - 64) * 4)) +#define GPIO_64 64 +#define GPIO_65 65 +#define GPIO_66 66 +#define GPIO_67 67 +#define GPIO_68 68 +#define GPIO_69 69 +#define GPIO_70 70 +#define GPIO_71 71 +#define GPIO_72 72 +#define GPIO_74 74 +#define GPIO_75 75 +#define GPIO_76 76 +#define GPIO_84 84 +#define GPIO_85 85 +#define GPIO_86 86 +#define GPIO_87 87 +#define GPIO_88 88 +#define GPIO_89 89 +#define GPIO_90 90 +#define GPIO_91 91 +#define GPIO_92 92 +#define GPIO_93 93 +#define GPIO_95 95 +#define GPIO_96 96 +#define GPIO_97 97 +#define GPIO_98 98 +#define GPIO_99 99 +#define GPIO_100 100 +#define GPIO_101 101 +#define GPIO_102 102 +#define GPIO_113 113 +#define GPIO_114 114 +#define GPIO_115 115 +#define GPIO_116 116 +#define GPIO_117 117 +#define GPIO_118 118 +#define GPIO_119 119 +#define GPIO_120 120 +#define GPIO_121 121 +#define GPIO_122 122 +#define GPIO_126 126 /* GPIO_128 - GPIO_183 */ -#define GPIO_BANK2_CONTROL (AMD_SB_ACPI_MMIO_ADDR + 0x1700) -#define GPIO_129 (GPIO_BANK2_CONTROL + 0x04) -#define GPIO_130 (GPIO_BANK2_CONTROL + 0x08) -#define GPIO_131 (GPIO_BANK2_CONTROL + 0x0c) -#define GPIO_132 (GPIO_BANK2_CONTROL + 0x10) -#define GPIO_133 (GPIO_BANK2_CONTROL + 0x14) -#define GPIO_134 (GPIO_BANK2_CONTROL + 0x18) -#define GPIO_135 (GPIO_BANK2_CONTROL + 0x1c) -#define GPIO_136 (GPIO_BANK2_CONTROL + 0x20) -#define GPIO_137 (GPIO_BANK2_CONTROL + 0x24) -#define GPIO_138 (GPIO_BANK2_CONTROL + 0x28) -#define GPIO_139 (GPIO_BANK2_CONTROL + 0x2c) -#define GPIO_140 (GPIO_BANK2_CONTROL + 0x30) -#define GPIO_141 (GPIO_BANK2_CONTROL + 0x34) -#define GPIO_142 (GPIO_BANK2_CONTROL + 0x38) -#define GPIO_143 (GPIO_BANK2_CONTROL + 0x3c) -#define GPIO_144 (GPIO_BANK2_CONTROL + 0x40) -#define GPIO_145 (GPIO_BANK2_CONTROL + 0x44) -#define GPIO_146 (GPIO_BANK2_CONTROL + 0x48) -#define GPIO_147 (GPIO_BANK2_CONTROL + 0x4c) -#define GPIO_148 (GPIO_BANK2_CONTROL + 0x50) +#define GPIO_BANK2_CONTROL(gpio) \ + (AMD_SB_ACPI_MMIO_ADDR + 0x1700 + (((gpio) - 128) * 4)) +/* GPIO_128 Reserved */ +#define GPIO_129 129 +#define GPIO_130 130 +#define GPIO_131 131 +#define GPIO_132 132 +#define GPIO_133 133 +#define GPIO_134 134 +#define GPIO_135 135 +#define GPIO_136 136 +#define GPIO_137 137 +#define GPIO_138 138 +#define GPIO_139 139 +#define GPIO_140 140 +#define GPIO_141 141 +#define GPIO_142 142 +#define GPIO_143 143 +#define GPIO_144 144 +#define GPIO_145 145 +#define GPIO_146 146 +#define GPIO_147 147 +#define GPIO_148 148 typedef uint32_t gpio_t; |