Forum | Documentation | Website | Blog

Skip to content
Snippets Groups Projects
  1. Feb 25, 2022
  2. Feb 24, 2022
  3. Feb 23, 2022
  4. Feb 22, 2022
  5. Feb 21, 2022
  6. Feb 19, 2022
    • Lucas De Marchi's avatar
      iosys-map: Add a few more helpers · e62f25e8
      Lucas De Marchi authored
      
      First the simplest ones:
      
      	- iosys_map_memset(): when abstracting system and I/O memory,
      	  just like the memcpy() use case, memset() also has dedicated
      	  functions to be called for using IO memory.
      	- iosys_map_memcpy_from(): we may need to copy data from I/O
      	  memory, not only to.
      
      In certain situations it's useful to be able to read or write to an
      offset that is calculated by having the memory layout given by a struct
      declaration. Usually we are going to read/write a u8, u16, u32 or u64.
      
      As a pre-requisite for the implementation, add iosys_map_memcpy_from()
      to be the equivalent of iosys_map_memcpy_to(), but in the other
      direction. Then add 2 pairs of macros:
      
      	- iosys_map_rd() / iosys_map_wr()
      	- iosys_map_rd_field() / iosys_map_wr_field()
      
      The first pair takes the C-type and offset to read/write. The second
      pair uses a struct describing the layout of the mapping in order to
      calculate the offset and size being read/written.
      
      We could use readb, readw, readl, readq and the write* counterparts,
      however due to alignment issues this may not work on all architectures.
      If alignment needs to be checked to call the right function, it's not
      possible to decide at compile-time which function to call: so just leave
      the decision to the memcpy function that will do exactly that.
      
      Finally, in order to use the above macros with a map derived from
      another, add another initializer: IOSYS_MAP_INIT_OFFSET().
      
      v2:
        - Rework IOSYS_MAP_INIT_OFFSET() so it doesn't rely on aliasing rules
          within the union
        - Add offset to both iosys_map_rd_field() and iosys_map_wr_field() to
          allow the struct itself to be at an offset from the mapping
        - Add documentation to iosys_map_rd_field() with example and expected
          memory layout
      v3:
        - Drop kernel.h include as it's not needed anymore
      
      Cc: Sumit Semwal <sumit.semwal@linaro.org>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Thomas Zimmermann <tzimmermann@suse.de>
      Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
      Cc: dri-devel@lists.freedesktop.org
      Cc: linux-kernel@vger.kernel.org
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Reviewed-by: default avatarMauro Carvalho Chehab <mchehab@kernel.org>
      Reviewed-by: default avatarMatt Atwood <matthew.s.atwood@intel.com>
      Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220216174147.3073235-3-lucas.demarchi@intel.com
      e62f25e8
    • Lucas De Marchi's avatar
      iosys-map: Add offset to iosys_map_memcpy_to() · cccd73d6
      Lucas De Marchi authored
      
      In certain situations it's useful to be able to write to an
      offset of the mapping. Add a dst_offset to iosys_map_memcpy_to().
      
      Cc: Sumit Semwal <sumit.semwal@linaro.org>
      Cc: Christian König <christian.koenig@amd.com>
      Cc: Thomas Zimmermann <tzimmermann@suse.de>
      Cc: dri-devel@lists.freedesktop.org
      Cc: linux-kernel@vger.kernel.org
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
      Reviewed-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
      Link: https://patchwork.freedesktop.org/patch/msgid/20220216174147.3073235-2-lucas.demarchi@intel.com
      cccd73d6
  7. Feb 18, 2022