• Gabriel Somlo's avatar
    drivers/soc/litex: support 32-bit subregisters, 64-bit CPUs · 51f10922
    Gabriel Somlo authored
    Upstream LiteX now defaults to using 32-bit CSR subregisters
    (see https://github.com/enjoy-digital/litex/commit/a2b71fde).
    
    This patch expands on commit 22447a99 ("drivers/soc/litex: add
    LiteX SoC Controller driver"), adding support for handling both 8-
    and 32-bit LiteX CSR (MMIO) subregisters, as determined by the
    LITEX_SUBREG_SIZE Kconfig option.
    
    NOTE that while LITEX_SUBREG_SIZE could theoretically be a device
    tree property, defining it as a compile-time constant allows for
    much better optimization of the resulting code. This is further
    supported by the low expected usefulness of deploying the same
    kernel across LiteX SoCs built with different CSR-Bus data widths.
    
    Finally, the litex_[read|write][8|16|32|64]() accessors are
    redefined in terms of litex_[get|set]_reg(), which, after compiler
    optimization, will result in code as efficient as hardcoded shifts,
    but with the added benefit of automatically matching the appropriate
    LITEX_SUBREG_SIZE.
    
    NOTE that litex_[get|set]_reg() nominally operate on 64-bit data,
    but that will also be optimized by the compiler in situations where
    narrower data is used from a call site.
    Signed-off-by: default avatarGabriel Somlo <gsomlo@gmail.com>
    Signed-off-by: default avatarStafford Horne <shorne@gmail.com>
    51f10922
litex_soc_ctrl.c 2.82 KB