pmaports/main/crust/0289a01c9ee211195728e14b4f26dd2e5226561a.patch
Bobby The Builder a3e9236692
main/crust: upgrade to 0.4 (MR 2315)
add patch for 5.13 irq clocks
   0289a01c9e
2021-08-13 23:19:28 -07:00

198 lines
5.4 KiB
Diff

From 0289a01c9ee211195728e14b4f26dd2e5226561a Mon Sep 17 00:00:00 2001
From: Samuel Holland <samuel@sholland.org>
Date: Fri, 28 May 2021 18:26:39 -0500
Subject: [PATCH] drivers: irq: Remove deprecated GPIO polling code
Since v5.13, specifically commit 189bef235dd3 ("arm64: dts: allwinner:
Move wakeup-capable IRQs to r_intc"), Linux routes the GPIO EINT IRQs to
R_INTC during suspend and shutdown. This means Crust will detect pending
EINT IRQs using the normal R_INTC status polling code.
This change completely obsoletes the GPIO register polling code, so that
code and its associated Kconfig options can be removed.
Signed-off-by: Samuel Holland <samuel@sholland.org>
---
configs/pinephone_defconfig | 2 --
drivers/Kconfig | 1 -
drivers/irq/Kconfig | 51 ----------------------------------
drivers/irq/irq.c | 29 ++-----------------
drivers/irq/irq.h | 16 -----------
drivers/irq/sun6i-a31-r-intc.c | 4 +--
6 files changed, 4 insertions(+), 99 deletions(-)
delete mode 100644 drivers/irq/Kconfig
delete mode 100644 drivers/irq/irq.h
diff --git a/configs/pinephone_defconfig b/configs/pinephone_defconfig
index 5e720f1f..875ad025 100644
--- a/configs/pinephone_defconfig
+++ b/configs/pinephone_defconfig
@@ -1,4 +1,2 @@
-CONFIG_IRQ_POLL_EINT=y
-CONFIG_IRQ_POLL_EINT_LAST_BANK=0
CONFIG_MFD_AXP20X=y
# CONFIG_SERIAL is not set
diff --git a/drivers/Kconfig b/drivers/Kconfig
index 0cb6dae5..5f513533 100644
--- a/drivers/Kconfig
+++ b/drivers/Kconfig
@@ -8,7 +8,6 @@ menu "Device drivers"
source "dram/Kconfig"
source "cir/Kconfig"
source "clock/Kconfig"
-source "irq/Kconfig"
source "regmap/Kconfig"
source "mfd/Kconfig"
source "pmic/Kconfig"
diff --git a/drivers/irq/Kconfig b/drivers/irq/Kconfig
deleted file mode 100644
index 84330c8b..00000000
--- a/drivers/irq/Kconfig
+++ /dev/null
@@ -1,51 +0,0 @@
-#
-# Copyright © 2020-2021 The Crust Firmware Authors.
-# SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only
-#
-
-menu "Interrupt and wakeup options"
-
-config IRQ_POLL_EINT
- bool "Poll the GPIO controller for EINT IRQs (DEPRECATED)"
- help
- Check the main GPIO controller (the one containing ports
- A through H) for external interrupts (EINTs) when
- polling for wakeup IRQs.
-
- This allows EINT-capable pins on those ports to be used
- as wakeup sources. The pins must be configured as EINT
- pins by Linux before entering suspend.
-
- Note: This option is not needed when using a Linux patch
- set released in 2021. The newer driver plumbs the EINT
- IRQs through to R_INTC.
-
- Say Y if your board has a device connected to port A-H
- that must be able to wake up or turn on the system, and
- you are using an older kernel. Otherwise, say N.
-
-if IRQ_POLL_EINT
-
-config IRQ_POLL_EINT_FIRST_BANK
- int "First EINT bank to poll"
- range 0 7
- default 0
- help
- Begin the EINT polling loop at the nth EINT-capable GPIO
- bank, counting from 0. This number is not related to the
- GPIO bank letter.
-
-config IRQ_POLL_EINT_LAST_BANK
- int "Last EINT bank to poll"
- range 0 7
- default 2 if PLATFORM_A64
- default 2 if PLATFORM_A83T
- default 7 if PLATFORM_H6
- help
- End the EINT polling loop at the nth EINT-capable GPIO
- bank, counting from 0. This number is not related to the
- GPIO bank letter.
-
-endif
-
-endmenu
diff --git a/drivers/irq/irq.c b/drivers/irq/irq.c
index 85efcb32..ae675374 100644
--- a/drivers/irq/irq.c
+++ b/drivers/irq/irq.c
@@ -4,32 +4,7 @@
*/
#include <irq.h>
-#include <mmio.h>
#include <stdint.h>
-#include <platform/devices.h>
-
-#include "irq.h"
-
-#define EINT_CTL_REG(n) (0x20 * (n) + 0x0210)
-#define EINT_STATUS_REG(n) (0x20 * (n) + 0x0214)
-
-uint32_t
-irq_poll_eint(void)
-{
- uint32_t pending = 0;
-
-#if CONFIG(IRQ_POLL_EINT)
- uint32_t first = CONFIG_IRQ_POLL_EINT_FIRST_BANK;
- uint32_t last = CONFIG_IRQ_POLL_EINT_LAST_BANK;
-
- for (uint32_t bank = first; bank <= last; ++bank) {
- pending |= mmio_read_32(DEV_PIO + EINT_CTL_REG(bank)) &
- mmio_read_32(DEV_PIO + EINT_STATUS_REG(bank));
- }
-#endif
-
- return pending;
-}
uint32_t WEAK
irq_needs_avcc(void)
@@ -40,11 +15,11 @@ irq_needs_avcc(void)
uint32_t WEAK
irq_needs_vdd_sys(void)
{
- return CONFIG(IRQ_POLL_EINT);
+ return 0;
}
uint32_t WEAK
irq_poll(void)
{
- return irq_poll_eint();
+ return 0;
}
diff --git a/drivers/irq/irq.h b/drivers/irq/irq.h
deleted file mode 100644
index 314329d5..00000000
--- a/drivers/irq/irq.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * Copyright © 2021 The Crust Firmware Authors.
- * SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only
- */
-
-#ifndef IRQ_PRIVATE_H
-#define IRQ_PRIVATE_H
-
-#include <stdint.h>
-
-/**
- * Poll for interrupts from the main PIO controller's EINT pins.
- */
-uint32_t irq_poll_eint(void);
-
-#endif /* IRQ_PRIVATE_H */
diff --git a/drivers/irq/sun6i-a31-r-intc.c b/drivers/irq/sun6i-a31-r-intc.c
index 5cd56440..c140994e 100644
--- a/drivers/irq/sun6i-a31-r-intc.c
+++ b/drivers/irq/sun6i-a31-r-intc.c
@@ -79,7 +79,7 @@ irq_needs_avcc(void)
uint32_t
irq_needs_vdd_sys(void)
{
- uint32_t enabled = CONFIG(IRQ_POLL_EINT);
+ uint32_t enabled = 0;
/* Only read registers with relevant bits. */
for (int i = 0; i < NUM_MUX_REGS; ++i) {
@@ -96,7 +96,7 @@ irq_needs_vdd_sys(void)
uint32_t
irq_poll(void)
{
- uint32_t pending = irq_poll_eint();
+ uint32_t pending = 0;
for (int i = 0; i < NUM_IRQ_REGS; ++i)
pending |= mmio_read_32(DEV_R_INTC + INTC_IRQ_PEND_REG(i));