[openwrt/openwrt] ramips: mt76x8: disable unused Ralink systick driver

LEDE Commits lede-commits at lists.infradead.org
Thu Nov 28 10:58:48 PST 2024


ynezz pushed a commit to openwrt/openwrt.git, branch openwrt-24.10:
https://git.openwrt.org/0a0950614b7377c23d24999f7d44068e6ee09860

commit 0a0950614b7377c23d24999f7d44068e6ee09860
Author: Shiji Yang <yangshiji66 at qq.com>
AuthorDate: Sun Nov 3 12:30:21 2024 +0800

    ramips: mt76x8: disable unused Ralink systick driver
    
    The mt76x8 series SoCs use the MIPS generic systick timer. Sync the
    upstream Ralink systick driver changes and disable it for mt76x8
    target to reduce the kernel size.
    
    Signed-off-by: Shiji Yang <yangshiji66 at qq.com>
    Link: https://github.com/openwrt/openwrt/pull/16844
    Signed-off-by: Hauke Mehrtens <hauke at hauke-m.de>
    (cherry picked from commit 0c57510cedeff9caf795930ff86a436aa54bcc6d)
    Link: https://github.com/openwrt/openwrt/pull/17097
    Signed-off-by: Petr Štetiar <ynezz at true.cz>
---
 target/linux/ramips/mt7620/config-6.6              |   2 +-
 target/linux/ramips/mt76x8/config-6.6              |   6 +-
 ...-drivers-ralink-Add-Ralink-System-Tick-Co.patch | 384 +++++++++++++++++++++
 ...t_mode-to-enable-disable-the-cevt-r4k-irq.patch |  36 +-
 ...312-MIPS-ralink-add-cpu-frequency-scaling.patch |  35 +-
 ...o-not-select-illegal-access-driver-by-def.patch |   4 +-
 target/linux/ramips/rt305x/config-6.6              |   2 +-
 7 files changed, 426 insertions(+), 43 deletions(-)

diff --git a/target/linux/ramips/mt7620/config-6.6 b/target/linux/ramips/mt7620/config-6.6
index edd64a642c..3e1ef761e0 100644
--- a/target/linux/ramips/mt7620/config-6.6
+++ b/target/linux/ramips/mt7620/config-6.6
@@ -8,7 +8,6 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_BLK_MQ_PCI=y
 CONFIG_CEVT_R4K=y
 CONFIG_CEVT_SYSTICK_QUIRK=y
-CONFIG_CLKEVT_RT3352=y
 CONFIG_CLKSRC_MMIO=y
 CONFIG_CLK_MTMIPS=y
 CONFIG_CLONE_BACKWARDS=y
@@ -180,6 +179,7 @@ CONFIG_PINCTRL_MTK_MTMIPS=y
 CONFIG_PREEMPT_NONE_BUILD=y
 CONFIG_PTP_1588_CLOCK_OPTIONAL=y
 CONFIG_RALINK=y
+CONFIG_RALINK_TIMER=y
 CONFIG_RALINK_WDT=y
 CONFIG_RANDSTRUCT_NONE=y
 CONFIG_RATIONAL=y
diff --git a/target/linux/ramips/mt76x8/config-6.6 b/target/linux/ramips/mt76x8/config-6.6
index 31dc4a980f..f40d18efcc 100644
--- a/target/linux/ramips/mt76x8/config-6.6
+++ b/target/linux/ramips/mt76x8/config-6.6
@@ -6,9 +6,6 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=15
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_BLK_MQ_PCI=y
 CONFIG_CEVT_R4K=y
-CONFIG_CEVT_SYSTICK_QUIRK=y
-CONFIG_CLKEVT_RT3352=y
-CONFIG_CLKSRC_MMIO=y
 CONFIG_CLK_MTMIPS=y
 CONFIG_CLONE_BACKWARDS=y
 CONFIG_CMDLINE="rootfstype=squashfs,jffs2"
@@ -173,6 +170,7 @@ CONFIG_PINCTRL_MTK_MTMIPS=y
 CONFIG_PREEMPT_NONE_BUILD=y
 CONFIG_PTP_1588_CLOCK_OPTIONAL=y
 CONFIG_RALINK=y
+# CONFIG_RALINK_TIMER is not set
 # CONFIG_RALINK_WDT is not set
 CONFIG_RANDSTRUCT_NONE=y
 CONFIG_RATIONAL=y
@@ -215,8 +213,6 @@ CONFIG_SYS_SUPPORTS_MIPS16=y
 CONFIG_SYS_SUPPORTS_ZBOOT=y
 CONFIG_TARGET_ISA_REV=2
 CONFIG_TICK_CPU_ACCOUNTING=y
-CONFIG_TIMER_OF=y
-CONFIG_TIMER_PROBE=y
 CONFIG_TINY_SRCU=y
 CONFIG_USB_SUPPORT=y
 CONFIG_USE_OF=y
diff --git a/target/linux/ramips/patches-6.6/001-v6.13-clocksource-drivers-ralink-Add-Ralink-System-Tick-Co.patch b/target/linux/ramips/patches-6.6/001-v6.13-clocksource-drivers-ralink-Add-Ralink-System-Tick-Co.patch
new file mode 100644
index 0000000000..cd2a90826c
--- /dev/null
+++ b/target/linux/ramips/patches-6.6/001-v6.13-clocksource-drivers-ralink-Add-Ralink-System-Tick-Co.patch
@@ -0,0 +1,384 @@
+From 57cbfd333c9d65bfab1a06b49c75536ee28dc2ce Mon Sep 17 00:00:00 2001
+From: Sergio Paracuellos <sergio.paracuellos at gmail.com>
+Date: Mon, 28 Oct 2024 21:36:43 +0100
+Subject: clocksource/drivers/ralink: Add Ralink System Tick Counter driver
+
+System Tick Counter is present on Ralink SoCs RT3352 and MT7620. This
+driver has been in 'arch/mips/ralink' directory since the beggining of
+Ralink architecture support. However, it can be moved into a more proper
+place in 'drivers/clocksource'. Hence add it here adding also support for
+compile test targets and reducing LOC in architecture code folder.
+
+Signed-off-by: Sergio Paracuellos <sergio.paracuellos at gmail.com>
+Link: https://lore.kernel.org/r/20241028203643.191268-2-sergio.paracuellos@gmail.com
+Signed-off-by: Daniel Lezcano <daniel.lezcano at linaro.org>
+---
+ arch/mips/ralink/Kconfig           |   7 --
+ arch/mips/ralink/Makefile          |   2 -
+ arch/mips/ralink/cevt-rt3352.c     | 153 -------------------------------------
+ drivers/clocksource/Kconfig        |   9 +++
+ drivers/clocksource/Makefile       |   1 +
+ drivers/clocksource/timer-ralink.c | 150 ++++++++++++++++++++++++++++++++++++
+ 6 files changed, 160 insertions(+), 162 deletions(-)
+ delete mode 100644 arch/mips/ralink/cevt-rt3352.c
+ create mode 100644 drivers/clocksource/timer-ralink.c
+
+--- a/arch/mips/ralink/Kconfig
++++ b/arch/mips/ralink/Kconfig
+@@ -1,13 +1,6 @@
+ # SPDX-License-Identifier: GPL-2.0
+ if RALINK
+ 
+-config CLKEVT_RT3352
+-	bool
+-	depends on SOC_RT305X || SOC_MT7620
+-	default y
+-	select TIMER_OF
+-	select CLKSRC_MMIO
+-
+ config RALINK_ILL_ACC
+ 	bool
+ 	depends on SOC_RT305X
+--- a/arch/mips/ralink/Makefile
++++ b/arch/mips/ralink/Makefile
+@@ -10,8 +10,6 @@ ifndef CONFIG_MIPS_GIC
+ 	obj-y += clk.o timer.o
+ endif
+ 
+-obj-$(CONFIG_CLKEVT_RT3352) += cevt-rt3352.o
+-
+ obj-$(CONFIG_RALINK_ILL_ACC) += ill_acc.o
+ 
+ obj-$(CONFIG_IRQ_INTC) += irq.o
+--- a/arch/mips/ralink/cevt-rt3352.c
++++ /dev/null
+@@ -1,153 +0,0 @@
+-/*
+- * This file is subject to the terms and conditions of the GNU General Public
+- * License.  See the file "COPYING" in the main directory of this archive
+- * for more details.
+- *
+- * Copyright (C) 2013 by John Crispin <john at phrozen.org>
+- */
+-
+-#include <linux/clockchips.h>
+-#include <linux/clocksource.h>
+-#include <linux/interrupt.h>
+-#include <linux/reset.h>
+-#include <linux/init.h>
+-#include <linux/time.h>
+-#include <linux/of.h>
+-#include <linux/of_irq.h>
+-#include <linux/of_address.h>
+-
+-#include <asm/mach-ralink/ralink_regs.h>
+-
+-#define SYSTICK_FREQ		(50 * 1000)
+-
+-#define SYSTICK_CONFIG		0x00
+-#define SYSTICK_COMPARE		0x04
+-#define SYSTICK_COUNT		0x08
+-
+-/* route systick irq to mips irq 7 instead of the r4k-timer */
+-#define CFG_EXT_STK_EN		0x2
+-/* enable the counter */
+-#define CFG_CNT_EN		0x1
+-
+-struct systick_device {
+-	void __iomem *membase;
+-	struct clock_event_device dev;
+-	int irq_requested;
+-	int freq_scale;
+-};
+-
+-static int systick_set_oneshot(struct clock_event_device *evt);
+-static int systick_shutdown(struct clock_event_device *evt);
+-
+-static int systick_next_event(unsigned long delta,
+-				struct clock_event_device *evt)
+-{
+-	struct systick_device *sdev;
+-	u32 count;
+-
+-	sdev = container_of(evt, struct systick_device, dev);
+-	count = ioread32(sdev->membase + SYSTICK_COUNT);
+-	count = (count + delta) % SYSTICK_FREQ;
+-	iowrite32(count, sdev->membase + SYSTICK_COMPARE);
+-
+-	return 0;
+-}
+-
+-static void systick_event_handler(struct clock_event_device *dev)
+-{
+-	/* noting to do here */
+-}
+-
+-static irqreturn_t systick_interrupt(int irq, void *dev_id)
+-{
+-	struct clock_event_device *dev = (struct clock_event_device *) dev_id;
+-
+-	dev->event_handler(dev);
+-
+-	return IRQ_HANDLED;
+-}
+-
+-static struct systick_device systick = {
+-	.dev = {
+-		/*
+-		 * cevt-r4k uses 300, make sure systick
+-		 * gets used if available
+-		 */
+-		.rating			= 310,
+-		.features		= CLOCK_EVT_FEAT_ONESHOT,
+-		.set_next_event		= systick_next_event,
+-		.set_state_shutdown	= systick_shutdown,
+-		.set_state_oneshot	= systick_set_oneshot,
+-		.event_handler		= systick_event_handler,
+-	},
+-};
+-
+-static int systick_shutdown(struct clock_event_device *evt)
+-{
+-	struct systick_device *sdev;
+-
+-	sdev = container_of(evt, struct systick_device, dev);
+-
+-	if (sdev->irq_requested)
+-		free_irq(systick.dev.irq, &systick.dev);
+-	sdev->irq_requested = 0;
+-	iowrite32(0, systick.membase + SYSTICK_CONFIG);
+-
+-	return 0;
+-}
+-
+-static int systick_set_oneshot(struct clock_event_device *evt)
+-{
+-	const char *name = systick.dev.name;
+-	struct systick_device *sdev;
+-	int irq = systick.dev.irq;
+-
+-	sdev = container_of(evt, struct systick_device, dev);
+-
+-	if (!sdev->irq_requested) {
+-		if (request_irq(irq, systick_interrupt,
+-				IRQF_PERCPU | IRQF_TIMER, name, &systick.dev))
+-			pr_err("Failed to request irq %d (%s)\n", irq, name);
+-	}
+-	sdev->irq_requested = 1;
+-	iowrite32(CFG_EXT_STK_EN | CFG_CNT_EN,
+-		  systick.membase + SYSTICK_CONFIG);
+-
+-	return 0;
+-}
+-
+-static int __init ralink_systick_init(struct device_node *np)
+-{
+-	int ret;
+-
+-	systick.membase = of_iomap(np, 0);
+-	if (!systick.membase)
+-		return -ENXIO;
+-
+-	systick.dev.name = np->name;
+-	clockevents_calc_mult_shift(&systick.dev, SYSTICK_FREQ, 60);
+-	systick.dev.max_delta_ns = clockevent_delta2ns(0x7fff, &systick.dev);
+-	systick.dev.max_delta_ticks = 0x7fff;
+-	systick.dev.min_delta_ns = clockevent_delta2ns(0x3, &systick.dev);
+-	systick.dev.min_delta_ticks = 0x3;
+-	systick.dev.irq = irq_of_parse_and_map(np, 0);
+-	if (!systick.dev.irq) {
+-		pr_err("%pOFn: request_irq failed", np);
+-		return -EINVAL;
+-	}
+-
+-	ret = clocksource_mmio_init(systick.membase + SYSTICK_COUNT, np->name,
+-				    SYSTICK_FREQ, 301, 16,
+-				    clocksource_mmio_readl_up);
+-	if (ret)
+-		return ret;
+-
+-	clockevents_register_device(&systick.dev);
+-
+-	pr_info("%pOFn: running - mult: %d, shift: %d\n",
+-			np, systick.dev.mult, systick.dev.shift);
+-
+-	return 0;
+-}
+-
+-TIMER_OF_DECLARE(systick, "ralink,cevt-systick", ralink_systick_init);
+--- a/drivers/clocksource/Kconfig
++++ b/drivers/clocksource/Kconfig
+@@ -732,4 +732,13 @@ config GOLDFISH_TIMER
+ 	help
+ 	  Support for the timer/counter of goldfish-rtc
+ 
++config RALINK_TIMER
++	bool "Ralink System Tick Counter"
++	depends on SOC_RT305X || SOC_MT7620 || COMPILE_TEST
++	select CLKSRC_MMIO
++	select TIMER_OF
++	help
++	  Enables support for system tick counter present on
++	  Ralink SoCs RT3352 and MT7620.
++
+ endmenu
+--- a/drivers/clocksource/Makefile
++++ b/drivers/clocksource/Makefile
+@@ -89,3 +89,4 @@ obj-$(CONFIG_MSC313E_TIMER)		+= timer-ms
+ obj-$(CONFIG_GOLDFISH_TIMER)		+= timer-goldfish.o
+ obj-$(CONFIG_GXP_TIMER)			+= timer-gxp.o
+ obj-$(CONFIG_CLKSRC_LOONGSON1_PWM)	+= timer-loongson1-pwm.o
++obj-$(CONFIG_RALINK_TIMER)		+= timer-ralink.o
+--- /dev/null
++++ b/drivers/clocksource/timer-ralink.c
+@@ -0,0 +1,150 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Ralink System Tick Counter driver present on RT3352 and MT7620 SoCs.
++ *
++ * Copyright (C) 2013 by John Crispin <john at phrozen.org>
++ */
++
++#include <linux/clockchips.h>
++#include <linux/clocksource.h>
++#include <linux/interrupt.h>
++#include <linux/reset.h>
++#include <linux/init.h>
++#include <linux/time.h>
++#include <linux/of.h>
++#include <linux/of_irq.h>
++#include <linux/of_address.h>
++
++#define SYSTICK_FREQ		(50 * 1000)
++
++#define SYSTICK_CONFIG		0x00
++#define SYSTICK_COMPARE		0x04
++#define SYSTICK_COUNT		0x08
++
++/* route systick irq to mips irq 7 instead of the r4k-timer */
++#define CFG_EXT_STK_EN		0x2
++/* enable the counter */
++#define CFG_CNT_EN		0x1
++
++struct systick_device {
++	void __iomem *membase;
++	struct clock_event_device dev;
++	int irq_requested;
++	int freq_scale;
++};
++
++static int systick_set_oneshot(struct clock_event_device *evt);
++static int systick_shutdown(struct clock_event_device *evt);
++
++static int systick_next_event(unsigned long delta,
++			      struct clock_event_device *evt)
++{
++	struct systick_device *sdev;
++	u32 count;
++
++	sdev = container_of(evt, struct systick_device, dev);
++	count = ioread32(sdev->membase + SYSTICK_COUNT);
++	count = (count + delta) % SYSTICK_FREQ;
++	iowrite32(count, sdev->membase + SYSTICK_COMPARE);
++
++	return 0;
++}
++
++static void systick_event_handler(struct clock_event_device *dev)
++{
++	/* noting to do here */
++}
++
++static irqreturn_t systick_interrupt(int irq, void *dev_id)
++{
++	struct clock_event_device *dev = (struct clock_event_device *)dev_id;
++
++	dev->event_handler(dev);
++
++	return IRQ_HANDLED;
++}
++
++static struct systick_device systick = {
++	.dev = {
++		/*
++		 * cevt-r4k uses 300, make sure systick
++		 * gets used if available
++		 */
++		.rating			= 310,
++		.features		= CLOCK_EVT_FEAT_ONESHOT,
++		.set_next_event		= systick_next_event,
++		.set_state_shutdown	= systick_shutdown,
++		.set_state_oneshot	= systick_set_oneshot,
++		.event_handler		= systick_event_handler,
++	},
++};
++
++static int systick_shutdown(struct clock_event_device *evt)
++{
++	struct systick_device *sdev;
++
++	sdev = container_of(evt, struct systick_device, dev);
++
++	if (sdev->irq_requested)
++		free_irq(systick.dev.irq, &systick.dev);
++	sdev->irq_requested = 0;
++	iowrite32(0, systick.membase + SYSTICK_CONFIG);
++
++	return 0;
++}
++
++static int systick_set_oneshot(struct clock_event_device *evt)
++{
++	const char *name = systick.dev.name;
++	struct systick_device *sdev;
++	int irq = systick.dev.irq;
++
++	sdev = container_of(evt, struct systick_device, dev);
++
++	if (!sdev->irq_requested) {
++		if (request_irq(irq, systick_interrupt,
++				IRQF_PERCPU | IRQF_TIMER, name, &systick.dev))
++			pr_err("Failed to request irq %d (%s)\n", irq, name);
++	}
++	sdev->irq_requested = 1;
++	iowrite32(CFG_EXT_STK_EN | CFG_CNT_EN,
++		  systick.membase + SYSTICK_CONFIG);
++
++	return 0;
++}
++
++static int __init ralink_systick_init(struct device_node *np)
++{
++	int ret;
++
++	systick.membase = of_iomap(np, 0);
++	if (!systick.membase)
++		return -ENXIO;
++
++	systick.dev.name = np->name;
++	clockevents_calc_mult_shift(&systick.dev, SYSTICK_FREQ, 60);
++	systick.dev.max_delta_ns = clockevent_delta2ns(0x7fff, &systick.dev);
++	systick.dev.max_delta_ticks = 0x7fff;
++	systick.dev.min_delta_ns = clockevent_delta2ns(0x3, &systick.dev);
++	systick.dev.min_delta_ticks = 0x3;
++	systick.dev.irq = irq_of_parse_and_map(np, 0);
++	if (!systick.dev.irq) {
++		pr_err("%pOFn: request_irq failed", np);
++		return -EINVAL;
++	}
++
++	ret = clocksource_mmio_init(systick.membase + SYSTICK_COUNT, np->name,
++				    SYSTICK_FREQ, 301, 16,
++				    clocksource_mmio_readl_up);
++	if (ret)
++		return ret;
++
++	clockevents_register_device(&systick.dev);
++
++	pr_info("%pOFn: running - mult: %d, shift: %d\n",
++			np, systick.dev.mult, systick.dev.shift);
++
++	return 0;
++}
++
++TIMER_OF_DECLARE(systick, "ralink,cevt-systick", ralink_systick_init);
diff --git a/target/linux/ramips/patches-6.6/311-MIPS-use-set_mode-to-enable-disable-the-cevt-r4k-irq.patch b/target/linux/ramips/patches-6.6/311-MIPS-use-set_mode-to-enable-disable-the-cevt-r4k-irq.patch
index 36925b8326..d59a71af88 100644
--- a/target/linux/ramips/patches-6.6/311-MIPS-use-set_mode-to-enable-disable-the-cevt-r4k-irq.patch
+++ b/target/linux/ramips/patches-6.6/311-MIPS-use-set_mode-to-enable-disable-the-cevt-r4k-irq.patch
@@ -1,13 +1,11 @@
-From ce3d4a4111a5f7e6b4e74bceae5faa6ce388e8ec Mon Sep 17 00:00:00 2001
 From: John Crispin <blogic at openwrt.org>
 Date: Sun, 14 Jul 2013 23:08:11 +0200
