In order to provide alignment between IGT intel_guc_logger tool and i915 kernel's guc log relay channels without requiring updating both repositories everytime a sizing change is made, provide that info via debugfs files. Signed-off-by: Alan Previn <alan.previn.teres.alexis@xxxxxxxxx> --- drivers/gpu/drm/i915/gt/uc/intel_guc_log.c | 10 ++++- drivers/gpu/drm/i915/gt/uc/intel_guc_log.h | 2 + .../drm/i915/gt/uc/intel_guc_log_debugfs.c | 41 +++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c index f454d53a8bca..35709202b09c 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.c @@ -15,7 +15,7 @@ static void guc_log_copy_debuglogs_for_relay(struct intel_guc_log *log); -static u32 intel_guc_log_size(struct intel_guc_log *log) +u32 intel_guc_log_size(struct intel_guc_log *log) { /* * GuC Log buffer Layout: @@ -41,6 +41,12 @@ static u32 intel_guc_log_size(struct intel_guc_log *log) return PAGE_SIZE + CRASH_BUFFER_SIZE + DEBUG_BUFFER_SIZE + CAPTURE_BUFFER_SIZE; } +#define GUC_LOG_RELAY_SUBBUF_COUNT 8 +u32 intel_guc_log_relay_subbuf_count(struct intel_guc_log *log) +{ + return GUC_LOG_RELAY_SUBBUF_COUNT; +} + /** * DOC: GuC firmware log * @@ -411,7 +417,7 @@ static int guc_log_relay_create(struct intel_guc_log *log) * latency, for consuming the logs from relay. Also doesn't take * up too much memory. */ - n_subbufs = 8; + n_subbufs = intel_guc_log_relay_subbuf_count(log); guc_log_relay_chan = relay_open("guc_log", dev_priv->drm.primary->debugfs_root, diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.h b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.h index 18007e639be9..9e55bd7d2051 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log.h +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log.h @@ -73,6 +73,8 @@ unsigned int intel_guc_get_log_buffer_size(enum guc_log_buffer_type type); size_t intel_guc_get_log_buffer_offset(enum guc_log_buffer_type type); int intel_guc_log_create(struct intel_guc_log *log); void intel_guc_log_destroy(struct intel_guc_log *log); +u32 intel_guc_log_size(struct intel_guc_log *log); +u32 intel_guc_log_relay_subbuf_count(struct intel_guc_log *log); int intel_guc_log_set_level(struct intel_guc_log *log, u32 level); bool intel_guc_log_relay_created(const struct intel_guc_log *log); diff --git a/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c b/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c index ddfbe334689f..983afc89b17e 100644 --- a/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c +++ b/drivers/gpu/drm/i915/gt/uc/intel_guc_log_debugfs.c @@ -105,10 +105,49 @@ DEFINE_SIMPLE_ATTRIBUTE(guc_log_level_fops, guc_log_level_get, guc_log_level_set, "%lld\n"); +static int guc_log_relay_buf_size_get(void *data, u64 *val) +{ + struct intel_guc_log *log = data; + + if (!log) + return -ENODEV; + if (!log->vma) + return -ENODEV; + + *val = (u64)intel_guc_log_size(log); + + return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(guc_log_relay_buf_size_fops, + guc_log_relay_buf_size_get, NULL, + "%lld\n"); + +static int guc_log_relay_subbuf_count_get(void *data, u64 *val) +{ + struct intel_guc_log *log = data; + + if (!log) + return -ENODEV; + if (!log->vma) + return -ENODEV; + + *val = intel_guc_log_relay_subbuf_count(log); + + return 0; +} + +DEFINE_SIMPLE_ATTRIBUTE(guc_log_relay_subbuf_count_fops, + guc_log_relay_subbuf_count_get, NULL, + "%lld\n"); + static int guc_log_relay_open(struct inode *inode, struct file *file) { struct intel_guc_log *log = inode->i_private; + if (!log) + return -ENODEV; + if (!intel_guc_is_ready(log_to_guc(log))) return -ENODEV; @@ -166,6 +205,8 @@ void intel_guc_log_debugfs_register(struct intel_guc_log *log, { "guc_load_err_log_dump", &guc_load_err_log_dump_fops, NULL }, { "guc_log_level", &guc_log_level_fops, NULL }, { "guc_log_relay", &guc_log_relay_fops, NULL }, + { "guc_log_relay_buf_size", &guc_log_relay_buf_size_fops, NULL }, + { "guc_log_relay_subbuf_count", &guc_log_relay_subbuf_count_fops, NULL }, }; if (!intel_guc_is_supported(log_to_guc(log))) -- 2.25.1