csr: Rework accessors
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 13 May 2020 11:50:44 +0000 (21:50 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 14 May 2020 11:38:19 +0000 (21:38 +1000)
commit1e35b0e7057bad3f2dad1359a36e436ac64105ea
treebeb8afaccae703377ad69b5414199c9e47262d3e
parentd4f44597de8b3a89df70d17d1701d693af0385eb
csr: Rework accessors

Have all the new compound accessors be written in terms of the simple
ones and fix how CSR_ACCCESORS_DEFINED can be used to override the
simple ones but keep the definitions of the other ones around.

This *should* also also fix incorrect multiple accesses done
by  64-bit CPUs to 32-bit CSR busses, and make the accessors not
depend on CONFIG_CSR_ALIGNMENT being the same as sizeof(unsigned long)*8

In addition, the generated csr.h now will include system.h
always when with_access_functions is True. This guarantees that the
higher level accessors are defined. The extern prototypes for the
simple accessors when CSR_ACCCESORS_DEFINED are removed and system.h
is responsible for providing them. It is also added to hw/common.h

This allows system.h to set CSR_ACCCESORS_DEFINED when necessary, in
which case it's responsible for both declaring and defining the simple
accessors. That way, it can make them inline rather than forcing them
to be extern which at least on microwatt saves spaces.

One can continue to use -DCSR_ACCCESORS_DEFINED but in that case a system.h
will have to be provided with at least the extern definitions.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
litex/soc/integration/export.py
litex/soc/software/include/hw/common.h