Re: [PATCH v5 9/9] drm/vc4: hdmi: Enable 10/12 bpc output

Maxime Ripard
2020-12-10T14:23:26Z

[-- Attachment #1.1: Type: text/plain, Size: 2256 bytes --]

Hi Dave,

On Wed, Dec 09, 2020 at 03:27:05PM +0000, Dave Stevenson wrote:
> Hi Maxime
>
> On Mon, 7 Dec 2020 at 15:57, Maxime Ripard <maxime@cerno.tech> wrote:
> >
> > The BCM2711 supports higher bpc count than just 8, so let's support it in
> > our driver.
> >
> > Signed-off-by: Maxime Ripard <maxime@cerno.tech>
> > ---
> > drivers/gpu/drm/vc4/vc4_hdmi.c | 71 ++++++++++++++++++++++++++++-
> > drivers/gpu/drm/vc4/vc4_hdmi.h | 1 +
> > drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 9 ++++
> > 3 files changed, 80 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
> > index f4ff6b5db484..fb30ddd842b1 100644
> > --- a/drivers/gpu/drm/vc4/vc4_hdmi.c
> > +++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
> > @@ -76,6 +76,17 @@
> > #define VC5_HDMI_VERTB_VSPO_SHIFT 16
> > #define VC5_HDMI_VERTB_VSPO_MASK VC4_MASK(29, 16)
> >
> > +#define VC5_HDMI_DEEP_COLOR_CONFIG_1_INIT_PACK_PHASE_SHIFT 8
> > +#define VC5_HDMI_DEEP_COLOR_CONFIG_1_INIT_PACK_PHASE_MASK VC4_MASK(10, 8)
> > +
> > +#define VC5_HDMI_DEEP_COLOR_CONFIG_1_COLOR_DEPTH_SHIFT 0
> > +#define VC5_HDMI_DEEP_COLOR_CONFIG_1_COLOR_DEPTH_MASK VC4_MASK(3, 0)
> > +
> > +#define VC5_HDMI_GCP_CONFIG_GCP_ENABLE BIT(31)
> > +
> > +#define VC5_HDMI_GCP_WORD_1_GCP_SUBPACKET_BYTE_1_SHIFT 8
> > +#define VC5_HDMI_GCP_WORD_1_GCP_SUBPACKET_BYTE_1_MASK VC4_MASK(15, 8)
> > +
> > # define VC4_HD_M_SW_RST BIT(2)
> > # define VC4_HD_M_ENABLE BIT(0)
> >
> > @@ -179,6 +190,9 @@ static void vc4_hdmi_connector_reset(struct drm_connector *connector)
> >
> > kfree(connector->state);
> >
> > + conn_state->base.max_bpc = 8;
> > + conn_state->base.max_requested_bpc = 8;
> > +
>
> Having added protection from the kzalloc failing in 4/9, this adds
> back in dereferencing conn_state without having checked it succeeded
> first :(

Yeah, you're right :/

I also noticed that we kfree the connector->state pointer, but nothing
really guarantees that the base field in our structure is at the offset
0

I've fixed both issues, I'll send a new iteration

Thanks!
Maxime

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

[-- Attachment #2: Type: text/plain, Size: 176 bytes --]