-Subject: [PATCH 05/53] MIPS: use set_mode() to enable/disable the cevt-r4k
- irq
+Subject: [PATCH 1/2] MIPS: use set_mode() to enable/disable the cevt-r4k irq
 
 Signed-off-by: John Crispin <blogic at openwrt.org>
 ---
  arch/mips/kernel/cevt-r4k.c | 43 +++++++++++++++++++++++++++++++++++++
- arch/mips/ralink/Kconfig    |  5 +++++
+ drivers/clocksource/Kconfig |  5 +++++
  2 files changed, 48 insertions(+)
 
 --- a/arch/mips/kernel/cevt-r4k.c
@@ -96,23 +94,21 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
  
  	return 0;
  }
---- a/arch/mips/ralink/Kconfig
-+++ b/arch/mips/ralink/Kconfig
-@@ -1,12 +1,17 @@
- # SPDX-License-Identifier: GPL-2.0
- if RALINK
- 
+--- a/drivers/clocksource/Kconfig
++++ b/drivers/clocksource/Kconfig
+@@ -731,10 +731,15 @@ config GOLDFISH_TIMER
+ 	depends on RTC_DRV_GOLDFISH
+ 	help
+ 	  Support for the timer/counter of goldfish-rtc
++ 
 +config CEVT_SYSTICK_QUIRK
 +	bool
 +	default n
-+
- config CLKEVT_RT3352
- 	bool
- 	depends on SOC_RT305X || SOC_MT7620
- 	default y
- 	select TIMER_OF
- 	select CLKSRC_MMIO
-+	select CEVT_SYSTICK_QUIRK
  
- config RALINK_ILL_ACC
- 	bool
+ config RALINK_TIMER
+ 	bool "Ralink System Tick Counter"
+ 	depends on SOC_RT305X || SOC_MT7620 || COMPILE_TEST
++	select CEVT_SYSTICK_QUIRK
+ 	select CLKSRC_MMIO
+ 	select TIMER_OF
+ 	help
diff --git a/target/linux/ramips/patches-6.6/312-MIPS-ralink-add-cpu-frequency-scaling.patch b/target/linux/ramips/patches-6.6/312-MIPS-ralink-add-cpu-frequency-scaling.patch
index 0d70770941..6acdfff837 100644
--- a/target/linux/ramips/patches-6.6/312-MIPS-ralink-add-cpu-frequency-scaling.patch
+++ b/target/linux/ramips/patches-6.6/312-MIPS-ralink-add-cpu-frequency-scaling.patch
@@ -1,19 +1,26 @@
-From bd30f19a006fb52bac80c6463c49dd2f4159f4ac Mon Sep 17 00:00:00 2001
 From: John Crispin <blogic at openwrt.org>
 Date: Sun, 28 Jul 2013 16:26:41 +0200
