From a46a1ad097419aeea7350987dd95230f50d90392 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Fri, 15 Nov 2024 08:53:41 +0000
Subject: [PATCH] 固定GMAC1 网卡名为 eth3
---
kernel/drivers/clocksource/arm_global_timer.c | 41 +++++++++++++++++++++++------------------
1 files changed, 23 insertions(+), 18 deletions(-)
diff --git a/kernel/drivers/clocksource/arm_global_timer.c b/kernel/drivers/clocksource/arm_global_timer.c
index 88b2d38..3273fc6 100644
--- a/kernel/drivers/clocksource/arm_global_timer.c
+++ b/kernel/drivers/clocksource/arm_global_timer.c
@@ -153,11 +153,11 @@
* the Global Timer flag _after_ having incremented
* the Comparator register value to a higher value.
*/
- if (clockevent_state_oneshot(evt))
+ if (clockevent_is_oob(evt) || clockevent_state_oneshot(evt))
gt_compare_set(ULONG_MAX, 0);
writel_relaxed(GT_INT_STATUS_EVENT_FLAG, gt_base + GT_INT_STATUS);
- evt->event_handler(evt);
+ clockevents_handle_event(evt);
return IRQ_HANDLED;
}
@@ -168,7 +168,7 @@
clk->name = "arm_global_timer";
clk->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT |
- CLOCK_EVT_FEAT_PERCPU;
+ CLOCK_EVT_FEAT_PERCPU | CLOCK_EVT_FEAT_PIPELINE;
clk->set_state_shutdown = gt_clockevent_shutdown;
clk->set_state_periodic = gt_clockevent_set_periodic;
clk->set_state_oneshot = gt_clockevent_shutdown;
@@ -192,11 +192,6 @@
return 0;
}
-static u64 gt_clocksource_read(struct clocksource *cs)
-{
- return gt_counter_read();
-}
-
static void gt_resume(struct clocksource *cs)
{
unsigned long ctrl;
@@ -207,13 +202,15 @@
writel(GT_CONTROL_TIMER_ENABLE, gt_base + GT_CONTROL);
}
-static struct clocksource gt_clocksource = {
- .name = "arm_global_timer",
- .rating = 300,
- .read = gt_clocksource_read,
- .mask = CLOCKSOURCE_MASK(64),
- .flags = CLOCK_SOURCE_IS_CONTINUOUS,
- .resume = gt_resume,
+static struct clocksource_user_mmio gt_clocksource = {
+ .mmio.clksrc = {
+ .name = "arm_global_timer",
+ .rating = 300,
+ .read = clocksource_dual_mmio_readl_up,
+ .mask = CLOCKSOURCE_MASK(64),
+ .flags = CLOCK_SOURCE_IS_CONTINUOUS,
+ .resume = gt_resume,
+ },
};
#ifdef CONFIG_CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
@@ -240,6 +237,8 @@
static int __init gt_clocksource_init(void)
{
+ struct clocksource_mmio_regs mmr;
+
writel(0, gt_base + GT_CONTROL);
writel(0, gt_base + GT_COUNTER0);
writel(0, gt_base + GT_COUNTER1);
@@ -249,7 +248,13 @@
#ifdef CONFIG_CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK
sched_clock_register(gt_sched_clock_read, 64, gt_clk_rate);
#endif
- return clocksource_register_hz(>_clocksource, gt_clk_rate);
+ mmr.reg_upper = gt_base + GT_COUNTER1;
+ mmr.reg_lower = gt_base + GT_COUNTER0;
+ mmr.bits_upper = 32;
+ mmr.bits_lower = 32;
+ mmr.revmap = NULL;
+
+ return clocksource_user_mmio_init(>_clocksource, &mmr, gt_clk_rate);
}
static int __init global_timer_of_register(struct device_node *np)
@@ -299,8 +304,8 @@
goto out_clk;
}
- err = request_percpu_irq(gt_ppi, gt_clockevent_interrupt,
- "gt", gt_evt);
+ err = __request_percpu_irq(gt_ppi, gt_clockevent_interrupt,
+ IRQF_TIMER, "gt", gt_evt);
if (err) {
pr_warn("global-timer: can't register interrupt %d (%d)\n",
gt_ppi, err);
--
Gitblit v1.6.2