* [PATCH v3 0/1] 8bpp support for Ingenic-drm
@ 2020-09-27 19:36 Paul Cercueil
2020-09-27 19:36 ` [PATCH v3 1/1] drm/ingenic: Add support for paletted 8bpp Paul Cercueil
0 siblings, 1 reply; 4+ messages in thread
From: Paul Cercueil @ 2020-09-27 19:36 UTC (permalink / raw)
To: David Airlie, Daniel Vetter
Cc: Sam Ravnborg, od, dri-devel, linux-kernel, Paul Cercueil
Final (?) version of my "small improvements to ingenic-drm" patchset.
Most of the patches of V2 have been merged to drm-misc-next, except this
one which required some more work.
In the CRTC's .atomic_check callback, the size of the gamma LUT property
is now checked, so that only a complete 256-entry palette is accepted.
Cheers,
-Paul
Paul Cercueil (1):
drm/ingenic: Add support for paletted 8bpp
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 66 +++++++++++++++++++++--
1 file changed, 62 insertions(+), 4 deletions(-)
--
2.28.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 1/1] drm/ingenic: Add support for paletted 8bpp
2020-09-27 19:36 [PATCH v3 0/1] 8bpp support for Ingenic-drm Paul Cercueil
@ 2020-09-27 19:36 ` Paul Cercueil
2020-09-27 20:27 ` Sam Ravnborg
0 siblings, 1 reply; 4+ messages in thread
From: Paul Cercueil @ 2020-09-27 19:36 UTC (permalink / raw)
To: David Airlie, Daniel Vetter
Cc: Sam Ravnborg, od, dri-devel, linux-kernel, Paul Cercueil
On JZ4725B and newer, the F0 plane supports paletted 8bpp with a
256-entry palette. Add support for it.
v3: Only accept a full 256-entry palette.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 66 +++++++++++++++++++++--
1 file changed, 62 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
index 589fc0c60716..0225dc1f5eb8 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
@@ -21,6 +21,7 @@
#include <drm/drm_atomic.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_bridge.h>
+#include <drm/drm_color_mgmt.h>
#include <drm/drm_crtc.h>
#include <drm/drm_crtc_helper.h>
#include <drm/drm_damage_helper.h>
@@ -50,6 +51,8 @@ struct ingenic_dma_hwdesc {
struct ingenic_dma_hwdescs {
struct ingenic_dma_hwdesc hwdesc_f0;
struct ingenic_dma_hwdesc hwdesc_f1;
+ struct ingenic_dma_hwdesc hwdesc_pal;
+ u16 palette[256] __aligned(16);
};
struct jz_soc_info {
@@ -249,6 +252,12 @@ static int ingenic_drm_crtc_atomic_check(struct drm_crtc *crtc,
struct ingenic_drm *priv = drm_crtc_get_priv(crtc);
struct drm_plane_state *f1_state, *f0_state, *ipu_state = NULL;
+ if (state->gamma_lut &&
+ drm_color_lut_size(state->gamma_lut) != ARRAY_SIZE(priv->dma_hwdescs->palette)) {
+ dev_dbg(priv->dev, "Invalid palette size\n");
+ return -EINVAL;
+ }
+
if (drm_atomic_crtc_needs_modeset(state) && priv->soc_info->has_osd) {
f1_state = drm_atomic_get_plane_state(state->state, &priv->f1);
if (IS_ERR(f1_state))
@@ -470,6 +479,9 @@ void ingenic_drm_plane_config(struct device *dev,
JZ_LCD_OSDCTRL_BPP_MASK, ctrl);
} else {
switch (fourcc) {
+ case DRM_FORMAT_C8:
+ ctrl |= JZ_LCD_CTRL_BPP_8;
+ break;
case DRM_FORMAT_XRGB1555:
ctrl |= JZ_LCD_CTRL_RGB555;
fallthrough;
@@ -541,16 +553,34 @@ void ingenic_drm_sync_data(struct device *dev,
}
}
+static void ingenic_drm_update_palette(struct ingenic_drm *priv,
+ const struct drm_color_lut *lut)
+{
+ unsigned int i;
+
+ for (i = 0; i < ARRAY_SIZE(priv->dma_hwdescs->palette); i++) {
+ u16 color = drm_color_lut_extract(lut[i].red, 5) << 11
+ | drm_color_lut_extract(lut[i].green, 6) << 5
+ | drm_color_lut_extract(lut[i].blue, 5);
+
+ priv->dma_hwdescs->palette[i] = color;
+ }
+}
+
static void ingenic_drm_plane_atomic_update(struct drm_plane *plane,
struct drm_plane_state *oldstate)
{
struct ingenic_drm *priv = drm_device_get_priv(plane->dev);
struct drm_plane_state *state = plane->state;
+ struct drm_crtc_state *crtc_state;
struct ingenic_dma_hwdesc *hwdesc;
- unsigned int width, height, cpp;
+ unsigned int width, height, cpp, offset;
dma_addr_t addr;
+ u32 fourcc;
if (state && state->fb) {
+ crtc_state = state->crtc->state;
+
ingenic_drm_sync_data(priv->dev, oldstate, state);
addr = drm_fb_cma_get_gem_addr(state->fb, state, 0);
@@ -566,9 +596,23 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane,
hwdesc->addr = addr;
hwdesc->cmd = JZ_LCD_CMD_EOF_IRQ | (width * height * cpp / 4);
- if (drm_atomic_crtc_needs_modeset(state->crtc->state))
- ingenic_drm_plane_config(priv->dev, plane,
- state->fb->format->format);
+ if (drm_atomic_crtc_needs_modeset(crtc_state)) {
+ fourcc = state->fb->format->format;
+
+ ingenic_drm_plane_config(priv->dev, plane, fourcc);
+
+ if (fourcc == DRM_FORMAT_C8)
+ offset = offsetof(struct ingenic_dma_hwdescs, hwdesc_pal);
+ else
+ offset = offsetof(struct ingenic_dma_hwdescs, hwdesc_f0);
+
+ priv->dma_hwdescs->hwdesc_f0.next = priv->dma_hwdescs_phys + offset;
+
+ crtc_state->color_mgmt_changed = fourcc == DRM_FORMAT_C8;
+ }
+
+ if (crtc_state->color_mgmt_changed)
+ ingenic_drm_update_palette(priv, crtc_state->gamma_lut->data);
}
}
@@ -964,6 +1008,15 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
priv->dma_hwdescs->hwdesc_f1.next = dma_hwdesc_phys_f1;
priv->dma_hwdescs->hwdesc_f1.id = 0xf1;
+ /* Configure DMA hwdesc for palette */
+ priv->dma_hwdescs->hwdesc_pal.next = priv->dma_hwdescs_phys
+ + offsetof(struct ingenic_dma_hwdescs, hwdesc_f0);
+ priv->dma_hwdescs->hwdesc_pal.id = 0xc0;
+ priv->dma_hwdescs->hwdesc_pal.addr = priv->dma_hwdescs_phys
+ + offsetof(struct ingenic_dma_hwdescs, palette);
+ priv->dma_hwdescs->hwdesc_pal.cmd = JZ_LCD_CMD_ENABLE_PAL
+ | (sizeof(priv->dma_hwdescs->palette) / 4);
+
if (soc_info->has_osd)
priv->ipu_plane = drm_plane_from_index(drm, 0);
@@ -990,6 +1043,9 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
return ret;
}
+ drm_crtc_enable_color_mgmt(&priv->crtc, 0, false,
+ ARRAY_SIZE(priv->dma_hwdescs->palette));
+
if (soc_info->has_osd) {
drm_plane_helper_add(&priv->f0,
&ingenic_drm_plane_helper_funcs);
@@ -1225,6 +1281,7 @@ static const u32 jz4725b_formats_f1[] = {
};
static const u32 jz4725b_formats_f0[] = {
+ DRM_FORMAT_C8,
DRM_FORMAT_XRGB1555,
DRM_FORMAT_RGB565,
DRM_FORMAT_XRGB8888,
@@ -1239,6 +1296,7 @@ static const u32 jz4770_formats_f1[] = {
};
static const u32 jz4770_formats_f0[] = {
+ DRM_FORMAT_C8,
DRM_FORMAT_XRGB1555,
DRM_FORMAT_RGB565,
DRM_FORMAT_RGB888,
--
2.28.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3 1/1] drm/ingenic: Add support for paletted 8bpp
2020-09-27 19:36 ` [PATCH v3 1/1] drm/ingenic: Add support for paletted 8bpp Paul Cercueil
@ 2020-09-27 20:27 ` Sam Ravnborg
2020-09-27 23:36 ` Paul Cercueil
0 siblings, 1 reply; 4+ messages in thread
From: Sam Ravnborg @ 2020-09-27 20:27 UTC (permalink / raw)
To: Paul Cercueil; +Cc: David Airlie, Daniel Vetter, od, dri-devel, linux-kernel
On Sun, Sep 27, 2020 at 09:36:45PM +0200, Paul Cercueil wrote:
> On JZ4725B and newer, the F0 plane supports paletted 8bpp with a
> 256-entry palette. Add support for it.
>
> v3: Only accept a full 256-entry palette.
>
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Looks good.
Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
> ---
> drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 66 +++++++++++++++++++++--
> 1 file changed, 62 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> index 589fc0c60716..0225dc1f5eb8 100644
> --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
> @@ -21,6 +21,7 @@
> #include <drm/drm_atomic.h>
> #include <drm/drm_atomic_helper.h>
> #include <drm/drm_bridge.h>
> +#include <drm/drm_color_mgmt.h>
> #include <drm/drm_crtc.h>
> #include <drm/drm_crtc_helper.h>
> #include <drm/drm_damage_helper.h>
> @@ -50,6 +51,8 @@ struct ingenic_dma_hwdesc {
> struct ingenic_dma_hwdescs {
> struct ingenic_dma_hwdesc hwdesc_f0;
> struct ingenic_dma_hwdesc hwdesc_f1;
> + struct ingenic_dma_hwdesc hwdesc_pal;
> + u16 palette[256] __aligned(16);
> };
>
> struct jz_soc_info {
> @@ -249,6 +252,12 @@ static int ingenic_drm_crtc_atomic_check(struct drm_crtc *crtc,
> struct ingenic_drm *priv = drm_crtc_get_priv(crtc);
> struct drm_plane_state *f1_state, *f0_state, *ipu_state = NULL;
>
> + if (state->gamma_lut &&
> + drm_color_lut_size(state->gamma_lut) != ARRAY_SIZE(priv->dma_hwdescs->palette)) {
> + dev_dbg(priv->dev, "Invalid palette size\n");
> + return -EINVAL;
> + }
> +
> if (drm_atomic_crtc_needs_modeset(state) && priv->soc_info->has_osd) {
> f1_state = drm_atomic_get_plane_state(state->state, &priv->f1);
> if (IS_ERR(f1_state))
> @@ -470,6 +479,9 @@ void ingenic_drm_plane_config(struct device *dev,
> JZ_LCD_OSDCTRL_BPP_MASK, ctrl);
> } else {
> switch (fourcc) {
> + case DRM_FORMAT_C8:
> + ctrl |= JZ_LCD_CTRL_BPP_8;
> + break;
> case DRM_FORMAT_XRGB1555:
> ctrl |= JZ_LCD_CTRL_RGB555;
> fallthrough;
> @@ -541,16 +553,34 @@ void ingenic_drm_sync_data(struct device *dev,
> }
> }
>
> +static void ingenic_drm_update_palette(struct ingenic_drm *priv,
> + const struct drm_color_lut *lut)
> +{
> + unsigned int i;
> +
> + for (i = 0; i < ARRAY_SIZE(priv->dma_hwdescs->palette); i++) {
> + u16 color = drm_color_lut_extract(lut[i].red, 5) << 11
> + | drm_color_lut_extract(lut[i].green, 6) << 5
> + | drm_color_lut_extract(lut[i].blue, 5);
> +
> + priv->dma_hwdescs->palette[i] = color;
> + }
> +}
> +
> static void ingenic_drm_plane_atomic_update(struct drm_plane *plane,
> struct drm_plane_state *oldstate)
> {
> struct ingenic_drm *priv = drm_device_get_priv(plane->dev);
> struct drm_plane_state *state = plane->state;
> + struct drm_crtc_state *crtc_state;
> struct ingenic_dma_hwdesc *hwdesc;
> - unsigned int width, height, cpp;
> + unsigned int width, height, cpp, offset;
> dma_addr_t addr;
> + u32 fourcc;
>
> if (state && state->fb) {
> + crtc_state = state->crtc->state;
> +
> ingenic_drm_sync_data(priv->dev, oldstate, state);
>
> addr = drm_fb_cma_get_gem_addr(state->fb, state, 0);
> @@ -566,9 +596,23 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane,
> hwdesc->addr = addr;
> hwdesc->cmd = JZ_LCD_CMD_EOF_IRQ | (width * height * cpp / 4);
>
> - if (drm_atomic_crtc_needs_modeset(state->crtc->state))
> - ingenic_drm_plane_config(priv->dev, plane,
> - state->fb->format->format);
> + if (drm_atomic_crtc_needs_modeset(crtc_state)) {
> + fourcc = state->fb->format->format;
> +
> + ingenic_drm_plane_config(priv->dev, plane, fourcc);
> +
> + if (fourcc == DRM_FORMAT_C8)
> + offset = offsetof(struct ingenic_dma_hwdescs, hwdesc_pal);
> + else
> + offset = offsetof(struct ingenic_dma_hwdescs, hwdesc_f0);
> +
> + priv->dma_hwdescs->hwdesc_f0.next = priv->dma_hwdescs_phys + offset;
> +
> + crtc_state->color_mgmt_changed = fourcc == DRM_FORMAT_C8;
> + }
> +
> + if (crtc_state->color_mgmt_changed)
> + ingenic_drm_update_palette(priv, crtc_state->gamma_lut->data);
> }
> }
>
> @@ -964,6 +1008,15 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
> priv->dma_hwdescs->hwdesc_f1.next = dma_hwdesc_phys_f1;
> priv->dma_hwdescs->hwdesc_f1.id = 0xf1;
>
> + /* Configure DMA hwdesc for palette */
> + priv->dma_hwdescs->hwdesc_pal.next = priv->dma_hwdescs_phys
> + + offsetof(struct ingenic_dma_hwdescs, hwdesc_f0);
> + priv->dma_hwdescs->hwdesc_pal.id = 0xc0;
> + priv->dma_hwdescs->hwdesc_pal.addr = priv->dma_hwdescs_phys
> + + offsetof(struct ingenic_dma_hwdescs, palette);
> + priv->dma_hwdescs->hwdesc_pal.cmd = JZ_LCD_CMD_ENABLE_PAL
> + | (sizeof(priv->dma_hwdescs->palette) / 4);
> +
> if (soc_info->has_osd)
> priv->ipu_plane = drm_plane_from_index(drm, 0);
>
> @@ -990,6 +1043,9 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
> return ret;
> }
>
> + drm_crtc_enable_color_mgmt(&priv->crtc, 0, false,
> + ARRAY_SIZE(priv->dma_hwdescs->palette));
> +
> if (soc_info->has_osd) {
> drm_plane_helper_add(&priv->f0,
> &ingenic_drm_plane_helper_funcs);
> @@ -1225,6 +1281,7 @@ static const u32 jz4725b_formats_f1[] = {
> };
>
> static const u32 jz4725b_formats_f0[] = {
> + DRM_FORMAT_C8,
> DRM_FORMAT_XRGB1555,
> DRM_FORMAT_RGB565,
> DRM_FORMAT_XRGB8888,
> @@ -1239,6 +1296,7 @@ static const u32 jz4770_formats_f1[] = {
> };
>
> static const u32 jz4770_formats_f0[] = {
> + DRM_FORMAT_C8,
> DRM_FORMAT_XRGB1555,
> DRM_FORMAT_RGB565,
> DRM_FORMAT_RGB888,
> --
> 2.28.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3 1/1] drm/ingenic: Add support for paletted 8bpp
2020-09-27 20:27 ` Sam Ravnborg
@ 2020-09-27 23:36 ` Paul Cercueil
0 siblings, 0 replies; 4+ messages in thread
From: Paul Cercueil @ 2020-09-27 23:36 UTC (permalink / raw)
To: Sam Ravnborg; +Cc: David Airlie, Daniel Vetter, od, dri-devel, linux-kernel
Le dim. 27 sept. 2020 à 22:27, Sam Ravnborg <sam@ravnborg.org> a
écrit :
> On Sun, Sep 27, 2020 at 09:36:45PM +0200, Paul Cercueil wrote:
>> On JZ4725B and newer, the F0 plane supports paletted 8bpp with a
>> 256-entry palette. Add support for it.
>>
>> v3: Only accept a full 256-entry palette.
>>
>> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
>
> Looks good.
> Reviewed-by: Sam Ravnborg <sam@ravnborg.org>
Pushed to drm-misc-next.
Thanks!
-Paul
>
>> ---
>> drivers/gpu/drm/ingenic/ingenic-drm-drv.c | 66
>> +++++++++++++++++++++--
>> 1 file changed, 62 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
>> b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
>> index 589fc0c60716..0225dc1f5eb8 100644
>> --- a/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
>> +++ b/drivers/gpu/drm/ingenic/ingenic-drm-drv.c
>> @@ -21,6 +21,7 @@
>> #include <drm/drm_atomic.h>
>> #include <drm/drm_atomic_helper.h>
>> #include <drm/drm_bridge.h>
>> +#include <drm/drm_color_mgmt.h>
>> #include <drm/drm_crtc.h>
>> #include <drm/drm_crtc_helper.h>
>> #include <drm/drm_damage_helper.h>
>> @@ -50,6 +51,8 @@ struct ingenic_dma_hwdesc {
>> struct ingenic_dma_hwdescs {
>> struct ingenic_dma_hwdesc hwdesc_f0;
>> struct ingenic_dma_hwdesc hwdesc_f1;
>> + struct ingenic_dma_hwdesc hwdesc_pal;
>> + u16 palette[256] __aligned(16);
>> };
>>
>> struct jz_soc_info {
>> @@ -249,6 +252,12 @@ static int
>> ingenic_drm_crtc_atomic_check(struct drm_crtc *crtc,
>> struct ingenic_drm *priv = drm_crtc_get_priv(crtc);
>> struct drm_plane_state *f1_state, *f0_state, *ipu_state = NULL;
>>
>> + if (state->gamma_lut &&
>> + drm_color_lut_size(state->gamma_lut) !=
>> ARRAY_SIZE(priv->dma_hwdescs->palette)) {
>> + dev_dbg(priv->dev, "Invalid palette size\n");
>> + return -EINVAL;
>> + }
>> +
>> if (drm_atomic_crtc_needs_modeset(state) &&
>> priv->soc_info->has_osd) {
>> f1_state = drm_atomic_get_plane_state(state->state, &priv->f1);
>> if (IS_ERR(f1_state))
>> @@ -470,6 +479,9 @@ void ingenic_drm_plane_config(struct device
>> *dev,
>> JZ_LCD_OSDCTRL_BPP_MASK, ctrl);
>> } else {
>> switch (fourcc) {
>> + case DRM_FORMAT_C8:
>> + ctrl |= JZ_LCD_CTRL_BPP_8;
>> + break;
>> case DRM_FORMAT_XRGB1555:
>> ctrl |= JZ_LCD_CTRL_RGB555;
>> fallthrough;
>> @@ -541,16 +553,34 @@ void ingenic_drm_sync_data(struct device *dev,
>> }
>> }
>>
>> +static void ingenic_drm_update_palette(struct ingenic_drm *priv,
>> + const struct drm_color_lut *lut)
>> +{
>> + unsigned int i;
>> +
>> + for (i = 0; i < ARRAY_SIZE(priv->dma_hwdescs->palette); i++) {
>> + u16 color = drm_color_lut_extract(lut[i].red, 5) << 11
>> + | drm_color_lut_extract(lut[i].green, 6) << 5
>> + | drm_color_lut_extract(lut[i].blue, 5);
>> +
>> + priv->dma_hwdescs->palette[i] = color;
>> + }
>> +}
>> +
>> static void ingenic_drm_plane_atomic_update(struct drm_plane
>> *plane,
>> struct drm_plane_state *oldstate)
>> {
>> struct ingenic_drm *priv = drm_device_get_priv(plane->dev);
>> struct drm_plane_state *state = plane->state;
>> + struct drm_crtc_state *crtc_state;
>> struct ingenic_dma_hwdesc *hwdesc;
>> - unsigned int width, height, cpp;
>> + unsigned int width, height, cpp, offset;
>> dma_addr_t addr;
>> + u32 fourcc;
>>
>> if (state && state->fb) {
>> + crtc_state = state->crtc->state;
>> +
>> ingenic_drm_sync_data(priv->dev, oldstate, state);
>>
>> addr = drm_fb_cma_get_gem_addr(state->fb, state, 0);
>> @@ -566,9 +596,23 @@ static void
>> ingenic_drm_plane_atomic_update(struct drm_plane *plane,
>> hwdesc->addr = addr;
>> hwdesc->cmd = JZ_LCD_CMD_EOF_IRQ | (width * height * cpp / 4);
>>
>> - if (drm_atomic_crtc_needs_modeset(state->crtc->state))
>> - ingenic_drm_plane_config(priv->dev, plane,
>> - state->fb->format->format);
>> + if (drm_atomic_crtc_needs_modeset(crtc_state)) {
>> + fourcc = state->fb->format->format;
>> +
>> + ingenic_drm_plane_config(priv->dev, plane, fourcc);
>> +
>> + if (fourcc == DRM_FORMAT_C8)
>> + offset = offsetof(struct ingenic_dma_hwdescs, hwdesc_pal);
>> + else
>> + offset = offsetof(struct ingenic_dma_hwdescs, hwdesc_f0);
>> +
>> + priv->dma_hwdescs->hwdesc_f0.next = priv->dma_hwdescs_phys +
>> offset;
>> +
>> + crtc_state->color_mgmt_changed = fourcc == DRM_FORMAT_C8;
>> + }
>> +
>> + if (crtc_state->color_mgmt_changed)
>> + ingenic_drm_update_palette(priv, crtc_state->gamma_lut->data);
>> }
>> }
>>
>> @@ -964,6 +1008,15 @@ static int ingenic_drm_bind(struct device
>> *dev, bool has_components)
>> priv->dma_hwdescs->hwdesc_f1.next = dma_hwdesc_phys_f1;
>> priv->dma_hwdescs->hwdesc_f1.id = 0xf1;
>>
>> + /* Configure DMA hwdesc for palette */
>> + priv->dma_hwdescs->hwdesc_pal.next = priv->dma_hwdescs_phys
>> + + offsetof(struct ingenic_dma_hwdescs, hwdesc_f0);
>> + priv->dma_hwdescs->hwdesc_pal.id = 0xc0;
>> + priv->dma_hwdescs->hwdesc_pal.addr = priv->dma_hwdescs_phys
>> + + offsetof(struct ingenic_dma_hwdescs, palette);
>> + priv->dma_hwdescs->hwdesc_pal.cmd = JZ_LCD_CMD_ENABLE_PAL
>> + | (sizeof(priv->dma_hwdescs->palette) / 4);
>> +
>> if (soc_info->has_osd)
>> priv->ipu_plane = drm_plane_from_index(drm, 0);
>>
>> @@ -990,6 +1043,9 @@ static int ingenic_drm_bind(struct device
>> *dev, bool has_components)
>> return ret;
>> }
>>
>> + drm_crtc_enable_color_mgmt(&priv->crtc, 0, false,
>> + ARRAY_SIZE(priv->dma_hwdescs->palette));
>> +
>> if (soc_info->has_osd) {
>> drm_plane_helper_add(&priv->f0,
>> &ingenic_drm_plane_helper_funcs);
>> @@ -1225,6 +1281,7 @@ static const u32 jz4725b_formats_f1[] = {
>> };
>>
>> static const u32 jz4725b_formats_f0[] = {
>> + DRM_FORMAT_C8,
>> DRM_FORMAT_XRGB1555,
>> DRM_FORMAT_RGB565,
>> DRM_FORMAT_XRGB8888,
>> @@ -1239,6 +1296,7 @@ static const u32 jz4770_formats_f1[] = {
>> };
>>
>> static const u32 jz4770_formats_f0[] = {
>> + DRM_FORMAT_C8,
>> DRM_FORMAT_XRGB1555,
>> DRM_FORMAT_RGB565,
>> DRM_FORMAT_RGB888,
>> --
>> 2.28.0
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-09-27 23:36 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-27 19:36 [PATCH v3 0/1] 8bpp support for Ingenic-drm Paul Cercueil
2020-09-27 19:36 ` [PATCH v3 1/1] drm/ingenic: Add support for paletted 8bpp Paul Cercueil
2020-09-27 20:27 ` Sam Ravnborg
2020-09-27 23:36 ` Paul Cercueil
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®