2023-07-26 15:36:20

by Herve Codina

[permalink] [raw]
Subject: [PATCH v2 08/28] soc: fsl: cpm1: qmc: Introduce available timeslots masks

Available timeslots masks define timeslots available for the related
channel. These timeslots are defined by the QMC binding.

Timeslots used are initialized to available timeslots but can be a
subset of available timeslots.
This prepares the dynamic timeslots management (ie. changing timeslots
at runtime).

Signed-off-by: Herve Codina <[email protected]>
---
drivers/soc/fsl/qe/qmc.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/soc/fsl/qe/qmc.c b/drivers/soc/fsl/qe/qmc.c
index 2d2a9d88ba6c..21ad7e79e7bd 100644
--- a/drivers/soc/fsl/qe/qmc.c
+++ b/drivers/soc/fsl/qe/qmc.c
@@ -177,7 +177,9 @@ struct qmc_chan {
struct qmc *qmc;
void __iomem *s_param;
enum qmc_mode mode;
+ u64 tx_ts_mask_avail;
u64 tx_ts_mask;
+ u64 rx_ts_mask_avail;
u64 rx_ts_mask;
bool is_reverse_data;

@@ -875,7 +877,8 @@ static int qmc_of_parse_chans(struct qmc *qmc, struct device_node *np)
of_node_put(chan_np);
return ret;
}
- chan->tx_ts_mask = ts_mask;
+ chan->tx_ts_mask_avail = ts_mask;
+ chan->tx_ts_mask = chan->tx_ts_mask_avail;

ret = of_property_read_u64(chan_np, "fsl,rx-ts-mask", &ts_mask);
if (ret) {
@@ -884,7 +887,8 @@ static int qmc_of_parse_chans(struct qmc *qmc, struct device_node *np)
of_node_put(chan_np);
return ret;
}
- chan->rx_ts_mask = ts_mask;
+ chan->rx_ts_mask_avail = ts_mask;
+ chan->rx_ts_mask = chan->rx_ts_mask_avail;

mode = "transparent";
ret = of_property_read_string(chan_np, "fsl,operational-mode", &mode);
--
2.41.0



2023-08-01 10:50:27

by Andrew Lunn

[permalink] [raw]
Subject: Re: [PATCH v2 08/28] soc: fsl: cpm1: qmc: Introduce available timeslots masks

On Wed, Jul 26, 2023 at 05:02:04PM +0200, Herve Codina wrote:
> Available timeslots masks define timeslots available for the related
> channel. These timeslots are defined by the QMC binding.
>
> Timeslots used are initialized to available timeslots but can be a
> subset of available timeslots.
> This prepares the dynamic timeslots management (ie. changing timeslots
> at runtime).
>
> Signed-off-by: Herve Codina <[email protected]>
> ---
> drivers/soc/fsl/qe/qmc.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/soc/fsl/qe/qmc.c b/drivers/soc/fsl/qe/qmc.c
> index 2d2a9d88ba6c..21ad7e79e7bd 100644
> --- a/drivers/soc/fsl/qe/qmc.c
> +++ b/drivers/soc/fsl/qe/qmc.c
> @@ -177,7 +177,9 @@ struct qmc_chan {
> struct qmc *qmc;
> void __iomem *s_param;
> enum qmc_mode mode;
> + u64 tx_ts_mask_avail;
> u64 tx_ts_mask;
> + u64 rx_ts_mask_avail;
> u64 rx_ts_mask;

Is this for E1? So there is a maximum of 32 slots? A u32 would be
sufficient i think?

Andrew

2023-08-01 11:08:22

by Herve Codina

[permalink] [raw]
Subject: Re: [PATCH v2 08/28] soc: fsl: cpm1: qmc: Introduce available timeslots masks

On Tue, 1 Aug 2023 11:33:39 +0200
Andrew Lunn <[email protected]> wrote:

> On Wed, Jul 26, 2023 at 05:02:04PM +0200, Herve Codina wrote:
> > Available timeslots masks define timeslots available for the related
> > channel. These timeslots are defined by the QMC binding.
> >
> > Timeslots used are initialized to available timeslots but can be a
> > subset of available timeslots.
> > This prepares the dynamic timeslots management (ie. changing timeslots
> > at runtime).
> >
> > Signed-off-by: Herve Codina <[email protected]>
> > ---
> > drivers/soc/fsl/qe/qmc.c | 8 ++++++--
> > 1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/drivers/soc/fsl/qe/qmc.c b/drivers/soc/fsl/qe/qmc.c
> > index 2d2a9d88ba6c..21ad7e79e7bd 100644
> > --- a/drivers/soc/fsl/qe/qmc.c
> > +++ b/drivers/soc/fsl/qe/qmc.c
> > @@ -177,7 +177,9 @@ struct qmc_chan {
> > struct qmc *qmc;
> > void __iomem *s_param;
> > enum qmc_mode mode;
> > + u64 tx_ts_mask_avail;
> > u64 tx_ts_mask;
> > + u64 rx_ts_mask_avail;
> > u64 rx_ts_mask;
>
> Is this for E1? So there is a maximum of 32 slots? A u32 would be
> sufficient i think?
>

The QMC can use up to 64 slots. So masks related to the QMC are on 64bits.
These masks are not specific to the E1 framer but really related to the QMC
capabilities.

Regards,
Hervé

2023-08-08 17:40:31

by Christophe Leroy

[permalink] [raw]
Subject: Re: [PATCH v2 08/28] soc: fsl: cpm1: qmc: Introduce available timeslots masks



Le 26/07/2023 à 17:02, Herve Codina a écrit :
> Available timeslots masks define timeslots available for the related
> channel. These timeslots are defined by the QMC binding.
>
> Timeslots used are initialized to available timeslots but can be a
> subset of available timeslots.
> This prepares the dynamic timeslots management (ie. changing timeslots
> at runtime).
>
> Signed-off-by: Herve Codina <[email protected]>

Reviewed-by: Christophe Leroy <[email protected]>

> ---
> drivers/soc/fsl/qe/qmc.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/soc/fsl/qe/qmc.c b/drivers/soc/fsl/qe/qmc.c
> index 2d2a9d88ba6c..21ad7e79e7bd 100644
> --- a/drivers/soc/fsl/qe/qmc.c
> +++ b/drivers/soc/fsl/qe/qmc.c
> @@ -177,7 +177,9 @@ struct qmc_chan {
> struct qmc *qmc;
> void __iomem *s_param;
> enum qmc_mode mode;
> + u64 tx_ts_mask_avail;
> u64 tx_ts_mask;
> + u64 rx_ts_mask_avail;
> u64 rx_ts_mask;
> bool is_reverse_data;
>
> @@ -875,7 +877,8 @@ static int qmc_of_parse_chans(struct qmc *qmc, struct device_node *np)
> of_node_put(chan_np);
> return ret;
> }
> - chan->tx_ts_mask = ts_mask;
> + chan->tx_ts_mask_avail = ts_mask;
> + chan->tx_ts_mask = chan->tx_ts_mask_avail;
>
> ret = of_property_read_u64(chan_np, "fsl,rx-ts-mask", &ts_mask);
> if (ret) {
> @@ -884,7 +887,8 @@ static int qmc_of_parse_chans(struct qmc *qmc, struct device_node *np)
> of_node_put(chan_np);
> return ret;
> }
> - chan->rx_ts_mask = ts_mask;
> + chan->rx_ts_mask_avail = ts_mask;
> + chan->rx_ts_mask = chan->rx_ts_mask_avail;
>
> mode = "transparent";
> ret = of_property_read_string(chan_np, "fsl,operational-mode", &mode);