All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ryder Lee <ryder.lee@mediatek.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 08/18] timer: MediaTek: add timer driver for MediaTek SoCs
Date: Tue, 6 Nov 2018 16:47:16 +0800	[thread overview]
Message-ID: <ddaa135b549149ec4e72ddae31649d29f323d7fd.1541474544.git.ryder.lee@mediatek.com> (raw)
In-Reply-To: <cover.1541474544.git.ryder.lee@mediatek.com>

This patch adds clock source and clock event for the timer found
on the Mediatek SoCs.

Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
Tested-by: Matthias Brugger <matthias.bgg@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
---
Changes since v4: None
---
 drivers/timer/Kconfig     |  7 ++++
 drivers/timer/Makefile    |  1 +
 drivers/timer/mtk_timer.c | 85 +++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+)
 create mode 100644 drivers/timer/mtk_timer.c

diff --git a/drivers/timer/Kconfig b/drivers/timer/Kconfig
index d012cf7..229c3a2 100644
--- a/drivers/timer/Kconfig
+++ b/drivers/timer/Kconfig
@@ -160,4 +160,11 @@ config MPC83XX_TIMER
 	  Select this to enable support for the timer found on
 	  devices based on the MPC83xx family of SoCs.
 
+config MTK_TIMER
+	bool "MediaTek timer support"
+	depends on TIMER
+	help
+	  Select this to enable support for the timer found on
+	  MediaTek devices.
+
 endmenu
diff --git a/drivers/timer/Makefile b/drivers/timer/Makefile
index 7f19c49..c4fbab2 100644
--- a/drivers/timer/Makefile
+++ b/drivers/timer/Makefile
@@ -18,3 +18,4 @@ obj-$(CONFIG_SANDBOX_TIMER)	+= sandbox_timer.o
 obj-$(CONFIG_STI_TIMER)		+= sti-timer.o
 obj-$(CONFIG_STM32_TIMER)	+= stm32_timer.o
 obj-$(CONFIG_X86_TSC_TIMER)	+= tsc_timer.o
+obj-$(CONFIG_MTK_TIMER)		+= mtk_timer.o
diff --git a/drivers/timer/mtk_timer.c b/drivers/timer/mtk_timer.c
new file mode 100644
index 0000000..b5e76bd
--- /dev/null
+++ b/drivers/timer/mtk_timer.c
@@ -0,0 +1,85 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * MediaTek timer driver
+ *
+ * Copyright (C) 2018 MediaTek Inc.
+ * Author: Ryder Lee <ryder.lee@mediatek.com>
+ */
+
+#include <clk.h>
+#include <common.h>
+#include <dm.h>
+#include <timer.h>
+#include <asm/io.h>
+
+#define MTK_GPT4_CTRL	0x40
+#define MTK_GPT4_CLK	0x44
+#define MTK_GPT4_CNT	0x48
+
+#define GPT4_ENABLE	BIT(0)
+#define GPT4_CLEAR	BIT(1)
+#define GPT4_FREERUN	GENMASK(5, 4)
+#define GPT4_CLK_SYS	0x0
+#define GPT4_CLK_DIV1	0x0
+
+struct mtk_timer_priv {
+	void __iomem *base;
+};
+
+static int mtk_timer_get_count(struct udevice *dev, u64 *count)
+{
+	struct mtk_timer_priv *priv = dev_get_priv(dev);
+	u32 val = readl(priv->base + MTK_GPT4_CNT);
+
+	*count = timer_conv_64(val);
+
+	return 0;
+}
+
+static int mtk_timer_probe(struct udevice *dev)
+{
+	struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
+	struct mtk_timer_priv *priv = dev_get_priv(dev);
+	struct clk clk, parent;
+	int ret;
+
+	priv->base = dev_read_addr_ptr(dev);
+	if (!priv->base)
+		return -ENOENT;
+
+	ret = clk_get_by_index(dev, 0, &clk);
+	if (ret)
+		return ret;
+
+	ret = clk_get_by_index(dev, 1, &parent);
+	if (!ret) {
+		ret = clk_set_parent(&clk, &parent);
+		if (ret)
+			return ret;
+	}
+
+	uc_priv->clock_rate = clk_get_rate(&clk);
+	if (!uc_priv->clock_rate)
+		return -EINVAL;
+
+	return 0;
+}
+
+static const struct timer_ops mtk_timer_ops = {
+	.get_count = mtk_timer_get_count,
+};
+
+static const struct udevice_id mtk_timer_ids[] = {
+	{ .compatible = "mediatek,timer" },
+	{ }
+};
+
+U_BOOT_DRIVER(mtk_timer) = {
+	.name = "mtk_timer",
+	.id = UCLASS_TIMER,
+	.of_match = mtk_timer_ids,
+	.priv_auto_alloc_size = sizeof(struct mtk_timer_priv),
+	.probe = mtk_timer_probe,
+	.ops = &mtk_timer_ops,
+	.flags = DM_FLAG_PRE_RELOC,
+};
-- 
1.9.1

  parent reply	other threads:[~2018-11-06  8:47 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-06  8:47 [U-Boot] [PATCH v4 00/18] Add U-Boot support for MediaTek SoCs - MT7623n & MT7629 Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 01/18] tools: MediaTek: add MTK boot header generation to mkimage Ryder Lee
2018-11-14 17:27   ` Fabien Parent
2018-11-06  8:47 ` [U-Boot] [PATCH v4 02/18] arm: dts: MediaTek: add device tree for MT7629 Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 03/18] arm: dts: MediaTek: add device tree for MT7623 Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 04/18] arm: MediaTek: add basic support for MT7629 boards Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 05/18] arm: MediaTek: add basic support for MT7623 boards Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 06/18] clk: MediaTek: add clock driver for MT7629 SoC Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 07/18] clk: MediaTek: add clock driver for MT7623 SoC Ryder Lee
2018-11-06  8:47 ` Ryder Lee [this message]
2018-11-06  8:47 ` [U-Boot] [PATCH v4 09/18] watchdog: MediaTek: add watchdog driver for MediaTek SoCs Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 10/18] pinctrl: MediaTek: add pinctrl driver for MT7629 SoC Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 11/18] pinctrl: MediaTek: add pinctrl driver for MT7623 SoC Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 12/18] power domain: MediaTek: add power domain driver for MT7629 SoC Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 13/18] power domain: MediaTek: add power domain driver for MT7623 SoC Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 14/18] serial: 16550: allow the driver to support MediaTek serial Ryder Lee
2018-11-13 19:53   ` Simon Glass
2018-11-14  1:32     ` Ryder Lee
2018-11-15 19:59       ` Simon Glass
2018-11-16 14:30         ` Tom Rini
2018-11-19  0:39           ` Weijie Gao
2018-11-06  8:47 ` [U-Boot] [PATCH v4 15/18] ram: MediaTek: add DDR3 driver for MT7629 SoC Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 16/18] mmc: mtk-sd: add SD/MMC host controller driver for MT7623 SoC Ryder Lee
2018-11-06  8:47 ` [U-Boot] [PATCH v4 17/18] doc: README.mediatek: Add a simple README for MediaTek Ryder Lee
2018-11-06 16:20   ` Frank Wunderlich
2018-11-06  8:47 ` [U-Boot] [PATCH v4 18/18] MAINTAINERS: add an entry " Ryder Lee

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=ddaa135b549149ec4e72ddae31649d29f323d7fd.1541474544.git.ryder.lee@mediatek.com \
    --to=ryder.lee@mediatek.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.