diff mbox series

gpu: host1x: fix compile error when IOMMU API is not available

Message ID 4c3d021c73c001f633803e364cfbc6ace3381205.1554936354.git.stefan@agner.ch (mailing list archive)
State New, archived
Headers show
Series gpu: host1x: fix compile error when IOMMU API is not available | expand

Commit Message

Stefan Agner April 10, 2019, 10:47 p.m. UTC
In case the IOMMU API is not available compiling host1x fails with
the following error:
  In file included from drivers/gpu/host1x/hw/host1x06.c:27:
  drivers/gpu/host1x/hw/channel_hw.c: In function ‘host1x_channel_set_streamid’:
  drivers/gpu/host1x/hw/channel_hw.c:118:30: error: implicit declaration of function
    ‘dev_iommu_fwspec_get’; did you mean ‘iommu_fwspec_free’?  [-Werror=implicit-function-declaration]
  struct iommu_fwspec *spec = dev_iommu_fwspec_get(channel->dev->parent);
                              ^~~~~~~~~~~~~~~~~~~~
                              iommu_fwspec_free

Fixes: de5469c21ff9 ("gpu: host1x: Program the channel stream ID")
Signed-off-by: Stefan Agner <stefan@agner.ch>
---
 drivers/gpu/host1x/hw/channel_hw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Ben Dooks April 11, 2019, 8:23 a.m. UTC | #1
On 2019-04-10 23:47, Stefan Agner wrote:
> In case the IOMMU API is not available compiling host1x fails with
> the following error:
>   In file included from drivers/gpu/host1x/hw/host1x06.c:27:
>   drivers/gpu/host1x/hw/channel_hw.c: In function 
> ‘host1x_channel_set_streamid’:
>   drivers/gpu/host1x/hw/channel_hw.c:118:30: error: implicit
> declaration of function
>     ‘dev_iommu_fwspec_get’; did you mean ‘iommu_fwspec_free’?
> [-Werror=implicit-function-declaration]
>   struct iommu_fwspec *spec = 
> dev_iommu_fwspec_get(channel->dev->parent);
>                               ^~~~~~~~~~~~~~~~~~~~
>                               iommu_fwspec_free
> 
> Fixes: de5469c21ff9 ("gpu: host1x: Program the channel stream ID")
> Signed-off-by: Stefan Agner <stefan@agner.ch>

would it be better to provide something like this i nthe header that
defines dev_iommu_fwspec_get() to be:

static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device 
*dev) { return NULL; }

although returning an PTR_ERR would have been better.

> ---
>  drivers/gpu/host1x/hw/channel_hw.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/host1x/hw/channel_hw.c
> b/drivers/gpu/host1x/hw/channel_hw.c
> index 27101c04a827..4030d64916f0 100644
> --- a/drivers/gpu/host1x/hw/channel_hw.c
> +++ b/drivers/gpu/host1x/hw/channel_hw.c
> @@ -114,7 +114,7 @@ static inline void synchronize_syncpt_base(struct
> host1x_job *job)
> 
>  static void host1x_channel_set_streamid(struct host1x_channel 
> *channel)
>  {
> -#if HOST1X_HW >= 6
> +#if IS_ENABLED(CONFIG_IOMMU_API) &&  HOST1X_HW >= 6
>  	struct iommu_fwspec *spec = 
> dev_iommu_fwspec_get(channel->dev->parent);
>  	u32 sid = spec ? spec->ids[0] & 0xffff : 0x7f;
Thierry Reding April 11, 2019, 8:30 a.m. UTC | #2
On Thu, Apr 11, 2019 at 09:23:13AM +0100, Ben Dooks wrote:
> 
> 
> On 2019-04-10 23:47, Stefan Agner wrote:
> > In case the IOMMU API is not available compiling host1x fails with
> > the following error:
> >   In file included from drivers/gpu/host1x/hw/host1x06.c:27:
> >   drivers/gpu/host1x/hw/channel_hw.c: In function
> > ‘host1x_channel_set_streamid’:
> >   drivers/gpu/host1x/hw/channel_hw.c:118:30: error: implicit
> > declaration of function
> >     ‘dev_iommu_fwspec_get’; did you mean ‘iommu_fwspec_free’?
> > [-Werror=implicit-function-declaration]
> >   struct iommu_fwspec *spec =
> > dev_iommu_fwspec_get(channel->dev->parent);
> >                               ^~~~~~~~~~~~~~~~~~~~
> >                               iommu_fwspec_free
> > 
> > Fixes: de5469c21ff9 ("gpu: host1x: Program the channel stream ID")
> > Signed-off-by: Stefan Agner <stefan@agner.ch>
> 
> would it be better to provide something like this i nthe header that
> defines dev_iommu_fwspec_get() to be:
> 
> static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device *dev)
> { return NULL; }
> 
> although returning an PTR_ERR would have been better.

