Neil Armstrong <narmstr...@baylibre.com> writes: > This patch adds the platform driver for the Amlogic Meson GXBB Reset > Controller. > > Signed-off-by: Neil Armstrong <narmstr...@baylibre.com>
[...] > +static int meson_gxbb_reset_assert(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct meson_gxbb_reset *data = > + container_of(rcdev, struct meson_gxbb_reset, rcdev); > + unsigned int bank = id / BITS_PER_REG; > + unsigned int offset = id % BITS_PER_REG; > + void *reg_addr = data->reg_base + (bank << 2); > + > + if (bank >= REG_COUNT) > + return -EINVAL; > + > + writel(readl(reg_addr) | BIT(offset), reg_addr); The spec lists these registers as 16-bit registers, so probably readw/writew are more appropriate here. > + return 0; > +} > + > +static int meson_gxbb_reset_deassert(struct reset_controller_dev *rcdev, > + unsigned long id) > +{ > + struct meson_gxbb_reset *data = > + container_of(rcdev, struct meson_gxbb_reset, rcdev); > + unsigned int bank = id / BITS_PER_REG; > + unsigned int offset = id % BITS_PER_REG; > + void *reg_addr = data->reg_base + (bank << 2); > + > + if (bank >= REG_COUNT) > + return -EINVAL; > + > + writel(readl(reg_addr) & ~BIT(offset), reg_addr); and here. > + return 0; > +} Kevin