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 3/9] memory: tegra: add flush operation for Tegra124 memory clients
Date: Mon, 2 Mar 2015 16:54:49 +0800 [thread overview]
Message-ID: <54F42559.7060901@nvidia.com> (raw)
In-Reply-To: <CAAVeFuLgT+PPUGR68BE=ac97FyjfmtTHCZqvMoHAwNV8x8KP6w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
Hi,
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:
>> Signed-off-by: Vince Hsu<vinceh-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
> Please have a short commit message even if the subject seems to be
> self-explanatory.
Will do.
>> ---
>> drivers/memory/tegra/tegra124.c | 108 +++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 107 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/memory/tegra/tegra124.c b/drivers/memory/tegra/tegra124.c
>> index 278d40b854c1..cce255d3df5c 100644
>> --- a/drivers/memory/tegra/tegra124.c
>> +++ b/drivers/memory/tegra/tegra124.c
>> @@ -6,6 +6,8 @@
>> * published by the Free Software Foundation.
>> */
>>
>> +#include <linux/delay.h>
>> +#include <linux/device.h>
>> #include <linux/of.h>
>> #include <linux/mm.h>
>>
>> @@ -15,7 +17,7 @@
>>
>> #include "mc.h"
>>
>> -static const struct tegra_mc_client tegra124_mc_clients[] = {
>> +static struct tegra_mc_client tegra124_mc_clients[] = {
> This const drop also seems out-of-place. If they are needed at all,
> please have them all done in the same patch, and only when they become
> needed.
Will move to the patch #2.
>> {
>> .id = 0x00,
>> .name = "ptcr",
>> @@ -959,7 +961,108 @@ static const struct tegra_smmu_swgroup tegra124_swgroups[] = {
>> { .swgroup = TEGRA_SWGROUP_VI, .reg = 0x280 },
>> };
>>
>> +static struct tegra_mc_hotreset tegra124_mc_hotreset[] = {
>> + {TEGRA_SWGROUP_AFI, 0x200, 0x204, 0},
>> + {TEGRA_SWGROUP_AVPC, 0x200, 0x204, 1},
>> + {TEGRA_SWGROUP_DC, 0x200, 0x204, 2},
>> + {TEGRA_SWGROUP_DCB, 0x200, 0x204, 3},
>> + {TEGRA_SWGROUP_HC, 0x200, 0x204, 6},
>> + {TEGRA_SWGROUP_HDA, 0x200, 0x204, 7},
>> + {TEGRA_SWGROUP_ISP2, 0x200, 0x204, 8},
>> + {TEGRA_SWGROUP_MPCORE, 0x200, 0x204, 9},
>> + {TEGRA_SWGROUP_MPCORELP, 0x200, 0x204, 10},
>> + {TEGRA_SWGROUP_MSENC, 0x200, 0x204, 11},
>> + {TEGRA_SWGROUP_PPCS, 0x200, 0x204, 14},
>> + {TEGRA_SWGROUP_SATA, 0x200, 0x204, 15},
>> + {TEGRA_SWGROUP_VDE, 0x200, 0x204, 16},
>> + {TEGRA_SWGROUP_VI, 0x200, 0x204, 17},
>> + {TEGRA_SWGROUP_VIC, 0x200, 0x204, 18},
>> + {TEGRA_SWGROUP_XUSB_HOST, 0x200, 0x204, 19},
>> + {TEGRA_SWGROUP_XUSB_DEV, 0x200, 0x204, 20},
>> + {TEGRA_SWGROUP_TSEC, 0x200, 0x204, 22},
>> + {TEGRA_SWGROUP_SDMMC1A, 0x200, 0x204, 29},
>> + {TEGRA_SWGROUP_SDMMC2A, 0x200, 0x204, 30},
>> + {TEGRA_SWGROUP_SDMMC3A, 0x200, 0x204, 31},
>> + {TEGRA_SWGROUP_SDMMC4A, 0x970, 0x974, 0},
>> + {TEGRA_SWGROUP_ISP2B, 0x970, 0x974, 1},
>> + {TEGRA_SWGROUP_GPU, 0x970, 0x974, 2},
>> +};
>> +
>> #ifdef CONFIG_ARCH_TEGRA_124_SOC
>> +
>> +static bool tegra124_stable_hotreset_check(struct tegra_mc *mc,
>> + u32 reg, u32 *stat)
>> +{
>> + int i;
>> + u32 cur_stat;
>> + u32 prv_stat;
>> +
>> + /*
>> + * There might be a glitch seen with the status register if we program
>> + * the control register and then read the status register in a short
>> + * window due to a HW bug. So here we poll for a stable status read.
>> + */
>> + prv_stat = mc_readl(mc, reg);
>> + for (i = 0; i < 5; i++) {
> Why 5 times?
This is a magic number from downstream. It should be enough to reach a
stable state.
>> + cur_stat = mc_readl(mc, reg);
>> + if (cur_stat != prv_stat)
>> + return false;
>> + }
>> + *stat = cur_stat;
>> + return true;
>> +}
>> +
>> +static int tegra124_mc_flush(struct tegra_mc *mc,
>> + const struct tegra_mc_hotreset *hotreset)
>> +{
>> + u32 val;
>> +
>> + if (!mc || !hotreset)
>> + return -EINVAL;
>> +
>> + /* XXX add mutex */
> I guess this is a TODO for when this series exists the RFC state. :)
Oh, yes.
>> +
>> + val = mc_readl(mc, hotreset->ctrl);
>> + val |= BIT(hotreset->bit);
>> + mc_writel(mc, val, hotreset->ctrl);
>> + mc_readl(mc, hotreset->ctrl);
>> +
>> + /* poll till the flush is done */
>> + do {
>> + udelay(10);
>> + val = 0;
>> + if (!tegra124_stable_hotreset_check(mc, hotreset->status, &val))
>> + continue;
>> + } while (!(val & BIT(hotreset->bit)));
> So here you are waiting for the right bit in hotreset->status to turn
> to 1. Why is the whole thing with tegra124_stable_hotreset_check()
> needed? Could it switch from 1 to 0 to 1 again, with the first window
> at 1 being invalid?
There is a comment which describes why we have to check this in
tegra124_stable_hotreset_check().
> In that case isn't there a risk that
> tegra124_stable_hotreset_check() might do 5 consecutive reads on that
> invalid state and let us continue before the flush is completed?
So there is another check in while(). :)
Thanks,
Vince
next prev 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
[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 [this message]
[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=54F42559.7060901@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.