intel-gfx.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] drm/core: Change declaration for gamma_set.
@ 2016-06-06  9:18 Maarten Lankhorst
  2016-06-06  9:28 ` ✗ Ro.CI.BAT: failure for " Patchwork
                   ` (3 more replies)
  0 siblings, 4 replies; 13+ messages in thread
From: Maarten Lankhorst @ 2016-06-06  9:18 UTC (permalink / raw)
  To: dri-devel
  Cc: intel-gfx, Mathieu Larouche, VMware Graphics, Ben Skeggs,
	Alex Deucher, Thierry Reding, Christian König

Change return value to int to propagate errors from gamma_set,
and remove start parameter. Updates always use the full size,
and some drivers even ignore the start parameter altogether.

Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Eric Anholt <eric@anholt.net>
Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
Cc: Mathieu Larouche <mathieu.larouche@matrox.com>
Cc: Thierry Reding <treding@nvidia.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c  | 10 ++++++----
 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c  | 10 ++++++----
 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c   | 10 ++++++----
 drivers/gpu/drm/ast/ast_mode.c          | 10 ++++++----
 drivers/gpu/drm/cirrus/cirrus_mode.c    |  8 +++++---
 drivers/gpu/drm/drm_atomic_helper.c     | 13 ++++++-------
 drivers/gpu/drm/drm_crtc.c              |  2 +-
 drivers/gpu/drm/drm_fb_helper.c         |  4 +---
 drivers/gpu/drm/gma500/gma_display.c    |  9 +++++----
 drivers/gpu/drm/gma500/gma_display.h    |  4 ++--
 drivers/gpu/drm/mgag200/mgag200_mode.c  |  9 +++++----
 drivers/gpu/drm/nouveau/dispnv04/crtc.c | 12 +++++++-----
 drivers/gpu/drm/nouveau/nv50_display.c  |  9 +++++----
 drivers/gpu/drm/radeon/radeon_display.c | 11 +++++++----
 drivers/gpu/drm/vc4/vc4_crtc.c          |  8 +++++---
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c     |  8 +++++---
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.h     |  4 ++--
 include/drm/drm_atomic_helper.h         |  6 +++---
 include/drm/drm_crtc.h                  |  4 ++--
 19 files changed, 85 insertions(+), 66 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 8227344d2ff6..16de862ea51f 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -2667,19 +2667,21 @@ static void dce_v10_0_cursor_reset(struct drm_crtc *crtc)
 	}
 }
 
-static void dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				    u16 *blue, uint32_t start, uint32_t size)
+static int dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				    u16 *blue, uint32_t size)
 {
 	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		amdgpu_crtc->lut_r[i] = red[i] >> 6;
 		amdgpu_crtc->lut_g[i] = green[i] >> 6;
 		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
 	}
 	dce_v10_0_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 static void dce_v10_0_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index af26ec0bc59d..6e0ae8e2e65c 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -2678,19 +2678,21 @@ static void dce_v11_0_cursor_reset(struct drm_crtc *crtc)
 	}
 }
 
-static void dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				    u16 *blue, uint32_t start, uint32_t size)
+static int dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				    u16 *blue, uint32_t size)
 {
 	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		amdgpu_crtc->lut_r[i] = red[i] >> 6;
 		amdgpu_crtc->lut_g[i] = green[i] >> 6;
 		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
 	}
 	dce_v11_0_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 static void dce_v11_0_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 3fb65e41a6ef..7b5fae4c74f1 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -2574,19 +2574,21 @@ static void dce_v8_0_cursor_reset(struct drm_crtc *crtc)
 	}
 }
 
-static void dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				    u16 *blue, uint32_t start, uint32_t size)
+static int dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				   u16 *blue, uint32_t size)
 {
 	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		amdgpu_crtc->lut_r[i] = red[i] >> 6;
 		amdgpu_crtc->lut_g[i] = green[i] >> 6;
 		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
 	}
 	dce_v8_0_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 static void dce_v8_0_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index c337922606e3..5957c3e659fe 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -624,19 +624,21 @@ static void ast_crtc_reset(struct drm_crtc *crtc)
 
 }
 
-static void ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				 u16 *blue, uint32_t start, uint32_t size)
+static int ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+			      u16 *blue, uint32_t size)
 {
 	struct ast_crtc *ast_crtc = to_ast_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		ast_crtc->lut_r[i] = red[i] >> 8;
 		ast_crtc->lut_g[i] = green[i] >> 8;
 		ast_crtc->lut_b[i] = blue[i] >> 8;
 	}
 	ast_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 
diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
index 0b1a411cb89e..17c915d9a03e 100644
--- a/drivers/gpu/drm/cirrus/cirrus_mode.c
+++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
@@ -325,18 +325,20 @@ static void cirrus_crtc_commit(struct drm_crtc *crtc)
  * use this for 8-bit mode so can't perform smooth fades on deeper modes,
  * but it's a requirement that we provide the function
  */
-static void cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				  u16 *blue, uint32_t start, uint32_t size)
+static int cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				 u16 *blue, uint32_t size)
 {
 	struct cirrus_crtc *cirrus_crtc = to_cirrus_crtc(crtc);
 	int i;
 
-	for (i = 0; i < CIRRUS_LUT_SIZE; i++) {
+	for (i = 0; i < size; i++) {
 		cirrus_crtc->lut_r[i] = red[i];
 		cirrus_crtc->lut_g[i] = green[i];
 		cirrus_crtc->lut_b[i] = blue[i];
 	}
 	cirrus_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 /* Simple cleanup function */
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 939df900dcaa..266c11018a19 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -2933,16 +2933,15 @@ EXPORT_SYMBOL(drm_atomic_helper_connector_destroy_state);
  * @red: red correction table
  * @green: green correction table
  * @blue: green correction table
- * @start:
  * @size: size of the tables
  *
  * Implements support for legacy gamma correction table for drivers
  * that support color management through the DEGAMMA_LUT/GAMMA_LUT
  * properties.
  */
-void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
-					u16 *red, u16 *green, u16 *blue,
-					uint32_t start, uint32_t size)
+int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
+				       u16 *red, u16 *green, u16 *blue,
+				       uint32_t size)
 {
 	struct drm_device *dev = crtc->dev;
 	struct drm_mode_config *config = &dev->mode_config;
@@ -2954,7 +2953,7 @@ void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
 
 	state = drm_atomic_state_alloc(crtc->dev);
 	if (!state)
-		return;
+		return -ENOMEM;
 
 	blob = drm_property_create_blob(dev,
 					sizeof(struct drm_color_lut) * size,
@@ -3005,7 +3004,7 @@ retry:
 
 	drm_property_unreference_blob(blob);
 
-	return;
+	return 0;
 fail:
 	if (ret == -EDEADLK)
 		goto backoff;
@@ -3013,7 +3012,7 @@ fail:
 	drm_atomic_state_free(state);
 	drm_property_unreference_blob(blob);
 
-	return;
+	return ret;
 backoff:
 	drm_atomic_state_clear(state);
 	drm_atomic_legacy_backoff(state);
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index d2a6d958ca76..4d61ceae789c 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -5215,7 +5215,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
 		goto out;
 	}
 
-	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
+	ret = crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
 
 out:
 	drm_modeset_unlock_all(dev);
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7590df5e2e72..4accf6039058 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -227,7 +227,7 @@ static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
 	g_base = r_base + crtc->gamma_size;
 	b_base = g_base + crtc->gamma_size;
 
-	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
+	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
 }
 
 /**
@@ -1076,8 +1076,6 @@ static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,
 	WARN_ON(fb->bits_per_pixel != 8);
 
 	fb_helper->funcs->gamma_set(crtc, red, green, blue, regno);
-
-	return 0;
 }
 
 /**
diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
index c95406e6f44d..5b636bf0b467 100644
--- a/drivers/gpu/drm/gma500/gma_display.c
+++ b/drivers/gpu/drm/gma500/gma_display.c
@@ -175,20 +175,21 @@ void gma_crtc_load_lut(struct drm_crtc *crtc)
 	}
 }
 
-void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
-			u32 start, u32 size)
+int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
+		       u32 size)
 {
 	struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
 	int i;
-	int end = (start + size > 256) ? 256 : start + size;
 
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		gma_crtc->lut_r[i] = red[i] >> 8;
 		gma_crtc->lut_g[i] = green[i] >> 8;
 		gma_crtc->lut_b[i] = blue[i] >> 8;
 	}
 
 	gma_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 /**
diff --git a/drivers/gpu/drm/gma500/gma_display.h b/drivers/gpu/drm/gma500/gma_display.h
index b2491c65f053..e72dd08b701b 100644
--- a/drivers/gpu/drm/gma500/gma_display.h
+++ b/drivers/gpu/drm/gma500/gma_display.h
@@ -72,8 +72,8 @@ extern int gma_crtc_cursor_set(struct drm_crtc *crtc,
 			       uint32_t width, uint32_t height);
 extern int gma_crtc_cursor_move(struct drm_crtc *crtc, int x, int y);
 extern void gma_crtc_load_lut(struct drm_crtc *crtc);
-extern void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-			       u16 *blue, u32 start, u32 size);
+extern int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+			      u16 *blue, u32 size);
 extern void gma_crtc_dpms(struct drm_crtc *crtc, int mode);
 extern void gma_crtc_prepare(struct drm_crtc *crtc);
 extern void gma_crtc_commit(struct drm_crtc *crtc);
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index 14e64e08909e..f6d5892d03f1 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -1344,19 +1344,20 @@ static void mga_crtc_commit(struct drm_crtc *crtc)
  * use this for 8-bit mode so can't perform smooth fades on deeper modes,
  * but it's a requirement that we provide the function
  */
-static void mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				  u16 *blue, uint32_t start, uint32_t size)
+static int mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+			      u16 *blue, uint32_t size)
 {
 	struct mga_crtc *mga_crtc = to_mga_crtc(crtc);
-	int end = (start + size > MGAG200_LUT_SIZE) ? MGAG200_LUT_SIZE : start + size;
 	int i;
 
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		mga_crtc->lut_r[i] = red[i] >> 8;
 		mga_crtc->lut_g[i] = green[i] >> 8;
 		mga_crtc->lut_b[i] = blue[i] >> 8;
 	}
 	mga_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 /* Simple cleanup function */
diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
index 6f318c54da33..0cb7a18cde26 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
@@ -785,14 +785,14 @@ nv_crtc_disable(struct drm_crtc *crtc)
 	nouveau_bo_ref(NULL, &disp->image[nv_crtc->index]);
 }
 
-static void
-nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
+static int
+nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
 		  uint32_t size)
 {
-	int end = (start + size > 256) ? 256 : start + size, i;
 	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
+	int i;
 
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		nv_crtc->lut.r[i] = r[i];
 		nv_crtc->lut.g[i] = g[i];
 		nv_crtc->lut.b[i] = b[i];
@@ -805,10 +805,12 @@ nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
 	 */
 	if (!nv_crtc->base.primary->fb) {
 		nv_crtc->lut.depth = 0;
-		return;
+		return 0;
 	}
 
 	nv_crtc_gamma_load(crtc);
+
+	return 0;
 }
 
 static int
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 3ffc2b0057bf..7a7788212df7 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -1346,21 +1346,22 @@ nv50_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
 	return 0;
 }
 
-static void
+static int
 nv50_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
-		    uint32_t start, uint32_t size)
+		    uint32_t size)
 {
 	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
-	u32 end = min_t(u32, start + size, 256);
 	u32 i;
 
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		nv_crtc->lut.r[i] = r[i];
 		nv_crtc->lut.g[i] = g[i];
 		nv_crtc->lut.b[i] = b[i];
 	}
 
 	nv50_crtc_lut_load(crtc);
+
+	return 0;
 }
 
 static void
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 6a41b4982647..80f06db1dd34 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -231,19 +231,21 @@ void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
 	*blue = radeon_crtc->lut_b[regno] << 6;
 }
 
-static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				  u16 *blue, uint32_t start, uint32_t size)
+static int radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				 u16 *blue, uint32_t size)
 {
 	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		radeon_crtc->lut_r[i] = red[i] >> 6;
 		radeon_crtc->lut_g[i] = green[i] >> 6;
 		radeon_crtc->lut_b[i] = blue[i] >> 6;
 	}
 	radeon_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 static void radeon_crtc_destroy(struct drm_crtc *crtc)
@@ -688,6 +690,7 @@ radeon_crtc_set_config(struct drm_mode_set *set)
 	pm_runtime_put_autosuspend(dev->dev);
 	return ret;
 }
+
 static const struct drm_crtc_funcs radeon_crtc_funcs = {
 	.cursor_set2 = radeon_crtc_cursor_set2,
 	.cursor_move = radeon_crtc_cursor_move,
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index 904d0754ad78..4e34f054da5c 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -175,20 +175,22 @@ vc4_crtc_lut_load(struct drm_crtc *crtc)
 		HVS_WRITE(SCALER_GAMDATA, vc4_crtc->lut_b[i]);
 }
 
-static void
+static int
 vc4_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
-		   uint32_t start, uint32_t size)
+		   uint32_t size)
 {
 	struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
 	u32 i;
 
-	for (i = start; i < start + size; i++) {
+	for (i = 0; i < size; i++) {
 		vc4_crtc->lut_r[i] = r[i] >> 8;
 		vc4_crtc->lut_g[i] = g[i] >> 8;
 		vc4_crtc->lut_b[i] = b[i] >> 8;
 	}
 
 	vc4_crtc_lut_load(crtc);
+
+	return 0;
 }
 
 static u32 vc4_get_fifo_full_level(u32 format)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 55231cce73a0..8a69d4da40b5 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -1404,9 +1404,9 @@ static int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
 	return 0;
 }
 
-void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
-			   u16 *r, u16 *g, u16 *b,
-			   uint32_t start, uint32_t size)
+int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
+			  u16 *r, u16 *g, u16 *b,
+			  uint32_t size)
 {
 	struct vmw_private *dev_priv = vmw_priv(crtc->dev);
 	int i;
@@ -1418,6 +1418,8 @@ void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
 		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 1, g[i] >> 8);
 		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 2, b[i] >> 8);
 	}
+
+	return 0;
 }
 
 int vmw_du_connector_dpms(struct drm_connector *connector, int mode)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
index 57203212c501..ff4803c107bc 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
@@ -195,9 +195,9 @@ struct vmw_display_unit {
 void vmw_du_cleanup(struct vmw_display_unit *du);
 void vmw_du_crtc_save(struct drm_crtc *crtc);
 void vmw_du_crtc_restore(struct drm_crtc *crtc);
-void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
+int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
 			   u16 *r, u16 *g, u16 *b,
-			   uint32_t start, uint32_t size);
+			   uint32_t size);
 int vmw_du_crtc_cursor_set2(struct drm_crtc *crtc, struct drm_file *file_priv,
 			    uint32_t handle, uint32_t width, uint32_t height,
 			    int32_t hot_x, int32_t hot_y);
diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
index d473dcc91f54..11896c84c4f8 100644
--- a/include/drm/drm_atomic_helper.h
+++ b/include/drm/drm_atomic_helper.h
@@ -147,9 +147,9 @@ void
 __drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state);
 void drm_atomic_helper_connector_destroy_state(struct drm_connector *connector,
 					  struct drm_connector_state *state);
-void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
-					u16 *red, u16 *green, u16 *blue,
-					uint32_t start, uint32_t size);
+int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
+				       u16 *red, u16 *green, u16 *blue,
+				       uint32_t size);
 
 /**
  * drm_atomic_crtc_for_each_plane - iterate over planes currently attached to CRTC
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index d1559cd04e3d..8622bb2f4f25 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -478,8 +478,8 @@ struct drm_crtc_funcs {
 	 * going on, which should eventually be unified to just one set of
 	 * hooks.
 	 */
-	void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
-			  uint32_t start, uint32_t size);
+	int (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
+			 uint32_t size);
 
 	/**
 	 * @destroy:
-- 
2.5.5

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* ✗ Ro.CI.BAT: failure for drm/core: Change declaration for gamma_set.
  2016-06-06  9:18 [PATCH] drm/core: Change declaration for gamma_set Maarten Lankhorst
@ 2016-06-06  9:28 ` Patchwork
  2016-06-06 16:00 ` [PATCH] " Daniel Vetter
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 13+ messages in thread
From: Patchwork @ 2016-06-06  9:28 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx

== Series Details ==

Series: drm/core: Change declaration for gamma_set.
URL   : https://patchwork.freedesktop.org/series/8332/
State : failure

== Summary ==

Applying: drm/core: Change declaration for gamma_set.
Using index info to reconstruct a base tree...
M	drivers/gpu/drm/drm_atomic_helper.c
M	drivers/gpu/drm/drm_crtc.c
M	drivers/gpu/drm/mgag200/mgag200_mode.c
M	drivers/gpu/drm/vc4/vc4_crtc.c
M	include/drm/drm_atomic_helper.h
M	include/drm/drm_crtc.h
Falling back to patching base and 3-way merge...
Auto-merging include/drm/drm_crtc.h
Auto-merging include/drm/drm_atomic_helper.h
Auto-merging drivers/gpu/drm/vc4/vc4_crtc.c
Auto-merging drivers/gpu/drm/mgag200/mgag200_mode.c
Auto-merging drivers/gpu/drm/drm_crtc.c
Auto-merging drivers/gpu/drm/drm_atomic_helper.c
CONFLICT (content): Merge conflict in drivers/gpu/drm/drm_atomic_helper.c
error: Failed to merge in the changes.
Patch failed at 0001 drm/core: Change declaration for gamma_set.
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm/core: Change declaration for gamma_set.
  2016-06-06  9:18 [PATCH] drm/core: Change declaration for gamma_set Maarten Lankhorst
  2016-06-06  9:28 ` ✗ Ro.CI.BAT: failure for " Patchwork
@ 2016-06-06 16:00 ` Daniel Vetter
  2016-06-06 16:01   ` Deucher, Alexander
  2016-06-06 16:11   ` Emil Velikov
  2016-06-06 16:17 ` Emil Velikov
  2016-06-07 10:49 ` [PATCH v2] " Maarten Lankhorst
  3 siblings, 2 replies; 13+ messages in thread
From: Daniel Vetter @ 2016-06-06 16:00 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: intel-gfx, Mathieu Larouche, dri-devel, VMware Graphics,
	Ben Skeggs, Alex Deucher, Thierry Reding, Christian König

On Mon, Jun 06, 2016 at 11:18:09AM +0200, Maarten Lankhorst wrote:
> Change return value to int to propagate errors from gamma_set,
> and remove start parameter. Updates always use the full size,
> and some drivers even ignore the start parameter altogether.

Commit message should explain why we suddenly need to pass up the error
code, too:

"This is needed for atomic drivers, where an atomic commit can fail with
EAGAIN and should be restarted."

I'll add that when merging, but will wait for a bit more acks/r-b first.
-Daniel
> 
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Eric Anholt <eric@anholt.net>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Mathieu Larouche <mathieu.larouche@matrox.com>
> Cc: Thierry Reding <treding@nvidia.com>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c  | 10 ++++++----
>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c  | 10 ++++++----
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c   | 10 ++++++----
>  drivers/gpu/drm/ast/ast_mode.c          | 10 ++++++----
>  drivers/gpu/drm/cirrus/cirrus_mode.c    |  8 +++++---
>  drivers/gpu/drm/drm_atomic_helper.c     | 13 ++++++-------
>  drivers/gpu/drm/drm_crtc.c              |  2 +-
>  drivers/gpu/drm/drm_fb_helper.c         |  4 +---
>  drivers/gpu/drm/gma500/gma_display.c    |  9 +++++----
>  drivers/gpu/drm/gma500/gma_display.h    |  4 ++--
>  drivers/gpu/drm/mgag200/mgag200_mode.c  |  9 +++++----
>  drivers/gpu/drm/nouveau/dispnv04/crtc.c | 12 +++++++-----
>  drivers/gpu/drm/nouveau/nv50_display.c  |  9 +++++----
>  drivers/gpu/drm/radeon/radeon_display.c | 11 +++++++----
>  drivers/gpu/drm/vc4/vc4_crtc.c          |  8 +++++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.c     |  8 +++++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.h     |  4 ++--
>  include/drm/drm_atomic_helper.h         |  6 +++---
>  include/drm/drm_crtc.h                  |  4 ++--
>  19 files changed, 85 insertions(+), 66 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index 8227344d2ff6..16de862ea51f 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -2667,19 +2667,21 @@ static void dce_v10_0_cursor_reset(struct drm_crtc *crtc)
>  	}
>  }
>  
> -static void dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				    u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				    u16 *blue, uint32_t size)
>  {
>  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
>  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
>  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>  	}
>  	dce_v10_0_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  static void dce_v10_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> index af26ec0bc59d..6e0ae8e2e65c 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> @@ -2678,19 +2678,21 @@ static void dce_v11_0_cursor_reset(struct drm_crtc *crtc)
>  	}
>  }
>  
> -static void dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				    u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				    u16 *blue, uint32_t size)
>  {
>  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
>  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
>  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>  	}
>  	dce_v11_0_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  static void dce_v11_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index 3fb65e41a6ef..7b5fae4c74f1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -2574,19 +2574,21 @@ static void dce_v8_0_cursor_reset(struct drm_crtc *crtc)
>  	}
>  }
>  
> -static void dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				    u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				   u16 *blue, uint32_t size)
>  {
>  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
>  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
>  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>  	}
>  	dce_v8_0_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  static void dce_v8_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> index c337922606e3..5957c3e659fe 100644
> --- a/drivers/gpu/drm/ast/ast_mode.c
> +++ b/drivers/gpu/drm/ast/ast_mode.c
> @@ -624,19 +624,21 @@ static void ast_crtc_reset(struct drm_crtc *crtc)
>  
>  }
>  
> -static void ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				 u16 *blue, uint32_t start, uint32_t size)
> +static int ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +			      u16 *blue, uint32_t size)
>  {
>  	struct ast_crtc *ast_crtc = to_ast_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		ast_crtc->lut_r[i] = red[i] >> 8;
>  		ast_crtc->lut_g[i] = green[i] >> 8;
>  		ast_crtc->lut_b[i] = blue[i] >> 8;
>  	}
>  	ast_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  
> diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
> index 0b1a411cb89e..17c915d9a03e 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_mode.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
> @@ -325,18 +325,20 @@ static void cirrus_crtc_commit(struct drm_crtc *crtc)
>   * use this for 8-bit mode so can't perform smooth fades on deeper modes,
>   * but it's a requirement that we provide the function
>   */
> -static void cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				  u16 *blue, uint32_t start, uint32_t size)
> +static int cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				 u16 *blue, uint32_t size)
>  {
>  	struct cirrus_crtc *cirrus_crtc = to_cirrus_crtc(crtc);
>  	int i;
>  
> -	for (i = 0; i < CIRRUS_LUT_SIZE; i++) {
> +	for (i = 0; i < size; i++) {
>  		cirrus_crtc->lut_r[i] = red[i];
>  		cirrus_crtc->lut_g[i] = green[i];
>  		cirrus_crtc->lut_b[i] = blue[i];
>  	}
>  	cirrus_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  /* Simple cleanup function */
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 939df900dcaa..266c11018a19 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -2933,16 +2933,15 @@ EXPORT_SYMBOL(drm_atomic_helper_connector_destroy_state);
>   * @red: red correction table
>   * @green: green correction table
>   * @blue: green correction table
> - * @start:
>   * @size: size of the tables
>   *
>   * Implements support for legacy gamma correction table for drivers
>   * that support color management through the DEGAMMA_LUT/GAMMA_LUT
>   * properties.
>   */
> -void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> -					u16 *red, u16 *green, u16 *blue,
> -					uint32_t start, uint32_t size)
> +int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> +				       u16 *red, u16 *green, u16 *blue,
> +				       uint32_t size)
>  {
>  	struct drm_device *dev = crtc->dev;
>  	struct drm_mode_config *config = &dev->mode_config;
> @@ -2954,7 +2953,7 @@ void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
>  
>  	state = drm_atomic_state_alloc(crtc->dev);
>  	if (!state)
> -		return;
> +		return -ENOMEM;
>  
>  	blob = drm_property_create_blob(dev,
>  					sizeof(struct drm_color_lut) * size,
> @@ -3005,7 +3004,7 @@ retry:
>  
>  	drm_property_unreference_blob(blob);
>  
> -	return;
> +	return 0;
>  fail:
>  	if (ret == -EDEADLK)
>  		goto backoff;
> @@ -3013,7 +3012,7 @@ fail:
>  	drm_atomic_state_free(state);
>  	drm_property_unreference_blob(blob);
>  
> -	return;
> +	return ret;
>  backoff:
>  	drm_atomic_state_clear(state);
>  	drm_atomic_legacy_backoff(state);
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index d2a6d958ca76..4d61ceae789c 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -5215,7 +5215,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
>  		goto out;
>  	}
>  
> -	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
> +	ret = crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
>  
>  out:
>  	drm_modeset_unlock_all(dev);
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 7590df5e2e72..4accf6039058 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -227,7 +227,7 @@ static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
>  	g_base = r_base + crtc->gamma_size;
>  	b_base = g_base + crtc->gamma_size;
>  
> -	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
> +	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
>  }
>  
>  /**
> @@ -1076,8 +1076,6 @@ static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,
>  	WARN_ON(fb->bits_per_pixel != 8);
>  
>  	fb_helper->funcs->gamma_set(crtc, red, green, blue, regno);
> -
> -	return 0;
>  }
>  
>  /**
> diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
> index c95406e6f44d..5b636bf0b467 100644
> --- a/drivers/gpu/drm/gma500/gma_display.c
> +++ b/drivers/gpu/drm/gma500/gma_display.c
> @@ -175,20 +175,21 @@ void gma_crtc_load_lut(struct drm_crtc *crtc)
>  	}
>  }
>  
> -void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
> -			u32 start, u32 size)
> +int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
> +		       u32 size)
>  {
>  	struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
>  	int i;
> -	int end = (start + size > 256) ? 256 : start + size;
>  
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		gma_crtc->lut_r[i] = red[i] >> 8;
>  		gma_crtc->lut_g[i] = green[i] >> 8;
>  		gma_crtc->lut_b[i] = blue[i] >> 8;
>  	}
>  
>  	gma_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  /**
> diff --git a/drivers/gpu/drm/gma500/gma_display.h b/drivers/gpu/drm/gma500/gma_display.h
> index b2491c65f053..e72dd08b701b 100644
> --- a/drivers/gpu/drm/gma500/gma_display.h
> +++ b/drivers/gpu/drm/gma500/gma_display.h
> @@ -72,8 +72,8 @@ extern int gma_crtc_cursor_set(struct drm_crtc *crtc,
>  			       uint32_t width, uint32_t height);
>  extern int gma_crtc_cursor_move(struct drm_crtc *crtc, int x, int y);
>  extern void gma_crtc_load_lut(struct drm_crtc *crtc);
> -extern void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -			       u16 *blue, u32 start, u32 size);
> +extern int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +			      u16 *blue, u32 size);
>  extern void gma_crtc_dpms(struct drm_crtc *crtc, int mode);
>  extern void gma_crtc_prepare(struct drm_crtc *crtc);
>  extern void gma_crtc_commit(struct drm_crtc *crtc);
> diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
> index 14e64e08909e..f6d5892d03f1 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
> @@ -1344,19 +1344,20 @@ static void mga_crtc_commit(struct drm_crtc *crtc)
>   * use this for 8-bit mode so can't perform smooth fades on deeper modes,
>   * but it's a requirement that we provide the function
>   */
> -static void mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				  u16 *blue, uint32_t start, uint32_t size)
> +static int mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +			      u16 *blue, uint32_t size)
>  {
>  	struct mga_crtc *mga_crtc = to_mga_crtc(crtc);
> -	int end = (start + size > MGAG200_LUT_SIZE) ? MGAG200_LUT_SIZE : start + size;
>  	int i;
>  
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		mga_crtc->lut_r[i] = red[i] >> 8;
>  		mga_crtc->lut_g[i] = green[i] >> 8;
>  		mga_crtc->lut_b[i] = blue[i] >> 8;
>  	}
>  	mga_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  /* Simple cleanup function */
> diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> index 6f318c54da33..0cb7a18cde26 100644
> --- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> +++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> @@ -785,14 +785,14 @@ nv_crtc_disable(struct drm_crtc *crtc)
>  	nouveau_bo_ref(NULL, &disp->image[nv_crtc->index]);
>  }
>  
> -static void
> -nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
> +static int
> +nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
>  		  uint32_t size)
>  {
> -	int end = (start + size > 256) ? 256 : start + size, i;
>  	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
> +	int i;
>  
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		nv_crtc->lut.r[i] = r[i];
>  		nv_crtc->lut.g[i] = g[i];
>  		nv_crtc->lut.b[i] = b[i];
> @@ -805,10 +805,12 @@ nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
>  	 */
>  	if (!nv_crtc->base.primary->fb) {
>  		nv_crtc->lut.depth = 0;
> -		return;
> +		return 0;
>  	}
>  
>  	nv_crtc_gamma_load(crtc);
> +
> +	return 0;
>  }
>  
>  static int
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 3ffc2b0057bf..7a7788212df7 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1346,21 +1346,22 @@ nv50_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
>  	return 0;
>  }
>  
> -static void
> +static int
>  nv50_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -		    uint32_t start, uint32_t size)
> +		    uint32_t size)
>  {
>  	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
> -	u32 end = min_t(u32, start + size, 256);
>  	u32 i;
>  
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		nv_crtc->lut.r[i] = r[i];
>  		nv_crtc->lut.g[i] = g[i];
>  		nv_crtc->lut.b[i] = b[i];
>  	}
>  
>  	nv50_crtc_lut_load(crtc);
> +
> +	return 0;
>  }
>  
>  static void
> diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
> index 6a41b4982647..80f06db1dd34 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -231,19 +231,21 @@ void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
>  	*blue = radeon_crtc->lut_b[regno] << 6;
>  }
>  
> -static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				  u16 *blue, uint32_t start, uint32_t size)
> +static int radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				 u16 *blue, uint32_t size)
>  {
>  	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		radeon_crtc->lut_r[i] = red[i] >> 6;
>  		radeon_crtc->lut_g[i] = green[i] >> 6;
>  		radeon_crtc->lut_b[i] = blue[i] >> 6;
>  	}
>  	radeon_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  static void radeon_crtc_destroy(struct drm_crtc *crtc)
> @@ -688,6 +690,7 @@ radeon_crtc_set_config(struct drm_mode_set *set)
>  	pm_runtime_put_autosuspend(dev->dev);
>  	return ret;
>  }
> +
>  static const struct drm_crtc_funcs radeon_crtc_funcs = {
>  	.cursor_set2 = radeon_crtc_cursor_set2,
>  	.cursor_move = radeon_crtc_cursor_move,
> diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> index 904d0754ad78..4e34f054da5c 100644
> --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> @@ -175,20 +175,22 @@ vc4_crtc_lut_load(struct drm_crtc *crtc)
>  		HVS_WRITE(SCALER_GAMDATA, vc4_crtc->lut_b[i]);
>  }
>  
> -static void
> +static int
>  vc4_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -		   uint32_t start, uint32_t size)
> +		   uint32_t size)
>  {
>  	struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
>  	u32 i;
>  
> -	for (i = start; i < start + size; i++) {
> +	for (i = 0; i < size; i++) {
>  		vc4_crtc->lut_r[i] = r[i] >> 8;
>  		vc4_crtc->lut_g[i] = g[i] >> 8;
>  		vc4_crtc->lut_b[i] = b[i] >> 8;
>  	}
>  
>  	vc4_crtc_lut_load(crtc);
> +
> +	return 0;
>  }
>  
>  static u32 vc4_get_fifo_full_level(u32 format)
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 55231cce73a0..8a69d4da40b5 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -1404,9 +1404,9 @@ static int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
>  	return 0;
>  }
>  
> -void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> -			   u16 *r, u16 *g, u16 *b,
> -			   uint32_t start, uint32_t size)
> +int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> +			  u16 *r, u16 *g, u16 *b,
> +			  uint32_t size)
>  {
>  	struct vmw_private *dev_priv = vmw_priv(crtc->dev);
>  	int i;
> @@ -1418,6 +1418,8 @@ void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
>  		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 1, g[i] >> 8);
>  		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 2, b[i] >> 8);
>  	}
> +
> +	return 0;
>  }
>  
>  int vmw_du_connector_dpms(struct drm_connector *connector, int mode)
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> index 57203212c501..ff4803c107bc 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> @@ -195,9 +195,9 @@ struct vmw_display_unit {
>  void vmw_du_cleanup(struct vmw_display_unit *du);
>  void vmw_du_crtc_save(struct drm_crtc *crtc);
>  void vmw_du_crtc_restore(struct drm_crtc *crtc);
> -void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> +int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
>  			   u16 *r, u16 *g, u16 *b,
> -			   uint32_t start, uint32_t size);
> +			   uint32_t size);
>  int vmw_du_crtc_cursor_set2(struct drm_crtc *crtc, struct drm_file *file_priv,
>  			    uint32_t handle, uint32_t width, uint32_t height,
>  			    int32_t hot_x, int32_t hot_y);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index d473dcc91f54..11896c84c4f8 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -147,9 +147,9 @@ void
>  __drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state);
>  void drm_atomic_helper_connector_destroy_state(struct drm_connector *connector,
>  					  struct drm_connector_state *state);
> -void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> -					u16 *red, u16 *green, u16 *blue,
> -					uint32_t start, uint32_t size);
> +int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> +				       u16 *red, u16 *green, u16 *blue,
> +				       uint32_t size);
>  
>  /**
>   * drm_atomic_crtc_for_each_plane - iterate over planes currently attached to CRTC
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index d1559cd04e3d..8622bb2f4f25 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -478,8 +478,8 @@ struct drm_crtc_funcs {
>  	 * going on, which should eventually be unified to just one set of
>  	 * hooks.
>  	 */
> -	void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -			  uint32_t start, uint32_t size);
> +	int (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> +			 uint32_t size);
>  
>  	/**
>  	 * @destroy:
> -- 
> 2.5.5
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* RE: [PATCH] drm/core: Change declaration for gamma_set.
  2016-06-06 16:00 ` [PATCH] " Daniel Vetter
@ 2016-06-06 16:01   ` Deucher, Alexander
  2016-06-06 16:11   ` Emil Velikov
  1 sibling, 0 replies; 13+ messages in thread
From: Deucher, Alexander @ 2016-06-06 16:01 UTC (permalink / raw)
  To: 'Daniel Vetter', Maarten Lankhorst
  Cc: intel-gfx@lists.freedesktop.org, Mathieu Larouche,
	dri-devel@lists.freedesktop.org, VMware Graphics, Ben Skeggs,
	Thierry Reding, Koenig, Christian

> -----Original Message-----
> From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel
> Vetter
> Sent: Monday, June 06, 2016 12:00 PM
> To: Maarten Lankhorst
> Cc: dri-devel@lists.freedesktop.org; intel-gfx@lists.freedesktop.org;
> Mathieu Larouche; VMware Graphics; Ben Skeggs; Deucher, Alexander;
> Thierry Reding; Koenig, Christian
> Subject: Re: [PATCH] drm/core: Change declaration for gamma_set.
> 
> On Mon, Jun 06, 2016 at 11:18:09AM +0200, Maarten Lankhorst wrote:
> > Change return value to int to propagate errors from gamma_set,
> > and remove start parameter. Updates always use the full size,
> > and some drivers even ignore the start parameter altogether.
> 
> Commit message should explain why we suddenly need to pass up the error
> code, too:
> 
> "This is needed for atomic drivers, where an atomic commit can fail with
> EAGAIN and should be restarted."
> 
> I'll add that when merging, but will wait for a bit more acks/r-b first.

Thanks.  I was just about to ask why this was necessary.   Patch is:
Acked-by: Alex Deucher <alexander.deucher@amd.com>

> -Daniel
> >
> > Cc: Alex Deucher <alexander.deucher@amd.com>
> > Cc: Christian König <christian.koenig@amd.com>
> > Cc: David Airlie <airlied@linux.ie>
> > Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
> > Cc: Ben Skeggs <bskeggs@redhat.com>
> > Cc: Eric Anholt <eric@anholt.net>
> > Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> > Cc: Mathieu Larouche <mathieu.larouche@matrox.com>
> > Cc: Thierry Reding <treding@nvidia.com>
> > Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> > ---
> >  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c  | 10 ++++++----
> >  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c  | 10 ++++++----
> >  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c   | 10 ++++++----
> >  drivers/gpu/drm/ast/ast_mode.c          | 10 ++++++----
> >  drivers/gpu/drm/cirrus/cirrus_mode.c    |  8 +++++---
> >  drivers/gpu/drm/drm_atomic_helper.c     | 13 ++++++-------
> >  drivers/gpu/drm/drm_crtc.c              |  2 +-
> >  drivers/gpu/drm/drm_fb_helper.c         |  4 +---
> >  drivers/gpu/drm/gma500/gma_display.c    |  9 +++++----
> >  drivers/gpu/drm/gma500/gma_display.h    |  4 ++--
> >  drivers/gpu/drm/mgag200/mgag200_mode.c  |  9 +++++----
> >  drivers/gpu/drm/nouveau/dispnv04/crtc.c | 12 +++++++-----
> >  drivers/gpu/drm/nouveau/nv50_display.c  |  9 +++++----
> >  drivers/gpu/drm/radeon/radeon_display.c | 11 +++++++----
> >  drivers/gpu/drm/vc4/vc4_crtc.c          |  8 +++++---
> >  drivers/gpu/drm/vmwgfx/vmwgfx_kms.c     |  8 +++++---
> >  drivers/gpu/drm/vmwgfx/vmwgfx_kms.h     |  4 ++--
> >  include/drm/drm_atomic_helper.h         |  6 +++---
> >  include/drm/drm_crtc.h                  |  4 ++--
> >  19 files changed, 85 insertions(+), 66 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > index 8227344d2ff6..16de862ea51f 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> > @@ -2667,19 +2667,21 @@ static void dce_v10_0_cursor_reset(struct
> drm_crtc *crtc)
> >  	}
> >  }
> >
> > -static void dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red,
> u16 *green,
> > -				    u16 *blue, uint32_t start, uint32_t size)
> > +static int dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > +				    u16 *blue, uint32_t size)
> >  {
> >  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> > -	int end = (start + size > 256) ? 256 : start + size, i;
> > +	int i;
> >
> >  	/* userspace palettes are always correct as is */
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
> >  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
> >  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
> >  	}
> >  	dce_v10_0_crtc_load_lut(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  static void dce_v10_0_crtc_destroy(struct drm_crtc *crtc)
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > index af26ec0bc59d..6e0ae8e2e65c 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> > @@ -2678,19 +2678,21 @@ static void dce_v11_0_cursor_reset(struct
> drm_crtc *crtc)
> >  	}
> >  }
> >
> > -static void dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red,
> u16 *green,
> > -				    u16 *blue, uint32_t start, uint32_t size)
> > +static int dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > +				    u16 *blue, uint32_t size)
> >  {
> >  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> > -	int end = (start + size > 256) ? 256 : start + size, i;
> > +	int i;
> >
> >  	/* userspace palettes are always correct as is */
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
> >  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
> >  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
> >  	}
> >  	dce_v11_0_crtc_load_lut(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  static void dce_v11_0_crtc_destroy(struct drm_crtc *crtc)
> > diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > index 3fb65e41a6ef..7b5fae4c74f1 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> > @@ -2574,19 +2574,21 @@ static void dce_v8_0_cursor_reset(struct
> drm_crtc *crtc)
> >  	}
> >  }
> >
> > -static void dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > -				    u16 *blue, uint32_t start, uint32_t size)
> > +static int dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > +				   u16 *blue, uint32_t size)
> >  {
> >  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> > -	int end = (start + size > 256) ? 256 : start + size, i;
> > +	int i;
> >
> >  	/* userspace palettes are always correct as is */
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
> >  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
> >  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
> >  	}
> >  	dce_v8_0_crtc_load_lut(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  static void dce_v8_0_crtc_destroy(struct drm_crtc *crtc)
> > diff --git a/drivers/gpu/drm/ast/ast_mode.c
> b/drivers/gpu/drm/ast/ast_mode.c
> > index c337922606e3..5957c3e659fe 100644
> > --- a/drivers/gpu/drm/ast/ast_mode.c
> > +++ b/drivers/gpu/drm/ast/ast_mode.c
> > @@ -624,19 +624,21 @@ static void ast_crtc_reset(struct drm_crtc *crtc)
> >
> >  }
> >
> > -static void ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > -				 u16 *blue, uint32_t start, uint32_t size)
> > +static int ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > +			      u16 *blue, uint32_t size)
> >  {
> >  	struct ast_crtc *ast_crtc = to_ast_crtc(crtc);
> > -	int end = (start + size > 256) ? 256 : start + size, i;
> > +	int i;
> >
> >  	/* userspace palettes are always correct as is */
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		ast_crtc->lut_r[i] = red[i] >> 8;
> >  		ast_crtc->lut_g[i] = green[i] >> 8;
> >  		ast_crtc->lut_b[i] = blue[i] >> 8;
> >  	}
> >  	ast_crtc_load_lut(crtc);
> > +
> > +	return 0;
> >  }
> >
> >
> > diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c
> b/drivers/gpu/drm/cirrus/cirrus_mode.c
> > index 0b1a411cb89e..17c915d9a03e 100644
> > --- a/drivers/gpu/drm/cirrus/cirrus_mode.c
> > +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
> > @@ -325,18 +325,20 @@ static void cirrus_crtc_commit(struct drm_crtc
> *crtc)
> >   * use this for 8-bit mode so can't perform smooth fades on deeper
> modes,
> >   * but it's a requirement that we provide the function
> >   */
> > -static void cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > -				  u16 *blue, uint32_t start, uint32_t size)
> > +static int cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > +				 u16 *blue, uint32_t size)
> >  {
> >  	struct cirrus_crtc *cirrus_crtc = to_cirrus_crtc(crtc);
> >  	int i;
> >
> > -	for (i = 0; i < CIRRUS_LUT_SIZE; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		cirrus_crtc->lut_r[i] = red[i];
> >  		cirrus_crtc->lut_g[i] = green[i];
> >  		cirrus_crtc->lut_b[i] = blue[i];
> >  	}
> >  	cirrus_crtc_load_lut(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  /* Simple cleanup function */
> > diff --git a/drivers/gpu/drm/drm_atomic_helper.c
> b/drivers/gpu/drm/drm_atomic_helper.c
> > index 939df900dcaa..266c11018a19 100644
> > --- a/drivers/gpu/drm/drm_atomic_helper.c
> > +++ b/drivers/gpu/drm/drm_atomic_helper.c
> > @@ -2933,16 +2933,15 @@
> EXPORT_SYMBOL(drm_atomic_helper_connector_destroy_state);
> >   * @red: red correction table
> >   * @green: green correction table
> >   * @blue: green correction table
> > - * @start:
> >   * @size: size of the tables
> >   *
> >   * Implements support for legacy gamma correction table for drivers
> >   * that support color management through the
> DEGAMMA_LUT/GAMMA_LUT
> >   * properties.
> >   */
> > -void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> > -					u16 *red, u16 *green, u16 *blue,
> > -					uint32_t start, uint32_t size)
> > +int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> > +				       u16 *red, u16 *green, u16 *blue,
> > +				       uint32_t size)
> >  {
> >  	struct drm_device *dev = crtc->dev;
> >  	struct drm_mode_config *config = &dev->mode_config;
> > @@ -2954,7 +2953,7 @@ void
> drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> >
> >  	state = drm_atomic_state_alloc(crtc->dev);
> >  	if (!state)
> > -		return;
> > +		return -ENOMEM;
> >
> >  	blob = drm_property_create_blob(dev,
> >  					sizeof(struct drm_color_lut) * size,
> > @@ -3005,7 +3004,7 @@ retry:
> >
> >  	drm_property_unreference_blob(blob);
> >
> > -	return;
> > +	return 0;
> >  fail:
> >  	if (ret == -EDEADLK)
> >  		goto backoff;
> > @@ -3013,7 +3012,7 @@ fail:
> >  	drm_atomic_state_free(state);
> >  	drm_property_unreference_blob(blob);
> >
> > -	return;
> > +	return ret;
> >  backoff:
> >  	drm_atomic_state_clear(state);
> >  	drm_atomic_legacy_backoff(state);
> > diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> > index d2a6d958ca76..4d61ceae789c 100644
> > --- a/drivers/gpu/drm/drm_crtc.c
> > +++ b/drivers/gpu/drm/drm_crtc.c
> > @@ -5215,7 +5215,7 @@ int drm_mode_gamma_set_ioctl(struct
> drm_device *dev,
> >  		goto out;
> >  	}
> >
> > -	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc-
> >gamma_size);
> > +	ret = crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc-
> >gamma_size);
> >
> >  out:
> >  	drm_modeset_unlock_all(dev);
> > diff --git a/drivers/gpu/drm/drm_fb_helper.c
> b/drivers/gpu/drm/drm_fb_helper.c
> > index 7590df5e2e72..4accf6039058 100644
> > --- a/drivers/gpu/drm/drm_fb_helper.c
> > +++ b/drivers/gpu/drm/drm_fb_helper.c
> > @@ -227,7 +227,7 @@ static void
> drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
> >  	g_base = r_base + crtc->gamma_size;
> >  	b_base = g_base + crtc->gamma_size;
> >
> > -	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc-
> >gamma_size);
> > +	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc-
> >gamma_size);
> >  }
> >
> >  /**
> > @@ -1076,8 +1076,6 @@ static int setcolreg(struct drm_crtc *crtc, u16 red,
> u16 green,
> >  	WARN_ON(fb->bits_per_pixel != 8);
> >
> >  	fb_helper->funcs->gamma_set(crtc, red, green, blue, regno);
> > -
> > -	return 0;
> >  }
> >
> >  /**
> > diff --git a/drivers/gpu/drm/gma500/gma_display.c
> b/drivers/gpu/drm/gma500/gma_display.c
> > index c95406e6f44d..5b636bf0b467 100644
> > --- a/drivers/gpu/drm/gma500/gma_display.c
> > +++ b/drivers/gpu/drm/gma500/gma_display.c
> > @@ -175,20 +175,21 @@ void gma_crtc_load_lut(struct drm_crtc *crtc)
> >  	}
> >  }
> >
> > -void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> u16 *blue,
> > -			u32 start, u32 size)
> > +int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> u16 *blue,
> > +		       u32 size)
> >  {
> >  	struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
> >  	int i;
> > -	int end = (start + size > 256) ? 256 : start + size;
> >
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		gma_crtc->lut_r[i] = red[i] >> 8;
> >  		gma_crtc->lut_g[i] = green[i] >> 8;
> >  		gma_crtc->lut_b[i] = blue[i] >> 8;
> >  	}
> >
> >  	gma_crtc_load_lut(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  /**
> > diff --git a/drivers/gpu/drm/gma500/gma_display.h
> b/drivers/gpu/drm/gma500/gma_display.h
> > index b2491c65f053..e72dd08b701b 100644
> > --- a/drivers/gpu/drm/gma500/gma_display.h
> > +++ b/drivers/gpu/drm/gma500/gma_display.h
> > @@ -72,8 +72,8 @@ extern int gma_crtc_cursor_set(struct drm_crtc *crtc,
> >  			       uint32_t width, uint32_t height);
> >  extern int gma_crtc_cursor_move(struct drm_crtc *crtc, int x, int y);
> >  extern void gma_crtc_load_lut(struct drm_crtc *crtc);
> > -extern void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > -			       u16 *blue, u32 start, u32 size);
> > +extern int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > +			      u16 *blue, u32 size);
> >  extern void gma_crtc_dpms(struct drm_crtc *crtc, int mode);
> >  extern void gma_crtc_prepare(struct drm_crtc *crtc);
> >  extern void gma_crtc_commit(struct drm_crtc *crtc);
> > diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c
> b/drivers/gpu/drm/mgag200/mgag200_mode.c
> > index 14e64e08909e..f6d5892d03f1 100644
> > --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
> > +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
> > @@ -1344,19 +1344,20 @@ static void mga_crtc_commit(struct drm_crtc
> *crtc)
> >   * use this for 8-bit mode so can't perform smooth fades on deeper
> modes,
> >   * but it's a requirement that we provide the function
> >   */
> > -static void mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > -				  u16 *blue, uint32_t start, uint32_t size)
> > +static int mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > +			      u16 *blue, uint32_t size)
> >  {
> >  	struct mga_crtc *mga_crtc = to_mga_crtc(crtc);
> > -	int end = (start + size > MGAG200_LUT_SIZE) ? MGAG200_LUT_SIZE :
> start + size;
> >  	int i;
> >
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		mga_crtc->lut_r[i] = red[i] >> 8;
> >  		mga_crtc->lut_g[i] = green[i] >> 8;
> >  		mga_crtc->lut_b[i] = blue[i] >> 8;
> >  	}
> >  	mga_crtc_load_lut(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  /* Simple cleanup function */
> > diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> > index 6f318c54da33..0cb7a18cde26 100644
> > --- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> > +++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> > @@ -785,14 +785,14 @@ nv_crtc_disable(struct drm_crtc *crtc)
> >  	nouveau_bo_ref(NULL, &disp->image[nv_crtc->index]);
> >  }
> >
> > -static void
> > -nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t
> start,
> > +static int
> > +nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> >  		  uint32_t size)
> >  {
> > -	int end = (start + size > 256) ? 256 : start + size, i;
> >  	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
> > +	int i;
> >
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		nv_crtc->lut.r[i] = r[i];
> >  		nv_crtc->lut.g[i] = g[i];
> >  		nv_crtc->lut.b[i] = b[i];
> > @@ -805,10 +805,12 @@ nv_crtc_gamma_set(struct drm_crtc *crtc, u16
> *r, u16 *g, u16 *b, uint32_t start,
> >  	 */
> >  	if (!nv_crtc->base.primary->fb) {
> >  		nv_crtc->lut.depth = 0;
> > -		return;
> > +		return 0;
> >  	}
> >
> >  	nv_crtc_gamma_load(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  static int
> > diff --git a/drivers/gpu/drm/nouveau/nv50_display.c
> b/drivers/gpu/drm/nouveau/nv50_display.c
> > index 3ffc2b0057bf..7a7788212df7 100644
> > --- a/drivers/gpu/drm/nouveau/nv50_display.c
> > +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> > @@ -1346,21 +1346,22 @@ nv50_crtc_cursor_move(struct drm_crtc *crtc,
> int x, int y)
> >  	return 0;
> >  }
> >
> > -static void
> > +static int
> >  nv50_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> > -		    uint32_t start, uint32_t size)
> > +		    uint32_t size)
> >  {
> >  	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
> > -	u32 end = min_t(u32, start + size, 256);
> >  	u32 i;
> >
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		nv_crtc->lut.r[i] = r[i];
> >  		nv_crtc->lut.g[i] = g[i];
> >  		nv_crtc->lut.b[i] = b[i];
> >  	}
> >
> >  	nv50_crtc_lut_load(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  static void
> > diff --git a/drivers/gpu/drm/radeon/radeon_display.c
> b/drivers/gpu/drm/radeon/radeon_display.c
> > index 6a41b4982647..80f06db1dd34 100644
> > --- a/drivers/gpu/drm/radeon/radeon_display.c
> > +++ b/drivers/gpu/drm/radeon/radeon_display.c
> > @@ -231,19 +231,21 @@ void radeon_crtc_fb_gamma_get(struct drm_crtc
> *crtc, u16 *red, u16 *green,
> >  	*blue = radeon_crtc->lut_b[regno] << 6;
> >  }
> >
> > -static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > -				  u16 *blue, uint32_t start, uint32_t size)
> > +static int radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16
> *green,
> > +				 u16 *blue, uint32_t size)
> >  {
> >  	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
> > -	int end = (start + size > 256) ? 256 : start + size, i;
> > +	int i;
> >
> >  	/* userspace palettes are always correct as is */
> > -	for (i = start; i < end; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		radeon_crtc->lut_r[i] = red[i] >> 6;
> >  		radeon_crtc->lut_g[i] = green[i] >> 6;
> >  		radeon_crtc->lut_b[i] = blue[i] >> 6;
> >  	}
> >  	radeon_crtc_load_lut(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  static void radeon_crtc_destroy(struct drm_crtc *crtc)
> > @@ -688,6 +690,7 @@ radeon_crtc_set_config(struct drm_mode_set
> *set)
> >  	pm_runtime_put_autosuspend(dev->dev);
> >  	return ret;
> >  }
> > +
> >  static const struct drm_crtc_funcs radeon_crtc_funcs = {
> >  	.cursor_set2 = radeon_crtc_cursor_set2,
> >  	.cursor_move = radeon_crtc_cursor_move,
> > diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c
> b/drivers/gpu/drm/vc4/vc4_crtc.c
> > index 904d0754ad78..4e34f054da5c 100644
> > --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> > +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> > @@ -175,20 +175,22 @@ vc4_crtc_lut_load(struct drm_crtc *crtc)
> >  		HVS_WRITE(SCALER_GAMDATA, vc4_crtc->lut_b[i]);
> >  }
> >
> > -static void
> > +static int
> >  vc4_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> > -		   uint32_t start, uint32_t size)
> > +		   uint32_t size)
> >  {
> >  	struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
> >  	u32 i;
> >
> > -	for (i = start; i < start + size; i++) {
> > +	for (i = 0; i < size; i++) {
> >  		vc4_crtc->lut_r[i] = r[i] >> 8;
> >  		vc4_crtc->lut_g[i] = g[i] >> 8;
> >  		vc4_crtc->lut_b[i] = b[i] >> 8;
> >  	}
> >
> >  	vc4_crtc_lut_load(crtc);
> > +
> > +	return 0;
> >  }
> >
> >  static u32 vc4_get_fifo_full_level(u32 format)
> > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> > index 55231cce73a0..8a69d4da40b5 100644
> > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> > @@ -1404,9 +1404,9 @@ static int vmw_du_update_layout(struct
> vmw_private *dev_priv, unsigned num,
> >  	return 0;
> >  }
> >
> > -void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> > -			   u16 *r, u16 *g, u16 *b,
> > -			   uint32_t start, uint32_t size)
> > +int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> > +			  u16 *r, u16 *g, u16 *b,
> > +			  uint32_t size)
> >  {
> >  	struct vmw_private *dev_priv = vmw_priv(crtc->dev);
> >  	int i;
> > @@ -1418,6 +1418,8 @@ void vmw_du_crtc_gamma_set(struct drm_crtc
> *crtc,
> >  		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 1, g[i] >>
> 8);
> >  		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 2, b[i]
> >> 8);
> >  	}
> > +
> > +	return 0;
> >  }
> >
> >  int vmw_du_connector_dpms(struct drm_connector *connector, int
> mode)
> > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > index 57203212c501..ff4803c107bc 100644
> > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> > @@ -195,9 +195,9 @@ struct vmw_display_unit {
> >  void vmw_du_cleanup(struct vmw_display_unit *du);
> >  void vmw_du_crtc_save(struct drm_crtc *crtc);
> >  void vmw_du_crtc_restore(struct drm_crtc *crtc);
> > -void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> > +int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> >  			   u16 *r, u16 *g, u16 *b,
> > -			   uint32_t start, uint32_t size);
> > +			   uint32_t size);
> >  int vmw_du_crtc_cursor_set2(struct drm_crtc *crtc, struct drm_file
> *file_priv,
> >  			    uint32_t handle, uint32_t width, uint32_t height,
> >  			    int32_t hot_x, int32_t hot_y);
> > diff --git a/include/drm/drm_atomic_helper.h
> b/include/drm/drm_atomic_helper.h
> > index d473dcc91f54..11896c84c4f8 100644
> > --- a/include/drm/drm_atomic_helper.h
> > +++ b/include/drm/drm_atomic_helper.h
> > @@ -147,9 +147,9 @@ void
> >  __drm_atomic_helper_connector_destroy_state(struct
> drm_connector_state *state);
> >  void drm_atomic_helper_connector_destroy_state(struct drm_connector
> *connector,
> >  					  struct drm_connector_state *state);
> > -void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> > -					u16 *red, u16 *green, u16 *blue,
> > -					uint32_t start, uint32_t size);
> > +int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> > +				       u16 *red, u16 *green, u16 *blue,
> > +				       uint32_t size);
> >
> >  /**
> >   * drm_atomic_crtc_for_each_plane - iterate over planes currently
> attached to CRTC
> > diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> > index d1559cd04e3d..8622bb2f4f25 100644
> > --- a/include/drm/drm_crtc.h
> > +++ b/include/drm/drm_crtc.h
> > @@ -478,8 +478,8 @@ struct drm_crtc_funcs {
> >  	 * going on, which should eventually be unified to just one set of
> >  	 * hooks.
> >  	 */
> > -	void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> > -			  uint32_t start, uint32_t size);
> > +	int (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> > +			 uint32_t size);
> >
> >  	/**
> >  	 * @destroy:
> > --
> > 2.5.5
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm/core: Change declaration for gamma_set.
  2016-06-06 16:00 ` [PATCH] " Daniel Vetter
  2016-06-06 16:01   ` Deucher, Alexander
@ 2016-06-06 16:11   ` Emil Velikov
  2016-06-06 16:15     ` Maarten Lankhorst
  1 sibling, 1 reply; 13+ messages in thread
From: Emil Velikov @ 2016-06-06 16:11 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: intel-gfx@lists.freedesktop.org, Mathieu Larouche, ML dri-devel,
	VMware Graphics, Ben Skeggs, Alex Deucher, Thierry Reding,
	Christian König

On 6 June 2016 at 17:00, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Mon, Jun 06, 2016 at 11:18:09AM +0200, Maarten Lankhorst wrote:
>> Change return value to int to propagate errors from gamma_set,
>> and remove start parameter. Updates always use the full size,
>> and some drivers even ignore the start parameter altogether.
>
> Commit message should explain why we suddenly need to pass up the error
> code, too:
>
> "This is needed for atomic drivers, where an atomic commit can fail with
> EAGAIN and should be restarted."
>
Since that can happen only on the DRM core side, shouldn't one refrain
from adding the "always returns 0" return status for the drivers'
.gamma_set hook ? Or there's is something in the works that would lead
to drivers being able to return a non 0 value ?

Thanks
Emil
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm/core: Change declaration for gamma_set.
  2016-06-06 16:11   ` Emil Velikov
@ 2016-06-06 16:15     ` Maarten Lankhorst
  2016-06-06 16:25       ` Emil Velikov
  0 siblings, 1 reply; 13+ messages in thread
From: Maarten Lankhorst @ 2016-06-06 16:15 UTC (permalink / raw)
  To: Emil Velikov, Daniel Vetter
  Cc: intel-gfx@lists.freedesktop.org, Mathieu Larouche, ML dri-devel,
	VMware Graphics, Ben Skeggs, Alex Deucher, Thierry Reding,
	Christian König

Op 06-06-16 om 18:11 schreef Emil Velikov:
> On 6 June 2016 at 17:00, Daniel Vetter <daniel@ffwll.ch> wrote:
>> On Mon, Jun 06, 2016 at 11:18:09AM +0200, Maarten Lankhorst wrote:
>>> Change return value to int to propagate errors from gamma_set,
>>> and remove start parameter. Updates always use the full size,
>>> and some drivers even ignore the start parameter altogether.
>> Commit message should explain why we suddenly need to pass up the error
>> code, too:
>>
>> "This is needed for atomic drivers, where an atomic commit can fail with
>> EAGAIN and should be restarted."
>>
> Since that can happen only on the DRM core side, shouldn't one refrain
> from adding the "always returns 0" return status for the drivers'
> .gamma_set hook ? Or there's is something in the works that would lead
> to drivers being able to return a non 0 value ?
Look at drm_atomic_helper.c :-)

Being implemented as an atomic update means any errno can be returned.

~Maarten
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm/core: Change declaration for gamma_set.
  2016-06-06  9:18 [PATCH] drm/core: Change declaration for gamma_set Maarten Lankhorst
  2016-06-06  9:28 ` ✗ Ro.CI.BAT: failure for " Patchwork
  2016-06-06 16:00 ` [PATCH] " Daniel Vetter
@ 2016-06-06 16:17 ` Emil Velikov
  2016-06-06 16:32   ` Maarten Lankhorst
  2016-06-07 10:49 ` [PATCH v2] " Maarten Lankhorst
  3 siblings, 1 reply; 13+ messages in thread
From: Emil Velikov @ 2016-06-06 16:17 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: intel-gfx@lists.freedesktop.org, Mathieu Larouche, ML dri-devel,
	VMware Graphics, Ben Skeggs, Alex Deucher, Thierry Reding,
	Christian König

Hi Maarten,

On 6 June 2016 at 10:18, Maarten Lankhorst
<maarten.lankhorst@linux.intel.com> wrote:

> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c

> @@ -1076,8 +1076,6 @@ static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,
>         WARN_ON(fb->bits_per_pixel != 8);
>
>         fb_helper->funcs->gamma_set(crtc, red, green, blue, regno);
> -
> -       return 0;
>  }
This seems like unrelated change for which the compiler should give
you a nice big warning :-)

Thanks
Emil
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm/core: Change declaration for gamma_set.
  2016-06-06 16:15     ` Maarten Lankhorst
@ 2016-06-06 16:25       ` Emil Velikov
  2016-06-06 16:41         ` Maarten Lankhorst
  0 siblings, 1 reply; 13+ messages in thread
From: Emil Velikov @ 2016-06-06 16:25 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: intel-gfx@lists.freedesktop.org, Mathieu Larouche, ML dri-devel,
	VMware Graphics, Ben Skeggs, Alex Deucher, Thierry Reding,
	Christian König

On 6 June 2016 at 17:15, Maarten Lankhorst
<maarten.lankhorst@linux.intel.com> wrote:
> Op 06-06-16 om 18:11 schreef Emil Velikov:
>> On 6 June 2016 at 17:00, Daniel Vetter <daniel@ffwll.ch> wrote:
>>> On Mon, Jun 06, 2016 at 11:18:09AM +0200, Maarten Lankhorst wrote:
>>>> Change return value to int to propagate errors from gamma_set,
>>>> and remove start parameter. Updates always use the full size,
>>>> and some drivers even ignore the start parameter altogether.
>>> Commit message should explain why we suddenly need to pass up the error
>>> code, too:
>>>
>>> "This is needed for atomic drivers, where an atomic commit can fail with
>>> EAGAIN and should be restarted."
>>>
>> Since that can happen only on the DRM core side, shouldn't one refrain
>> from adding the "always returns 0" return status for the drivers'
>> .gamma_set hook ? Or there's is something in the works that would lead
>> to drivers being able to return a non 0 value ?
> Look at drm_atomic_helper.c :-)
>
> Being implemented as an atomic update means any errno can be returned.
>
Ouch. Looks like only the i915 driver uses the helper while I was
looking at other ATOMIC drivers. So things short circuited on my
noggin'. I guess it's up-to the respective drivers to be updated and
use the drm_atomic_helper_legacy_gamma_set helper.

Thanks for sticking with my silly question :-)
Emil
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm/core: Change declaration for gamma_set.
  2016-06-06 16:17 ` Emil Velikov
@ 2016-06-06 16:32   ` Maarten Lankhorst
  0 siblings, 0 replies; 13+ messages in thread
From: Maarten Lankhorst @ 2016-06-06 16:32 UTC (permalink / raw)
  To: Emil Velikov
  Cc: intel-gfx@lists.freedesktop.org, Mathieu Larouche, ML dri-devel,
	VMware Graphics, Ben Skeggs, Alex Deucher, Thierry Reding,
	Christian König

Op 06-06-16 om 18:17 schreef Emil Velikov:
> Hi Maarten,
>
> On 6 June 2016 at 10:18, Maarten Lankhorst
> <maarten.lankhorst@linux.intel.com> wrote:
>
>> --- a/drivers/gpu/drm/drm_fb_helper.c
>> +++ b/drivers/gpu/drm/drm_fb_helper.c
>> @@ -1076,8 +1076,6 @@ static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,
>>         WARN_ON(fb->bits_per_pixel != 8);
>>
>>         fb_helper->funcs->gamma_set(crtc, red, green, blue, regno);
>> -
>> -       return 0;
>>  }
> This seems like unrelated change for which the compiler should give
> you a nice big warning :-)
>
> Thanks
> Emil

Oops, was a leftover. Ignore this hunk.

I originally added a return, but fb_helper is left unchanged for now.

~Maarten

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] drm/core: Change declaration for gamma_set.
  2016-06-06 16:25       ` Emil Velikov
@ 2016-06-06 16:41         ` Maarten Lankhorst
  0 siblings, 0 replies; 13+ messages in thread
From: Maarten Lankhorst @ 2016-06-06 16:41 UTC (permalink / raw)
  To: Emil Velikov
  Cc: intel-gfx@lists.freedesktop.org, Mathieu Larouche, ML dri-devel,
	VMware Graphics, Ben Skeggs, Alex Deucher, Thierry Reding,
	Christian König

Op 06-06-16 om 18:25 schreef Emil Velikov:
> On 6 June 2016 at 17:15, Maarten Lankhorst
> <maarten.lankhorst@linux.intel.com> wrote:
>> Op 06-06-16 om 18:11 schreef Emil Velikov:
>>> On 6 June 2016 at 17:00, Daniel Vetter <daniel@ffwll.ch> wrote:
>>>> On Mon, Jun 06, 2016 at 11:18:09AM +0200, Maarten Lankhorst wrote:
>>>>> Change return value to int to propagate errors from gamma_set,
>>>>> and remove start parameter. Updates always use the full size,
>>>>> and some drivers even ignore the start parameter altogether.
>>>> Commit message should explain why we suddenly need to pass up the error
>>>> code, too:
>>>>
>>>> "This is needed for atomic drivers, where an atomic commit can fail with
>>>> EAGAIN and should be restarted."
>>>>
>>> Since that can happen only on the DRM core side, shouldn't one refrain
>>> from adding the "always returns 0" return status for the drivers'
>>> .gamma_set hook ? Or there's is something in the works that would lead
>>> to drivers being able to return a non 0 value ?
>> Look at drm_atomic_helper.c :-)
>>
>> Being implemented as an atomic update means any errno can be returned.
>>
> Ouch. Looks like only the i915 driver uses the helper while I was
> looking at other ATOMIC drivers. So things short circuited on my
> noggin'. I guess it's up-to the respective drivers to be updated and
> use the drm_atomic_helper_legacy_gamma_set helper.
>
> Thanks for sticking with my silly question :-)
Feel free to convert some drivers over, would be nice to have more widespread support for changing gamma through atomic properties. :-)
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH v2] drm/core: Change declaration for gamma_set.
  2016-06-06  9:18 [PATCH] drm/core: Change declaration for gamma_set Maarten Lankhorst
                   ` (2 preceding siblings ...)
  2016-06-06 16:17 ` Emil Velikov
@ 2016-06-07 10:49 ` Maarten Lankhorst
  2016-06-07 10:55   ` Patrik Jakobsson
  2016-06-07 22:23   ` Sinclair Yeh
  3 siblings, 2 replies; 13+ messages in thread
From: Maarten Lankhorst @ 2016-06-07 10:49 UTC (permalink / raw)
  To: dri-devel
  Cc: David Airlie, intel-gfx, Mathieu Larouche, VMware Graphics,
	Ben Skeggs, Alex Deucher, Thierry Reding, Christian König

Change return value to int to propagate errors from gamma_set,
and remove start parameter. Updates always use the full size,
and some drivers even ignore the start parameter altogether.

This is needed for atomic drivers, where an atomic commit can
fail with -EINTR or -ENOMEM and should be restarted.

Changes since v1:
- Fix compiler warning. (Emil)
- Fix commit message (Daniel)

Cc: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Cc: Christian König <christian.koenig@amd.com>
Cc: David Airlie <airlied@linux.ie>
Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
Cc: Ben Skeggs <bskeggs@redhat.com>
Cc: Eric Anholt <eric@anholt.net>
Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
Cc: Mathieu Larouche <mathieu.larouche@matrox.com>
Cc: Thierry Reding <treding@nvidia.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/amd/amdgpu/dce_v10_0.c  | 10 ++++++----
 drivers/gpu/drm/amd/amdgpu/dce_v11_0.c  | 10 ++++++----
 drivers/gpu/drm/amd/amdgpu/dce_v8_0.c   | 10 ++++++----
 drivers/gpu/drm/ast/ast_mode.c          | 10 ++++++----
 drivers/gpu/drm/cirrus/cirrus_mode.c    |  8 +++++---
 drivers/gpu/drm/drm_atomic_helper.c     | 13 ++++++-------
 drivers/gpu/drm/drm_crtc.c              |  2 +-
 drivers/gpu/drm/drm_fb_helper.c         |  2 +-
 drivers/gpu/drm/gma500/gma_display.c    |  9 +++++----
 drivers/gpu/drm/gma500/gma_display.h    |  4 ++--
 drivers/gpu/drm/mgag200/mgag200_mode.c  |  9 +++++----
 drivers/gpu/drm/nouveau/dispnv04/crtc.c | 12 +++++++-----
 drivers/gpu/drm/nouveau/nv50_display.c  |  9 +++++----
 drivers/gpu/drm/radeon/radeon_display.c | 11 +++++++----
 drivers/gpu/drm/vc4/vc4_crtc.c          |  8 +++++---
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c     |  8 +++++---
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.h     |  4 ++--
 include/drm/drm_atomic_helper.h         |  6 +++---
 include/drm/drm_crtc.h                  |  4 ++--
 19 files changed, 85 insertions(+), 64 deletions(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
index 7e57447bf5f4..112e358f0f9b 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
@@ -2667,19 +2667,21 @@ static void dce_v10_0_cursor_reset(struct drm_crtc *crtc)
 	}
 }
 
-static void dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				    u16 *blue, uint32_t start, uint32_t size)
+static int dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				    u16 *blue, uint32_t size)
 {
 	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		amdgpu_crtc->lut_r[i] = red[i] >> 6;
 		amdgpu_crtc->lut_g[i] = green[i] >> 6;
 		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
 	}
 	dce_v10_0_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 static void dce_v10_0_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
index da101551960b..b522fa2435a8 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
@@ -2678,19 +2678,21 @@ static void dce_v11_0_cursor_reset(struct drm_crtc *crtc)
 	}
 }
 
-static void dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				    u16 *blue, uint32_t start, uint32_t size)
+static int dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				    u16 *blue, uint32_t size)
 {
 	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		amdgpu_crtc->lut_r[i] = red[i] >> 6;
 		amdgpu_crtc->lut_g[i] = green[i] >> 6;
 		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
 	}
 	dce_v11_0_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 static void dce_v11_0_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
index 41d9bc5f9c0e..b50ed72feedb 100644
--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
@@ -2574,19 +2574,21 @@ static void dce_v8_0_cursor_reset(struct drm_crtc *crtc)
 	}
 }
 
-static void dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				    u16 *blue, uint32_t start, uint32_t size)
+static int dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				   u16 *blue, uint32_t size)
 {
 	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		amdgpu_crtc->lut_r[i] = red[i] >> 6;
 		amdgpu_crtc->lut_g[i] = green[i] >> 6;
 		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
 	}
 	dce_v8_0_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 static void dce_v8_0_crtc_destroy(struct drm_crtc *crtc)
diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
index c337922606e3..5957c3e659fe 100644
--- a/drivers/gpu/drm/ast/ast_mode.c
+++ b/drivers/gpu/drm/ast/ast_mode.c
@@ -624,19 +624,21 @@ static void ast_crtc_reset(struct drm_crtc *crtc)
 
 }
 
-static void ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				 u16 *blue, uint32_t start, uint32_t size)
+static int ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+			      u16 *blue, uint32_t size)
 {
 	struct ast_crtc *ast_crtc = to_ast_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		ast_crtc->lut_r[i] = red[i] >> 8;
 		ast_crtc->lut_g[i] = green[i] >> 8;
 		ast_crtc->lut_b[i] = blue[i] >> 8;
 	}
 	ast_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 
diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
index 0b1a411cb89e..17c915d9a03e 100644
--- a/drivers/gpu/drm/cirrus/cirrus_mode.c
+++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
@@ -325,18 +325,20 @@ static void cirrus_crtc_commit(struct drm_crtc *crtc)
  * use this for 8-bit mode so can't perform smooth fades on deeper modes,
  * but it's a requirement that we provide the function
  */