I don't think there's really a large number of failures here. Either
your device has an IOMMU fwspec or it doesn't.

But yes, I think it'd be better to have the above static inline dummy in
iommu.h, but I'll apply this for now in the hopes of getting it in
before v5.1 final.

Thierry

> 
> > ---
> >  drivers/gpu/host1x/hw/channel_hw.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/gpu/host1x/hw/channel_hw.c
> > b/drivers/gpu/host1x/hw/channel_hw.c
> > index 27101c04a827..4030d64916f0 100644
> > --- a/drivers/gpu/host1x/hw/channel_hw.c
> > +++ b/drivers/gpu/host1x/hw/channel_hw.c
> > @@ -114,7 +114,7 @@ static inline void synchronize_syncpt_base(struct
> > host1x_job *job)
> > 
> >  static void host1x_channel_set_streamid(struct host1x_channel *channel)
> >  {
> > -#if HOST1X_HW >= 6
> > +#if IS_ENABLED(CONFIG_IOMMU_API) &&  HOST1X_HW >= 6
> >  	struct iommu_fwspec *spec =
> > dev_iommu_fwspec_get(channel->dev->parent);
> >  	u32 sid = spec ? spec->ids[0] & 0xffff : 0x7f;
Mikko Perttunen April 11, 2019, 10:06 a.m. UTC | #3
On 11.4.2019 11.30, Thierry Reding wrote:
> On Thu, Apr 11, 2019 at 09:23:13AM +0100, Ben Dooks wrote:
>>
>>
>> On 2019-04-10 23:47, Stefan Agner wrote:
>>> In case the IOMMU API is not available compiling host1x fails with
>>> the following error:
>>>    In file included from drivers/gpu/host1x/hw/host1x06.c:27:
>>>    drivers/gpu/host1x/hw/channel_hw.c: In function
>>> ‘host1x_channel_set_streamid’:
>>>    drivers/gpu/host1x/hw/channel_hw.c:118:30: error: implicit
>>> declaration of function
>>>      ‘dev_iommu_fwspec_get’; did you mean ‘iommu_fwspec_free’?
>>> [-Werror=implicit-function-declaration]
>>>    struct iommu_fwspec *spec =
>>> dev_iommu_fwspec_get(channel->dev->parent);
>>>                                ^~~~~~~~~~~~~~~~~~~~
>>>                                iommu_fwspec_free
>>>
>>> Fixes: de5469c21ff9 ("gpu: host1x: Program the channel stream ID")
>>> Signed-off-by: Stefan Agner <stefan@agner.ch>
>>
>> would it be better to provide something like this i nthe header that
>> defines dev_iommu_fwspec_get() to be:
>>
>> static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device *dev)
>> { return NULL; }
>>
>> although returning an PTR_ERR would have been better.
> 
> I don't think there's really a large number of failures here. Either
> your device has an IOMMU fwspec or it doesn't.
> 
> But yes, I think it'd be better to have the above static inline dummy in
> iommu.h, but I'll apply this for now in the hopes of getting it in
> before v5.1 final.

A similar patch was already sent before by someone. That one also 
programs the bypass stream ID (0x7f) even if IOMMU is disabled. We 
should pick that patch instead.

Thanks,
Mikko

> 
> Thierry >
>>
>>> ---
>>>   drivers/gpu/host1x/hw/channel_hw.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/host1x/hw/channel_hw.c
>>> b/drivers/gpu/host1x/hw/channel_hw.c
>>> index 27101c04a827..4030d64916f0 100644
>>> --- a/drivers/gpu/host1x/hw/channel_hw.c
>>> +++ b/drivers/gpu/host1x/hw/channel_hw.c
>>> @@ -114,7 +114,7 @@ static inline void synchronize_syncpt_base(struct
>>> host1x_job *job)
>>>
>>>   static void host1x_channel_set_streamid(struct host1x_channel *channel)
>>>   {
>>> -#if HOST1X_HW >= 6
>>> +#if IS_ENABLED(CONFIG_IOMMU_API) &&  HOST1X_HW >= 6
>>>   	struct iommu_fwspec *spec =
>>> dev_iommu_fwspec_get(channel->dev->parent);
>>>   	u32 sid = spec ? spec->ids[0] & 0xffff : 0x7f;
>>>
>>> _______________________________________________
>>> dri-devel mailing list
>>> dri-devel@lists.freedesktop.org
>>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
Stefan Agner April 11, 2019, 10:57 a.m. UTC | #4
On 11.04.2019 10:23, Ben Dooks wrote:
> On 2019-04-10 23:47, Stefan Agner wrote:
>> In case the IOMMU API is not available compiling host1x fails with
>> the following error:
>>   In file included from drivers/gpu/host1x/hw/host1x06.c:27:
>>   drivers/gpu/host1x/hw/channel_hw.c: In function ‘host1x_channel_set_streamid’:
>>   drivers/gpu/host1x/hw/channel_hw.c:118:30: error: implicit
>> declaration of function
>>     ‘dev_iommu_fwspec_get’; did you mean ‘iommu_fwspec_free’?
>> [-Werror=implicit-function-declaration]
>>   struct iommu_fwspec *spec = dev_iommu_fwspec_get(channel->dev->parent);
>>                               ^~~~~~~~~~~~~~~~~~~~
>>                               iommu_fwspec_free
>>
>> Fixes: de5469c21ff9 ("gpu: host1x: Program the channel stream ID")
>> Signed-off-by: Stefan Agner <stefan@agner.ch>
> 
> would it be better to provide something like this i nthe header that
> defines dev_iommu_fwspec_get() to be:
> 
> static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device
> *dev) { return NULL; }
> 
> although returning an PTR_ERR would have been better.
> 

The problem is that the code also accesses fields of struct iommu_fwspec
which are not defined in the !CONFIG_IOMMU_API case.

--
Stefan

>> ---
>>  drivers/gpu/host1x/hw/channel_hw.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/host1x/hw/channel_hw.c
>> b/drivers/gpu/host1x/hw/channel_hw.c
>> index 27101c04a827..4030d64916f0 100644
>> --- a/drivers/gpu/host1x/hw/channel_hw.c
>> +++ b/drivers/gpu/host1x/hw/channel_hw.c
>> @@ -114,7 +114,7 @@ static inline void synchronize_syncpt_base(struct
>> host1x_job *job)
>>
>>  static void host1x_channel_set_streamid(struct host1x_channel *channel)
>>  {
>> -#if HOST1X_HW >= 6
>> +#if IS_ENABLED(CONFIG_IOMMU_API) &&  HOST1X_HW >= 6
>>  	struct iommu_fwspec *spec = dev_iommu_fwspec_get(channel->dev->parent);
>>  	u32 sid = spec ? spec->ids[0] & 0xffff : 0x7f;
Dmitry Osipenko April 11, 2019, 11:31 a.m. UTC | #5
11.04.2019 13:06, Mikko Perttunen пишет:
> On 11.4.2019 11.30, Thierry Reding wrote:
>> On Thu, Apr 11, 2019 at 09:23:13AM +0100, Ben Dooks wrote:
>>>
>>>
>>> On 2019-04-10 23:47, Stefan Agner wrote:
>>>> In case the IOMMU API is not available compiling host1x fails with
>>>> the following error:
>>>>    In file included from drivers/gpu/host1x/hw/host1x06.c:27:
>>>>    drivers/gpu/host1x/hw/channel_hw.c: In function
>>>> ‘host1x_channel_set_streamid’:
>>>>    drivers/gpu/host1x/hw/channel_hw.c:118:30: error: implicit
>>>> declaration of function
>>>>      ‘dev_iommu_fwspec_get’; did you mean ‘iommu_fwspec_free’?
>>>> [-Werror=implicit-function-declaration]
>>>>    struct iommu_fwspec *spec =
>>>> dev_iommu_fwspec_get(channel->dev->parent);
>>>>                                ^~~~~~~~~~~~~~~~~~~~
>>>>                                iommu_fwspec_free
>>>>
>>>> Fixes: de5469c21ff9 ("gpu: host1x: Program the channel stream ID")
>>>> Signed-off-by: Stefan Agner <stefan@agner.ch>
>>>
>>> would it be better to provide something like this i nthe header that
>>> defines dev_iommu_fwspec_get() to be:
>>>
>>> static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device *dev)
>>> { return NULL; }
>>>
>>> although returning an PTR_ERR would have been better.
>>
>> I don't think there's really a large number of failures here. Either
>> your device has an IOMMU fwspec or it doesn't.
>>
>> But yes, I think it'd be better to have the above static inline dummy in
>> iommu.h, but I'll apply this for now in the hopes of getting it in
>> before v5.1 final.
> 
> A similar patch was already sent before by someone. That one also programs the bypass stream ID (0x7f) even if IOMMU is disabled. We should pick that patch instead.

