On 07/01/15 16:32, Roger Quadros wrote: > use of regmap_read() and regmap_write() in c_can_hw_raminit_syscon() > is not safe as the RAMINIT register can be shared between different drivers > at least for TI SoCs. > > To make the modification atomic we switch to using regmap_update_bits(). > > Signed-off-by: Roger Quadros <rogerq@xxxxxx> > --- > drivers/net/can/c_can/c_can_platform.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/net/can/c_can/c_can_platform.c b/drivers/net/can/c_can/c_can_platform.c > index f363972..364209a 100644 > --- a/drivers/net/can/c_can/c_can_platform.c > +++ b/drivers/net/can/c_can/c_can_platform.c > @@ -110,6 +110,10 @@ static void c_can_hw_raminit_syscon(const struct c_can_priv *priv, bool enable) > */ > ctrl &= ~(1 << raminit->bits.start); > ctrl |= 1 << raminit->bits.done; > + > + /* we can't use regmap_update_bits here as it will bypass the write > + * if START is already 0 and DONE is already 1. > + */ > regmap_write(raminit->syscon, raminit->reg, ctrl); Can you first use update_bits to change either bit, so that this update will be done? Tomi
Attachment:
signature.asc
Description: OpenPGP digital signature