Måns Rullgård wrote: > The bad index will hit some zero-padding following the array and end > up trying to write UART_RXD which is read-only. I may be about to learn something. Please bear with me. Just to be clear, we are discussing this code: static const u8 au_io_out_map[] = { [0] = 1, [1] = 2, [2] = 4, [3] = 5, [4] = 6, }; static void au_serial_out(struct uart_port *p, int offset, int value) { offset = au_io_out_map[offset] << p->regshift; __raw_writel(value, p->membase + offset); } when au_serial_out is invoked with offset = 7 You're saying that au_io_out_map[7] will likely be 0, and __raw_writel(value, p->membase + 0); will try to write to a read-only location. How can p->membase + 0 be RO, while p->membase + 4 is RW? What architecture allows such a small granularity for memory access protection? How does it work? Regards. -- To unsubscribe from this list: send the line "unsubscribe linux-serial" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html