From: Thierry Reding <thierry.reding@gmail.com> To: Dmitry Osipenko <digetx@gmail.com> Cc: linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: Re: [PATCH v1 2/5] drm/tegra: gr2d: Add IOMMU support Date: Fri, 4 May 2018 12:54:16 +0200 [thread overview] Message-ID: <20180504105416.GN13459@ulmo> (raw) In-Reply-To: <20180503234723.4368-3-digetx@gmail.com> [-- Attachment #1.1: Type: text/plain, Size: 2930 bytes --] On Fri, May 04, 2018 at 02:47:20AM +0300, Dmitry Osipenko wrote: > Attach GR2D to the display IOMMU group in order to provide GR2D access > to BO's IOVA. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > --- > drivers/gpu/drm/tegra/gr2d.c | 31 +++++++++++++++++++++++++++++-- > 1 file changed, 29 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/tegra/gr2d.c b/drivers/gpu/drm/tegra/gr2d.c > index 9a8ea93016a9..8eb530a85dd0 100644 > --- a/drivers/gpu/drm/tegra/gr2d.c > +++ b/drivers/gpu/drm/tegra/gr2d.c > @@ -7,12 +7,14 @@ > */ > > #include <linux/clk.h> > +#include <linux/iommu.h> > > #include "drm.h" > #include "gem.h" > #include "gr2d.h" > > struct gr2d { > + struct iommu_group *group; > struct tegra_drm_client client; > struct host1x_channel *channel; > struct clk *clk; > @@ -30,7 +32,9 @@ static int gr2d_init(struct host1x_client *client) > struct tegra_drm_client *drm = host1x_to_drm_client(client); > struct drm_device *dev = dev_get_drvdata(client->parent); > unsigned long flags = HOST1X_SYNCPT_HAS_BASE; > + struct tegra_drm *tegra = dev->dev_private; > struct gr2d *gr2d = to_gr2d(drm); > + int err; > > gr2d->channel = host1x_channel_request(client->dev); > if (!gr2d->channel) > @@ -42,23 +46,46 @@ static int gr2d_init(struct host1x_client *client) > return -ENOMEM; > } > > - return tegra_drm_register_client(dev->dev_private, drm); > + if (tegra->domain) { > + gr2d->group = iommu_group_get(client->dev); > + > + if (gr2d->group) { > + err = iommu_attach_group(tegra->domain, gr2d->group); > + if (err < 0) { > + dev_err(client->dev, > + "failed to attach to domain: %d\n", > + err); > + host1x_syncpt_free(client->syncpts[0]); > + host1x_channel_put(gr2d->channel); > + iommu_group_put(gr2d->group); > + return err; > + } > + } > + } This is almost identical to the code in DC, perhaps we should factor this out into a separate helper? Nothing that needs to be done right now, I'll take a look at it and see if I can come up with something good in a follow-up patch. > + > + return tegra_drm_register_client(tegra, drm); > } > > static int gr2d_exit(struct host1x_client *client) > { > struct tegra_drm_client *drm = host1x_to_drm_client(client); > struct drm_device *dev = dev_get_drvdata(client->parent); > + struct tegra_drm *tegra = dev->dev_private; > struct gr2d *gr2d = to_gr2d(drm); > int err; > > - err = tegra_drm_unregister_client(dev->dev_private, drm); > + err = tegra_drm_unregister_client(tegra, drm); > if (err < 0) > return err; > > host1x_syncpt_free(client->syncpts[0]); > host1x_channel_put(gr2d->channel); > > + if (gr2d->group) { > + iommu_detach_group(tegra->domain, gr2d->group); > + iommu_group_put(gr2d->group); > + } > + > return 0; > } > Thierry [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] [-- Attachment #2: Type: text/plain, Size: 160 bytes --] _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Thierry Reding <thierry.reding@gmail.com> To: Dmitry Osipenko <digetx@gmail.com> Cc: dri-devel@lists.freedesktop.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v1 2/5] drm/tegra: gr2d: Add IOMMU support Date: Fri, 4 May 2018 12:54:16 +0200 [thread overview] Message-ID: <20180504105416.GN13459@ulmo> (raw) In-Reply-To: <20180503234723.4368-3-digetx@gmail.com> [-- Attachment #1: Type: text/plain, Size: 2930 bytes --] On Fri, May 04, 2018 at 02:47:20AM +0300, Dmitry Osipenko wrote: > Attach GR2D to the display IOMMU group in order to provide GR2D access > to BO's IOVA. > > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> > --- > drivers/gpu/drm/tegra/gr2d.c | 31 +++++++++++++++++++++++++++++-- > 1 file changed, 29 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/tegra/gr2d.c b/drivers/gpu/drm/tegra/gr2d.c > index 9a8ea93016a9..8eb530a85dd0 100644 > --- a/drivers/gpu/drm/tegra/gr2d.c > +++ b/drivers/gpu/drm/tegra/gr2d.c > @@ -7,12 +7,14 @@ > */ > > #include <linux/clk.h> > +#include <linux/iommu.h> > > #include "drm.h" > #include "gem.h" > #include "gr2d.h" > > struct gr2d { > + struct iommu_group *group; > struct tegra_drm_client client; > struct host1x_channel *channel; > struct clk *clk; > @@ -30,7 +32,9 @@ static int gr2d_init(struct host1x_client *client) > struct tegra_drm_client *drm = host1x_to_drm_client(client); > struct drm_device *dev = dev_get_drvdata(client->parent); > unsigned long flags = HOST1X_SYNCPT_HAS_BASE; > + struct tegra_drm *tegra = dev->dev_private; > struct gr2d *gr2d = to_gr2d(drm); > + int err; > > gr2d->channel = host1x_channel_request(client->dev); > if (!gr2d->channel) > @@ -42,23 +46,46 @@ static int gr2d_init(struct host1x_client *client) > return -ENOMEM; > } > > - return tegra_drm_register_client(dev->dev_private, drm); > + if (tegra->domain) { > + gr2d->group = iommu_group_get(client->dev); > + > + if (gr2d->group) { > + err = iommu_attach_group(tegra->domain, gr2d->group); > + if (err < 0) { > + dev_err(client->dev, > + "failed to attach to domain: %d\n", > + err); > + host1x_syncpt_free(client->syncpts[0]); > + host1x_channel_put(gr2d->channel); > + iommu_group_put(gr2d->group); > + return err; > + } > + } > + } This is almost identical to the code in DC, perhaps we should factor this out into a separate helper? Nothing that needs to be done right now, I'll take a look at it and see if I can come up with something good in a follow-up patch. > + > + return tegra_drm_register_client(tegra, drm); > } > > static int gr2d_exit(struct host1x_client *client) > { > struct tegra_drm_client *drm = host1x_to_drm_client(client); > struct drm_device *dev = dev_get_drvdata(client->parent); > + struct tegra_drm *tegra = dev->dev_private; > struct gr2d *gr2d = to_gr2d(drm); > int err; > > - err = tegra_drm_unregister_client(dev->dev_private, drm); > + err = tegra_drm_unregister_client(tegra, drm); > if (err < 0) > return err; > > host1x_syncpt_free(client->syncpts[0]); > host1x_channel_put(gr2d->channel); > > + if (gr2d->group) { > + iommu_detach_group(tegra->domain, gr2d->group); > + iommu_group_put(gr2d->group); > + } > + > return 0; > } > Thierry [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2018-05-04 10:54 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-03 23:47 [PATCH v1 0/5] Support IOMMU for 2d/3d on Tegra30/114 Dmitry Osipenko 2018-05-03 23:47 ` [PATCH v1 1/5] drm/tegra: dc: Balance IOMMU group refcounting Dmitry Osipenko 2018-05-04 10:45 ` Thierry Reding 2018-05-04 10:45 ` Thierry Reding 2018-05-04 11:28 ` Dmitry Osipenko 2018-05-04 12:19 ` Thierry Reding 2018-05-04 12:19 ` Thierry Reding 2018-05-03 23:47 ` [PATCH v1 2/5] drm/tegra: gr2d: Add IOMMU support Dmitry Osipenko 2018-05-04 10:54 ` Thierry Reding [this message] 2018-05-04 10:54 ` Thierry Reding 2018-05-04 11:31 ` Dmitry Osipenko 2018-05-04 12:20 ` Thierry Reding 2018-05-04 12:20 ` Thierry Reding 2018-05-03 23:47 ` [PATCH v1 3/5] drm/tegra: gr3d: " Dmitry Osipenko 2018-05-04 12:20 ` Thierry Reding 2018-05-04 12:20 ` Thierry Reding 2018-05-03 23:47 ` [PATCH v1 4/5] ARM: dts: tegra30: Add IOMMU nodes to Host1x and its clients Dmitry Osipenko 2018-05-04 15:22 ` Thierry Reding 2018-05-04 15:22 ` Thierry Reding 2018-05-03 23:47 ` [PATCH v1 5/5] ARM: dts: tegra114: " Dmitry Osipenko 2018-05-04 15:22 ` Thierry Reding 2018-05-04 10:56 ` [PATCH v1 0/5] Support IOMMU for 2d/3d on Tegra30/114 Thierry Reding 2018-05-04 10:56 ` Thierry Reding 2018-05-04 12:03 ` Dmitry Osipenko
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=20180504105416.GN13459@ulmo \ --to=thierry.reding@gmail.com \ --cc=digetx@gmail.com \ --cc=dri-devel@lists.freedesktop.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-tegra@vger.kernel.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: linkBe 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.