On Thu, Jun 9, 2016 at 11:55 AM, Peter Maydell <peter.mayd...@linaro.org> wrote: > On 12 May 2016 at 23:45, Alistair Francis <alistair.fran...@xilinx.com> wrote: >> This API provides some encapsulation of registers and factors our some > > "out" > >> common functionality to common code. Bits of device state (usually MMIO >> registers), often have all sorts of access restrictions and semantics > > spurious comma > >> associated with them. This API allow you to define what those > > "allows" > >> restrictions are on a bit-by-bit basis. >> >> Helper functions are then used to access the register which observe the >> semantics defined by the RegisterAccessInfo struct. >> >> Some features: >> Bits can be marked as read_only (ro field) >> Bits can be marked as write-1-clear (w1c field) >> Bits can be marked as reserved (rsvd field) >> Reset values can be defined (reset) >> Bits can be marked clear on read (cor) >> Pre and post action callbacks can be added to read and write ops >> Verbose debugging info can be enabled/disabled >> >> Useful for defining device register spaces in a data driven way. Cuts >> down on a lot of the verbosity and repetition in the switch-case blocks >> in the standard foo_mmio_read/write functions. >> >> Also useful for automated generation of device models from hardware >> design sources. >> >> Signed-off-by: Peter Crosthwaite <peter.crosthwa...@xilinx.com> >> Signed-off-by: Alistair Francis <alistair.fran...@xilinx.com> >> Reviewed-by: Alex Bennée <alex.ben...@linaro.org> >> --- >> V5: >> - Convert to using only one memory region >> V4: >> - Rebase >> - Remove the guest error masking >> - Simplify the unimplemented masking >> - Use the reserved value in the write calculations >> - Remove read_lite and write_lite >> - General fixes to asserts and log printing >> V3: >> - Address some comments from Fred >> >> hw/core/Makefile.objs | 1 + >> hw/core/register.c | 149 >> ++++++++++++++++++++++++++++++++++++++++++++++++++ >> include/hw/register.h | 110 +++++++++++++++++++++++++++++++++++++ >> 3 files changed, 260 insertions(+) >> create mode 100644 hw/core/register.c >> create mode 100644 include/hw/register.h >> >> diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs >> index abb3560..bf95db5 100644 >> --- a/hw/core/Makefile.objs >> +++ b/hw/core/Makefile.objs >> @@ -14,4 +14,5 @@ common-obj-$(CONFIG_SOFTMMU) += machine.o >> common-obj-$(CONFIG_SOFTMMU) += null-machine.o >> common-obj-$(CONFIG_SOFTMMU) += loader.o >> common-obj-$(CONFIG_SOFTMMU) += qdev-properties-system.o >> +common-obj-$(CONFIG_SOFTMMU) += register.o >> common-obj-$(CONFIG_PLATFORM_BUS) += platform-bus.o >> diff --git a/hw/core/register.c b/hw/core/register.c >> new file mode 100644 >> index 0000000..5e6f621 >> --- /dev/null >> +++ b/hw/core/register.c >> @@ -0,0 +1,149 @@ >> +/* >> + * Register Definition API >> + * >> + * Copyright (c) 2016 Xilinx Inc. >> + * Copyright (c) 2013 Peter Crosthwaite <peter.crosthwa...@xilinx.com> >> + * >> + * This work is licensed under the terms of the GNU GPL, version 2. See >> + * the COPYING file in the top-level directory. >> + */ > > Is this deliberately GPL2-only rather than 2-or-later ? > > Otherwise > Reviewed-by: Peter Maydell <peter.mayd...@linaro.org>
Awesome! Thanks Alistair > > thanks > -- PMM >