{"push_id":675676531,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"61a8cb3911a9d98fb5d75a3898897f611978c477","before":"96928d9f0819c36b83d138c0feb775cf78eefbc1","commits":[{"sha":"61a8cb3911a9d98fb5d75a3898897f611978c477","author":{"email":"759412786bc533369b22377bf83fb9056c5b25b2@hovoldconsulting.com","name":"Johan Hovold"},"message":"gpio: fix interrupt protocol\n\nThe current interrupt implementation uses the simple irq-flow handler,\nwhich means that the interrupt subsystem makes no irq-chip callbacks\nwhen handling an interrupt. Specifically, no end-of-interrupt message is\nsent when the threaded handler has run. This means that we may currently\nre-enable an interrupt before it has been serviced (i.e. the irq-event\noperation may complete before the threaded handler has run).\n\nThe simple flow handler also silently drops a second interrupt arriving\nwhile a handler is running. This means that we may lose a second edge\ninterrupt with the current firmware.\n\nSwitch to a new one-shot interrupt protocol, where the primary handler\n(firmware) always masks and acks an interrupt before sending an event to\nthe AP. The AP is responsible for unmasking the interrupt when it has\nbeen handled. By having the firmware ack an edge interrupt before\nsending the event, a second edge interrupt will no longer get lost.\n\nThis one-shot protocol can be implemented in the kernel by using the\nlevel irq-flow handler, one-shot interrupts with threaded handlers and\nbus-lock synchronisation for slow buses. Note that the same flow handler\nis used for both edge and level interrupts.\n\nSigned-off-by: Johan Hovold <johan@hovoldconsulting.com>\nSigned-off-by: Greg Kroah-Hartman <gregkh@google.com>","distinct":true,"url":"https://api.github.com/repos/projectara/greybus/commits/61a8cb3911a9d98fb5d75a3898897f611978c477"}]}