From: Sean Anderson <seanga2@gmail.com>
To: u-boot@lists.denx.de
Subject: [PATCH 3/3] riscv: Move timer portions of SiFive CLINT to drivers/timer
Date: Tue, 13 Oct 2020 20:47:10 -0400 [thread overview]
Message-ID: <18b17165-8966-6a19-9c7c-1024db313ef4@gmail.com> (raw)
In-Reply-To: <CAN5B=eJmfbAMxzD5Y4GwUT9H3em=FCMUC1xT7Firp+bDQB0f3A@mail.gmail.com>
On 10/13/20 8:43 PM, Rick Chen wrote:
>> Half of this driver is a DM-based timer driver, and half is RISC-V-specific
>> IPI code. Move the timer portions in with the other timer drivers. The
>> KConfig is not moved, since it also enables IPIs. It could also be split
>> into two configs, but no boards use the timer but not the IPI atm, so I
>> haven't split it.
>>
>> Signed-off-by: Sean Anderson <seanga2@gmail.com>
>> ---
>>
>> MAINTAINERS | 1 +
>> arch/riscv/lib/sifive_clint.c | 43 ++------------------------
>> drivers/timer/Makefile | 1 +
>> drivers/timer/sifive_clint_timer.c | 49 ++++++++++++++++++++++++++++++
>> 4 files changed, 53 insertions(+), 41 deletions(-)
>> create mode 100644 drivers/timer/sifive_clint_timer.c
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 32a2cdb52b..73d1c20a26 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -928,6 +928,7 @@ T: git https://gitlab.denx.de/u-boot/custodians/u-boot-riscv.git
>> F: arch/riscv/
>> F: cmd/riscv/
>> F: drivers/timer/andes_plmt_timer.c
>> +F: drivers/timer/sifive_clint_timer.c
>> F: tools/prelink-riscv.c
>>
>> RISC-V KENDRYTE
>> diff --git a/arch/riscv/lib/sifive_clint.c b/arch/riscv/lib/sifive_clint.c
>> index c9704c596f..c8079dc510 100644
>> --- a/arch/riscv/lib/sifive_clint.c
>> +++ b/arch/riscv/lib/sifive_clint.c
>> @@ -1,5 +1,6 @@
>> // SPDX-License-Identifier: GPL-2.0+
>> /*
>> + * Copyright (C) 2020, Sean Anderson <seanga2@gmail.com>
>> * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
>> *
>> * U-Boot syscon driver for SiFive's Core Local Interruptor (CLINT).
>> @@ -8,19 +9,13 @@
>> */
>>
>> #include <common.h>
>> -#include <clk.h>
>> #include <dm.h>
>> -#include <timer.h>
>> #include <asm/io.h>
>> -#include <asm/syscon.h>
>> +#include <asm/smp.h>
>> #include <linux/err.h>
>>
>> /* MSIP registers */
>> #define MSIP_REG(base, hart) ((ulong)(base) + (hart) * 4)
>> -/* mtime compare register */
>> -#define MTIMECMP_REG(base, hart) ((ulong)(base) + 0x4000 + (hart) * 8)
>> -/* mtime register */
>> -#define MTIME_REG(base) ((ulong)(base) + 0xbff8)
>>
>> DECLARE_GLOBAL_DATA_PTR;
>>
>> @@ -61,37 +56,3 @@ int riscv_get_ipi(int hart, int *pending)
>>
>> return 0;
>> }
>> -
>> -static int sifive_clint_get_count(struct udevice *dev, u64 *count)
>> -{
>> - *count = readq((void __iomem *)MTIME_REG(dev->priv));
>> -
>> - return 0;
>> -}
>> -
>> -static const struct timer_ops sifive_clint_ops = {
>> - .get_count = sifive_clint_get_count,
>> -};
>> -
>> -static int sifive_clint_probe(struct udevice *dev)
>> -{
>> - dev->priv = dev_read_addr_ptr(dev);
>> - if (!dev->priv)
>> - return -EINVAL;
>> -
>> - return timer_timebase_fallback(dev);
>> -}
>> -
>> -static const struct udevice_id sifive_clint_ids[] = {
>> - { .compatible = "riscv,clint0" },
>> - { }
>> -};
>> -
>> -U_BOOT_DRIVER(sifive_clint) = {
>> - .name = "sifive_clint",
>> - .id = UCLASS_TIMER,
>> - .of_match = sifive_clint_ids,
>> - .probe = sifive_clint_probe,
>> - .ops = &sifive_clint_ops,
>> - .flags = DM_FLAG_PRE_RELOC,
>> -};
>> diff --git a/drivers/timer/Makefile b/drivers/timer/Makefile
>> index eda311f0f5..410ada87b7 100644
>> --- a/drivers/timer/Makefile
>> +++ b/drivers/timer/Makefile
>> @@ -19,6 +19,7 @@ obj-$(CONFIG_RENESAS_OSTM_TIMER) += ostm_timer.o
>> obj-$(CONFIG_RISCV_TIMER) += riscv_timer.o
>> obj-$(CONFIG_ROCKCHIP_TIMER) += rockchip_timer.o
>> obj-$(CONFIG_SANDBOX_TIMER) += sandbox_timer.o
>> +obj-$(CONFIG_SIFIVE_CLINT) += sifive_clint_timer.o
>
> no _TIMER suffix ?
I chose to keep the current Kconfig option semantics and naming. This
reflects that it enables both an IPI driver and a timer driver.
--Sean
>
>> obj-$(CONFIG_STI_TIMER) += sti-timer.o
>> obj-$(CONFIG_STM32_TIMER) += stm32_timer.o
>> obj-$(CONFIG_X86_TSC_TIMER) += tsc_timer.o
>> diff --git a/drivers/timer/sifive_clint_timer.c b/drivers/timer/sifive_clint_timer.c
>> new file mode 100644
>> index 0000000000..04e85c2564
>> --- /dev/null
>> +++ b/drivers/timer/sifive_clint_timer.c
>> @@ -0,0 +1,49 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Copyright (C) 2020, Sean Anderson <seanga2@gmail.com>
>> + * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
>> + */
>> +
>> +#include <common.h>
>> +#include <clk.h>
>> +#include <dm.h>
>> +#include <timer.h>
>> +#include <asm/io.h>
>> +#include <linux/err.h>
>> +
>> +/* mtime register */
>> +#define MTIME_REG(base) ((ulong)(base) + 0xbff8)
>> +
>> +static int sifive_clint_get_count(struct udevice *dev, u64 *count)
>> +{
>> + *count = readq((void __iomem *)MTIME_REG(dev->priv));
>> +
>> + return 0;
>> +}
>> +
>> +static const struct timer_ops sifive_clint_ops = {
>> + .get_count = sifive_clint_get_count,
>> +};
>> +
>> +static int sifive_clint_probe(struct udevice *dev)
>> +{
>> + dev->priv = dev_read_addr_ptr(dev);
>> + if (!dev->priv)
>> + return -EINVAL;
>> +
>> + return timer_timebase_fallback(dev);
>> +}
>> +
>> +static const struct udevice_id sifive_clint_ids[] = {
>> + { .compatible = "riscv,clint0" },
>> + { }
>> +};
>> +
>> +U_BOOT_DRIVER(sifive_clint) = {
>> + .name = "sifive_clint",
>> + .id = UCLASS_TIMER,
>> + .of_match = sifive_clint_ids,
>> + .probe = sifive_clint_probe,
>> + .ops = &sifive_clint_ops,
>> + .flags = DM_FLAG_PRE_RELOC,
>> +};
>> --
>> 2.28.0
>
> LGTM.
> Other than that,
> Reviewed-by: Rick Chen <rick@andestech.com>
>
next prev parent reply other threads:[~2020-10-14 0:47 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-04 20:29 [PATCH 0/3] riscv: Move timers into drivers/timer Sean Anderson
2020-10-04 20:29 ` [PATCH 1/3] riscv: Move Andes PLMT driver to drivers/timer Sean Anderson
2020-10-12 3:34 ` Simon Glass
2020-10-14 0:36 ` Rick Chen
2020-10-04 20:29 ` [PATCH 2/3] timer: Add _TIMER suffix to Andes PLMT Kconfig Sean Anderson
2020-10-12 3:34 ` Simon Glass
2020-10-14 0:37 ` Rick Chen
2020-10-04 20:29 ` [PATCH 3/3] riscv: Move timer portions of SiFive CLINT to drivers/timer Sean Anderson
2020-10-12 3:34 ` Simon Glass
2020-10-14 0:43 ` Rick Chen
2020-10-14 0:47 ` Sean Anderson [this message]
2020-10-26 1:38 ` Rick Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=18b17165-8966-6a19-9c7c-1024db313ef4@gmail.com \
--to=seanga2@gmail.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox