All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Kurtz <djkurtz@chromium.org>
To: Horng-Shyang Liao <hs.liao@mediatek.com>
Cc: Sascha Hauer <s.hauer@pengutronix.de>,
	"open list:OPEN FIRMWARE AND..." <devicetree@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org" 
	<linux-arm-kernel@lists.infradead.org>,
	"moderated list:ARM/Mediatek SoC support" 
	<linux-mediatek@lists.infradead.org>,
	srv_heupstream <srv_heupstream@mediatek.com>,
	Sascha Hauer <kernel@pengutronix.de>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Nicolas Boichat <drinkcat@chromium.org>,
	CK HU <ck.hu@mediatek.com>, cawa cheng <cawa.cheng@mediatek.com>,
	Bibby Hsieh <bibby.hsieh@mediatek.com>,
	YT Shen <yt.shen@mediatek.com>,
	Daoyuan Huang <daoyuan.huang@mediatek.com>,
	Damon Chu <damon.chu@mediatek.com>,
	Josh-YC Liu <josh-yc.liu@mediatek.com>,
	Glory Hung <glory.hung@mediatek.com>,
	Yong Wu <yong.wu@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	Rob Herring <robh+dt@kernel.org>
Subject: Re: [RFC 3/3] CMDQ: Mediatek CMDQ driver
Date: Sat, 27 Feb 2016 00:47:24 +0800	[thread overview]
Message-ID: <CAGS+omBRhYugsiFTzfDG2jtON4rj7Y4aDY-X2afRSh09G-ZC+A@mail.gmail.com> (raw)
In-Reply-To: <1456477230.17841.2.camel@mtksdaap41>

On Fri, Feb 26, 2016 at 5:00 PM, Horng-Shyang Liao <hs.liao@mediatek.com> wrote:
>
> On Wed, 2016-02-03 at 14:40 +0800, Daniel Kurtz wrote:
> > > Hi Dan,
> > >
> > > Thanks for your comment.
> > > This solution looks good to me.
> > > I will change it as your suggestion.
> > >
> > > But, I have a question about 'mask out the provided *device virtual*
> > > address'.
> > > Are lower 16-bits (or 24-bits for JUMP op) of device virtual address the
> > > same as device physical address?
> >
> > I'm not sure.  But I doubt it we can rely on this.
> > My guess would be that the ioremap only preserves the lower 12 bits
> > (4k page size).
> >
> > > If not, we still need to pass in physical address into CMDQ driver.
> >
> > Or, instead of the iommu/slot approach, we can just provide a
> > registration function for the gce driver.
> > Each gce consumer could then have a simple gce node, with no slot/address:
> >
> >   mediatek,gce = <&gce>;
> >
> > Then on probe, the gce consumer could pass in its (struct device *) to
> > gce_register_device().  gce_register_device() could then access the
> > device's of_node to extract its physical address range, and look up
> > its physical address in its table of per-soc of
> > "device_address:gce_subsys_address" entries.  If the physical address
> > is in a valid subsys ranges, the gce_register_device would cache the
> > subsys address, and an offset in a (struct gce_consumer).
> > gce_register_device() could then add this struct to a struct list_head
> > of gce_consumers, and finally return a pointer to it back to the
> > caller.
> >
> > Later, the gce consumer could pass in ths (struct gce_consumer *) when
> > make gce calls, along with the *offset* (not the physical address or
> > virtual address) for the register that it wishes to access.  Then the
> > gce driver can simply use the gce_consumer->subsys entry to create a
> > gce address from the passed in offset.
> >
> > This will keep the binding very simple, and would remove the need to
> > convert from device virtual to physical addresses by the gce consumer,
> > but require a little more per-gce-consumer setup.
> >
> > -Dan
>
> Hi Dan,
>
> When I try to implement this comment, I realize the only benefit from
> this comment is to wrap physical address.
>
> Recall from my previous reply: gce address = subsys + valid low bits.
> So, CMDQ driver still need to do "(Base + offset) & valid mask" to get
> gce valid low bits.
> Current implementation let display driver do "base + offset".
> This comment just transfers this calculation from display driver to CMDQ
> driver.
>
> However, this comment will let CMDQ interface (behavior) become more
> complicated, e.g. gce_register_device(), struct gce_consumer, and int
> cmdq_rec_write(struct cmdq_rec *handle, u32 value, struct gce_consumer
> *consumer, u32 offset)
>
> Do you think it is worth to do this effort to wrap physical address?

Yes, I think it is worth it to unify the gce address computation and
move it into the gce driver.

-Dan

WARNING: multiple messages have this Message-ID (diff)
From: Daniel Kurtz <djkurtz@chromium.org>
To: Horng-Shyang Liao <hs.liao@mediatek.com>
Cc: Sascha Hauer <s.hauer@pengutronix.de>,
	"open list:OPEN FIRMWARE AND..." <devicetree@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>,
	"moderated list:ARM/Mediatek SoC support"
	<linux-mediatek@lists.infradead.org>,
	srv_heupstream <srv_heupstream@mediatek.com>,
	Sascha Hauer <kernel@pengutronix.de>,
	Philipp Zabel <p.zabel@pengutronix.de>,
	Nicolas Boichat <drinkcat@chromium.org>,
	CK HU <ck.hu@mediatek.com>, cawa cheng <cawa.cheng@mediatek.com>,
	Bibby Hsieh <bibby.hsieh@mediatek.com>,
	YT Shen <yt.shen@mediatek.com>,
	Daoyuan Huang <daoyuan.huang@mediatek.com>,
	Damon Chu <damon.chu@mediatek.com>,
	Josh-YC Liu <josh-yc.liu@mediatek.com>,
	Glory Hung <glory.hung@mediatek.com>,
	Yong Wu <yong.wu@mediatek.com>,
	Matthias Brugger <matthias.bgg@gmail.com>
Subject: Re: [RFC 3/3] CMDQ: Mediatek CMDQ driver
Date: Sat, 27 Feb 2016 00:47:24 +0800	[thread overview]
Message-ID: <CAGS+omBRhYugsiFTzfDG2jtON4rj7Y4aDY-X2afRSh09G-ZC+A@mail.gmail.com> (raw)
In-Reply-To: <1456477230.17841.2.camel@mtksdaap41>

On Fri, Feb 26, 2016 at 5:00 PM, Horng-Shyang Liao <hs.liao@mediatek.com> wrote:
>
> On Wed, 2016-02-03 at 14:40 +0800, Daniel Kurtz wrote:
> > > Hi Dan,
> > >
> > > Thanks for your comment.
> > > This solution looks good to me.
> > > I will change it as your suggestion.
> > >
> > > But, I have a question about 'mask out the provided *device virtual*
> > > address'.
> > > Are lower 16-bits (or 24-bits for JUMP op) of device virtual address the
> > > same as device physical address?
> >
> > I'm not sure.  But I doubt it we can rely on this.
> > My guess would be that the ioremap only preserves the lower 12 bits
> > (4k page size).
> >
> > > If not, we still need to pass in physical address into CMDQ driver.
> >
> > Or, instead of the iommu/slot approach, we can just provide a
> > registration function for the gce driver.
> > Each gce consumer could then have a simple gce node, with no slot/address:
> >
> >   mediatek,gce = <&gce>;
> >
> > Then on probe, the gce consumer could pass in its (struct device *) to
> > gce_register_device().  gce_register_device() could then access the
> > device's of_node to extract its physical address range, and look up
> > its physical address in its table of per-soc of
> > "device_address:gce_subsys_address" entries.  If the physical address
> > is in a valid subsys ranges, the gce_register_device would cache the
> > subsys address, and an offset in a (struct gce_consumer).
> > gce_register_device() could then add this struct to a struct list_head
> > of gce_consumers, and finally return a pointer to it back to the
> > caller.
> >
> > Later, the gce consumer could pass in ths (struct gce_consumer *) when
> > make gce calls, along with the *offset* (not the physical address or
> > virtual address) for the register that it wishes to access.  Then the
> > gce driver can simply use the gce_consumer->subsys entry to create a
> > gce address from the passed in offset.
> >
> > This will keep the binding very simple, and would remove the need to
> > convert from device virtual to physical addresses by the gce consumer,
> > but require a little more per-gce-consumer setup.
> >
> > -Dan
>
> Hi Dan,
>
> When I try to implement this comment, I realize the only benefit from
> this comment is to wrap physical address.
>
> Recall from my previous reply: gce address = subsys + valid low bits.
> So, CMDQ driver still need to do "(Base + offset) & valid mask" to get
> gce valid low bits.
> Current implementation let display driver do "base + offset".
> This comment just transfers this calculation from display driver to CMDQ
> driver.
>
> However, this comment will let CMDQ interface (behavior) become more
> complicated, e.g. gce_register_device(), struct gce_consumer, and int
> cmdq_rec_write(struct cmdq_rec *handle, u32 value, struct gce_consumer
> *consumer, u32 offset)
>
> Do you think it is worth to do this effort to wrap physical address?

Yes, I think it is worth it to unify the gce address computation and
move it into the gce driver.

-Dan

WARNING: multiple messages have this Message-ID (diff)
From: djkurtz@chromium.org (Daniel Kurtz)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC 3/3] CMDQ: Mediatek CMDQ driver
Date: Sat, 27 Feb 2016 00:47:24 +0800	[thread overview]
Message-ID: <CAGS+omBRhYugsiFTzfDG2jtON4rj7Y4aDY-X2afRSh09G-ZC+A@mail.gmail.com> (raw)
In-Reply-To: <1456477230.17841.2.camel@mtksdaap41>

On Fri, Feb 26, 2016 at 5:00 PM, Horng-Shyang Liao <hs.liao@mediatek.com> wrote:
>
> On Wed, 2016-02-03 at 14:40 +0800, Daniel Kurtz wrote:
> > > Hi Dan,
> > >
> > > Thanks for your comment.
> > > This solution looks good to me.
> > > I will change it as your suggestion.
> > >
> > > But, I have a question about 'mask out the provided *device virtual*
> > > address'.
> > > Are lower 16-bits (or 24-bits for JUMP op) of device virtual address the
> > > same as device physical address?
> >
> > I'm not sure.  But I doubt it we can rely on this.
> > My guess would be that the ioremap only preserves the lower 12 bits
> > (4k page size).
> >
> > > If not, we still need to pass in physical address into CMDQ driver.
> >
> > Or, instead of the iommu/slot approach, we can just provide a
> > registration function for the gce driver.
> > Each gce consumer could then have a simple gce node, with no slot/address:
> >
> >   mediatek,gce = <&gce>;
> >
> > Then on probe, the gce consumer could pass in its (struct device *) to
> > gce_register_device().  gce_register_device() could then access the
> > device's of_node to extract its physical address range, and look up
> > its physical address in its table of per-soc of
> > "device_address:gce_subsys_address" entries.  If the physical address
> > is in a valid subsys ranges, the gce_register_device would cache the
> > subsys address, and an offset in a (struct gce_consumer).
> > gce_register_device() could then add this struct to a struct list_head
> > of gce_consumers, and finally return a pointer to it back to the
> > caller.
> >
> > Later, the gce consumer could pass in ths (struct gce_consumer *) when
> > make gce calls, along with the *offset* (not the physical address or
> > virtual address) for the register that it wishes to access.  Then the
> > gce driver can simply use the gce_consumer->subsys entry to create a
> > gce address from the passed in offset.
> >
> > This will keep the binding very simple, and would remove the need to
> > convert from device virtual to physical addresses by the gce consumer,
> > but require a little more per-gce-consumer setup.
> >
> > -Dan
>
> Hi Dan,
>
> When I try to implement this comment, I realize the only benefit from
> this comment is to wrap physical address.
>
> Recall from my previous reply: gce address = subsys + valid low bits.
> So, CMDQ driver still need to do "(Base + offset) & valid mask" to get
> gce valid low bits.
> Current implementation let display driver do "base + offset".
> This comment just transfers this calculation from display driver to CMDQ
> driver.
>
> However, this comment will let CMDQ interface (behavior) become more
> complicated, e.g. gce_register_device(), struct gce_consumer, and int
> cmdq_rec_write(struct cmdq_rec *handle, u32 value, struct gce_consumer
> *consumer, u32 offset)
>
> Do you think it is worth to do this effort to wrap physical address?

Yes, I think it is worth it to unify the gce address computation and
move it into the gce driver.

-Dan

  reply	other threads:[~2016-02-26 16:47 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <8A0FDEEF9DBBD140A3857422D81DA20F867B19FD@mtkmbs01n1>
2016-02-03  6:02 ` FW: [RFC 3/3] CMDQ: Mediatek CMDQ driver Horng-Shyang Liao
2016-02-03  6:02   ` Horng-Shyang Liao
2016-02-03  6:02   ` Horng-Shyang Liao
2016-02-03  6:40   ` Daniel Kurtz
2016-02-03  6:40     ` Daniel Kurtz
2016-02-03  6:40     ` Daniel Kurtz
2016-02-03  8:04     ` Horng-Shyang Liao
2016-02-03  8:04       ` Horng-Shyang Liao
2016-02-03  8:04       ` Horng-Shyang Liao
2016-02-26  9:00     ` Horng-Shyang Liao
2016-02-26  9:00       ` Horng-Shyang Liao
2016-02-26  9:00       ` Horng-Shyang Liao
2016-02-26 16:47       ` Daniel Kurtz [this message]
2016-02-26 16:47         ` Daniel Kurtz
2016-02-26 16:47         ` Daniel Kurtz
2016-01-20  5:14 [RFC 0/3] MT8173 CMDQ support hs.liao
2016-01-20  5:14 ` [RFC 3/3] CMDQ: Mediatek CMDQ driver hs.liao
2016-01-20  5:14   ` hs.liao at mediatek.com
2016-01-20  5:14   ` hs.liao-NuS5LvNUpcJWk0Htik3J/w
2016-01-28  4:49   ` Daniel Kurtz
2016-01-28  4:49     ` Daniel Kurtz
2016-01-28  4:49     ` Daniel Kurtz
2016-01-29  7:39     ` Horng-Shyang Liao
2016-01-29  7:39       ` Horng-Shyang Liao
2016-01-29  7:39       ` Horng-Shyang Liao
2016-01-29  8:42       ` Daniel Kurtz
2016-01-29  8:42         ` Daniel Kurtz
2016-01-29  8:42         ` Daniel Kurtz
2016-01-29 12:24         ` Horng-Shyang Liao
2016-01-29 12:24           ` Horng-Shyang Liao
2016-01-29 12:24           ` Horng-Shyang Liao
2016-01-29 13:15           ` Daniel Kurtz
2016-01-29 13:15             ` Daniel Kurtz
2016-01-29 13:15             ` Daniel Kurtz
2016-02-01  2:04             ` Horng-Shyang Liao
2016-02-01  2:04               ` Horng-Shyang Liao
2016-02-01  2:04               ` Horng-Shyang Liao
2016-02-01  4:15               ` Daniel Kurtz
2016-02-01  4:15                 ` Daniel Kurtz
2016-02-01  4:15                 ` Daniel Kurtz
2016-02-01  6:20                 ` Horng-Shyang Liao
2016-02-01  6:20                   ` Horng-Shyang Liao
2016-02-01  6:20                   ` Horng-Shyang Liao
2016-02-01 10:22                   ` Daniel Kurtz
2016-02-01 10:22                     ` Daniel Kurtz
2016-02-01 10:22                     ` Daniel Kurtz
2016-02-02  6:48                     ` Horng-Shyang Liao
2016-02-02  6:48                       ` Horng-Shyang Liao
2016-02-02  6:48                       ` Horng-Shyang Liao
2016-02-02 16:21                       ` Daniel Kurtz
2016-02-02 16:21                         ` Daniel Kurtz
2016-02-02 16:21                         ` Daniel Kurtz

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=CAGS+omBRhYugsiFTzfDG2jtON4rj7Y4aDY-X2afRSh09G-ZC+A@mail.gmail.com \
    --to=djkurtz@chromium.org \
    --cc=bibby.hsieh@mediatek.com \
    --cc=cawa.cheng@mediatek.com \
    --cc=ck.hu@mediatek.com \
    --cc=damon.chu@mediatek.com \
    --cc=daoyuan.huang@mediatek.com \
    --cc=devicetree@vger.kernel.org \
    --cc=drinkcat@chromium.org \
    --cc=glory.hung@mediatek.com \
    --cc=hs.liao@mediatek.com \
    --cc=josh-yc.liu@mediatek.com \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    --cc=p.zabel@pengutronix.de \
    --cc=robh+dt@kernel.org \
    --cc=s.hauer@pengutronix.de \
    --cc=srv_heupstream@mediatek.com \
    --cc=yong.wu@mediatek.com \
    --cc=yt.shen@mediatek.com \
    /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.