Message ID | 20220620200644.1961936-18-aidanmacdonald.0x0@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | regmap-irq cleanups and refactoring | expand |
On Mon, Jun 20, 2022 at 10:08 PM Aidan MacDonald <aidanmacdonald.0x0@gmail.com> wrote: > > This flag is necessary to prepare for fixing the behavior of unmask > registers. Existing chips that set mask_base and unmask_base must > set broken_mask_unmask=1 to declare that they expect the mask bits Boolean should take true/false. > will be inverted in both registers, contrary to the usual behavior > of mask registers. > diff --git a/include/linux/regmap.h b/include/linux/regmap.h > index ee2567a0465c..21a70fd99493 100644 > --- a/include/linux/regmap.h > +++ b/include/linux/regmap.h > @@ -1523,6 +1523,7 @@ struct regmap_irq_chip { > bool clear_on_unmask:1; > bool not_fixed_stride:1; > bool status_invert:1; > + bool broken_mask_unmask:1; Looking at the given context, I would group it with clean_on_unmask above. The above is weird enough on its own. Can you prepare a precursor patch that either drops the bit fields of booleans or moves them to unsigned int? Note, bit fields in C are beasts when it goes to concurrent access. It would be nice to ensure these are not the cases of a such.
Andy Shevchenko <andy.shevchenko@gmail.com> writes: > On Mon, Jun 20, 2022 at 10:08 PM Aidan MacDonald > <aidanmacdonald.0x0@gmail.com> wrote: >> >> This flag is necessary to prepare for fixing the behavior of unmask >> registers. Existing chips that set mask_base and unmask_base must >> set broken_mask_unmask=1 to declare that they expect the mask bits > > Boolean should take true/false. > >> will be inverted in both registers, contrary to the usual behavior >> of mask registers. > >> diff --git a/include/linux/regmap.h b/include/linux/regmap.h >> index ee2567a0465c..21a70fd99493 100644 >> --- a/include/linux/regmap.h >> +++ b/include/linux/regmap.h >> @@ -1523,6 +1523,7 @@ struct regmap_irq_chip { >> bool clear_on_unmask:1; >> bool not_fixed_stride:1; >> bool status_invert:1; >> + bool broken_mask_unmask:1; > > Looking at the given context, I would group it with clean_on_unmask above. > > The above is weird enough on its own. Can you prepare a precursor > patch that either drops the bit fields of booleans or moves them to > unsigned int? Sure. > Note, bit fields in C are beasts when it goes to concurrent access. It > would be nice to ensure these are not the cases of a such. These are read-only so there's no danger here.
diff --git a/include/linux/regmap.h b/include/linux/regmap.h index ee2567a0465c..21a70fd99493 100644 --- a/include/linux/regmap.h +++ b/include/linux/regmap.h @@ -1523,6 +1523,7 @@ struct regmap_irq_chip { bool clear_on_unmask:1; bool not_fixed_stride:1; bool status_invert:1; + bool broken_mask_unmask:1; int num_regs;
This flag is necessary to prepare for fixing the behavior of unmask registers. Existing chips that set mask_base and unmask_base must set broken_mask_unmask=1 to declare that they expect the mask bits will be inverted in both registers, contrary to the usual behavior of mask registers. Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@gmail.com> --- include/linux/regmap.h | 1 + 1 file changed, 1 insertion(+)