-static void cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				  u16 *blue, uint32_t start, uint32_t size)
+static int cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				 u16 *blue, uint32_t size)
 {
 	struct cirrus_crtc *cirrus_crtc = to_cirrus_crtc(crtc);
 	int i;
 
-	for (i = 0; i < CIRRUS_LUT_SIZE; i++) {
+	for (i = 0; i < size; i++) {
 		cirrus_crtc->lut_r[i] = red[i];
 		cirrus_crtc->lut_g[i] = green[i];
 		cirrus_crtc->lut_b[i] = blue[i];
 	}
 	cirrus_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 /* Simple cleanup function */
diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
index 4342f3dfc0e1..191d84f12e67 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -2920,16 +2920,15 @@ EXPORT_SYMBOL(drm_atomic_helper_connector_destroy_state);
  * @red: red correction table
  * @green: green correction table
  * @blue: green correction table
- * @start: first entry, must always be 0
  * @size: size of the tables
  *
  * Implements support for legacy gamma correction table for drivers
  * that support color management through the DEGAMMA_LUT/GAMMA_LUT
  * properties.
  */
-void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
-					u16 *red, u16 *green, u16 *blue,
-					uint32_t start, uint32_t size)
+int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
+				       u16 *red, u16 *green, u16 *blue,
+				       uint32_t size)
 {
 	struct drm_device *dev = crtc->dev;
 	struct drm_mode_config *config = &dev->mode_config;
@@ -2941,7 +2940,7 @@ void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
 
 	state = drm_atomic_state_alloc(crtc->dev);
 	if (!state)
-		return;
+		return -ENOMEM;
 
 	blob = drm_property_create_blob(dev,
 					sizeof(struct drm_color_lut) * size,
@@ -2992,7 +2991,7 @@ retry:
 
 	drm_property_unreference_blob(blob);
 
-	return;
+	return 0;
 fail:
 	if (ret == -EDEADLK)
 		goto backoff;
@@ -3000,7 +2999,7 @@ fail:
 	drm_atomic_state_free(state);
 	drm_property_unreference_blob(blob);
 
-	return;
+	return ret;
 backoff:
 	drm_atomic_state_clear(state);
 	drm_atomic_legacy_backoff(state);
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index a9cabef98f6b..da2f28ea5fad 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -5171,7 +5171,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
 		goto out;
 	}
 
-	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
+	ret = crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
 
 out:
 	drm_modeset_unlock_all(dev);
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 7590df5e2e72..58ed6e6d4f12 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -227,7 +227,7 @@ static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
 	g_base = r_base + crtc->gamma_size;
 	b_base = g_base + crtc->gamma_size;
 
-	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
+	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
 }
 
 /**
diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
index c95406e6f44d..5b636bf0b467 100644
--- a/drivers/gpu/drm/gma500/gma_display.c
+++ b/drivers/gpu/drm/gma500/gma_display.c
@@ -175,20 +175,21 @@ void gma_crtc_load_lut(struct drm_crtc *crtc)
 	}
 }
 
-void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
-			u32 start, u32 size)
+int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
+		       u32 size)
 {
 	struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
 	int i;
-	int end = (start + size > 256) ? 256 : start + size;
 
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		gma_crtc->lut_r[i] = red[i] >> 8;
 		gma_crtc->lut_g[i] = green[i] >> 8;
 		gma_crtc->lut_b[i] = blue[i] >> 8;
 	}
 
 	gma_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 /**
diff --git a/drivers/gpu/drm/gma500/gma_display.h b/drivers/gpu/drm/gma500/gma_display.h
index b2491c65f053..e72dd08b701b 100644
--- a/drivers/gpu/drm/gma500/gma_display.h
+++ b/drivers/gpu/drm/gma500/gma_display.h
@@ -72,8 +72,8 @@ extern int gma_crtc_cursor_set(struct drm_crtc *crtc,
 			       uint32_t width, uint32_t height);
 extern int gma_crtc_cursor_move(struct drm_crtc *crtc, int x, int y);
 extern void gma_crtc_load_lut(struct drm_crtc *crtc);
-extern void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-			       u16 *blue, u32 start, u32 size);
+extern int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+			      u16 *blue, u32 size);
 extern void gma_crtc_dpms(struct drm_crtc *crtc, int mode);
 extern void gma_crtc_prepare(struct drm_crtc *crtc);
 extern void gma_crtc_commit(struct drm_crtc *crtc);
diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
index d347dca17267..6b21cb27e1cc 100644
--- a/drivers/gpu/drm/mgag200/mgag200_mode.c
+++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
@@ -1352,19 +1352,20 @@ static void mga_crtc_commit(struct drm_crtc *crtc)
  * use this for 8-bit mode so can't perform smooth fades on deeper modes,
  * but it's a requirement that we provide the function
  */