For the record.. here is that patch https://patchwork.ozlabs.org/patch/1052364/
Thierry Reding April 11, 2019, 3:37 p.m. UTC | #6
On Thu, Apr 11, 2019 at 02:31:48PM +0300, Dmitry Osipenko wrote:
> 11.04.2019 13:06, Mikko Perttunen пишет:
> > On 11.4.2019 11.30, Thierry Reding wrote:
> >> On Thu, Apr 11, 2019 at 09:23:13AM +0100, Ben Dooks wrote:
> >>>
> >>>
> >>> On 2019-04-10 23:47, Stefan Agner wrote:
> >>>> In case the IOMMU API is not available compiling host1x fails with
> >>>> the following error:
> >>>>    In file included from drivers/gpu/host1x/hw/host1x06.c:27:
> >>>>    drivers/gpu/host1x/hw/channel_hw.c: In function
> >>>> ‘host1x_channel_set_streamid’:
> >>>>    drivers/gpu/host1x/hw/channel_hw.c:118:30: error: implicit
> >>>> declaration of function
> >>>>      ‘dev_iommu_fwspec_get’; did you mean ‘iommu_fwspec_free’?
> >>>> [-Werror=implicit-function-declaration]
> >>>>    struct iommu_fwspec *spec =
> >>>> dev_iommu_fwspec_get(channel->dev->parent);
> >>>>                                ^~~~~~~~~~~~~~~~~~~~
> >>>>                                iommu_fwspec_free
> >>>>
> >>>> Fixes: de5469c21ff9 ("gpu: host1x: Program the channel stream ID")
> >>>> Signed-off-by: Stefan Agner <stefan@agner.ch>
> >>>
> >>> would it be better to provide something like this i nthe header that
> >>> defines dev_iommu_fwspec_get() to be:
> >>>
> >>> static inline struct iommu_fwspec *dev_iommu_fwspec_get(struct device *dev)
> >>> { return NULL; }
> >>>
> >>> although returning an PTR_ERR would have been better.
> >>
> >> I don't think there's really a large number of failures here. Either
> >> your device has an IOMMU fwspec or it doesn't.
> >>
> >> But yes, I think it'd be better to have the above static inline dummy in
> >> iommu.h, but I'll apply this for now in the hopes of getting it in
> >> before v5.1 final.
> > 
> > A similar patch was already sent before by someone. That one also programs the bypass stream ID (0x7f) even if IOMMU is disabled. We should pick that patch instead.
> 
> For the record.. here is that patch https://patchwork.ozlabs.org/patch/1052364/

Ugh... too late. I'll apply Arnd's patch on top of this one.

Thierry
diff mbox series

Patch

diff --git a/drivers/gpu/host1x/hw/channel_hw.c b/drivers/gpu/host1x/hw/channel_hw.c
index 27101c04a827..4030d64916f0 100644
--- a/drivers/gpu/host1x/hw/channel_hw.c
+++ b/drivers/gpu/host1x/hw/channel_hw.c
@@ -114,7 +114,7 @@  static inline void synchronize_syncpt_base(struct host1x_job *job)
 
 static void host1x_channel_set_streamid(struct host1x_channel *channel)
 {
-#if HOST1X_HW >= 6
+#if IS_ENABLED(CONFIG_IOMMU_API) &&  HOST1X_HW >= 6
 	struct iommu_fwspec *spec = dev_iommu_fwspec_get(channel->dev->parent);
 	u32 sid = spec ? spec->ids[0] & 0xffff : 0x7f;