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