lkml.org 
[lkml]   [2019]   [Aug]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v4 2/3] OPP: Add support for bandwidth OPP tables
    From
    Date
    Hi Saravana,

    On 7/27/19 02:15, Saravana Kannan wrote:
    > Not all devices quantify their performance points in terms of frequency.
    > Devices like interconnects quantify their performance points in terms of
    > bandwidth. We need a way to represent these bandwidth levels in OPP. So,
    > add support for parsing bandwidth OPPs from DT.
    >
    > Signed-off-by: Saravana Kannan <saravanak@google.com>
    > ---
    > drivers/opp/of.c | 41 ++++++++++++++++++++++++++++++++---------
    > drivers/opp/opp.h | 4 +++-
    > 2 files changed, 35 insertions(+), 10 deletions(-)
    >
    > diff --git a/drivers/opp/of.c b/drivers/opp/of.c
    > index b313aca9894f..ac73512f4416 100644
    > --- a/drivers/opp/of.c
    > +++ b/drivers/opp/of.c
    > @@ -523,6 +523,35 @@ void dev_pm_opp_of_remove_table(struct device *dev)
    > }
    > EXPORT_SYMBOL_GPL(dev_pm_opp_of_remove_table);
    >
    > +static int _read_opp_key(struct dev_pm_opp *new_opp, struct device_node *np)
    > +{
    > + int ret;
    > + u64 rate;
    > + u32 bw;
    > +
    > + ret = of_property_read_u64(np, "opp-hz", &rate);
    > + if (!ret) {
    > + /*
    > + * Rate is defined as an unsigned long in clk API, and so
    > + * casting explicitly to its type. Must be fixed once rate is 64
    > + * bit guaranteed in clk API.
    > + */
    > + new_opp->rate = (unsigned long)rate;
    > + return 0;

    So we can't have a single OPP table with both frequency and bandwidth?

    > + }
    > +
    > + ret = of_property_read_u32(np, "opp-peak-KBps", &bw);
    > + if (ret)
    > + return ret;
    > + new_opp->rate = (unsigned long) bw;
    > +
    > + ret = of_property_read_u32(np, "opp-avg-KBps", &bw);
    > + if (!ret)
    > + new_opp->avg_bw = (unsigned long) bw;
    > +
    > + return 0;
    > +}
    > +
    > /**
    > * _opp_add_static_v2() - Allocate static OPPs (As per 'v2' DT bindings)
    > * @opp_table: OPP table
    > @@ -560,22 +589,16 @@ static struct dev_pm_opp *_opp_add_static_v2(struct opp_table *opp_table,
    > if (!new_opp)
    > return ERR_PTR(-ENOMEM);
    >
    > - ret = of_property_read_u64(np, "opp-hz", &rate);
    > + ret = _read_opp_key(new_opp, np);
    > if (ret < 0) {
    > /* "opp-hz" is optional for devices like power domains. */
    > if (!opp_table->is_genpd) {
    > - dev_err(dev, "%s: opp-hz not found\n", __func__);
    > + dev_err(dev, "%s: opp-hz or opp-peak-bw not found\n",

    s/opp-peak-bw/opp-peak-kBps/

    Thanks,
    Georgi

    \
     
     \ /
      Last update: 2019-08-07 14:55    [W:4.970 / U:0.184 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site