Hi Oak,
as far as I know some architectures like PowerPC/ARM/MIPS need that. And we
at least officially support PowerPC and ARM and MIPS is best effort and
shouldn't break if possible.
Thomas just recently had a whole bunch of DMA-buf patches to also fix that
up for DMA-bufs vmap as well, previously we have just been casting away the
__iomem and hoped that it always works.
On that, rolling out struct dma_buf_map to ttm and drivers I think would
clean up a lot of this __iomem handling rather nicely.
-Daniel
Regards,
Christian.
Am 03.03.21 um 21:59 schrieb Zeng, Oak:
>
> [AMD Official Use Only - Internal Distribution Only]
>
>
> Hi Christian,
>
> Can you explain why __iomem annotation is mandatory for amdgpu driver?
> If this is the case, we can’t switch to memremap. The only fix seems to
> me is add a #ifdef __x86_64__ to the ioremap_cache codes.
>
> Regards,
>
> Oak
>
> *From:* Christian König <ckoenig.leichtzumerken(a)gmail.com>
> *Sent:* Wednesday, March 3, 2021 5:46 AM
> *To:* Zeng, Oak <Oak.Zeng(a)amd.com>; amd-gfx(a)lists.freedesktop.org;
> dri-devel(a)lists.freedesktop.org; Daniel Vetter <daniel(a)ffwll.ch>; Dave
> Airlie <airlied(a)redhat.com>; Thomas Hellström (Intel)
> <thomas_os(a)shipmail.org>; dan.j.williams(a)intel.com
> *Cc:* kbuild-all(a)lists.01.org; Kuehling, Felix <Felix.Kuehling(a)amd.com>;
> Kasiviswanathan, Harish <Harish.Kasiviswanathan(a)amd.com>; Deucher,
> Alexander <Alexander.Deucher(a)amd.com>; Huang, JinHuiEric
> <JinHuiEric.Huang(a)amd.com>; Koenig, Christian
<Christian.Koenig(a)amd.com>
> *Subject:* Re: [PATCH] drm/ttm: ioremap buffer according to TTM mem
> caching setting
>
> Hi Oak,
>
>
> config: parisc-randconfig-r012-20210302 (attached as .config)
>
>
> It's not the Intel driver build which fails here, but the build bot is
> just hosted by Intel.
>
> The problem is that the parisc architecture doesn't defines the
> ioremap_cache() function.
>
> I've looked at using memremap() instead of ioremap_cache(). The problem
> is that we do support architectures with the TTM as well as amndgpu code
> where the __iomem annotation is mandatory and correct.
>
> Regards,
> Christian.
>
> Am 02.03.21 um 23:45 schrieb Zeng, Oak:
>
> [AMD Official Use Only - Internal Distribution Only]
>
> Hi Daniel, Thomas, Dan,
>
> Does below message mean the calling ioremap_cache failed intel’s
> driver build? I can see both ioremap_cache and ioremap_wc are
> defined in arch/x86/mm/ioremap.c – why ioremap_wc doesn’t break
> intel driver’s build?
>
> Are we supposed to use memremap (offset, size, MEMREMAP_WB) to
> replace ioremap_cache? When I read here
>
https://lwn.net/Articles/653585/
>
<
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flwn.net...
> I felt that ioremap_cache returns an address annotated with _iomem
> while memremap returns an address without __iomem annotation. In
> our use case, GPU memory is treated as UEFI SPM (specific purpose
> memory). I am not very sure whether memremap (thus no __iomem
> annotation) is the right thing to do. What I am sure is, we have
> tested ioremap_cache and it works fine on AMD system.
>
> I will send out a test patch replacing ioremap_cache with
> ioremap_wc, to trigger Intel build robot to see whether it fails
> Intel build. I suppose it will not fail Intel build.
>
> Regards,
>
> Oak
>
> *From:* Christian König <ckoenig.leichtzumerken(a)gmail.com>
> <mailto:ckoenig.leichtzumerken@gmail.com>
> *Sent:* Tuesday, March 2, 2021 6:31 AM
> *To:* amd-gfx(a)lists.freedesktop.org
> <mailto:amd-gfx@lists.freedesktop.org>;
> dri-devel(a)lists.freedesktop.org
> <mailto:dri-devel@lists.freedesktop.org>; Daniel Vetter
> <daniel(a)ffwll.ch> <mailto:daniel@ffwll.ch>; Dave Airlie
> <airlied(a)redhat.com> <mailto:airlied@redhat.com>; Thomas Hellström
> (Intel) <thomas_os(a)shipmail.org> <mailto:thomas_os@shipmail.org>
> *Cc:* Zeng, Oak <Oak.Zeng(a)amd.com> <mailto:Oak.Zeng@amd.com>;
> kbuild-all(a)lists.01.org <mailto:kbuild-all@lists.01.org>;
> Kuehling, Felix <Felix.Kuehling(a)amd.com>
> <mailto:Felix.Kuehling@amd.com>; Kasiviswanathan, Harish
> <Harish.Kasiviswanathan(a)amd.com>
> <mailto:Harish.Kasiviswanathan@amd.com>; Deucher, Alexander
> <Alexander.Deucher(a)amd.com> <mailto:Alexander.Deucher@amd.com>;
> Huang, JinHuiEric <JinHuiEric.Huang(a)amd.com>
> <mailto:JinHuiEric.Huang@amd.com>; Koenig, Christian
> <Christian.Koenig(a)amd.com> <mailto:Christian.Koenig@amd.com>
> *Subject:* Re: [PATCH] drm/ttm: ioremap buffer according to TTM
> mem caching setting
>
> Hi guys,
>
> adding the usual suspects direct. Does anybody of hand know how to
> check if an architecture supports ioremap_cache()?
>
> For now we only need this on X86, but I would feel better if we
> don't use an #ifdef here.
>
> Regards,
> Christian.
>
> Am 02.03.21 um 05:12 schrieb kernel test robot:
>
> Hi Oak,
>
>
> Thank you for the patch! Yet something to improve:
>
>
> [auto build test ERROR on drm-intel/for-linux-next]
>
> [also build test ERROR on drm-tip/drm-tip linus/master v5.12-rc1
next-20210302]
>
> [cannot apply to tegra-drm/drm/tegra/for-next drm-exynos/exynos-drm-next
drm/drm-next]
>
> [If your patch is applied to the wrong git tree, kindly drop us a note.
>
> And when submitting patch, we suggest to use '--base' as documented
in
>
>
https://git-scm.com/docs/git-format-patch
<
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit-scm...>]
>
>
>
url:https://github.com/0day-ci/linux/commits/Oak-Zeng/drm-ttm-ioremap-buf...
<
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub....
>
> base:
git://anongit.freedesktop.org/drm-intel for-linux-next
>
> config: parisc-randconfig-r012-20210302 (attached as .config)
>
> compiler: hppa-linux-gcc (GCC) 9.3.0
>
> reproduce (this is a W=1 build):
>
>
wgethttps://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
<
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fraw.git...
-O ~/bin/make.cross
>
> chmod +x ~/bin/make.cross
>
>
#https://github.com/0day-ci/linux/commit/225bb3711439ec559dd72ae5af8e62d34ea60a64
<
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub....
>
> git remote add
linux-reviewhttps://github.com/0day-ci/linux
<
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub....
>
> git fetch --no-tags linux-review
Oak-Zeng/drm-ttm-ioremap-buffer-according-to-TTM-mem-caching-setting/20210302-064500
>
> git checkout 225bb3711439ec559dd72ae5af8e62d34ea60a64
>
> # save the attached .config to linux build tree
>
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross
ARCH=parisc
>
>
> If you fix the issue, kindly add following tag as appropriate
>
> Reported-by: kernel test robot<lkp(a)intel.com>
<mailto:lkp@intel.com>
>
>
> All errors (new ones prefixed by >>):
>
>
> drivers/gpu/drm/ttm/ttm_bo_util.c: In function
'ttm_resource_ioremap':
>
> drivers/gpu/drm/ttm/ttm_bo_util.c:95:11: error: implicit declaration
of function 'ioremap_cache'; did you mean 'ioremap_uc'?
[-Werror=implicit-function-declaration]
>
> 95 | addr = ioremap_cache(mem->bus.offset, bus_size);
>
> | ^~~~~~~~~~~~~
>
> | ioremap_uc
>
> drivers/gpu/drm/ttm/ttm_bo_util.c:95:9: warning: assignment to 'void
*' from 'int' makes pointer from integer without a cast [-Wint-conversion]
>
> 95 | addr = ioremap_cache(mem->bus.offset, bus_size);
>
> | ^
>
> drivers/gpu/drm/ttm/ttm_bo_util.c: In function
'ttm_bo_ioremap':
>
> drivers/gpu/drm/ttm/ttm_bo_util.c:379:17: warning: assignment to
'void *' from 'int' makes pointer from integer without a cast
[-Wint-conversion]
>
> 379 | map->virtual = ioremap_cache(bo->mem.bus.offset +
offset,
>
> | ^
>
> drivers/gpu/drm/ttm/ttm_bo_util.c: In function 'ttm_bo_vmap':
>
> drivers/gpu/drm/ttm/ttm_bo_util.c:500:16: warning: assignment to
'void *' from 'int' makes pointer from integer without a cast
[-Wint-conversion]
>
> 500 | vaddr_iomem = ioremap_cache(mem->bus.offset,
>
> | ^
>
> cc1: some warnings being treated as errors
>
>
>
> vim +95 drivers/gpu/drm/ttm/ttm_bo_util.c
>
>
> 74
>
> 75 static int ttm_resource_ioremap(struct ttm_bo_device *bdev,
>
> 76 struct ttm_resource *mem,
>
> 77 void **virtual)
>
> 78 {
>
> 79 int ret;
>
> 80 void *addr;
>
> 81
>
> 82 *virtual = NULL;
>
> 83 ret = ttm_mem_io_reserve(bdev, mem);
>
> 84 if (ret || !mem->bus.is_iomem)
>
> 85 return ret;
>
> 86
>
> 87 if (mem->bus.addr) {
>
> 88 addr = mem->bus.addr;
>
> 89 } else {
>
> 90 size_t bus_size = (size_t)mem->num_pages
<< PAGE_SHIFT;
>
> 91
>
> 92 if (mem->bus.caching == ttm_write_combined)
>
> 93 addr = ioremap_wc(mem->bus.offset,
bus_size);
>
> 94 else if (mem->bus.caching == ttm_cached)
>
> > 95 addr = ioremap_cache(mem->bus.offset,
bus_size);
>
> 96 else
>
> 97 addr = ioremap(mem->bus.offset,
bus_size);
>
> 98 if (!addr) {
>
> 99 ttm_mem_io_free(bdev, mem);
>
> 100 return -ENOMEM;
>
> 101 }
>
> 102 }
>
> 103 *virtual = addr;
>
> 104 return 0;
>
> 105 }
>
> 106
>
>
> ---
>
> 0-DAY CI Kernel Test Service, Intel Corporation
>
>
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
<
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.0...
>
>
>
>
> _______________________________________________
>
> amd-gfx mailing list
>
> amd-gfx(a)lists.freedesktop.org <mailto:amd-gfx@lists.freedesktop.org>
>
>
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
<
https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.f...
>