mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01: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:
		| @@ -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 | ||||||
		Reference in New Issue
	
	Block a user