Peripherals using a combined MMIO + CSR interface currently implement it locally. Most of this functionality can be moved out into a trait saving a lot of boilerplate.