[PATCH] drm/amd/display: add HDCP caps debugfs
Harry Wentland
hwentlan at amd.com
Mon Feb 24 21:59:36 UTC 2020
On 2020-02-24 4:51 p.m., Bhawanpreet Lakha wrote:
>
> On 2020-02-24 4:15 p.m., Harry Wentland wrote:
>>
>> On 2020-02-24 2:55 p.m., Bhawanpreet Lakha wrote:
>>> Add debugfs to get HDCP capability. This is also useful for
>>> kms_content_protection igt test.
>>>
>>> Use:
>>> cat /sys/kernel/debug/dri/0/DP-1/hdcp_sink_capability
>>> cat /sys/kernel/debug/dri/0/HDMI-A-1/hdcp_sink_capability
>>>
>>> Signed-off-by: Bhawanpreet Lakha <Bhawanpreet.Lakha at amd.com>
>>> ---
>>> .../amd/display/amdgpu_dm/amdgpu_dm_debugfs.c | 61 +++++++++++++++++++
>>> 1 file changed, 61 insertions(+)
>>>
>>> diff --git
>>> a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
>>> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
>>> index ead5c05eec92..52982c8c871f 100644
>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_debugfs.c
>>> @@ -815,6 +815,44 @@ static int vrr_range_show(struct seq_file *m,
>>> void *data)
>>> return 0;
>>> }
>>> +#ifdef CONFIG_DRM_AMD_DC_HDCP
>>> +/*
>>> + * Returns the HDCP capability of the Display (1.4 for now).
>>> + *
>>> + * NOTE* Not all HDMI displays report their HDCP caps even when they
>>> are capable.
>>> + * Since its rare for a display to not be HDCP 1.4 capable, we set
>>> HDMI as always capable.
>>> + *
>>> + * Example usage: cat /sys/kernel/debug/dri/0/DP-1/hdcp_sink_capability
>>> + * or cat /sys/kernel/debug/dri/0/HDMI-A-1/hdcp_sink_capability
>>> + */
>>> +static int hdcp_sink_capability_show(struct seq_file *m, void *data)
>>> +{
>>> + struct drm_connector *connector = m->private;
>>> + struct amdgpu_dm_connector *aconnector =
>>> to_amdgpu_dm_connector(connector);
>>> + bool hdcp_cap, hdcp2_cap;
>>> +
>>> + if (connector->status != connector_status_connected)
>>> + return -ENODEV;
>>> +
>>> + seq_printf(m, "%s:%d HDCP version: ", connector->name,
>>> connector->base.id);
>>> +
>>> + hdcp_cap = dc_link_is_hdcp14(aconnector->dc_link);
>>> + hdcp2_cap = dc_link_is_hdcp22(aconnector->dc_link);
>>> +
>>> +
>>> + if (hdcp_cap)
>>> + seq_printf(m, "%s ", "HDCP1.4");
>>> + if (hdcp2_cap)
>>> + seq_printf(m, "%s ", "HDCP2.2");
>>> +
>>> + if (!hdcp_cap && !hdcp2_cap)
>>> + seq_printf(m, "%s ", "None");
>>> +
>>> + seq_puts(m, "\n");
>>> +
>>> + return 0;
>>> +}
>>> +#endif
>>> /* function description
>>> *
>>> * generic SDP message access for testing
>>> @@ -940,6 +978,9 @@ static ssize_t dp_dpcd_data_read(struct file *f,
>>> char __user *buf,
>>> DEFINE_SHOW_ATTRIBUTE(dmub_tracebuffer);
>>> DEFINE_SHOW_ATTRIBUTE(output_bpc);
>>> DEFINE_SHOW_ATTRIBUTE(vrr_range);
>>> +#ifdef CONFIG_DRM_AMD_DC_HDCP
>>> +DEFINE_SHOW_ATTRIBUTE(hdcp_sink_capability);
>>> +#endif
>>> static const struct file_operations dp_link_settings_debugfs_fops
>>> = {
>>> .owner = THIS_MODULE,
>>> @@ -995,12 +1036,23 @@ static const struct {
>>> {"test_pattern", &dp_phy_test_pattern_fops},
>>> {"output_bpc", &output_bpc_fops},
>>> {"vrr_range", &vrr_range_fops},
>>> +#ifdef CONFIG_DRM_AMD_DC_HDCP
>>> + {"hdcp_sink_capability", &hdcp_sink_capability_fops},
>>> +#endif
>>> {"sdp_message", &sdp_message_fops},
>>> {"aux_dpcd_address", &dp_dpcd_address_debugfs_fops},
>>> {"aux_dpcd_size", &dp_dpcd_size_debugfs_fops},
>>> {"aux_dpcd_data", &dp_dpcd_data_debugfs_fops}
>>> };
>>> +#ifdef CONFIG_DRM_AMD_DC_HDCP
>>> +static const struct {
>>> + char *name;
>>> + const struct file_operations *fops;
>>> +} hdmi_debugfs_entries[] = {
>>> + {"hdcp_sink_capability", &hdcp_sink_capability_fops}
>>> +};
>>> +#endif
>>> /*
>>> * Force YUV420 output if available from the given mode
>>> */
>>> @@ -1066,6 +1118,15 @@ void connector_debugfs_init(struct
>>> amdgpu_dm_connector *connector)
>>> debugfs_create_file_unsafe("force_yuv420_output", 0644, dir,
>>> connector,
>>> &force_yuv420_output_fops);
>>> +#ifdef CONFIG_DRM_AMD_DC_HDCP
>>> + if (connector->base.connector_type == DRM_MODE_CONNECTOR_HDMIA) {
>> Your patch description mentions DP and HDMI but here you're only
>> creating it for HDMI. Should we create it for all HDCP-capable signal
>> types, i.e. DP and HDMI?
>>
>> Harry
>
> There is a loop above that is called for dp_debugfs_entries[]. I have
> added the HDCP debugfs to that struct so no need to recreate the loop.
>
I see it now. Thanks.
Patch is
Reviewed-by: Harry Wentland <harry.wentland at amd.com>
Harry
> Bhawan
>
>>> + for (i = 0; i < ARRAY_SIZE(hdmi_debugfs_entries); i++) {
>>> + debugfs_create_file(hdmi_debugfs_entries[i].name,
>>> + 0644, dir, connector,
>>> + hdmi_debugfs_entries[i].fops);
>>> + }
>>> + }
>>> +#endif
>>> }
>>> /*
>>>
More information about the amd-gfx
mailing list