Commit 727b3ab4 authored by Herve Codina's avatar Herve Codina Committed by Christophe Leroy

soc: fsl: cpm1: qmc: Introduce qmc_init_resource() and its CPM1 version

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: default avatarHerve Codina <herve.codina@bootlin.com>
Reviewed-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Link: https://lore.kernel.org/r/20240808071132.149251-27-herve.codina@bootlin.comSigned-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
parent a13bf605
...@@ -1593,11 +1593,38 @@ static irqreturn_t qmc_irq_handler(int irq, void *priv) ...@@ -1593,11 +1593,38 @@ static irqreturn_t qmc_irq_handler(int irq, void *priv)
return IRQ_HANDLED; 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) static int qmc_probe(struct platform_device *pdev)
{ {
struct device_node *np = pdev->dev.of_node; struct device_node *np = pdev->dev.of_node;
unsigned int nb_chans; unsigned int nb_chans;
struct resource *res;
struct qmc *qmc; struct qmc *qmc;
int irq; int irq;
int ret; int ret;
...@@ -1620,21 +1647,9 @@ static int qmc_probe(struct platform_device *pdev) ...@@ -1620,21 +1647,9 @@ static int qmc_probe(struct platform_device *pdev)
"Failed to get TSA serial\n"); "Failed to get TSA serial\n");
} }
qmc->scc_regs = devm_platform_ioremap_resource_byname(pdev, "scc_regs"); ret = qmc_init_resources(qmc, pdev);
if (IS_ERR(qmc->scc_regs)) if (ret)
return PTR_ERR(qmc->scc_regs); return ret;
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);
/* Parse channels informationss */ /* Parse channels informationss */
ret = qmc_of_parse_chans(qmc, np); ret = qmc_of_parse_chans(qmc, np);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment