From: Jani Nikula <jani.nikula@intel.com>
To: Chris Wilson <chris@chris-wilson.co.uk>,
Michal Wajdeczko <michal.wajdeczko@intel.com>,
intel-gfx@lists.freedesktop.org
Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
Subject: Re: [PATCH] drm/i915: encourage BIT() macro usage in register definitions
Date: Thu, 28 Jun 2018 15:03:15 +0300 [thread overview]
Message-ID: <87sh57rud8.fsf@intel.com> (raw)
In-Reply-To: <153011517949.8693.5606799904077354457@mail.alporthouse.com>
On Wed, 27 Jun 2018, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> Quoting Michal Wajdeczko (2018-06-27 16:51:42)
>> On Wed, 27 Jun 2018 16:41:13 +0200, Jani Nikula <jani.nikula@intel.com>
>> wrote:
>>
>> > There's already some BIT() usage here and there, embrace it.
>> >
>> > Cc: Paulo Zanoni <paulo.r.zanoni@intel.com>
>> > Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>> > ---
>> > drivers/gpu/drm/i915/i915_reg.h | 9 +++++----
>> > 1 file changed, 5 insertions(+), 4 deletions(-)
>> >
>> > diff --git a/drivers/gpu/drm/i915/i915_reg.h
>> > b/drivers/gpu/drm/i915/i915_reg.h
>> > index 476118f46cf3..64b9c270045d 100644
>> > --- a/drivers/gpu/drm/i915/i915_reg.h
>> > +++ b/drivers/gpu/drm/i915/i915_reg.h
>> > @@ -65,9 +65,10 @@
>> > * but do note that the macros may be needed to read as well as write
>> > the
>> > * register contents.
>> > *
>> > - * Define bits using ``(1 << N)`` instead of ``BIT(N)``. We may change
>> > this in
>> > - * the future, but this is the prevailing style. Do **not** add
>> > ``_BIT`` suffix
>> > - * to the name.
>> > + * Define bits using ``BIT(N)`` instead of ``(1 << N)``. Do **not** add
>> > ``_BIT``
>> > + * suffix to the name. Exception to ``BIT()`` usage: Value 1 for a bit
>> > field
>> > + * should be defined using ``(1 << N)`` to be in line with other values
>> > such as
>> > + * ``(2 << N)`` for the same field.
>> > *
>> > * Group the register and its contents together without blank lines,
>> > separate
>> > * from other registers and their contents with one blank line.
>> > @@ -105,7 +106,7 @@
>> > * #define _FOO_A 0xf000
>> > * #define _FOO_B 0xf001
>> > * #define FOO(pipe) _MMIO_PIPE(pipe, _FOO_A, _FOO_B)
>> > - * #define FOO_ENABLE (1 << 31)
>> > + * #define FOO_ENABLE BIT(31)
>>
>> hmm, this breaks nice consistency between one- and multi-bit fields ..
>>
>> > * #define FOO_MODE_MASK (0xf << 16)
>>
>> .. but if you want to use macro for single bit, then maybe you should
>> also consider other existing macro for the mask definition:
>>
>> #define FOO_MODE_MASK GENMASK(19, 16)
>>
>> > * #define FOO_MODE_SHIFT 16
>> > * #define FOO_MODE_BAR (0 << 16)
>>
>> .. but we still don't have any macro for defining multi-bit values
>> so I'm not sure if this change will make code really easier to read
>
> #include <linux/bitfield.h>
>
> I'm not sure if I'm ready to embrace that yet, but it does seem to be
> the direction we should be heading in. Primarily to check the invalid
> range checking & usage.
I guess there are two things here. Using bitfield.h macros to define our
own stuff is one thing, like so:
#define FOO_ENABLE BIT(31)
#define FOO_MODE_MASK GENMASK(19, 16)
#define FOO_MODE_SHIFT 16
#define FOO_MODE_BAR FIELD_PREP(FOO_MODE_MASK, 0)
#define FOO_MODE_BAZ FIELD_PREP(FOO_MODE_MASK, 1)
#define FOO_MODE_QUX_SNB FIELD_PREP(FOO_MODE_MASK, 2)
The range checking is indeed an advantage.
Using FIELD_PREP() or FIELD_GET() in code is another, because we
currently don't define the *unshifted* field values. Everything is
defined with the shift. Defining everything unshifted and then moving
the FIELD_PREP() and FIELD_GET() in code would be quite the change.
BR,
Jani.
--
Jani Nikula, Intel Open Source Graphics Center
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
next prev parent reply other threads:[~2018-06-28 12:03 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-27 14:41 [PATCH] drm/i915: encourage BIT() macro usage in register definitions Jani Nikula
2018-06-27 15:51 ` Michal Wajdeczko
2018-06-27 15:59 ` Chris Wilson
2018-06-28 12:03 ` Jani Nikula [this message]
2018-06-28 17:45 ` Paulo Zanoni
2018-06-28 19:05 ` Rodrigo Vivi
2018-06-27 17:25 ` ✓ Fi.CI.BAT: success for " Patchwork
2018-06-27 20:07 ` ✓ Fi.CI.IGT: " Patchwork
2018-06-28 4:57 ` [PATCH] " Rodrigo Vivi
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=87sh57rud8.fsf@intel.com \
--to=jani.nikula@intel.com \
--cc=chris@chris-wilson.co.uk \
--cc=intel-gfx@lists.freedesktop.org \
--cc=michal.wajdeczko@intel.com \
--cc=paulo.r.zanoni@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.