public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
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>
> 

  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