All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Gordon <david.s.gordon@intel.com>
To: intel-gfx@lists.freedesktop.org
Subject: [PATCH 01/13 v4] drm/i915: Add i915_gem_object_create_from_data()
Date: Thu,  9 Jul 2015 19:29:02 +0100	[thread overview]
Message-ID: <1436466554-24806-2-git-send-email-david.s.gordon@intel.com> (raw)
In-Reply-To: <1436466554-24806-1-git-send-email-david.s.gordon@intel.com>

i915_gem_object_create_from_data() is a generic function to save data
from a plain linear buffer in a new pageable gem object that can later
be accessed by the CPU and/or GPU.

We will need this for the microcontroller firmware loading support code.

Derived from i915_gem_object_write(), originally by Alex Dai

v2:
    Change of function: now allocates & fills a new object, rather than
        writing to an existing object
    New name courtesy of Chris Wilson
    Explicit domain-setting and other improvements per review comments
        by Chris Wilson & Daniel Vetter

v4:
    Rebased

Issue: VIZ-4884
Signed-off-by: Alex Dai <yu.dai@intel.com>
Signed-off-by: Dave Gordon <david.s.gordon@intel.com>
---
 drivers/gpu/drm/i915/i915_drv.h |  2 ++
 drivers/gpu/drm/i915/i915_gem.c | 40 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 42 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 464b28d..3c91507 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2755,6 +2755,8 @@ void i915_gem_object_init(struct drm_i915_gem_object *obj,
 			 const struct drm_i915_gem_object_ops *ops);
 struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
 						  size_t size);
+struct drm_i915_gem_object *i915_gem_object_create_from_data(
+		struct drm_device *dev, const void *data, size_t size);
 void i915_init_vm(struct drm_i915_private *dev_priv,
 		  struct i915_address_space *vm);
 void i915_gem_free_object(struct drm_gem_object *obj);
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index a0bff41..dbbb649 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -5478,3 +5478,43 @@ bool i915_gem_obj_is_pinned(struct drm_i915_gem_object *obj)
 
 	return false;
 }
+
+/* Allocate a new GEM object and fill it with the supplied data */
+struct drm_i915_gem_object *
+i915_gem_object_create_from_data(struct drm_device *dev,
+			         const void *data, size_t size)
+{
+	struct drm_i915_gem_object *obj;
+	struct sg_table *sg;
+	size_t bytes;
+	int ret;
+
+	obj = i915_gem_alloc_object(dev, round_up(size, PAGE_SIZE));
+	if (IS_ERR_OR_NULL(obj))
+		return obj;
+
+	ret = i915_gem_object_set_to_cpu_domain(obj, true);
+	if (ret)
+		goto fail;
+
+	ret = i915_gem_object_get_pages(obj);
+	if (ret)
+		goto fail;
+
+	i915_gem_object_pin_pages(obj);
+	sg = obj->pages;
+	bytes = sg_copy_from_buffer(sg->sgl, sg->nents, (void *)data, size);
+	i915_gem_object_unpin_pages(obj);
+
+	if (WARN_ON(bytes != size)) {
+		DRM_ERROR("Incomplete copy, wrote %zu of %zu", bytes, size);
+		ret = -EFAULT;
+		goto fail;
+	}
+
+	return obj;
+
+fail:
+	drm_gem_object_unreference(&obj->base);
+	return ERR_PTR(ret);
+}
-- 
1.9.1

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2015-07-09 18:29 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-09 18:29 [PATCH 00/13 v4] Batch submission via GuC Dave Gordon
2015-07-09 18:29 ` Dave Gordon [this message]
2015-07-18  0:36   ` [PATCH 01/13 v4] drm/i915: Add i915_gem_object_create_from_data() O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 02/13 v4] drm/i915: Add GuC-related module parameters Dave Gordon
2015-07-18  0:37   ` O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 03/13 v4] drm/i915: Add GuC-related header files Dave Gordon
2015-07-18  0:38   ` O'Rourke, Tom
2015-07-21  6:38     ` Daniel Vetter
2015-07-24 22:08       ` O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 04/13 v4] drm/i915: GuC-specific firmware loader Dave Gordon
2015-07-13 15:35   ` Daniel Vetter
2015-07-18  0:35   ` O'Rourke, Tom
2015-07-20 16:18     ` Yu Dai
2015-07-09 18:29 ` [PATCH 05/13 v4] drm/i915: Debugfs interface to read GuC load status Dave Gordon
2015-07-18  0:39   ` O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 06/13 v4] drm/i915: Expose two LRC functions for GuC submission mode Dave Gordon
2015-07-24 22:12   ` O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 07/13 v4] drm/i915: GuC submission setup, phase 1 Dave Gordon
2015-07-24 22:31   ` O'Rourke, Tom
2015-07-27 22:41     ` Yu Dai
2015-07-27 23:12       ` O'Rourke, Tom
2015-07-28  0:18         ` Yu Dai
2015-07-28 15:16         ` Dave Gordon
2015-07-28 19:40           ` Dave Gordon
2015-07-28 22:42             ` O'Rourke, Tom
2015-07-28 21:38           ` O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 08/13 v4] drm/i915: Enable GuC firmware log Dave Gordon
2015-07-24 22:40   ` O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 09/13 v4] drm/i915: Implementation of GuC client Dave Gordon
2015-07-25  2:31   ` O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 10/13 v4] drm/i915: Interrupt routing for GuC submission Dave Gordon
2015-07-27 15:33   ` O'Rourke, Tom
2015-07-28 11:29     ` Dave Gordon
2015-07-09 18:29 ` [PATCH 11/13 v4] drm/i915: Integrate GuC-based command submission Dave Gordon
2015-07-27 15:57   ` O'Rourke, Tom
2015-07-27 19:33     ` Yu Dai
2015-07-28 13:59     ` Dave Gordon
2015-07-28 16:47       ` Yu Dai
2015-07-09 18:29 ` [PATCH 12/13 v4] drm/i915: Debugfs interface for GuC submission statistics Dave Gordon
2015-07-27 15:36   ` O'Rourke, Tom
2015-07-09 18:29 ` [PATCH 13/13 v4] drm/i915: Enable GuC submission, where supported Dave Gordon
2015-07-18  0:45 ` [PATCH 00/13 v4] Batch submission via GuC O'Rourke, Tom

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=1436466554-24806-2-git-send-email-david.s.gordon@intel.com \
    --to=david.s.gordon@intel.com \
    --cc=intel-gfx@lists.freedesktop.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 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.