lkml.org 
[lkml]   [2020]   [Nov]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH v2 1/3] irqchip: qcom-pdc: Fix phantom irq when changing between rising/falling
    Hi,

    On Tue, Nov 24, 2020 at 9:47 AM Douglas Anderson <dianders@chromium.org> wrote:
    >
    > We have a problem if we use gpio-keys and configure wakeups such that
    > we only want one edge to wake us up. AKA:
    > wakeup-event-action = <EV_ACT_DEASSERTED>;
    > wakeup-source;
    >
    > Specifically we end up with a phantom interrupt that blocks suspend if
    > the line was already high and we want wakeups on rising edges (AKA we
    > want the GPIO to go low and then high again before we wake up). The
    > opposite is also problematic.
    >
    > Specifically, here's what's happening today:
    > 1. Normally, gpio-keys configures to look for both edges. Due to the
    > current workaround introduced in commit c3c0c2e18d94 ("pinctrl:
    > qcom: Handle broken/missing PDC dual edge IRQs on sc7180"), if the
    > line was high we'd configure for falling edges.
    > 2. At suspend time, we change to look for rising edges.
    > 3. After qcom_pdc_gic_set_type() runs, we get a phantom interrupt.
    >
    > We can solve this by just clearing the phantom interrupt.
    >
    > NOTE: it is possible that this could cause problems for a client with
    > very specific needs, but there's not much we can do with this
    > hardware. As an example, let's say the interrupt signal is currently
    > high and the client is looking for falling edges. The client now
    > changes to look for rising edges. The client could possibly expect
    > that if the line has a short pulse low (and back high) that it would
    > always be detected. Specifically no matter when the pulse happened,
    > it should either have tripped the (old) falling edge trigger or the
    > (new) rising edge trigger. We will simply not trip it. We could
    > narrow down the race a bit by polling our parent before changing
    > types, but no matter what we do there will still be a period of time
    > where we can't tell the difference between a real transition (or more
    > than one transition) and the phantom.
    >
    > Fixes: f55c73aef890 ("irqchip/pdc: Add PDC interrupt controller for QCOM SoCs")
    > Signed-off-by: Douglas Anderson <dianders@chromium.org>
    > Reviewed-by: Maulik Shah <mkshah@codeaurora.org>
    > Tested-by: Maulik Shah <mkshah@codeaurora.org>

    NOTE: even though this has Maulik's tags, he has requested [1] that we
    should wait before landing while he talks with HW folks.

    [1] https://lore.kernel.org/linux-arm-msm/603c691f-3614-d87b-075a-0889e9ffc453@codeaurora.org/


    -Doug

    \
     
     \ /
      Last update: 2020-11-30 22:34    [W:4.604 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site