The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: "Mylène Josserand" <mylene.josserand@bootlin.com>
To: maxime.ripard@bootlin.com, linux@armlinux.org.uk, wens@csie.org,
	robh+dt@kernel.org, mark.rutland@arm.com
Cc: devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org, clabbe.montjoie@gmail.com,
	thomas.petazzoni@bootlin.com, mylene.josserand@bootlin.com,
	quentin.schulz@bootlin.com
Subject: [PATCH v4 01/10] ARM: sun9i: smp: Add sun9i dt parsing function
Date: Fri, 23 Feb 2018 14:37:33 +0100	[thread overview]
Message-ID: <20180223133742.26044-2-mylene.josserand@bootlin.com> (raw)
In-Reply-To: <20180223133742.26044-1-mylene.josserand@bootlin.com>

To prepare the support for sun8i-a83t, create a new function
that handles all the resources needed on sun9i-a80 (because
it will be different from sun8i-a83t).

All the parsing of device tree is moved into this new function:
sun9i_dt_parsing. Create also a function to release the resources
retrieved during the dt parsing in case there is an error in init
function.

Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com>
---
 arch/arm/mach-sunxi/mc_smp.c | 99 ++++++++++++++++++++++++++------------------
 1 file changed, 58 insertions(+), 41 deletions(-)

diff --git a/arch/arm/mach-sunxi/mc_smp.c b/arch/arm/mach-sunxi/mc_smp.c
index 11e46c6efb90..650a2ad4398f 100644
--- a/arch/arm/mach-sunxi/mc_smp.c
+++ b/arch/arm/mach-sunxi/mc_smp.c
@@ -684,35 +684,22 @@ static int __init sunxi_mc_smp_lookback(void)
 	return ret;
 }
 
-static int __init sunxi_mc_smp_init(void)
+static int sun9i_dt_parsing(struct resource res)
 {
-	struct device_node *cpucfg_node, *sram_node, *node;
-	struct resource res;
+	struct device_node *prcm_node, *cpucfg_node, *sram_node;
 	int ret;
 
-	if (!of_machine_is_compatible("allwinner,sun9i-a80"))
-		return -ENODEV;
-
-	if (!sunxi_mc_smp_cpu_table_init())
-		return -EINVAL;
-
-	if (!cci_probed()) {
-		pr_err("%s: CCI-400 not available\n", __func__);
-		return -ENODEV;
-	}
-
-	node = of_find_compatible_node(NULL, NULL, "allwinner,sun9i-a80-prcm");
-	if (!node) {
-		pr_err("%s: PRCM not available\n", __func__);
+	prcm_node = of_find_compatible_node(NULL, NULL,
+				       "allwinner,sun9i-a80-prcm");
+	if (!prcm_node)
 		return -ENODEV;
-	}
 
 	/*
 	 * Unfortunately we can not request the I/O region for the PRCM.
 	 * It is shared with the PRCM clock.
 	 */
-	prcm_base = of_iomap(node, 0);
-	of_node_put(node);
+	prcm_base = of_iomap(prcm_node, 0);
+	of_node_put(prcm_node);
 	if (!prcm_base) {
 		pr_err("%s: failed to map PRCM registers\n", __func__);
 		return -ENOMEM;
@@ -748,33 +735,12 @@ static int __init sunxi_mc_smp_init(void)
 		goto err_put_sram_node;
 	}
 
-	/* Configure CCI-400 for boot cluster */
-	ret = sunxi_mc_smp_lookback();
-	if (ret) {
-		pr_err("%s: failed to configure boot cluster: %d\n",
-		       __func__, ret);
-		goto err_unmap_release_secure_sram;
-	}
-
 	/* We don't need the CPUCFG and SRAM device nodes anymore */
 	of_node_put(cpucfg_node);
 	of_node_put(sram_node);
 
-	/* Set the hardware entry point address */
-	writel(__pa_symbol(sunxi_mc_smp_secondary_startup),
-	       prcm_base + PRCM_CPU_SOFT_ENTRY_REG);
-
-	/* Actually enable multi cluster SMP */
-	smp_set_ops(&sunxi_mc_smp_smp_ops);
-
-	pr_info("sunxi multi cluster SMP support installed\n");
-
 	return 0;
 
-err_unmap_release_secure_sram:
-	iounmap(sram_b_smp_base);
-	of_address_to_resource(sram_node, 0, &res);
-	release_mem_region(res.start, resource_size(&res));
 err_put_sram_node:
 	of_node_put(sram_node);
 err_unmap_release_cpucfg:
@@ -785,6 +751,57 @@ static int __init sunxi_mc_smp_init(void)
 	of_node_put(cpucfg_node);
 err_unmap_prcm:
 	iounmap(prcm_base);
+
+	return ret;
+}
+
+static void sun9i_iounmap(void)
+{
+	iounmap(sram_b_smp_base);
+	iounmap(cpucfg_base);
+	iounmap(prcm_base);
+}
+
+static int __init sunxi_mc_smp_init(void)
+{
+	struct resource res;
+	int ret;
+
+	if (!of_machine_is_compatible("allwinner,sun9i-a80"))
+		return -ENODEV;
+
+	if (!sunxi_mc_smp_cpu_table_init())
+		return -EINVAL;
+
+	if (!cci_probed()) {
+		pr_err("%s: CCI-400 not available\n", __func__);
+		return -ENODEV;
+	}
+
+	ret = sun9i_dt_parsing(res);
+	if (ret) {
+		pr_err("%s: failed to parse DT: %d\n", __func__, ret);
+		return ret;
+	}
+
+	/* Configure CCI-400 for boot cluster */
+	ret = sunxi_mc_smp_lookback();
+	if (ret) {
+		pr_err("%s: failed to configure boot cluster: %d\n",
+		       __func__, ret);
+		sun9i_iounmap();
+		return ret;
+	}
+
+	/* Set the hardware entry point address */
+	writel(__pa_symbol(sunxi_mc_smp_secondary_startup),
+	       prcm_base + PRCM_CPU_SOFT_ENTRY_REG);
+
+	/* Actually enable multi cluster SMP */
+	smp_set_ops(&sunxi_mc_smp_smp_ops);
+
+	pr_info("sunxi multi cluster SMP support installed\n");
+
 	return ret;
 }
 
-- 
2.11.0

  reply	other threads:[~2018-02-23 13:46 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-23 13:37 [PATCH v4 00/10] Sunxi: Add SMP support on A83T Mylène Josserand
2018-02-23 13:37 ` Mylène Josserand [this message]
2018-02-23 14:54   ` [PATCH v4 01/10] ARM: sun9i: smp: Add sun9i dt parsing function Maxime Ripard
2018-02-25 15:19     ` Mylène Josserand
2018-02-23 13:37 ` [PATCH v4 02/10] ARM: sun9i: smp: Rename clusters's power-off register Mylène Josserand
2018-02-23 14:56   ` Maxime Ripard
2018-02-25 15:20     ` Mylène Josserand
2018-02-23 13:37 ` [PATCH v4 03/10] ARM: sun8i: smp: Add support for A83T Mylène Josserand
2018-02-23 15:03   ` Maxime Ripard
2018-02-25 15:25     ` Mylène Josserand
2018-02-23 13:37 ` [PATCH v4 04/10] ARM: sun8i: smp: Add hotplug support for sun8i-a83t Mylène Josserand
2018-02-23 13:37 ` [PATCH v4 05/10] ARM: dts: sun8i: Add CPUCFG device node for A83T dtsi Mylène Josserand
2018-02-23 13:37 ` [PATCH v4 06/10] ARM: dts: sun8i: Add R_CPUCFG device node for the " Mylène Josserand
2018-02-23 13:37 ` [PATCH v4 07/10] ARM: dts: sun8i: a83t: Add CCI-400 node Mylène Josserand
2018-02-23 13:37 ` [PATCH v4 08/10] ARM: sunxi: smp: Move assembly code into a file Mylène Josserand
2018-02-23 15:09   ` Maxime Ripard
2018-03-01  8:21     ` Mylène Josserand
2018-02-26  6:22   ` kbuild test robot
2018-02-23 13:37 ` [PATCH v4 09/10] ARM: sunxi: smp: Move cpu_resume assembly entry into file Mylène Josserand
2018-02-23 13:37 ` [PATCH v4 10/10] ARM: sunxi: smp: Add initialization of CNTVOFF Mylène Josserand
2018-02-23 15:12   ` Maxime Ripard
2018-02-23 16:17   ` Chen-Yu Tsai
2018-02-26 10:12     ` Maxime Ripard
2018-02-26 10:25       ` Chen-Yu Tsai
2018-03-05  7:51         ` Mylène Josserand
2018-03-05  8:31           ` Maxime Ripard
2018-03-05 13:51             ` Mylène Josserand
2018-03-07 12:09     ` Marc Zyngier
2018-03-07 12:18   ` Marc Zyngier
2018-03-18 19:07     ` Mylène Josserand
2018-03-19  2:14       ` Chen-Yu Tsai
2018-03-19 13:55         ` Maxime Ripard
2018-03-19  9:21       ` Marc Zyngier
2018-03-19 10:59       ` Maxime Ripard

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=20180223133742.26044-2-mylene.josserand@bootlin.com \
    --to=mylene.josserand@bootlin.com \
    --cc=clabbe.montjoie@gmail.com \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=maxime.ripard@bootlin.com \
    --cc=quentin.schulz@bootlin.com \
    --cc=robh+dt@kernel.org \
    --cc=thomas.petazzoni@bootlin.com \
    --cc=wens@csie.org \
    /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