Merge tag 'drm-misc-fixes-2025-06-19' of https://gitlab.freedesktop.org/drm/misc/kernel into drm-fixes
drm-misc-fixes for v6.16-rc3: - vivante scheduler fix. - v3d null pointer crash fix. - fix backlight, booting GSP-RM, and potential integer shift overflow in nouveau. - fix compiler warnings about unused linux/export.h - fix malidp unknown modifier spam. - fix for ssd130x. Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Link: https://lore.kernel.org/r/d44bab7b-01f8-45a8-a7f4-5d3d563d2f9d@linux.intel.com
This commit is contained in:
@@ -25,7 +25,7 @@ providing a consistent API to upper layers of the driver stack.
|
||||
GSP Support
|
||||
------------------------
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/nouveau/nvkm/subdev/gsp/r535.c
|
||||
.. kernel-doc:: drivers/gpu/drm/nouveau/nvkm/subdev/gsp/rm/r535/rpc.c
|
||||
:doc: GSP message queue element
|
||||
|
||||
.. kernel-doc:: drivers/gpu/drm/nouveau/include/nvkm/subdev/gsp.h
|
||||
|
||||
@@ -159,7 +159,7 @@ bool malidp_format_mod_supported(struct drm_device *drm,
|
||||
}
|
||||
|
||||
if (!fourcc_mod_is_vendor(modifier, ARM)) {
|
||||
DRM_ERROR("Unknown modifier (not Arm)\n");
|
||||
DRM_DEBUG_KMS("Unknown modifier (not Arm)\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -29,7 +29,6 @@
|
||||
*/
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include <drm/drm_atomic.h>
|
||||
|
||||
@@ -35,6 +35,7 @@ static enum drm_gpu_sched_stat etnaviv_sched_timedout_job(struct drm_sched_job
|
||||
*sched_job)
|
||||
{
|
||||
struct etnaviv_gem_submit *submit = to_etnaviv_submit(sched_job);
|
||||
struct drm_gpu_scheduler *sched = sched_job->sched;
|
||||
struct etnaviv_gpu *gpu = submit->gpu;
|
||||
u32 dma_addr, primid = 0;
|
||||
int change;
|
||||
@@ -89,7 +90,9 @@ static enum drm_gpu_sched_stat etnaviv_sched_timedout_job(struct drm_sched_job
|
||||
return DRM_GPU_SCHED_STAT_NOMINAL;
|
||||
|
||||
out_no_timeout:
|
||||
list_add(&sched_job->list, &sched_job->sched->pending_list);
|
||||
spin_lock(&sched->job_list_lock);
|
||||
list_add(&sched_job->list, &sched->pending_list);
|
||||
spin_unlock(&sched->job_list_lock);
|
||||
return DRM_GPU_SCHED_STAT_NOMINAL;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
* Authors: Dave Airlie <airlied@redhat.com>
|
||||
*/
|
||||
|
||||
#include <linux/export.h>
|
||||
#include <linux/i2c-algo-bit.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
#include "nouveau_acpi.h"
|
||||
|
||||
static struct ida bl_ida;
|
||||
#define BL_NAME_SIZE 15 // 12 for name + 2 for digits + 1 for '\0'
|
||||
#define BL_NAME_SIZE 24 // 12 for name + 11 for digits + 1 for '\0'
|
||||
|
||||
static bool
|
||||
nouveau_get_backlight_name(char backlight_name[BL_NAME_SIZE],
|
||||
|
||||
@@ -637,12 +637,18 @@ r535_gsp_rpc_push(struct nvkm_gsp *gsp, void *payload,
|
||||
if (payload_size > max_payload_size) {
|
||||
const u32 fn = rpc->function;
|
||||
u32 remain_payload_size = payload_size;
|
||||
void *next;
|
||||
|
||||
/* Adjust length, and send initial RPC. */
|
||||
rpc->length = sizeof(*rpc) + max_payload_size;
|
||||
msg->checksum = rpc->length;
|
||||
/* Send initial RPC. */
|
||||
next = r535_gsp_rpc_get(gsp, fn, max_payload_size);
|
||||
if (IS_ERR(next)) {
|
||||
repv = next;
|
||||
goto done;
|
||||
}
|
||||
|
||||
repv = r535_gsp_rpc_send(gsp, payload, NVKM_GSP_RPC_REPLY_NOWAIT, 0);
|
||||
memcpy(next, payload, max_payload_size);
|
||||
|
||||
repv = r535_gsp_rpc_send(gsp, next, NVKM_GSP_RPC_REPLY_NOWAIT, 0);
|
||||
if (IS_ERR(repv))
|
||||
goto done;
|
||||
|
||||
@@ -653,7 +659,6 @@ r535_gsp_rpc_push(struct nvkm_gsp *gsp, void *payload,
|
||||
while (remain_payload_size) {
|
||||
u32 size = min(remain_payload_size,
|
||||
max_payload_size);
|
||||
void *next;
|
||||
|
||||
next = r535_gsp_rpc_get(gsp, NV_VGPU_MSG_FUNCTION_CONTINUATION_RECORD, size);
|
||||
if (IS_ERR(next)) {
|
||||
@@ -674,6 +679,8 @@ r535_gsp_rpc_push(struct nvkm_gsp *gsp, void *payload,
|
||||
/* Wait for reply. */
|
||||
repv = r535_gsp_rpc_handle_reply(gsp, fn, policy, payload_size +
|
||||
sizeof(*rpc));
|
||||
if (!IS_ERR(repv))
|
||||
kvfree(msg);
|
||||
} else {
|
||||
repv = r535_gsp_rpc_send(gsp, payload, policy, gsp_rpc_len);
|
||||
}
|
||||
|
||||
@@ -121,7 +121,7 @@ r535_mmu_vaspace_new(struct nvkm_vmm *vmm, u32 handle, bool external)
|
||||
page_shift -= desc->bits;
|
||||
|
||||
ctrl->levels[i].physAddress = pd->pt[0]->addr;
|
||||
ctrl->levels[i].size = (1 << desc->bits) * desc->size;
|
||||
ctrl->levels[i].size = BIT_ULL(desc->bits) * desc->size;
|
||||
ctrl->levels[i].aperture = 1;
|
||||
ctrl->levels[i].pageShift = page_shift;
|
||||
|
||||
|
||||
@@ -974,7 +974,7 @@ static void ssd130x_clear_screen(struct ssd130x_device *ssd130x, u8 *data_array)
|
||||
|
||||
static void ssd132x_clear_screen(struct ssd130x_device *ssd130x, u8 *data_array)
|
||||
{
|
||||
unsigned int columns = DIV_ROUND_UP(ssd130x->height, SSD132X_SEGMENT_WIDTH);
|
||||
unsigned int columns = DIV_ROUND_UP(ssd130x->width, SSD132X_SEGMENT_WIDTH);
|
||||
unsigned int height = ssd130x->height;
|
||||
|
||||
memset(data_array, 0, columns * height);
|
||||
|
||||
@@ -199,7 +199,6 @@ v3d_job_update_stats(struct v3d_job *job, enum v3d_queue queue)
|
||||
struct v3d_dev *v3d = job->v3d;
|
||||
struct v3d_file_priv *file = job->file->driver_priv;
|
||||
struct v3d_stats *global_stats = &v3d->queue[queue].stats;
|
||||
struct v3d_stats *local_stats = &file->stats[queue];
|
||||
u64 now = local_clock();
|
||||
unsigned long flags;
|
||||
|
||||
@@ -209,7 +208,12 @@ v3d_job_update_stats(struct v3d_job *job, enum v3d_queue queue)
|
||||
else
|
||||
preempt_disable();
|
||||
|
||||
v3d_stats_update(local_stats, now);
|
||||
/* Don't update the local stats if the file context has already closed */
|
||||
if (file)
|
||||
v3d_stats_update(&file->stats[queue], now);
|
||||
else
|
||||
drm_dbg(&v3d->drm, "The file descriptor was closed before job completion\n");
|
||||
|
||||
v3d_stats_update(global_stats, now);
|
||||
|
||||
if (IS_ENABLED(CONFIG_LOCKDEP))
|
||||
|
||||
Reference in New Issue
Block a user