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: Piotr 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: Michal Wajdeczko <michal.wajdeczko@intel.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Link: https://patchwork.freedesktop.org/patch/msgid/20180605151330.9954-1-piotr.piorkowski@intel.com
This commit is contained in:
parent
741cebee0a
commit
5288c7182d
@ -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 @@
|
|||||||
#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 {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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 @@
|
|||||||
|
|
||||||
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...
|
||||||
|
Loading…
Reference in New Issue
Block a user