From: kernel test robot <lkp@intel.com>
To: kbuild@lists.01.org
Subject: drivers/hid/intel-ish-hid/ishtp-fw-loader.c:714 ish_fw_xfer_direct_dma() error: uninitialized symbol 'rv'.
Date: Wed, 31 Aug 2022 11:26:56 +0800 [thread overview]
Message-ID: <202208311107.VDaPShK2-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 9704 bytes --]
BCC: lkp(a)intel.com
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Gwendal Grignou <gwendal@chromium.org>
CC: Jiri Kosina <jkosina@suse.cz>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: dcf8e5633e2e69ad60b730ab5905608b756a032f
commit: f97ec5d75e9261a5da78dc28a8955b7cc0c4468b HID: intel-ish-hid: Use dma_alloc_coherent for firmware update
date: 6 months ago
:::::: branch date: 31 hours ago
:::::: commit date: 6 months ago
config: x86_64-randconfig-m031-20220829 (https://download.01.org/0day-ci/archive/20220831/202208311107.VDaPShK2-lkp(a)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 <lkp@intel.com>
Reported-by: Dan Carpenter <dan.carpenter@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.kadam@intel.com>
:::::: CC: Jiri Kosina <jkosina@suse.cz>
--
0-DAY CI Kernel Test Service
https://01.org/lkp
next reply other threads:[~2022-08-31 3:26 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-31 3:26 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2022-10-19 9:07 drivers/hid/intel-ish-hid/ishtp-fw-loader.c:714 ish_fw_xfer_direct_dma() error: uninitialized symbol 'rv' kernel test robot
2022-10-19 4:54 kernel test robot
2022-09-01 18:38 kernel test robot
2022-05-03 14:04 kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202208311107.VDaPShK2-lkp@intel.com \
--to=lkp@intel.com \
--cc=kbuild@lists.01.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.