[Intel-gfx] [PATCH v3 07/11] drm/i915/dsb: functions to enable/disable DSB engine.

Animesh Manna animesh.manna at intel.com
Thu Aug 29 13:45:43 UTC 2019


Hi,


On 8/28/2019 10:37 PM, Sharma, Shashank wrote:
>
> On 8/28/2019 12:40 AM, Animesh Manna wrote:
>> DSB will be used for performance improvement for some special scenario.
>> DSB engine will be enabled based on need and after completion of its 
>> work
>> will be disabled. Api added for enable/disable operation by using 
>> DSB_CTRL
>> register.
>>
>> Cc: Michel Thierry <michel.thierry at intel.com>
>> Cc: Jani Nikula <jani.nikula at intel.com>
>> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
>> Signed-off-by: Animesh Manna <animesh.manna at intel.com>
>> ---
>>   drivers/gpu/drm/i915/display/intel_dsb.c | 40 ++++++++++++++++++++++++
>>   1 file changed, 40 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_dsb.c 
>> b/drivers/gpu/drm/i915/display/intel_dsb.c
>> index d36ee8244427..2d6e78868f2d 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dsb.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dsb.c
>> @@ -33,6 +33,46 @@ static inline bool is_dsb_busy(struct intel_dsb *dsb)
>>       return DSB_STATUS & I915_READ(DSB_CTRL(pipe, dsb->id));
>>   }
>>   +static bool intel_dsb_enable_engine(struct intel_dsb *dsb)
>> +{
>> +    struct intel_crtc *crtc = dsb->crtc;
>> +    struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>> +    enum pipe pipe = crtc->pipe;
>> +    u32 dsb_ctrl;
>> +
>> +    dsb_ctrl = I915_READ(DSB_CTRL(pipe, dsb->id));
>> +
>> +    if (DSB_STATUS & dsb_ctrl) {
>> +        DRM_DEBUG_KMS("DSB engine is busy.\n");
>> +        return false;
>> +    }
>> +
>> +    dsb_ctrl |= DSB_ENABLE;
>> +    I915_WRITE(DSB_CTRL(pipe, dsb->id), dsb_ctrl);
> readback DSB status and confirm if that's really enabled ?

Ok.

>> +
>> +    return true;
>> +}
>> +
>> +static bool intel_dsb_disable_engine(struct intel_dsb *dsb)
>> +{
>> +    struct intel_crtc *crtc = dsb->crtc;
>> +    struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
>> +    enum pipe pipe = crtc->pipe;
>> +    u32 dsb_ctrl;
>> +
>> +    dsb_ctrl = I915_READ(DSB_CTRL(pipe, dsb->id));
>> +
>> +    if (DSB_STATUS & dsb_ctrl) {
>> +        DRM_DEBUG_KMS("DSB engine is busy.\n");
>> +        return false;
>> +    }
>> +
>> +    dsb_ctrl &= ~DSB_ENABLE;
>> +    I915_WRITE(DSB_CTRL(pipe, dsb->id), dsb_ctrl);
>> +
>
> Same as above.

Ok.

Regards,
Animesh
>
> - Shashank
>
>> +    return true;
>> +}
>> +
>>   struct intel_dsb *
>>   intel_dsb_get(struct intel_crtc *crtc)
>>   {



More information about the Intel-gfx mailing list