-Subject: [PATCH 06/53] MIPS: ralink: add cpu frequency scaling
+Subject: [PATCH 2/2] MIPS: ralink: add cpu frequency scaling
 
 This feature will break udelay() and cause the delay loop to have longer delays
 when the frequency is scaled causing a performance hit.
 
 Signed-off-by: John Crispin <blogic at openwrt.org>
 ---
- arch/mips/ralink/cevt-rt3352.c |   38 ++++++++++++++++++++++++++++++++++++++
- 1 file changed, 38 insertions(+)
+ drivers/clocksource/timer-ralink.c | 117 ++++++++++++++++++++++-------
+ 1 file changed, 89 insertions(+), 28 deletions(-)
 
---- a/arch/mips/ralink/cevt-rt3352.c
-+++ b/arch/mips/ralink/cevt-rt3352.c
-@@ -29,6 +29,10 @@
+--- a/drivers/clocksource/timer-ralink.c
++++ b/drivers/clocksource/timer-ralink.c
+@@ -5,6 +5,7 @@
+  * Copyright (C) 2013 by John Crispin <john at phrozen.org>
+  */
+ 
++#include <asm/mach-ralink/ralink_regs.h>
+ #include <linux/clockchips.h>
+ #include <linux/clocksource.h>
+ #include <linux/interrupt.h>
+@@ -26,6 +27,10 @@
  /* enable the counter */
  #define CFG_CNT_EN		0x1
  
