From: Xi Chen <xixi.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
To: Hsin-Yi Wang <hsinyi-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
Cc: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>,
srv_heupstream-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org,
Matthias Brugger
<matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
Rob Herring <robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org,
CK Hu <ck.hu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
Subject: Re: [PATCH v2, 3/3] mt8183: emi: add bandwidth driver support
Date: Thu, 11 Jul 2019 14:43:03 +0800 [thread overview]
Message-ID: <1562827383.22938.7.camel@mhfsdcap03> (raw)
In-Reply-To: <CAJMQK-gTh-Zm8ct-DMsjee7H8GJKWxJ2BWW=YKXeinmAiW98gQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On Tue, 2019-06-18 at 17:40 +0800, Hsin-Yi Wang wrote:
> On Fri, May 24, 2019 at 3:54 AM Xi Chen <xixi.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org> wrote:
>
> > +struct mtk_emi {
> > + struct device *dev;
> > + void __iomem *cen_emi_base;
> > + void __iomem *chn_emi_base[MAX_CH];
> > + void __iomem *emi_mpu_base;
> > +
> > + struct timer_list emi_bw_timer;
> > + struct timeval old_tv;
> > +
> > + unsigned long long emi_bw_array[EMI_BW_ARRAY_SIZE];
> > + int emi_bw_cur_idx;
> > +};
> > +
> > +static unsigned long long emi_get_max_bw_in_last_array(struct device *dev,
> > + unsigned long long arr[], unsigned int size)
> > +{
> > + unsigned int i = 0;
> > + unsigned long long max = arr[0];
> > +
> > + while (i < size) {
> > + if (arr[i] > max)
> > + max = arr[i];
> > + ++i;
> > + }
> > + return max;
> > +}
> Would it better that if we store max element in mtk_emi struct{}, so
> that we don't need to scan entire array everytime to find max? Though
> array size only 67.
> This max element can be update in emi_update_bw_array().
Yes, a good idea. Sorry, v3 doesn't contain the patch. I will try to
improve the codes on v4.
>
> > +unsigned long long mtk_emi_get_max_bw(struct device *dev)
> > +{
> > + struct mtk_emi *emi;
> > +
> > + if (!dev)
> > + return 0;
> > +
> > + emi = dev_get_drvdata(dev);
> > + return emi_get_max_bw_in_last_array(dev,
> > + emi->emi_bw_array, ARRAY_SIZE(emi->emi_bw_array));
> > +}
> > +EXPORT_SYMBOL(mtk_emi_get_max_bw);
> > +
> > +static void emi_update_bw_array(struct device *dev, unsigned int val)
> > +{
> > + struct mtk_emi *emi = dev_get_drvdata(dev);
> > +
> > + if (emi->emi_bw_cur_idx == emi->EMI_BW_ARRAY_SIZE) {
> > + /* remove the first array element */
> > + memmove(emi->emi_bw_array, emi->emi_bw_array + 1,
> > + sizeof(unsigned long long) * (emi->EMI_BW_ARRAY_SIZE - 1));
> > + emi->emi_bw_array[emi->EMI_BW_ARRAY_SIZE - 1] = val;
> > + } else
> > + emi->emi_bw_array[emi->emi_bw_cur_idx++] = val;
> > +}
> > +
> Is the order of the emi_bw_array important?
> If not, update latest element don't need to be at the end, so we don't
> need O(n) shift everytime when inserting new element.
> If the order is important, we can also do insert in O(1), by adding a
> pointer that points to the oldest element in array. When insert a new
> element, replace oldest element with latest one and move the pointer
> one space backward.
I understand your idea, but emi driver stores the last 67ms bandwidth,
and just the last 67ms, not all the time. So, we will move the array
elements every 1ms.
>
> _______________________________________________
> Linux-mediatek mailing list
> Linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org
> http://lists.infradead.org/mailman/listinfo/linux-mediatek
next prev parent reply other threads:[~2019-07-11 6:43 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-05-24 3:54 [PATCH v2, 0/3] 8183 emi driver support Xi Chen
[not found] ` <1558670066-22484-1-git-send-email-xixi.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-05-24 3:54 ` [PATCH v2, 1/3] dt-bindings: soc: Add MT8183 emi dt-bindings Xi Chen
[not found] ` <1558670066-22484-2-git-send-email-xixi.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-06-18 21:23 ` Matthias Brugger
2019-06-18 21:32 ` Matthias Brugger
[not found] ` <668e6ccb-709b-a93a-7113-a22362048972-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-07-11 6:37 ` Xi Chen
2019-05-24 3:54 ` [PATCH v2, 2/3] arm64: dts: mt8183: add emi node Xi Chen
[not found] ` <1558670066-22484-3-git-send-email-xixi.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-06-18 21:32 ` Matthias Brugger
[not found] ` <768b95c9-b0d4-844e-906d-0d8d3bb4fe65-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-07-11 6:38 ` Xi Chen
2019-05-24 3:54 ` [PATCH v2, 3/3] mt8183: emi: add bandwidth driver support Xi Chen
[not found] ` <1558670066-22484-4-git-send-email-xixi.chen-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org>
2019-06-18 9:40 ` Hsin-Yi Wang
[not found] ` <CAJMQK-gTh-Zm8ct-DMsjee7H8GJKWxJ2BWW=YKXeinmAiW98gQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2019-07-11 6:43 ` Xi Chen [this message]
2019-07-11 6:58 ` Hsin-Yi Wang
2019-06-19 11:12 ` Matthias Brugger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1562827383.22938.7.camel@mhfsdcap03 \
--to=xixi.chen-nus5lvnupcjwk0htik3j/w@public.gmane.org \
--cc=ck.hu-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
--cc=hsinyi-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=linux-mediatek-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \
--cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \
--cc=matthias.bgg-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
--cc=robh+dt-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=srv_heupstream-NuS5LvNUpcJWk0Htik3J/w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox