All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stefan Schake <stschake@gmail.com>
To: Eric Anholt <eric@anholt.net>
Cc: dri-devel <dri-devel@lists.freedesktop.org>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm/vc4: Add some missing HVS register definitions.
Date: Wed, 11 Apr 2018 10:58:37 +0200	[thread overview]
Message-ID: <CAOZHkRxa7Lo11tqt4bc0hTGefB8czjvrDPm1nLOcdGEmFd_L4w@mail.gmail.com> (raw)
In-Reply-To: <20180302230358.25153-1-eric@anholt.net>

On Sat, Mar 3, 2018 at 12:03 AM, Eric Anholt <eric@anholt.net> wrote:
> At least the RGBA expand field we should have been setting, because we
> aren't expanding correctly for 565 -> 8888.  Other registers are ones
> that may be interesting for various projects that have been discussed.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
> Cc: Stefan Schake <stschake@gmail.com>
> ---
>  drivers/gpu/drm/vc4/vc4_regs.h | 96 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 96 insertions(+)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h
> index b9749cb24063..ce8bb7486456 100644
> --- a/drivers/gpu/drm/vc4/vc4_regs.h
> +++ b/drivers/gpu/drm/vc4/vc4_regs.h
> @@ -330,6 +330,21 @@
>  #define SCALER_DISPCTRL0                        0x00000040
>  # define SCALER_DISPCTRLX_ENABLE               BIT(31)
>  # define SCALER_DISPCTRLX_RESET                        BIT(30)
> +/* Generates a single frame when VSTART is seen and stops at the last
> + * pixel read from the FIFO.
> + */
> +# define SCALER_DISPCTRLX_ONESHOT              BIT(29)
> +/* Processes a single context in the dlist and then task switch,
> + * instead of an entire line.
> + */
> +# define SCALER_DISPCTRLX_ONECTX               BIT(28)
> +/* Set to have DISPSLAVE return 2 16bpp pixels and no status data. */
> +# define SCALER_DISPCTRLX_FIFO32               BIT(27)
> +/* Turns on output to the DISPSLAVE register instead of the normal
> + * FIFO.
> + */
> +# define SCALER_DISPCTRLX_FIFOREG              BIT(26)
> +
>  # define SCALER_DISPCTRLX_WIDTH_MASK           VC4_MASK(23, 12)
>  # define SCALER_DISPCTRLX_WIDTH_SHIFT          12
>  # define SCALER_DISPCTRLX_HEIGHT_MASK          VC4_MASK(11, 0)
> @@ -402,6 +417,68 @@
>   */
>  # define SCALER_GAMADDR_SRAMENB                        BIT(30)
>
> +#define SCALER_OLEDOFFS                         0x00000080
> +/* Clamps R to [16,235] and G/B to [16,240]. */
> +# define SCALER_OLEDOFFS_YUVCLAMP               BIT(31)
> +
> +/* Chooses which display FIFO the matrix applies to. */
> +# define SCALER_OLEDOFFS_DISPFIFO_MASK          VC4_MASK(25, 24)
> +# define SCALER_OLEDOFFS_DISPFIFO_SHIFT         24
> +# define SCALER_OLEDOFFS_DISPFIFO_DISABLED      0
> +# define SCALER_OLEDOFFS_DISPFIFO_0             1
> +# define SCALER_OLEDOFFS_DISPFIFO_1             2
> +# define SCALER_OLEDOFFS_DISPFIFO_2             3
> +
> +/* Offsets are 8-bit 2s-complement. */
> +# define SCALER_OLEDOFFS_RED_MASK               VC4_MASK(23, 16)
> +# define SCALER_OLEDOFFS_RED_SHIFT              16
> +# define SCALER_OLEDOFFS_GREEN_MASK             VC4_MASK(15, 8)
> +# define SCALER_OLEDOFFS_GREEN_SHIFT            8
> +# define SCALER_OLEDOFFS_BLUE_MASK              VC4_MASK(7, 0)
> +# define SCALER_OLEDOFFS_BLUE_SHIFT             0
> +
> +/* The coefficients are S0.9 fractions. */
> +#define SCALER_OLEDCOEF0                        0x00000084
> +# define SCALER_OLEDCOEF0_B_TO_R_MASK           VC4_MASK(29, 20)
> +# define SCALER_OLEDCOEF0_B_TO_R_SHIFT          20
> +# define SCALER_OLEDCOEF0_B_TO_G_MASK           VC4_MASK(19, 10)
> +# define SCALER_OLEDCOEF0_B_TO_G_SHIFT          10
> +# define SCALER_OLEDCOEF0_B_TO_B_MASK           VC4_MASK(9, 0)
> +# define SCALER_OLEDCOEF0_B_TO_B_SHIFT          0
> +
> +#define SCALER_OLEDCOEF1                        0x00000088
> +# define SCALER_OLEDCOEF1_G_TO_R_MASK           VC4_MASK(29, 20)
> +# define SCALER_OLEDCOEF1_G_TO_R_SHIFT          20
> +# define SCALER_OLEDCOEF1_G_TO_G_MASK           VC4_MASK(19, 10)
> +# define SCALER_OLEDCOEF1_G_TO_G_SHIFT          10
> +# define SCALER_OLEDCOEF1_G_TO_B_MASK           VC4_MASK(9, 0)
> +# define SCALER_OLEDCOEF1_G_TO_B_SHIFT          0
> +
> +#define SCALER_OLEDCOEF2                        0x0000008c
> +# define SCALER_OLEDCOEF2_R_TO_R_MASK           VC4_MASK(29, 20)
> +# define SCALER_OLEDCOEF2_R_TO_R_SHIFT          20
> +# define SCALER_OLEDCOEF2_R_TO_G_MASK           VC4_MASK(19, 10)
> +# define SCALER_OLEDCOEF2_R_TO_G_SHIFT          10
> +# define SCALER_OLEDCOEF2_R_TO_B_MASK           VC4_MASK(9, 0)
> +# define SCALER_OLEDCOEF2_R_TO_B_SHIFT          0
> +
> +/* Slave addresses for DMAing from HVS composition output to other
> + * devices.  The top bits are valid only in !FIFO32 mode.
> + */
> +#define SCALER_DISPSLAVE0                       0x000000c0
> +#define SCALER_DISPSLAVE1                       0x000000c9
> +#define SCALER_DISPSLAVE2                       0x000000d0
> +# define SCALER_DISPSLAVE_ISSUE_VSTART          BIT(31)
> +# define SCALER_DISPSLAVE_ISSUE_HSTART          BIT(30)
> +/* Set when the current line has been read and an HSTART is required. */
> +# define SCALER_DISPSLAVE_EOL                   BIT(26)
> +/* Set when the display FIFO is empty. */
> +# define SCALER_DISPSLAVE_EMPTY                 BIT(25)
> +/* Set when there is RGB data ready to read. */
> +# define SCALER_DISPSLAVE_VALID                 BIT(24)
> +# define SCALER_DISPSLAVE_RGB_MASK              VC4_MASK(23, 0)
> +# define SCALER_DISPSLAVE_RGB_SHIFT             0
> +
>  #define SCALER_GAMDATA                          0x000000e0
>  #define SCALER_DLIST_START                      0x00002000
>  #define SCALER_DLIST_SIZE                       0x00004000
> @@ -767,6 +844,10 @@ enum hvs_pixel_format {
>         HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE = 9,
>         HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE = 10,
>         HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE = 11,
> +       HVS_PIXEL_FORMAT_H264 = 12,
> +       HVS_PIXEL_FORMAT_PALETTE = 13,
> +       HVS_PIXEL_FORMAT_YUV444_RGB = 14,
> +       HVS_PIXEL_FORMAT_AYUV444_RGB = 15,
>  };
>
>  /* Note: the LSB is the rightmost character shown.  Only valid for
> @@ -800,12 +881,27 @@ enum hvs_pixel_format {
>  #define SCALER_CTL0_TILING_128B                        2
>  #define SCALER_CTL0_TILING_256B_OR_T           3
>
> +#define SCALER_CTL0_ALPHA_MASK                  BIT(19)
>  #define SCALER_CTL0_HFLIP                       BIT(16)
>  #define SCALER_CTL0_VFLIP                       BIT(15)
>
> +#define SCALER_CTL0_KEY_MODE_MASK              VC4_MASK(18, 17)
> +#define SCALER_CTL0_KEY_MODE_SHIFT             17
> +#define SCALER_CTL0_KEY_DISABLED               0
> +#define SCALER_CTL0_KEY_LUMA_OR_COMMON_RGB     1
> +#define SCALER_CTL0_KEY_MATCH                  2 /* turn transparent */
> +#define SCALER_CTL0_KEY_REPLACE                        3 /* replace with value from key mask word 2 */
> +
>  #define SCALER_CTL0_ORDER_MASK                 VC4_MASK(14, 13)
>  #define SCALER_CTL0_ORDER_SHIFT                        13
>
> +#define SCALER_CTL0_RGBA_EXPAND_MASK           VC4_MASK(12, 11)
> +#define SCALER_CTL0_RGBA_EXPAND_SHIFT          11
> +#define SCALER_CTL0_RGBA_EXPAND_ZERO           0
> +#define SCALER_CTL0_RGBA_EXPAND_LSB            1
> +#define SCALER_CTL0_RGBA_EXPAND_MSB            2
> +#define SCALER_CTL0_RGBA_EXPAND_ROUND          3
> +
>  #define SCALER_CTL0_SCL1_MASK                  VC4_MASK(10, 8)
>  #define SCALER_CTL0_SCL1_SHIFT                 8
>
> --
> 2.16.2
>

