diff mbox series

[v2,26/36] soc: fsl: cpm1: qmc: Introduce qmc_init_resource() and its CPM1 version

Message ID 20240808071132.149251-27-herve.codina@bootlin.com (mailing list archive)
State Accepted
Delegated to: Christophe Leroy
Headers show
Series soc: fsl: Add support for QUICC Engine TSA and QMC | expand

Commit Message

Herve Codina Aug. 8, 2024, 7:11 a.m. UTC
Current code handles the CPM1 version of QMC. Resources initialisations
(i.e. retrieving base addresses and offsets of different parts) will
be slightly different in the QUICC Engine (QE) version. Indeed, in QE
version, some resources need to be allocated and are no more "staticaly"
defined.

In order to prepare the support for QE version, introduce
qmc_init_resource() to initialize those resources and isolate the CPM1
specific operations in a specific function.

Signed-off-by: Herve Codina <herve.codina@bootlin.com>
---
 drivers/soc/fsl/qe/qmc.c | 47 ++++++++++++++++++++++++++--------------
 1 file changed, 31 insertions(+), 16 deletions(-)

Comments

Christophe Leroy Aug. 23, 2024, 8:11 a.m. UTC | #1
Le 08/08/2024 à 09:11, Herve Codina a écrit :
> Current code handles the CPM1 version of QMC. Resources initialisations
> (i.e. retrieving base addresses and offsets of different parts) will
> be slightly different in the QUICC Engine (QE) version. Indeed, in QE
> version, some resources need to be allocated and are no more "staticaly"
> defined.
> 
> In order to prepare the support for QE version, introduce
> qmc_init_resource() to initialize those resources and isolate the CPM1
> specific operations in a specific function.
> 
> Signed-off-by: Herve Codina <herve.codina@bootlin.com>

Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>

> ---
>   drivers/soc/fsl/qe/qmc.c | 47 ++++++++++++++++++++++++++--------------
>   1 file changed, 31 insertions(+), 16 deletions(-)
> 
> diff --git a/drivers/soc/fsl/qe/qmc.c b/drivers/soc/fsl/qe/qmc.c
> index 8dd0f8fc7b08..eacc7dd2be53 100644
> --- a/drivers/soc/fsl/qe/qmc.c
> +++ b/drivers/soc/fsl/qe/qmc.c
> @@ -1593,11 +1593,38 @@ static irqreturn_t qmc_irq_handler(int irq, void *priv)
>   	return IRQ_HANDLED;
>   }
>   
> +static int qmc_cpm1_init_resources(struct qmc *qmc, struct platform_device *pdev)
> +{
> +	struct resource *res;
> +
> +	qmc->scc_regs = devm_platform_ioremap_resource_byname(pdev, "scc_regs");
> +	if (IS_ERR(qmc->scc_regs))
> +		return PTR_ERR(qmc->scc_regs);
> +
> +	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "scc_pram");
> +	if (!res)
> +		return -EINVAL;
> +	qmc->scc_pram_offset = res->start - get_immrbase();
> +	qmc->scc_pram = devm_ioremap_resource(qmc->dev, res);
> +	if (IS_ERR(qmc->scc_pram))
> +		return PTR_ERR(qmc->scc_pram);
> +
> +	qmc->dpram  = devm_platform_ioremap_resource_byname(pdev, "dpram");
> +	if (IS_ERR(qmc->dpram))
> +		return PTR_ERR(qmc->dpram);
> +
> +	return 0;
> +}
> +
> +static int qmc_init_resources(struct qmc *qmc, struct platform_device *pdev)
> +{
> +	return qmc_cpm1_init_resources(qmc, pdev);
> +}
> +
>   static int qmc_probe(struct platform_device *pdev)
>   {
>   	struct device_node *np = pdev->dev.of_node;
>   	unsigned int nb_chans;
> -	struct resource *res;
>   	struct qmc *qmc;
>   	int irq;
>   	int ret;
> @@ -1620,21 +1647,9 @@ static int qmc_probe(struct platform_device *pdev)
>   				     "Failed to get TSA serial\n");
>   	}
>   
> -	qmc->scc_regs = devm_platform_ioremap_resource_byname(pdev, "scc_regs");
> -	if (IS_ERR(qmc->scc_regs))
> -		return PTR_ERR(qmc->scc_regs);
> -
> -	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "scc_pram");
> -	if (!res)
> -		return -EINVAL;
> -	qmc->scc_pram_offset = res->start - get_immrbase();
> -	qmc->scc_pram = devm_ioremap_resource(qmc->dev, res);
> -	if (IS_ERR(qmc->scc_pram))
> -		return PTR_ERR(qmc->scc_pram);
> -
> -	qmc->dpram  = devm_platform_ioremap_resource_byname(pdev, "dpram");
> -	if (IS_ERR(qmc->dpram))
> -		return PTR_ERR(qmc->dpram);
> +	ret = qmc_init_resources(qmc, pdev);
> +	if (ret)
> +		return ret;
>   
>   	/* Parse channels informationss */
>   	ret = qmc_of_parse_chans(qmc, np);
diff mbox series

Patch

diff --git a/drivers/soc/fsl/qe/qmc.c b/drivers/soc/fsl/qe/qmc.c
index 8dd0f8fc7b08..eacc7dd2be53 100644
--- a/drivers/soc/fsl/qe/qmc.c
+++ b/drivers/soc/fsl/qe/qmc.c
@@ -1593,11 +1593,38 @@  static irqreturn_t qmc_irq_handler(int irq, void *priv)
 	return IRQ_HANDLED;
 }
 
+static int qmc_cpm1_init_resources(struct qmc *qmc, struct platform_device *pdev)
+{
+	struct resource *res;
+
+	qmc->scc_regs = devm_platform_ioremap_resource_byname(pdev, "scc_regs");
+	if (IS_ERR(qmc->scc_regs))
+		return PTR_ERR(qmc->scc_regs);
+
+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "scc_pram");
+	if (!res)
+		return -EINVAL;
+	qmc->scc_pram_offset = res->start - get_immrbase();
+	qmc->scc_pram = devm_ioremap_resource(qmc->dev, res);
+	if (IS_ERR(qmc->scc_pram))
+		return PTR_ERR(qmc->scc_pram);
+
+	qmc->dpram  = devm_platform_ioremap_resource_byname(pdev, "dpram");
+	if (IS_ERR(qmc->dpram))
+		return PTR_ERR(qmc->dpram);
+
+	return 0;
+}
+
+static int qmc_init_resources(struct qmc *qmc, struct platform_device *pdev)
+{
+	return qmc_cpm1_init_resources(qmc, pdev);
+}
+
 static int qmc_probe(struct platform_device *pdev)
 {
 	struct device_node *np = pdev->dev.of_node;
 	unsigned int nb_chans;
-	struct resource *res;
 	struct qmc *qmc;
 	int irq;
 	int ret;
@@ -1620,21 +1647,9 @@  static int qmc_probe(struct platform_device *pdev)
 				     "Failed to get TSA serial\n");
 	}
 
-	qmc->scc_regs = devm_platform_ioremap_resource_byname(pdev, "scc_regs");
-	if (IS_ERR(qmc->scc_regs))
-		return PTR_ERR(qmc->scc_regs);
-
-	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "scc_pram");
-	if (!res)
-		return -EINVAL;
-	qmc->scc_pram_offset = res->start - get_immrbase();
-	qmc->scc_pram = devm_ioremap_resource(qmc->dev, res);
-	if (IS_ERR(qmc->scc_pram))
-		return PTR_ERR(qmc->scc_pram);
-
-	qmc->dpram  = devm_platform_ioremap_resource_byname(pdev, "dpram");
-	if (IS_ERR(qmc->dpram))
-		return PTR_ERR(qmc->dpram);
+	ret = qmc_init_resources(qmc, pdev);
+	if (ret)
+		return ret;
 
 	/* Parse channels informationss */
 	ret = qmc_of_parse_chans(qmc, np);