All of lore.kernel.org
 help / color / mirror / Atom feed
* Add OEM extension for clk-scmi
@ 2025-09-30 13:22 Peng Fan
  2025-10-06 10:30 ` Sebin Francis
  2025-10-06 15:34 ` Cristian Marussi
  0 siblings, 2 replies; 4+ messages in thread
From: Peng Fan @ 2025-09-30 13:22 UTC (permalink / raw)
  To: Sudeep Holla, Cristian Marussi, Sebin Francis, Stephen Boyd
  Cc: arm-scmi@vger.kernel.org

Hi All,

This is to discuss the spread spectrum support for clk-scmi.  I think
it is hard to provide a generic framework from scmi core level.
Because oem extension varies per protocol. And most of the
code added is in consumer driver side saying clk-scmi.c not
the firmware/arm_scmi/clock.c.

Based on above, I am thinking to follow what arm-smmu
implements(arm_smmu_impl_init), by calling a function
scmi_clk_oem_init in probe.

And define a generic feature macro in enum scmi_clk_feats:
SCMI_CLK_EXT_OEM_SSC_SUPPORTED,

Also define a new structure for OEM stuff:
+struct scmi_clk_plat {
+       int (*query_oem_feats)(const struct scmi_protocol_handle *ph,
+                              u32 id, unsigned long *feats_key);
+       int (*set_spread_spectrum)(struct clk_hw *hw,
+                                  const struct clk_spread_spectrum *ss_conf);
+};
+

Add a new file clk-scmi-oem for up plat hooks implementation.

And add clk-scmi.h to move some code that would be shared
between clk-scmi.c and clk-scmi-oem.c

This is just an idea, more code pieces as below, this does not
pass compiling, just an idea in my mind.

If you think this is feasible, I will do a formal patch.

BTW: I will be on holiday in the following week. I will check
email from time to time, but may not respond in time.
 
drivers/clk/clk-scmi-oem.c
static int scmi_clk_imx_set_spread_spectrum(struct clk_hw *hw,
                                            struct clk_spread_spectrum *ss_conf)
{
        /* TODO */
        return 0;
}

static int scmi_clk_imx_query_oem_feats(const struct scmi_protocol_handle *ph,
                                        u32 id, unsigned long *feats_key)
{
        /* TODO */
        if ( the clk supports SSC)
              *feats_key |= SCMI_CLK_EXT_OEM_SSC_SUPPORTED;
        return 0;
}

static const struct scmi_clk_plat scmi_clk_imx_plat = {
        .query_ext_oem_feats = scmi_clk_imx_query_oem_feats,
        .set_spread_spectrum = scmi_clk_imx_set_spread_spectrum,
};

int scmi_clk_oem_init(struct scmi_device *dev, struct scmi_clk_plat *data)
{
        if (!strcmp(handle->version->vendor_id, SCMI_IMX_VENDOR) &&
            !strcmp(handle->version->sub_vendor_id, SCMI_IMX_SUBVENDOR)) {
                *data = scmi_clk_imx_plat;
        } else {
                /* Other SoC vendors (TI) */
        }

        return 0;
}

In clk-scmi.c, using the hook to update oem feats
@@ -375,6 +388,9 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable,
                                                 &val, NULL, false);
                if (!ret)
                        feats_key |= BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED);
+
+               if (data->query_ext_oem_feats)
+                       data->query_ext_oem_feats(sclk->ph, sclk->id, &feats_key);
        }

@@ -313,11 +322,15 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key)
                ops->set_duty_cycle = scmi_clk_set_duty_cycle;
        }
 
+       if (feats_key & BIT(SCMI_CLK_EXT_OEM_SSC_SUPPORTED))
+               ops->set_spread_spectrum = data->set_spread_spectrum;
+
        return ops;
 }

Thanks,
Peng.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Add OEM extension for clk-scmi
  2025-09-30 13:22 Add OEM extension for clk-scmi Peng Fan
@ 2025-10-06 10:30 ` Sebin Francis
  2025-10-06 15:34 ` Cristian Marussi
  1 sibling, 0 replies; 4+ messages in thread
From: Sebin Francis @ 2025-10-06 10:30 UTC (permalink / raw)
  To: Peng Fan, Sudeep Holla, Cristian Marussi, Stephen Boyd
  Cc: arm-scmi@vger.kernel.org

Hi Peng