Acked-by: Stefan Schake <stschake@gmail.com>

Since the generic plane alpha series is close to going in, we might also
want the alpha mix bit in SCALER_POS2 (bit 28). But we can always do that
as part of an actual series implementing plane alpha.

WARNING: multiple messages have this Message-ID (diff)
From: Stefan Schake <stschake@gmail.com>
To: Eric Anholt <eric@anholt.net>
Cc: linux-kernel@vger.kernel.org,
	dri-devel <dri-devel@lists.freedesktop.org>
Subject: Re: [PATCH] drm/vc4: Add some missing HVS register definitions.
Date: Wed, 11 Apr 2018 10:58:37 +0200	[thread overview]
Message-ID: <CAOZHkRxa7Lo11tqt4bc0hTGefB8czjvrDPm1nLOcdGEmFd_L4w@mail.gmail.com> (raw)
In-Reply-To: <20180302230358.25153-1-eric@anholt.net>

On Sat, Mar 3, 2018 at 12:03 AM, Eric Anholt <eric@anholt.net> wrote:
> At least the RGBA expand field we should have been setting, because we
> aren't expanding correctly for 565 -> 8888.  Other registers are ones
> that may be interesting for various projects that have been discussed.
>
> Signed-off-by: Eric Anholt <eric@anholt.net>
> Cc: Stefan Schake <stschake@gmail.com>
> ---
>  drivers/gpu/drm/vc4/vc4_regs.h | 96 ++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 96 insertions(+)
>
> diff --git a/drivers/gpu/drm/vc4/vc4_regs.h b/drivers/gpu/drm/vc4/vc4_regs.h
> index b9749cb24063..ce8bb7486456 100644
> --- a/drivers/gpu/drm/vc4/vc4_regs.h
> +++ b/drivers/gpu/drm/vc4/vc4_regs.h
> @@ -330,6 +330,21 @@
>  #define SCALER_DISPCTRL0                        0x00000040
>  # define SCALER_DISPCTRLX_ENABLE               BIT(31)
>  # define SCALER_DISPCTRLX_RESET                        BIT(30)
> +/* Generates a single frame when VSTART is seen and stops at the last
> + * pixel read from the FIFO.
> + */
> +# define SCALER_DISPCTRLX_ONESHOT              BIT(29)
> +/* Processes a single context in the dlist and then task switch,
> + * instead of an entire line.
> + */
> +# define SCALER_DISPCTRLX_ONECTX               BIT(28)
> +/* Set to have DISPSLAVE return 2 16bpp pixels and no status data. */
> +# define SCALER_DISPCTRLX_FIFO32               BIT(27)
> +/* Turns on output to the DISPSLAVE register instead of the normal
> + * FIFO.
> + */
> +# define SCALER_DISPCTRLX_FIFOREG              BIT(26)
> +
>  # define SCALER_DISPCTRLX_WIDTH_MASK           VC4_MASK(23, 12)
>  # define SCALER_DISPCTRLX_WIDTH_SHIFT          12
>  # define SCALER_DISPCTRLX_HEIGHT_MASK          VC4_MASK(11, 0)
> @@ -402,6 +417,68 @@
>   */
>  # define SCALER_GAMADDR_SRAMENB                        BIT(30)
>
> +#define SCALER_OLEDOFFS                         0x00000080
> +/* Clamps R to [16,235] and G/B to [16,240]. */
> +# define SCALER_OLEDOFFS_YUVCLAMP               BIT(31)
> +
> +/* Chooses which display FIFO the matrix applies to. */
> +# define SCALER_OLEDOFFS_DISPFIFO_MASK          VC4_MASK(25, 24)
> +# define SCALER_OLEDOFFS_DISPFIFO_SHIFT         24
> +# define SCALER_OLEDOFFS_DISPFIFO_DISABLED      0
> +# define SCALER_OLEDOFFS_DISPFIFO_0             1
> +# define SCALER_OLEDOFFS_DISPFIFO_1             2
> +# define SCALER_OLEDOFFS_DISPFIFO_2             3
> +
> +/* Offsets are 8-bit 2s-complement. */
> +# define SCALER_OLEDOFFS_RED_MASK               VC4_MASK(23, 16)
> +# define SCALER_OLEDOFFS_RED_SHIFT              16
> +# define SCALER_OLEDOFFS_GREEN_MASK             VC4_MASK(15, 8)
> +# define SCALER_OLEDOFFS_GREEN_SHIFT            8
> +# define SCALER_OLEDOFFS_BLUE_MASK              VC4_MASK(7, 0)
> +# define SCALER_OLEDOFFS_BLUE_SHIFT             0
> +
> +/* The coefficients are S0.9 fractions. */
> +#define SCALER_OLEDCOEF0                        0x00000084
> +# define SCALER_OLEDCOEF0_B_TO_R_MASK           VC4_MASK(29, 20)
> +# define SCALER_OLEDCOEF0_B_TO_R_SHIFT          20
> +# define SCALER_OLEDCOEF0_B_TO_G_MASK           VC4_MASK(19, 10)
> +# define SCALER_OLEDCOEF0_B_TO_G_SHIFT          10
> +# define SCALER_OLEDCOEF0_B_TO_B_MASK           VC4_MASK(9, 0)
> +# define SCALER_OLEDCOEF0_B_TO_B_SHIFT          0
> +
> +#define SCALER_OLEDCOEF1                        0x00000088
> +# define SCALER_OLEDCOEF1_G_TO_R_MASK           VC4_MASK(29, 20)
> +# define SCALER_OLEDCOEF1_G_TO_R_SHIFT          20
> +# define SCALER_OLEDCOEF1_G_TO_G_MASK           VC4_MASK(19, 10)
> +# define SCALER_OLEDCOEF1_G_TO_G_SHIFT          10
> +# define SCALER_OLEDCOEF1_G_TO_B_MASK           VC4_MASK(9, 0)
> +# define SCALER_OLEDCOEF1_G_TO_B_SHIFT          0
> +
> +#define SCALER_OLEDCOEF2                        0x0000008c
> +# define SCALER_OLEDCOEF2_R_TO_R_MASK           VC4_MASK(29, 20)
> +# define SCALER_OLEDCOEF2_R_TO_R_SHIFT          20
> +# define SCALER_OLEDCOEF2_R_TO_G_MASK           VC4_MASK(19, 10)
> +# define SCALER_OLEDCOEF2_R_TO_G_SHIFT          10
> +# define SCALER_OLEDCOEF2_R_TO_B_MASK           VC4_MASK(9, 0)
> +# define SCALER_OLEDCOEF2_R_TO_B_SHIFT          0
> +
> +/* Slave addresses for DMAing from HVS composition output to other
> + * devices.  The top bits are valid only in !FIFO32 mode.
> + */
> +#define SCALER_DISPSLAVE0                       0x000000c0
> +#define SCALER_DISPSLAVE1                       0x000000c9
> +#define SCALER_DISPSLAVE2                       0x000000d0
> +# define SCALER_DISPSLAVE_ISSUE_VSTART          BIT(31)
> +# define SCALER_DISPSLAVE_ISSUE_HSTART          BIT(30)
> +/* Set when the current line has been read and an HSTART is required. */
> +# define SCALER_DISPSLAVE_EOL                   BIT(26)
> +/* Set when the display FIFO is empty. */
> +# define SCALER_DISPSLAVE_EMPTY                 BIT(25)
> +/* Set when there is RGB data ready to read. */
> +# define SCALER_DISPSLAVE_VALID                 BIT(24)
> +# define SCALER_DISPSLAVE_RGB_MASK              VC4_MASK(23, 0)
> +# define SCALER_DISPSLAVE_RGB_SHIFT             0
> +
>  #define SCALER_GAMDATA                          0x000000e0
>  #define SCALER_DLIST_START                      0x00002000
>  #define SCALER_DLIST_SIZE                       0x00004000
> @@ -767,6 +844,10 @@ enum hvs_pixel_format {
>         HVS_PIXEL_FORMAT_YCBCR_YUV420_2PLANE = 9,
>         HVS_PIXEL_FORMAT_YCBCR_YUV422_3PLANE = 10,
>         HVS_PIXEL_FORMAT_YCBCR_YUV422_2PLANE = 11,
> +       HVS_PIXEL_FORMAT_H264 = 12,
> +       HVS_PIXEL_FORMAT_PALETTE = 13,
> +       HVS_PIXEL_FORMAT_YUV444_RGB = 14,
> +       HVS_PIXEL_FORMAT_AYUV444_RGB = 15,
>  };
>
>  /* Note: the LSB is the rightmost character shown.  Only valid for
> @@ -800,12 +881,27 @@ enum hvs_pixel_format {
>  #define SCALER_CTL0_TILING_128B                        2
>  #define SCALER_CTL0_TILING_256B_OR_T           3
>
> +#define SCALER_CTL0_ALPHA_MASK                  BIT(19)
>  #define SCALER_CTL0_HFLIP                       BIT(16)
>  #define SCALER_CTL0_VFLIP                       BIT(15)
>
> +#define SCALER_CTL0_KEY_MODE_MASK              VC4_MASK(18, 17)
> +#define SCALER_CTL0_KEY_MODE_SHIFT             17
> +#define SCALER_CTL0_KEY_DISABLED               0
> +#define SCALER_CTL0_KEY_LUMA_OR_COMMON_RGB     1
> +#define SCALER_CTL0_KEY_MATCH                  2 /* turn transparent */
> +#define SCALER_CTL0_KEY_REPLACE                        3 /* replace with value from key mask word 2 */
> +
>  #define SCALER_CTL0_ORDER_MASK                 VC4_MASK(14, 13)
>  #define SCALER_CTL0_ORDER_SHIFT                        13
>
> +#define SCALER_CTL0_RGBA_EXPAND_MASK           VC4_MASK(12, 11)
> +#define SCALER_CTL0_RGBA_EXPAND_SHIFT          11
> +#define SCALER_CTL0_RGBA_EXPAND_ZERO           0
> +#define SCALER_CTL0_RGBA_EXPAND_LSB            1
> +#define SCALER_CTL0_RGBA_EXPAND_MSB            2
> +#define SCALER_CTL0_RGBA_EXPAND_ROUND          3
> +
>  #define SCALER_CTL0_SCL1_MASK                  VC4_MASK(10, 8)
>  #define SCALER_CTL0_SCL1_SHIFT                 8
>
> --
> 2.16.2
>

Acked-by: Stefan Schake <stschake@gmail.com>

Since the generic plane alpha series is close to going in, we might also
want the alpha mix bit in SCALER_POS2 (bit 28). But we can always do that
as part of an actual series implementing plane alpha.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2018-04-11  8:59 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-03-02 23:03 [PATCH] drm/vc4: Add some missing HVS register definitions Eric Anholt
2018-03-02 23:03 ` Eric Anholt
2018-04-11  8:58 ` Stefan Schake [this message]
2018-04-11  8:58   ` Stefan Schake

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAOZHkRxa7Lo11tqt4bc0hTGefB8czjvrDPm1nLOcdGEmFd_L4w@mail.gmail.com \
    --to=stschake@gmail.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=eric@anholt.net \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.