[PATCH v3 05/10] drm/i915/sysfs: Node for hdcp srm

Ramalingam C
2019-03-22T00:44:43Z

Binary Sysfs entry is created to pass the HDCP SRM table into
kerel for the HDCP authentication purpose.

Signed-off-by: Ramalingam C <ramalingam.c@intel.com>
---
drivers/gpu/drm/i915/i915_sysfs.c | 32 +++++++++++++++++++++++++++++++
1 file changed, 32 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_sysfs.c b/drivers/gpu/drm/i915/i915_sysfs.c
index 41313005af42..4621e944a24e 100644
--- a/drivers/gpu/drm/i915/i915_sysfs.c
+++ b/drivers/gpu/drm/i915/i915_sysfs.c
@@ -576,6 +576,36 @@ static void i915_setup_error_capture(struct device *kdev) {}
static void i915_teardown_error_capture(struct device *kdev) {}
#endif

+static ssize_t
+i915_srm_write(struct file *filp, struct kobject *kobj,
+ struct bin_attribute *attr, char *buf,
+ loff_t offset, size_t count)
+{
+ struct device *kdev = kobj_to_dev(kobj);
+ struct drm_i915_private *dev_priv = kdev_minor_to_i915(kdev);
+
+ return intel_hdcp_srm_update(dev_priv, buf, count);
+}
+
+static const struct bin_attribute srm_attrs = {
+ .attr = {.name = "hdcp_srm", .mode = S_IWUSR},
+ .read = NULL,
+ .write = i915_srm_write,
+ .mmap = NULL,
+ .private = (void *)0
+};
+
+static void i915_setup_hdcp_srm(struct device *kdev)
+{
+ if (sysfs_create_bin_file(&kdev->kobj, &srm_attrs))
+ DRM_ERROR("error_state sysfs setup failed\n");
+}
+
+static void i915_teardown_hdcp_srm(struct device *kdev)
+{
+ sysfs_remove_bin_file(&kdev->kobj, &srm_attrs);
+}
+
void i915_setup_sysfs(struct drm_i915_private *dev_priv)
{
struct device *kdev = dev_priv->drm.primary->kdev;
@@ -623,12 +653,14 @@ void i915_setup_sysfs(struct drm_i915_private *dev_priv)
DRM_ERROR("RPS sysfs setup failed\n");

i915_setup_error_capture(kdev);
+ i915_setup_hdcp_srm(kdev);
}

void i915_teardown_sysfs(struct drm_i915_private *dev_priv)
{
struct device *kdev = dev_priv->drm.primary->kdev;

+ i915_teardown_hdcp_srm(kdev);
i915_teardown_error_capture(kdev);

if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
--
2.19.1