Commit 5288c718 authored by Piotr Piorkowski's avatar Piotr Piorkowski Committed by Chris Wilson

drm/i915/guc: Move defines with size of GuC logs to intel_guc_log.h

At this moment, we have defined GuC logs sizes in intel_guc_fwif.h, but
as these values are related directly to the GuC logs, and not to API of
GuC parameters, we should move these defines to intel_guc_log.h.

v2:
- change buffers size to more friendly (Michał Wajdeczko)
- remove GUC_LOG_SIZE define (Michał Wajdeczko)
v3:
- use SZ_* macros to define buffers sizes (Michał Wajdeczko)
Signed-off-by: default avatarPiotr Piórkowski <piotr.piorkowski@intel.com>
Cc: Michal Wajdeczko <michal.wajdeczko@intel.com>
Cc: Michał Winiarski <michal.winiarski@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarMichal Wajdeczko <michal.wajdeczko@intel.com>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20180605151330.9954-1-piotr.piorkowski@intel.com
parent 741cebee
...@@ -263,13 +263,31 @@ static u32 guc_ctl_log_params_flags(struct intel_guc *guc) ...@@ -263,13 +263,31 @@ static u32 guc_ctl_log_params_flags(struct intel_guc *guc)
u32 offset = intel_guc_ggtt_offset(guc, guc->log.vma) >> PAGE_SHIFT; u32 offset = intel_guc_ggtt_offset(guc, guc->log.vma) >> PAGE_SHIFT;
u32 flags; u32 flags;
/* each allocated unit is a page */ #define UNIT SZ_4K
flags = GUC_LOG_VALID | GUC_LOG_NOTIFY_ON_HALF_FULL |
(GUC_LOG_CRASH_PAGES << GUC_LOG_CRASH_SHIFT) | BUILD_BUG_ON(!CRASH_BUFFER_SIZE);
(GUC_LOG_DPC_PAGES << GUC_LOG_DPC_SHIFT) | BUILD_BUG_ON(!IS_ALIGNED(CRASH_BUFFER_SIZE, UNIT));
(GUC_LOG_ISR_PAGES << GUC_LOG_ISR_SHIFT) | BUILD_BUG_ON(!DPC_BUFFER_SIZE);
BUILD_BUG_ON(!IS_ALIGNED(DPC_BUFFER_SIZE, UNIT));
BUILD_BUG_ON(!ISR_BUFFER_SIZE);
BUILD_BUG_ON(!IS_ALIGNED(ISR_BUFFER_SIZE, UNIT));
BUILD_BUG_ON((CRASH_BUFFER_SIZE / UNIT - 1) >
(GUC_LOG_CRASH_MASK >> GUC_LOG_CRASH_SHIFT));
BUILD_BUG_ON((DPC_BUFFER_SIZE / UNIT - 1) >
(GUC_LOG_DPC_MASK >> GUC_LOG_DPC_SHIFT));
BUILD_BUG_ON((ISR_BUFFER_SIZE / UNIT - 1) >
(GUC_LOG_ISR_MASK >> GUC_LOG_ISR_SHIFT));
flags = GUC_LOG_VALID |
GUC_LOG_NOTIFY_ON_HALF_FULL |
((CRASH_BUFFER_SIZE / UNIT - 1) << GUC_LOG_CRASH_SHIFT) |
((DPC_BUFFER_SIZE / UNIT - 1) << GUC_LOG_DPC_SHIFT) |
((ISR_BUFFER_SIZE / UNIT - 1) << GUC_LOG_ISR_SHIFT) |
(offset << GUC_LOG_BUF_ADDR_SHIFT); (offset << GUC_LOG_BUF_ADDR_SHIFT);
#undef UNIT
return flags; return flags;
} }
......
...@@ -84,12 +84,12 @@ ...@@ -84,12 +84,12 @@
#define GUC_LOG_VALID (1 << 0) #define GUC_LOG_VALID (1 << 0)
#define GUC_LOG_NOTIFY_ON_HALF_FULL (1 << 1) #define GUC_LOG_NOTIFY_ON_HALF_FULL (1 << 1)
#define GUC_LOG_ALLOC_IN_MEGABYTE (1 << 3) #define GUC_LOG_ALLOC_IN_MEGABYTE (1 << 3)
#define GUC_LOG_CRASH_PAGES 1
#define GUC_LOG_CRASH_SHIFT 4 #define GUC_LOG_CRASH_SHIFT 4
#define GUC_LOG_DPC_PAGES 7 #define GUC_LOG_CRASH_MASK (0x1 << GUC_LOG_CRASH_SHIFT)
#define GUC_LOG_DPC_SHIFT 6 #define GUC_LOG_DPC_SHIFT 6
#define GUC_LOG_ISR_PAGES 7 #define GUC_LOG_DPC_MASK (0x7 << GUC_LOG_DPC_SHIFT)
#define GUC_LOG_ISR_SHIFT 9 #define GUC_LOG_ISR_SHIFT 9
#define GUC_LOG_ISR_MASK (0x7 << GUC_LOG_ISR_SHIFT)
#define GUC_LOG_BUF_ADDR_SHIFT 12 #define GUC_LOG_BUF_ADDR_SHIFT 12
#define GUC_CTL_PAGE_FAULT_CONTROL 5 #define GUC_CTL_PAGE_FAULT_CONTROL 5
...@@ -532,20 +532,6 @@ enum guc_log_buffer_type { ...@@ -532,20 +532,6 @@ enum guc_log_buffer_type {
}; };
/** /**
* DOC: GuC Log buffer Layout
*
* Page0 +-------------------------------+
* | ISR state header (32 bytes) |
* | DPC state header |
* | Crash dump state header |
* Page1 +-------------------------------+
* | ISR logs |
* Page9 +-------------------------------+
* | DPC logs |
* Page17 +-------------------------------+
* | Crash Dump logs |
* +-------------------------------+
*
* Below state structure is used for coordination of retrieval of GuC firmware * Below state structure is used for coordination of retrieval of GuC firmware
* logs. Separate state is maintained for each log buffer type. * logs. Separate state is maintained for each log buffer type.
* read_ptr points to the location where i915 read last in log buffer and * read_ptr points to the location where i915 read last in log buffer and
......
...@@ -215,11 +215,11 @@ static unsigned int guc_get_log_buffer_size(enum guc_log_buffer_type type) ...@@ -215,11 +215,11 @@ static unsigned int guc_get_log_buffer_size(enum guc_log_buffer_type type)
{ {
switch (type) { switch (type) {
case GUC_ISR_LOG_BUFFER: case GUC_ISR_LOG_BUFFER:
return (GUC_LOG_ISR_PAGES + 1) * PAGE_SIZE; return ISR_BUFFER_SIZE;
case GUC_DPC_LOG_BUFFER: case GUC_DPC_LOG_BUFFER:
return (GUC_LOG_DPC_PAGES + 1) * PAGE_SIZE; return DPC_BUFFER_SIZE;
case GUC_CRASH_DUMP_LOG_BUFFER: case GUC_CRASH_DUMP_LOG_BUFFER:
return (GUC_LOG_CRASH_PAGES + 1) * PAGE_SIZE; return CRASH_BUFFER_SIZE;
default: default:
MISSING_CASE(type); MISSING_CASE(type);
} }
...@@ -397,7 +397,7 @@ static int guc_log_relay_create(struct intel_guc_log *log) ...@@ -397,7 +397,7 @@ static int guc_log_relay_create(struct intel_guc_log *log)
lockdep_assert_held(&log->relay.lock); lockdep_assert_held(&log->relay.lock);
/* Keep the size of sub buffers same as shared log buffer */ /* Keep the size of sub buffers same as shared log buffer */
subbuf_size = GUC_LOG_SIZE; subbuf_size = log->vma->size;
/* /*
* Store up to 8 snapshots, which is large enough to buffer sufficient * Store up to 8 snapshots, which is large enough to buffer sufficient
...@@ -452,11 +452,34 @@ int intel_guc_log_create(struct intel_guc_log *log) ...@@ -452,11 +452,34 @@ int intel_guc_log_create(struct intel_guc_log *log)
{ {
struct intel_guc *guc = log_to_guc(log); struct intel_guc *guc = log_to_guc(log);
struct i915_vma *vma; struct i915_vma *vma;
u32 guc_log_size;
int ret; int ret;
GEM_BUG_ON(log->vma); GEM_BUG_ON(log->vma);
vma = intel_guc_allocate_vma(guc, GUC_LOG_SIZE); /*
* GuC Log buffer Layout
*
* +===============================+ 00B
* | Crash dump state header |
* +-------------------------------+ 32B
* | DPC state header |
* +-------------------------------+ 64B
* | ISR state header |
* +-------------------------------+ 96B
* | |
* +===============================+ PAGE_SIZE (4KB)
* | Crash Dump logs |
* +===============================+ + CRASH_SIZE
* | DPC logs |
* +===============================+ + DPC_SIZE
* | ISR logs |
* +===============================+ + ISR_SIZE
*/
guc_log_size = PAGE_SIZE + CRASH_BUFFER_SIZE + DPC_BUFFER_SIZE +
ISR_BUFFER_SIZE;
vma = intel_guc_allocate_vma(guc, guc_log_size);
if (IS_ERR(vma)) { if (IS_ERR(vma)) {
ret = PTR_ERR(vma); ret = PTR_ERR(vma);
goto err; goto err;
......
...@@ -34,12 +34,9 @@ ...@@ -34,12 +34,9 @@
struct intel_guc; struct intel_guc;
/* #define CRASH_BUFFER_SIZE SZ_8K
* The first page is to save log buffer state. Allocate one #define DPC_BUFFER_SIZE SZ_32K
* extra page for others in case for overlap #define ISR_BUFFER_SIZE SZ_32K
*/
#define GUC_LOG_SIZE ((1 + GUC_LOG_DPC_PAGES + 1 + GUC_LOG_ISR_PAGES + \
1 + GUC_LOG_CRASH_PAGES + 1) << PAGE_SHIFT)
/* /*
* While we're using plain log level in i915, GuC controls are much more... * While we're using plain log level in i915, GuC controls are much more...
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment