ARM: tegra: Register host1x node with iommu binding on tegra124

Message ID 20170709163614.6746-1-contact@paulk.fr
State Accepted
Headers show

Commit Message

Paul Kocialkowski July 9, 2017, 4:36 p.m.
This registers the host1x node with the SMMU (as HC swgroup) to allow
the host1x code to attach to it. It avoid failing the probe sequence,
which resulted in the tegra drm driver not probing and thus nothing
being displayed on-screen.

Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
---
 arch/arm/boot/dts/tegra124.dtsi | 1 +
 1 file changed, 1 insertion(+)

Comments

Thierry Reding July 10, 2017, 5:21 a.m. | #1
On Sun, Jul 09, 2017 at 07:36:14PM +0300, Paul Kocialkowski wrote:
> This registers the host1x node with the SMMU (as HC swgroup) to allow
> the host1x code to attach to it. It avoid failing the probe sequence,
> which resulted in the tegra drm driver not probing and thus nothing
> being displayed on-screen.
> 
> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> ---
>  arch/arm/boot/dts/tegra124.dtsi | 1 +
>  1 file changed, 1 insertion(+)

Thanks for tracking this down. However, I don't think this is an
appropriate fix for v4.12 because it requires an update to the DTB in
order to preserve functionality, which means we've broken DT ABI. The
proper fix I think needs to be to make usage of the IOMMU completely
optional in the host1x driver.

So I think what happens without this DT change is that the call to
iommu_attach_device() fails and we have no way to recover from that. I
think what we need to do is to free the domain in that case and make
sure we can continue without one. It's probably best to add an error
message, or maybe a warning to make sure people are aware.

Do you have the time to address this? If not, perhaps Mikko can take a
look?

Thierry
Paul Kocialkowski July 10, 2017, 6:05 a.m. | #2
Le lundi 10 juillet 2017 à 07:21 +0200, Thierry Reding a écrit :
> On Sun, Jul 09, 2017 at 07:36:14PM +0300, Paul Kocialkowski wrote:
> > This registers the host1x node with the SMMU (as HC swgroup) to
> > allow
> > the host1x code to attach to it. It avoid failing the probe
> > sequence,
> > which resulted in the tegra drm driver not probing and thus nothing
> > being displayed on-screen.
> > 
> > Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> > ---
> >  arch/arm/boot/dts/tegra124.dtsi | 1 +
> >  1 file changed, 1 insertion(+)
> 
> Thanks for tracking this down. However, I don't think this is an
> appropriate fix for v4.12 because it requires an update to the DTB in
> order to preserve functionality, which means we've broken DT ABI. The
> proper fix I think needs to be to make usage of the IOMMU completely
> optional in the host1x driver.

I see, that makes sense.

> So I think what happens without this DT change is that the call to
> iommu_attach_device() fails and we have no way to recover from that.

That is exactly what is happening, indeed.

> I think what we need to do is to free the domain in that case and make
> sure we can continue without one. It's probably best to add an error
> message, or maybe a warning to make sure people are aware.

By freeing the domain, do you mean continuing without IOMMU support?
If so, then we should make sure to only behave that way for -ENODEV and
generally still fail for other errors.

> Do you have the time to address this? If not, perhaps Mikko can take a
> look?

I can craft a patch this evening, but if someone else wants to work on
it earlier, they are totally welcome to do it!
Paul Kocialkowski July 11, 2017, 8:50 a.m. | #3
On Sun, 2017-07-09 at 19:36 +0300, Paul Kocialkowski wrote:
> This registers the host1x node with the SMMU (as HC swgroup) to allow
> the host1x code to attach to it. It avoid failing the probe sequence,
> which resulted in the tegra drm driver not probing and thus nothing
> being displayed on-screen.

Fixes: 404bfb78daf3 ("gpu: host1x: Add IOMMU support")

> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> ---
>  arch/arm/boot/dts/tegra124.dtsi | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/arch/arm/boot/dts/tegra124.dtsi
> b/arch/arm/boot/dts/tegra124.dtsi
> index 187a36c6d0fc..b3b89befffeb 100644
> --- a/arch/arm/boot/dts/tegra124.dtsi
> +++ b/arch/arm/boot/dts/tegra124.dtsi
> @@ -85,6 +85,7 @@
>  		clocks = <&tegra_car TEGRA124_CLK_HOST1X>;
>  		resets = <&tegra_car 28>;
>  		reset-names = "host1x";
> +		iommus = <&mc TEGRA_SWGROUP_HC>;
>  
>  		#address-cells = <2>;
>  		#size-cells = <2>;
Marcel Ziswiler July 11, 2017, 2:54 p.m. | #4
On Tue, 2017-07-11 at 11:50 +0300, Paul Kocialkowski wrote:
> On Sun, 2017-07-09 at 19:36 +0300, Paul Kocialkowski wrote:

> > This registers the host1x node with the SMMU (as HC swgroup) to

> > allow

> > the host1x code to attach to it. It avoid failing the probe

> > sequence,

> > which resulted in the tegra drm driver not probing and thus nothing

> > being displayed on-screen.

> 

> Fixes: 404bfb78daf3 ("gpu: host1x: Add IOMMU support")

> 

> > Signed-off-by: Paul Kocialkowski <contact-

> > W9ppeneeCTY@public.gmane.org>


Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
Tested-on: Apalis TK1, Jetson-TK1

> > ---

> >  arch/arm/boot/dts/tegra124.dtsi | 1 +

> >  1 file changed, 1 insertion(+)

> > 

> > diff --git a/arch/arm/boot/dts/tegra124.dtsi

> > b/arch/arm/boot/dts/tegra124.dtsi

> > index 187a36c6d0fc..b3b89befffeb 100644

> > --- a/arch/arm/boot/dts/tegra124.dtsi

> > +++ b/arch/arm/boot/dts/tegra124.dtsi

> > @@ -85,6 +85,7 @@

> >  		clocks = <&tegra_car TEGRA124_CLK_HOST1X>;

> >  		resets = <&tegra_car 28>;

> >  		reset-names = "host1x";

> > +		iommus = <&mc TEGRA_SWGROUP_HC>;

> >  

> >  		#address-cells = <2>;

> >  		#size-cells = <2>;


So I take it we still will need this one moving forward, correct?

How about tegra30, I guess the same applies there, isn't it? Should I
send a patch or are you guys doing that?
Paul Kocialkowski July 11, 2017, 3:05 p.m. | #5
On Tue, 2017-07-11 at 14:54 +0000, Marcel Ziswiler wrote:
> On Tue, 2017-07-11 at 11:50 +0300, Paul Kocialkowski wrote:
> > On Sun, 2017-07-09 at 19:36 +0300, Paul Kocialkowski wrote:
> > > This registers the host1x node with the SMMU (as HC swgroup) to
> > > allow
> > > the host1x code to attach to it. It avoid failing the probe
> > > sequence,
> > > which resulted in the tegra drm driver not probing and thus
> > > nothing
> > > being displayed on-screen.
> > 
> > Fixes: 404bfb78daf3 ("gpu: host1x: Add IOMMU support")
> > 
> > > Signed-off-by: Paul Kocialkowski <contact-
> > > W9ppeneeCTY@public.gmane.org>
> 
> Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> Tested-on: Apalis TK1, Jetson-TK1
> 
> > > ---
> > >  arch/arm/boot/dts/tegra124.dtsi | 1 +
> > >  1 file changed, 1 insertion(+)
> > > 
> > > diff --git a/arch/arm/boot/dts/tegra124.dtsi
> > > b/arch/arm/boot/dts/tegra124.dtsi
> > > index 187a36c6d0fc..b3b89befffeb 100644
> > > --- a/arch/arm/boot/dts/tegra124.dtsi
> > > +++ b/arch/arm/boot/dts/tegra124.dtsi
> > > @@ -85,6 +85,7 @@
> > >  		clocks = <&tegra_car TEGRA124_CLK_HOST1X>;
> > >  		resets = <&tegra_car 28>;
> > >  		reset-names = "host1x";
> > > +		iommus = <&mc TEGRA_SWGROUP_HC>;
> > >  
> > >  		#address-cells = <2>;
> > >  		#size-cells = <2>;
> 
> So I take it we still will need this one moving forward, correct?

Yes, this one actually enables the IOMMU while the other one handles the
failure to attach the IOMMU without brinding the whole drm driver down.

So it's best to actually make use of the feature!

> How about tegra30, I guess the same applies there, isn't it? Should I
> send a patch or are you guys doing that?

I don't have any tegra hardware aside of tegra124, so that's all I can
contribute to. I don't know if others have looked into the same type of
issue happening on either newer or older platforms.

Cheers,
Thierry Reding July 31, 2017, 2:48 p.m. | #6
On Sun, Jul 09, 2017 at 07:36:14PM +0300, Paul Kocialkowski wrote:
> This registers the host1x node with the SMMU (as HC swgroup) to allow
> the host1x code to attach to it. It avoid failing the probe sequence,
> which resulted in the tegra drm driver not probing and thus nothing
> being displayed on-screen.
> 
> Signed-off-by: Paul Kocialkowski <contact@paulk.fr>
> ---
>  arch/arm/boot/dts/tegra124.dtsi | 1 +
>  1 file changed, 1 insertion(+)

Applied to for-4.14/arm/dt, thanks.

Thierry
Thierry Reding July 31, 2017, 3:23 p.m. | #7
On Tue, Jul 11, 2017 at 03:17:46PM +0000, Marcel Ziswiler wrote:
> On Tue, 2017-07-11 at 18:05 +0300, Paul Kocialkowski wrote:
> > On Tue, 2017-07-11 at 14:54 +0000, Marcel Ziswiler wrote:
> > > On Tue, 2017-07-11 at 11:50 +0300, Paul Kocialkowski wrote:
> > > > On Sun, 2017-07-09 at 19:36 +0300, Paul Kocialkowski wrote:
> > > > > This registers the host1x node with the SMMU (as HC swgroup) to
> > > > > allow
> > > > > the host1x code to attach to it. It avoid failing the probe
> > > > > sequence,
> > > > > which resulted in the tegra drm driver not probing and thus
> > > > > nothing
> > > > > being displayed on-screen.
> > > > 
> > > > Fixes: 404bfb78daf3 ("gpu: host1x: Add IOMMU support")
> > > > 
> > > > > Signed-off-by: Paul Kocialkowski <contact-
> > > > > W9ppeneeCTY@public.gmane.org>
> > > 
> > > Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > > Tested-on: Apalis TK1, Jetson-TK1
> > > 
> > > > > ---
> > > > >  arch/arm/boot/dts/tegra124.dtsi | 1 +
> > > > >  1 file changed, 1 insertion(+)
> > > > > 
> > > > > diff --git a/arch/arm/boot/dts/tegra124.dtsi
> > > > > b/arch/arm/boot/dts/tegra124.dtsi
> > > > > index 187a36c6d0fc..b3b89befffeb 100644
> > > > > --- a/arch/arm/boot/dts/tegra124.dtsi
> > > > > +++ b/arch/arm/boot/dts/tegra124.dtsi
> > > > > @@ -85,6 +85,7 @@
> > > > >  		clocks = <&tegra_car TEGRA124_CLK_HOST1X>;
> > > > >  		resets = <&tegra_car 28>;
> > > > >  		reset-names = "host1x";
> > > > > +		iommus = <&mc TEGRA_SWGROUP_HC>;
> > > > >  
> > > > >  		#address-cells = <2>;
> > > > >  		#size-cells = <2>;
> > > 
> > > So I take it we still will need this one moving forward, correct?
> > 
> > Yes, this one actually enables the IOMMU while the other one handles
> > the
> > failure to attach the IOMMU without brinding the whole drm driver
> > down.
> > 
> > So it's best to actually make use of the feature!
> > 
> > > How about tegra30, I guess the same applies there, isn't it? Should
> > > I
> > > send a patch or are you guys doing that?
> > 
> > I don't have any tegra hardware aside of tegra124, so that's all I
> > can
> > contribute to. I don't know if others have looked into the same type
> > of
> > issue happening on either newer or older platforms.
> 
> OK, as we happen to still selling Apalis/Colibri T30 and me having
> Beaver as well as Cardhu available for testing I can cook something up,
> test and send it along. First tries indicate it working on 4.12 but
> somehow crashing during memory allocation on -next. We'll see.

I think we're going to need the same change on Tegra30 and Tegra114. And
Tegra132 and Tegra210 for that matter. With the gpu/host1x fix applied
things should keep working on all generations, but we need DT changes if
we want to make use of the SMMU.

Thierry
Paul Kocialkowski Aug. 1, 2017, 9:56 a.m. | #8
On Mon, 2017-07-31 at 17:23 +0200, Thierry Reding wrote:
> On Tue, Jul 11, 2017 at 03:17:46PM +0000, Marcel Ziswiler wrote:
> > On Tue, 2017-07-11 at 18:05 +0300, Paul Kocialkowski wrote:
> > > On Tue, 2017-07-11 at 14:54 +0000, Marcel Ziswiler wrote:
> > > > On Tue, 2017-07-11 at 11:50 +0300, Paul Kocialkowski wrote:
> > > > > On Sun, 2017-07-09 at 19:36 +0300, Paul Kocialkowski wrote:
> > > > > > This registers the host1x node with the SMMU (as HC swgroup)
> > > > > > to
> > > > > > allow
> > > > > > the host1x code to attach to it. It avoid failing the probe
> > > > > > sequence,
> > > > > > which resulted in the tegra drm driver not probing and thus
> > > > > > nothing
> > > > > > being displayed on-screen.
> > > > > 
> > > > > Fixes: 404bfb78daf3 ("gpu: host1x: Add IOMMU support")
> > > > > 
> > > > > > Signed-off-by: Paul Kocialkowski <contact-
> > > > > > W9ppeneeCTY@public.gmane.org>
> > > > 
> > > > Tested-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
> > > > Tested-on: Apalis TK1, Jetson-TK1
> > > > 
> > > > > > ---
> > > > > >  arch/arm/boot/dts/tegra124.dtsi | 1 +
> > > > > >  1 file changed, 1 insertion(+)
> > > > > > 
> > > > > > diff --git a/arch/arm/boot/dts/tegra124.dtsi
> > > > > > b/arch/arm/boot/dts/tegra124.dtsi
> > > > > > index 187a36c6d0fc..b3b89befffeb 100644
> > > > > > --- a/arch/arm/boot/dts/tegra124.dtsi
> > > > > > +++ b/arch/arm/boot/dts/tegra124.dtsi
> > > > > > @@ -85,6 +85,7 @@
> > > > > >  		clocks = <&tegra_car TEGRA124_CLK_HOST1X>;
> > > > > >  		resets = <&tegra_car 28>;
> > > > > >  		reset-names = "host1x";
> > > > > > +		iommus = <&mc TEGRA_SWGROUP_HC>;
> > > > > >  
> > > > > >  		#address-cells = <2>;
> > > > > >  		#size-cells = <2>;
> > > > 
> > > > So I take it we still will need this one moving forward,
> > > > correct?
> > > 
> > > Yes, this one actually enables the IOMMU while the other one
> > > handles
> > > the
> > > failure to attach the IOMMU without brinding the whole drm driver
> > > down.
> > > 
> > > So it's best to actually make use of the feature!
> > > 
> > > > How about tegra30, I guess the same applies there, isn't it?
> > > > Should
> > > > I
> > > > send a patch or are you guys doing that?
> > > 
> > > I don't have any tegra hardware aside of tegra124, so that's all I
> > > can
> > > contribute to. I don't know if others have looked into the same
> > > type
> > > of
> > > issue happening on either newer or older platforms.
> > 
> > OK, as we happen to still selling Apalis/Colibri T30 and me having
> > Beaver as well as Cardhu available for testing I can cook something
> > up,
> > test and send it along. First tries indicate it working on 4.12 but
> > somehow crashing during memory allocation on -next. We'll see.
> 
> I think we're going to need the same change on Tegra30 and Tegra114.
> And
> Tegra132 and Tegra210 for that matter. With the gpu/host1x fix applied
> things should keep working on all generations, but we need DT changes
> if
> we want to make use of the SMMU.

I don't have any other hardware than tegra124, so I don't really feel
confident sending out those patches knowing that I won't be able to test
them.

I could still craft them, but we'd have to make sure that someone can
test them before they are applied.

Patch

diff --git a/arch/arm/boot/dts/tegra124.dtsi b/arch/arm/boot/dts/tegra124.dtsi
index 187a36c6d0fc..b3b89befffeb 100644
--- a/arch/arm/boot/dts/tegra124.dtsi
+++ b/arch/arm/boot/dts/tegra124.dtsi
@@ -85,6 +85,7 @@ 
 		clocks = <&tegra_car TEGRA124_CLK_HOST1X>;
 		resets = <&tegra_car 28>;
 		reset-names = "host1x";
+		iommus = <&mc TEGRA_SWGROUP_HC>;
 
 		#address-cells = <2>;
 		#size-cells = <2>;