lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20190807084635.24173-4-geert+renesas@glider.be>
Date:   Wed,  7 Aug 2019 10:46:35 +0200
From:   Geert Uytterhoeven <geert+renesas@...der.be>
To:     Daniel Lezcano <daniel.lezcano@...aro.org>,
        Thomas Gleixner <tglx@...utronix.de>
Cc:     Jacopo Mondi <jacopo+renesas@...ndi.org>,
        Chris Brandt <Chris.Brandt@...esas.com>,
        linux-renesas-soc@...r.kernel.org, linux-kernel@...r.kernel.org,
        Geert Uytterhoeven <geert+renesas@...der.be>
Subject: [PATCH v3 3/3] clocksource/drivers/ostm: Use unique device name instead of ostm

Currently all OSTM devices are called "ostm", also in kernel messages.

As there can be multiple instances in an SoC, this can confuse the user.
Hence construct a unique name from the DT node name, like is done for
platform devices.

On RSK+RZA1, the boot log changes like:

    -clocksource: ostm: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 57352151442 ns
    +clocksource: ostm fcfec000.timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 57352151442 ns
     sched_clock: 32 bits at 33MHz, resolution 30ns, wraps every 64440619504ns
    -ostm: used for clocksource
    -ostm: used for clock events
    +ostm fcfec000.timer: used for clocksource
    +ostm fcfec400.timer: used for clock events

Signed-off-by: Geert Uytterhoeven <geert+renesas@...der.be>
---
v3:
  - Make the name format similar to the one used for platform devices,
  - Use kasprintf() instead of buffer size guessing,
  - Use a real example from rskrza1.

v2 (by Jacopo):
  - Use np->full_name.
---
 drivers/clocksource/renesas-ostm.c | 45 ++++++++++++++++++++----------
 1 file changed, 30 insertions(+), 15 deletions(-)

diff --git a/drivers/clocksource/renesas-ostm.c b/drivers/clocksource/renesas-ostm.c
index 1e22e54d7b0df40d..659e3ec7b86714e3 100644
--- a/drivers/clocksource/renesas-ostm.c
+++ b/drivers/clocksource/renesas-ostm.c
@@ -25,6 +25,7 @@
  */
 
 struct ostm_device {
+	const char *name;
 	void __iomem *base;
 	unsigned long ticks_per_jiffy;
 	struct clock_event_device ced;
@@ -79,9 +80,8 @@ static int __init ostm_init_clksrc(struct ostm_device *ostm, unsigned long rate)
 	writeb(CTL_FREERUN, ostm->base + OSTM_CTL);
 	writeb(TS, ostm->base + OSTM_TS);
 
-	return clocksource_mmio_init(ostm->base + OSTM_CNT,
-			"ostm", rate,
-			300, 32, clocksource_mmio_readl_up);
+	return clocksource_mmio_init(ostm->base + OSTM_CNT, ostm->name, rate,
+				     300, 32, clocksource_mmio_readl_up);
 }
 
 static u64 notrace ostm_read_sched_clock(void)
@@ -161,15 +161,14 @@ static int __init ostm_init_clkevt(struct ostm_device *ostm, unsigned int irq,
 	struct clock_event_device *ced = &ostm->ced;
 	int ret = -ENXIO;
 
-	ret = request_irq(irq, ostm_timer_interrupt,
-			  IRQF_TIMER | IRQF_IRQPOLL,
-			  "ostm", ostm);
+	ret = request_irq(irq, ostm_timer_interrupt, IRQF_TIMER | IRQF_IRQPOLL,
+			  ostm->name, ostm);
 	if (ret) {
-		pr_err("ostm: failed to request irq\n");
+		pr_err("%s: Failed to request irq\n", ostm->name);
 		return ret;
 	}
 
-	ced->name = "ostm";
+	ced->name = ostm->name;
 	ced->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_PERIODIC;
 	ced->set_state_shutdown = ostm_shutdown;
 	ced->set_state_periodic = ostm_set_periodic;
@@ -187,6 +186,7 @@ static int __init ostm_init(struct device_node *np)
 {
 	struct clk *ostm_clk = NULL;
 	struct ostm_device *ostm;
+	struct resource res;
 	unsigned long rate;
 	unsigned int irq;
 	int ret;
@@ -195,22 +195,35 @@ static int __init ostm_init(struct device_node *np)
 	if (!ostm)
 		return -ENOMEM;
 
-	ostm->base = of_iomap(np, 0);
-	if (!ostm->base) {
+	ret = of_address_to_resource(np, 0, &res);
+	if (ret) {
+		pr_err("ostm: Failed to obtain I/O memory\n");
+		goto err_free;
+	}
+
+	ostm->name = kasprintf(GFP_KERNEL, "ostm %llx.%s",
+			       (unsigned long long)res.start, np->name);
+	if (!ostm->name) {
 		ret = -ENOMEM;
 		goto err_free;
 	}
 
+	ostm->base = ioremap(res.start, resource_size(&res));
+	if (!ostm->base) {
+		ret = -ENOMEM;
+		goto err_free_name;
+	}
+
 	irq = irq_of_parse_and_map(np, 0);
 	if (!irq) {
-		pr_err("ostm: Failed to get irq\n");
+		pr_err("%s: Failed to get irq\n", ostm->name);
 		ret = -EINVAL;
 		goto err_unmap;
 	}
 
 	ostm_clk = of_clk_get(np, 0);
 	if (IS_ERR(ostm_clk)) {
-		pr_err("ostm: Failed to get clock\n");
+		pr_err("%s: Failed to get clock\n", ostm->name);
 		ostm_clk = NULL;
 		ret = PTR_ERR(ostm_clk);
 		goto err_unmap;
@@ -218,7 +231,7 @@ static int __init ostm_init(struct device_node *np)
 
 	ret = clk_prepare_enable(ostm_clk);
 	if (ret) {
-		pr_err("ostm: Failed to enable clock\n");
+		pr_err("%s: Failed to enable clock\n", ostm->name);
 		goto err_clk_put;
 	}
 
@@ -235,13 +248,13 @@ static int __init ostm_init(struct device_node *np)
 			goto err_clk_disable;
 
 		ostm_init_sched_clock(ostm, rate);
-		pr_info("ostm: used for clocksource\n");
+		pr_info("%s: used for clocksource\n", ostm->name);
 	} else {
 		ret = ostm_init_clkevt(ostm, irq, rate);
 		if (ret)
 			goto err_clk_disable;
 
-		pr_info("ostm: used for clock events\n");
+		pr_info("%s: used for clock events\n", ostm->name);
 	}
 
 	return 0;
@@ -252,6 +265,8 @@ static int __init ostm_init(struct device_node *np)
 	clk_put(ostm_clk);
 err_unmap:
 	iounmap(ostm->base);
+err_free_name:
+	kfree(ostm->name);
 err_free:
 	kfree(ostm);
 	return ret;
-- 
2.17.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