mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-28 08:35:38 +00:00
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
2 changed files with 40 additions and 0 deletions
|
@ -8,7 +8,10 @@
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <irq.h>
|
#include <irq.h>
|
||||||
#include <log.h>
|
#include <log.h>
|
||||||
|
#include <acpi/acpi_device.h>
|
||||||
#include <asm/io.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
|
* 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)
|
static int acpi_gpe_of_xlate(struct irq *irq, struct ofnode_phandle_args *args)
|
||||||
{
|
{
|
||||||
irq->id = args->args[0];
|
irq->id = args->args[0];
|
||||||
|
irq->flags = args->args[1];
|
||||||
|
|
||||||
return 0;
|
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 = {
|
static const struct irq_ops acpi_gpe_ops = {
|
||||||
.read_and_clear = acpi_gpe_read_and_clear,
|
.read_and_clear = acpi_gpe_read_and_clear,
|
||||||
.of_xlate = acpi_gpe_of_xlate,
|
.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[] = {
|
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…
Add table
Reference in a new issue