Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4370fe1c authored by Magnus Damm's avatar Magnus Damm Committed by Paul Mundt
Browse files

sh: intc register modify fix



Make sure register modifications stay atomic. Fixes processors with
shared priority register masking. Dual bitmap masking is unaffected.

Signed-off-by: default avatarMagnus Damm <damm@igel.co.jp>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 720be990
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -101,17 +101,26 @@ static void write_32(unsigned long addr, unsigned long h, unsigned long data)

static void modify_8(unsigned long addr, unsigned long h, unsigned long data)
{
	unsigned long flags;
	local_irq_save(flags);
	ctrl_outb(set_field(ctrl_inb(addr), data, h), addr);
	local_irq_restore(flags);
}

static void modify_16(unsigned long addr, unsigned long h, unsigned long data)
{
	unsigned long flags;
	local_irq_save(flags);
	ctrl_outw(set_field(ctrl_inw(addr), data, h), addr);
	local_irq_restore(flags);
}

static void modify_32(unsigned long addr, unsigned long h, unsigned long data)
{
	unsigned long flags;
	local_irq_save(flags);
	ctrl_outl(set_field(ctrl_inl(addr), data, h), addr);
	local_irq_restore(flags);
}

enum {	REG_FN_ERR = 0, REG_FN_WRITE_BASE = 1, REG_FN_MODIFY_BASE = 5 };