All of lore.kernel.org
 help / color / mirror / Atom feed
From: akash.goel@intel.com
To: intel-gfx@lists.freedesktop.org
Cc: Akash Goel <akash.goel@intel.com>
Subject: [PATCH 02/18] drm/i915: Add GuC ukernel logging related fields to fw interface file
Date: Wed, 12 Oct 2016 21:54:28 +0530	[thread overview]
Message-ID: <1476289484-13682-3-git-send-email-akash.goel@intel.com> (raw)
In-Reply-To: <1476289484-13682-1-git-send-email-akash.goel@intel.com>

From: Sagar Arun Kamble <sagar.a.kamble@intel.com>

The first page of the GuC log buffer contains state info or meta data
which is required to parse the logs contained in the subsequent pages.
The structure representing the state info is added to interface file
as Driver would need to handle log buffer flush interrupts from GuC.
Added an enum for the different message/event types that can be send
by the GuC ukernel to Host.
Also added 2 new Host to GuC action types to inform GuC when Host has
flushed the log buffer and forcefuly cause the GuC to send a new
log buffer flush interrupt.

v2:
- Make documentation of log buffer state structure more elaborate &
  rename LOGBUFFERFLUSH action to LOG_BUFFER_FLUSH for consistency.(Tvrtko)

v3: Add GuC log buffer layout diagram for more clarity.

Signed-off-by: Sagar Arun Kamble <sagar.a.kamble@intel.com>
Signed-off-by: Akash Goel <akash.goel@intel.com>
Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
---
 drivers/gpu/drm/i915/intel_guc_fwif.h | 78 +++++++++++++++++++++++++++++++++++
 1 file changed, 78 insertions(+)

diff --git a/drivers/gpu/drm/i915/intel_guc_fwif.h b/drivers/gpu/drm/i915/intel_guc_fwif.h
index e40db2d..adb1ffd 100644
--- a/drivers/gpu/drm/i915/intel_guc_fwif.h
+++ b/drivers/gpu/drm/i915/intel_guc_fwif.h
@@ -419,15 +419,87 @@ struct guc_ads {
 	u32 reserved2[4];
 } __packed;
 
+/* GuC logging structures */
+
+enum guc_log_buffer_type {
+	GUC_ISR_LOG_BUFFER,
+	GUC_DPC_LOG_BUFFER,
+	GUC_CRASH_DUMP_LOG_BUFFER,
+	GUC_MAX_LOG_BUFFER
+};
+
+/**
+ * DOC: GuC Log buffer Layout
+ *
+ * Page0  +-------------------------------+
+ *        |   ISR state header (32 bytes) |
+ *        |      DPC state header         |
+ *        |   Crash dump state header     |
+ * Page1  +-------------------------------+
+ *        |           ISR logs            |
+ * Page5  +-------------------------------+
+ *        |           DPC logs            |
+ * Page9  +-------------------------------+
+ *        |         Crash Dump logs       |
+ *        +-------------------------------+
+ *
+ * Below state structure is used for coordination of retrieval of GuC firmware
+ * logs. Separate state is maintained for each log buffer type.
+ * read_ptr points to the location where i915 read last in log buffer and
+ * is read only for GuC firmware. write_ptr is incremented by GuC with number
+ * of bytes written for each log entry and is read only for i915.
+ * When any type of log buffer becomes half full, GuC sends a flush interrupt.
+ * GuC firmware expects that while it is writing to 2nd half of the buffer,
+ * first half would get consumed by Host and then get a flush completed
+ * acknowledgment from Host, so that it does not end up doing any overwrite
+ * causing loss of logs. So when buffer gets half filled & i915 has requested
+ * for interrupt, GuC will set flush_to_file field, set the sampled_write_ptr
+ * to the value of write_ptr and raise the interrupt.
+ * On receiving the interrupt i915 should read the buffer, clear flush_to_file
+ * field and also update read_ptr with the value of sample_write_ptr, before
+ * sending an acknowledgment to GuC. marker & version fields are for internal
+ * usage of GuC and opaque to i915. buffer_full_cnt field is incremented every
+ * time GuC detects the log buffer overflow.
+ */
+struct guc_log_buffer_state {
+	u32 marker[2];
+	u32 read_ptr;
+	u32 write_ptr;
+	u32 size;
+	u32 sampled_write_ptr;
+	union {
+		struct {
+			u32 flush_to_file:1;
+			u32 buffer_full_cnt:4;
+			u32 reserved:27;
+		};
+		u32 flags;
+	};
+	u32 version;
+} __packed;
+
+union guc_log_control {
+	struct {
+		u32 logging_enabled:1;
+		u32 reserved1:3;
+		u32 verbosity:4;
+		u32 reserved2:24;
+	};
+	u32 value;
+} __packed;
+
 /* This Action will be programmed in C180 - SOFT_SCRATCH_O_REG */
 enum host2guc_action {
 	HOST2GUC_ACTION_DEFAULT = 0x0,
 	HOST2GUC_ACTION_SAMPLE_FORCEWAKE = 0x6,
 	HOST2GUC_ACTION_ALLOCATE_DOORBELL = 0x10,
 	HOST2GUC_ACTION_DEALLOCATE_DOORBELL = 0x20,
+	HOST2GUC_ACTION_LOG_BUFFER_FILE_FLUSH_COMPLETE = 0x30,
+	HOST2GUC_ACTION_FORCE_LOG_BUFFER_FLUSH = 0x302,
 	HOST2GUC_ACTION_ENTER_S_STATE = 0x501,
 	HOST2GUC_ACTION_EXIT_S_STATE = 0x502,
 	HOST2GUC_ACTION_SLPC_REQUEST = 0x3003,
+	HOST2GUC_ACTION_UK_LOG_ENABLE_LOGGING = 0x0E000,
 	HOST2GUC_ACTION_LIMIT
 };
 
@@ -449,4 +521,10 @@ enum guc2host_status {
 	GUC2HOST_STATUS_GENERIC_FAIL = GUC2HOST_STATUS(0x0000F000)
 };
 
+/* This action will be programmed in C1BC - SOFT_SCRATCH_15_REG */
+enum guc2host_message {
+	GUC2HOST_MSG_CRASH_DUMP_POSTED = (1 << 1),
+	GUC2HOST_MSG_FLUSH_LOG_BUFFER = (1 << 3)
+};
+
 #endif
-- 
1.9.2

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

  parent reply	other threads:[~2016-10-12 16:06 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-12 16:24 [PATCH v10 00/18] Support for sustained capturing of GuC firmware logs akash.goel
2016-10-12 16:24 ` [PATCH 01/18] drm/i915: Decouple GuC log setup from verbosity parameter akash.goel
2016-10-12 16:24 ` akash.goel [this message]
2016-10-12 16:24 ` [PATCH 03/18] drm/i915: New structure to contain GuC logging related fields akash.goel
2016-10-12 16:24 ` [PATCH 04/18] drm/i915: Add low level set of routines for programming PM IER/IIR/IMR register set akash.goel
2016-10-12 16:24 ` [PATCH 05/18] drm/i915: Support for GuC interrupts akash.goel
2016-10-12 16:24 ` [PATCH 06/18] drm/i915: Handle log buffer flush interrupt event from GuC akash.goel
2016-10-12 16:24 ` [PATCH 07/18] relay: Use per CPU constructs for the relay channel buffer pointers akash.goel
2016-10-12 16:24 ` [PATCH 08/18] drm/i915: Add a relay backed debugfs interface for capturing GuC logs akash.goel
2016-10-12 16:24 ` [PATCH 09/18] drm/i915: New lock to serialize the Host2GuC actions akash.goel
2016-10-12 16:24 ` [PATCH 10/18] drm/i915: Add stats for GuC log buffer flush interrupts akash.goel
2016-10-12 16:24 ` [PATCH 11/18] drm/i915: Optimization to reduce the sampling time of GuC log buffer akash.goel
2016-10-12 16:24 ` [PATCH 12/18] drm/i915: Increase GuC log buffer size to reduce flush interrupts akash.goel
2016-10-12 16:24 ` [PATCH 13/18] drm/i915: Augment i915 error state to include the dump of GuC log buffer akash.goel
2016-10-12 16:24 ` [PATCH 14/18] drm/i915: Support for forceful flush " akash.goel
2016-10-12 16:24 ` [PATCH 15/18] drm/i915: Debugfs support for GuC logging control akash.goel
2016-10-12 16:24 ` [PATCH 16/18] drm/i915: Use SSE4.1 movntdqa based memcpy for sampling GuC log buffer akash.goel
2016-10-12 16:24 ` [PATCH 17/18] drm/i915: Early creation of relay channel for capturing boot time logs akash.goel
2016-10-12 16:24 ` [PATCH 18/18] drm/i915: Mark the GuC log buffer flush interrupts handling WQ as freezable akash.goel
2016-10-12 17:50 ` ✗ Fi.CI.BAT: warning for Support for sustained capturing of GuC firmware logs (rev11) Patchwork
2016-10-12 18:36   ` Saarinen, Jani
2016-10-13  7:48     ` Tvrtko Ursulin
2016-10-13 10:27       ` Goel, Akash
2016-10-25  9:33       ` Tvrtko Ursulin
  -- strict thread matches above, loose matches on Subject: below --
2016-09-08 10:39 [PATCH v9 00/18] Support for sustained capturing of GuC firmware logs akash.goel
2016-09-08 10:39 ` [PATCH 02/18] drm/i915: Add GuC ukernel logging related fields to fw interface file akash.goel
2016-08-15 14:49 [PATCH v6 00/18] Support for sustained capturing of GuC firmware logs akash.goel
2016-08-15 14:49 ` [PATCH 02/18] drm/i915: Add GuC ukernel logging related fields to fw interface file akash.goel

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=1476289484-13682-3-git-send-email-akash.goel@intel.com \
    --to=akash.goel@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.