-static void mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				  u16 *blue, uint32_t start, uint32_t size)
+static int mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+			      u16 *blue, uint32_t size)
 {
 	struct mga_crtc *mga_crtc = to_mga_crtc(crtc);
-	int end = (start + size > MGAG200_LUT_SIZE) ? MGAG200_LUT_SIZE : start + size;
 	int i;
 
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		mga_crtc->lut_r[i] = red[i] >> 8;
 		mga_crtc->lut_g[i] = green[i] >> 8;
 		mga_crtc->lut_b[i] = blue[i] >> 8;
 	}
 	mga_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 /* Simple cleanup function */
diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
index 6f318c54da33..0cb7a18cde26 100644
--- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
+++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
@@ -785,14 +785,14 @@ nv_crtc_disable(struct drm_crtc *crtc)
 	nouveau_bo_ref(NULL, &disp->image[nv_crtc->index]);
 }
 
-static void
-nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
+static int
+nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
 		  uint32_t size)
 {
-	int end = (start + size > 256) ? 256 : start + size, i;
 	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
+	int i;
 
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		nv_crtc->lut.r[i] = r[i];
 		nv_crtc->lut.g[i] = g[i];
 		nv_crtc->lut.b[i] = b[i];
@@ -805,10 +805,12 @@ nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
 	 */
 	if (!nv_crtc->base.primary->fb) {
 		nv_crtc->lut.depth = 0;
-		return;
+		return 0;
 	}
 
 	nv_crtc_gamma_load(crtc);
+
+	return 0;
 }
 
 static int
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
index 3ffc2b0057bf..7a7788212df7 100644
--- a/drivers/gpu/drm/nouveau/nv50_display.c
+++ b/drivers/gpu/drm/nouveau/nv50_display.c
@@ -1346,21 +1346,22 @@ nv50_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
 	return 0;
 }
 
