All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vince Hsu <vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
To: Alexandre Courbot <gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Cc: Thierry Reding
	<thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	Peter De Schrijver
	<pdeschrijver-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>,
	Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
	"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [RFC PATCH 2/9] memory: tegra: add mc flush support
Date: Mon, 2 Mar 2015 16:54:33 +0800	[thread overview]
Message-ID: <54F42549.5040202@nvidia.com> (raw)
In-Reply-To: <CAAVeFuLx5fr_kQonRZzTgsw-wND==jNwvMs9LkzhWrE0rRQ76w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>


On 02/12/2015 04:56 PM, Alexandre Courbot wrote:
> On Wed, Jan 14, 2015 at 3:19 PM, Vince Hsu<vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>  wrote:
>> The flush operation of memory clients is needed for various IP blocks in
>> the Tegra SoCs to perform a clean reset.
>>
>> Signed-off-by: Vince Hsu<vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
>> ---
>>   drivers/memory/tegra/mc.c       | 132 ++++++++++++++++++++++++++++++++++++++++
>>   drivers/memory/tegra/tegra114.c |   2 +-
>>   drivers/memory/tegra/tegra30.c  |   2 +-
>>   include/soc/tegra/mc.h          |  41 ++++++++++++-
>>   4 files changed, 173 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/memory/tegra/mc.c b/drivers/memory/tegra/mc.c
>> index fe3c44e7e1d1..35f769f9f1cd 100644
>> --- a/drivers/memory/tegra/mc.c
>> +++ b/drivers/memory/tegra/mc.c
>> @@ -11,6 +11,7 @@
>>   #include <linux/kernel.h>
>>   #include <linux/module.h>
>>   #include <linux/of.h>
>> +#include <linux/of_platform.h>
>>   #include <linux/platform_device.h>
>>   #include <linux/slab.h>
>>
>> @@ -62,6 +63,130 @@ static const struct of_device_id tegra_mc_of_match[] = {
>>   };
>>   MODULE_DEVICE_TABLE(of, tegra_mc_of_match);
>>
>> +static struct tegra_mc_swgroup *find_swgroup(struct tegra_mc *mc,
>> +               unsigned int swgroup)
> Indentation looks a little bit weird here.
>
>> +{
>> +       struct tegra_mc_swgroup *sg;
>> +
>> +       list_for_each_entry(sg, &mc->swgroups, head) {
>> +               if (sg->id == swgroup)
>> +                       return sg;
>> +       }
>> +
>> +       return NULL;
>> +}
>> +
>> +static struct tegra_mc_swgroup *add_swgroup(struct tegra_mc *mc,
>> +       unsigned int swgroup)
> Here too. Also even though they are static, these functions should
> probably be prefixed with tegra_mc or something.
Will fix the indentation and function naming.

>> +int tegra_mc_flush(struct tegra_mc_swgroup *sg)
>> +{
>> +       struct tegra_mc *mc;
>> +       const struct tegra_mc_hotreset *client;
>> +       int i;
>> +
>> +       if (!sg || !sg->mc)
>> +               return -EINVAL;;
>> +
>> +       mc = sg->mc;
>> +       if (!mc->soc->ops || !mc->soc->ops->flush)
>> +               return -EINVAL;;
>> +
>> +       client = mc->soc->hotresets;
>> +
>> +       for (i = 0; i < mc->soc->num_hotresets; i++, client++) {
>> +               if (sg->id == client->swgroup)
>> +                       return mc->soc->ops->flush(mc, client);
>> +       }
>> +
>> +       return -EINVAL;
>> +}
>> +EXPORT_SYMBOL(tegra_mc_flush);
>> +
>> +int tegra_mc_flush_done(struct tegra_mc_swgroup *sg)
>> +{
>> +       struct tegra_mc *mc;
>> +       const struct tegra_mc_hotreset *client;
>> +       int i;
>> +
>> +       if (!sg || !sg->mc)
>> +               return -EINVAL;;
>> +
>> +       mc = sg->mc;
>> +       if (!mc->soc->ops || !mc->soc->ops->flush)
>> +               return -EINVAL;;
>> +
>> +       client = mc->soc->hotresets;
>> +
>> +       for (i = 0; i < mc->soc->num_hotresets; i++, client++) {
>> +               if (sg->id == client->swgroup)
>> +                       return mc->soc->ops->flush_done(mc, client);
>> +       }
>> +
>> +       return -EINVAL;
>> +}
>> +EXPORT_SYMBOL(tegra_mc_flush_done);
> These functions are identical, excepted for the callback they are
> invoking. Could you merge the common part into a function that returns
> the right client to call the callback on, or ERR_PTR(-EINVAL) in case
> of failure?
I couldn't think of a clever way to do this. Any ideas? :)

>> +
>> +static int tegra_mc_build_swgroup(struct tegra_mc *mc)
>> +{
>> +       int i;
>> +
>> +       for (i = 0; i < mc->soc->num_clients; i++) {
>> +               struct tegra_mc_swgroup *sg;
>> +
>> +               sg = find_swgroup(mc, mc->soc->clients[i].swgroup);
>> +
>> +               if (!sg) {
>> +                       sg = add_swgroup(mc,  mc->soc->clients[i].swgroup);
>> +                       if (IS_ERR(sg))
>> +                               return PTR_ERR(sg);
>> +               }
>> +
>> +               list_add_tail(&mc->soc->clients[i].head, &sg->clients);
>> +       }
>> +
>> +       return 0;
>> +}
>> +
>>   static int tegra_mc_setup_latency_allowance(struct tegra_mc *mc)
>>   {
>>          unsigned long long tick;
>> @@ -229,6 +354,13 @@ static int tegra_mc_probe(struct platform_device *pdev)
>>          /* length of MC tick in nanoseconds */
>>          mc->tick = 30;
>>
>> +       INIT_LIST_HEAD(&mc->swgroups);
>> +       err = tegra_mc_build_swgroup(mc);
>> +       if (err) {
>> +               dev_err(&pdev->dev, "failed to build swgroup: %d\n", err);
>> +               return err;
>> +       }
>> +
>>          res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>>          mc->regs = devm_ioremap_resource(&pdev->dev, res);
>>          if (IS_ERR(mc->regs))
>> diff --git a/drivers/memory/tegra/tegra114.c b/drivers/memory/tegra/tegra114.c
>> index 511e9a25c151..92ab5552fcee 100644
>> --- a/drivers/memory/tegra/tegra114.c
>> +++ b/drivers/memory/tegra/tegra114.c
>> @@ -15,7 +15,7 @@
>>
>>   #include "mc.h"
>>
>> -static const struct tegra_mc_client tegra114_mc_clients[] = {
>> +static struct tegra_mc_client tegra114_mc_clients[] = {
> Why is this needed? I cannot see anything in this patch that would
> require dropping the const here.
This patch uses a list in the struct tegra_mc_client to gather swgroup 
information from
DT when driver is probed. So the mc client array instance can't be constant.

  parent reply	other threads:[~2015-03-02  8:54 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-14  6:19 [RFC PATCH 0/9] Add generic PM domain support for Tegra SoC Vince Hsu
     [not found] ` <1421216372-8025-1-git-send-email-vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-01-14  6:19   ` [RFC PATCH 1/9] reset: add of_reset_control_get_by_index() Vince Hsu
     [not found]     ` <1421216372-8025-2-git-send-email-vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-02-12  8:56       ` Alexandre Courbot
     [not found]         ` <CAAVeFuJDfG7skRgyEt1p+NJ1x=s5rtfkL9JV1DR_Df0E=CGjuA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-02  8:52           ` Vince Hsu
2015-01-14  6:19   ` [RFC PATCH 2/9] memory: tegra: add mc flush support Vince Hsu
     [not found]     ` <1421216372-8025-3-git-send-email-vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-02-12  8:56       ` Alexandre Courbot
     [not found]         ` <CAAVeFuLx5fr_kQonRZzTgsw-wND==jNwvMs9LkzhWrE0rRQ76w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-02  8:54           ` Vince Hsu [this message]
     [not found]             ` <54F42549.5040202-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-03-02  9:29               ` Alexandre Courbot
     [not found]                 ` <CAAVeFu+1dS-RXOEg0jmUcP907uErpOv687k=4FBJiGfKytMWPA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-02 11:09                   ` Vince Hsu
2015-03-03  8:03                   ` Alexandre Courbot
     [not found]                     ` <CAAVeFuJqa-4DqM8W2yXLUS9brfE8VgxT03FEQLSoKh26EddE8w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-03  8:09                       ` Vince Hsu
     [not found]                         ` <54F56C26.1020202-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-03-03  8:14                           ` Alexandre Courbot
     [not found]                             ` <CAAVeFuLfJJz92PdkjO1je-Hwz5smbzFKZ9=EipQ0qJTod1Xp2A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-03  8:18                               ` Vince Hsu
     [not found]                                 ` <54F56E4E.9070004-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-03-03  8:31                                   ` Alexandre Courbot
     [not found]                                     ` <CAAVeFuK1ZSdBLc5p0xQkcOeGBB2MNtT+k0wg45MdO5bO=YgnnQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-03  8:59                                       ` Vince Hsu
2015-01-14  6:19   ` [RFC PATCH 3/9] memory: tegra: add flush operation for Tegra124 memory clients Vince Hsu
     [not found]     ` <1421216372-8025-4-git-send-email-vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-02-12  8:56       ` Alexandre Courbot
     [not found]         ` <CAAVeFuLgT+PPUGR68BE=ac97FyjfmtTHCZqvMoHAwNV8x8KP6w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-02  8:54           ` Vince Hsu
     [not found]             ` <54F42559.7060901-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-03-02  9:06               ` Alexandre Courbot
2015-01-14  6:19   ` [RFC PATCH 4/9] soc: tegra: pmc: Add generic PM domain support Vince Hsu
     [not found]     ` <1421216372-8025-5-git-send-email-vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2015-02-12  8:56       ` Alexandre Courbot
     [not found]         ` <CAAVeFuKAk44_ohL=0Qb47wwK5-8rxjvxExjQbfrshjc1J_zZug-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2015-03-02  8:55           ` Vince Hsu
2015-01-14  6:19   ` [RFC PATCH 5/9] ARM: tegra: add PM domain device nodes to Tegra124 DT Vince Hsu
2015-01-14  6:19   ` [RFC PATCH 6/9] ARM: tegra: add GPU power supply to Jetson TK1 DT Vince Hsu
2015-01-14  6:19   ` [RFC PATCH 7/9] drm/tegra: dc: remove the power sequence from driver Vince Hsu
2015-01-14  6:19   ` [RFC PATCH 8/9] PCI: tegra: " Vince Hsu
2015-01-14  6:19   ` [RFC PATCH 9/9] ata: ahci_tegra: remove " Vince Hsu

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=54F42549.5040202@nvidia.com \
    --to=vinceh-ddmlm1+adcrqt0dzr+alfa@public.gmane.org \
    --cc=gnurou-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=pdeschrijver-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
    --cc=swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org \
    --cc=thierry.reding-Re5JQEeQqe8AvxtiuMwx3w@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 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.