* [PATCH 1/2] drm/etnaviv: Implement drm_gem_object_funcs::print_info()
2024-08-25 21:19 [PATCH 0/2] drm/etnaviv: Implement drm_gem_object_funcs::print_info() Sui Jingfeng
@ 2024-08-25 21:19 ` Sui Jingfeng
2024-08-25 21:19 ` [PATCH 2/2] drm/etnaviv: Export drm_gem_print_info() and use it Sui Jingfeng
1 sibling, 0 replies; 3+ messages in thread
From: Sui Jingfeng @ 2024-08-25 21:19 UTC (permalink / raw)
To: Maxime Ripard, Thomas Zimmermann, Maarten Lankhorst, Lucas Stach,
Russell King, Christian Gmeiner
Cc: David Airlie, Daniel Vetter, etnaviv, dri-devel, linux-kernel,
Sui Jingfeng
It will be called by drm_gem_print_info() if have implemented, and this can
provide more information about the framebuffer objects.
Signed-off-by: Sui Jingfeng <sui.jingfeng@linux.dev>
---
drivers/gpu/drm/etnaviv/etnaviv_gem.c | 32 +++++++++++++++++++++++++++
drivers/gpu/drm/etnaviv/etnaviv_gem.h | 2 +-
2 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
index 5c0c9d4e3be1..9a688c95f34d 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
@@ -533,8 +533,40 @@ static const struct vm_operations_struct vm_ops = {
.close = drm_gem_vm_close,
};
+static const char *etnaviv_gem_obj_caching_info(u32 flags)
+{
+ switch (flags & ETNA_BO_CACHE_MASK) {
+ case ETNA_BO_CACHED:
+ return "cached";
+ case ETNA_BO_UNCACHED:
+ return "uncached";
+ case ETNA_BO_WC:
+ return "write-combine";
+ default:
+ break;
+ }
+
+ return "unknown";
+}
+
+static void etnaviv_gem_object_info(struct drm_printer *p,
+ unsigned int indent,
+ const struct drm_gem_object *obj)
+{
+ const struct etnaviv_gem_object *etnaviv_obj;
+
+ etnaviv_obj = container_of(obj, struct etnaviv_gem_object, base);
+
+ drm_printf_indent(p, indent, "caching mode=%s\n",
+ etnaviv_gem_obj_caching_info(etnaviv_obj->flags));
+ drm_printf_indent(p, indent, "active=%s\n",
+ str_yes_no(is_active(etnaviv_obj)));
+ drm_printf_indent(p, indent, "vaddr=%p\n", etnaviv_obj->vaddr);
+}
+
static const struct drm_gem_object_funcs etnaviv_gem_object_funcs = {
.free = etnaviv_gem_free_object,
+ .print_info = etnaviv_gem_object_info,
.pin = etnaviv_gem_prime_pin,
.unpin = etnaviv_gem_prime_unpin,
.get_sg_table = etnaviv_gem_prime_get_sg_table,
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.h b/drivers/gpu/drm/etnaviv/etnaviv_gem.h
index a42d260cac2c..3f8fe19a77cc 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.h
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.h
@@ -68,7 +68,7 @@ struct etnaviv_gem_ops {
int (*mmap)(struct etnaviv_gem_object *, struct vm_area_struct *);
};
-static inline bool is_active(struct etnaviv_gem_object *etnaviv_obj)
+static inline bool is_active(const struct etnaviv_gem_object *etnaviv_obj)
{
return atomic_read(&etnaviv_obj->gpu_active) != 0;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH 2/2] drm/etnaviv: Export drm_gem_print_info() and use it
2024-08-25 21:19 [PATCH 0/2] drm/etnaviv: Implement drm_gem_object_funcs::print_info() Sui Jingfeng
2024-08-25 21:19 ` [PATCH 1/2] " Sui Jingfeng
@ 2024-08-25 21:19 ` Sui Jingfeng
1 sibling, 0 replies; 3+ messages in thread
From: Sui Jingfeng @ 2024-08-25 21:19 UTC (permalink / raw)
To: Maxime Ripard, Thomas Zimmermann, Maarten Lankhorst, Lucas Stach,
Russell King, Christian Gmeiner
Cc: David Airlie, Daniel Vetter, etnaviv, dri-devel, linux-kernel,
Sui Jingfeng
This will make the newly implemented etnaviv_gem_object_funcs::print_info
get in use, which improves code sharing and simplifies debugfs. Achieve
better humen readability for debug log.
Signed-off-by: Sui Jingfeng <sui.jingfeng@linux.dev>
---
drivers/gpu/drm/drm_gem.c | 1 +
drivers/gpu/drm/etnaviv/etnaviv_gem.c | 11 ++++-------
include/drm/drm_gem.h | 2 ++
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index d4bbc5d109c8..9c5c971c1b23 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -1160,6 +1160,7 @@ void drm_gem_print_info(struct drm_printer *p, unsigned int indent,
if (obj->funcs->print_info)
obj->funcs->print_info(p, indent, obj);
}
+EXPORT_SYMBOL(drm_gem_print_info);
int drm_gem_pin_locked(struct drm_gem_object *obj)
{
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
index 9a688c95f34d..f2f446d46921 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
@@ -3,6 +3,7 @@
* Copyright (C) 2015-2018 Etnaviv Project
*/
+#include <drm/drm_gem.h>
#include <drm/drm_prime.h>
#include <linux/dma-mapping.h>
#include <linux/shmem_fs.h>
@@ -432,15 +433,11 @@ int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
#ifdef CONFIG_DEBUG_FS
static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
{
- struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
+ struct drm_printer p = drm_seq_file_printer(m);
struct dma_resv *robj = obj->resv;
- unsigned long off = drm_vma_node_start(&obj->vma_node);
int r;
- seq_printf(m, "%08x: %c %2d (%2d) %08lx %p %zd\n",
- etnaviv_obj->flags, is_active(etnaviv_obj) ? 'A' : 'I',
- obj->name, kref_read(&obj->refcount),
- off, etnaviv_obj->vaddr, obj->size);
+ drm_gem_print_info(&p, 1, obj);
r = dma_resv_lock(robj, NULL);
if (r)
@@ -461,7 +458,7 @@ void etnaviv_gem_describe_objects(struct etnaviv_drm_private *priv,
list_for_each_entry(etnaviv_obj, &priv->gem_list, gem_node) {
struct drm_gem_object *obj = &etnaviv_obj->base;
- seq_puts(m, " ");
+ seq_printf(m, "obj[%d]:\n", count);
etnaviv_gem_describe(obj, m);
count++;
size += obj->size;
diff --git a/include/drm/drm_gem.h b/include/drm/drm_gem.h
index bae4865b2101..0791566fab53 100644
--- a/include/drm/drm_gem.h
+++ b/include/drm/drm_gem.h
@@ -480,6 +480,8 @@ void drm_gem_vm_close(struct vm_area_struct *vma);
int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
struct vm_area_struct *vma);
int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
+void drm_gem_print_info(struct drm_printer *p, unsigned int indent,
+ const struct drm_gem_object *obj);
/**
* drm_gem_object_get - acquire a GEM buffer object reference
--
2.34.1
^ permalink raw reply related [flat|nested] 3+ messages in thread