[PATCH 2/2] gpio: aspeed: Support banks Y, Z, AA and BB

Xo Wang xow at google.com
Tue Jan 10 11:24:03 AEDT 2017


Hi Joel,

On Sun, Dec 11, 2016 at 8:06 PM, Joel Stanley <joel at jms.id.au> wrote:
> These banks have extra limitations compared to those currently
> implemented. We must detect when these unique banks are being used and
> special case their IRQ and input state.
>
> TODO: Do what it says on the label
>
> Signed-off-by: Joel Stanley <joel at jms.id.au>
> ---
>  drivers/gpio/gpio-aspeed.c | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpio/gpio-aspeed.c b/drivers/gpio/gpio-aspeed.c
> index d7198536de13..c4d87a2a489f 100644
> --- a/drivers/gpio/gpio-aspeed.c
> +++ b/drivers/gpio/gpio-aspeed.c
> @@ -65,10 +65,14 @@ static const struct aspeed_gpio_bank aspeed_gpio_banks[] = {
>                 .names = { "U", "V", "W", "X" },
>         },
>         /*
> -        * A bank exists for { 'Y', 'Z', "AA", "AB" }, but is not implemented.
>          * Only half of GPIOs Y support interrupt configuration, and none of Z,
>          * AA or AB do as they are output only.

Is this comment accurate? I don't see anything in the AST2500
datasheet about GPIOs Z, AA, and AB being output only.

>          */
> +       {
> +               .val_regs = 0x01E0,
> +               .irq_regs = 0x0178,
> +               .names = { "Y", "Z", "AA", "AB" },
> +       },
>  };
>
>  #define GPIO_BANK(x)   ((x) >> 5)
> @@ -129,6 +133,9 @@ static void __aspeed_gpio_set(struct gpio_chip *gc, unsigned int offset, int val
>
>         addr = bank_val_reg(gpio, bank, GPIO_DATA);
>
> +       /* TODO: detect when we're dealing with GPIOs that cannot be set as
> +        * inputs */
> +
>         reg = ioread32(addr);
>         if (val)
>                 reg |= GPIO_BIT(offset);
> @@ -158,6 +165,9 @@ static int aspeed_gpio_dir_in(struct gpio_chip *gc, unsigned int offset)
>         unsigned long flags;
>         u32 reg;
>
> +       /* TODO: detect when we're dealing with GPIOs that cannot be set as
> +        * inputs */
> +
>         spin_lock_irqsave(&gpio->lock, flags);
>
>         reg = ioread32(bank_val_reg(gpio, bank, GPIO_DIR));
> @@ -233,6 +243,9 @@ static void __aspeed_gpio_irq_set_mask(struct irq_data *d, bool set)
>         void __iomem *addr;
>         int rc;
>
> +       /* TODO: Detect when a bank cannot be used as an IRQ source and return
> +        * error */
> +
>         rc = irqd_to_aspeed_gpio_data(d, &gpio, &bank, &bit);
>         if (rc)
>                 return;
> --
> 2.11.0
>
> _______________________________________________
> openbmc mailing list
> openbmc at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/openbmc

Do you have more information or documentation about the limitations of
those GPIOs?

thanks
xo


More information about the openbmc mailing list