soc/amd/common/gpio: Use gpio_setbits32()
Some codepaths want to set selected bits of a hardware register to match those of a given variable in memory. Provide a helper function for this purpose and use it in gpio_set(), gpio_input_pulldown() and gpio_input_pullup(). This change also adds GPIO_PULL_MASK and updates GPIO_OUTPUT_MASK to include all bits dealing with pull and output respectively. Change-Id: I4413d113dff550900348a44f71b949b7547a9cfc Signed-off-by: Kyösti Mälkki <kyosti.malkki@gmail.com> Signed-off-by: Furquan Shaikh <furquan@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/42688 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
aaff4017d0
commit
05726e8e69
|
@ -111,6 +111,12 @@ static void __gpio_update32(gpio_t gpio_num, uint32_t mask, uint32_t or)
|
||||||
gpio_write32(gpio_num, reg);
|
gpio_write32(gpio_num, reg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Set specified bits of a register to match those of ctrl. */
|
||||||
|
static void __gpio_setbits32(gpio_t gpio_num, uint32_t mask, uint32_t ctrl)
|
||||||
|
{
|
||||||
|
__gpio_update32(gpio_num, ~mask, ctrl & mask);
|
||||||
|
}
|
||||||
|
|
||||||
static void __gpio_and32(gpio_t gpio_num, uint32_t mask)
|
static void __gpio_and32(gpio_t gpio_num, uint32_t mask)
|
||||||
{
|
{
|
||||||
__gpio_update32(gpio_num, mask, 0);
|
__gpio_update32(gpio_num, mask, 0);
|
||||||
|
@ -143,17 +149,17 @@ int gpio_get(gpio_t gpio_num)
|
||||||
|
|
||||||
void gpio_set(gpio_t gpio_num, int value)
|
void gpio_set(gpio_t gpio_num, int value)
|
||||||
{
|
{
|
||||||
__gpio_update32(gpio_num, ~GPIO_OUTPUT_MASK, !!value << GPIO_OUTPUT_SHIFT);
|
__gpio_setbits32(gpio_num, GPIO_OUTPUT_VALUE, value ? GPIO_OUTPUT_VALUE : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gpio_input_pulldown(gpio_t gpio_num)
|
void gpio_input_pulldown(gpio_t gpio_num)
|
||||||
{
|
{
|
||||||
__gpio_update32(gpio_num, ~GPIO_PULLUP_ENABLE, GPIO_PULLDOWN_ENABLE);
|
__gpio_setbits32(gpio_num, GPIO_PULL_MASK, GPIO_PULLDOWN_ENABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gpio_input_pullup(gpio_t gpio_num)
|
void gpio_input_pullup(gpio_t gpio_num)
|
||||||
{
|
{
|
||||||
__gpio_update32(gpio_num, ~GPIO_PULLDOWN_ENABLE, GPIO_PULLUP_ENABLE);
|
__gpio_setbits32(gpio_num, GPIO_PULL_MASK, GPIO_PULLUP_ENABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void gpio_input(gpio_t gpio_num)
|
void gpio_input(gpio_t gpio_num)
|
||||||
|
|
|
@ -65,10 +65,12 @@ struct soc_amd_event {
|
||||||
#define GPIO_8KPULLUP_SELECT (1 << 19)
|
#define GPIO_8KPULLUP_SELECT (1 << 19)
|
||||||
#define GPIO_PULLUP_ENABLE (1 << 20)
|
#define GPIO_PULLUP_ENABLE (1 << 20)
|
||||||
#define GPIO_PULLDOWN_ENABLE (1 << 21)
|
#define GPIO_PULLDOWN_ENABLE (1 << 21)
|
||||||
|
#define GPIO_PULL_MASK (7 << 19)
|
||||||
|
|
||||||
#define GPIO_OUTPUT_SHIFT 22
|
#define GPIO_OUTPUT_SHIFT 22
|
||||||
#define GPIO_OUTPUT_MASK (1 << GPIO_OUTPUT_SHIFT)
|
|
||||||
#define GPIO_OUTPUT_VALUE (1 << GPIO_OUTPUT_SHIFT)
|
#define GPIO_OUTPUT_VALUE (1 << GPIO_OUTPUT_SHIFT)
|
||||||
#define GPIO_OUTPUT_ENABLE (1 << 23)
|
#define GPIO_OUTPUT_ENABLE (1 << 23)
|
||||||
|
#define GPIO_OUTPUT_MASK (3 << GPIO_OUTPUT_SHIFT)
|
||||||
|
|
||||||
#define GPIO_INT_STATUS (1 << 28)
|
#define GPIO_INT_STATUS (1 << 28)
|
||||||
#define GPIO_WAKE_STATUS (1 << 29)
|
#define GPIO_WAKE_STATUS (1 << 29)
|
||||||
|
|
Loading…
Reference in New Issue