Commit 0b45921c authored by Steven Price's avatar Steven Price Committed by Boris Brezillon

drm/panthor: Don't use virt_to_pfn()

virt_to_pfn() isn't available on x86 (except to xen) so breaks
COMPILE_TEST builds. Avoid its use completely by instead storing the
struct page pointer allocated in panthor_device_init() and using
page_to_pfn() instead.
Signed-off-by: default avatarSteven Price <steven.price@arm.com>
Reviewed-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
Signed-off-by: default avatarBoris Brezillon <boris.brezillon@collabora.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20240318145119.368582-1-steven.price@arm.com
parent 0cd8363e
...@@ -151,11 +151,12 @@ static bool panthor_device_is_initialized(struct panthor_device *ptdev) ...@@ -151,11 +151,12 @@ static bool panthor_device_is_initialized(struct panthor_device *ptdev)
static void panthor_device_free_page(struct drm_device *ddev, void *data) static void panthor_device_free_page(struct drm_device *ddev, void *data)
{ {
free_page((unsigned long)data); __free_page(data);
} }
int panthor_device_init(struct panthor_device *ptdev) int panthor_device_init(struct panthor_device *ptdev)
{ {
u32 *dummy_page_virt;
struct resource *res; struct resource *res;
struct page *p; struct page *p;
int ret; int ret;
...@@ -176,7 +177,8 @@ int panthor_device_init(struct panthor_device *ptdev) ...@@ -176,7 +177,8 @@ int panthor_device_init(struct panthor_device *ptdev)
if (!p) if (!p)
return -ENOMEM; return -ENOMEM;
ptdev->pm.dummy_latest_flush = page_address(p); ptdev->pm.dummy_latest_flush = p;
dummy_page_virt = page_address(p);
ret = drmm_add_action_or_reset(&ptdev->base, panthor_device_free_page, ret = drmm_add_action_or_reset(&ptdev->base, panthor_device_free_page,
ptdev->pm.dummy_latest_flush); ptdev->pm.dummy_latest_flush);
if (ret) if (ret)
...@@ -188,7 +190,7 @@ int panthor_device_init(struct panthor_device *ptdev) ...@@ -188,7 +190,7 @@ int panthor_device_init(struct panthor_device *ptdev)
* happens while the dummy page is mapped. Zero cannot be used because * happens while the dummy page is mapped. Zero cannot be used because
* that means 'always flush'. * that means 'always flush'.
*/ */
*ptdev->pm.dummy_latest_flush = 1; *dummy_page_virt = 1;
INIT_WORK(&ptdev->reset.work, panthor_device_reset_work); INIT_WORK(&ptdev->reset.work, panthor_device_reset_work);
ptdev->reset.wq = alloc_ordered_workqueue("panthor-reset-wq", 0); ptdev->reset.wq = alloc_ordered_workqueue("panthor-reset-wq", 0);
...@@ -364,7 +366,7 @@ static vm_fault_t panthor_mmio_vm_fault(struct vm_fault *vmf) ...@@ -364,7 +366,7 @@ static vm_fault_t panthor_mmio_vm_fault(struct vm_fault *vmf)
if (active) if (active)
pfn = __phys_to_pfn(ptdev->phys_addr + CSF_GPU_LATEST_FLUSH_ID); pfn = __phys_to_pfn(ptdev->phys_addr + CSF_GPU_LATEST_FLUSH_ID);
else else
pfn = virt_to_pfn(ptdev->pm.dummy_latest_flush); pfn = page_to_pfn(ptdev->pm.dummy_latest_flush);
break; break;
default: default:
......
...@@ -160,7 +160,7 @@ struct panthor_device { ...@@ -160,7 +160,7 @@ struct panthor_device {
* Used to replace the real LATEST_FLUSH page when the GPU * Used to replace the real LATEST_FLUSH page when the GPU
* is suspended. * is suspended.
*/ */
u32 *dummy_latest_flush; struct page *dummy_latest_flush;
} pm; } pm;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment