summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDhaval Patel <pdhaval@quicinc.com>2016-10-10 10:20:52 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-10-10 10:20:52 -0700
commit9fb1de36a153477009acf684356d97c279d0d81a (patch)
tree5473a7dc3499059b03d95aab687ced90f4c79e1d
parent4d4432a95e90545159e95f7745ee88b97446939c (diff)
parent4f6a7fef75dcd49ad84e344690362d91b4b732bb (diff)
Merge "drm/msm/sde: update plane dmesg logging to use sde macros" into dev/msm-4.4-drm_kms
-rw-r--r--drivers/gpu/drm/msm/sde/sde_plane.c243
1 files changed, 138 insertions, 105 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_plane.c b/drivers/gpu/drm/msm/sde/sde_plane.c
index 34be418a5551..621484e74edc 100644
--- a/drivers/gpu/drm/msm/sde/sde_plane.c
+++ b/drivers/gpu/drm/msm/sde/sde_plane.c
@@ -24,6 +24,12 @@
#include "sde_trace.h"
#include "sde_crtc.h"
+#define SDE_DEBUG_PLANE(pl, fmt, ...) SDE_DEBUG("plane%d " fmt,\
+ (pl) ? (pl)->base.base.id : -1, ##__VA_ARGS__)
+
+#define SDE_ERROR_PLANE(pl, fmt, ...) SDE_ERROR("plane%d " fmt,\
+ (pl) ? (pl)->base.base.id : -1, ##__VA_ARGS__)
+
#define DECIMATED_DIMENSION(dim, deci) (((dim) + ((1 << (deci)) - 1)) >> (deci))
#define PHASE_STEP_SHIFT 21
#define PHASE_STEP_UNIT_SCALE ((int) (1 << PHASE_STEP_SHIFT))
@@ -470,11 +476,14 @@ static void _sde_plane_set_ot_limit(struct drm_plane *plane,
}
/* helper to update a state's input fence pointer from the property */
-static void _sde_plane_set_input_fence(struct drm_plane *plane,
+static void _sde_plane_set_input_fence(struct sde_plane *psde,
struct sde_plane_state *pstate, uint64_t fd)
{
- if (!plane || !pstate)
+ if (!psde || !pstate) {
+ SDE_ERROR("invalid arg(s), plane %d state %d\n",
+ psde != 0, pstate != 0);
return;
+ }
/* clear previous reference */
if (pstate->input_fence)
@@ -483,7 +492,7 @@ static void _sde_plane_set_input_fence(struct drm_plane *plane,
/* get fence pointer for later */
pstate->input_fence = sde_sync_get(fd);
- SDE_DEBUG("0x%llX\n", fd);
+ SDE_DEBUG_PLANE(psde, "0x%llX\n", fd);
}
int sde_plane_wait_input_fence(struct drm_plane *plane, uint32_t wait_ms)
@@ -496,7 +505,7 @@ int sde_plane_wait_input_fence(struct drm_plane *plane, uint32_t wait_ms)
if (!plane) {
SDE_ERROR("invalid plane\n");
} else if (!plane->state) {
- SDE_ERROR("invalid plane state\n");
+ SDE_ERROR_PLANE(to_sde_plane(plane), "invalid state\n");
} else {
psde = to_sde_plane(plane);
pstate = to_sde_plane_state(plane->state);
@@ -506,16 +515,15 @@ int sde_plane_wait_input_fence(struct drm_plane *plane, uint32_t wait_ms)
ret = sde_sync_wait(input_fence, wait_ms);
switch (ret) {
case 0:
- SDE_DEBUG("%s signaled\n", psde->pipe_name);
+ SDE_DEBUG_PLANE(psde, "signaled\n");
break;
case -ETIME:
- SDE_ERROR("timeout on %s, %ums\n",
- psde->pipe_name, wait_ms);
+ SDE_ERROR_PLANE(psde, "timeout, %ums\n",
+ wait_ms);
psde->is_error = true;
break;
default:
- SDE_ERROR("error on %s, %d\n",
- psde->pipe_name, ret);
+ SDE_ERROR_PLANE(psde, "error, %d\n", ret);
psde->is_error = true;
break;
}
@@ -534,14 +542,18 @@ static inline void _sde_plane_set_scanout(struct drm_plane *plane,
struct sde_plane *psde;
int ret;
- if (!plane || !pstate || !pipe_cfg || !fb)
+ if (!plane || !pstate || !pipe_cfg || !fb) {
+ SDE_ERROR(
+ "invalid arg(s), plane %d state %d cfg %d fb %d\n",
+ plane != 0, pstate != 0, pipe_cfg != 0, fb != 0);
return;
+ }
psde = to_sde_plane(plane);
ret = sde_format_populate_layout(psde->mmu_id, fb, &pipe_cfg->layout);
if (ret) {
- SDE_ERROR("failed to get format layout, error: %d\n", ret);
+ SDE_ERROR_PLANE(psde, "failed to get format layout, %d\n", ret);
return;
}
@@ -558,7 +570,7 @@ static void _sde_plane_setup_scaler3(struct sde_plane *psde,
}
/**
- * _sde_plane_setup_scaler2(): Determine default scaler phase steps/filter type
+ * _sde_plane_setup_scaler2 - determine default scaler phase steps/filter type
* @psde: Pointer to SDE plane object
* @src: Source size
* @dst: Destination size
@@ -575,7 +587,9 @@ static int _sde_plane_setup_scaler2(struct sde_plane *psde,
uint32_t chroma_subsampling)
{
if (!psde || !phase_steps || !filter || !fmt) {
- SDE_ERROR("invalid arguments\n");
+ SDE_ERROR(
+ "invalid arg(s), plane %d phase %d filter %d fmt %d\n",
+ psde != 0, phase_steps != 0, filter != 0, fmt != 0);
return -EINVAL;
}
@@ -731,7 +745,7 @@ static inline void _sde_plane_setup_csc(struct sde_plane *psde)
else
psde->csc_ptr = (struct sde_csc_cfg *)&sde_csc_YUV2RGB_601L;
- SDE_DEBUG("using 0x%X 0x%X 0x%X...\n",
+ SDE_DEBUG_PLANE(psde, "using 0x%X 0x%X 0x%X...\n",
psde->csc_ptr->csc_mv[0],
psde->csc_ptr->csc_mv[1],
psde->csc_ptr->csc_mv[2]);
@@ -780,7 +794,7 @@ static void _sde_plane_setup_scaler(struct sde_plane *psde,
/* calculate default configuration for QSEED2 */
memset(pe, 0, sizeof(struct sde_hw_pixel_ext));
- SDE_DEBUG("default config\n");
+ SDE_DEBUG_PLANE(psde, "default config\n");
_sde_plane_setup_scaler2(psde,
psde->pipe_cfg.src_rect.w,
psde->pipe_cfg.dst_rect.w,
@@ -841,29 +855,27 @@ static void _sde_plane_setup_scaler(struct sde_plane *psde,
/**
* _sde_plane_color_fill - enables color fill on plane
- * @plane: Pointer to DRM plane object
+ * @psde: Pointer to SDE plane object
* @color: RGB fill color value, [23..16] Blue, [15..8] Green, [7..0] Red
* @alpha: 8-bit fill alpha value, 255 selects 100% alpha
* Returns: 0 on success
*/
-static int _sde_plane_color_fill(struct drm_plane *plane,
+static int _sde_plane_color_fill(struct sde_plane *psde,
uint32_t color, uint32_t alpha)
{
- struct sde_plane *psde;
const struct sde_format *fmt;
- if (!plane) {
+ if (!psde) {
SDE_ERROR("invalid plane\n");
return -EINVAL;
}
- psde = to_sde_plane(plane);
if (!psde->pipe_hw) {
- SDE_ERROR("invalid plane h/w pointer\n");
+ SDE_ERROR_PLANE(psde, "invalid plane h/w pointer\n");
return -EINVAL;
}
- DBG("");
+ SDE_DEBUG_PLANE(psde, "\n");
/*
* select fill format to match user property expectation,
@@ -909,7 +921,7 @@ static int _sde_plane_mode_set(struct drm_plane *plane,
bool q16_data = true;
int idx;
- if (!plane || !plane->state) {
+ if (!plane) {
SDE_ERROR("invalid plane\n");
return -EINVAL;
} else if (!plane->state) {
@@ -923,7 +935,8 @@ static int _sde_plane_mode_set(struct drm_plane *plane,
crtc = state->crtc;
fb = state->fb;
if (!crtc || !fb) {
- SDE_ERROR("invalid crtc/fb\n");
+ SDE_ERROR_PLANE(psde, "invalid crtc %d or fb %d\n",
+ crtc != 0, fb != 0);
return -EINVAL;
}
fmt = to_sde_format(msm_framebuffer_format(fb));
@@ -983,9 +996,8 @@ static int _sde_plane_mode_set(struct drm_plane *plane,
POPULATE_RECT(&dst, state->crtc_x, state->crtc_y,
state->crtc_w, state->crtc_h, !q16_data);
- SDE_DEBUG(
- "%s:FB[%u] %u,%u,%u,%u -> crtc%u %d,%d,%u,%u, %s ubwc %d\n",
- psde->pipe_name,
+ SDE_DEBUG_PLANE(psde,
+ "FB[%u] %u,%u,%ux%u->crtc%u %d,%d,%ux%u, %s ubwc %d\n",
fb->base.id, src.x, src.y, src.w, src.h,
crtc->base.id, dst.x, dst.y, dst.w, dst.h,
drm_get_format_name(fmt->base.pixel_format),
@@ -993,7 +1005,7 @@ static int _sde_plane_mode_set(struct drm_plane *plane,
if (sde_plane_get_property(pstate, PLANE_PROP_SRC_CONFIG) &
BIT(SDE_DRM_DEINTERLACE)) {
- SDE_DEBUG("deinterlace\n");
+ SDE_DEBUG_PLANE(psde, "deinterlace\n");
for (idx = 0; idx < SDE_MAX_PLANES; ++idx)
psde->pipe_cfg.layout.plane_pitch[idx] <<= 1;
src.h /= 2;
@@ -1028,7 +1040,7 @@ static int _sde_plane_mode_set(struct drm_plane *plane,
if ((pstate->dirty & SDE_PLANE_DIRTY_FORMAT) &&
psde->pipe_hw->ops.setup_format) {
src_flags = 0x0;
- SDE_DEBUG("rotation 0x%llX\n",
+ SDE_DEBUG_PLANE(psde, "rotation 0x%llX\n",
sde_plane_get_property(pstate, PLANE_PROP_ROTATION));
if (sde_plane_get_property(pstate, PLANE_PROP_ROTATION) &
BIT(DRM_REFLECT_X))
@@ -1082,20 +1094,20 @@ static int sde_plane_prepare_fb(struct drm_plane *plane,
if (!new_state->fb)
return 0;
- SDE_DEBUG("%s: FB[%u]\n", psde->pipe_name, fb->base.id);
+ SDE_DEBUG_PLANE(psde, "FB[%u]\n", fb->base.id);
return msm_framebuffer_prepare(fb, psde->mmu_id);
}
static void sde_plane_cleanup_fb(struct drm_plane *plane,
const struct drm_plane_state *old_state)
{
- struct drm_framebuffer *fb = old_state->fb;
- struct sde_plane *psde = to_sde_plane(plane);
+ struct drm_framebuffer *fb = old_state ? old_state->fb : NULL;
+ struct sde_plane *psde = plane ? to_sde_plane(plane) : NULL;
if (!fb)
return;
- SDE_DEBUG("%s: FB[%u]\n", psde->pipe_name, fb->base.id);
+ SDE_DEBUG_PLANE(psde, "FB[%u]\n", fb->base.id);
msm_framebuffer_cleanup(fb, psde->mmu_id);
}
@@ -1111,30 +1123,30 @@ static void _sde_plane_atomic_check_mode_changed(struct sde_plane *psde,
if (!sde_plane_enabled(state) || !sde_plane_enabled(old_state)
|| psde->is_error) {
- SDE_DEBUG("%s: pipe enabling/disabling full modeset required\n",
- psde->pipe_name);
+ SDE_DEBUG_PLANE(psde,
+ "enabling/disabling full modeset required\n");
pstate->dirty |= SDE_PLANE_DIRTY_ALL;
} else if (to_sde_plane_state(old_state)->pending) {
- SDE_DEBUG("%s: still pending\n", psde->pipe_name);
+ SDE_DEBUG_PLANE(psde, "still pending\n");
pstate->dirty |= SDE_PLANE_DIRTY_ALL;
} else if (state->src_w != old_state->src_w ||
state->src_h != old_state->src_h ||
state->src_x != old_state->src_x ||
state->src_y != old_state->src_y) {
- SDE_DEBUG("%s: src rect updated\n", psde->pipe_name);
+ SDE_DEBUG_PLANE(psde, "src rect updated\n");
pstate->dirty |= SDE_PLANE_DIRTY_RECTS;
} else if (state->crtc_w != old_state->crtc_w ||
state->crtc_h != old_state->crtc_h ||
state->crtc_x != old_state->crtc_x ||
state->crtc_y != old_state->crtc_y) {
- SDE_DEBUG("%s: crtc rect updated\n", psde->pipe_name);
+ SDE_DEBUG_PLANE(psde, "crtc rect updated\n");
pstate->dirty |= SDE_PLANE_DIRTY_RECTS;
}
if (!state->fb || !old_state->fb) {
- SDE_DEBUG("%s: can't compare fb handles\n", psde->pipe_name);
+ SDE_DEBUG_PLANE(psde, "can't compare fb handles\n");
} else if (state->fb->pixel_format != old_state->fb->pixel_format) {
- SDE_DEBUG("%s: format change!\n", psde->pipe_name);
+ SDE_DEBUG_PLANE(psde, "format change\n");
pstate->dirty |= SDE_PLANE_DIRTY_FORMAT | SDE_PLANE_DIRTY_RECTS;
} else {
uint64_t *new_mods = state->fb->modifier;
@@ -1147,10 +1159,10 @@ static void _sde_plane_atomic_check_mode_changed(struct sde_plane *psde,
for (i = 0; i < ARRAY_SIZE(state->fb->modifier); i++) {
if (new_mods[i] != old_mods[i]) {
- SDE_DEBUG("%s: format modifiers change\"\
+ SDE_DEBUG_PLANE(psde,
+ "format modifiers change\"\
plane:%d new_mode:%llu old_mode:%llu\n",
- psde->pipe_name, i, new_mods[i],
- old_mods[i]);
+ i, new_mods[i], old_mods[i]);
pstate->dirty |= SDE_PLANE_DIRTY_FORMAT |
SDE_PLANE_DIRTY_RECTS;
break;
@@ -1158,20 +1170,20 @@ static void _sde_plane_atomic_check_mode_changed(struct sde_plane *psde,
}
for (i = 0; i < ARRAY_SIZE(state->fb->pitches); i++) {
if (new_pitches[i] != old_pitches[i]) {
- SDE_DEBUG("%s: pitches change plane:%d\"\
+ SDE_DEBUG_PLANE(psde,
+ "pitches change plane:%d\"\
old_pitches:%u new_pitches:%u\n",
- psde->pipe_name, i, old_pitches[i],
- new_pitches[i]);
+ i, old_pitches[i], new_pitches[i]);
pstate->dirty |= SDE_PLANE_DIRTY_RECTS;
break;
}
}
for (i = 0; i < ARRAY_SIZE(state->fb->offsets); i++) {
if (new_offset[i] != old_offset[i]) {
- SDE_DEBUG("%s: offset change plane:%d\"\
+ SDE_DEBUG_PLANE(psde,
+ "offset change plane:%d\"\
old_offset:%u new_offset:%u\n",
- psde->pipe_name, i, old_offset[i],
- new_offset[i]);
+ i, old_offset[i], new_offset[i]);
pstate->dirty |= SDE_PLANE_DIRTY_FORMAT |
SDE_PLANE_DIRTY_RECTS;
break;
@@ -1193,7 +1205,8 @@ static int sde_plane_atomic_check(struct drm_plane *plane,
bool q16_data = true;
if (!plane || !state) {
- SDE_ERROR("invalid plane/state\n");
+ SDE_ERROR("invalid arg(s), plane %d state %d\n",
+ plane != 0, state != 0);
ret = -EINVAL;
goto exit;
}
@@ -1202,7 +1215,7 @@ static int sde_plane_atomic_check(struct drm_plane *plane,
pstate = to_sde_plane_state(state);
if (!psde->pipe_sblk) {
- SDE_ERROR("invalid plane catalog\n");
+ SDE_ERROR_PLANE(psde, "invalid catalog\n");
ret = -EINVAL;
goto exit;
}
@@ -1223,7 +1236,7 @@ static int sde_plane_atomic_check(struct drm_plane *plane,
max_downscale = psde->pipe_sblk->maxdwnscale;
max_linewidth = psde->pipe_sblk->maxlinewidth;
- SDE_DEBUG("%s: check (%d -> %d)\n", psde->pipe_name,
+ SDE_DEBUG_PLANE(psde, "check %d -> %d\n",
sde_plane_enabled(plane->state), sde_plane_enabled(state));
if (!sde_plane_enabled(state))
@@ -1236,7 +1249,8 @@ static int sde_plane_atomic_check(struct drm_plane *plane,
if (SDE_FORMAT_IS_YUV(fmt) &&
(!(psde->features & SDE_SSPP_SCALER) ||
!(psde->features & BIT(SDE_SSPP_CSC)))) {
- SDE_ERROR("plane doesn't have scaler/csc capability for yuv\n");
+ SDE_ERROR_PLANE(psde,
+ "plane doesn't have scaler/csc for yuv\n");
ret = -EINVAL;
/* check src bounds */
@@ -1245,20 +1259,20 @@ static int sde_plane_atomic_check(struct drm_plane *plane,
src.w < min_src_size || src.h < min_src_size ||
CHECK_LAYER_BOUNDS(src.x, src.w, state->fb->width) ||
CHECK_LAYER_BOUNDS(src.y, src.h, state->fb->height)) {
- SDE_ERROR("invalid source (%u, %u) -> (%u, %u)\n",
+ SDE_ERROR_PLANE(psde, "invalid source %u, %u, %ux%u\n",
src.x, src.y, src.w, src.h);
ret = -E2BIG;
/* valid yuv image */
} else if (SDE_FORMAT_IS_YUV(fmt) && ((src.x & 0x1) || (src.y & 0x1) ||
(src.w & 0x1) || (src.h & 0x1))) {
- SDE_ERROR("invalid yuv source (%u, %u) -> (%u, %u)\n",
+ SDE_ERROR_PLANE(psde, "invalid yuv source %u, %u, %ux%u\n",
src.x, src.y, src.w, src.h);
ret = -EINVAL;
/* min dst support */
} else if (dst.w < 0x1 || dst.h < 0x1) {
- SDE_ERROR("invalid dest rect (%u, %u) -> (%u, %u)\n",
+ SDE_ERROR_PLANE(psde, "invalid dest rect %u, %u, %ux%u\n",
dst.x, dst.y, dst.w, dst.h);
ret = -EINVAL;
@@ -1266,22 +1280,26 @@ static int sde_plane_atomic_check(struct drm_plane *plane,
} else if (deci_w || deci_h) {
if ((deci_w > psde->pipe_sblk->maxhdeciexp) ||
(deci_h > psde->pipe_sblk->maxvdeciexp)) {
- SDE_ERROR("too much decimation requested\n");
+ SDE_ERROR_PLANE(psde,
+ "too much decimation requested\n");
ret = -EINVAL;
} else if (fmt->fetch_mode != SDE_FETCH_LINEAR) {
- SDE_ERROR("decimation requires linear fetch\n");
+ SDE_ERROR_PLANE(psde,
+ "decimation requires linear fetch\n");
ret = -EINVAL;
}
} else if (!(psde->features & SDE_SSPP_SCALER) &&
((src.w != dst.w) || (src.h != dst.h))) {
- SDE_ERROR("pipe doesn't support scaling %ux%u->%ux%u\n",
+ SDE_ERROR_PLANE(psde,
+ "pipe doesn't support scaling %ux%u->%ux%u\n",
src.w, src.h, dst.w, dst.h);
ret = -EINVAL;
/* check decimated source width */
} else if (src_deci_w > max_linewidth) {
- SDE_ERROR("invalid source width:%u, deci wid:%u, line wid:%u\n",
+ SDE_ERROR_PLANE(psde,
+ "invalid src w:%u, deci w:%u, line w:%u\n",
src.w, src_deci_w, max_linewidth);
ret = -E2BIG;
@@ -1290,7 +1308,8 @@ static int sde_plane_atomic_check(struct drm_plane *plane,
((src_deci_h * max_upscale) < dst.h) ||
((dst.w * max_downscale) < src_deci_w) ||
((dst.h * max_downscale) < src_deci_h)) {
- SDE_ERROR("too much scaling requested %ux%u -> %ux%u\n",
+ SDE_ERROR_PLANE(psde,
+ "too much scaling requested %ux%u->%ux%u\n",
src_deci_w, src_deci_h, dst.w, dst.h);
ret = -E2BIG;
}
@@ -1310,8 +1329,10 @@ void sde_plane_flush(struct drm_plane *plane)
{
struct sde_plane *psde;
- if (!plane)
+ if (!plane) {
+ SDE_ERROR("invalid plane\n");
return;
+ }
psde = to_sde_plane(plane);
@@ -1321,10 +1342,10 @@ void sde_plane_flush(struct drm_plane *plane)
*/
if (psde->is_error)
/* force white frame with 0% alpha pipe output on error */
- _sde_plane_color_fill(plane, 0xFFFFFF, 0x0);
+ _sde_plane_color_fill(psde, 0xFFFFFF, 0x0);
else if (psde->color_fill & SDE_PLANE_COLOR_FILL_FLAG)
/* force 100% alpha */
- _sde_plane_color_fill(plane, psde->color_fill, 0xFF);
+ _sde_plane_color_fill(psde, psde->color_fill, 0xFF);
else if (psde->pipe_hw && psde->csc_ptr && psde->pipe_hw->ops.setup_csc)
psde->pipe_hw->ops.setup_csc(psde->pipe_hw, psde->csc_ptr);
@@ -1336,21 +1357,24 @@ void sde_plane_flush(struct drm_plane *plane)
static void sde_plane_atomic_update(struct drm_plane *plane,
struct drm_plane_state *old_state)
{
- struct sde_plane *sde_plane;
+ struct sde_plane *psde;
struct drm_plane_state *state;
struct sde_plane_state *pstate;
- if (!plane || !plane->state) {
- SDE_ERROR("invalid plane/state\n");
+ if (!plane) {
+ SDE_ERROR("invalid plane\n");
+ return;
+ } else if (!plane->state) {
+ SDE_ERROR("invalid plane state\n");
return;
}
- sde_plane = to_sde_plane(plane);
- sde_plane->is_error = false;
+ psde = to_sde_plane(plane);
+ psde->is_error = false;
state = plane->state;
pstate = to_sde_plane_state(state);
- SDE_DEBUG("%s: update\n", sde_plane->pipe_name);
+ SDE_DEBUG_PLANE(psde, "\n");
if (!sde_plane_enabled(state)) {
pstate->pending = true;
@@ -1381,8 +1405,12 @@ static void _sde_plane_install_properties(struct drm_plane *plane,
struct sde_kms_info *info;
struct sde_plane *psde = to_sde_plane(plane);
- if (!plane || !psde || !psde->pipe_hw || !psde->pipe_sblk) {
- SDE_ERROR("Invalid argument(s)\n");
+ if (!plane || !psde) {
+ SDE_ERROR("invalid plane\n");
+ return;
+ } else if (!psde->pipe_hw || !psde->pipe_sblk) {
+ SDE_ERROR("invalid plane, pipe_hw %d pipe_sblk %d\n",
+ psde->pipe_hw != 0, psde->pipe_sblk != 0);
return;
}
@@ -1433,8 +1461,10 @@ static void _sde_plane_install_properties(struct drm_plane *plane,
0, 0, 0xFFFFFFFF, 0, PLANE_PROP_COLOR_FILL);
info = kzalloc(sizeof(struct sde_kms_info), GFP_KERNEL);
- if (!info)
+ if (!info) {
+ SDE_ERROR("failed to allocate info memory\n");
return;
+ }
msm_property_install_blob(&psde->property_info, "capabilities",
DRM_MODE_PROP_IMMUTABLE, PLANE_PROP_INFO);
@@ -1480,12 +1510,12 @@ static inline void _sde_plane_set_csc_v1(struct sde_plane *psde, void *usr_ptr)
psde->csc_usr_ptr = NULL;
if (!usr_ptr) {
- SDE_DEBUG("csc data removed\n");
+ SDE_DEBUG_PLANE(psde, "csc data removed\n");
return;
}
if (copy_from_user(&csc_v1, usr_ptr, sizeof(csc_v1))) {
- SDE_ERROR("failed to copy csc data\n");
+ SDE_ERROR_PLANE(psde, "failed to copy csc data\n");
return;
}
@@ -1516,12 +1546,12 @@ static inline void _sde_plane_set_scaler_v1(struct sde_plane *psde, void *usr)
psde->pixel_ext_usr = false;
if (!usr) {
- SDE_DEBUG("scale data removed\n");
+ SDE_DEBUG_PLANE(psde, "scale data removed\n");
return;
}
if (copy_from_user(&scale_v1, usr, sizeof(scale_v1))) {
- SDE_ERROR("failed to copy scale data\n");
+ SDE_ERROR_PLANE(psde, "failed to copy scale data\n");
return;
}
@@ -1556,25 +1586,24 @@ static inline void _sde_plane_set_scaler_v1(struct sde_plane *psde, void *usr)
}
psde->pixel_ext_usr = true;
- SDE_DEBUG("user property data copied\n");
+ SDE_DEBUG_PLANE(psde, "user property data copied\n");
}
static int sde_plane_atomic_set_property(struct drm_plane *plane,
struct drm_plane_state *state, struct drm_property *property,
uint64_t val)
{
- struct sde_plane *psde;
+ struct sde_plane *psde = plane ? to_sde_plane(plane) : NULL;
struct sde_plane_state *pstate;
int idx, ret = -EINVAL;
- DBG("");
+ SDE_DEBUG_PLANE(psde, "\n");
if (!plane) {
SDE_ERROR("invalid plane\n");
} else if (!state) {
- SDE_ERROR("invalid state\n");
+ SDE_ERROR_PLANE(psde, "invalid state\n");
} else {
- psde = to_sde_plane(plane);
pstate = to_sde_plane_state(state);
ret = msm_property_atomic_set(&psde->property_info,
pstate->property_values, pstate->property_blobs,
@@ -1584,7 +1613,7 @@ static int sde_plane_atomic_set_property(struct drm_plane *plane,
property);
switch (idx) {
case PLANE_PROP_INPUT_FENCE:
- _sde_plane_set_input_fence(plane, pstate, val);
+ _sde_plane_set_input_fence(psde, pstate, val);
break;
case PLANE_PROP_CSC_V1:
_sde_plane_set_csc_v1(psde, (void *)val);
@@ -1605,7 +1634,7 @@ static int sde_plane_atomic_set_property(struct drm_plane *plane,
static int sde_plane_set_property(struct drm_plane *plane,
struct drm_property *property, uint64_t val)
{
- DBG("");
+ SDE_DEBUG("\n");
return sde_plane_atomic_set_property(plane,
plane->state, property, val);
@@ -1615,18 +1644,16 @@ static int sde_plane_atomic_get_property(struct drm_plane *plane,
const struct drm_plane_state *state,
struct drm_property *property, uint64_t *val)
{
- struct sde_plane *psde;
+ struct sde_plane *psde = plane ? to_sde_plane(plane) : NULL;
struct sde_plane_state *pstate;
int ret = -EINVAL;
- DBG("");
-
if (!plane) {
SDE_ERROR("invalid plane\n");
} else if (!state) {
SDE_ERROR("invalid state\n");
} else {
- psde = to_sde_plane(plane);
+ SDE_DEBUG_PLANE(psde, "\n");
pstate = to_sde_plane_state(state);
ret = msm_property_atomic_get(&psde->property_info,
pstate->property_values, pstate->property_blobs,
@@ -1638,13 +1665,11 @@ static int sde_plane_atomic_get_property(struct drm_plane *plane,
static void sde_plane_destroy(struct drm_plane *plane)
{
- struct sde_plane *psde;
+ struct sde_plane *psde = plane ? to_sde_plane(plane) : NULL;
- DBG("");
-
- if (plane) {
- psde = to_sde_plane(plane);
+ SDE_DEBUG_PLANE(psde, "\n");
+ if (psde) {
_sde_plane_set_qos_ctrl(plane, false, SDE_PLANE_QOS_PANIC_CTRL);
debugfs_remove_recursive(psde->debugfs_root);
@@ -1673,14 +1698,15 @@ static void sde_plane_destroy_state(struct drm_plane *plane,
struct sde_plane_state *pstate;
if (!plane || !state) {
- SDE_ERROR("invalid plane/state\n");
+ SDE_ERROR("invalid arg(s), plane %d state %d\n",
+ plane != 0, state != 0);
return;
}
psde = to_sde_plane(plane);
pstate = to_sde_plane_state(state);
- DBG("");
+ SDE_DEBUG_PLANE(psde, "\n");
/* remove ref count for frame buffers */
if (state->fb)
@@ -1703,16 +1729,23 @@ sde_plane_duplicate_state(struct drm_plane *plane)
struct sde_plane_state *old_state;
uint64_t input_fence_default;
- if (!plane || !plane->state)
+ if (!plane) {
+ SDE_ERROR("invalid plane\n");
+ return NULL;
+ } else if (!plane->state) {
+ SDE_ERROR("invalid plane state\n");
return NULL;
+ }
old_state = to_sde_plane_state(plane->state);
psde = to_sde_plane(plane);
pstate = msm_property_alloc_state(&psde->property_info);
- if (!pstate)
+ if (!pstate) {
+ SDE_ERROR_PLANE(psde, "failed to allocate state\n");
return NULL;
+ }
- DBG("");
+ SDE_DEBUG_PLANE(psde, "\n");
/* duplicate value helper */
msm_property_duplicate_state(&psde->property_info, old_state, pstate,
@@ -1746,7 +1779,7 @@ static void sde_plane_reset(struct drm_plane *plane)
}
psde = to_sde_plane(plane);
- SDE_DEBUG("%s\n", psde->pipe_name);
+ SDE_DEBUG_PLANE(psde, "\n");
/* remove previous state, if present */
if (plane->state) {
@@ -1755,8 +1788,10 @@ static void sde_plane_reset(struct drm_plane *plane)
}
pstate = msm_property_alloc_state(&psde->property_info);
- if (!pstate)
+ if (!pstate) {
+ SDE_ERROR_PLANE(psde, "failed to allocate state\n");
return;
+ }
/* reset value helper */
msm_property_reset_state(&psde->property_info, pstate,
@@ -1788,9 +1823,7 @@ static const struct drm_plane_helper_funcs sde_plane_helper_funcs = {
enum sde_sspp sde_plane_pipe(struct drm_plane *plane)
{
- struct sde_plane *sde_plane = to_sde_plane(plane);
-
- return sde_plane->pipe;
+ return plane ? to_sde_plane(plane)->pipe : SSPP_NONE;
}
static void _sde_plane_init_debugfs(struct sde_plane *psde, struct sde_kms *kms)
@@ -1900,7 +1933,7 @@ struct drm_plane *sde_plane_init(struct drm_device *dev,
psde->features = psde->pipe_hw->cap->features;
psde->pipe_sblk = psde->pipe_hw->cap->sblk;
if (!psde->pipe_sblk) {
- SDE_ERROR("invalid sblk on pipe %d\n", pipe);
+ SDE_ERROR("[%u]invalid sblk\n", pipe);
goto clean_sspp;
}
@@ -1947,7 +1980,7 @@ struct drm_plane *sde_plane_init(struct drm_device *dev,
_sde_plane_init_debugfs(psde, kms);
- DRM_INFO("[%u]successfully created %s\n", pipe, psde->pipe_name);
+ DRM_INFO("%s created for pipe %u\n", psde->pipe_name, pipe);
return plane;
clean_sspp: