2021-11-04 16:50:55

by Mark Yacoub

[permalink] [raw]
Subject: [PATCH v4 1/3] drm: Move drm_color_lut_check implementation internal to intel_color

From: Mark Yacoub <[email protected]>

[Why]
The tests of LUT_EQUAL_CHANNELS and LUT_NON_DECREASING are currently
unique to i915 driver.
Freeing up the function name for the more generic LUT checks to folllow

Tested on Eldrid ChromeOS (TGL).

v1:
Stuff the test function from DRM to intel driver.

Signed-off-by: Mark Yacoub <[email protected]>
---
drivers/gpu/drm/drm_color_mgmt.c | 43 ----------------------
drivers/gpu/drm/i915/display/intel_color.c | 43 +++++++++++++++++++---
drivers/gpu/drm/i915/display/intel_color.h | 27 ++++++++++++++
drivers/gpu/drm/i915/i915_pci.c | 27 ++++++++------
include/drm/drm_color_mgmt.h | 27 --------------
5 files changed, 81 insertions(+), 86 deletions(-)

diff --git a/drivers/gpu/drm/drm_color_mgmt.c b/drivers/gpu/drm/drm_color_mgmt.c
index bb14f488c8f6c..16a07f84948f3 100644
--- a/drivers/gpu/drm/drm_color_mgmt.c
+++ b/drivers/gpu/drm/drm_color_mgmt.c
@@ -583,46 +583,3 @@ int drm_plane_create_color_properties(struct drm_plane *plane,
return 0;
}
EXPORT_SYMBOL(drm_plane_create_color_properties);
-
-/**
- * drm_color_lut_check - check validity of lookup table
- * @lut: property blob containing LUT to check
- * @tests: bitmask of tests to run
- *
- * Helper to check whether a userspace-provided lookup table is valid and
- * satisfies hardware requirements. Drivers pass a bitmask indicating which of
- * the tests in &drm_color_lut_tests should be performed.
- *
- * Returns 0 on success, -EINVAL on failure.
- */
-int drm_color_lut_check(const struct drm_property_blob *lut, u32 tests)
-{
- const struct drm_color_lut *entry;
- int i;
-
- if (!lut || !tests)
- return 0;
-
- entry = lut->data;
- for (i = 0; i < drm_color_lut_size(lut); i++) {
- if (tests & DRM_COLOR_LUT_EQUAL_CHANNELS) {
- if (entry[i].red != entry[i].blue ||
- entry[i].red != entry[i].green) {
- DRM_DEBUG_KMS("All LUT entries must have equal r/g/b\n");
- return -EINVAL;
- }
- }
-
- if (i > 0 && tests & DRM_COLOR_LUT_NON_DECREASING) {
- if (entry[i].red < entry[i - 1].red ||
- entry[i].green < entry[i - 1].green ||
- entry[i].blue < entry[i - 1].blue) {
- DRM_DEBUG_KMS("LUT entries must never decrease.\n");
- return -EINVAL;
- }
- }
- }
-
- return 0;
-}
-EXPORT_SYMBOL(drm_color_lut_check);
diff --git a/drivers/gpu/drm/i915/display/intel_color.c b/drivers/gpu/drm/i915/display/intel_color.c
index dab892d2251ba..bde98a155c9f3 100644
--- a/drivers/gpu/drm/i915/display/intel_color.c
+++ b/drivers/gpu/drm/i915/display/intel_color.c
@@ -1279,13 +1279,46 @@ static int check_lut_size(const struct drm_property_blob *lut, int expected)
return 0;
}

+static int test_luts(const struct drm_property_blob *lut, u32 tests)
+{
+ const struct drm_color_lut *entry;
+ int i;
+
+ if (!lut || !tests)
+ return 0;
+
+ entry = lut->data;
+ for (i = 0; i < drm_color_lut_size(lut); i++) {
+ if (tests & LUT_EQUAL_CHANNELS) {
+ if (entry[i].red != entry[i].blue ||
+ entry[i].red != entry[i].green) {
+ DRM_DEBUG_KMS(
+ "All LUT entries must have equal r/g/b\n");
+ return -EINVAL;
+ }
+ }
+
+ if (i > 0 && tests & LUT_NON_DECREASING) {
+ if (entry[i].red < entry[i - 1].red ||
+ entry[i].green < entry[i - 1].green ||
+ entry[i].blue < entry[i - 1].blue) {
+ DRM_DEBUG_KMS(
+ "LUT entries must never decrease.\n");
+ return -EINVAL;
+ }
+ }
+ }
+
+ return 0;
+}
+
static int check_luts(const struct intel_crtc_state *crtc_state)
{
struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
const struct drm_property_blob *gamma_lut = crtc_state->hw.gamma_lut;
const struct drm_property_blob *degamma_lut = crtc_state->hw.degamma_lut;
int gamma_length, degamma_length;
- u32 gamma_tests, degamma_tests;
+ u32 gamma_channels_tests, degamma_channels_tests;

/* Always allow legacy gamma LUT with no further checking. */
if (crtc_state_is_legacy_gamma(crtc_state))
@@ -1300,15 +1333,15 @@ static int check_luts(const struct intel_crtc_state *crtc_state)

degamma_length = INTEL_INFO(dev_priv)->color.degamma_lut_size;
gamma_length = INTEL_INFO(dev_priv)->color.gamma_lut_size;
- degamma_tests = INTEL_INFO(dev_priv)->color.degamma_lut_tests;
- gamma_tests = INTEL_INFO(dev_priv)->color.gamma_lut_tests;
+ degamma_channels_tests = INTEL_INFO(dev_priv)->color.degamma_lut_tests;
+ gamma_channels_tests = INTEL_INFO(dev_priv)->color.gamma_lut_tests;

if (check_lut_size(degamma_lut, degamma_length) ||
check_lut_size(gamma_lut, gamma_length))
return -EINVAL;

- if (drm_color_lut_check(degamma_lut, degamma_tests) ||
- drm_color_lut_check(gamma_lut, gamma_tests))
+ if (test_luts(degamma_lut, degamma_channels_tests) ||
+ test_luts(gamma_lut, gamma_channels_tests))
return -EINVAL;

return 0;
diff --git a/drivers/gpu/drm/i915/display/intel_color.h b/drivers/gpu/drm/i915/display/intel_color.h
index 173727aaa24d2..621f8f2c95467 100644
--- a/drivers/gpu/drm/i915/display/intel_color.h
+++ b/drivers/gpu/drm/i915/display/intel_color.h
@@ -7,11 +7,38 @@
#define __INTEL_COLOR_H__

#include <linux/types.h>
+#include <linux/bits.h>

struct intel_crtc_state;
struct intel_crtc;
struct drm_property_blob;

+/**
+ * enum lut_channels_tests - hw-specific LUT tests to perform
+ *
+ * The test_luts() function takes a bitmask of the values here to
+ * determine which tests to apply to a userspace-provided LUT.
+ */
+enum lut_channels_tests {
+ /**
+ * @LUT_EQUAL_CHANNELS:
+ *
+ * Checks whether the entries of a LUT all have equal values for the
+ * red, green, and blue channels. Intended for hardware that only
+ * accepts a single value per LUT entry and assumes that value applies
+ * to all three color components.
+ */
+ LUT_EQUAL_CHANNELS = BIT(0),
+
+ /**
+ * @LUT_NON_DECREASING:
+ *
+ * Checks whether the entries of a LUT are always flat or increasing
+ * (never decreasing).
+ */
+ LUT_NON_DECREASING = BIT(1),
+};
+
void intel_color_init(struct intel_crtc *crtc);
int intel_color_check(struct intel_crtc_state *crtc_state);
void intel_color_commit(const struct intel_crtc_state *crtc_state);
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 5e8348f506b8d..17798cfc13eb4 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -29,6 +29,7 @@
#include <drm/i915_pciids.h>

#include "display/intel_fbdev.h"
+#include "display/intel_color.h"

#include "i915_drv.h"
#include "i915_perf.h"
@@ -132,23 +133,27 @@

#define I9XX_COLORS \
.color = { .gamma_lut_size = 256 }
-#define I965_COLORS \
- .color = { .gamma_lut_size = 129, \
- .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
+#define I965_COLORS \
+ .color = { \
+ .gamma_lut_size = 129, \
+ .gamma_lut_tests = LUT_NON_DECREASING, \
}
#define ILK_COLORS \
.color = { .gamma_lut_size = 1024 }
#define IVB_COLORS \
.color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 }
-#define CHV_COLORS \
- .color = { .degamma_lut_size = 65, .gamma_lut_size = 257, \
- .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
- .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
+#define CHV_COLORS \
+ .color = { \
+ .degamma_lut_size = 65, \
+ .gamma_lut_size = 257, \
+ .degamma_lut_tests = LUT_NON_DECREASING, \
+ .gamma_lut_tests = LUT_NON_DECREASING, \
}
-#define GLK_COLORS \
- .color = { .degamma_lut_size = 33, .gamma_lut_size = 1024, \
- .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
- DRM_COLOR_LUT_EQUAL_CHANNELS, \
+#define GLK_COLORS \
+ .color = { \
+ .degamma_lut_size = 33, \
+ .gamma_lut_size = 1024, \
+ .degamma_lut_tests = LUT_NON_DECREASING | LUT_EQUAL_CHANNELS, \
}

/* Keep in gen based order, and chronological order within a gen */
diff --git a/include/drm/drm_color_mgmt.h b/include/drm/drm_color_mgmt.h
index 81c298488b0c8..3537f3eeb3872 100644
--- a/include/drm/drm_color_mgmt.h
+++ b/include/drm/drm_color_mgmt.h
@@ -93,31 +93,4 @@ int drm_plane_create_color_properties(struct drm_plane *plane,
enum drm_color_encoding default_encoding,
enum drm_color_range default_range);

-/**
- * enum drm_color_lut_tests - hw-specific LUT tests to perform
- *
- * The drm_color_lut_check() function takes a bitmask of the values here to
- * determine which tests to apply to a userspace-provided LUT.
- */
-enum drm_color_lut_tests {
- /**
- * @DRM_COLOR_LUT_EQUAL_CHANNELS:
- *
- * Checks whether the entries of a LUT all have equal values for the
- * red, green, and blue channels. Intended for hardware that only
- * accepts a single value per LUT entry and assumes that value applies
- * to all three color components.
- */
- DRM_COLOR_LUT_EQUAL_CHANNELS = BIT(0),
-
- /**
- * @DRM_COLOR_LUT_NON_DECREASING:
- *
- * Checks whether the entries of a LUT are always flat or increasing
- * (never decreasing).
- */
- DRM_COLOR_LUT_NON_DECREASING = BIT(1),
-};
-
-int drm_color_lut_check(const struct drm_property_blob *lut, u32 tests);
#endif
--
2.34.0.rc0.344.g81b53c2807-goog



2021-11-04 16:51:05

by Mark Yacoub

[permalink] [raw]
Subject: [PATCH v4 3/3] amd/amdgpu_dm: Verify Gamma and Degamma LUT sizes using DRM Core check

From: Mark Yacoub <[email protected]>

[Why]
drm_atomic_helper_check_crtc now verifies both legacy and non-legacy LUT
sizes. There is no need to check it within amdgpu_dm_atomic_check.

[How]
Remove the local call to verify LUT sizes and use DRM Core function
instead.

Tested on ChromeOS Zork.

v1:
Remove amdgpu_dm_verify_lut_sizes everywhere.

Signed-off-by: Mark Yacoub <[email protected]>
Reviewed-by: Sean Paul <[email protected]>
---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 8 ++---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 1 -
.../amd/display/amdgpu_dm/amdgpu_dm_color.c | 35 -------------------
3 files changed, 4 insertions(+), 40 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index f74663b6b046e..47f8de1cfc3a5 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -10244,6 +10244,10 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
}
}
#endif
+ ret = drm_atomic_helper_check_crtcs(state);
+ if (ret)
+ return ret;
+
for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state, new_crtc_state, i) {
dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);

@@ -10253,10 +10257,6 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
dm_old_crtc_state->dsc_force_changed == false)
continue;

- ret = amdgpu_dm_verify_lut_sizes(new_crtc_state);
- if (ret)
- goto fail;
-
if (!new_crtc_state->enable)
continue;

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
index fcb9c4a629c32..22730e5542092 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h
@@ -617,7 +617,6 @@ void amdgpu_dm_trigger_timing_sync(struct drm_device *dev);
#define MAX_COLOR_LEGACY_LUT_ENTRIES 256

void amdgpu_dm_init_color_mod(void);
-int amdgpu_dm_verify_lut_sizes(const struct drm_crtc_state *crtc_state);
int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc);
int amdgpu_dm_update_plane_color_mgmt(struct dm_crtc_state *crtc,
struct dc_plane_state *dc_plane_state);
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
index a022e5bb30a5c..319f8a8a89835 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_color.c
@@ -284,37 +284,6 @@ static int __set_input_tf(struct dc_transfer_func *func,
return res ? 0 : -ENOMEM;
}

-/**
- * Verifies that the Degamma and Gamma LUTs attached to the |crtc_state| are of
- * the expected size.
- * Returns 0 on success.
- */
-int amdgpu_dm_verify_lut_sizes(const struct drm_crtc_state *crtc_state)
-{
- const struct drm_color_lut *lut = NULL;
- uint32_t size = 0;
-
- lut = __extract_blob_lut(crtc_state->degamma_lut, &size);
- if (lut && size != MAX_COLOR_LUT_ENTRIES) {
- DRM_DEBUG_DRIVER(
- "Invalid Degamma LUT size. Should be %u but got %u.\n",
- MAX_COLOR_LUT_ENTRIES, size);
- return -EINVAL;
- }
-
- lut = __extract_blob_lut(crtc_state->gamma_lut, &size);
- if (lut && size != MAX_COLOR_LUT_ENTRIES &&
- size != MAX_COLOR_LEGACY_LUT_ENTRIES) {
- DRM_DEBUG_DRIVER(
- "Invalid Gamma LUT size. Should be %u (or %u for legacy) but got %u.\n",
- MAX_COLOR_LUT_ENTRIES, MAX_COLOR_LEGACY_LUT_ENTRIES,
- size);
- return -EINVAL;
- }
-
- return 0;
-}
-
/**
* amdgpu_dm_update_crtc_color_mgmt: Maps DRM color management to DC stream.
* @crtc: amdgpu_dm crtc state
@@ -348,10 +317,6 @@ int amdgpu_dm_update_crtc_color_mgmt(struct dm_crtc_state *crtc)
bool is_legacy;
int r;

- r = amdgpu_dm_verify_lut_sizes(&crtc->base);
- if (r)
- return r;
-
degamma_lut = __extract_blob_lut(crtc->base.degamma_lut, &degamma_size);
regamma_lut = __extract_blob_lut(crtc->base.gamma_lut, &regamma_size);

--
2.34.0.rc0.344.g81b53c2807-goog


2021-11-04 17:52:28

by Jani Nikula

[permalink] [raw]
Subject: Re: [PATCH v4 1/3] drm: Move drm_color_lut_check implementation internal to intel_color

On Thu, 04 Nov 2021, Mark Yacoub <[email protected]> wrote:
> From: Mark Yacoub <[email protected]>
>
> [Why]
> The tests of LUT_EQUAL_CHANNELS and LUT_NON_DECREASING are currently
> unique to i915 driver.
> Freeing up the function name for the more generic LUT checks to folllow
>
> Tested on Eldrid ChromeOS (TGL).
>
> v1:
> Stuff the test function from DRM to intel driver.
>
> Signed-off-by: Mark Yacoub <[email protected]>
> ---
> drivers/gpu/drm/drm_color_mgmt.c | 43 ----------------------
> drivers/gpu/drm/i915/display/intel_color.c | 43 +++++++++++++++++++---
> drivers/gpu/drm/i915/display/intel_color.h | 27 ++++++++++++++
> drivers/gpu/drm/i915/i915_pci.c | 27 ++++++++------
> include/drm/drm_color_mgmt.h | 27 --------------
> 5 files changed, 81 insertions(+), 86 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_color_mgmt.c b/drivers/gpu/drm/drm_color_mgmt.c
> index bb14f488c8f6c..16a07f84948f3 100644
> --- a/drivers/gpu/drm/drm_color_mgmt.c
> +++ b/drivers/gpu/drm/drm_color_mgmt.c
> @@ -583,46 +583,3 @@ int drm_plane_create_color_properties(struct drm_plane *plane,
> return 0;
> }
> EXPORT_SYMBOL(drm_plane_create_color_properties);
> -
> -/**
> - * drm_color_lut_check - check validity of lookup table
> - * @lut: property blob containing LUT to check
> - * @tests: bitmask of tests to run
> - *
> - * Helper to check whether a userspace-provided lookup table is valid and
> - * satisfies hardware requirements. Drivers pass a bitmask indicating which of
> - * the tests in &drm_color_lut_tests should be performed.
> - *
> - * Returns 0 on success, -EINVAL on failure.
> - */
> -int drm_color_lut_check(const struct drm_property_blob *lut, u32 tests)
> -{
> - const struct drm_color_lut *entry;
> - int i;
> -
> - if (!lut || !tests)
> - return 0;
> -
> - entry = lut->data;
> - for (i = 0; i < drm_color_lut_size(lut); i++) {
> - if (tests & DRM_COLOR_LUT_EQUAL_CHANNELS) {
> - if (entry[i].red != entry[i].blue ||
> - entry[i].red != entry[i].green) {
> - DRM_DEBUG_KMS("All LUT entries must have equal r/g/b\n");
> - return -EINVAL;
> - }
> - }
> -
> - if (i > 0 && tests & DRM_COLOR_LUT_NON_DECREASING) {
> - if (entry[i].red < entry[i - 1].red ||
> - entry[i].green < entry[i - 1].green ||
> - entry[i].blue < entry[i - 1].blue) {
> - DRM_DEBUG_KMS("LUT entries must never decrease.\n");
> - return -EINVAL;
> - }
> - }
> - }
> -
> - return 0;
> -}
> -EXPORT_SYMBOL(drm_color_lut_check);
> diff --git a/drivers/gpu/drm/i915/display/intel_color.c b/drivers/gpu/drm/i915/display/intel_color.c
> index dab892d2251ba..bde98a155c9f3 100644
> --- a/drivers/gpu/drm/i915/display/intel_color.c
> +++ b/drivers/gpu/drm/i915/display/intel_color.c
> @@ -1279,13 +1279,46 @@ static int check_lut_size(const struct drm_property_blob *lut, int expected)
> return 0;
> }
>
> +static int test_luts(const struct drm_property_blob *lut, u32 tests)
> +{
> + const struct drm_color_lut *entry;
> + int i;
> +
> + if (!lut || !tests)
> + return 0;
> +
> + entry = lut->data;
> + for (i = 0; i < drm_color_lut_size(lut); i++) {
> + if (tests & LUT_EQUAL_CHANNELS) {
> + if (entry[i].red != entry[i].blue ||
> + entry[i].red != entry[i].green) {
> + DRM_DEBUG_KMS(
> + "All LUT entries must have equal r/g/b\n");
> + return -EINVAL;
> + }
> + }
> +
> + if (i > 0 && tests & LUT_NON_DECREASING) {
> + if (entry[i].red < entry[i - 1].red ||
> + entry[i].green < entry[i - 1].green ||
> + entry[i].blue < entry[i - 1].blue) {
> + DRM_DEBUG_KMS(
> + "LUT entries must never decrease.\n");
> + return -EINVAL;
> + }
> + }
> + }
> +
> + return 0;
> +}
> +
> static int check_luts(const struct intel_crtc_state *crtc_state)
> {
> struct drm_i915_private *dev_priv = to_i915(crtc_state->uapi.crtc->dev);
> const struct drm_property_blob *gamma_lut = crtc_state->hw.gamma_lut;
> const struct drm_property_blob *degamma_lut = crtc_state->hw.degamma_lut;
> int gamma_length, degamma_length;
> - u32 gamma_tests, degamma_tests;
> + u32 gamma_channels_tests, degamma_channels_tests;
>
> /* Always allow legacy gamma LUT with no further checking. */
> if (crtc_state_is_legacy_gamma(crtc_state))
> @@ -1300,15 +1333,15 @@ static int check_luts(const struct intel_crtc_state *crtc_state)
>
> degamma_length = INTEL_INFO(dev_priv)->color.degamma_lut_size;
> gamma_length = INTEL_INFO(dev_priv)->color.gamma_lut_size;
> - degamma_tests = INTEL_INFO(dev_priv)->color.degamma_lut_tests;
> - gamma_tests = INTEL_INFO(dev_priv)->color.gamma_lut_tests;
> + degamma_channels_tests = INTEL_INFO(dev_priv)->color.degamma_lut_tests;
> + gamma_channels_tests = INTEL_INFO(dev_priv)->color.gamma_lut_tests;
>
> if (check_lut_size(degamma_lut, degamma_length) ||
> check_lut_size(gamma_lut, gamma_length))
> return -EINVAL;
>
> - if (drm_color_lut_check(degamma_lut, degamma_tests) ||
> - drm_color_lut_check(gamma_lut, gamma_tests))
> + if (test_luts(degamma_lut, degamma_channels_tests) ||
> + test_luts(gamma_lut, gamma_channels_tests))
> return -EINVAL;
>
> return 0;
> diff --git a/drivers/gpu/drm/i915/display/intel_color.h b/drivers/gpu/drm/i915/display/intel_color.h
> index 173727aaa24d2..621f8f2c95467 100644
> --- a/drivers/gpu/drm/i915/display/intel_color.h
> +++ b/drivers/gpu/drm/i915/display/intel_color.h
> @@ -7,11 +7,38 @@
> #define __INTEL_COLOR_H__
>
> #include <linux/types.h>
> +#include <linux/bits.h>
>
> struct intel_crtc_state;
> struct intel_crtc;
> struct drm_property_blob;
>
> +/**
> + * enum lut_channels_tests - hw-specific LUT tests to perform
> + *
> + * The test_luts() function takes a bitmask of the values here to
> + * determine which tests to apply to a userspace-provided LUT.
> + */
> +enum lut_channels_tests {
> + /**
> + * @LUT_EQUAL_CHANNELS:
> + *
> + * Checks whether the entries of a LUT all have equal values for the
> + * red, green, and blue channels. Intended for hardware that only
> + * accepts a single value per LUT entry and assumes that value applies
> + * to all three color components.
> + */
> + LUT_EQUAL_CHANNELS = BIT(0),
> +
> + /**
> + * @LUT_NON_DECREASING:
> + *
> + * Checks whether the entries of a LUT are always flat or increasing
> + * (never decreasing).
> + */
> + LUT_NON_DECREASING = BIT(1),
> +};

IMO using enums for defining bits is semantically wrong. These are not
enumerations. The enum as a type is not used for anything. I'd just make
these macros.

Everything defined here should be prefixed intel_color_ or INTEL_COLOR_.

BR,
Jani.


> +
> void intel_color_init(struct intel_crtc *crtc);
> int intel_color_check(struct intel_crtc_state *crtc_state);
> void intel_color_commit(const struct intel_crtc_state *crtc_state);
> diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
> index 5e8348f506b8d..17798cfc13eb4 100644
> --- a/drivers/gpu/drm/i915/i915_pci.c
> +++ b/drivers/gpu/drm/i915/i915_pci.c
> @@ -29,6 +29,7 @@
> #include <drm/i915_pciids.h>
>
> #include "display/intel_fbdev.h"
> +#include "display/intel_color.h"
>
> #include "i915_drv.h"
> #include "i915_perf.h"
> @@ -132,23 +133,27 @@
>
> #define I9XX_COLORS \
> .color = { .gamma_lut_size = 256 }
> -#define I965_COLORS \
> - .color = { .gamma_lut_size = 129, \
> - .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
> +#define I965_COLORS \
> + .color = { \
> + .gamma_lut_size = 129, \
> + .gamma_lut_tests = LUT_NON_DECREASING, \
> }
> #define ILK_COLORS \
> .color = { .gamma_lut_size = 1024 }
> #define IVB_COLORS \
> .color = { .degamma_lut_size = 1024, .gamma_lut_size = 1024 }
> -#define CHV_COLORS \
> - .color = { .degamma_lut_size = 65, .gamma_lut_size = 257, \
> - .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
> - .gamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING, \
> +#define CHV_COLORS \
> + .color = { \
> + .degamma_lut_size = 65, \
> + .gamma_lut_size = 257, \
> + .degamma_lut_tests = LUT_NON_DECREASING, \
> + .gamma_lut_tests = LUT_NON_DECREASING, \
> }
> -#define GLK_COLORS \
> - .color = { .degamma_lut_size = 33, .gamma_lut_size = 1024, \
> - .degamma_lut_tests = DRM_COLOR_LUT_NON_DECREASING | \
> - DRM_COLOR_LUT_EQUAL_CHANNELS, \
> +#define GLK_COLORS \
> + .color = { \
> + .degamma_lut_size = 33, \
> + .gamma_lut_size = 1024, \
> + .degamma_lut_tests = LUT_NON_DECREASING | LUT_EQUAL_CHANNELS, \
> }
>
> /* Keep in gen based order, and chronological order within a gen */
> diff --git a/include/drm/drm_color_mgmt.h b/include/drm/drm_color_mgmt.h
> index 81c298488b0c8..3537f3eeb3872 100644
> --- a/include/drm/drm_color_mgmt.h
> +++ b/include/drm/drm_color_mgmt.h
> @@ -93,31 +93,4 @@ int drm_plane_create_color_properties(struct drm_plane *plane,
> enum drm_color_encoding default_encoding,
> enum drm_color_range default_range);
>
> -/**
> - * enum drm_color_lut_tests - hw-specific LUT tests to perform
> - *
> - * The drm_color_lut_check() function takes a bitmask of the values here to
> - * determine which tests to apply to a userspace-provided LUT.
> - */
> -enum drm_color_lut_tests {
> - /**
> - * @DRM_COLOR_LUT_EQUAL_CHANNELS:
> - *
> - * Checks whether the entries of a LUT all have equal values for the
> - * red, green, and blue channels. Intended for hardware that only
> - * accepts a single value per LUT entry and assumes that value applies
> - * to all three color components.
> - */
> - DRM_COLOR_LUT_EQUAL_CHANNELS = BIT(0),
> -
> - /**
> - * @DRM_COLOR_LUT_NON_DECREASING:
> - *
> - * Checks whether the entries of a LUT are always flat or increasing
> - * (never decreasing).
> - */
> - DRM_COLOR_LUT_NON_DECREASING = BIT(1),
> -};
> -
> -int drm_color_lut_check(const struct drm_property_blob *lut, u32 tests);
> #endif

--
Jani Nikula, Intel Open Source Graphics Center