drm/vc4: hvs: Print error if we fail an allocation

We need to allocate a few additional structures when checking our
atomic_state, especially related to hardware SRAM that will hold the
plane descriptors (DLIST) and the current line context (LBM) during
composition.

Since those allocation can fail, let's add some error message in that
case to help debug what goes wrong.

Signed-off-by: Maxime Ripard <maxime@cerno.tech>
This commit is contained in:
Maxime Ripard
2023-03-22 09:53:17 +01:00
committed by Dom Cobley
parent 82f7ccdd75
commit d1a823b834
2 changed files with 10 additions and 3 deletions

View File

@@ -441,6 +441,8 @@ vc4_hvs_alloc_dlist_entry(struct vc4_hvs *hvs,
unsigned int channel, unsigned int channel,
size_t dlist_count) size_t dlist_count)
{ {
struct vc4_dev *vc4 = hvs->vc4;
struct drm_device *dev = &vc4->base;
struct vc4_hvs_dlist_allocation *alloc; struct vc4_hvs_dlist_allocation *alloc;
unsigned long flags; unsigned long flags;
int ret; int ret;
@@ -458,8 +460,10 @@ vc4_hvs_alloc_dlist_entry(struct vc4_hvs *hvs,
ret = drm_mm_insert_node(&hvs->dlist_mm, &alloc->mm_node, ret = drm_mm_insert_node(&hvs->dlist_mm, &alloc->mm_node,
dlist_count); dlist_count);
spin_unlock_irqrestore(&hvs->mm_lock, flags); spin_unlock_irqrestore(&hvs->mm_lock, flags);
if (ret) if (ret) {
drm_err(dev, "Failed to allocate DLIST entry: %d\n", ret);
return ERR_PTR(ret); return ERR_PTR(ret);
}
alloc->channel = channel; alloc->channel = channel;

View File

@@ -733,7 +733,8 @@ static void vc4_plane_calc_load(struct drm_plane_state *state)
static int vc4_plane_allocate_lbm(struct drm_plane_state *state) static int vc4_plane_allocate_lbm(struct drm_plane_state *state)
{ {
struct vc4_dev *vc4 = to_vc4_dev(state->plane->dev); struct drm_device *drm = state->plane->dev;
struct vc4_dev *vc4 = to_vc4_dev(drm);
struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); struct vc4_plane_state *vc4_state = to_vc4_plane_state(state);
unsigned long irqflags; unsigned long irqflags;
u32 lbm_size; u32 lbm_size;
@@ -759,8 +760,10 @@ static int vc4_plane_allocate_lbm(struct drm_plane_state *state)
0, 0); 0, 0);
spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags); spin_unlock_irqrestore(&vc4->hvs->mm_lock, irqflags);
if (ret) if (ret) {
drm_err(drm, "Failed to allocate LBM entry: %d\n", ret);
return ret; return ret;
}
} else { } else {
WARN_ON_ONCE(lbm_size != vc4_state->lbm.size); WARN_ON_ONCE(lbm_size != vc4_state->lbm.size);
} }