From: Christophe Leroy <christophe.leroy@csgroup.eu>
To: Herve Codina <herve.codina@bootlin.com>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Qiang Zhao <qiang.zhao@nxp.com>, Li Yang <leoyang.li@nxp.com>,
Mark Brown <broonie@kernel.org>
Cc: linuxppc-dev@lists.ozlabs.org,
linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v2 24/36] soc: fsl: cpm1: qmc: Introduce qmc_data structure
Date: Fri, 23 Aug 2024 10:11:16 +0200 [thread overview]
Message-ID: <ea65d6ca-d231-4bb7-a58c-cb2ffc421146@csgroup.eu> (raw)
In-Reply-To: <20240808071132.149251-25-herve.codina@bootlin.com>
Le 08/08/2024 à 09:11, Herve Codina a écrit :
> Current code handles CPM1 version of QMC. Some hardcoded values are used
> several times to initialize the QMC state machine. In the QUICC Engine
> (QE) version of QMC, these values are different.
>
> In order to prepare the support for the QE version of QMC and avoid the
> copy of the hardcoded values, introduce the qmc_data structure to define
> these version specific values.
>
> Signed-off-by: Herve Codina <herve.codina@bootlin.com>
Reviewed-by: Christophe Leroy <christophe.leroy@csgroup.eu>
> ---
> drivers/soc/fsl/qe/qmc.c | 69 ++++++++++++++++++++++++++--------------
> 1 file changed, 46 insertions(+), 23 deletions(-)
>
> diff --git a/drivers/soc/fsl/qe/qmc.c b/drivers/soc/fsl/qe/qmc.c
> index 3736a8e4575e..85fc86f91806 100644
> --- a/drivers/soc/fsl/qe/qmc.c
> +++ b/drivers/soc/fsl/qe/qmc.c
> @@ -215,8 +215,17 @@ struct qmc_chan {
> bool is_rx_stopped;
> };
>
> +struct qmc_data {
> + u32 tstate; /* Initial TSTATE value */
> + u32 rstate; /* Initial RSTATE value */
> + u32 zistate; /* Initial ZISTATE value */
> + u32 zdstate_hdlc; /* Initial ZDSTATE value (HDLC mode) */
> + u32 zdstate_transp; /* Initial ZDSTATE value (Transparent mode) */
> +};
> +
> struct qmc {
> struct device *dev;
> + const struct qmc_data *data;
> struct tsa_serial *tsa_serial;
> void __iomem *scc_regs;
> void __iomem *scc_pram;
> @@ -543,11 +552,11 @@ int qmc_chan_read_submit(struct qmc_chan *chan, dma_addr_t addr, size_t length,
> /* Restart receiver if needed */
> if (chan->is_rx_halted && !chan->is_rx_stopped) {
> /* Restart receiver */
> - if (chan->mode == QMC_TRANSPARENT)
> - qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, 0x18000080);
> - else
> - qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, 0x00000080);
> - qmc_write32(chan->s_param + QMC_SPE_RSTATE, 0x31000000);
> + qmc_write32(chan->s_param + QMC_SPE_ZDSTATE,
> + chan->mode == QMC_TRANSPARENT ?
> + chan->qmc->data->zdstate_transp :
> + chan->qmc->data->zdstate_hdlc);
> + qmc_write32(chan->s_param + QMC_SPE_RSTATE, chan->qmc->data->rstate);
> chan->is_rx_halted = false;
> }
> chan->rx_pending++;
> @@ -971,11 +980,11 @@ static int qmc_chan_start_rx(struct qmc_chan *chan)
> }
>
> /* Restart the receiver */
> - if (chan->mode == QMC_TRANSPARENT)
> - qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, 0x18000080);
> - else
> - qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, 0x00000080);
> - qmc_write32(chan->s_param + QMC_SPE_RSTATE, 0x31000000);
> + qmc_write32(chan->s_param + QMC_SPE_ZDSTATE,
> + chan->mode == QMC_TRANSPARENT ?
> + chan->qmc->data->zdstate_transp :
> + chan->qmc->data->zdstate_hdlc);
> + qmc_write32(chan->s_param + QMC_SPE_RSTATE, chan->qmc->data->rstate);
> chan->is_rx_halted = false;
>
> chan->is_rx_stopped = false;
> @@ -1121,8 +1130,8 @@ static void qmc_chan_reset_tx(struct qmc_chan *chan)
> qmc_read16(chan->s_param + QMC_SPE_TBASE));
>
> /* Reset TSTATE and ZISTATE to their initial value */
> - qmc_write32(chan->s_param + QMC_SPE_TSTATE, 0x30000000);
> - qmc_write32(chan->s_param + QMC_SPE_ZISTATE, 0x00000100);
> + qmc_write32(chan->s_param + QMC_SPE_TSTATE, chan->qmc->data->tstate);
> + qmc_write32(chan->s_param + QMC_SPE_ZISTATE, chan->qmc->data->zistate);
>
> spin_unlock_irqrestore(&chan->tx_lock, flags);
> }
> @@ -1393,11 +1402,11 @@ static int qmc_setup_chan(struct qmc *qmc, struct qmc_chan *chan)
> val = ((chan->id * (QMC_NB_TXBDS + QMC_NB_RXBDS)) + QMC_NB_TXBDS) * sizeof(cbd_t);
> qmc_write16(chan->s_param + QMC_SPE_RBASE, val);
> qmc_write16(chan->s_param + QMC_SPE_RBPTR, val);
> - qmc_write32(chan->s_param + QMC_SPE_TSTATE, 0x30000000);
> - qmc_write32(chan->s_param + QMC_SPE_RSTATE, 0x31000000);
> - qmc_write32(chan->s_param + QMC_SPE_ZISTATE, 0x00000100);
> + qmc_write32(chan->s_param + QMC_SPE_TSTATE, chan->qmc->data->tstate);
> + qmc_write32(chan->s_param + QMC_SPE_RSTATE, chan->qmc->data->rstate);
> + qmc_write32(chan->s_param + QMC_SPE_ZISTATE, chan->qmc->data->zistate);
> if (chan->mode == QMC_TRANSPARENT) {
> - qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, 0x18000080);
> + qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, chan->qmc->data->zdstate_transp);
> qmc_write16(chan->s_param + QMC_SPE_TMRBLR, 60);
> val = QMC_SPE_CHAMR_MODE_TRANSP;
> if (chan->is_reverse_data)
> @@ -1407,7 +1416,7 @@ static int qmc_setup_chan(struct qmc *qmc, struct qmc_chan *chan)
> if (ret)
> return ret;
> } else {
> - qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, 0x00000080);
> + qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, chan->qmc->data->zdstate_hdlc);
> qmc_write16(chan->s_param + QMC_SPE_MFLR, 60);
> qmc_write16(chan->s_param + QMC_SPE_CHAMR,
> QMC_SPE_CHAMR_MODE_HDLC | QMC_SPE_CHAMR_HDLC_IDLM);
> @@ -1535,11 +1544,12 @@ static void qmc_irq_gint(struct qmc *qmc)
> /* Restart the receiver if needed */
> spin_lock_irqsave(&chan->rx_lock, flags);
> if (chan->rx_pending && !chan->is_rx_stopped) {
> - if (chan->mode == QMC_TRANSPARENT)
> - qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, 0x18000080);
> - else
> - qmc_write32(chan->s_param + QMC_SPE_ZDSTATE, 0x00000080);
> - qmc_write32(chan->s_param + QMC_SPE_RSTATE, 0x31000000);
> + qmc_write32(chan->s_param + QMC_SPE_ZDSTATE,
> + chan->mode == QMC_TRANSPARENT ?
> + chan->qmc->data->zdstate_transp :
> + chan->qmc->data->zdstate_hdlc);
> + qmc_write32(chan->s_param + QMC_SPE_RSTATE,
> + chan->qmc->data->rstate);
> chan->is_rx_halted = false;
> } else {
> chan->is_rx_halted = true;
> @@ -1597,6 +1607,11 @@ static int qmc_probe(struct platform_device *pdev)
> return -ENOMEM;
>
> qmc->dev = &pdev->dev;
> + qmc->data = of_device_get_match_data(&pdev->dev);
> + if (!qmc->data) {
> + dev_err(qmc->dev, "Missing match data\n");
> + return -EINVAL;
> + }
> INIT_LIST_HEAD(&qmc->chan_head);
>
> qmc->scc_regs = devm_platform_ioremap_resource_byname(pdev, "scc_regs");
> @@ -1752,8 +1767,16 @@ static void qmc_remove(struct platform_device *pdev)
> tsa_serial_disconnect(qmc->tsa_serial);
> }
>
> +static const struct qmc_data qmc_data_cpm1 = {
> + .tstate = 0x30000000,
> + .rstate = 0x31000000,
> + .zistate = 0x00000100,
> + .zdstate_hdlc = 0x00000080,
> + .zdstate_transp = 0x18000080,
> +};
> +
> static const struct of_device_id qmc_id_table[] = {
> - { .compatible = "fsl,cpm1-scc-qmc" },
> + { .compatible = "fsl,cpm1-scc-qmc", .data = &qmc_data_cpm1 },
> {} /* sentinel */
> };
> MODULE_DEVICE_TABLE(of, qmc_id_table);
next prev parent reply other threads:[~2024-08-23 8:11 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-08 7:10 [PATCH v2 00/36] soc: fsl: Add support for QUICC Engine TSA and QMC Herve Codina
2024-08-08 7:10 ` [PATCH v2 01/36] soc: fsl: cpm1: qmc: Update TRNSYNC only in transparent mode Herve Codina
2024-08-23 8:03 ` Christophe Leroy
2024-08-08 7:10 ` [PATCH v2 02/36] soc: fsl: cpm1: qmc: Enable TRNSYNC only when needed Herve Codina
2024-08-23 8:03 ` Christophe Leroy
2024-08-08 7:10 ` [PATCH v2 03/36] soc: fsl: cpm1: tsa: Fix tsa_write8() Herve Codina
2024-08-23 8:04 ` Christophe Leroy
2024-08-08 7:10 ` [PATCH v2 04/36] soc: fsl: cpm1: tsa: Use BIT(), GENMASK() and FIELD_PREP() macros Herve Codina
2024-08-23 8:04 ` Christophe Leroy
2024-08-08 7:10 ` [PATCH v2 05/36] soc: fsl: cpm1: tsa: Fix blank line and spaces Herve Codina
2024-08-23 8:04 ` Christophe Leroy
2024-08-08 7:10 ` [PATCH v2 06/36] soc: fsl: cpm1: tsa: Add missing spinlock comment Herve Codina
2024-08-23 8:05 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 07/36] dt-bindings: soc: fsl: cpm_qe: Add QUICC Engine (QE) TSA controller Herve Codina
2024-08-13 19:01 ` Rob Herring (Arm)
2024-08-23 8:05 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 08/36] soc: fsl: cpm1: tsa: Remove unused registers offset definition Herve Codina
2024-08-23 8:05 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 09/36] soc: fsl: cpm1: tsa: Use ARRAY_SIZE() instead of hardcoded integer values Herve Codina
2024-08-23 8:05 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 10/36] soc: fsl: cpm1: tsa: Make SIRAM entries specific to CPM1 Herve Codina
2024-08-23 8:06 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 11/36] soc: fsl: cpm1: tsa: Introduce tsa_setup() and its CPM1 compatible version Herve Codina
2024-08-23 8:06 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 12/36] soc: fsl: cpm1: tsa: Isolate specific CPM1 part from tsa_serial_{dis}connect() Herve Codina
2024-08-23 8:07 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 13/36] soc: fsl: cpm1: tsa: Introduce tsa_version Herve Codina
2024-08-23 8:08 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 14/36] soc: fsl: cpm1: tsa: Add support for QUICC Engine (QE) implementation Herve Codina
2024-08-23 8:08 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 15/36] MAINTAINERS: Add QE files related to the Freescale TSA controller Herve Codina
2024-08-23 8:08 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 16/36] soc: fsl: cpm1: tsa: Introduce tsa_serial_get_num() Herve Codina
2024-08-23 8:09 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 17/36] soc: fsl: cpm1: qmc: Rename QMC_TSA_MASK Herve Codina
2024-08-23 8:09 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 18/36] soc: fsl: cpm1: qmc: Use BIT(), GENMASK() and FIELD_PREP() macros Herve Codina
2024-08-23 8:07 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 19/36] soc: fsl: cpm1: qmc: Fix blank line and spaces Herve Codina
2024-08-23 8:07 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 20/36] soc: fsl: cpm1: qmc: Remove unneeded parenthesis Herve Codina
2024-08-23 8:09 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 21/36] soc: fsl: cpm1: qmc: Fix 'transmiter' typo Herve Codina
2024-08-23 8:10 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 22/36] soc: fsl: cpm1: qmc: Add missing spinlock comment Herve Codina
2024-08-23 8:10 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 23/36] dt-bindings: soc: fsl: cpm_qe: Add QUICC Engine (QE) QMC controller Herve Codina
2024-08-13 19:12 ` Rob Herring
2024-08-23 8:11 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 24/36] soc: fsl: cpm1: qmc: Introduce qmc_data structure Herve Codina
2024-08-23 8:11 ` Christophe Leroy [this message]
2024-08-08 7:11 ` [PATCH v2 25/36] soc: fsl: cpm1: qmc: Re-order probe() operations Herve Codina
2024-08-23 8:11 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 26/36] soc: fsl: cpm1: qmc: Introduce qmc_init_resource() and its CPM1 version Herve Codina
2024-08-23 8:11 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 27/36] soc: fsl: cpm1: qmc: Introduce qmc_{init,exit}_xcc() and their " Herve Codina
2024-08-23 8:12 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 28/36] soc: fsl: cpm1: qmc: Rename qmc_chan_command() Herve Codina
2024-08-23 8:12 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 29/36] soc: fsl: cpm1: qmc: Handle RPACK initialization Herve Codina
2024-08-23 8:13 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 30/36] soc: fsl: cpm1: qmc: Rename SCC_GSMRL_MODE_QMC Herve Codina
2024-08-23 8:13 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 31/36] soc: fsl: cpm1: qmc: Introduce qmc_version Herve Codina
2024-08-23 8:13 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 32/36] soc: fsl: qe: Add resource-managed muram allocators Herve Codina
2024-08-23 8:13 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 33/36] soc: fsl: qe: Add missing PUSHSCHED command Herve Codina
2024-08-23 8:14 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 34/36] soc: fsl: cpm1: qmc: Add support for QUICC Engine (QE) implementation Herve Codina
2024-08-23 8:14 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 35/36] soc: fsl: cpm1: qmc: Handle QUICC Engine (QE) soft-qmc firmware Herve Codina
2024-08-23 8:14 ` Christophe Leroy
2024-08-08 7:11 ` [PATCH v2 36/36] MAINTAINERS: Add QE files related to the Freescale QMC controller Herve Codina
2024-08-23 8:15 ` Christophe Leroy
2024-09-03 8:44 ` [PATCH v2 00/36] soc: fsl: Add support for QUICC Engine TSA and QMC Christophe Leroy
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=ea65d6ca-d231-4bb7-a58c-cb2ffc421146@csgroup.eu \
--to=christophe.leroy@csgroup.eu \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=herve.codina@bootlin.com \
--cc=krzk+dt@kernel.org \
--cc=leoyang.li@nxp.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=qiang.zhao@nxp.com \
--cc=robh@kernel.org \
--cc=thomas.petazzoni@bootlin.com \
/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
all inboxes | Powered by JetHome®