On 30/09/25 18:52, Peng Fan wrote:
> Hi All,
> 
> This is to discuss the spread spectrum support for clk-scmi.  I think
> it is hard to provide a generic framework from scmi core level.
> Because oem extension varies per protocol. And most of the
> code added is in consumer driver side saying clk-scmi.c not
> the firmware/arm_scmi/clock.c.
> 
> Based on above, I am thinking to follow what arm-smmu
> implements(arm_smmu_impl_init), by calling a function
> scmi_clk_oem_init in probe.
> 
> And define a generic feature macro in enum scmi_clk_feats:
> SCMI_CLK_EXT_OEM_SSC_SUPPORTED,
> 
> Also define a new structure for OEM stuff:
> +struct scmi_clk_plat {
> +       int (*query_oem_feats)(const struct scmi_protocol_handle *ph,
> +                              u32 id, unsigned long *feats_key);
> +       int (*set_spread_spectrum)(struct clk_hw *hw,
> +                                  const struct clk_spread_spectrum *ss_conf);
> +};
> +
> 
> Add a new file clk-scmi-oem for up plat hooks implementation.
> 
> And add clk-scmi.h to move some code that would be shared
> between clk-scmi.c and clk-scmi-oem.c
> 
> This is just an idea, more code pieces as below, this does not
> pass compiling, just an idea in my mind.
> 
> If you think this is feasible, I will do a formal patch.
> 
> BTW: I will be on holiday in the following week. I will check
> email from time to time, but may not respond in time.
>   
> drivers/clk/clk-scmi-oem.c
> static int scmi_clk_imx_set_spread_spectrum(struct clk_hw *hw,
>                                              struct clk_spread_spectrum *ss_conf)
> {
>          /* TODO */
>          return 0;
> }
> 
> static int scmi_clk_imx_query_oem_feats(const struct scmi_protocol_handle *ph,
>                                          u32 id, unsigned long *feats_key)
> {
>          /* TODO */
>          if ( the clk supports SSC)
>                *feats_key |= SCMI_CLK_EXT_OEM_SSC_SUPPORTED;
>          return 0;
> }
> 
> static const struct scmi_clk_plat scmi_clk_imx_plat = {
>          .query_ext_oem_feats = scmi_clk_imx_query_oem_feats,
>          .set_spread_spectrum = scmi_clk_imx_set_spread_spectrum,
> };
> 
> int scmi_clk_oem_init(struct scmi_device *dev, struct scmi_clk_plat *data)
> {
>          if (!strcmp(handle->version->vendor_id, SCMI_IMX_VENDOR) &&
>              !strcmp(handle->version->sub_vendor_id, SCMI_IMX_SUBVENDOR)) {
>                  *data = scmi_clk_imx_plat;
>          } else {
>                  /* Other SoC vendors (TI) */
>          }
> 
>          return 0;
> }
> 
> In clk-scmi.c, using the hook to update oem feats
> @@ -375,6 +388,9 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable,
>                                                   &val, NULL, false);
>                  if (!ret)
>                          feats_key |= BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED);
> +
> +               if (data->query_ext_oem_feats)
> +                       data->query_ext_oem_feats(sclk->ph, sclk->id, &feats_key);
>          }
> 
> @@ -313,11 +322,15 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key)
>                  ops->set_duty_cycle = scmi_clk_set_duty_cycle;
>          }
>   
> +       if (feats_key & BIT(SCMI_CLK_EXT_OEM_SSC_SUPPORTED))
> +               ops->set_spread_spectrum = data->set_spread_spectrum;
> +
>          return ops;
>   }
> 
> Thanks,
> Peng.

Thanks for proposing the new approach. As approach gives each OEM add 
there plat specific handlers, this approach looks good to me.

