On Sat, 09 Aug 2014, Damien Lespiau <damien.lespiau@xxxxxxxxx> wrote: > I keep telling myself that those tables aren't great because their size > is the number of dwords we need to program and not the number of entries > (number of dwords = number of entries * 2). > > And... I got it wrong when I refactored the code. Fortunately, it was > only wrong when the VBT table (or the code parsing it) is itself > erroneous. Long story short, it shouldn't matter, but still, there's a > potential array overflow and random programming of the DDI translation > tables. Ugh I looked at the code. I think it would benefit from making the tables have the right amount of entries, with struct { u32 hi, lo; } for each element. I also dislike the ARRAY_SIZE(hsw_ddi_translations_fdi) in the first loop, and magic 2 in the second. But that's for a rainy day. Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> > > Cc: Paulo Zanoni <paulo.r.zanoni@xxxxxxxxx> > Signed-off-by: Damien Lespiau <damien.lespiau@xxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_ddi.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c > index ca1f9a8..02d5584 100644 > --- a/drivers/gpu/drm/i915/intel_ddi.c > +++ b/drivers/gpu/drm/i915/intel_ddi.c > @@ -169,14 +169,14 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port) > ddi_translations_dp = bdw_ddi_translations_dp; > ddi_translations_edp = bdw_ddi_translations_edp; > ddi_translations_hdmi = bdw_ddi_translations_hdmi; > - n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi); > + n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi) / 2; > hdmi_800mV_0dB = 7; > } else if (IS_HASWELL(dev)) { > ddi_translations_fdi = hsw_ddi_translations_fdi; > ddi_translations_dp = hsw_ddi_translations_dp; > ddi_translations_edp = hsw_ddi_translations_dp; > ddi_translations_hdmi = hsw_ddi_translations_hdmi; > - n_hdmi_entries = ARRAY_SIZE(hsw_ddi_translations_hdmi); > + n_hdmi_entries = ARRAY_SIZE(hsw_ddi_translations_hdmi) / 2; > hdmi_800mV_0dB = 6; > } else { > WARN(1, "ddi translation table missing\n"); > @@ -184,7 +184,7 @@ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port) > ddi_translations_fdi = bdw_ddi_translations_fdi; > ddi_translations_dp = bdw_ddi_translations_dp; > ddi_translations_hdmi = bdw_ddi_translations_hdmi; > - n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi); > + n_hdmi_entries = ARRAY_SIZE(bdw_ddi_translations_hdmi) / 2; > hdmi_800mV_0dB = 7; > } > > -- > 1.8.3.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/intel-gfx -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx