Skip to content
  • Arnd Bergmann's avatar
    soc: fsl: dpio: fix incorrect pointer conversions · 0666e3c4
    Arnd Bergmann authored
    Building dpio for 32 bit shows a new compiler warning from converting
    a pointer to a u64:
    
    drivers/soc/fsl/dpio/qbman-portal.c: In function 'qbman_swp_enqueue_multiple_desc_direct':
    drivers/soc/fsl/dpio/qbman-portal.c:870:14: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
      870 |  addr_cena = (uint64_t)s->addr_cena;
    
    The variable is not used anywhere, so removing the assignment seems
    to be the correct workaround. After spotting what seemed to be
    some confusion about address spaces, I ran the file through sparse,
    which showed more warnings:
    
    drivers/soc/fsl/dpio/qbman-portal.c:756:42: warning: incorrect type in argument 1 (different address spaces)
    drivers/soc/fsl/dpio/qbman-portal.c:756:42:    expected void const volatile [noderef] <asn:2> *addr
    drivers/soc/fsl/dpio/qbman-portal.c:756:42:    got unsigned int [usertype] *[assigned] p
    drivers/soc/fsl/dpio/qbman-portal.c:902:42: warning: incorrect type in argument 1 (different address spaces)
    drivers/soc/fsl/dpio/qbman-portal.c:902:42:    expected void const volatile [noderef] <asn:2> *addr
    drivers/soc/fsl/dpio/qbman-portal.c:902:42:    got unsigned int [usertype] *[assigned] p
    
    Here, the problem is passing a token from memremap() into __raw_readl(),
    which is only defined to work on MMIO addresses but not RAM. Turning
    this into a simple pointer dereference avoids this warning as well.
    
    Link: https://lore.kernel.org/r/20200408185904.460563-1-arnd@arndb.de
    Fixes: 3b2abda7
    
     ("soc: fsl: dpio: Replace QMAN array mode with ring mode enqueue")
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    0666e3c4