@@ -24,7 +31,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
  struct systick_device {
  	void __iomem *membase;
  	struct clock_event_device dev;
-@@ -36,21 +40,53 @@ struct systick_device {
+@@ -33,21 +38,53 @@ struct systick_device {
  	int freq_scale;
  };
  
@@ -64,7 +71,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
 +}
 +
  static int systick_next_event(unsigned long delta,
- 				struct clock_event_device *evt)
+ 			      struct clock_event_device *evt)
  {
  	struct systick_device *sdev;
 -	u32 count;
@@ -83,18 +90,18 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
  }
  
  static void systick_event_handler(struct clock_event_device *dev)
-@@ -60,20 +96,25 @@ static void systick_event_handler(struct
+@@ -57,20 +94,25 @@ static void systick_event_handler(struct
  
  static irqreturn_t systick_interrupt(int irq, void *dev_id)
  {
--	struct clock_event_device *dev = (struct clock_event_device *) dev_id;
+-	struct clock_event_device *dev = (struct clock_event_device *)dev_id;
 +	int ret = 0;
 +	struct clock_event_device *cdev;
 +	struct systick_device *sdev;
  
 -	dev->event_handler(dev);
 +	if (read_c0_cause() & STATUSF_IP7) {
-+		cdev = (struct clock_event_device *) dev_id;
++		cdev = (struct clock_event_device *)dev_id;
 +		sdev = container_of(cdev, struct systick_device, dev);
 +
 +		/* Clear Count/Compare Interrupt */
@@ -117,7 +124,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
  		.features		= CLOCK_EVT_FEAT_ONESHOT,
  		.set_next_event		= systick_next_event,
  		.set_state_shutdown	= systick_shutdown,
-@@ -91,7 +132,13 @@ static int systick_shutdown(struct clock
+@@ -88,7 +130,13 @@ static int systick_shutdown(struct clock
  	if (sdev->irq_requested)
  		free_irq(systick.dev.irq, &systick.dev);
  	sdev->irq_requested = 0;
@@ -132,7 +139,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
  
  	return 0;
  }
-@@ -116,33 +163,46 @@ static int systick_set_oneshot(struct cl
+@@ -113,33 +161,46 @@ static int systick_set_oneshot(struct cl
  	return 0;
  }
  
diff --git a/target/linux/ramips/patches-6.6/316-arch-mips-do-not-select-illegal-access-driver-by-def.patch b/target/linux/ramips/patches-6.6/316-arch-mips-do-not-select-illegal-access-driver-by-def.patch
index 1dc54ccf23..8568041670 100644
--- a/target/linux/ramips/patches-6.6/316-arch-mips-do-not-select-illegal-access-driver-by-def.patch
+++ b/target/linux/ramips/patches-6.6/316-arch-mips-do-not-select-illegal-access-driver-by-def.patch
@@ -11,8 +11,8 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
 
 --- a/arch/mips/ralink/Kconfig
 +++ b/arch/mips/ralink/Kconfig
-@@ -14,9 +14,9 @@ config CLKEVT_RT3352
- 	select CEVT_SYSTICK_QUIRK
+@@ -2,9 +2,9 @@
+ if RALINK
  
  config RALINK_ILL_ACC
 -	bool
diff --git a/target/linux/ramips/rt305x/config-6.6 b/target/linux/ramips/rt305x/config-6.6
index 6f7b7ea2a1..33efcba633 100644
--- a/target/linux/ramips/rt305x/config-6.6
+++ b/target/linux/ramips/rt305x/config-6.6
@@ -6,7 +6,6 @@ CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=15
 CONFIG_ARCH_SUSPEND_POSSIBLE=y
 CONFIG_CEVT_R4K=y
 CONFIG_CEVT_SYSTICK_QUIRK=y
-CONFIG_CLKEVT_RT3352=y
 CONFIG_CLKSRC_MMIO=y
 CONFIG_CLK_MTMIPS=y
 CONFIG_CLONE_BACKWARDS=y
@@ -160,6 +159,7 @@ CONFIG_PREEMPT_NONE_BUILD=y
 CONFIG_PTP_1588_CLOCK_OPTIONAL=y
 CONFIG_RALINK=y
 # CONFIG_RALINK_ILL_ACC is not set
+CONFIG_RALINK_TIMER=y
 CONFIG_RALINK_WDT=y
 CONFIG_RANDSTRUCT_NONE=y
 CONFIG_RATIONAL=y




More information about the lede-commits mailing list