From: Leo Li <sunpeng.li-5C7GfCeVMHo@public.gmane.org>
To: "Michel Dänzer" <michel-otUistvHUpPR7s880joybQ@public.gmane.org>
Cc: harry.wentland-5C7GfCeVMHo@public.gmane.org,
amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: [PATCH xf86-video-amdgpu 02/13] Push color properties to kernel DRM on CRTC init
Date: Thu, 17 May 2018 17:43:23 -0400 [thread overview]
Message-ID: <db641905-9dea-015d-24d2-fa25d136abfc@amd.com> (raw)
In-Reply-To: <a2b8ff58-edcc-bb95-f630-1926b1a8874b-otUistvHUpPR7s880joybQ@public.gmane.org>
On 2018-05-16 01:08 PM, Michel Dänzer wrote:
> On 2018-05-03 08:31 PM, sunpeng.li@amd.com wrote:
>> From: "Leo (Sunpeng) Li" <sunpeng.li@amd.com>
>>
>> Push staged values on the driver-private CRTC, to kernel DRM when it's
>> initialized. This is to flush out any previous state that hardware was
>> in, and set them to their default values.
>>
>> Signed-off-by: Leo (Sunpeng) Li <sunpeng.li@amd.com>
>> ---
>> src/drmmode_display.c | 136 ++++++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 136 insertions(+)
>>
>> diff --git a/src/drmmode_display.c b/src/drmmode_display.c
>> index 0ffc6ad..85de01e 100644
>> --- a/src/drmmode_display.c
>> +++ b/src/drmmode_display.c
>> @@ -824,6 +824,133 @@ err_allocs:
>> return 0;
>> }
>>
>> +/**
>> + * Query DRM for the property ID - as recognized by DRM - for the specified
>> + * color management property, on the specified CRTC.
>> + *
>> + * @crtc: The CRTC to query DRM properties on.
>> + * @prop_id: Color management property enum.
>> + *
>> + * Return the DRM property ID, if the property exists. 0 otherwise.
>> + */
>> +static uint32_t get_drm_cm_prop_id(xf86CrtcPtr crtc,
>> + enum drmmode_cm_prop prop_id)
>> +{
>> + AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(crtc->scrn);
>> + drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
>> + drmModeObjectPropertiesPtr drm_props;
>> + int i;
>> +
>> + drm_props = drmModeObjectGetProperties(pAMDGPUEnt->fd,
>> + drmmode_crtc->mode_crtc->crtc_id,
>> + DRM_MODE_OBJECT_CRTC);
>> + if (!drm_props)
>> + goto err_allocs;
>> +
>> + for (i = 0; i < drm_props->count_props; i++) {
>> + drmModePropertyPtr drm_prop;
>> +
>> + drm_prop = drmModeGetProperty(pAMDGPUEnt->fd,
>> + drm_props->props[i]);
>> + if (!drm_prop)
>> + goto err_allocs;
>> +
>> + if (get_cm_enum_from_str(drm_prop->name) == prop_id){
>> + drmModeFreeProperty(drm_prop);
>> + return drm_props->props[i];
>> + }
>> +
>> + drmModeFreeProperty(drm_prop);
>> + }
>> +
>> +err_allocs:
>> + drmModeFreeObjectProperties(drm_props);
>> + return 0;
>> +}
>
> It seems a bit heavy to call drmModeObjectGetProperties and
> drmModeGetProperty (which both in turn call into the kernel) every time
> here. Assuming the property IDs don't change at runtime, they could be
> cached.
>
Hmm, good point. I took a look at the DRM property code, and indeed the
ID's don't change.
>
>> +/**
>> + * Push staged color management properties on the CRTC to DRM.
>> + *
>> + * @crtc: The CRTC containing staged properties
>> + * @cm_prop_index: The color property to push
>> + *
>> + * Return 0 on success, X-defined error codes on failure.
>> + */
>> +static int drmmode_crtc_push_cm_prop(xf86CrtcPtr crtc,
>> + enum drmmode_cm_prop cm_prop_index)
>> +{
>> + AMDGPUEntPtr pAMDGPUEnt = AMDGPUEntPriv(crtc->scrn);
>> + drmmode_crtc_private_ptr drmmode_crtc = crtc->driver_private;
>> + size_t expected_bytes = 0;
>> + uint32_t created_blob_id = 0;
>> + void *blob_data = NULL;
>> + uint32_t drm_prop_id;
>> + Bool free_blob_data = FALSE;
>
> free_blob_data is always FALSE. If that's intended, it shouldn't be
> added (in this patch yet).
>
Must have missed this while preparing the patches, will move to patch 6.
>
>> @@ -1458,6 +1586,14 @@ drmmode_crtc_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, drmModeResPtr mode_res
>> drmmode_crtc->ctm->matrix[0] = drmmode_crtc->ctm->matrix[4] =
>> drmmode_crtc->ctm->matrix[8] = (uint64_t)1 << 32;
>>
>> + /* Push properties to initialize them */
>> + for (i = 0; i < CM_NUM_PROPS; i++) {
>> + if (i == CM_DEGAMMA_LUT_SIZE || i == CM_GAMMA_LUT_SIZE)
>> + continue;
>> + if (drmmode_crtc_push_cm_prop(crtc, i))
>> + return 0;
>
> Per my follow-up to the cover letter, I don't think this should be
> necessary here anyway, but FWIW:
>
> Returning 0 early here breaks the pAMDGPUEnt->assigned_crtcs related
> logic in this function and drmmode_pre_init.
>
I originally thought it'd make sense if DDX pushes the properties on
init, to maintain consistency between what DDX initially reports, and
what DRM is using. It would also reset color properties if X was restarted.
The other way around could also work, which I assume is what you're
suggesting? i.e. pull all color properties from DRM into the
driver-private crtc on crtc init, instead of pushing it to kernel?
Leo
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
next prev parent reply other threads:[~2018-05-17 21:43 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-03 18:31 [PATCH xf86-video-amdgpu 00/13] Enabling Color Management - Round 2 sunpeng.li-5C7GfCeVMHo
[not found] ` <1525372315-28462-1-git-send-email-sunpeng.li-5C7GfCeVMHo@public.gmane.org>
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 01/13] Add color management properties to driver-private CRTC object sunpeng.li-5C7GfCeVMHo
[not found] ` <1525372315-28462-2-git-send-email-sunpeng.li-5C7GfCeVMHo@public.gmane.org>
2018-05-16 17:07 ` Michel Dänzer
[not found] ` <0dda7c80-2bdc-52a7-8dcf-ad5a7f6e9346-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-05-17 21:43 ` Leo Li
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 02/13] Push color properties to kernel DRM on CRTC init sunpeng.li-5C7GfCeVMHo
[not found] ` <1525372315-28462-3-git-send-email-sunpeng.li-5C7GfCeVMHo@public.gmane.org>
2018-05-16 17:08 ` Michel Dänzer
[not found] ` <a2b8ff58-edcc-bb95-f630-1926b1a8874b-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-05-17 21:43 ` Leo Li [this message]
[not found] ` <db641905-9dea-015d-24d2-fa25d136abfc-5C7GfCeVMHo@public.gmane.org>
2018-05-18 7:52 ` Michel Dänzer
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 03/13] List disabled color properties on RandR outputs without a CRTC sunpeng.li-5C7GfCeVMHo
[not found] ` <1525372315-28462-4-git-send-email-sunpeng.li-5C7GfCeVMHo@public.gmane.org>
2018-05-16 17:09 ` Michel Dänzer
[not found] ` <62d1f2e3-d271-658a-7bf4-88b41b080266-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-05-17 21:43 ` Leo Li
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 04/13] Use CRTC's color properties if output has a CRTC attached sunpeng.li-5C7GfCeVMHo
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 05/13] Enable setting of color properties though RandR sunpeng.li-5C7GfCeVMHo
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 06/13] Compose non-legacy with legacy gamma LUT before pushing to kernel DRM sunpeng.li-5C7GfCeVMHo
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 07/13] Also compose LUT when setting legacy gamma sunpeng.li-5C7GfCeVMHo
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 08/13] Set driver-private CRTC's dpms mode on disable sunpeng.li-5C7GfCeVMHo
[not found] ` <1525372315-28462-9-git-send-email-sunpeng.li-5C7GfCeVMHo@public.gmane.org>
2018-05-16 17:09 ` Michel Dänzer
[not found] ` <12553d4f-c171-112b-bad6-6f53d47aa8e3-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-05-17 21:43 ` Leo Li
[not found] ` <6cf602ed-b43d-d446-74a0-a39d35042f5a-5C7GfCeVMHo@public.gmane.org>
2018-05-18 10:35 ` Michel Dänzer
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 09/13] Move drmmode_do_crtc_dpms sunpeng.li-5C7GfCeVMHo
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 10/13] Push staged color properties when DPMS state toggles On sunpeng.li-5C7GfCeVMHo
[not found] ` <1525372315-28462-11-git-send-email-sunpeng.li-5C7GfCeVMHo@public.gmane.org>
2018-05-16 17:10 ` Michel Dänzer
[not found] ` <23a9fe2a-df1c-6ecb-b60e-bdcb22d8179c-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-05-17 21:44 ` Leo Li
[not found] ` <f323d1de-d517-805f-d373-a7310ec6496c-5C7GfCeVMHo@public.gmane.org>
2018-05-18 8:01 ` Michel Dänzer
[not found] ` <6500b993-624a-45aa-6310-958ca8c1f21b-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-05-24 19:01 ` Leo Li
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 11/13] Push staged color properties on output detect sunpeng.li-5C7GfCeVMHo
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 12/13] Update color properties on modeset major sunpeng.li-5C7GfCeVMHo
2018-05-03 18:31 ` [PATCH xf86-video-amdgpu 13/13] Refactor pushing color management properties into a function sunpeng.li-5C7GfCeVMHo
2018-05-14 13:38 ` [PATCH xf86-video-amdgpu 00/13] Enabling Color Management - Round 2 Leo Li
2018-05-14 14:17 ` Michel Dänzer
2018-05-16 17:06 ` Michel Dänzer
[not found] ` <b3a7fcde-fe69-5944-1857-c2b43fa068de-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-05-17 21:43 ` Leo Li
[not found] ` <62c350eb-8634-5bab-e14e-6d75315e3f56-5C7GfCeVMHo@public.gmane.org>
2018-05-18 8:10 ` Michel Dänzer
[not found] ` <8fe3423f-8d9e-120c-32e1-7a6a7fd81606-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-05-24 20:29 ` Leo Li
[not found] ` <7c183caf-d2de-cf56-ed31-7922b24d3a8e-5C7GfCeVMHo@public.gmane.org>
2018-05-25 7:51 ` Michel Dänzer
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=db641905-9dea-015d-24d2-fa25d136abfc@amd.com \
--to=sunpeng.li-5c7gfcevmho@public.gmane.org \
--cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=harry.wentland-5C7GfCeVMHo@public.gmane.org \
--cc=michel-otUistvHUpPR7s880joybQ@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox