[PATCH 4/5] cpufreq: Add cpufreq driver for the RISC-V RPMI performance service group
Anup Patel
anup at brainfault.org
Mon Jan 12 03:58:39 PST 2026
On Mon, Jan 12, 2026 at 4:18 PM Rahul Pathak <rahul at summations.net> wrote:
>
> > +
> > +static int rpmi_cpufreq_probe(struct platform_device *pdev)
> > +{
> > + struct device *dev = &pdev->dev;
> > + struct rpmi_perf *mpxy_perf;
> > + struct rpmi_ctx *mpxy_ctx;
> > + int num_domains = 0;
> > + int ret, i;
> > +
> > + mpxy_ctx = devm_kzalloc(&pdev->dev, sizeof(*mpxy_ctx), GFP_KERNEL);
> > + if (!mpxy_ctx)
> > + return -ENOMEM;
> > +
> > + /* Setup mailbox client */
> > + mpxy_ctx->client.dev = dev;
> > + mpxy_ctx->client.rx_callback = NULL;
> > + mpxy_ctx->client.tx_block = false;
> > + mpxy_ctx->client.knows_txdone = true;
> > + mpxy_ctx->client.tx_tout = 0;
> > +
> > + /* Request mailbox channel */
> > + mpxy_ctx->chan = mbox_request_channel(&mpxy_ctx->client, 0);
> > + if (IS_ERR(mpxy_ctx->chan))
> > + return PTR_ERR(mpxy_ctx->chan);
> > +
> > + ret = rpmi_cpufreq_attr_setup(dev, mpxy_ctx);
> > + if (ret) {
> > + dev_err(dev, "failed to verify RPMI attribute - err:%d\n", ret);
> > + goto fail_free_channel;
> > + }
> > +
> > + /* Get number of performance domain */
> > + ret = rpmi_perf_get_num_domains(mpxy_ctx, &num_domains);
> > + if (ret) {
> > + dev_err(dev, "invalid number of perf domains - err:%d\n", ret);
> > + goto fail_free_channel;
> > + }
>
> The domain space in RPMI performance for CPU and Device
> is not separate and a domain can be either CPU or a Device.
> How the driver will make sure that the domains which are returned
> are CPU only and not the device.
>
> > +MODULE_DEVICE_TABLE(of, rpmi_cpufreq_of_match);
> > +
> > +static struct platform_driver rpmi_cpufreq_platdrv = {
> > + .driver = {
> > + .name = "riscv-rpmi-performance",
> > + .of_match_table = rpmi_cpufreq_of_match,
> > + },
> > + .probe = rpmi_cpufreq_probe,
> > + .remove = rpmi_cpufreq_remove,
> > +};
> > +
> > +module_platform_driver(rpmi_cpufreq_platdrv);
> > +
> > +MODULE_AUTHOR("Joshua Yeong <joshua.yeong at starfivetech.com>");
> > +MODULE_DESCRIPTION("CPUFreq Driver based on SBI MPXY extension");
>
> NIT: CPUFreq driver based on SBI MPXY extension and RPMI protocol -
> something like this
Currently, the mailbox controller is based on SBI MPXY but in
the future mailbox controller for some other RPMI transport can
also show up.
In reality, the driver is only RPMI based since it uses mailbox APIs.
Regards,
Anup
More information about the linux-riscv
mailing list