lkml.org 
[lkml]   [2020]   [Jun]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v3 2/6] remoteproc: k3: Add TI-SCI processor control helper functions
    Hi Suman,

    Apologies for the late reply, this one slipped through the cracks...


    On Fri, Jun 12, 2020 at 05:49:10PM -0500, Suman Anna wrote:
    > Texas Instruments' K3 generation SoCs have specific modules/register
    > spaces used for configuring the various aspects of a remote processor.
    > These include power, reset, boot vector and other configuration features
    > specific to each compute processor present on the SoC. These registers
    > are managed by the System Controller such as DMSC on K3 AM65x SoCs.
    >
    > The Texas Instrument's System Control Interface (TI-SCI) Message Protocol
    > is used to communicate to the System Controller from various compute
    > processors to invoke specific services provided by the firmware running
    > on the System Controller.
    >
    > Add a common processor control interface header file that can be used by
    > multiple remoteproc drivers. The helper functions within this header file
    > abstract the various TI SCI protocol ops for the remoteproc drivers, and
    > allow them to request the System Controller to be able to program and
    > manage various remote processors on the SoC. The remoteproc drivers are
    > expected to manage the life-cycle of their ti_sci_proc_dev local
    > structures.
    >
    > Signed-off-by: Suman Anna <s-anna@ti.com>
    > ---
    > v3: New to this series, but the patch is identical to the one from the
    > K3 R5F series posted previously, with patch title adjusted
    > https://patchwork.kernel.org/patch/11456379/
    >
    > drivers/remoteproc/ti_sci_proc.h | 102 +++++++++++++++++++++++++++++++
    > 1 file changed, 102 insertions(+)
    > create mode 100644 drivers/remoteproc/ti_sci_proc.h
    >
    > diff --git a/drivers/remoteproc/ti_sci_proc.h b/drivers/remoteproc/ti_sci_proc.h
    > new file mode 100644
    > index 000000000000..e42d8015b8e7
    > --- /dev/null
    > +++ b/drivers/remoteproc/ti_sci_proc.h
    > @@ -0,0 +1,102 @@
    > +/* SPDX-License-Identifier: GPL-2.0-only */
    > +/*
    > + * Texas Instruments TI-SCI Processor Controller Helper Functions
    > + *
    > + * Copyright (C) 2018-2020 Texas Instruments Incorporated - http://www.ti.com/
    > + * Suman Anna
    > + */
    > +
    > +#ifndef REMOTEPROC_TI_SCI_PROC_H
    > +#define REMOTEPROC_TI_SCI_PROC_H
    > +
    > +/**
    > + * struct ti_sci_proc - structure representing a processor control client
    > + * @sci: cached TI-SCI protocol handle
    > + * @ops: cached TI-SCI proc ops
    > + * @dev: cached client device pointer
    > + * @proc_id: processor id for the consumer remoteproc device
    > + * @host_id: host id to pass the control over for this consumer remoteproc
    > + * device
    > + */
    > +struct ti_sci_proc {
    > + const struct ti_sci_handle *sci;
    > + const struct ti_sci_proc_ops *ops;
    > + struct device *dev;

    Please include the proper header files for the above structures. I would also
    have expected the name of the structure to be ti_sci_rproc but that choice is
    entirely your.

    With the proper header files included:

    Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org>

    > + u8 proc_id;
    > + u8 host_id;
    > +};
    > +
    > +static inline int ti_sci_proc_request(struct ti_sci_proc *tsp)
    > +{
    > + int ret;
    > +
    > + ret = tsp->ops->request(tsp->sci, tsp->proc_id);
    > + if (ret)
    > + dev_err(tsp->dev, "ti-sci processor request failed: %d\n",
    > + ret);
    > + return ret;
    > +}
    > +
    > +static inline int ti_sci_proc_release(struct ti_sci_proc *tsp)
    > +{
    > + int ret;
    > +
    > + ret = tsp->ops->release(tsp->sci, tsp->proc_id);
    > + if (ret)
    > + dev_err(tsp->dev, "ti-sci processor release failed: %d\n",
    > + ret);
    > + return ret;
    > +}
    > +
    > +static inline int ti_sci_proc_handover(struct ti_sci_proc *tsp)
    > +{
    > + int ret;
    > +
    > + ret = tsp->ops->handover(tsp->sci, tsp->proc_id, tsp->host_id);
    > + if (ret)
    > + dev_err(tsp->dev, "ti-sci processor handover of %d to %d failed: %d\n",
    > + tsp->proc_id, tsp->host_id, ret);
    > + return ret;
    > +}
    > +
    > +static inline int ti_sci_proc_set_config(struct ti_sci_proc *tsp,
    > + u64 boot_vector,
    > + u32 cfg_set, u32 cfg_clr)
    > +{
    > + int ret;
    > +
    > + ret = tsp->ops->set_config(tsp->sci, tsp->proc_id, boot_vector,
    > + cfg_set, cfg_clr);
    > + if (ret)
    > + dev_err(tsp->dev, "ti-sci processor set_config failed: %d\n",
    > + ret);
    > + return ret;
    > +}
    > +
    > +static inline int ti_sci_proc_set_control(struct ti_sci_proc *tsp,
    > + u32 ctrl_set, u32 ctrl_clr)
    > +{
    > + int ret;
    > +
    > + ret = tsp->ops->set_control(tsp->sci, tsp->proc_id, ctrl_set, ctrl_clr);
    > + if (ret)
    > + dev_err(tsp->dev, "ti-sci processor set_control failed: %d\n",
    > + ret);
    > + return ret;
    > +}
    > +
    > +static inline int ti_sci_proc_get_status(struct ti_sci_proc *tsp,
    > + u64 *boot_vector, u32 *cfg_flags,
    > + u32 *ctrl_flags, u32 *status_flags)
    > +{
    > + int ret;
    > +
    > + ret = tsp->ops->get_status(tsp->sci, tsp->proc_id, boot_vector,
    > + cfg_flags, ctrl_flags, status_flags);
    > + if (ret)
    > + dev_err(tsp->dev, "ti-sci processor get_status failed: %d\n",
    > + ret);
    > + return ret;
    > +}
    > +
    > +#endif /* REMOTEPROC_TI_SCI_PROC_H */
    > --
    > 2.26.0
    >

    \
     
     \ /
      Last update: 2020-06-22 19:36    [W:5.931 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site