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/17 v2] drm/i915: Add i915_gem_object_create_from_data()
Date: Thu, 25 Jun 2015 15:39:57 +0100	[thread overview]
Message-ID: <1435243213-22308-2-git-send-email-david.s.gordon@intel.com> (raw)
In-Reply-To: <1435243213-22308-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

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 |   39 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index ea9caf2..7942ac5 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2729,6 +2729,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 52efe43..eb9be60 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -5470,3 +5470,42 @@ 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.7.9.5

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

  reply	other threads:[~2015-06-25 14:40 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-06-25 14:39 [PATCH 00/17 v2] Batch submission via GuC Dave Gordon
2015-06-25 14:39 ` Dave Gordon [this message]
2015-06-25 14:39 ` [PATCH 02/17 v2] drm/i915: Embedded microcontroller (uC) firmware loading support Dave Gordon
2015-06-25 14:39 ` [PATCH 03/17 v2] drm/i915: Add GuC-related module parameters Dave Gordon
2015-06-25 14:40 ` [PATCH 04/17 v2] drm/i915: Add GuC-related header files Dave Gordon
2015-07-03  3:16   ` O'Rourke, Tom
2015-06-25 14:40 ` [PATCH 05/17 v2] drm/i915: GuC-specific firmware loader Dave Gordon
2015-06-25 14:40 ` [PATCH 06/17 v2] drm/i915: Debugfs interface to read GuC load status Dave Gordon
2015-06-25 14:40 ` [PATCH 07/17 v2] drm/i915: Split late for_each_ring loop from i915_gem_init_hw() Dave Gordon
2015-06-25 14:40 ` [PATCH 08/17 v2] drm/i915: Defer default hardware context initialisation until first open Dave Gordon
2015-06-25 14:40 ` [PATCH 09/17 v2] drm/i915: Expose two LRC functions for GuC submission mode Dave Gordon
2015-06-25 20:57   ` Yu Dai
2015-06-26  7:31     ` Chris Wilson
2015-06-26 13:14       ` Dave Gordon
2015-06-25 14:40 ` [PATCH 10/17 v2] drm/i915: GuC submission setup, phase 1 Dave Gordon
2015-06-25 14:40 ` [PATCH 11/17 v2] drm/i915: Enable GuC firmware log Dave Gordon
2015-06-25 14:40 ` [PATCH 12/17 v2] drm/i915: Implementation of GuC client Dave Gordon
2015-06-25 14:40 ` [PATCH 13/17 v2] drm/i915: Interrupt routing for GuC submission Dave Gordon
2015-06-25 14:40 ` [PATCH 14/17 v2] drm/i915: Integrate GuC-based command submission Dave Gordon
2015-06-25 14:40 ` [PATCH 15/17 v2] drm/i915: Debugfs interface for GuC submission statistics Dave Gordon
2015-06-25 14:40 ` [PATCH 16/17 v2] Documentation/drm: kerneldoc for GuC Dave Gordon
2015-06-25 14:40 ` [PATCH 17/17 v2] drm/i915: Enable GuC submission, where supported Dave Gordon

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=1435243213-22308-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.