[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <ed62b78a-395d-dcb5-8476-0d1b67e6b829@loongson.cn>
Date: Wed, 23 Nov 2022 09:33:36 +0800
From: Yinbo Zhu <zhuyinbo@...ngson.cn>
To: Daniel Lezcano <daniel.lezcano@...e.fr>,
Thomas Gleixner <tglx@...utronix.de>,
Rob Herring <robh+dt@...nel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@...aro.org>,
Huacai Chen <chenhuacai@...nel.org>,
WANG Xuerui <kernel@...0n.name>,
Jiaxun Yang <jiaxun.yang@...goat.com>,
Jianmin Lv <lvjianmin@...ngson.cn>,
Yun Liu <liuyun@...ngson.cn>,
Yang Li <yang.lee@...ux.alibaba.com>,
linux-kernel@...r.kernel.org, devicetree@...r.kernel.org,
loongarch@...ts.linux.dev
Subject: Re: [PATCH v10 1/2] clocksource: loongson2_hpet: add hpet driver
support
在 2022/11/22 下午10:57, Daniel Lezcano 写道:
> On 03/11/2022 14:12, Yinbo Zhu wrote:
>> HPET (High Precision Event Timer) defines a new set of timers, which
>> are used by the operating system to schedule threads, interrupt the
>> kernel and interrupt the multimedia timer server. The operating
>> system can assign different timers to different applications. By
>> configuration, each timer can generate interrupt independently.
>>
>> The Loongson-2 HPET module includes a main count and three comparators,
>> all of which are 32 bits wide. Among the three comparators, only
>> one comparator supports periodic interrupt, all three comparators
>> support non periodic interrupts.
>
> What is the difference with arch/mips/loongson64/hpet.c ?
The main difference is that the supported architectures are different.
Loongson2-hpet. c mainly needs to support the LoongArch architecture,
Instead of copying to the arch directory like mips, the main reason is
that there are many loongson-2 SoC platforms and different addresses are
defined. Using dts is a more modern approach.
Another small difference is that need to set affinity in the driver.
>
>> Signed-off-by: Yinbo Zhu <zhuyinbo@...ngson.cn>
>> ---
>> Change in v10:
>> 1. Replace "goto err" with "return -ENOMEM" if of_iomap fail.
>> 2. This patch need rely on clock patch, which patchwork
>> link was
>> "https://patchwork.kernel.org/project/linux-clk/list/?series=691497".
>> Change in v9:
>> 1. Replace string "register" with "request" in hpet_request_irq.
>> 2. Move the varible "ret" to the begining position in
>> loongson2_hpet_init and initialized it.
>> 3. Adjust if judgement in clk_get_rate context, there was less
>> less indentation in the normal path.
>> 4. This patch need rely on clock patch, which patchwork
>> link was
>> "https://patchwork.kernel.org/project/linux-clk/list/?series=691497".
>> Change in v8:
>> 1. Add all history change log information.
>> Change in v7:
>> 1. Replace setup_irq with request_irq.
>> Change in v6:
>> 1. Move comma to the end of the previous line if that comma at
>> the beginning of the line.
>> Change in v5:
>> 1. Replace string loongson2 with Loongson-2 in commit message
>> and Kconfig file.
>> 2. Replace string LOONGSON2 with LOONGSON-2 in MAINTAINERS.
>> 3. Make include asm headers after all linux headers.
>> 4. Add blank place before comma if comma when the comma is at
>> the beginning of the line.
>> Change in v4:
>> 1. Use common clock framework ops to gain apb clock.
>> 2. This patch need rely on clock patch, which patchwork
>> link was
>> "https://patchwork.kernel.org/project/linux-clk/list/?series=688892".
>> Change in v3:
>> 1. NO change, but other patch in this series of patches set
>> has changes
>> Change in v2:
>> 1. NO change, but other patch in this series of patches set
>> has changes
>>
>> MAINTAINERS | 6 +
>> arch/loongarch/kernel/time.c | 4 +-
>> drivers/clocksource/Kconfig | 9 +
>> drivers/clocksource/Makefile | 1 +
>> drivers/clocksource/loongson2_hpet.c | 334 +++++++++++++++++++++++++++
>> 5 files changed, 353 insertions(+), 1 deletion(-)
>> create mode 100644 drivers/clocksource/loongson2_hpet.c
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 7afaf6d72800..52519695a458 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -12026,6 +12026,12 @@ F:
>> Documentation/devicetree/bindings/clock/loongson,ls2k-clk.yaml
>> F: drivers/clk/clk-loongson2.c
>> F: include/dt-bindings/clock/loongson,ls2k-clk.h
>> +LOONGSON-2 SOC SERIES HPET DRIVER
>> +M: Yinbo Zhu <zhuyinbo@...ngson.cn>
>> +L: linux-kernel@...r.kernel.org
>> +S: Maintained
>> +F: drivers/clocksource/loongson2_hpet.c
>> +
>> LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
>> M: Sathya Prakash <sathya.prakash@...adcom.com>
>> M: Sreekanth Reddy <sreekanth.reddy@...adcom.com>
>> diff --git a/arch/loongarch/kernel/time.c b/arch/loongarch/kernel/time.c
>> index 09f20bc81798..0d8b37763086 100644
>> --- a/arch/loongarch/kernel/time.c
>> +++ b/arch/loongarch/kernel/time.c
>> @@ -216,7 +216,9 @@ int __init constant_clocksource_init(void)
>> void __init time_init(void)
>> {
>> of_clk_init(NULL);
>> -
>> +#ifdef CONFIG_TIMER_PROBE
>> + timer_probe();
>> +#endif
>
> This change should go in another patch.
>
> #ifdef is not needed
okay I got it, I will do it.
>
>> if (!cpu_has_cpucfg)
>> const_clock_freq = cpu_clock_freq;
>> else
>> diff --git a/drivers/clocksource/Kconfig b/drivers/clocksource/Kconfig
>> index 4469e7f555e9..f114ee47e6f7 100644
>> --- a/drivers/clocksource/Kconfig
>> +++ b/drivers/clocksource/Kconfig
>> @@ -721,4 +721,13 @@ config GOLDFISH_TIMER
>> help
>> Support for the timer/counter of goldfish-rtc
>> +config LOONGSON2_HPET
>> + bool "Loongson-2 High Precision Event Timer (HPET)"
>> + select TIMER_PROBE
>
> TIMER_OF selects TIMER_PROBE
>
>> + select TIMER_OF
>> + help
>> + This option enables Loongson-2 High Precision Event Timer
>> + (HPET) module driver. It supports the oneshot, the periodic
>> + modes and high resolution. It is used as a clocksource and
>> + a clockevent.
>> endmenu
>> diff --git a/drivers/clocksource/Makefile b/drivers/clocksource/Makefile
>> index 64ab547de97b..1a3abb770f11 100644
>> --- a/drivers/clocksource/Makefile
>> +++ b/drivers/clocksource/Makefile
>> @@ -88,3 +88,4 @@ obj-$(CONFIG_MICROCHIP_PIT64B) +=
>> timer-microchip-pit64b.o
>> obj-$(CONFIG_MSC313E_TIMER) += timer-msc313e.o
>> obj-$(CONFIG_GOLDFISH_TIMER) += timer-goldfish.o
>> obj-$(CONFIG_GXP_TIMER) += timer-gxp.o
>> +obj-$(CONFIG_LOONGSON2_HPET) += loongson2_hpet.o
>
> Please rename to timer-loongson.c
but it is only for loongson2 SoC , such as loongson3 does't contain
hpet, in addition, hpet isn't only timer for loongson-2 Soc, so I name
it as loongson2_hpet.c. and, can I keep the original naming method?
>
>> diff --git a/drivers/clocksource/loongson2_hpet.c
>> b/drivers/clocksource/loongson2_hpet.c
>> new file mode 100644
>> index 000000000000..9b828f9728ca
>> --- /dev/null
>> +++ b/drivers/clocksource/loongson2_hpet.c
>> @@ -0,0 +1,334 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Author: Yinbo Zhu <zhuyinbo@...ngson.cn>
>> + * Copyright (C) 2022-2023 Loongson Technology Corporation Limited
>> + */
>> +
>> +#include <linux/init.h>
>> +#include <linux/percpu.h>
>> +#include <linux/delay.h>
>> +#include <linux/spinlock.h>
>> +#include <linux/interrupt.h>
>> +#include <linux/of_irq.h>
>> +#include <linux/of_address.h>
>> +#include <linux/clk.h>
>> +#include <asm/time.h>
>> +
>> +/* HPET regs */
>> +#define HPET_CFG 0x010
>> +#define HPET_STATUS 0x020
>> +#define HPET_COUNTER 0x0f0
>> +#define HPET_T0_IRS 0x001
>> +#define HPET_T0_CFG 0x100
>> +#define HPET_T0_CMP 0x108
>> +#define HPET_CFG_ENABLE 0x001
>> +#define HPET_TN_LEVEL 0x0002
>> +#define HPET_TN_ENABLE 0x0004
>> +#define HPET_TN_PERIODIC 0x0008
>> +#define HPET_TN_SETVAL 0x0040
>> +#define HPET_TN_32BIT 0x0100
>> +
>> +#define HPET_MIN_CYCLES 16
>> +#define HPET_MIN_PROG_DELTA (HPET_MIN_CYCLES * 12)
>> +#define HPET_COMPARE_VAL ((hpet_freq + HZ / 2) / HZ)
>> +
>> +void __iomem *hpet_mmio_base;
>> +unsigned int hpet_freq;
>> +unsigned int hpet_t0_irq;
>> +unsigned int hpet_irq_flags;
>> +unsigned int hpet_t0_cfg;
>> +
>> +static DEFINE_SPINLOCK(hpet_lock);
>> +DEFINE_PER_CPU(struct clock_event_device, hpet_clockevent_device);
>> +
>> +static int hpet_read(int offset)
>
> Please replace hpet by loogson as the former is already in the mips
> namespace.
As above, can I keep the original naming method?
>
Powered by blists - more mailing lists