Thanks
Sebin

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Add OEM extension for clk-scmi
  2025-09-30 13:22 Add OEM extension for clk-scmi Peng Fan
  2025-10-06 10:30 ` Sebin Francis
@ 2025-10-06 15:34 ` Cristian Marussi
  2025-10-08 12:35   ` Peng Fan
  1 sibling, 1 reply; 4+ messages in thread
From: Cristian Marussi @ 2025-10-06 15:34 UTC (permalink / raw)
  To: Peng Fan
  Cc: Sudeep Holla, Cristian Marussi, Sebin Francis, Stephen Boyd,
	arm-scmi@vger.kernel.org

On Tue, Sep 30, 2025 at 01:22:15PM +0000, Peng Fan wrote:
> Hi All,
> 

Hi,

> This is to discuss the spread spectrum support for clk-scmi.  I think
> it is hard to provide a generic framework from scmi core level.
> Because oem extension varies per protocol. And most of the
> code added is in consumer driver side saying clk-scmi.c not
> the firmware/arm_scmi/clock.c.
> 
> Based on above, I am thinking to follow what arm-smmu
> implements(arm_smmu_impl_init), by calling a function
> scmi_clk_oem_init in probe.
> 
> And define a generic feature macro in enum scmi_clk_feats:
> SCMI_CLK_EXT_OEM_SSC_SUPPORTED,
> 
> Also define a new structure for OEM stuff:
> +struct scmi_clk_plat {
> +       int (*query_oem_feats)(const struct scmi_protocol_handle *ph,
> +                              u32 id, unsigned long *feats_key);
> +       int (*set_spread_spectrum)(struct clk_hw *hw,
> +                                  const struct clk_spread_spectrum *ss_conf);
> +};
> +
> 
> Add a new file clk-scmi-oem for up plat hooks implementation.
> 
> And add clk-scmi.h to move some code that would be shared
> between clk-scmi.c and clk-scmi-oem.c
> 
> This is just an idea, more code pieces as below, this does not
> pass compiling, just an idea in my mind.
> 
> If you think this is feasible, I will do a formal patch.
> 
> BTW: I will be on holiday in the following week. I will check
> email from time to time, but may not respond in time.
>  
> drivers/clk/clk-scmi-oem.c
> static int scmi_clk_imx_set_spread_spectrum(struct clk_hw *hw,
>                                             struct clk_spread_spectrum *ss_conf)
> {
>         /* TODO */
>         return 0;
> }
> 
> static int scmi_clk_imx_query_oem_feats(const struct scmi_protocol_handle *ph,
>                                         u32 id, unsigned long *feats_key)
> {
>         /* TODO */
>         if ( the clk supports SSC)
>               *feats_key |= SCMI_CLK_EXT_OEM_SSC_SUPPORTED;
>         return 0;
> }
> 
> static const struct scmi_clk_plat scmi_clk_imx_plat = {
>         .query_ext_oem_feats = scmi_clk_imx_query_oem_feats,
>         .set_spread_spectrum = scmi_clk_imx_set_spread_spectrum,
> };
> 
> int scmi_clk_oem_init(struct scmi_device *dev, struct scmi_clk_plat *data)
> {
>         if (!strcmp(handle->version->vendor_id, SCMI_IMX_VENDOR) &&
>             !strcmp(handle->version->sub_vendor_id, SCMI_IMX_SUBVENDOR)) {
>                 *data = scmi_clk_imx_plat;
>         } else {
>                 /* Other SoC vendors (TI) */
>         }
> 
>         return 0;
> }
> 
> In clk-scmi.c, using the hook to update oem feats
> @@ -375,6 +388,9 @@ scmi_clk_ops_select(struct scmi_clk *sclk, bool atomic_capable,
>                                                  &val, NULL, false);
>                 if (!ret)
>                         feats_key |= BIT(SCMI_CLK_DUTY_CYCLE_SUPPORTED);
> +
> +               if (data->query_ext_oem_feats)
> +                       data->query_ext_oem_feats(sclk->ph, sclk->id, &feats_key);
>         }
> 
> @@ -313,11 +322,15 @@ scmi_clk_ops_alloc(struct device *dev, unsigned long feats_key)
>                 ops->set_duty_cycle = scmi_clk_set_duty_cycle;
>         }
>  
> +       if (feats_key & BIT(SCMI_CLK_EXT_OEM_SSC_SUPPORTED))
> +               ops->set_spread_spectrum = data->set_spread_spectrum;
> +
>         return ops;
>  }

In general seems a sensible approach...once you had a full series we can
reason about it better probably....and see how much more (or less) we
can/should generalize.

Thanks for this,
Cristian

^ permalink raw reply	[flat|nested] 4+ messages in thread

* RE: Add OEM extension for clk-scmi
  2025-10-06 15:34 ` Cristian Marussi
@ 2025-10-08 12:35   ` Peng Fan
  0 siblings, 0 replies; 4+ messages in thread
From: Peng Fan @ 2025-10-08 12:35 UTC (permalink / raw)
  To: Cristian Marussi, Sebin Francis
  Cc: Sudeep Holla, Sebin Francis, Stephen Boyd,
	arm-scmi@vger.kernel.org

Hi Cristian, Sebin

> Subject: Re: Add OEM extension for clk-scmi
> 
> > +               ops->set_spread_spectrum = data->set_spread_spectrum;
> > +
> >         return ops;
> >  }
> 
> In general seems a sensible approach...once you had a full series we
> can reason about it better probably....and see how much more (or less)
> we can/should generalize.

I reply both here.  I will post the patches together with the clk ssc
enablement in clk-conf.c this week.

Thanks,
Peng.

> 
> Thanks for this,
> Cristian

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2025-10-08 12:35 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-30 13:22 Add OEM extension for clk-scmi Peng Fan
2025-10-06 10:30 ` Sebin Francis
2025-10-06 15:34 ` Cristian Marussi
2025-10-08 12:35   ` Peng Fan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.