BCC: l...@intel.com
CC: kbuild-...@lists.01.org
CC: linux-ker...@vger.kernel.org
TO: Gwendal Grignou <gwen...@chromium.org>
CC: Jiri Kosina <jkos...@suse.cz>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   2880e1a175b9f31798f9d9482ee49187f61b5539
commit: f97ec5d75e9261a5da78dc28a8955b7cc0c4468b HID: intel-ish-hid: Use 
dma_alloc_coherent for firmware update
date:   6 months ago
:::::: branch date: 2 hours ago
:::::: commit date: 6 months ago
config: x86_64-randconfig-m031-20220829 
(https://download.01.org/0day-ci/archive/20220902/202209020212.qpvdppvp-...@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-5) 11.3.0

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

smatch warnings:
drivers/hid/intel-ish-hid/ishtp-fw-loader.c:714 ish_fw_xfer_direct_dma() error: 
uninitialized symbol 'rv'.

vim +/rv +714 drivers/hid/intel-ish-hid/ishtp-fw-loader.c

91b228107da3e4 Rushikesh S Kadam 2019-04-02  618  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  619  /**
91b228107da3e4 Rushikesh S Kadam 2019-04-02  620   * ish_fw_xfer_direct_dma() - 
Loads ISH firmware using direct dma
91b228107da3e4 Rushikesh S Kadam 2019-04-02  621   * @client_data:      Client 
data instance
91b228107da3e4 Rushikesh S Kadam 2019-04-02  622   * @fw:                       
Pointer to firmware data struct in host memory
91b228107da3e4 Rushikesh S Kadam 2019-04-02  623   * @fw_info:          Loader 
firmware properties
91b228107da3e4 Rushikesh S Kadam 2019-04-02  624   *
91b228107da3e4 Rushikesh S Kadam 2019-04-02  625   * Host firmware load is a 
unique case where we need to download
91b228107da3e4 Rushikesh S Kadam 2019-04-02  626   * a large firmware image 
(200+ Kb). This function implements
91b228107da3e4 Rushikesh S Kadam 2019-04-02  627   * direct DMA transfer in 
kernel and ISH firmware. This allows
91b228107da3e4 Rushikesh S Kadam 2019-04-02  628   * us to overcome the ISH-TP 
4 Kb limit, and allows us to DMA
91b228107da3e4 Rushikesh S Kadam 2019-04-02  629   * directly to ISH UMA at 
location of choice.
91b228107da3e4 Rushikesh S Kadam 2019-04-02  630   * Function depends on 
corresponding support in ISH firmware.
91b228107da3e4 Rushikesh S Kadam 2019-04-02  631   *
91b228107da3e4 Rushikesh S Kadam 2019-04-02  632   * Return: 0 for success, 
negative error code for failure.
91b228107da3e4 Rushikesh S Kadam 2019-04-02  633   */
91b228107da3e4 Rushikesh S Kadam 2019-04-02  634  static int 
ish_fw_xfer_direct_dma(struct ishtp_cl_data *client_data,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  635                                
  const struct firmware *fw,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  636                                
  const struct shim_fw_info fw_info)
91b228107da3e4 Rushikesh S Kadam 2019-04-02  637  {
91b228107da3e4 Rushikesh S Kadam 2019-04-02  638        int rv;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  639        void *dma_buf;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  640        dma_addr_t dma_buf_phy;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  641        u32 fragment_offset, 
fragment_size, payload_max_size;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  642        struct loader_msg_hdr 
ldr_xfer_dma_frag_ack;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  643        struct 
loader_xfer_dma_fragment ldr_xfer_dma_frag;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  644        struct device *devc = 
ishtp_get_pci_device(client_data->cl_device);
91b228107da3e4 Rushikesh S Kadam 2019-04-02  645        u32 shim_fw_buf_size =
91b228107da3e4 Rushikesh S Kadam 2019-04-02  646                
fw_info.ldr_capability.max_dma_buf_size;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  647  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  648        /*
91b228107da3e4 Rushikesh S Kadam 2019-04-02  649         * payload_max_size 
should be set to minimum of
91b228107da3e4 Rushikesh S Kadam 2019-04-02  650         *  (1) Size of 
firmware to be loaded,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  651         *  (2) Max DMA buffer 
size supported by Shim firmware,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  652         *  (3) DMA buffer size 
limit set by boot_param dma_buf_size_limit.
91b228107da3e4 Rushikesh S Kadam 2019-04-02  653         */
91b228107da3e4 Rushikesh S Kadam 2019-04-02  654        payload_max_size = 
min3(fw->size,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  655                                
(size_t)shim_fw_buf_size,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  656                                
(size_t)dma_buf_size_limit);
91b228107da3e4 Rushikesh S Kadam 2019-04-02  657  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  658        /*
91b228107da3e4 Rushikesh S Kadam 2019-04-02  659         * Buffer size should 
be multiple of cacheline size
91b228107da3e4 Rushikesh S Kadam 2019-04-02  660         * if it's not, select 
the previous cacheline boundary.
91b228107da3e4 Rushikesh S Kadam 2019-04-02  661         */
91b228107da3e4 Rushikesh S Kadam 2019-04-02  662        payload_max_size &= 
~(L1_CACHE_BYTES - 1);
91b228107da3e4 Rushikesh S Kadam 2019-04-02  663  
f97ec5d75e9261 Gwendal Grignou   2022-02-08  664        dma_buf = 
dma_alloc_coherent(devc, payload_max_size, &dma_buf_phy, GFP_KERNEL);
91b228107da3e4 Rushikesh S Kadam 2019-04-02  665        if (!dma_buf) {
91b228107da3e4 Rushikesh S Kadam 2019-04-02  666                
client_data->flag_retry = true;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  667                return -ENOMEM;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  668        }
91b228107da3e4 Rushikesh S Kadam 2019-04-02  669  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  670        
ldr_xfer_dma_frag.fragment.hdr.command = LOADER_CMD_XFER_FRAGMENT;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  671        
ldr_xfer_dma_frag.fragment.xfer_mode = LOADER_XFER_MODE_DIRECT_DMA;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  672        
ldr_xfer_dma_frag.ddr_phys_addr = (u64)dma_buf_phy;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  673  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  674        /* Send the firmware 
image in chucks of payload_max_size */
91b228107da3e4 Rushikesh S Kadam 2019-04-02  675        fragment_offset = 0;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  676        while (fragment_offset 
< fw->size) {
91b228107da3e4 Rushikesh S Kadam 2019-04-02  677                if 
(fragment_offset + payload_max_size < fw->size) {
91b228107da3e4 Rushikesh S Kadam 2019-04-02  678                        
fragment_size = payload_max_size;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  679                        
ldr_xfer_dma_frag.fragment.is_last = 0;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  680                } else {
91b228107da3e4 Rushikesh S Kadam 2019-04-02  681                        
fragment_size = fw->size - fragment_offset;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  682                        
ldr_xfer_dma_frag.fragment.is_last = 1;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  683                }
91b228107da3e4 Rushikesh S Kadam 2019-04-02  684  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  685                
ldr_xfer_dma_frag.fragment.offset = fragment_offset;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  686                
ldr_xfer_dma_frag.fragment.size = fragment_size;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  687                memcpy(dma_buf, 
&fw->data[fragment_offset], fragment_size);
91b228107da3e4 Rushikesh S Kadam 2019-04-02  688  
f97ec5d75e9261 Gwendal Grignou   2022-02-08  689                /* Flush cache 
to be sure the data is in main memory. */
91b228107da3e4 Rushikesh S Kadam 2019-04-02  690                
clflush_cache_range(dma_buf, payload_max_size);
91b228107da3e4 Rushikesh S Kadam 2019-04-02  691  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  692                
dev_dbg(cl_data_to_dev(client_data),
91b228107da3e4 Rushikesh S Kadam 2019-04-02  693                        
"xfer_mode=dma offset=0x%08x size=0x%x is_last=%d ddr_phys_addr=0x%016llx\n",
91b228107da3e4 Rushikesh S Kadam 2019-04-02  694                        
ldr_xfer_dma_frag.fragment.offset,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  695                        
ldr_xfer_dma_frag.fragment.size,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  696                        
ldr_xfer_dma_frag.fragment.is_last,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  697                        
ldr_xfer_dma_frag.ddr_phys_addr);
91b228107da3e4 Rushikesh S Kadam 2019-04-02  698  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  699                rv = 
loader_cl_send(client_data,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  700                                
    (u8 *)&ldr_xfer_dma_frag,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  701                                
    sizeof(ldr_xfer_dma_frag),
91b228107da3e4 Rushikesh S Kadam 2019-04-02  702                                
    (u8 *)&ldr_xfer_dma_frag_ack,
91b228107da3e4 Rushikesh S Kadam 2019-04-02  703                                
    sizeof(ldr_xfer_dma_frag_ack));
91b228107da3e4 Rushikesh S Kadam 2019-04-02  704                if (rv < 0) {
91b228107da3e4 Rushikesh S Kadam 2019-04-02  705                        
client_data->flag_retry = true;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  706                        goto 
end_err_resp_buf_release;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  707                }
91b228107da3e4 Rushikesh S Kadam 2019-04-02  708  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  709                fragment_offset 
+= fragment_size;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  710        }
91b228107da3e4 Rushikesh S Kadam 2019-04-02  711  
91b228107da3e4 Rushikesh S Kadam 2019-04-02  712  end_err_resp_buf_release:
f97ec5d75e9261 Gwendal Grignou   2022-02-08  713        dma_free_coherent(devc, 
payload_max_size, dma_buf, dma_buf_phy);
91b228107da3e4 Rushikesh S Kadam 2019-04-02 @714        return rv;
91b228107da3e4 Rushikesh S Kadam 2019-04-02  715  }
91b228107da3e4 Rushikesh S Kadam 2019-04-02  716  

:::::: The code at line 714 was first introduced by commit
:::::: 91b228107da3e41558449a62cd93816b47b3b4b5 HID: intel-ish-hid: ISH 
firmware loader client driver

:::::: TO: Rushikesh S Kadam <rushikesh.s.ka...@intel.com>
:::::: CC: Jiri Kosina <jkos...@suse.cz>

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-le...@lists.01.org

Reply via email to