lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CANqRtoTFP+CycXJ-CNiFxN5iL14GTwpirs0p5HLFmeShAxvDJQ@mail.gmail.com>
Date:	Thu, 14 Mar 2013 13:07:10 +0900
From:	Magnus Damm <magnus.damm@...il.com>
To:	Linus Walleij <linus.walleij@...aro.org>
Cc:	linux-kernel@...r.kernel.org, grant.likely@...retlab.ca,
	horms@...ge.net.au, linux-sh@...r.kernel.org
Subject: Re: [PATCH] gpio: Renesas R-Car GPIO driver

Hi Linus,

On Thu, Mar 14, 2013 at 2:20 AM, Linus Walleij <linus.walleij@...aro.org> wrote:
> On Tue, Mar 5, 2013 at 1:32 AM, Magnus Damm <magnus.damm@...il.com> wrote:
>
>> +static int gpio_rcar_irq_set_type(struct irq_data *d, unsigned int type)
>> +{
>> +       struct gpio_rcar_priv *p = irq_data_get_irq_chip_data(d);
>> +       unsigned int hwirq = irqd_to_hwirq(d);
>> +
>> +       pr_debug("gpio: sense irq = %d, type = %d\n", hwirq, type);
>> +
>> +       switch (type & IRQ_TYPE_SENSE_MASK) {
>> +       case IRQ_TYPE_LEVEL_HIGH:
>> +               gpio_rcar_config_interrupt_input_mode(p, hwirq, true, true);
>> +               break;
>> +       case IRQ_TYPE_LEVEL_LOW:
>> +               gpio_rcar_config_interrupt_input_mode(p, hwirq, false, true);
>> +               break;
>> +       case IRQ_TYPE_EDGE_RISING:
>> +               gpio_rcar_config_interrupt_input_mode(p, hwirq, true, false);
>> +               break;
>> +       case IRQ_TYPE_EDGE_FALLING:
>> +               gpio_rcar_config_interrupt_input_mode(p, hwirq, false, false);
>> +               break;
>
> It is quite common to request IRQ on *both* rising and falling edges,
> what happens then?
>
> See <linux/irqs.h>
>         IRQ_TYPE_EDGE_RISING    = 0x00000001,
>         IRQ_TYPE_EDGE_FALLING   = 0x00000002,
>         IRQ_TYPE_EDGE_BOTH      = (IRQ_TYPE_EDGE_FALLING |
> IRQ_TYPE_EDGE_RISING),
>
> I guess then you get just rising edge...

I may be wrong, but the switch above does AND with IRQ_TYPE_SENSE_MASK
which makes me believe that the BOTH case will result in -EINVAL.

The -EINVAL is IMO correct here since the most basic version of this
GPIO block (used in r8a7779) does not suport BOTH edges. I've noticed
that newer versions of that GPIO hardware block has additional
registers where this can be selected. My plan is to submit an
incremental patch for such feature in the not so distant future.

> The rest I think is already covered by Laurent's comments.

Ok, thanks for your help!

/ magnus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