-static void
+static int
 nv50_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
-		    uint32_t start, uint32_t size)
+		    uint32_t size)
 {
 	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
-	u32 end = min_t(u32, start + size, 256);
 	u32 i;
 
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		nv_crtc->lut.r[i] = r[i];
 		nv_crtc->lut.g[i] = g[i];
 		nv_crtc->lut.b[i] = b[i];
 	}
 
 	nv50_crtc_lut_load(crtc);
+
+	return 0;
 }
 
 static void
diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
index 2fb18f13395c..e85c7a2f565b 100644
--- a/drivers/gpu/drm/radeon/radeon_display.c
+++ b/drivers/gpu/drm/radeon/radeon_display.c
@@ -231,19 +231,21 @@ void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
 	*blue = radeon_crtc->lut_b[regno] << 6;
 }
 
-static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
-				  u16 *blue, uint32_t start, uint32_t size)
+static int radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
+				 u16 *blue, uint32_t size)
 {
 	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
-	int end = (start + size > 256) ? 256 : start + size, i;
+	int i;
 
 	/* userspace palettes are always correct as is */
-	for (i = start; i < end; i++) {
+	for (i = 0; i < size; i++) {
 		radeon_crtc->lut_r[i] = red[i] >> 6;
 		radeon_crtc->lut_g[i] = green[i] >> 6;
 		radeon_crtc->lut_b[i] = blue[i] >> 6;
 	}
 	radeon_crtc_load_lut(crtc);
+
+	return 0;
 }
 
 static void radeon_crtc_destroy(struct drm_crtc *crtc)
@@ -688,6 +690,7 @@ radeon_crtc_set_config(struct drm_mode_set *set)
 	pm_runtime_put_autosuspend(dev->dev);
 	return ret;
 }
