Hi Krzysztof,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   b9bbe6ed63b2b9f2c9ee5cbd0f2c946a2723f4ce
commit: e93a1695d7fb551376b1c1220a267d032b6ad159 iommu: Enable compile testing 
for some of drivers
date:   3 months ago
config: ia64-randconfig-s001-20200518 (attached as .config)
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-193-gb8fad4bc-dirty
        git checkout e93a1695d7fb551376b1c1220a267d032b6ad159
        # save the attached .config to linux build tree
        make C=1 ARCH=ia64 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag as appropriate
Reported-by: kbuild test robot <[email protected]>

All error/warnings (new ones prefixed by >>, old ones prefixed by <<):

drivers/iommu/exynos-iommu.c: In function 'exynos_sysmmu_suspend':
>> drivers/iommu/exynos-iommu.c:673:54: error: 'struct dev_archdata' has no 
>> member named 'iommu'
673 |   struct exynos_iommu_owner *owner = master->archdata.iommu;
|                                                      ^
drivers/iommu/exynos-iommu.c: In function 'exynos_sysmmu_resume':
drivers/iommu/exynos-iommu.c:691:54: error: 'struct dev_archdata' has no member 
named 'iommu'
691 |   struct exynos_iommu_owner *owner = master->archdata.iommu;
|                                                      ^
drivers/iommu/exynos-iommu.c: In function 'exynos_iommu_detach_device':
drivers/iommu/exynos-iommu.c:840:50: error: 'struct dev_archdata' has no member 
named 'iommu'
840 |  struct exynos_iommu_owner *owner = dev->archdata.iommu;
|                                                  ^
drivers/iommu/exynos-iommu.c:176:40: error: 'struct dev_archdata' has no member 
named 'iommu'
176 | #define has_sysmmu(dev)  (dev->archdata.iommu != NULL)
|                                        ^
>> drivers/iommu/exynos-iommu.c:846:7: note: in expansion of macro 'has_sysmmu'
846 |  if (!has_sysmmu(dev) || owner->domain != iommu_domain)
|       ^~~~~~~~~~
drivers/iommu/exynos-iommu.c: In function 'exynos_iommu_attach_device':
drivers/iommu/exynos-iommu.c:878:50: error: 'struct dev_archdata' has no member 
named 'iommu'
878 |  struct exynos_iommu_owner *owner = dev->archdata.iommu;
|                                                  ^
drivers/iommu/exynos-iommu.c:176:40: error: 'struct dev_archdata' has no member 
named 'iommu'
176 | #define has_sysmmu(dev)  (dev->archdata.iommu != NULL)
|                                        ^
drivers/iommu/exynos-iommu.c:884:7: note: in expansion of macro 'has_sysmmu'
884 |  if (!has_sysmmu(dev))
|       ^~~~~~~~~~
drivers/iommu/exynos-iommu.c: In function 'exynos_iommu_add_device':
drivers/iommu/exynos-iommu.c:1240:50: error: 'struct dev_archdata' has no 
member named 'iommu'
1240 |  struct exynos_iommu_owner *owner = dev->archdata.iommu;
|                                                  ^
drivers/iommu/exynos-iommu.c:176:40: error: 'struct dev_archdata' has no member 
named 'iommu'
176 | #define has_sysmmu(dev)  (dev->archdata.iommu != NULL)
|                                        ^
drivers/iommu/exynos-iommu.c:1244:7: note: in expansion of macro 'has_sysmmu'
1244 |  if (!has_sysmmu(dev))
|       ^~~~~~~~~~
drivers/iommu/exynos-iommu.c: In function 'exynos_iommu_remove_device':
drivers/iommu/exynos-iommu.c:1269:50: error: 'struct dev_archdata' has no 
member named 'iommu'
1269 |  struct exynos_iommu_owner *owner = dev->archdata.iommu;
|                                                  ^
drivers/iommu/exynos-iommu.c:176:40: error: 'struct dev_archdata' has no member 
named 'iommu'
176 | #define has_sysmmu(dev)  (dev->archdata.iommu != NULL)
|                                        ^
drivers/iommu/exynos-iommu.c:1272:7: note: in expansion of macro 'has_sysmmu'
1272 |  if (!has_sysmmu(dev))
|       ^~~~~~~~~~
drivers/iommu/exynos-iommu.c: In function 'exynos_iommu_of_xlate':
drivers/iommu/exynos-iommu.c:1294:50: error: 'struct dev_archdata' has no 
member named 'iommu'
1294 |  struct exynos_iommu_owner *owner = dev->archdata.iommu;
|                                                  ^
drivers/iommu/exynos-iommu.c:1312:16: error: 'struct dev_archdata' has no 
member named 'iommu'
1312 |   dev->archdata.iommu = owner;
|                ^

sparse warnings: (new ones prefixed by >>)

   drivers/iommu/exynos-iommu.c:673:68: sparse: sparse: using member 'iommu' in 
incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:691:68: sparse: sparse: using member 'iommu' in 
incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:840:57: sparse: sparse: using member 'iommu' in 
incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:846:14: sparse: sparse: using member 'iommu' in 
incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:878:57: sparse: sparse: using member 'iommu' in 
incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:884:14: sparse: sparse: using member 'iommu' in 
incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:1240:57: sparse: sparse: using member 'iommu' 
in incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:1244:14: sparse: sparse: using member 'iommu' 
in incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:1269:57: sparse: sparse: using member 'iommu' 
in incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:1272:14: sparse: sparse: using member 'iommu' 
in incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:1294:57: sparse: sparse: using member 'iommu' 
in incomplete struct dev_archdata
   drivers/iommu/exynos-iommu.c:1312:30: sparse: sparse: using member 'iommu' 
in incomplete struct dev_archdata
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32
   include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32
   include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32
   include/asm-generic/io.h:179:15: sparse: sparse: cast to restricted __le32
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
   include/asm-generic/io.h:225:22: sparse: sparse: incorrect type in argument 
1 (different base types) @@    expected unsigned int [usertype] value @@    got 
restrunsigned int [usertype] value @@
   include/asm-generic/io.h:225:22: sparse:    expected unsigned int [usertype] 
value
   include/asm-generic/io.h:225:22: sparse:    got restricted __le32 [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse: sparse: incorrect type in 
>> assignment (different base types) @@    expected unsigned int [usertype] @@  
>>   got restrunsigned int [usertype] @@
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    expected unsigned int 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    got restricted __le32 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse: sparse: incorrect type in 
>> assignment (different base types) @@    expected unsigned int [usertype] @@  
>>   got restrunsigned int [usertype] @@
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    expected unsigned int 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    got restricted __le32 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse: sparse: incorrect type in 
>> assignment (different base types) @@    expected unsigned int [usertype] @@  
>>   got restrunsigned int [usertype] @@
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    expected unsigned int 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    got restricted __le32 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse: sparse: incorrect type in 
>> assignment (different base types) @@    expected unsigned int [usertype] @@  
>>   got restrunsigned int [usertype] @@
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    expected unsigned int 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    got restricted __le32 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse: sparse: incorrect type in 
>> assignment (different base types) @@    expected unsigned int [usertype] @@  
>>   got restrunsigned int [usertype] @@
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    expected unsigned int 
>> [usertype]
>> drivers/iommu/exynos-iommu.c:728:14: sparse:    got restricted __le32 
>> [usertype]

vim +673 drivers/iommu/exynos-iommu.c

2a96536e77b43c KyongHo Cho      2012-05-12  666  
9b265536c27116 Marek Szyprowski 2016-11-14  667  static int __maybe_unused 
exynos_sysmmu_suspend(struct device *dev)
622015e407b082 Marek Szyprowski 2015-05-19  668  {
622015e407b082 Marek Szyprowski 2015-05-19  669         struct sysmmu_drvdata 
*data = dev_get_drvdata(dev);
47a574fffca102 Marek Szyprowski 2016-11-14  670         struct device *master = 
data->master;
622015e407b082 Marek Szyprowski 2015-05-19  671  
47a574fffca102 Marek Szyprowski 2016-11-14  672         if (master) {
9b265536c27116 Marek Szyprowski 2016-11-14 @673                 struct 
exynos_iommu_owner *owner = master->archdata.iommu;
9b265536c27116 Marek Szyprowski 2016-11-14  674  
9b265536c27116 Marek Szyprowski 2016-11-14  675                 
mutex_lock(&owner->rpm_lock);
92798b4566b1ad Marek Szyprowski 2016-11-14  676                 if 
(data->domain) {
92798b4566b1ad Marek Szyprowski 2016-11-14  677                         
dev_dbg(data->sysmmu, "saving state\n");
92798b4566b1ad Marek Szyprowski 2016-11-14  678                         
__sysmmu_disable(data);
92798b4566b1ad Marek Szyprowski 2016-11-14  679                 }
9b265536c27116 Marek Szyprowski 2016-11-14  680                 
mutex_unlock(&owner->rpm_lock);
622015e407b082 Marek Szyprowski 2015-05-19  681         }
622015e407b082 Marek Szyprowski 2015-05-19  682         return 0;
622015e407b082 Marek Szyprowski 2015-05-19  683  }
622015e407b082 Marek Szyprowski 2015-05-19  684  
9b265536c27116 Marek Szyprowski 2016-11-14  685  static int __maybe_unused 
exynos_sysmmu_resume(struct device *dev)
622015e407b082 Marek Szyprowski 2015-05-19  686  {
622015e407b082 Marek Szyprowski 2015-05-19  687         struct sysmmu_drvdata 
*data = dev_get_drvdata(dev);
47a574fffca102 Marek Szyprowski 2016-11-14  688         struct device *master = 
data->master;
622015e407b082 Marek Szyprowski 2015-05-19  689  
47a574fffca102 Marek Szyprowski 2016-11-14  690         if (master) {
9b265536c27116 Marek Szyprowski 2016-11-14  691                 struct 
exynos_iommu_owner *owner = master->archdata.iommu;
9b265536c27116 Marek Szyprowski 2016-11-14  692  
9b265536c27116 Marek Szyprowski 2016-11-14  693                 
mutex_lock(&owner->rpm_lock);
92798b4566b1ad Marek Szyprowski 2016-11-14  694                 if 
(data->domain) {
92798b4566b1ad Marek Szyprowski 2016-11-14  695                         
dev_dbg(data->sysmmu, "restoring state\n");
47a574fffca102 Marek Szyprowski 2016-11-14  696                         
__sysmmu_enable(data);
622015e407b082 Marek Szyprowski 2015-05-19  697                 }
9b265536c27116 Marek Szyprowski 2016-11-14  698                 
mutex_unlock(&owner->rpm_lock);
92798b4566b1ad Marek Szyprowski 2016-11-14  699         }
622015e407b082 Marek Szyprowski 2015-05-19  700         return 0;
622015e407b082 Marek Szyprowski 2015-05-19  701  }
622015e407b082 Marek Szyprowski 2015-05-19  702  
622015e407b082 Marek Szyprowski 2015-05-19  703  static const struct dev_pm_ops 
sysmmu_pm_ops = {
9b265536c27116 Marek Szyprowski 2016-11-14  704         
SET_RUNTIME_PM_OPS(exynos_sysmmu_suspend, exynos_sysmmu_resume, NULL)
2f5f44f205cc95 Marek Szyprowski 2016-11-14  705         
SET_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
9b265536c27116 Marek Szyprowski 2016-11-14  706                                 
pm_runtime_force_resume)
622015e407b082 Marek Szyprowski 2015-05-19  707  };
622015e407b082 Marek Szyprowski 2015-05-19  708  
9d25e3cc83d731 Marek Szyprowski 2017-10-09  709  static const struct 
of_device_id sysmmu_of_match[] = {
6b21a5db36427d Cho KyongHo      2014-05-12  710         { .compatible   = 
"samsung,exynos-sysmmu", },
6b21a5db36427d Cho KyongHo      2014-05-12  711         { },
6b21a5db36427d Cho KyongHo      2014-05-12  712  };
6b21a5db36427d Cho KyongHo      2014-05-12  713  
6b21a5db36427d Cho KyongHo      2014-05-12  714  static struct platform_driver 
exynos_sysmmu_driver __refdata = {
2a96536e77b43c KyongHo Cho      2012-05-12  715         .probe  = 
exynos_sysmmu_probe,
2a96536e77b43c KyongHo Cho      2012-05-12  716         .driver = {
2a96536e77b43c KyongHo Cho      2012-05-12  717                 .name           
= "exynos-sysmmu",
6b21a5db36427d Cho KyongHo      2014-05-12  718                 .of_match_table 
= sysmmu_of_match,
622015e407b082 Marek Szyprowski 2015-05-19  719                 .pm             
= &sysmmu_pm_ops,
b54b874fbaf5e0 Marek Szyprowski 2016-05-20  720                 
.suppress_bind_attrs = true,
2a96536e77b43c KyongHo Cho      2012-05-12  721         }
2a96536e77b43c KyongHo Cho      2012-05-12  722  };
2a96536e77b43c KyongHo Cho      2012-05-12  723  
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  724  static inline void 
update_pte(sysmmu_pte_t *ent, sysmmu_pte_t val)
2a96536e77b43c KyongHo Cho      2012-05-12  725  {
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  726         
dma_sync_single_for_cpu(dma_dev, virt_to_phys(ent), sizeof(*ent),
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  727                                 
DMA_TO_DEVICE);
6ae5343c26f9cb Ben Dooks        2016-06-08 @728         *ent = cpu_to_le32(val);
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  729         
dma_sync_single_for_device(dma_dev, virt_to_phys(ent), sizeof(*ent),
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  730                                 
   DMA_TO_DEVICE);
2a96536e77b43c KyongHo Cho      2012-05-12  731  }
2a96536e77b43c KyongHo Cho      2012-05-12  732  
e1fd1eaa3323b3 Joerg Roedel     2015-03-26  733  static struct iommu_domain 
*exynos_iommu_domain_alloc(unsigned type)
2a96536e77b43c KyongHo Cho      2012-05-12  734  {
bfa004893c55ea Marek Szyprowski 2015-05-19  735         struct 
exynos_iommu_domain *domain;
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  736         dma_addr_t handle;
66a7ed84b345d6 Cho KyongHo      2014-05-12  737         int i;
2a96536e77b43c KyongHo Cho      2012-05-12  738  
740a01eee9ada9 Marek Szyprowski 2016-02-18  739         /* Check if correct PTE 
offsets are initialized */
740a01eee9ada9 Marek Szyprowski 2016-02-18  740         BUG_ON(PG_ENT_SHIFT < 0 
|| !dma_dev);
e1fd1eaa3323b3 Joerg Roedel     2015-03-26  741  
bfa004893c55ea Marek Szyprowski 2015-05-19  742         domain = 
kzalloc(sizeof(*domain), GFP_KERNEL);
bfa004893c55ea Marek Szyprowski 2015-05-19  743         if (!domain)
e1fd1eaa3323b3 Joerg Roedel     2015-03-26  744                 return NULL;
2a96536e77b43c KyongHo Cho      2012-05-12  745  
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  746         if (type == 
IOMMU_DOMAIN_DMA) {
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  747                 if 
(iommu_get_dma_cookie(&domain->domain) != 0)
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  748                         goto 
err_pgtable;
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  749         } else if (type != 
IOMMU_DOMAIN_UNMANAGED) {
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  750                 goto 
err_pgtable;
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  751         }
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  752  
bfa004893c55ea Marek Szyprowski 2015-05-19  753         domain->pgtable = 
(sysmmu_pte_t *)__get_free_pages(GFP_KERNEL, 2);
bfa004893c55ea Marek Szyprowski 2015-05-19  754         if (!domain->pgtable)
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  755                 goto 
err_dma_cookie;
2a96536e77b43c KyongHo Cho      2012-05-12  756  
bfa004893c55ea Marek Szyprowski 2015-05-19  757         domain->lv2entcnt = 
(short *)__get_free_pages(GFP_KERNEL | __GFP_ZERO, 1);
bfa004893c55ea Marek Szyprowski 2015-05-19  758         if (!domain->lv2entcnt)
2a96536e77b43c KyongHo Cho      2012-05-12  759                 goto 
err_counter;
2a96536e77b43c KyongHo Cho      2012-05-12  760  
f171abab8f1a75 Sachin Kamat     2014-08-04  761         /* Workaround for 
System MMU v3.3 to prevent caching 1MiB mapping */
e75276638c1423 Marek Szyprowski 2017-03-24  762         for (i = 0; i < 
NUM_LV1ENTRIES; i++)
e75276638c1423 Marek Szyprowski 2017-03-24  763                 
domain->pgtable[i] = ZERO_LV2LINK;
66a7ed84b345d6 Cho KyongHo      2014-05-12  764  
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  765         handle = 
dma_map_single(dma_dev, domain->pgtable, LV1TABLE_SIZE,
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  766                                 
DMA_TO_DEVICE);
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  767         /* For mapping page 
table entries we rely on dma == phys */
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  768         BUG_ON(handle != 
virt_to_phys(domain->pgtable));
0d6d3da46ac594 Marek Szyprowski 2017-01-09  769         if 
(dma_mapping_error(dma_dev, handle))
0d6d3da46ac594 Marek Szyprowski 2017-01-09  770                 goto err_lv2ent;
2a96536e77b43c KyongHo Cho      2012-05-12  771  
bfa004893c55ea Marek Szyprowski 2015-05-19  772         
spin_lock_init(&domain->lock);
bfa004893c55ea Marek Szyprowski 2015-05-19  773         
spin_lock_init(&domain->pgtablelock);
bfa004893c55ea Marek Szyprowski 2015-05-19  774         
INIT_LIST_HEAD(&domain->clients);
2a96536e77b43c KyongHo Cho      2012-05-12  775  
bfa004893c55ea Marek Szyprowski 2015-05-19  776         
domain->domain.geometry.aperture_start = 0;
bfa004893c55ea Marek Szyprowski 2015-05-19  777         
domain->domain.geometry.aperture_end   = ~0UL;
bfa004893c55ea Marek Szyprowski 2015-05-19  778         
domain->domain.geometry.force_aperture = true;
3177bb76a8c510 Joerg Roedel     2012-07-11  779  
bfa004893c55ea Marek Szyprowski 2015-05-19  780         return &domain->domain;
2a96536e77b43c KyongHo Cho      2012-05-12  781  
0d6d3da46ac594 Marek Szyprowski 2017-01-09  782  err_lv2ent:
0d6d3da46ac594 Marek Szyprowski 2017-01-09  783         free_pages((unsigned 
long)domain->lv2entcnt, 1);
2a96536e77b43c KyongHo Cho      2012-05-12  784  err_counter:
bfa004893c55ea Marek Szyprowski 2015-05-19  785         free_pages((unsigned 
long)domain->pgtable, 2);
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  786  err_dma_cookie:
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  787         if (type == 
IOMMU_DOMAIN_DMA)
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  788                 
iommu_put_dma_cookie(&domain->domain);
2a96536e77b43c KyongHo Cho      2012-05-12  789  err_pgtable:
bfa004893c55ea Marek Szyprowski 2015-05-19  790         kfree(domain);
e1fd1eaa3323b3 Joerg Roedel     2015-03-26  791         return NULL;
2a96536e77b43c KyongHo Cho      2012-05-12  792  }
2a96536e77b43c KyongHo Cho      2012-05-12  793  
bfa004893c55ea Marek Szyprowski 2015-05-19  794  static void 
exynos_iommu_domain_free(struct iommu_domain *iommu_domain)
2a96536e77b43c KyongHo Cho      2012-05-12  795  {
bfa004893c55ea Marek Szyprowski 2015-05-19  796         struct 
exynos_iommu_domain *domain = to_exynos_domain(iommu_domain);
469acebe4a6890 Marek Szyprowski 2015-05-19  797         struct sysmmu_drvdata 
*data, *next;
2a96536e77b43c KyongHo Cho      2012-05-12  798         unsigned long flags;
2a96536e77b43c KyongHo Cho      2012-05-12  799         int i;
2a96536e77b43c KyongHo Cho      2012-05-12  800  
bfa004893c55ea Marek Szyprowski 2015-05-19  801         
WARN_ON(!list_empty(&domain->clients));
2a96536e77b43c KyongHo Cho      2012-05-12  802  
bfa004893c55ea Marek Szyprowski 2015-05-19  803         
spin_lock_irqsave(&domain->lock, flags);
2a96536e77b43c KyongHo Cho      2012-05-12  804  
bfa004893c55ea Marek Szyprowski 2015-05-19  805         
list_for_each_entry_safe(data, next, &domain->clients, domain_node) {
e11723000f1641 Marek Szyprowski 2016-11-14  806                 
spin_lock(&data->lock);
b0d4c861a99d00 Marek Szyprowski 2016-11-14  807                 
__sysmmu_disable(data);
47a574fffca102 Marek Szyprowski 2016-11-14  808                 data->pgtable = 
0;
47a574fffca102 Marek Szyprowski 2016-11-14  809                 data->domain = 
NULL;
469acebe4a6890 Marek Szyprowski 2015-05-19  810                 
list_del_init(&data->domain_node);
e11723000f1641 Marek Szyprowski 2016-11-14  811                 
spin_unlock(&data->lock);
2a96536e77b43c KyongHo Cho      2012-05-12  812         }
2a96536e77b43c KyongHo Cho      2012-05-12  813  
bfa004893c55ea Marek Szyprowski 2015-05-19  814         
spin_unlock_irqrestore(&domain->lock, flags);
2a96536e77b43c KyongHo Cho      2012-05-12  815  
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  816         if (iommu_domain->type 
== IOMMU_DOMAIN_DMA)
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  817                 
iommu_put_dma_cookie(iommu_domain);
58c6f6a3dc97ed Marek Szyprowski 2016-02-18  818  
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  819         
dma_unmap_single(dma_dev, virt_to_phys(domain->pgtable), LV1TABLE_SIZE,
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  820                          
DMA_TO_DEVICE);
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  821  
2a96536e77b43c KyongHo Cho      2012-05-12  822         for (i = 0; i < 
NUM_LV1ENTRIES; i++)
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  823                 if 
(lv1ent_page(domain->pgtable + i)) {
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  824                         
phys_addr_t base = lv2table_base(domain->pgtable + i);
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  825  
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  826                         
dma_unmap_single(dma_dev, base, LV2TABLE_SIZE,
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  827                                 
         DMA_TO_DEVICE);
734c3c732ca91a Cho KyongHo      2014-05-12  828                         
kmem_cache_free(lv2table_kmem_cache,
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  829                                 
        phys_to_virt(base));
5e3435eb7e1d8c Marek Szyprowski 2016-02-18  830                 }
2a96536e77b43c KyongHo Cho      2012-05-12  831  
bfa004893c55ea Marek Szyprowski 2015-05-19  832         free_pages((unsigned 
long)domain->pgtable, 2);
bfa004893c55ea Marek Szyprowski 2015-05-19  833         free_pages((unsigned 
long)domain->lv2entcnt, 1);
bfa004893c55ea Marek Szyprowski 2015-05-19  834         kfree(domain);
2a96536e77b43c KyongHo Cho      2012-05-12  835  }
2a96536e77b43c KyongHo Cho      2012-05-12  836  
5fa61cbff16224 Marek Szyprowski 2016-02-18  837  static void 
exynos_iommu_detach_device(struct iommu_domain *iommu_domain,
5fa61cbff16224 Marek Szyprowski 2016-02-18  838                                 
    struct device *dev)
5fa61cbff16224 Marek Szyprowski 2016-02-18  839  {
5fa61cbff16224 Marek Szyprowski 2016-02-18  840         struct 
exynos_iommu_owner *owner = dev->archdata.iommu;
5fa61cbff16224 Marek Szyprowski 2016-02-18  841         struct 
exynos_iommu_domain *domain = to_exynos_domain(iommu_domain);
5fa61cbff16224 Marek Szyprowski 2016-02-18  842         phys_addr_t pagetable = 
virt_to_phys(domain->pgtable);
5fa61cbff16224 Marek Szyprowski 2016-02-18  843         struct sysmmu_drvdata 
*data, *next;
5fa61cbff16224 Marek Szyprowski 2016-02-18  844         unsigned long flags;
5fa61cbff16224 Marek Szyprowski 2016-02-18  845  
5fa61cbff16224 Marek Szyprowski 2016-02-18 @846         if (!has_sysmmu(dev) || 
owner->domain != iommu_domain)
5fa61cbff16224 Marek Szyprowski 2016-02-18  847                 return;
5fa61cbff16224 Marek Szyprowski 2016-02-18  848  
9b265536c27116 Marek Szyprowski 2016-11-14  849         
mutex_lock(&owner->rpm_lock);
9b265536c27116 Marek Szyprowski 2016-11-14  850  
9b265536c27116 Marek Szyprowski 2016-11-14  851         
list_for_each_entry(data, &owner->controllers, owner_node) {
9b265536c27116 Marek Szyprowski 2016-11-14  852                 
pm_runtime_get_noresume(data->sysmmu);
9b265536c27116 Marek Szyprowski 2016-11-14  853                 if 
(pm_runtime_active(data->sysmmu))
e11723000f1641 Marek Szyprowski 2016-11-14  854                         
__sysmmu_disable(data);
e11723000f1641 Marek Szyprowski 2016-11-14  855                 
pm_runtime_put(data->sysmmu);
e11723000f1641 Marek Szyprowski 2016-11-14  856         }
e11723000f1641 Marek Szyprowski 2016-11-14  857  
5fa61cbff16224 Marek Szyprowski 2016-02-18  858         
spin_lock_irqsave(&domain->lock, flags);
5fa61cbff16224 Marek Szyprowski 2016-02-18  859         
list_for_each_entry_safe(data, next, &domain->clients, domain_node) {
e11723000f1641 Marek Szyprowski 2016-11-14  860                 
spin_lock(&data->lock);
47a574fffca102 Marek Szyprowski 2016-11-14  861                 data->pgtable = 
0;
47a574fffca102 Marek Szyprowski 2016-11-14  862                 data->domain = 
NULL;
5fa61cbff16224 Marek Szyprowski 2016-02-18  863                 
list_del_init(&data->domain_node);
e11723000f1641 Marek Szyprowski 2016-11-14  864                 
spin_unlock(&data->lock);
5fa61cbff16224 Marek Szyprowski 2016-02-18  865         }
e11723000f1641 Marek Szyprowski 2016-11-14  866         owner->domain = NULL;
5fa61cbff16224 Marek Szyprowski 2016-02-18  867         
spin_unlock_irqrestore(&domain->lock, flags);
5fa61cbff16224 Marek Szyprowski 2016-02-18  868  
9b265536c27116 Marek Szyprowski 2016-11-14  869         
mutex_unlock(&owner->rpm_lock);
5fa61cbff16224 Marek Szyprowski 2016-02-18  870  
b0d4c861a99d00 Marek Szyprowski 2016-11-14  871         dev_dbg(dev, "%s: 
Detached IOMMU with pgtable %pa\n", __func__,
b0d4c861a99d00 Marek Szyprowski 2016-11-14  872                 &pagetable);
5fa61cbff16224 Marek Szyprowski 2016-02-18  873  }
5fa61cbff16224 Marek Szyprowski 2016-02-18  874  

:::::: The code at line 673 was first introduced by commit
:::::: 9b265536c271163ec4acc140ca0a40a732971cbf iommu/exynos: Add runtime pm 
support

:::::: TO: Marek Szyprowski <[email protected]>
:::::: CC: Joerg Roedel <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

Reply via email to