All of lore.kernel.org
 help / color / mirror / Atom feed
From: vkorjani <vikas.korjani@intel.com>
To: Daniel Vetter <daniel@ffwll.ch>
Cc: "intel-gfx@lists.freedesktop.org" <intel-gfx@lists.freedesktop.org>
Subject: Re: [RFC 3/8] drm/i915/bxt: Init PPS, Calculate DSI frequency and DPHY parameters for DSC
Date: Thu, 20 Aug 2015 11:46:08 +0530	[thread overview]
Message-ID: <55D570A8.8080509@intel.com> (raw)
In-Reply-To: <20150812133534.GU17734@phenom.ffwll.local>



On Wednesday 12 August 2015 07:05 PM, Daniel Vetter wrote:
> On Wed, Aug 12, 2015 at 03:23:48PM +0530, vikas.korjani@intel.com wrote:
>> From: vkorjani <vikas.korjani@intel.com>
>>
>> This patch adds code to initialize Picture  Parameter set (PPS)
>> data structure for DSC.
>> DSC is enabled than the bitrate should be calculated using the
>> formula pixel_clock * bits_per_pixel / lane_count, where
>> bits_per_pixel can be 8bpp, 10bpp, 12bpp.
>> value of bits_per_pixel is available in step of 1/16 in
>> pps date structure.
>> DPHY parameters are computed based on data rate calculated
>> as per bits_per_pixel provided in pps data structure.
>>
>> Signed-off-by: vkorjani <vikas.korjani@intel.com>
>> Signed-off-by: Yogesh Mohan Marimuthu <yogesh.mohan.marimuthu@intel.com>
>> ---
>>   drivers/gpu/drm/i915/intel_dsi.h           |    5 +++++
>>   drivers/gpu/drm/i915/intel_dsi_panel_vbt.c |   11 +++++++++++
>>   drivers/gpu/drm/i915/intel_dsi_pll.c       |   24 ++++++++++++++++--------
>>   3 files changed, 32 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/intel_dsi.h b/drivers/gpu/drm/i915/intel_dsi.h
>> index 24fc550..699f995 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi.h
>> +++ b/drivers/gpu/drm/i915/intel_dsi.h
>> @@ -96,6 +96,11 @@ struct intel_dsi {
>>   	u16 panel_on_delay;
>>   	u16 panel_off_delay;
>>   	u16 panel_pwr_cycle_delay;
>> +
>> +	/*DSC Support */
>> +	u8 dsc_enable;
>> +	struct vesa_dsc_pps_data pps_data;
>> +	u8 dsc_bpp;
>>   };
>>   
>>   struct intel_dsi_host {
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> index a5e99ac..f893d37 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
>> @@ -413,6 +413,17 @@ struct drm_panel *vbt_panel_init(struct intel_dsi *intel_dsi, u16 panel_id)
>>   		bits_per_pixel = 18;
>>   	else if (intel_dsi->pixel_format == VID_MODE_FORMAT_RGB565)
>>   		bits_per_pixel = 16;
>> +	else if (intel_dsi->pixel_format == VID_MODE_FORMAT_COMPRESSED &&
>> +			dev_priv->vbt.dsc_param.dsc_support) {
>> +		intel_dsi->dsc_enable = true;
>> +		intel_dsi->dsc_bpp =
>> +			(intel_dsi->pps_data.bits_per_pixel / 16);
>> +		bits_per_pixel = intel_dsi->dsc_bpp;
>> +		intel_dsi->pps_data =
>> +			dev_priv->vbt.dsc_param.pps_data;
>> +		/*TODO If PPS not available in VBT compute PPS
>> +		 * from capablity parameter set in vbt */
> We don't seem to feed back the dsi bits_per_pixel information into our
> computation of pipe_config->pipe_bpp. We probably need to fix that to
> actually be able to drive the higher bpc modes ...
>
> Wiring this up correctly should probably be a prep patch.
Yes will fix this.
>
> Also do we have to compute bpp differently for dsc? Can't we just store
> bits_per_pixel somewhere?
> -Daniel
intel_dsi->dsc_bpp stores target bpp after compression.
We can store orginal bpp in intel_dsi->dsi_bpp, some thing similar
is done in this patch

http://lists.freedesktop.org/archives/intel-gfx/2015-May/067627.html
which is still under review.

>
>> +	}
>>   
>>   	intel_dsi->operation_mode = mipi_config->is_cmd_mode;
>>   	intel_dsi->video_mode_format = mipi_config->video_transfer_mode;
>> diff --git a/drivers/gpu/drm/i915/intel_dsi_pll.c b/drivers/gpu/drm/i915/intel_dsi_pll.c
>> index b647f13..38c9433 100644
>> --- a/drivers/gpu/drm/i915/intel_dsi_pll.c
>> +++ b/drivers/gpu/drm/i915/intel_dsi_pll.c
>> @@ -143,10 +143,17 @@ static u32 dsi_rr_formula(const struct drm_display_mode *mode,
>>   #else
>>   
>>   /* Get DSI clock from pixel clock */
>> -static u32 dsi_clk_from_pclk(u32 pclk, int pixel_format, int lane_count)
>> +static u32 dsi_clk_from_pclk(struct intel_encoder *encoder,
>> +			u32 pclk, int pixel_format, int lane_count)
>>   {
>> +	struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
>>   	u32 dsi_clk_khz;
>> -	u32 bpp = dsi_pixel_format_bpp(pixel_format);
>> +	u32 bpp;
>> +
>> +	if (intel_dsi->dsc_enable)
>> +		bpp =  intel_dsi->dsc_bpp;
>> +	else
>> +		bpp = dsi_pixel_format_bpp(pixel_format);
>>   
>>   	/* DSI data rate = pixel clock * bits per pixel / lane count
>>   	   pixel clock is converted from KHz to Hz */
>> @@ -223,8 +230,8 @@ static void vlv_configure_dsi_pll(struct intel_encoder *encoder)
>>   	struct dsi_mnp dsi_mnp;
>>   	u32 dsi_clk;
>>   
>> -	dsi_clk = dsi_clk_from_pclk(intel_dsi->pclk, intel_dsi->pixel_format,
>> -				    intel_dsi->lane_count);
>> +	dsi_clk = dsi_clk_from_pclk(encoder, intel_dsi->pclk,
>> +			intel_dsi->pixel_format, intel_dsi->lane_count);
>>   
>>   	ret = dsi_calc_mnp(dev_priv, &dsi_mnp, dsi_clk);
>>   	if (ret) {
>> @@ -410,8 +417,9 @@ u32 bxt_get_dsi_pclk(struct intel_encoder *encoder, int pipe_bpp)
>>   
>>   	dsi_clk = (dsi_ratio * BXT_REF_CLOCK_KHZ) / 2;
>>   
>> -	/* pixel_format and pipe_bpp should agree */
>> -	assert_bpp_mismatch(intel_dsi->pixel_format, pipe_bpp);
>> +	/* pixel_format and pipe_bpp should agree if DSC is not enabled */
>> +	if (!intel_dsi->dsc_enable)
>> +		assert_bpp_mismatch(intel_dsi->pixel_format, pipe_bpp);
>>   
>>   	pclk = DIV_ROUND_CLOSEST(dsi_clk * intel_dsi->lane_count, pipe_bpp);
>>   
>> @@ -475,8 +483,8 @@ static bool bxt_configure_dsi_pll(struct intel_encoder *encoder)
>>   	u32 dsi_clk;
>>   	u32 val;
>>   
>> -	dsi_clk = dsi_clk_from_pclk(intel_dsi->pclk, intel_dsi->pixel_format,
>> -			intel_dsi->lane_count);
>> +	dsi_clk = dsi_clk_from_pclk(encoder, intel_dsi->pclk,
>> +			intel_dsi->pixel_format, intel_dsi->lane_count);
>>   
>>   	/*
>>   	 * From clock diagram, to get PLL ratio divider, divide double of DSI
>> -- 
>> 1.7.9.5
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx@lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2015-08-20  5:48 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-12  9:53 [RFC 0/8] *** DSC Inital Design RFC *** vikas.korjani
2015-08-12  9:27 ` [RFC 7/8] drm: Add support for pps and compression mode command packet vikas.korjani
2015-08-12  9:53   ` vikas.korjani
2015-08-12  9:53   ` vikas.korjani
2015-08-12  9:53 ` [RFC 1/8] drm/915/bxt: Adding DSC VBT parameter and PPS structures vikas.korjani
2015-08-12  9:53 ` [RFC 2/8] drm/i915/bxt: Adding registers to support DSC vikas.korjani
2015-08-12  9:53 ` [RFC 3/8] drm/i915/bxt: Init PPS, Calculate DSI frequency and DPHY parameters for DSC vikas.korjani
2015-08-12 13:35   ` Daniel Vetter
2015-08-20  6:16     ` vkorjani [this message]
2015-08-12  9:53 ` [RFC 4/8] drm/i915/bxt: MIPI DSI Register Programming " vikas.korjani
2015-08-12  9:53 ` [RFC 5/8] drm/i915/bxt: Program MIPI_DPI_RESOLUTION " vikas.korjani
2015-08-12  9:53 ` [RFC 6/8] drm/i915/bxt: Enable/Disable DSC and programme PPS vikas.korjani
2015-08-12  9:53 ` [RFC 8/8] drm/i915/bxt: Send PPS packet and compression mode command packet vikas.korjani
2015-08-12 13:39 ` [RFC 0/8] *** DSC Inital Design RFC *** Daniel Vetter
2015-08-20  6:19   ` vkorjani

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=55D570A8.8080509@intel.com \
    --to=vikas.korjani@intel.com \
    --cc=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.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.