From: Jani Nikula <jani.nikula@intel.com>
To: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>,
intel-gfx@lists.freedesktop.org
Subject: Re: [Intel-gfx] [PATCH] drm/i915: split out i915_reg_read_ioctl() to i915_ioctl.[ch]
Date: Fri, 21 Jan 2022 10:37:54 +0200 [thread overview]
Message-ID: <87h79x8owt.fsf@intel.com> (raw)
In-Reply-To: <cdd01bab-794f-4b45-c3d6-f14955c872bd@linux.intel.com>
On Thu, 20 Jan 2022, Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com> wrote:
> On 20/01/2022 11:33, Jani Nikula wrote:
>> Add new files i915_ioctl.[ch] to hold small ioctls that are out of place
>> everywhere else, and not big enough to warrant a file of their own. For
>> starters, it's just for i915_reg_read_ioctl() that's a bit high level
>> for a low level implementation that intel_uncore.[ch] is.
>>
>> Suggested-by: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> Copy & paste checks out and I obviously support the idea. :) Thanks for
> accomodating it.
>
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Thanks, pushed!
BR,
Jani.
>
> Regards,
>
> Tvrtko
>
>> ---
>> drivers/gpu/drm/i915/Makefile | 3 +-
>> drivers/gpu/drm/i915/i915_driver.c | 1 +
>> drivers/gpu/drm/i915/i915_drv.h | 3 -
>> drivers/gpu/drm/i915/i915_ioctl.c | 94 +++++++++++++++++++++++++++++
>> drivers/gpu/drm/i915/i915_ioctl.h | 14 +++++
>> drivers/gpu/drm/i915/intel_uncore.c | 70 ---------------------
>> 6 files changed, 111 insertions(+), 74 deletions(-)
>> create mode 100644 drivers/gpu/drm/i915/i915_ioctl.c
>> create mode 100644 drivers/gpu/drm/i915/i915_ioctl.h
>>
>> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
>> index 451df10e3a36..a26e6736bebb 100644
>> --- a/drivers/gpu/drm/i915/Makefile
>> +++ b/drivers/gpu/drm/i915/Makefile
>> @@ -32,8 +32,9 @@ subdir-ccflags-y += -I$(srctree)/$(src)
>> # core driver code
>> i915-y += i915_driver.o \
>> i915_config.o \
>> - i915_irq.o \
>> i915_getparam.o \
>> + i915_ioctl.o \
>> + i915_irq.o \
>> i915_mitigations.o \
>> i915_module.o \
>> i915_params.o \
>> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
>> index 8bef67cb6c33..3d41f532a5d6 100644
>> --- a/drivers/gpu/drm/i915/i915_driver.c
>> +++ b/drivers/gpu/drm/i915/i915_driver.c
>> @@ -76,6 +76,7 @@
>> #include "i915_drv.h"
>> #include "i915_getparam.h"
>> #include "i915_ioc32.h"
>> +#include "i915_ioctl.h"
>> #include "i915_irq.h"
>> #include "i915_memcpy.h"
>> #include "i915_perf.h"
>> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
>> index 890f1f6fbc49..44c1f98144b4 100644
>> --- a/drivers/gpu/drm/i915/i915_drv.h
>> +++ b/drivers/gpu/drm/i915/i915_drv.h
>> @@ -1734,9 +1734,6 @@ mkwrite_device_info(struct drm_i915_private *dev_priv)
>> return (struct intel_device_info *)INTEL_INFO(dev_priv);
>> }
>>
>> -int i915_reg_read_ioctl(struct drm_device *dev, void *data,
>> - struct drm_file *file);
>> -
>> static inline int intel_hws_csb_write_index(struct drm_i915_private *i915)
>> {
>> if (GRAPHICS_VER(i915) >= 11)
>> diff --git a/drivers/gpu/drm/i915/i915_ioctl.c b/drivers/gpu/drm/i915/i915_ioctl.c
>> new file mode 100644
>> index 000000000000..06a10ccea80b
>> --- /dev/null
>> +++ b/drivers/gpu/drm/i915/i915_ioctl.c
>> @@ -0,0 +1,94 @@
>> +// SPDX-License-Identifier: MIT
>> +/*
>> + * Copyright © 2022 Intel Corporation
>> + */
>> +
>> +#include "gt/intel_engine_regs.h"
>> +
>> +#include "i915_drv.h"
>> +#include "i915_gem.h"
>> +#include "i915_ioctl.h"
>> +#include "i915_reg.h"
>> +#include "intel_runtime_pm.h"
>> +#include "intel_uncore.h"
>> +
>> +/*
>> + * This file is for small ioctl functions that are out of place everywhere else,
>> + * and not big enough to warrant a file of their own.
>> + *
>> + * This is not the dumping ground for random ioctls.
>> + */
>> +
>> +struct reg_whitelist {
>> + i915_reg_t offset_ldw;
>> + i915_reg_t offset_udw;
>> + u8 min_graphics_ver;
>> + u8 max_graphics_ver;
>> + u8 size;
>> +};
>> +
>> +static const struct reg_whitelist reg_read_whitelist[] = {
>> + {
>> + .offset_ldw = RING_TIMESTAMP(RENDER_RING_BASE),
>> + .offset_udw = RING_TIMESTAMP_UDW(RENDER_RING_BASE),
>> + .min_graphics_ver = 4,
>> + .max_graphics_ver = 12,
>> + .size = 8
>> + }
>> +};
>> +
>> +int i915_reg_read_ioctl(struct drm_device *dev,
>> + void *data, struct drm_file *unused)
>> +{
>> + struct drm_i915_private *i915 = to_i915(dev);
>> + struct intel_uncore *uncore = &i915->uncore;
>> + struct drm_i915_reg_read *reg = data;
>> + struct reg_whitelist const *entry;
>> + intel_wakeref_t wakeref;
>> + unsigned int flags;
>> + int remain;
>> + int ret = 0;
>> +
>> + entry = reg_read_whitelist;
>> + remain = ARRAY_SIZE(reg_read_whitelist);
>> + while (remain) {
>> + u32 entry_offset = i915_mmio_reg_offset(entry->offset_ldw);
>> +
>> + GEM_BUG_ON(!is_power_of_2(entry->size));
>> + GEM_BUG_ON(entry->size > 8);
>> + GEM_BUG_ON(entry_offset & (entry->size - 1));
>> +
>> + if (IS_GRAPHICS_VER(i915, entry->min_graphics_ver, entry->max_graphics_ver) &&
>> + entry_offset == (reg->offset & -entry->size))
>> + break;
>> + entry++;
>> + remain--;
>> + }
>> +
>> + if (!remain)
>> + return -EINVAL;
>> +
>> + flags = reg->offset & (entry->size - 1);
>> +
>> + with_intel_runtime_pm(&i915->runtime_pm, wakeref) {
>> + if (entry->size == 8 && flags == I915_REG_READ_8B_WA)
>> + reg->val = intel_uncore_read64_2x32(uncore,
>> + entry->offset_ldw,
>> + entry->offset_udw);
>> + else if (entry->size == 8 && flags == 0)
>> + reg->val = intel_uncore_read64(uncore,
>> + entry->offset_ldw);
>> + else if (entry->size == 4 && flags == 0)
>> + reg->val = intel_uncore_read(uncore, entry->offset_ldw);
>> + else if (entry->size == 2 && flags == 0)
>> + reg->val = intel_uncore_read16(uncore,
>> + entry->offset_ldw);
>> + else if (entry->size == 1 && flags == 0)
>> + reg->val = intel_uncore_read8(uncore,
>> + entry->offset_ldw);
>> + else
>> + ret = -EINVAL;
>> + }
>> +
>> + return ret;
>> +}
>> diff --git a/drivers/gpu/drm/i915/i915_ioctl.h b/drivers/gpu/drm/i915/i915_ioctl.h
>> new file mode 100644
>> index 000000000000..f16ae87b8b8a
>> --- /dev/null
>> +++ b/drivers/gpu/drm/i915/i915_ioctl.h
>> @@ -0,0 +1,14 @@
>> +/* SPDX-License-Identifier: MIT */
>> +/*
>> + * Copyright © 2022 Intel Corporation
>> + */
>> +
>> +#ifndef __I915_IOCTL_H__
>> +#define __I915_IOCTL_H__
>> +
>> +struct drm_device;
>> +struct drm_file;
>> +
>> +int i915_reg_read_ioctl(struct drm_device *dev, void *data, struct drm_file *file);
>> +
>> +#endif /* __I915_IOCTL_H__ */
>> diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c
>> index 41d082213e81..00f9a05d2686 100644
>> --- a/drivers/gpu/drm/i915/intel_uncore.c
>> +++ b/drivers/gpu/drm/i915/intel_uncore.c
>> @@ -2255,76 +2255,6 @@ void intel_uncore_fini_mmio(struct intel_uncore *uncore)
>> }
>> }
>>
>> -static const struct reg_whitelist {
>> - i915_reg_t offset_ldw;
>> - i915_reg_t offset_udw;
>> - u8 min_graphics_ver;
>> - u8 max_graphics_ver;
>> - u8 size;
>> -} reg_read_whitelist[] = { {
>> - .offset_ldw = RING_TIMESTAMP(RENDER_RING_BASE),
>> - .offset_udw = RING_TIMESTAMP_UDW(RENDER_RING_BASE),
>> - .min_graphics_ver = 4,
>> - .max_graphics_ver = 12,
>> - .size = 8
>> -} };
>> -
>> -int i915_reg_read_ioctl(struct drm_device *dev,
>> - void *data, struct drm_file *file)
>> -{
>> - struct drm_i915_private *i915 = to_i915(dev);
>> - struct intel_uncore *uncore = &i915->uncore;
>> - struct drm_i915_reg_read *reg = data;
>> - struct reg_whitelist const *entry;
>> - intel_wakeref_t wakeref;
>> - unsigned int flags;
>> - int remain;
>> - int ret = 0;
>> -
>> - entry = reg_read_whitelist;
>> - remain = ARRAY_SIZE(reg_read_whitelist);
>> - while (remain) {
>> - u32 entry_offset = i915_mmio_reg_offset(entry->offset_ldw);
>> -
>> - GEM_BUG_ON(!is_power_of_2(entry->size));
>> - GEM_BUG_ON(entry->size > 8);
>> - GEM_BUG_ON(entry_offset & (entry->size - 1));
>> -
>> - if (IS_GRAPHICS_VER(i915, entry->min_graphics_ver, entry->max_graphics_ver) &&
>> - entry_offset == (reg->offset & -entry->size))
>> - break;
>> - entry++;
>> - remain--;
>> - }
>> -
>> - if (!remain)
>> - return -EINVAL;
>> -
>> - flags = reg->offset & (entry->size - 1);
>> -
>> - with_intel_runtime_pm(&i915->runtime_pm, wakeref) {
>> - if (entry->size == 8 && flags == I915_REG_READ_8B_WA)
>> - reg->val = intel_uncore_read64_2x32(uncore,
>> - entry->offset_ldw,
>> - entry->offset_udw);
>> - else if (entry->size == 8 && flags == 0)
>> - reg->val = intel_uncore_read64(uncore,
>> - entry->offset_ldw);
>> - else if (entry->size == 4 && flags == 0)
>> - reg->val = intel_uncore_read(uncore, entry->offset_ldw);
>> - else if (entry->size == 2 && flags == 0)
>> - reg->val = intel_uncore_read16(uncore,
>> - entry->offset_ldw);
>> - else if (entry->size == 1 && flags == 0)
>> - reg->val = intel_uncore_read8(uncore,
>> - entry->offset_ldw);
>> - else
>> - ret = -EINVAL;
>> - }
>> -
>> - return ret;
>> -}
>> -
>> /**
>> * __intel_wait_for_register_fw - wait until register matches expected state
>> * @uncore: the struct intel_uncore
>>
--
Jani Nikula, Intel Open Source Graphics Center
next prev parent reply other threads:[~2022-01-21 8:38 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-20 11:33 [Intel-gfx] [PATCH] drm/i915: split out i915_reg_read_ioctl() to i915_ioctl.[ch] Jani Nikula
2022-01-20 11:57 ` Tvrtko Ursulin
2022-01-21 8:37 ` Jani Nikula [this message]
2022-01-20 12:31 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for " Patchwork
2022-01-20 12:32 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-01-20 13:05 ` [Intel-gfx] ✗ Fi.CI.BAT: failure " Patchwork
2022-01-20 13:41 ` [Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915: split out i915_reg_read_ioctl() to i915_ioctl.[ch] (rev2) Patchwork
2022-01-20 13:42 ` [Intel-gfx] ✗ Fi.CI.SPARSE: " Patchwork
2022-01-20 14:11 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2022-01-20 16:06 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
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=87h79x8owt.fsf@intel.com \
--to=jani.nikula@intel.com \
--cc=intel-gfx@lists.freedesktop.org \
--cc=tvrtko.ursulin@linux.intel.com \
/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.