All of lore.kernel.org
 help / color / mirror / Atom feed
From: hl <hl@rock-chips.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v5 01/21] rockchip: add timer driver
Date: Thu, 12 Nov 2015 10:49:57 +0800	[thread overview]
Message-ID: <5643FE55.2040304@rock-chips.com> (raw)
In-Reply-To: <CAC5Y2nP3926mz422dVm6s7E8zmpRdSwdDVR04=b0zooR-BTmLw@mail.gmail.com>

Hi Ben,

On 12/11/15 10:04, Ben Chan wrote:
> On Tue, Nov 10, 2015 at 2:24 AM, Lin Huang <hl@rock-chips.com> wrote:
>> some rockchip soc will not include lib/timer.c in SPL stage,
>> so implement timer driver for some soc can use us delay function in SPL.
>>
>> Signed-off-by: Lin Huang <hl@rock-chips.com>
>> Acked-by: Simon Glass <sjg@chromium.org>
>> ---
>> Changes in v1: None
>> Changes in v2:
>> - add udelay function
>> Changes in v3:
>> - fix some coding style
>> Changes in v4: None
>> Changes in v5: None
>>
>>   arch/arm/include/asm/arch-rockchip/timer.h | 22 ++++++++++++++
>>   arch/arm/mach-rockchip/Makefile            |  1 +
>>   arch/arm/mach-rockchip/board-spl.c         | 21 ++-----------
>>   arch/arm/mach-rockchip/rk_timer.c          | 48 ++++++++++++++++++++++++++++++
>>   include/configs/rk3288_common.h            |  3 +-
>>   5 files changed, 75 insertions(+), 20 deletions(-)
>>   create mode 100644 arch/arm/include/asm/arch-rockchip/timer.h
>>   create mode 100644 arch/arm/mach-rockchip/rk_timer.c
>>
>> diff --git a/arch/arm/include/asm/arch-rockchip/timer.h b/arch/arm/include/asm/arch-rockchip/timer.h
>> new file mode 100644
>> index 0000000..59444d4
>> --- /dev/null
>> +++ b/arch/arm/include/asm/arch-rockchip/timer.h
>> @@ -0,0 +1,22 @@
>> +/*
>> + * (C) Copyright 2015 Rockchip Electronics Co., Ltd
>> + *
>> + * SPDX-License-Identifier:     GPL-2.0+
>> + */
>> +
>> +#ifndef __ASM_ARCH_TIMER_H
>> +#define __ASM_ARCH_TIMER_H
>> +
>> +struct rk_timer {
> question: should these use sized integer type?
     you mean use u32, i think unsigned int is the same with u32
>> +       unsigned int timer_load_count0;
> nit: it may be clearer to use _l / _h suffix instead of 0 / 1
     it is correspond to TRM register name,  and  it can easy to find 
register in TRM.
>
>> +       unsigned int timer_load_count1;
>> +       unsigned int timer_curr_value0;
>> +       unsigned int timer_curr_value1;
>> +       unsigned int timer_ctrl_reg;
>> +       unsigned int timer_int_status;
>> +};
>> +
>> +void rockchip_timer_init(void);
>> +void rockchip_udelay(unsigned int us);
>> +
>> +#endif
>> diff --git a/arch/arm/mach-rockchip/Makefile b/arch/arm/mach-rockchip/Makefile
>> index 5a4e383..abe03a8 100644
>> --- a/arch/arm/mach-rockchip/Makefile
>> +++ b/arch/arm/mach-rockchip/Makefile
>> @@ -10,4 +10,5 @@ else
>>   obj-y += board.o
>>   endif
>>   obj-y += common.o
>> +obj-y += rk_timer.o
>>   obj-$(CONFIG_ROCKCHIP_RK3288) += rk3288/
>> diff --git a/arch/arm/mach-rockchip/board-spl.c b/arch/arm/mach-rockchip/board-spl.c
>> index 28c3949..0426adf 100644
>> --- a/arch/arm/mach-rockchip/board-spl.c
>> +++ b/arch/arm/mach-rockchip/board-spl.c
>> @@ -18,6 +18,7 @@
>>   #include <asm/arch/hardware.h>
>>   #include <asm/arch/periph.h>
>>   #include <asm/arch/sdram.h>
>> +#include <asm/arch/timer.h>
>>   #include <dm/pinctrl.h>
>>   #include <dm/root.h>
>>   #include <dm/test.h>
>> @@ -110,24 +111,6 @@ static void configure_l2ctlr(void)
>>          write_l2ctlr(l2ctlr);
>>   }
>>
>> -struct rk3288_timer {
>> -       u32 timer_load_count0;
>> -       u32 timer_load_count1;
>> -       u32 timer_curr_value0;
>> -       u32 timer_curr_value1;
>> -       u32 timer_ctrl_reg;
>> -       u32 timer_int_status;
>> -};
>> -
>> -void init_timer(void)
>> -{
>> -       struct rk3288_timer * const timer7_ptr = (void *)TIMER7_BASE;
>> -
>> -       writel(0xffffffff, &timer7_ptr->timer_load_count0);
>> -       writel(0xffffffff, &timer7_ptr->timer_load_count1);
>> -       writel(1, &timer7_ptr->timer_ctrl_reg);
>> -}
>> -
>>   static int configure_emmc(struct udevice *pinctrl)
>>   {
>>          struct gpio_desc desc;
>> @@ -197,7 +180,7 @@ void board_init_f(ulong dummy)
>>                  hang();
>>          }
>>
>> -       init_timer();
>> +       rockchip_timer_init();
>>          configure_l2ctlr();
>>
>>          ret = uclass_get_device(UCLASS_CLK, 0, &dev);
>> diff --git a/arch/arm/mach-rockchip/rk_timer.c b/arch/arm/mach-rockchip/rk_timer.c
>> new file mode 100644
>> index 0000000..ae693c0
>> --- /dev/null
>> +++ b/arch/arm/mach-rockchip/rk_timer.c
>> @@ -0,0 +1,48 @@
>> +/*
>> + * (C) Copyright 2015 Rockchip Electronics Co., Ltd
>> + *
>> + * SPDX-License-Identifier:     GPL-2.0+
>> + */
>> +
>> +#include <asm/arch/timer.h>
>> +#include <asm/io.h>
>> +#include <common.h>
>> +#include <linux/types.h>
>> +
>> +struct rk_timer * const timer_ptr = (void *)CONFIG_SYS_TIMER_BASE;
>> +
>> +static uint64_t rockchip_get_ticks(void)
>> +{
>> +       uint64_t timebase_h, timebase_l;
>> +
>> +       timebase_l = readl(&timer_ptr->timer_curr_value0);
>> +       timebase_h = readl(&timer_ptr->timer_curr_value1);
>> +
>> +       return timebase_h << 32 | timebase_l;
>> +}
>> +
>> +static unsigned int usec_to_tick(unsigned long usec)
> should probably use 'uint64_t' for 'tick' and the return value,  and
> use 'unsigned int' for 'usec'
     Yes, you are right, will correct it next version.
>
>> +{
>> +       unsigned int tick = usec;
>> +       tick *= CONFIG_SYS_TIMER_RATE / (1000 * 1000);
>> +       return tick;
>> +}
>> +
>> +void rockchip_udelay(unsigned int us)
> nit: perhaps use 'usec' instead of 'us' for consistency with usec_to_tick
     Okay, will modify next version.
>
>> +{
>> +       uint64_t tmp;
>> +
>> +       /* get current timestamp */
> nit: the comment is kind of misleadning as 'tmp' isn't the current timestamp
>
>> +       tmp = rockchip_get_ticks() + usec_to_tick(us);
>> +
>> +       /* loop till event */
>> +       while (rockchip_get_ticks() < tmp+1)
>> +               ;
>> +}
>> +
>> +void rockchip_timer_init(void)
>> +{
>> +       writel(0xffffffff, &timer_ptr->timer_load_count0);
>> +       writel(0xffffffff, &timer_ptr->timer_load_count1);
>> +       writel(1, &timer_ptr->timer_ctrl_reg);
>> +}
>> diff --git a/include/configs/rk3288_common.h b/include/configs/rk3288_common.h
>> index 36408b9..cdea6cb 100644
>> --- a/include/configs/rk3288_common.h
>> +++ b/include/configs/rk3288_common.h
>> @@ -23,7 +23,8 @@
>>   #define CONFIG_DISPLAY_BOARDINFO
>>
>>   #define CONFIG_SYS_TIMER_RATE          (24 * 1000 * 1000)
>> -#define CONFIG_SYS_TIMER_COUNTER       (TIMER7_BASE + 8)
>> +#define        CONFIG_SYS_TIMER_BASE           0xff810020 /* TIMER7 */
> nit: the code around it seems to use a space instead of a tab after #define
     oh, sorry, i will correct it next version.
>
>> +#define CONFIG_SYS_TIMER_COUNTER       (CONFIG_SYS_TIMER_BASE + 8)
>>
>>   #define CONFIG_SPL_FRAMEWORK
>>   #define CONFIG_SPL_LIBCOMMON_SUPPORT
>> --
>> 1.9.1
>>
>
>

-- 
Lin Huang

  reply	other threads:[~2015-11-12  2:49 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-10 10:24 [U-Boot] [PATCH v5 00/21] Bring up rk3036 uboot Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 01/21] rockchip: add timer driver Lin Huang
2015-11-12  2:04   ` Ben Chan
2015-11-12  2:49     ` hl [this message]
2015-11-10 10:24 ` [U-Boot] [PATCH v5 02/21] rockchip: move SYS_MALLOC_F_LEN to rk3288 own Kconfig Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 03/21] rockchip: rename board-spl.c to rk3288-board-spl.c Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 04/21] rockchip: add config decide whether to build common.c Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 05/21] dm: core: Add SPL Kconfig for REGMAP and SYSCON Lin Huang
2015-11-13 18:13   ` Simon Glass
2015-11-10 10:24 ` [U-Boot] [PATCH v5 06/21] rockchip: serial driver support rk3036 Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 07/21] rockchip: Bring in RK3036 device tree file includes and bindings Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 08/21] rockchip: rk3036: Add clock driver Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 09/21] rockchip: rk3036: Add header files for GRF Lin Huang
2015-11-12  2:23   ` Ben Chan
2015-11-10 10:24 ` [U-Boot] [PATCH v5 10/21] rockchip: rk3036: Add Soc reset driver Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 11/21] rockchip: rk3036: Add a simple syscon driver Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 12/21] rockchip: rk3036: Add pinctrl driver Lin Huang
2015-11-13 23:54   ` Ariel D'Alessandro
2015-11-16  2:12     ` hl
2015-11-10 10:24 ` [U-Boot] [PATCH v5 13/21] mmc: dw_mmc: support fifo mode in dwc mmc driver Lin Huang
2015-11-13 18:13   ` Simon Glass
2015-11-10 10:24 ` [U-Boot] [PATCH v5 14/21] rockchip: mmc: get the fifo mode and fifo depth property from dts Lin Huang
2015-11-13 18:13   ` Simon Glass
2015-11-10 10:24 ` [U-Boot] [PATCH v5 15/21] rockchip: add early uart driver Lin Huang
2015-11-13 18:13   ` Simon Glass
2015-11-10 10:24 ` [U-Boot] [PATCH v5 16/21] rockchip: add rk3036 sdram driver Lin Huang
2015-11-12  8:35   ` Ben Chan
2015-11-13 18:13   ` Simon Glass
2015-11-10 10:24 ` [U-Boot] [PATCH v5 17/21] rockchip: rk3036: Add core Soc start-up code Lin Huang
2015-11-13 18:13   ` Simon Glass
2015-11-10 10:24 ` [U-Boot] [PATCH v5 18/21] rockchip: Add basic support for evb-rk3036 board Lin Huang
2015-11-13 18:13   ` Simon Glass
2015-11-10 10:24 ` [U-Boot] [PATCH v5 19/21] rockchip: Add max init size & chip tag configs Lin Huang
2015-11-13 18:13   ` Simon Glass
2015-11-10 10:24 ` [U-Boot] [PATCH v5 20/21] rockchip: Add support for rk's second level loader Lin Huang
2015-11-10 10:24 ` [U-Boot] [PATCH v5 21/21] rockchip: doc: show packet rk3036 uboot image Lin Huang
2015-11-13 18:13   ` Simon Glass
2015-11-13 18:14 ` [U-Boot] [PATCH v5 00/21] Bring up rk3036 uboot Simon Glass
2015-11-16  0:58   ` hl
2015-11-28  0:21     ` Simon Glass
2015-11-28  2:34       ` Naoki FUKAUMI
2015-11-28  2:46         ` Naoki FUKAUMI
2015-11-30  8:12       ` Sjoerd Simons
2015-11-30  8:24         ` Stefan Roese
2015-11-30  8:39           ` Sjoerd Simons
2015-11-30  8:46             ` Stefan Roese
2015-11-30 23:17         ` Simon Glass
2015-12-01  7:48           ` Sjoerd Simons
2015-12-01 20:02             ` Simon Glass

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=5643FE55.2040304@rock-chips.com \
    --to=hl@rock-chips.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.