diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
index b97c526aeddfd94b28e322c2a7a8064d766c8e23..a0d551fb51e080f3ae487bdabdfa4c34b00fbbad 100644
--- a/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
+++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_drm.c
@@ -150,6 +150,12 @@ pipe_loader_drm_probe_fd_nodup(struct pipe_loader_device **dev, int fd, bool zin
       ddev->base.driver_name = strdup("radeonsi");
    }
 
+   /* powervr has no Gallium driver and relies on Zink */
+   if (strcmp(ddev->base.driver_name, "powervr") == 0) {
+      FREE(ddev->base.driver_name);
+      ddev->base.driver_name = strdup("zink");
+   }
+
    if (strcmp(ddev->base.driver_name, "virtio_gpu") == 0) {
       struct virgl_renderer_capset_drm caps;
       if (get_nctx_caps(fd, &caps) == 0) {
@@ -172,14 +178,10 @@ pipe_loader_drm_probe_fd_nodup(struct pipe_loader_device **dev, int fd, bool zin
    if (strcmp(ddev->base.driver_name, "vgem") == 0)
       goto fail;
 
-   /* kmsro supports lots of drivers, try as a fallback for primary nodes */
-   if (!ddev->dd && !zink && drmGetNodeTypeFromFd(fd) == DRM_NODE_PRIMARY)
+   /* kmsro supports lots of drivers, try as a fallback */
+   if (!ddev->dd && !zink)
       ddev->dd = get_driver_descriptor("kmsro");
 
-   /* Try zink for unknown render nodes */
-   if (!ddev->dd && drmGetNodeTypeFromFd(fd) == DRM_NODE_RENDER)
-      ddev->dd = get_driver_descriptor("zink");
-
    if (!ddev->dd)
       goto fail;
 
