* [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config
@ 2013-10-14 16:02 Jani Nikula
2013-10-14 16:02 ` [PATCH 1/2] drm/i915: pass mode to write eld Jani Nikula
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Jani Nikula @ 2013-10-14 16:02 UTC (permalink / raw)
To: intel-gfx, David Härdeman, Jasper Smet; +Cc: jani.nikula
This is a completely untested and possibly naïve attempt at fixing [1]
and [2]. Based on top of drm-intel-nightly branch of [3].
David, Jasper, please give it a try.
Thanks,
Jani.
[1] http://mid.gmane.org/CAGpEb3Ep1LRZETPxHGRfBDqr5Ts2tAc8gCukWwugUf1U5NYv1g@mail.gmail.com
[2] http://mid.gmane.org/20130206213533.GA16367@hardeman.nu
[3] git://people.freedesktop.org/~danvet/drm-intel
Jani Nikula (2):
drm/i915: pass mode to write eld
drm/i915: set hdmi audio clock
drivers/gpu/drm/i915/i915_drv.h | 3 +-
drivers/gpu/drm/i915/i915_reg.h | 12 ++++++-
drivers/gpu/drm/i915/intel_display.c | 58 +++++++++++++++++++++++++++++-----
3 files changed, 63 insertions(+), 10 deletions(-)
--
1.7.9.5
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/2] drm/i915: pass mode to write eld 2013-10-14 16:02 [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config Jani Nikula @ 2013-10-14 16:02 ` Jani Nikula 2013-10-14 16:02 ` [PATCH 2/2] drm/i915: set hdmi audio clock Jani Nikula ` (2 subsequent siblings) 3 siblings, 0 replies; 6+ messages in thread From: Jani Nikula @ 2013-10-14 16:02 UTC (permalink / raw) To: intel-gfx, David Härdeman, Jasper Smet; +Cc: jani.nikula Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- drivers/gpu/drm/i915/i915_drv.h | 3 ++- drivers/gpu/drm/i915/intel_display.c | 11 +++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 2ea66f2..ee5cf20 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -379,7 +379,8 @@ struct drm_i915_display_funcs { void (*crtc_disable)(struct drm_crtc *crtc); void (*off)(struct drm_crtc *crtc); void (*write_eld)(struct drm_connector *connector, - struct drm_crtc *crtc); + struct drm_crtc *crtc, + struct drm_display_mode *mode); void (*fdi_link_train)(struct drm_crtc *crtc); void (*init_clock_gating)(struct drm_device *dev); int (*queue_flip)(struct drm_device *dev, struct drm_crtc *crtc, diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index fbd028e..d0a014b 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -6752,7 +6752,8 @@ static bool intel_eld_uptodate(struct drm_connector *connector, } static void g4x_write_eld(struct drm_connector *connector, - struct drm_crtc *crtc) + struct drm_crtc *crtc, + struct drm_display_mode *mode) { struct drm_i915_private *dev_priv = connector->dev->dev_private; uint8_t *eld = connector->eld; @@ -6792,7 +6793,8 @@ static void g4x_write_eld(struct drm_connector *connector, } static void haswell_write_eld(struct drm_connector *connector, - struct drm_crtc *crtc) + struct drm_crtc *crtc, + struct drm_display_mode *mode) { struct drm_i915_private *dev_priv = connector->dev->dev_private; uint8_t *eld = connector->eld; @@ -6879,7 +6881,8 @@ static void haswell_write_eld(struct drm_connector *connector, } static void ironlake_write_eld(struct drm_connector *connector, - struct drm_crtc *crtc) + struct drm_crtc *crtc, + struct drm_display_mode *mode) { struct drm_i915_private *dev_priv = connector->dev->dev_private; uint8_t *eld = connector->eld; @@ -6974,7 +6977,7 @@ void intel_write_eld(struct drm_encoder *encoder, connector->eld[6] = drm_av_sync_delay(connector, mode) / 2; if (dev_priv->display.write_eld) - dev_priv->display.write_eld(connector, crtc); + dev_priv->display.write_eld(connector, crtc, mode); } static void i845_update_cursor(struct drm_crtc *crtc, u32 base) -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] drm/i915: set hdmi audio clock 2013-10-14 16:02 [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config Jani Nikula 2013-10-14 16:02 ` [PATCH 1/2] drm/i915: pass mode to write eld Jani Nikula @ 2013-10-14 16:02 ` Jani Nikula 2013-10-15 9:09 ` [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config Jasper Smet 2013-10-15 20:02 ` Jasper Smet 3 siblings, 0 replies; 6+ messages in thread From: Jani Nikula @ 2013-10-14 16:02 UTC (permalink / raw) To: intel-gfx, David Härdeman, Jasper Smet; +Cc: jani.nikula Signed-off-by: Jani Nikula <jani.nikula@intel.com> --- drivers/gpu/drm/i915/i915_reg.h | 12 ++++++++- drivers/gpu/drm/i915/intel_display.c | 47 +++++++++++++++++++++++++++++++--- 2 files changed, 54 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h index bb6bd26..1fe8253 100644 --- a/drivers/gpu/drm/i915/i915_reg.h +++ b/drivers/gpu/drm/i915/i915_reg.h @@ -4875,7 +4875,17 @@ #define AUD_CONFIG_LOWER_N_SHIFT 4 #define AUD_CONFIG_LOWER_N_VALUE (0xfff << 4) #define AUD_CONFIG_PIXEL_CLOCK_HDMI_SHIFT 16 -#define AUD_CONFIG_PIXEL_CLOCK_HDMI (0xf << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_MASK (0xf << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_25175 (0 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_25200 (1 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_27000 (2 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_27027 (3 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_54000 (4 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_54054 (5 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_74176 (6 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_74250 (7 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_148352 (8 << 16) +#define AUD_CONFIG_PIXEL_CLOCK_HDMI_148500 (9 << 16) #define AUD_CONFIG_DISABLE_NCTS (1 << 3) /* HSW Audio */ diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index d0a014b..18f8be0 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -6722,6 +6722,43 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc, return 0; } +static struct { + int clock; + u32 config; +} hdmi_audio_clock[] = { + { DIV_ROUND_UP(25200 * 1000, 1001), AUD_CONFIG_PIXEL_CLOCK_HDMI_25175 }, + { 25200, AUD_CONFIG_PIXEL_CLOCK_HDMI_25200 }, + { 27000, AUD_CONFIG_PIXEL_CLOCK_HDMI_27000 }, + { 27000 * 1001 / 1000, AUD_CONFIG_PIXEL_CLOCK_HDMI_27027 }, + { 54000, AUD_CONFIG_PIXEL_CLOCK_HDMI_54000 }, + { 54000 * 1001 / 1000, AUD_CONFIG_PIXEL_CLOCK_HDMI_54054 }, + { DIV_ROUND_UP(74250 * 1000, 1001), AUD_CONFIG_PIXEL_CLOCK_HDMI_74176 }, + { 74250, AUD_CONFIG_PIXEL_CLOCK_HDMI_74250 }, + { DIV_ROUND_UP(148500 * 1000, 1001), AUD_CONFIG_PIXEL_CLOCK_HDMI_148352 }, + { 148500, AUD_CONFIG_PIXEL_CLOCK_HDMI_148500 }, +}; + +static u32 audio_config_hdmi_pixel_clock(struct drm_display_mode *mode) +{ + int i; + + for (i = 0; i < ARRAY_SIZE(hdmi_audio_clock); i++) { + if (mode->clock == hdmi_audio_clock[i].clock) + break; + } + + if (i == ARRAY_SIZE(hdmi_audio_clock)) { + DRM_DEBUG_KMS("HDMI audio pixel clock setting for %d not found, falling back to defaults\n", mode->clock); + i = 1; + } + + DRM_DEBUG_KMS("Configuring HDMI audio for pixel clock %d (0x%08x)\n", + hdmi_audio_clock[i].clock, + hdmi_audio_clock[i].config); + + return hdmi_audio_clock[i].config; +} + static bool intel_eld_uptodate(struct drm_connector *connector, int reg_eldv, uint32_t bits_eldv, int reg_elda, uint32_t bits_elda, @@ -6847,8 +6884,9 @@ static void haswell_write_eld(struct drm_connector *connector, DRM_DEBUG_DRIVER("ELD: DisplayPort detected\n"); eld[5] |= (1 << 2); /* Conn_Type, 0x1 = DisplayPort */ I915_WRITE(aud_config, AUD_CONFIG_N_VALUE_INDEX); /* 0x1 = DP */ - } else - I915_WRITE(aud_config, 0); + } else { + I915_WRITE(aud_config, audio_config_hdmi_pixel_clock(mode)); + } if (intel_eld_uptodate(connector, aud_cntrl_st2, eldv, @@ -6926,8 +6964,9 @@ static void ironlake_write_eld(struct drm_connector *connector, DRM_DEBUG_DRIVER("ELD: DisplayPort detected\n"); eld[5] |= (1 << 2); /* Conn_Type, 0x1 = DisplayPort */ I915_WRITE(aud_config, AUD_CONFIG_N_VALUE_INDEX); /* 0x1 = DP */ - } else - I915_WRITE(aud_config, 0); + } else { + I915_WRITE(aud_config, audio_config_hdmi_pixel_clock(mode)); + } if (intel_eld_uptodate(connector, aud_cntrl_st2, eldv, -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config 2013-10-14 16:02 [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config Jani Nikula 2013-10-14 16:02 ` [PATCH 1/2] drm/i915: pass mode to write eld Jani Nikula 2013-10-14 16:02 ` [PATCH 2/2] drm/i915: set hdmi audio clock Jani Nikula @ 2013-10-15 9:09 ` Jasper Smet 2013-10-15 20:02 ` Jasper Smet 3 siblings, 0 replies; 6+ messages in thread From: Jasper Smet @ 2013-10-15 9:09 UTC (permalink / raw) To: Jani Nikula; +Cc: intel-gfx Thanks for this, Will apply the patches and test ASAP! On Mon, Oct 14, 2013 at 6:02 PM, Jani Nikula <jani.nikula@intel.com> wrote: > This is a completely untested and possibly naïve attempt at fixing [1] > and [2]. Based on top of drm-intel-nightly branch of [3]. > > David, Jasper, please give it a try. > > Thanks, > Jani. > > > [1] http://mid.gmane.org/CAGpEb3Ep1LRZETPxHGRfBDqr5Ts2tAc8gCukWwugUf1U5NYv1g@mail.gmail.com > [2] http://mid.gmane.org/20130206213533.GA16367@hardeman.nu > [3] git://people.freedesktop.org/~danvet/drm-intel > > Jani Nikula (2): > drm/i915: pass mode to write eld > drm/i915: set hdmi audio clock > > drivers/gpu/drm/i915/i915_drv.h | 3 +- > drivers/gpu/drm/i915/i915_reg.h | 12 ++++++- > drivers/gpu/drm/i915/intel_display.c | 58 +++++++++++++++++++++++++++++----- > 3 files changed, 63 insertions(+), 10 deletions(-) > > -- > 1.7.9.5 > -- Met Vriendelijke Groeten Jasper Smet Developer Twitter: josbeir E-mail: josbeir@gmail.com Mobile: 0486/41.75.45 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config 2013-10-14 16:02 [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config Jani Nikula ` (2 preceding siblings ...) 2013-10-15 9:09 ` [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config Jasper Smet @ 2013-10-15 20:02 ` Jasper Smet 2013-10-15 21:25 ` David Härdeman 3 siblings, 1 reply; 6+ messages in thread From: Jasper Smet @ 2013-10-15 20:02 UTC (permalink / raw) To: Jani Nikula; +Cc: intel-gfx Good news! Audio works now in 1080p@50/60 but only in 48000khz which fixes most of my problems :-) What (still) does not work in 50/60hz is 41000khz audio (still works in lower modes) so the patch is not 100% :-) I noticed this because menu sounds in XBMC are 41000 khz and they wouldn't play where all me test audio content worked well. I fixed this by adding a custom resample option where sound in menus started working too. Anything i can do tho help ? I would like to thank you for all your superbly great work so far :-) You rock dude! :-) On Mon, Oct 14, 2013 at 6:02 PM, Jani Nikula <jani.nikula@intel.com> wrote: > This is a completely untested and possibly naïve attempt at fixing [1] > and [2]. Based on top of drm-intel-nightly branch of [3]. > > David, Jasper, please give it a try. > > Thanks, > Jani. > > > [1] http://mid.gmane.org/CAGpEb3Ep1LRZETPxHGRfBDqr5Ts2tAc8gCukWwugUf1U5NYv1g@mail.gmail.com > [2] http://mid.gmane.org/20130206213533.GA16367@hardeman.nu > [3] git://people.freedesktop.org/~danvet/drm-intel > > Jani Nikula (2): > drm/i915: pass mode to write eld > drm/i915: set hdmi audio clock > > drivers/gpu/drm/i915/i915_drv.h | 3 +- > drivers/gpu/drm/i915/i915_reg.h | 12 ++++++- > drivers/gpu/drm/i915/intel_display.c | 58 +++++++++++++++++++++++++++++----- > 3 files changed, 63 insertions(+), 10 deletions(-) > > -- > 1.7.9.5 > -- Met Vriendelijke Groeten Jasper Smet Developer Twitter: josbeir E-mail: josbeir@gmail.com Mobile: 0486/41.75.45 ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config 2013-10-15 20:02 ` Jasper Smet @ 2013-10-15 21:25 ` David Härdeman 0 siblings, 0 replies; 6+ messages in thread From: David Härdeman @ 2013-10-15 21:25 UTC (permalink / raw) To: Jasper Smet; +Cc: Jani Nikula, intel-gfx Not a surprising outcome since it essentially means feature parity with the Windows driver (48kHz working, 44.1kHz not working). I still suspect it's a bug with the Pioneer receiver. On Tue, Oct 15, 2013 at 10:02:54PM +0200, Jasper Smet wrote: >Good news! Audio works now in 1080p@50/60 but only in 48000khz which >fixes most of my problems :-) > >What (still) does not work in 50/60hz is 41000khz audio (still works >in lower modes) so the patch is not 100% :-) > >I noticed this because menu sounds in XBMC are 41000 khz and they >wouldn't play where all me test audio content worked well. I fixed >this by adding a custom resample option where sound in menus started >working too. > >Anything i can do tho help ? > >I would like to thank you for all your superbly great work so far :-) >You rock dude! :-) > > > >On Mon, Oct 14, 2013 at 6:02 PM, Jani Nikula <jani.nikula@intel.com> wrote: >> This is a completely untested and possibly naïve attempt at fixing [1] >> and [2]. Based on top of drm-intel-nightly branch of [3]. >> >> David, Jasper, please give it a try. >> >> Thanks, >> Jani. >> >> >> [1] http://mid.gmane.org/CAGpEb3Ep1LRZETPxHGRfBDqr5Ts2tAc8gCukWwugUf1U5NYv1g@mail.gmail.com >> [2] http://mid.gmane.org/20130206213533.GA16367@hardeman.nu >> [3] git://people.freedesktop.org/~danvet/drm-intel >> >> Jani Nikula (2): >> drm/i915: pass mode to write eld >> drm/i915: set hdmi audio clock >> >> drivers/gpu/drm/i915/i915_drv.h | 3 +- >> drivers/gpu/drm/i915/i915_reg.h | 12 ++++++- >> drivers/gpu/drm/i915/intel_display.c | 58 +++++++++++++++++++++++++++++----- >> 3 files changed, 63 insertions(+), 10 deletions(-) >> >> -- >> 1.7.9.5 >> > > > >-- >Met Vriendelijke Groeten > >Jasper Smet >Developer > >Twitter: josbeir >E-mail: josbeir@gmail.com >Mobile: 0486/41.75.45 > -- David Härdeman ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2013-10-15 21:32 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-10-14 16:02 [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config Jani Nikula 2013-10-14 16:02 ` [PATCH 1/2] drm/i915: pass mode to write eld Jani Nikula 2013-10-14 16:02 ` [PATCH 2/2] drm/i915: set hdmi audio clock Jani Nikula 2013-10-15 9:09 ` [PATCH 0/2] drm/i915: fix hdmi audio pixel clock config Jasper Smet 2013-10-15 20:02 ` Jasper Smet 2013-10-15 21:25 ` David Härdeman
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox