All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jani Nikula <jani.nikula@intel.com>
To: "Sharma, Shashank" <shashank.sharma@intel.com>,
	Animesh Manna <animesh.manna@intel.com>,
	intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH v6 03/10] drm/i915/dsb: single register write function for DSB.
Date: Thu, 12 Sep 2019 15:51:17 +0300	[thread overview]
Message-ID: <87r24lzni2.fsf@intel.com> (raw)
In-Reply-To: <c4114a33-242d-aad9-f25a-edd303bad50d@intel.com>

On Thu, 12 Sep 2019, "Sharma, Shashank" <shashank.sharma@intel.com> wrote:
> On 9/12/2019 12:41 AM, Animesh Manna wrote:
>> DSB support single register write through opcode 0x1. Generic
>> api created which accumulate all single register write in a batch
>> buffer and once DSB is triggered, it will program all the registers
>> at the same time.
>>
>> v1: Initial version.
>> v2: Unused macro removed and cosmetic changes done. (Shashank)
>> v3: set free_pos to zero in dsb-put() instead dsb-get() and
>> a cosmetic change. (Shashank)
>>
>> Cc: Jani Nikula <jani.nikula@intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Cc: Shashank Sharma <shashank.sharma@intel.com>
>> Signed-off-by: Animesh Manna <animesh.manna@intel.com>
>> ---
>>   drivers/gpu/drm/i915/display/intel_dsb.c | 30 ++++++++++++++++++++++++
>>   drivers/gpu/drm/i915/display/intel_dsb.h |  9 +++++++
>>   2 files changed, 39 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c b/drivers/gpu/drm/i915/display/intel_dsb.c
>> index 7c1b1574788c..e2c383352145 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dsb.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dsb.c
>> @@ -9,6 +9,13 @@
>>   
>>   #define DSB_BUF_SIZE    (2 * PAGE_SIZE)
>>   
>> +/* DSB opcodes. */
>> +#define DSB_OPCODE_SHIFT		24
>> +#define DSB_OPCODE_MMIO_WRITE		0x1
>> +#define DSB_OPCODE_INDEXED_WRITE	0x9
> We are not using this macro here, this should go to the Batch 
> /INDEXED_WRITE patch.
>> +#define DSB_BYTE_EN			0xF
>> +#define DSB_BYTE_EN_SHIFT		20
>> +
>>   struct intel_dsb *
>>   intel_dsb_get(struct intel_crtc *crtc)
>>   {
>> @@ -66,5 +73,28 @@ void intel_dsb_put(struct intel_dsb *dsb)
>>   		i915_vma_unpin_and_release(&dsb->vma, 0);
>>   		mutex_unlock(&i915->drm.struct_mutex);
>>   		dsb->cmd_buf = NULL;
>> +		dsb->free_pos = 0;
>> +	}
>> +}
>> +
> I hope this addition of braces are due to diff's adjustment.
>> +void intel_dsb_reg_write(struct intel_dsb *dsb, i915_reg_t reg, u32 val)
>> +{
>> +	struct intel_crtc *crtc = container_of(dsb, typeof(*crtc), dsb);
>> +	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>> +	u32 *buf = dsb->cmd_buf;
>> +
>> +	if (!buf) {
>> +		I915_WRITE(reg, val);
>> +		return;
>> +	}
>> +
>> +	if (WARN_ON(dsb->free_pos >= DSB_BUF_SIZE)) {
>> +		DRM_DEBUG_KMS("DSB buffer overflow\n");
> why shouldn't we do a I915_WRITE(reg, val) here too? This is single 
> register write, and we can handle this.

That would assume it's okay to directly mmio write this and the
subsequent values, and write the batch already stored in the buffer
afterwards.

BR,
Jani.

>> +		return;
>>   	}
>> +
>> +	buf[dsb->free_pos++] = val;
>> +	buf[dsb->free_pos++] = (DSB_OPCODE_MMIO_WRITE  << DSB_OPCODE_SHIFT) |
>> +			       (DSB_BYTE_EN << DSB_BYTE_EN_SHIFT) |
>> +			       i915_mmio_reg_offset(reg);
>>   }
>> diff --git a/drivers/gpu/drm/i915/display/intel_dsb.h b/drivers/gpu/drm/i915/display/intel_dsb.h
>> index 27eb68eb5392..31b87dcfe160 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dsb.h
>> +++ b/drivers/gpu/drm/i915/display/intel_dsb.h
>> @@ -6,6 +6,8 @@
>>   #ifndef _INTEL_DSB_H
>>   #define _INTEL_DSB_H
>>   
>> +#include "i915_reg.h"
>> +
>>   struct intel_crtc;
>>   struct i915_vma;
>>   
>> @@ -21,10 +23,17 @@ struct intel_dsb {
>>   	enum dsb_id id;
>>   	u32 *cmd_buf;
>>   	struct i915_vma *vma;
>> +
>> +	/*
>> +	 * free_pos will point the first free entry position
>> +	 * and help in calculating tail of command buffer.
>> +	 */
>> +	int free_pos;
>>   };
>>   
>>   struct intel_dsb *
>>   intel_dsb_get(struct intel_crtc *crtc);
>>   void intel_dsb_put(struct intel_dsb *dsb);
>> +void intel_dsb_reg_write(struct intel_dsb *dsb, i915_reg_t reg, u32 val);
>>   
>>   #endif

-- 
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2019-09-12 12:51 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-11 19:11 [PATCH v6 00/10] DSB enablement Animesh Manna
2019-09-11 19:11 ` [PATCH v6 01/10] drm/i915/dsb: feature flag added for display state buffer Animesh Manna
2019-09-12 12:09   ` Sharma, Shashank
2019-09-11 19:11 ` [PATCH v6 02/10] drm/i915/dsb: DSB context creation Animesh Manna
2019-09-12 12:31   ` Sharma, Shashank
2019-09-12 12:47   ` Jani Nikula
2019-09-11 19:11 ` [PATCH v6 03/10] drm/i915/dsb: single register write function for DSB Animesh Manna
2019-09-12 12:48   ` Sharma, Shashank
2019-09-12 12:51     ` Jani Nikula [this message]
2019-09-12 13:00       ` Sharma, Shashank
2019-09-12 13:07         ` Animesh Manna
2019-09-12 13:20           ` Sharma, Shashank
2019-09-11 19:11 ` [PATCH v6 04/10] drm/i915/dsb: Indexed " Animesh Manna
2019-09-12 13:18   ` Sharma, Shashank
2019-09-11 19:11 ` [PATCH v6 05/10] drm/i915/dsb: Check DSB engine status Animesh Manna
2019-09-12 13:21   ` Sharma, Shashank
2019-09-11 19:11 ` [PATCH v6 06/10] drm/i915/dsb: functions to enable/disable DSB engine Animesh Manna
2019-09-12 13:34   ` Sharma, Shashank
2019-09-11 19:11 ` [PATCH v6 07/10] drm/i915/dsb: function to trigger workload execution of DSB Animesh Manna
2019-09-12 13:36   ` Sharma, Shashank
2019-09-12 13:39     ` Jani Nikula
2019-09-12 13:58       ` Sharma, Shashank
2019-09-16 19:23         ` Jani Nikula
2019-09-11 19:11 ` [PATCH v6 08/10] drm/i915/dsb: Enable gamma lut programming using DSB Animesh Manna
2019-09-12 13:07   ` Jani Nikula
2019-09-12 13:26     ` Animesh Manna
2019-09-17  7:30       ` Jani Nikula
2019-09-17  9:19         ` Animesh Manna
2019-09-11 19:11 ` [PATCH v6 09/10] drm/i915/dsb: Enable DSB for gen12 Animesh Manna
2019-09-12 14:00   ` Sharma, Shashank
2019-09-11 19:11 ` [PATCH v6 10/10] drm/i915/dsb: Documentation for DSB Animesh Manna
2019-09-12  7:02 ` ✗ Fi.CI.CHECKPATCH: warning for DSB enablement. (rev6) Patchwork
2019-09-12  7:04 ` ✗ Fi.CI.SPARSE: " Patchwork
2019-09-12  7:25 ` ✓ Fi.CI.BAT: success " Patchwork
2019-09-12 11:50 ` ✗ Fi.CI.IGT: failure " Patchwork

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=87r24lzni2.fsf@intel.com \
    --to=jani.nikula@intel.com \
    --cc=animesh.manna@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=shashank.sharma@intel.com \
    /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.