x86: irq: Support flags for acpi_gpe
This binding currently has a flags cell but it is not used. Make use of it to create ACPI tables for interrupts. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
This commit is contained in:
parent
11e27ae92b
commit
a8c2789c09
@ -8,7 +8,10 @@
|
||||
#include <dm.h>
|
||||
#include <irq.h>
|
||||
#include <log.h>
|
||||
#include <acpi/acpi_device.h>
|
||||
#include <asm/io.h>
|
||||
#include <dt-bindings/interrupt-controller/irq.h>
|
||||
#include <dt-bindings/interrupt-controller/x86-irq.h>
|
||||
|
||||
/**
|
||||
* struct acpi_gpe_priv - private driver information
|
||||
@ -62,13 +65,36 @@ static int acpi_gpe_ofdata_to_platdata(struct udevice *dev)
|
||||
static int acpi_gpe_of_xlate(struct irq *irq, struct ofnode_phandle_args *args)
|
||||
{
|
||||
irq->id = args->args[0];
|
||||
irq->flags = args->args[1];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if CONFIG_IS_ENABLED(ACPIGEN)
|
||||
static int acpi_gpe_get_acpi(const struct irq *irq, struct acpi_irq *acpi_irq)
|
||||
{
|
||||
memset(acpi_irq, '\0', sizeof(*acpi_irq));
|
||||
acpi_irq->pin = irq->id;
|
||||
acpi_irq->mode = irq->flags & IRQ_TYPE_EDGE_BOTH ?
|
||||
ACPI_IRQ_EDGE_TRIGGERED : ACPI_IRQ_LEVEL_TRIGGERED;
|
||||
acpi_irq->polarity = irq->flags &
|
||||
(IRQ_TYPE_EDGE_FALLING | IRQ_TYPE_LEVEL_LOW) ?
|
||||
ACPI_IRQ_ACTIVE_LOW : ACPI_IRQ_ACTIVE_HIGH;
|
||||
acpi_irq->shared = irq->flags & X86_IRQ_TYPE_SHARED ?
|
||||
ACPI_IRQ_SHARED : ACPI_IRQ_EXCLUSIVE;
|
||||
acpi_irq->wake = irq->flags & X86_IRQ_TYPE_WAKE ? ACPI_IRQ_WAKE :
|
||||
ACPI_IRQ_NO_WAKE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const struct irq_ops acpi_gpe_ops = {
|
||||
.read_and_clear = acpi_gpe_read_and_clear,
|
||||
.of_xlate = acpi_gpe_of_xlate,
|
||||
#if CONFIG_IS_ENABLED(ACPIGEN)
|
||||
.get_acpi = acpi_gpe_get_acpi,
|
||||
#endif
|
||||
};
|
||||
|
||||
static const struct udevice_id acpi_gpe_ids[] = {
|
||||
|
14
include/dt-bindings/interrupt-controller/x86-irq.h
Normal file
14
include/dt-bindings/interrupt-controller/x86-irq.h
Normal file
@ -0,0 +1,14 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Copyright 2019 Google LLC
|
||||
*
|
||||
* This provides additional flags used by x86.
|
||||
*/
|
||||
|
||||
#ifndef _DT_BINDINGS_INTERRUPT_CONTROLLER_X86_IRQ_H
|
||||
#define _DT_BINDINGS_INTERRUPT_CONTROLLER_X86_IRQ_H
|
||||
|
||||
#define X86_IRQ_TYPE_SHARED (1 << 4)
|
||||
#define X86_IRQ_TYPE_WAKE (1 << 5)
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user