+
 static const struct drm_crtc_funcs radeon_crtc_funcs = {
 	.cursor_set2 = radeon_crtc_cursor_set2,
 	.cursor_move = radeon_crtc_cursor_move,
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index ba2e373ec901..4c0f26a644a3 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -175,20 +175,22 @@ vc4_crtc_lut_load(struct drm_crtc *crtc)
 		HVS_WRITE(SCALER_GAMDATA, vc4_crtc->lut_b[i]);
 }
 
-static void
+static int
 vc4_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
-		   uint32_t start, uint32_t size)
+		   uint32_t size)
 {
 	struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
 	u32 i;
 
-	for (i = start; i < start + size; i++) {
+	for (i = 0; i < size; i++) {
 		vc4_crtc->lut_r[i] = r[i] >> 8;
 		vc4_crtc->lut_g[i] = g[i] >> 8;
 		vc4_crtc->lut_b[i] = b[i] >> 8;
 	}
 
 	vc4_crtc_lut_load(crtc);
+
+	return 0;
 }
 
 static u32 vc4_get_fifo_full_level(u32 format)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
index 55231cce73a0..8a69d4da40b5 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
@@ -1404,9 +1404,9 @@ static int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
 	return 0;
 }
 
-void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
-			   u16 *r, u16 *g, u16 *b,
-			   uint32_t start, uint32_t size)
+int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
+			  u16 *r, u16 *g, u16 *b,
+			  uint32_t size)
 {
 	struct vmw_private *dev_priv = vmw_priv(crtc->dev);
 	int i;
@@ -1418,6 +1418,8 @@ void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
 		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 1, g[i] >> 8);
 		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 2, b[i] >> 8);
 	}
+
+	return 0;
 }
 
 int vmw_du_connector_dpms(struct drm_connector *connector, int mode)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
index 57203212c501..ff4803c107bc 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
@@ -195,9 +195,9 @@ struct vmw_display_unit {
 void vmw_du_cleanup(struct vmw_display_unit *du);
 void vmw_du_crtc_save(struct drm_crtc *crtc);
 void vmw_du_crtc_restore(struct drm_crtc *crtc);
-void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
+int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
 			   u16 *r, u16 *g, u16 *b,
-			   uint32_t start, uint32_t size);
+			   uint32_t size);
 int vmw_du_crtc_cursor_set2(struct drm_crtc *crtc, struct drm_file *file_priv,
 			    uint32_t handle, uint32_t width, uint32_t height,
 			    int32_t hot_x, int32_t hot_y);
diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
index b03bd83703b4..1877a7c18d8e 100644
--- a/include/drm/drm_atomic_helper.h
+++ b/include/drm/drm_atomic_helper.h
@@ -147,9 +147,9 @@ void
 __drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state);
 void drm_atomic_helper_connector_destroy_state(struct drm_connector *connector,
 					  struct drm_connector_state *state);
-void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
-					u16 *red, u16 *green, u16 *blue,
-					uint32_t start, uint32_t size);
+int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
+				       u16 *red, u16 *green, u16 *blue,
+				       uint32_t size);
 
 /**
  * drm_atomic_crtc_for_each_plane - iterate over planes currently attached to CRTC
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index f59d8a2d8920..411be4f45506 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -479,8 +479,8 @@ struct drm_crtc_funcs {
 	 * going on, which should eventually be unified to just one set of
 	 * hooks.
 	 */
-	void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
-			  uint32_t start, uint32_t size);
+	int (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
+			 uint32_t size);
 
 	/**
 	 * @destroy:
-- 
2.5.5


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH v2] drm/core: Change declaration for gamma_set.
  2016-06-07 10:49 ` [PATCH v2] " Maarten Lankhorst
@ 2016-06-07 10:55   ` Patrik Jakobsson
  2016-06-07 22:23   ` Sinclair Yeh
  1 sibling, 0 replies; 13+ messages in thread
From: Patrik Jakobsson @ 2016-06-07 10:55 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: Intel Graphics Development, Mathieu Larouche, dri-devel,
	VMware Graphics, Ben Skeggs, Alex Deucher, Thierry Reding,
	Christian König

On Tue, Jun 7, 2016 at 12:49 PM, Maarten Lankhorst
<maarten.lankhorst@linux.intel.com> wrote:
> Change return value to int to propagate errors from gamma_set,
> and remove start parameter. Updates always use the full size,
> and some drivers even ignore the start parameter altogether.
>
> This is needed for atomic drivers, where an atomic commit can
> fail with -EINTR or -ENOMEM and should be restarted.
>
> Changes since v1:
> - Fix compiler warning. (Emil)
> - Fix commit message (Daniel)
>
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Acked-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Eric Anholt <eric@anholt.net>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Mathieu Larouche <mathieu.larouche@matrox.com>
> Cc: Thierry Reding <treding@nvidia.com>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c  | 10 ++++++----
>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c  | 10 ++++++----
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c   | 10 ++++++----
>  drivers/gpu/drm/ast/ast_mode.c          | 10 ++++++----
>  drivers/gpu/drm/cirrus/cirrus_mode.c    |  8 +++++---
>  drivers/gpu/drm/drm_atomic_helper.c     | 13 ++++++-------
>  drivers/gpu/drm/drm_crtc.c              |  2 +-
>  drivers/gpu/drm/drm_fb_helper.c         |  2 +-
>  drivers/gpu/drm/gma500/gma_display.c    |  9 +++++----
>  drivers/gpu/drm/gma500/gma_display.h    |  4 ++--
>  drivers/gpu/drm/mgag200/mgag200_mode.c  |  9 +++++----
>  drivers/gpu/drm/nouveau/dispnv04/crtc.c | 12 +++++++-----
>  drivers/gpu/drm/nouveau/nv50_display.c  |  9 +++++----
>  drivers/gpu/drm/radeon/radeon_display.c | 11 +++++++----
>  drivers/gpu/drm/vc4/vc4_crtc.c          |  8 +++++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.c     |  8 +++++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.h     |  4 ++--
>  include/drm/drm_atomic_helper.h         |  6 +++---
>  include/drm/drm_crtc.h                  |  4 ++--
>  19 files changed, 85 insertions(+), 64 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index 7e57447bf5f4..112e358f0f9b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -2667,19 +2667,21 @@ static void dce_v10_0_cursor_reset(struct drm_crtc *crtc)
>         }
>  }
>
> -static void dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -                                   u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +                                   u16 *blue, uint32_t size)
>  {
>         struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -       int end = (start + size > 256) ? 256 : start + size, i;
> +       int i;
>
>         /* userspace palettes are always correct as is */
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 amdgpu_crtc->lut_r[i] = red[i] >> 6;
>                 amdgpu_crtc->lut_g[i] = green[i] >> 6;
>                 amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>         }
>         dce_v10_0_crtc_load_lut(crtc);
> +
> +       return 0;
>  }
>
>  static void dce_v10_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> index da101551960b..b522fa2435a8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> @@ -2678,19 +2678,21 @@ static void dce_v11_0_cursor_reset(struct drm_crtc *crtc)
>         }
>  }
>
> -static void dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -                                   u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +                                   u16 *blue, uint32_t size)
>  {
>         struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -       int end = (start + size > 256) ? 256 : start + size, i;
> +       int i;
>
>         /* userspace palettes are always correct as is */
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 amdgpu_crtc->lut_r[i] = red[i] >> 6;
>                 amdgpu_crtc->lut_g[i] = green[i] >> 6;
>                 amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>         }
>         dce_v11_0_crtc_load_lut(crtc);
> +
> +       return 0;
>  }
>
>  static void dce_v11_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index 41d9bc5f9c0e..b50ed72feedb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -2574,19 +2574,21 @@ static void dce_v8_0_cursor_reset(struct drm_crtc *crtc)
>         }
>  }
>
> -static void dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -                                   u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +                                  u16 *blue, uint32_t size)
>  {
>         struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -       int end = (start + size > 256) ? 256 : start + size, i;
> +       int i;
>
>         /* userspace palettes are always correct as is */
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 amdgpu_crtc->lut_r[i] = red[i] >> 6;
>                 amdgpu_crtc->lut_g[i] = green[i] >> 6;
>                 amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>         }
>         dce_v8_0_crtc_load_lut(crtc);
> +
> +       return 0;
>  }
>
>  static void dce_v8_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> index c337922606e3..5957c3e659fe 100644
> --- a/drivers/gpu/drm/ast/ast_mode.c
> +++ b/drivers/gpu/drm/ast/ast_mode.c
> @@ -624,19 +624,21 @@ static void ast_crtc_reset(struct drm_crtc *crtc)
>
>  }
>
> -static void ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -                                u16 *blue, uint32_t start, uint32_t size)
> +static int ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +                             u16 *blue, uint32_t size)
>  {
>         struct ast_crtc *ast_crtc = to_ast_crtc(crtc);
> -       int end = (start + size > 256) ? 256 : start + size, i;
> +       int i;
>
>         /* userspace palettes are always correct as is */
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 ast_crtc->lut_r[i] = red[i] >> 8;
>                 ast_crtc->lut_g[i] = green[i] >> 8;
>                 ast_crtc->lut_b[i] = blue[i] >> 8;
>         }
>         ast_crtc_load_lut(crtc);
> +
> +       return 0;
>  }
>
>
> diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
> index 0b1a411cb89e..17c915d9a03e 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_mode.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
> @@ -325,18 +325,20 @@ static void cirrus_crtc_commit(struct drm_crtc *crtc)
>   * use this for 8-bit mode so can't perform smooth fades on deeper modes,
>   * but it's a requirement that we provide the function
>   */
> -static void cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -                                 u16 *blue, uint32_t start, uint32_t size)
> +static int cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +                                u16 *blue, uint32_t size)
>  {
>         struct cirrus_crtc *cirrus_crtc = to_cirrus_crtc(crtc);
>         int i;
>
> -       for (i = 0; i < CIRRUS_LUT_SIZE; i++) {
> +       for (i = 0; i < size; i++) {
>                 cirrus_crtc->lut_r[i] = red[i];
>                 cirrus_crtc->lut_g[i] = green[i];
>                 cirrus_crtc->lut_b[i] = blue[i];
>         }
>         cirrus_crtc_load_lut(crtc);
> +
> +       return 0;
>  }
>
>  /* Simple cleanup function */
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 4342f3dfc0e1..191d84f12e67 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -2920,16 +2920,15 @@ EXPORT_SYMBOL(drm_atomic_helper_connector_destroy_state);
>   * @red: red correction table
>   * @green: green correction table
>   * @blue: green correction table
> - * @start: first entry, must always be 0
>   * @size: size of the tables
>   *
>   * Implements support for legacy gamma correction table for drivers
>   * that support color management through the DEGAMMA_LUT/GAMMA_LUT
>   * properties.
>   */
> -void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> -                                       u16 *red, u16 *green, u16 *blue,
> -                                       uint32_t start, uint32_t size)
> +int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> +                                      u16 *red, u16 *green, u16 *blue,
> +                                      uint32_t size)
>  {
>         struct drm_device *dev = crtc->dev;
>         struct drm_mode_config *config = &dev->mode_config;
> @@ -2941,7 +2940,7 @@ void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
>
>         state = drm_atomic_state_alloc(crtc->dev);
>         if (!state)
> -               return;
> +               return -ENOMEM;
>
>         blob = drm_property_create_blob(dev,
>                                         sizeof(struct drm_color_lut) * size,
> @@ -2992,7 +2991,7 @@ retry:
>
>         drm_property_unreference_blob(blob);
>
> -       return;
> +       return 0;
>  fail:
>         if (ret == -EDEADLK)
>                 goto backoff;
> @@ -3000,7 +2999,7 @@ fail:
>         drm_atomic_state_free(state);
>         drm_property_unreference_blob(blob);
>
> -       return;
> +       return ret;
>  backoff:
>         drm_atomic_state_clear(state);
>         drm_atomic_legacy_backoff(state);
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index a9cabef98f6b..da2f28ea5fad 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -5171,7 +5171,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
>                 goto out;
>         }
>
> -       crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
> +       ret = crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
>
>  out:
>         drm_modeset_unlock_all(dev);
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 7590df5e2e72..58ed6e6d4f12 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -227,7 +227,7 @@ static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
>         g_base = r_base + crtc->gamma_size;
>         b_base = g_base + crtc->gamma_size;
>
> -       crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
> +       crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
>  }
>
>  /**
> diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
> index c95406e6f44d..5b636bf0b467 100644
> --- a/drivers/gpu/drm/gma500/gma_display.c
> +++ b/drivers/gpu/drm/gma500/gma_display.c
> @@ -175,20 +175,21 @@ void gma_crtc_load_lut(struct drm_crtc *crtc)
>         }
>  }
>
> -void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
> -                       u32 start, u32 size)
> +int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
> +                      u32 size)
>  {
>         struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
>         int i;
> -       int end = (start + size > 256) ? 256 : start + size;
>
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 gma_crtc->lut_r[i] = red[i] >> 8;
>                 gma_crtc->lut_g[i] = green[i] >> 8;
>                 gma_crtc->lut_b[i] = blue[i] >> 8;
>         }
>
>         gma_crtc_load_lut(crtc);
> +
> +       return 0;
>  }
>
>  /**
> diff --git a/drivers/gpu/drm/gma500/gma_display.h b/drivers/gpu/drm/gma500/gma_display.h
> index b2491c65f053..e72dd08b701b 100644
> --- a/drivers/gpu/drm/gma500/gma_display.h
> +++ b/drivers/gpu/drm/gma500/gma_display.h
> @@ -72,8 +72,8 @@ extern int gma_crtc_cursor_set(struct drm_crtc *crtc,
>                                uint32_t width, uint32_t height);
>  extern int gma_crtc_cursor_move(struct drm_crtc *crtc, int x, int y);
>  extern void gma_crtc_load_lut(struct drm_crtc *crtc);
> -extern void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -                              u16 *blue, u32 start, u32 size);
> +extern int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +                             u16 *blue, u32 size);
>  extern void gma_crtc_dpms(struct drm_crtc *crtc, int mode);
>  extern void gma_crtc_prepare(struct drm_crtc *crtc);
>  extern void gma_crtc_commit(struct drm_crtc *crtc);
> diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
> index d347dca17267..6b21cb27e1cc 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
> @@ -1352,19 +1352,20 @@ static void mga_crtc_commit(struct drm_crtc *crtc)
>   * use this for 8-bit mode so can't perform smooth fades on deeper modes,
>   * but it's a requirement that we provide the function
>   */
> -static void mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -                                 u16 *blue, uint32_t start, uint32_t size)
> +static int mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +                             u16 *blue, uint32_t size)
>  {
>         struct mga_crtc *mga_crtc = to_mga_crtc(crtc);
> -       int end = (start + size > MGAG200_LUT_SIZE) ? MGAG200_LUT_SIZE : start + size;
>         int i;
>
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 mga_crtc->lut_r[i] = red[i] >> 8;
>                 mga_crtc->lut_g[i] = green[i] >> 8;
>                 mga_crtc->lut_b[i] = blue[i] >> 8;
>         }
>         mga_crtc_load_lut(crtc);
> +
> +       return 0;
>  }
>
>  /* Simple cleanup function */
> diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> index 6f318c54da33..0cb7a18cde26 100644
> --- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> +++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> @@ -785,14 +785,14 @@ nv_crtc_disable(struct drm_crtc *crtc)
>         nouveau_bo_ref(NULL, &disp->image[nv_crtc->index]);
>  }
>
> -static void
> -nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
> +static int
> +nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
>                   uint32_t size)
>  {
> -       int end = (start + size > 256) ? 256 : start + size, i;
>         struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
> +       int i;
>
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 nv_crtc->lut.r[i] = r[i];
>                 nv_crtc->lut.g[i] = g[i];
>                 nv_crtc->lut.b[i] = b[i];
> @@ -805,10 +805,12 @@ nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
>          */
>         if (!nv_crtc->base.primary->fb) {
>                 nv_crtc->lut.depth = 0;
> -               return;
> +               return 0;
>         }
>
>         nv_crtc_gamma_load(crtc);
> +
> +       return 0;
>  }
>
>  static int
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 3ffc2b0057bf..7a7788212df7 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1346,21 +1346,22 @@ nv50_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
>         return 0;
>  }
>
> -static void
> +static int
>  nv50_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -                   uint32_t start, uint32_t size)
> +                   uint32_t size)
>  {
>         struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
> -       u32 end = min_t(u32, start + size, 256);
>         u32 i;
>
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 nv_crtc->lut.r[i] = r[i];
>                 nv_crtc->lut.g[i] = g[i];
>                 nv_crtc->lut.b[i] = b[i];
>         }
>
>         nv50_crtc_lut_load(crtc);
> +
> +       return 0;
>  }
>
>  static void
> diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
> index 2fb18f13395c..e85c7a2f565b 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -231,19 +231,21 @@ void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
>         *blue = radeon_crtc->lut_b[regno] << 6;
>  }
>
> -static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -                                 u16 *blue, uint32_t start, uint32_t size)
> +static int radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +                                u16 *blue, uint32_t size)
>  {
>         struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
> -       int end = (start + size > 256) ? 256 : start + size, i;
> +       int i;
>
>         /* userspace palettes are always correct as is */
> -       for (i = start; i < end; i++) {
> +       for (i = 0; i < size; i++) {
>                 radeon_crtc->lut_r[i] = red[i] >> 6;
>                 radeon_crtc->lut_g[i] = green[i] >> 6;
>                 radeon_crtc->lut_b[i] = blue[i] >> 6;
>         }
>         radeon_crtc_load_lut(crtc);
> +
> +       return 0;
>  }
>
>  static void radeon_crtc_destroy(struct drm_crtc *crtc)
> @@ -688,6 +690,7 @@ radeon_crtc_set_config(struct drm_mode_set *set)
>         pm_runtime_put_autosuspend(dev->dev);
>         return ret;
>  }
> +
>  static const struct drm_crtc_funcs radeon_crtc_funcs = {
>         .cursor_set2 = radeon_crtc_cursor_set2,
>         .cursor_move = radeon_crtc_cursor_move,
> diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> index ba2e373ec901..4c0f26a644a3 100644
> --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> @@ -175,20 +175,22 @@ vc4_crtc_lut_load(struct drm_crtc *crtc)
>                 HVS_WRITE(SCALER_GAMDATA, vc4_crtc->lut_b[i]);
>  }
>
> -static void
> +static int
>  vc4_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -                  uint32_t start, uint32_t size)
> +                  uint32_t size)
>  {
>         struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
>         u32 i;
>
> -       for (i = start; i < start + size; i++) {
> +       for (i = 0; i < size; i++) {
>                 vc4_crtc->lut_r[i] = r[i] >> 8;
>                 vc4_crtc->lut_g[i] = g[i] >> 8;
>                 vc4_crtc->lut_b[i] = b[i] >> 8;
>         }
>
>         vc4_crtc_lut_load(crtc);
> +
> +       return 0;
>  }
>
>  static u32 vc4_get_fifo_full_level(u32 format)
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 55231cce73a0..8a69d4da40b5 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -1404,9 +1404,9 @@ static int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
>         return 0;
>  }
>
> -void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> -                          u16 *r, u16 *g, u16 *b,
> -                          uint32_t start, uint32_t size)
> +int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> +                         u16 *r, u16 *g, u16 *b,
> +                         uint32_t size)
>  {
>         struct vmw_private *dev_priv = vmw_priv(crtc->dev);
>         int i;
> @@ -1418,6 +1418,8 @@ void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
>                 vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 1, g[i] >> 8);
>                 vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 2, b[i] >> 8);
>         }
> +
> +       return 0;
>  }
>
>  int vmw_du_connector_dpms(struct drm_connector *connector, int mode)
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> index 57203212c501..ff4803c107bc 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> @@ -195,9 +195,9 @@ struct vmw_display_unit {
>  void vmw_du_cleanup(struct vmw_display_unit *du);
>  void vmw_du_crtc_save(struct drm_crtc *crtc);
>  void vmw_du_crtc_restore(struct drm_crtc *crtc);
> -void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> +int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
>                            u16 *r, u16 *g, u16 *b,
> -                          uint32_t start, uint32_t size);
> +                          uint32_t size);
>  int vmw_du_crtc_cursor_set2(struct drm_crtc *crtc, struct drm_file *file_priv,
>                             uint32_t handle, uint32_t width, uint32_t height,
>                             int32_t hot_x, int32_t hot_y);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index b03bd83703b4..1877a7c18d8e 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -147,9 +147,9 @@ void
>  __drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state);
>  void drm_atomic_helper_connector_destroy_state(struct drm_connector *connector,
>                                           struct drm_connector_state *state);
> -void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> -                                       u16 *red, u16 *green, u16 *blue,
> -                                       uint32_t start, uint32_t size);
> +int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> +                                      u16 *red, u16 *green, u16 *blue,
> +                                      uint32_t size);
>
>  /**
>   * drm_atomic_crtc_for_each_plane - iterate over planes currently attached to CRTC
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index f59d8a2d8920..411be4f45506 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -479,8 +479,8 @@ struct drm_crtc_funcs {
>          * going on, which should eventually be unified to just one set of
>          * hooks.
>          */
> -       void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -                         uint32_t start, uint32_t size);
> +       int (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> +                        uint32_t size);
>
>         /**
>          * @destroy:
> --
> 2.5.5
>
>

Looks good

Acked-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH v2] drm/core: Change declaration for gamma_set.
  2016-06-07 10:49 ` [PATCH v2] " Maarten Lankhorst
  2016-06-07 10:55   ` Patrik Jakobsson
@ 2016-06-07 22:23   ` Sinclair Yeh
  1 sibling, 0 replies; 13+ messages in thread
From: Sinclair Yeh @ 2016-06-07 22:23 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: intel-gfx, Mathieu Larouche, dri-devel, VMware Graphics,
	Ben Skeggs, Alex Deucher, Thierry Reding, Christian König

Acked-by: Sinclair Yeh <syeh@vmware.com>

On Tue, Jun 07, 2016 at 12:49:30PM +0200, Maarten Lankhorst wrote:
> Change return value to int to propagate errors from gamma_set,
> and remove start parameter. Updates always use the full size,
> and some drivers even ignore the start parameter altogether.
> 
> This is needed for atomic drivers, where an atomic commit can
> fail with -EINTR or -ENOMEM and should be restarted.
> 
> Changes since v1:
> - Fix compiler warning. (Emil)
> - Fix commit message (Daniel)
> 
> Cc: Alex Deucher <alexander.deucher@amd.com>
> Acked-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: Christian König <christian.koenig@amd.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
> Cc: Ben Skeggs <bskeggs@redhat.com>
> Cc: Eric Anholt <eric@anholt.net>
> Cc: VMware Graphics <linux-graphics-maintainer@vmware.com>
> Cc: Mathieu Larouche <mathieu.larouche@matrox.com>
> Cc: Thierry Reding <treding@nvidia.com>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> ---
>  drivers/gpu/drm/amd/amdgpu/dce_v10_0.c  | 10 ++++++----
>  drivers/gpu/drm/amd/amdgpu/dce_v11_0.c  | 10 ++++++----
>  drivers/gpu/drm/amd/amdgpu/dce_v8_0.c   | 10 ++++++----
>  drivers/gpu/drm/ast/ast_mode.c          | 10 ++++++----
>  drivers/gpu/drm/cirrus/cirrus_mode.c    |  8 +++++---
>  drivers/gpu/drm/drm_atomic_helper.c     | 13 ++++++-------
>  drivers/gpu/drm/drm_crtc.c              |  2 +-
>  drivers/gpu/drm/drm_fb_helper.c         |  2 +-
>  drivers/gpu/drm/gma500/gma_display.c    |  9 +++++----
>  drivers/gpu/drm/gma500/gma_display.h    |  4 ++--
>  drivers/gpu/drm/mgag200/mgag200_mode.c  |  9 +++++----
>  drivers/gpu/drm/nouveau/dispnv04/crtc.c | 12 +++++++-----
>  drivers/gpu/drm/nouveau/nv50_display.c  |  9 +++++----
>  drivers/gpu/drm/radeon/radeon_display.c | 11 +++++++----
>  drivers/gpu/drm/vc4/vc4_crtc.c          |  8 +++++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.c     |  8 +++++---
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.h     |  4 ++--
>  include/drm/drm_atomic_helper.h         |  6 +++---
>  include/drm/drm_crtc.h                  |  4 ++--
>  19 files changed, 85 insertions(+), 64 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> index 7e57447bf5f4..112e358f0f9b 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
> @@ -2667,19 +2667,21 @@ static void dce_v10_0_cursor_reset(struct drm_crtc *crtc)
>  	}
>  }
>  
> -static void dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				    u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v10_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				    u16 *blue, uint32_t size)
>  {
>  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
>  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
>  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>  	}
>  	dce_v10_0_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  static void dce_v10_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> index da101551960b..b522fa2435a8 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
> @@ -2678,19 +2678,21 @@ static void dce_v11_0_cursor_reset(struct drm_crtc *crtc)
>  	}
>  }
>  
> -static void dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				    u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v11_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				    u16 *blue, uint32_t size)
>  {
>  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
>  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
>  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>  	}
>  	dce_v11_0_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  static void dce_v11_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> index 41d9bc5f9c0e..b50ed72feedb 100644
> --- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> +++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
> @@ -2574,19 +2574,21 @@ static void dce_v8_0_cursor_reset(struct drm_crtc *crtc)
>  	}
>  }
>  
> -static void dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				    u16 *blue, uint32_t start, uint32_t size)
> +static int dce_v8_0_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				   u16 *blue, uint32_t size)
>  {
>  	struct amdgpu_crtc *amdgpu_crtc = to_amdgpu_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		amdgpu_crtc->lut_r[i] = red[i] >> 6;
>  		amdgpu_crtc->lut_g[i] = green[i] >> 6;
>  		amdgpu_crtc->lut_b[i] = blue[i] >> 6;
>  	}
>  	dce_v8_0_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  static void dce_v8_0_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> index c337922606e3..5957c3e659fe 100644
> --- a/drivers/gpu/drm/ast/ast_mode.c
> +++ b/drivers/gpu/drm/ast/ast_mode.c
> @@ -624,19 +624,21 @@ static void ast_crtc_reset(struct drm_crtc *crtc)
>  
>  }
>  
> -static void ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				 u16 *blue, uint32_t start, uint32_t size)
> +static int ast_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +			      u16 *blue, uint32_t size)
>  {
>  	struct ast_crtc *ast_crtc = to_ast_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		ast_crtc->lut_r[i] = red[i] >> 8;
>  		ast_crtc->lut_g[i] = green[i] >> 8;
>  		ast_crtc->lut_b[i] = blue[i] >> 8;
>  	}
>  	ast_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  
> diff --git a/drivers/gpu/drm/cirrus/cirrus_mode.c b/drivers/gpu/drm/cirrus/cirrus_mode.c
> index 0b1a411cb89e..17c915d9a03e 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_mode.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
> @@ -325,18 +325,20 @@ static void cirrus_crtc_commit(struct drm_crtc *crtc)
>   * use this for 8-bit mode so can't perform smooth fades on deeper modes,
>   * but it's a requirement that we provide the function
>   */
> -static void cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				  u16 *blue, uint32_t start, uint32_t size)
> +static int cirrus_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				 u16 *blue, uint32_t size)
>  {
>  	struct cirrus_crtc *cirrus_crtc = to_cirrus_crtc(crtc);
>  	int i;
>  
> -	for (i = 0; i < CIRRUS_LUT_SIZE; i++) {
> +	for (i = 0; i < size; i++) {
>  		cirrus_crtc->lut_r[i] = red[i];
>  		cirrus_crtc->lut_g[i] = green[i];
>  		cirrus_crtc->lut_b[i] = blue[i];
>  	}
>  	cirrus_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  /* Simple cleanup function */
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 4342f3dfc0e1..191d84f12e67 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -2920,16 +2920,15 @@ EXPORT_SYMBOL(drm_atomic_helper_connector_destroy_state);
>   * @red: red correction table
>   * @green: green correction table
>   * @blue: green correction table
> - * @start: first entry, must always be 0
>   * @size: size of the tables
>   *
>   * Implements support for legacy gamma correction table for drivers
>   * that support color management through the DEGAMMA_LUT/GAMMA_LUT
>   * properties.
>   */
> -void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> -					u16 *red, u16 *green, u16 *blue,
> -					uint32_t start, uint32_t size)
> +int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> +				       u16 *red, u16 *green, u16 *blue,
> +				       uint32_t size)
>  {
>  	struct drm_device *dev = crtc->dev;
>  	struct drm_mode_config *config = &dev->mode_config;
> @@ -2941,7 +2940,7 @@ void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
>  
>  	state = drm_atomic_state_alloc(crtc->dev);
>  	if (!state)
> -		return;
> +		return -ENOMEM;
>  
>  	blob = drm_property_create_blob(dev,
>  					sizeof(struct drm_color_lut) * size,
> @@ -2992,7 +2991,7 @@ retry:
>  
>  	drm_property_unreference_blob(blob);
>  
> -	return;
> +	return 0;
>  fail:
>  	if (ret == -EDEADLK)
>  		goto backoff;
> @@ -3000,7 +2999,7 @@ fail:
>  	drm_atomic_state_free(state);
>  	drm_property_unreference_blob(blob);
>  
> -	return;
> +	return ret;
>  backoff:
>  	drm_atomic_state_clear(state);
>  	drm_atomic_legacy_backoff(state);
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index a9cabef98f6b..da2f28ea5fad 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -5171,7 +5171,7 @@ int drm_mode_gamma_set_ioctl(struct drm_device *dev,
>  		goto out;
>  	}
>  
> -	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
> +	ret = crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
>  
>  out:
>  	drm_modeset_unlock_all(dev);
> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
> index 7590df5e2e72..58ed6e6d4f12 100644
> --- a/drivers/gpu/drm/drm_fb_helper.c
> +++ b/drivers/gpu/drm/drm_fb_helper.c
> @@ -227,7 +227,7 @@ static void drm_fb_helper_restore_lut_atomic(struct drm_crtc *crtc)
>  	g_base = r_base + crtc->gamma_size;
>  	b_base = g_base + crtc->gamma_size;
>  
> -	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, 0, crtc->gamma_size);
> +	crtc->funcs->gamma_set(crtc, r_base, g_base, b_base, crtc->gamma_size);
>  }
>  
>  /**
> diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c
> index c95406e6f44d..5b636bf0b467 100644
> --- a/drivers/gpu/drm/gma500/gma_display.c
> +++ b/drivers/gpu/drm/gma500/gma_display.c
> @@ -175,20 +175,21 @@ void gma_crtc_load_lut(struct drm_crtc *crtc)
>  	}
>  }
>  
> -void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
> -			u32 start, u32 size)
> +int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green, u16 *blue,
> +		       u32 size)
>  {
>  	struct gma_crtc *gma_crtc = to_gma_crtc(crtc);
>  	int i;
> -	int end = (start + size > 256) ? 256 : start + size;
>  
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		gma_crtc->lut_r[i] = red[i] >> 8;
>  		gma_crtc->lut_g[i] = green[i] >> 8;
>  		gma_crtc->lut_b[i] = blue[i] >> 8;
>  	}
>  
>  	gma_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  /**
> diff --git a/drivers/gpu/drm/gma500/gma_display.h b/drivers/gpu/drm/gma500/gma_display.h
> index b2491c65f053..e72dd08b701b 100644
> --- a/drivers/gpu/drm/gma500/gma_display.h
> +++ b/drivers/gpu/drm/gma500/gma_display.h
> @@ -72,8 +72,8 @@ extern int gma_crtc_cursor_set(struct drm_crtc *crtc,
>  			       uint32_t width, uint32_t height);
>  extern int gma_crtc_cursor_move(struct drm_crtc *crtc, int x, int y);
>  extern void gma_crtc_load_lut(struct drm_crtc *crtc);
> -extern void gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -			       u16 *blue, u32 start, u32 size);
> +extern int gma_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +			      u16 *blue, u32 size);
>  extern void gma_crtc_dpms(struct drm_crtc *crtc, int mode);
>  extern void gma_crtc_prepare(struct drm_crtc *crtc);
>  extern void gma_crtc_commit(struct drm_crtc *crtc);
> diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
> index d347dca17267..6b21cb27e1cc 100644
> --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
> +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
> @@ -1352,19 +1352,20 @@ static void mga_crtc_commit(struct drm_crtc *crtc)
>   * use this for 8-bit mode so can't perform smooth fades on deeper modes,
>   * but it's a requirement that we provide the function
>   */
> -static void mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				  u16 *blue, uint32_t start, uint32_t size)
> +static int mga_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +			      u16 *blue, uint32_t size)
>  {
>  	struct mga_crtc *mga_crtc = to_mga_crtc(crtc);
> -	int end = (start + size > MGAG200_LUT_SIZE) ? MGAG200_LUT_SIZE : start + size;
>  	int i;
>  
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		mga_crtc->lut_r[i] = red[i] >> 8;
>  		mga_crtc->lut_g[i] = green[i] >> 8;
>  		mga_crtc->lut_b[i] = blue[i] >> 8;
>  	}
>  	mga_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  /* Simple cleanup function */
> diff --git a/drivers/gpu/drm/nouveau/dispnv04/crtc.c b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> index 6f318c54da33..0cb7a18cde26 100644
> --- a/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> +++ b/drivers/gpu/drm/nouveau/dispnv04/crtc.c
> @@ -785,14 +785,14 @@ nv_crtc_disable(struct drm_crtc *crtc)
>  	nouveau_bo_ref(NULL, &disp->image[nv_crtc->index]);
>  }
>  
> -static void
> -nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
> +static int
> +nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
>  		  uint32_t size)
>  {
> -	int end = (start + size > 256) ? 256 : start + size, i;
>  	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
> +	int i;
>  
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		nv_crtc->lut.r[i] = r[i];
>  		nv_crtc->lut.g[i] = g[i];
>  		nv_crtc->lut.b[i] = b[i];
> @@ -805,10 +805,12 @@ nv_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b, uint32_t start,
>  	 */
>  	if (!nv_crtc->base.primary->fb) {
>  		nv_crtc->lut.depth = 0;
> -		return;
> +		return 0;
>  	}
>  
>  	nv_crtc_gamma_load(crtc);
> +
> +	return 0;
>  }
>  
>  static int
> diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
> index 3ffc2b0057bf..7a7788212df7 100644
> --- a/drivers/gpu/drm/nouveau/nv50_display.c
> +++ b/drivers/gpu/drm/nouveau/nv50_display.c
> @@ -1346,21 +1346,22 @@ nv50_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
>  	return 0;
>  }
>  
> -static void
> +static int
>  nv50_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -		    uint32_t start, uint32_t size)
> +		    uint32_t size)
>  {
>  	struct nouveau_crtc *nv_crtc = nouveau_crtc(crtc);
> -	u32 end = min_t(u32, start + size, 256);
>  	u32 i;
>  
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		nv_crtc->lut.r[i] = r[i];
>  		nv_crtc->lut.g[i] = g[i];
>  		nv_crtc->lut.b[i] = b[i];
>  	}
>  
>  	nv50_crtc_lut_load(crtc);
> +
> +	return 0;
>  }
>  
>  static void
> diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
> index 2fb18f13395c..e85c7a2f565b 100644
> --- a/drivers/gpu/drm/radeon/radeon_display.c
> +++ b/drivers/gpu/drm/radeon/radeon_display.c
> @@ -231,19 +231,21 @@ void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
>  	*blue = radeon_crtc->lut_b[regno] << 6;
>  }
>  
> -static void radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> -				  u16 *blue, uint32_t start, uint32_t size)
> +static int radeon_crtc_gamma_set(struct drm_crtc *crtc, u16 *red, u16 *green,
> +				 u16 *blue, uint32_t size)
>  {
>  	struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
> -	int end = (start + size > 256) ? 256 : start + size, i;
> +	int i;
>  
>  	/* userspace palettes are always correct as is */
> -	for (i = start; i < end; i++) {
> +	for (i = 0; i < size; i++) {
>  		radeon_crtc->lut_r[i] = red[i] >> 6;
>  		radeon_crtc->lut_g[i] = green[i] >> 6;
>  		radeon_crtc->lut_b[i] = blue[i] >> 6;
>  	}
>  	radeon_crtc_load_lut(crtc);
> +
> +	return 0;
>  }
>  
>  static void radeon_crtc_destroy(struct drm_crtc *crtc)
> @@ -688,6 +690,7 @@ radeon_crtc_set_config(struct drm_mode_set *set)
>  	pm_runtime_put_autosuspend(dev->dev);
>  	return ret;
>  }
> +
>  static const struct drm_crtc_funcs radeon_crtc_funcs = {
>  	.cursor_set2 = radeon_crtc_cursor_set2,
>  	.cursor_move = radeon_crtc_cursor_move,
> diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> index ba2e373ec901..4c0f26a644a3 100644
> --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> @@ -175,20 +175,22 @@ vc4_crtc_lut_load(struct drm_crtc *crtc)
>  		HVS_WRITE(SCALER_GAMDATA, vc4_crtc->lut_b[i]);
>  }
>  
> -static void
> +static int
>  vc4_crtc_gamma_set(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -		   uint32_t start, uint32_t size)
> +		   uint32_t size)
>  {
>  	struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
>  	u32 i;
>  
> -	for (i = start; i < start + size; i++) {
> +	for (i = 0; i < size; i++) {
>  		vc4_crtc->lut_r[i] = r[i] >> 8;
>  		vc4_crtc->lut_g[i] = g[i] >> 8;
>  		vc4_crtc->lut_b[i] = b[i] >> 8;
>  	}
>  
>  	vc4_crtc_lut_load(crtc);
> +
> +	return 0;
>  }
>  
>  static u32 vc4_get_fifo_full_level(u32 format)
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 55231cce73a0..8a69d4da40b5 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -1404,9 +1404,9 @@ static int vmw_du_update_layout(struct vmw_private *dev_priv, unsigned num,
>  	return 0;
>  }
>  
> -void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> -			   u16 *r, u16 *g, u16 *b,
> -			   uint32_t start, uint32_t size)
> +int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> +			  u16 *r, u16 *g, u16 *b,
> +			  uint32_t size)
>  {
>  	struct vmw_private *dev_priv = vmw_priv(crtc->dev);
>  	int i;
> @@ -1418,6 +1418,8 @@ void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
>  		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 1, g[i] >> 8);
>  		vmw_write(dev_priv, SVGA_PALETTE_BASE + i * 3 + 2, b[i] >> 8);
>  	}
> +
> +	return 0;
>  }
>  
>  int vmw_du_connector_dpms(struct drm_connector *connector, int mode)
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> index 57203212c501..ff4803c107bc 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.h
> @@ -195,9 +195,9 @@ struct vmw_display_unit {
>  void vmw_du_cleanup(struct vmw_display_unit *du);
>  void vmw_du_crtc_save(struct drm_crtc *crtc);
>  void vmw_du_crtc_restore(struct drm_crtc *crtc);
> -void vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
> +int vmw_du_crtc_gamma_set(struct drm_crtc *crtc,
>  			   u16 *r, u16 *g, u16 *b,
> -			   uint32_t start, uint32_t size);
> +			   uint32_t size);
>  int vmw_du_crtc_cursor_set2(struct drm_crtc *crtc, struct drm_file *file_priv,
>  			    uint32_t handle, uint32_t width, uint32_t height,
>  			    int32_t hot_x, int32_t hot_y);
> diff --git a/include/drm/drm_atomic_helper.h b/include/drm/drm_atomic_helper.h
> index b03bd83703b4..1877a7c18d8e 100644
> --- a/include/drm/drm_atomic_helper.h
> +++ b/include/drm/drm_atomic_helper.h
> @@ -147,9 +147,9 @@ void
>  __drm_atomic_helper_connector_destroy_state(struct drm_connector_state *state);
>  void drm_atomic_helper_connector_destroy_state(struct drm_connector *connector,
>  					  struct drm_connector_state *state);
> -void drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> -					u16 *red, u16 *green, u16 *blue,
> -					uint32_t start, uint32_t size);
> +int drm_atomic_helper_legacy_gamma_set(struct drm_crtc *crtc,
> +				       u16 *red, u16 *green, u16 *blue,
> +				       uint32_t size);
>  
>  /**
>   * drm_atomic_crtc_for_each_plane - iterate over planes currently attached to CRTC
> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
> index f59d8a2d8920..411be4f45506 100644
> --- a/include/drm/drm_crtc.h
> +++ b/include/drm/drm_crtc.h
> @@ -479,8 +479,8 @@ struct drm_crtc_funcs {
>  	 * going on, which should eventually be unified to just one set of
>  	 * hooks.
>  	 */
> -	void (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> -			  uint32_t start, uint32_t size);
> +	int (*gamma_set)(struct drm_crtc *crtc, u16 *r, u16 *g, u16 *b,
> +			 uint32_t size);
>  
>  	/**
>  	 * @destroy:
> -- 
> 2.5.5
> 
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.freedesktop.org_mailman_listinfo_dri-2Ddevel&d=CwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=w9Iu3o4zAy-3-s8MFvrNSQ&m=E2k0-heZyZyuh_E9CTOgohlm--0zW99fa2nCRrQxtmk&s=stuQ-I3negOfmIrMLBGVh9CgXZGNhU5TBxcfgrlSvUY&e= 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2016-06-07 22:23 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-06-06  9:18 [PATCH] drm/core: Change declaration for gamma_set Maarten Lankhorst
2016-06-06  9:28 ` ✗ Ro.CI.BAT: failure for " Patchwork
2016-06-06 16:00 ` [PATCH] " Daniel Vetter
2016-06-06 16:01   ` Deucher, Alexander
2016-06-06 16:11   ` Emil Velikov
2016-06-06 16:15     ` Maarten Lankhorst
2016-06-06 16:25       ` Emil Velikov
2016-06-06 16:41         ` Maarten Lankhorst
2016-06-06 16:17 ` Emil Velikov
2016-06-06 16:32   ` Maarten Lankhorst
2016-06-07 10:49 ` [PATCH v2] " Maarten Lankhorst
2016-06-07 10:55   ` Patrik Jakobsson
2016-06-07 22:23   ` Sinclair Yeh

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).