From: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
To: Hiroshi Doyu <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Cc: "iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org"
<iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>,
"joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org"
<joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org>,
"linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
Subject: Re: [PATCH 4/6] iommu/tegra: smmu: Support variable MMIO range
Date: Mon, 21 Jan 2013 10:04:42 -0700 [thread overview]
Message-ID: <50FD752A.6060706@wwwdotorg.org> (raw)
In-Reply-To: <20130121.093603.449745485344660335.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
On 01/21/2013 12:36 AM, Hiroshi Doyu wrote:
> Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org> wrote @ Fri, 18 Jan 2013 17:44:13 +0100:
>
>>> Even the checks if "offs" is in some of register blocks could be
>>> ifdef'ed out with DEBUG. "smmu->regbase" can be calculated in probe()
>>> as below. I don't think that we don't need to access "mc" DT entry to
>>> get this address. since "smmu"'s 1st reg block always starts at 0x10.
>>>
>>> /* same as "mc"'s 1st reg block */
>>> smmu->regbase = smmu->reg[0] & PAGE_MASK;
>>
>> I don't see regbase in the existing driver or your patch. Are you
>
> I attached the update one below just for "regbase".
>
>> proposing to simply make readl/writel add the offset onto a base address
>> that's calculated like that? That may not work in general; if the SMMU
>> register ranges cross a page boundary, and the various separate ranges
>> end up getting mapped to non-contiguous virtual addresses, using a
>> single base address won't work.
>
> That's not in general, but I think that this works because the 1st
> SMMU register block offset is fixed(0x10) against MC base. If this is
> not acceptable, then, I think that SMMU driver needs to access to MC
> node to get the its base. What do you think?
> drivers/iommu/tegra-smmu.c | 62 ++++++++++++++++++++++++--------------------
> 1 file changed, 34 insertions(+), 28 deletions(-)
>
> diff --git a/drivers/iommu/tegra-smmu.c b/drivers/iommu/tegra-smmu.c
> +#ifdef DEBUG
> +static inline void smmu_check_reg_range(size_t offs)
Like I said before, when is DEBUG defined? Rarely I suspect. It'd be
best to simply enable smmu_check_reg_range() all the time. As such ...
> +{
> + int i;
> +
> + for (i = 0; i < smmu->nregs; i++) {
> + BUG_ON(offs < smmu->regs[i] - smmu->regbase);
> + if (offs <= smmu->rege[i] - smmu->regbase)
> + break;
> + }
> +}
> +#else
> +static inline void smmu_check_reg_range(size_t offs) { }
> +#endif
> +
> static inline u32 smmu_read(struct smmu_device *smmu, size_t offs)
> {
> - BUG_ON(offs < 0x10);
> - if (offs < 0x3c)
> - return readl(smmu->regs[0] + offs - 0x10);
> - BUG_ON(offs < 0x1f0);
> - if (offs < 0x200)
> - return readl(smmu->regs[1] + offs - 0x1f0);
> - BUG_ON(offs < 0x228);
> - if (offs < 0x284)
> - return readl(smmu->regs[2] + offs - 0x228);
> - BUG();
> + smmu_check_reg_range(offs);
... here, you'd be doing the loop every access anyway, so you may as
well not calculate regbase at all, move the body of
smmu_check_reg_range() into smmu_read()/smmu_write(), and do the access
inside the if statement inside the loop, with the per-range mapping.
> + return readl(smmu->regbase + offs);
> }
next prev parent reply other threads:[~2013-01-21 17:04 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-15 8:17 [PATCH 1/6] iommu/tegra: Rename -i hw{grp,group} to sw{grp,group} Hiroshi Doyu
[not found] ` <1358237848-968-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-15 8:17 ` [PATCH 2/6] iommu/tegra: smmu: Pass swgroup info from DT Hiroshi Doyu
[not found] ` <1358237848-968-2-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-16 21:07 ` Stephen Warren
2013-01-15 8:17 ` [PATCH 3/6] iommu/tegra: smmu: Support variable length of swgroups bitmap Hiroshi Doyu
2013-01-15 8:17 ` [PATCH 4/6] iommu/tegra: smmu: Support variable MMIO range Hiroshi Doyu
[not found] ` <1358237848-968-4-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-16 21:12 ` Stephen Warren
[not found] ` <50F717B8.6050800-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-01-18 9:05 ` Hiroshi Doyu
[not found] ` <20130118.110546.1909336134474854222.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-18 16:44 ` Stephen Warren
[not found] ` <50F97BDD.8010502-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-01-21 7:36 ` Hiroshi Doyu
2013-01-21 7:36 ` Hiroshi Doyu
[not found] ` <20130121.093603.449745485344660335.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-21 17:04 ` Stephen Warren [this message]
[not found] ` <50FD752A.6060706-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-01-29 8:34 ` [v2 1/1] iommu/tegra: smmu: Support variable MMIO ranges/blocks Hiroshi Doyu
[not found] ` <1359448450-24894-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-29 17:03 ` Stephen Warren
[not found] ` <510800F7.7020507-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-01-29 17:40 ` Hiroshi Doyu
[not found] ` <20130129.194007.2143867447969494923.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-29 17:57 ` Stephen Warren
2013-01-29 17:56 ` [v3 " Hiroshi Doyu
[not found] ` <1359482169-26756-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-29 17:58 ` Stephen Warren
2013-01-15 8:17 ` [PATCH 5/6] ARM: dt: tegra114: Add AHB entry Hiroshi Doyu
[not found] ` <1358237848-968-5-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-28 19:00 ` Stephen Warren
2013-01-15 8:17 ` [PATCH 6/6] ARM: dt: tegra114: Add SMMU entry Hiroshi Doyu
[not found] ` <1358237848-968-6-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-16 21:17 ` Stephen Warren
2013-01-15 13:22 ` [PATCH 7/6] iommu/tegra: smmu: Add dependency on ARCH_TEGRA_114_SOC Hiroshi Doyu
[not found] ` <1358256149-28700-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2013-01-16 21:18 ` Stephen Warren
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=50FD752A.6060706@wwwdotorg.org \
--to=swarren-3lzwwm7+weoh9zmkesr00q@public.gmane.org \
--cc=hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=joro-zLv9SwRftAIdnm+yROfE0A@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@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.