* [asahilinux:bits/020-dart 35/40] drivers/iommu/apple-dart.c:779:16: warning: implicit conversion from 'unsigned long long' to 'dma_addr_t' (aka 'unsigned int') changes value from 18446744073709551615 to 4294967295
@ 2023-11-19 16:14 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-11-19 16:14 UTC (permalink / raw)
To: Hector Martin; +Cc: llvm, oe-kbuild-all
tree: https://github.com/AsahiLinux/linux bits/020-dart
head: 29d9d098a7ff41f82efd8eb40f24f29e5dd6b2fe
commit: e53d630a41ea20440f6af6417371b2de7d91bdc9 [35/40] iommu: apple-dart: Support specifying the DMA aperture in the DT
config: i386-allmodconfig (https://download.01.org/0day-ci/archive/20231120/202311200000.oP0nHoZN-lkp@intel.com/config)
compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231120/202311200000.oP0nHoZN-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202311200000.oP0nHoZN-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/iommu/apple-dart.c:779:16: warning: implicit conversion from 'unsigned long long' to 'dma_addr_t' (aka 'unsigned int') changes value from 18446744073709551615 to 4294967295 [-Wconstant-conversion]
dma_max = DMA_BIT_MASK(pgtbl_cfg.ias);
~ ^~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/dma-mapping.h:77:40: note: expanded from macro 'DMA_BIT_MASK'
#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
^~~~~
drivers/iommu/apple-dart.c:1345:18: warning: implicit conversion from 'unsigned long long' to 'dma_addr_t' (aka 'unsigned int') changes value from 18446744073709551615 to 4294967295 [-Wconstant-conversion]
dart->dma_max = DMA_BIT_MASK(dart->ias);
~ ^~~~~~~~~~~~~~~~~~~~~~~
include/linux/dma-mapping.h:77:40: note: expanded from macro 'DMA_BIT_MASK'
#define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL<<(n))-1))
^~~~~
2 warnings generated.
vim +779 drivers/iommu/apple-dart.c
721
722 static int apple_dart_finalize_domain(struct iommu_domain *domain,
723 struct device *dev,
724 struct apple_dart_master_cfg *cfg)
725 {
726 struct apple_dart_domain *dart_domain = to_dart_domain(domain);
727 struct apple_dart *dart = cfg->stream_maps[0].dart;
728 struct io_pgtable_cfg pgtbl_cfg;
729 dma_addr_t dma_max = dart->dma_max;
730 u32 ias = min_t(u32, dart->ias, fls64(dma_max));
731 int ret = 0;
732 int i, j;
733
734 mutex_lock(&dart_domain->init_lock);
735
736 if (dart_domain->finalized)
737 goto done;
738
739 for (i = 0; i < MAX_DARTS_PER_DEVICE; ++i) {
740 dart_domain->stream_maps[i].dart = cfg->stream_maps[i].dart;
741 for (j = 0; j < BITS_TO_LONGS(dart->num_streams); j++)
742 atomic_long_set(&dart_domain->stream_maps[i].sidmap[j],
743 cfg->stream_maps[i].sidmap[j]);
744 }
745
746 pgtbl_cfg = (struct io_pgtable_cfg){
747 .pgsize_bitmap = dart->pgsize,
748 .ias = ias,
749 .oas = dart->oas,
750 .coherent_walk = 1,
751 .iommu_dev = dart->dev,
752 };
753
754 if (dart->locked) {
755 unsigned long *sidmap;
756 int sid;
757 u32 ttbr;
758
759 /* Locked DARTs can only have a single stream bound */
760 sidmap = cfg->stream_maps[0].sidmap;
761 sid = find_first_bit(sidmap, dart->num_streams);
762
763 WARN_ON((sid < 0) || bitmap_weight(sidmap, dart->num_streams) > 1);
764 ttbr = readl(dart->regs + DART_TTBR(dart, sid, 0));
765
766 WARN_ON(!(ttbr & dart->hw->ttbr_valid));
767
768 /* If the DART is locked, we need to keep the translation level count. */
769 if (dart->hw->tcr_4level && dart->ias > 36) {
770 if (readl(dart->regs + DART_TCR(dart, sid)) & dart->hw->tcr_4level) {
771 if (ias < 37) {
772 dev_info(dart->dev, "Expanded to ias=37 due to lock\n");
773 pgtbl_cfg.ias = 37;
774 }
775 } else if (ias > 36) {
776 dev_info(dart->dev, "Limited to ias=36 due to lock\n");
777 pgtbl_cfg.ias = 36;
778 if (dart->dma_min == 0 && dma_max == DMA_BIT_MASK(dart->ias)) {
> 779 dma_max = DMA_BIT_MASK(pgtbl_cfg.ias);
780 } else if ((dart->dma_min ^ dma_max) & ~DMA_BIT_MASK(36)) {
781 dev_err(dart->dev,
782 "Invalid DMA range for locked 3-level PT\n");
783 ret = -ENOMEM;
784 goto done;
785 }
786 }
787 }
788 }
789
790 dart_domain->pgtbl_ops =
791 alloc_io_pgtable_ops(dart->hw->fmt, &pgtbl_cfg, domain);
792 if (!dart_domain->pgtbl_ops) {
793 ret = -ENOMEM;
794 goto done;
795 }
796
797 if (pgtbl_cfg.pgsize_bitmap == SZ_4K)
798 dart_domain->mask = DMA_BIT_MASK(min_t(u32, dart->ias, 32));
799 else if (pgtbl_cfg.apple_dart_cfg.n_levels == 3)
800 dart_domain->mask = DMA_BIT_MASK(min_t(u32, dart->ias, 36));
801 else if (pgtbl_cfg.apple_dart_cfg.n_levels == 4)
802 dart_domain->mask = DMA_BIT_MASK(min_t(u32, dart->ias, 47));
803
804 domain->pgsize_bitmap = pgtbl_cfg.pgsize_bitmap;
805 domain->geometry.aperture_start = dart->dma_min;
806 domain->geometry.aperture_end = dma_max;
807 domain->geometry.force_aperture = true;
808
809 dart_domain->finalized = true;
810
811 ret = apple_dart_setup_resv_locked(domain, dev, dart->pgsize);
812 done:
813 mutex_unlock(&dart_domain->init_lock);
814 return ret;
815 }
816
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-11-19 16:14 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-11-19 16:14 [asahilinux:bits/020-dart 35/40] drivers/iommu/apple-dart.c:779:16: warning: implicit conversion from 'unsigned long long' to 'dma_addr_t' (aka 'unsigned int') changes value from 18446744073709551615 to 4294967295 kernel test robot
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.