tree: https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git habanalabs-next head: 19a17a9fb486b2961dbd7f3fff0d79a144c9a3b6 commit: 3daa64eea1fb219c8cfb3bb6948dc2993652e201 [40/63] habanalabs: fix firmware descriptor copy operation config: arm-randconfig-s042-20221127 compiler: arm-linux-gnueabi-gcc (GCC) 12.1.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-39-gce1a6720-dirty # https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git/commit/?id=3daa64eea1fb219c8cfb3bb6948dc2993652e201 git remote add ogabbay https://git.kernel.org/pub/scm/linux/kernel/git/ogabbay/linux.git git fetch --no-tags ogabbay habanalabs-next git checkout 3daa64eea1fb219c8cfb3bb6948dc2993652e201 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm SHELL=/bin/bash drivers/misc/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) drivers/misc/habanalabs/common/firmware_if.c:2035:22: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void [noderef] __iomem *temp_fw_desc @@ got void * @@ drivers/misc/habanalabs/common/firmware_if.c:2035:22: sparse: expected void [noderef] __iomem *temp_fw_desc drivers/misc/habanalabs/common/firmware_if.c:2035:22: sparse: got void * >> drivers/misc/habanalabs/common/firmware_if.c:2039:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *to @@ got void [noderef] __iomem *temp_fw_desc @@ drivers/misc/habanalabs/common/firmware_if.c:2039:9: sparse: expected void *to drivers/misc/habanalabs/common/firmware_if.c:2039:9: sparse: got void [noderef] __iomem *temp_fw_desc drivers/misc/habanalabs/common/firmware_if.c:2042:42: sparse: sparse: cast removes address space '__iomem' of expression drivers/misc/habanalabs/common/firmware_if.c:2043:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const *addr @@ got void [noderef] __iomem *temp_fw_desc @@ drivers/misc/habanalabs/common/firmware_if.c:2043:15: sparse: expected void const *addr drivers/misc/habanalabs/common/firmware_if.c:2043:15: sparse: got void [noderef] __iomem *temp_fw_desc vim +2039 drivers/misc/habanalabs/common/firmware_if.c 1979 1980 /** 1981 * hl_fw_dynamic_read_and_validate_descriptor - read and validate FW descriptor 1982 * 1983 * @hdev: pointer to the habanalabs device structure 1984 * @fw_loader: managing structure for loading device's FW 1985 * 1986 * @return 0 on success, otherwise non-zero error code 1987 */ 1988 static int hl_fw_dynamic_read_and_validate_descriptor(struct hl_device *hdev, 1989 struct fw_load_mgr *fw_loader) 1990 { 1991 struct lkd_fw_comms_desc *fw_desc; 1992 void __iomem *src, *temp_fw_desc; 1993 struct pci_mem_region *region; 1994 struct fw_response *response; 1995 u16 fw_data_size; 1996 enum pci_region region_id; 1997 int rc; 1998 1999 fw_desc = &fw_loader->dynamic_loader.comm_desc; 2000 response = &fw_loader->dynamic_loader.response; 2001 2002 region_id = (response->ram_type == COMMS_SRAM) ? 2003 PCI_REGION_SRAM : PCI_REGION_DRAM; 2004 2005 region = &hdev->pci_mem_region[region_id]; 2006 2007 rc = hl_fw_dynamic_validate_response(hdev, response, region); 2008 if (rc) { 2009 dev_err(hdev->dev, 2010 "invalid mem transfer request for FW descriptor\n"); 2011 return rc; 2012 } 2013 2014 /* 2015 * extract address to copy the descriptor from 2016 * in addition, as the descriptor value is going to be over-ridden by new data- we mark it 2017 * as invalid. 2018 * it will be marked again as valid once validated 2019 */ 2020 fw_loader->dynamic_loader.fw_desc_valid = false; 2021 src = hdev->pcie_bar[region->bar_id] + region->offset_in_bar + 2022 response->ram_offset; 2023 2024 /* 2025 * We do the copy of the fw descriptor in 2 phases: 2026 * 1. copy the header + data info according to our lkd_fw_comms_desc definition. 2027 * then we're able to read the actual data size provided by fw. 2028 * this is needed for cases where data in descriptor was changed(add/remove) 2029 * in embedded specs header file before updating lkd copy of the header file 2030 * 2. copy descriptor to temporary buffer with aligned size and send it to validation 2031 */ 2032 memcpy_fromio(fw_desc, src, sizeof(struct lkd_fw_comms_desc)); 2033 fw_data_size = le16_to_cpu(fw_desc->header.size); 2034 2035 temp_fw_desc = vzalloc(sizeof(struct comms_desc_header) + fw_data_size); 2036 if (!temp_fw_desc) 2037 return -ENOMEM; 2038 > 2039 memcpy_fromio(temp_fw_desc, src, sizeof(struct comms_desc_header) + fw_data_size); 2040 2041 rc = hl_fw_dynamic_validate_descriptor(hdev, fw_loader, 2042 (struct lkd_fw_comms_desc *) temp_fw_desc); 2043 vfree(temp_fw_desc); 2044 2045 return rc; 2046 } 2047 -- 0-DAY CI Kernel Test Service https://01.org/lkp