CC: [email protected]
CC: [email protected]
TO: Hyun Kwon <[email protected]>
CC: Laurent Pinchart <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   368094df48e680fa51cedb68537408cfa64b788e
commit: d76271d22694e874ed70791702db9252ffe96a4c drm: xlnx: DRM/KMS driver for 
Xilinx ZynqMP DisplayPort Subsystem
date:   11 months ago
:::::: branch date: 26 hours ago
:::::: commit date: 11 months ago
config: h8300-randconfig-m031-20210609 (attached as .config)
compiler: h8300-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

smatch warnings:
drivers/gpu/drm/xlnx/zynqmp_dp.c:997 zynqmp_dp_aux_cmd_submit() error: we 
previously assumed 'buf' could be null (see line 966)

vim +/buf +997 drivers/gpu/drm/xlnx/zynqmp_dp.c

d76271d22694e8 Hyun Kwon 2018-07-07   926  
d76271d22694e8 Hyun Kwon 2018-07-07   927  /**
d76271d22694e8 Hyun Kwon 2018-07-07   928   * zynqmp_dp_aux_cmd_submit - Submit 
aux command
d76271d22694e8 Hyun Kwon 2018-07-07   929   * @dp: DisplayPort IP core structure
d76271d22694e8 Hyun Kwon 2018-07-07   930   * @cmd: aux command
d76271d22694e8 Hyun Kwon 2018-07-07   931   * @addr: aux address
d76271d22694e8 Hyun Kwon 2018-07-07   932   * @buf: buffer for command data
d76271d22694e8 Hyun Kwon 2018-07-07   933   * @bytes: number of bytes for @buf
d76271d22694e8 Hyun Kwon 2018-07-07   934   * @reply: reply code to be returned
d76271d22694e8 Hyun Kwon 2018-07-07   935   *
d76271d22694e8 Hyun Kwon 2018-07-07   936   * Submit an aux command. All aux 
related commands, native or i2c aux
d76271d22694e8 Hyun Kwon 2018-07-07   937   * read/write, are submitted through 
this function. The function is mapped to
d76271d22694e8 Hyun Kwon 2018-07-07   938   * the transfer function of struct 
drm_dp_aux. This function involves in
d76271d22694e8 Hyun Kwon 2018-07-07   939   * multiple register reads/writes, 
thus synchronization is needed, and it is
d76271d22694e8 Hyun Kwon 2018-07-07   940   * done by drm_dp_helper using 
@hw_mutex. The calling thread goes into sleep
d76271d22694e8 Hyun Kwon 2018-07-07   941   * if there's no immediate reply to 
the command submission. The reply code is
d76271d22694e8 Hyun Kwon 2018-07-07   942   * returned at @reply if @reply != 
NULL.
d76271d22694e8 Hyun Kwon 2018-07-07   943   *
d76271d22694e8 Hyun Kwon 2018-07-07   944   * Return: 0 if the command is 
submitted properly, or corresponding error code:
d76271d22694e8 Hyun Kwon 2018-07-07   945   * -EBUSY when there is any request 
already being processed
d76271d22694e8 Hyun Kwon 2018-07-07   946   * -ETIMEDOUT when receiving reply 
is timed out
d76271d22694e8 Hyun Kwon 2018-07-07   947   * -EIO when received bytes are less 
than requested
d76271d22694e8 Hyun Kwon 2018-07-07   948   */
d76271d22694e8 Hyun Kwon 2018-07-07   949  static int 
zynqmp_dp_aux_cmd_submit(struct zynqmp_dp *dp, u32 cmd, u16 addr,
d76271d22694e8 Hyun Kwon 2018-07-07   950                                   u8 
*buf, u8 bytes, u8 *reply)
d76271d22694e8 Hyun Kwon 2018-07-07   951  {
d76271d22694e8 Hyun Kwon 2018-07-07   952       bool is_read = (cmd & 
AUX_READ_BIT) ? true : false;
d76271d22694e8 Hyun Kwon 2018-07-07   953       u32 reg, i;
d76271d22694e8 Hyun Kwon 2018-07-07   954  
d76271d22694e8 Hyun Kwon 2018-07-07   955       reg = zynqmp_dp_read(dp, 
ZYNQMP_DP_INTERRUPT_SIGNAL_STATE);
d76271d22694e8 Hyun Kwon 2018-07-07   956       if (reg & 
ZYNQMP_DP_INTERRUPT_SIGNAL_STATE_REQUEST)
d76271d22694e8 Hyun Kwon 2018-07-07   957               return -EBUSY;
d76271d22694e8 Hyun Kwon 2018-07-07   958  
d76271d22694e8 Hyun Kwon 2018-07-07   959       zynqmp_dp_write(dp, 
ZYNQMP_DP_AUX_ADDRESS, addr);
d76271d22694e8 Hyun Kwon 2018-07-07   960       if (!is_read)
d76271d22694e8 Hyun Kwon 2018-07-07   961               for (i = 0; i < bytes; 
i++)
d76271d22694e8 Hyun Kwon 2018-07-07   962                       
zynqmp_dp_write(dp, ZYNQMP_DP_AUX_WRITE_FIFO,
d76271d22694e8 Hyun Kwon 2018-07-07   963                                       
buf[i]);
d76271d22694e8 Hyun Kwon 2018-07-07   964  
d76271d22694e8 Hyun Kwon 2018-07-07   965       reg = cmd << 
ZYNQMP_DP_AUX_COMMAND_CMD_SHIFT;
d76271d22694e8 Hyun Kwon 2018-07-07  @966       if (!buf || !bytes)
d76271d22694e8 Hyun Kwon 2018-07-07   967               reg |= 
ZYNQMP_DP_AUX_COMMAND_ADDRESS_ONLY;
d76271d22694e8 Hyun Kwon 2018-07-07   968       else
d76271d22694e8 Hyun Kwon 2018-07-07   969               reg |= (bytes - 1) << 
ZYNQMP_DP_AUX_COMMAND_BYTES_SHIFT;
d76271d22694e8 Hyun Kwon 2018-07-07   970       zynqmp_dp_write(dp, 
ZYNQMP_DP_AUX_COMMAND, reg);
d76271d22694e8 Hyun Kwon 2018-07-07   971  
d76271d22694e8 Hyun Kwon 2018-07-07   972       /* Wait for reply to be 
delivered upto 2ms */
d76271d22694e8 Hyun Kwon 2018-07-07   973       for (i = 0; ; i++) {
d76271d22694e8 Hyun Kwon 2018-07-07   974               reg = 
zynqmp_dp_read(dp, ZYNQMP_DP_INTERRUPT_SIGNAL_STATE);
d76271d22694e8 Hyun Kwon 2018-07-07   975               if (reg & 
ZYNQMP_DP_INTERRUPT_SIGNAL_STATE_REPLY)
d76271d22694e8 Hyun Kwon 2018-07-07   976                       break;
d76271d22694e8 Hyun Kwon 2018-07-07   977  
d76271d22694e8 Hyun Kwon 2018-07-07   978               if (reg & 
ZYNQMP_DP_INTERRUPT_SIGNAL_STATE_REPLY_TIMEOUT ||
d76271d22694e8 Hyun Kwon 2018-07-07   979                   i == 2)
d76271d22694e8 Hyun Kwon 2018-07-07   980                       return 
-ETIMEDOUT;
d76271d22694e8 Hyun Kwon 2018-07-07   981  
d76271d22694e8 Hyun Kwon 2018-07-07   982               usleep_range(1000, 
1100);
d76271d22694e8 Hyun Kwon 2018-07-07   983       }
d76271d22694e8 Hyun Kwon 2018-07-07   984  
d76271d22694e8 Hyun Kwon 2018-07-07   985       reg = zynqmp_dp_read(dp, 
ZYNQMP_DP_AUX_REPLY_CODE);
d76271d22694e8 Hyun Kwon 2018-07-07   986       if (reply)
d76271d22694e8 Hyun Kwon 2018-07-07   987               *reply = reg;
d76271d22694e8 Hyun Kwon 2018-07-07   988  
d76271d22694e8 Hyun Kwon 2018-07-07   989       if (is_read &&
d76271d22694e8 Hyun Kwon 2018-07-07   990           (reg == 
ZYNQMP_DP_AUX_REPLY_CODE_AUX_ACK ||
d76271d22694e8 Hyun Kwon 2018-07-07   991            reg == 
ZYNQMP_DP_AUX_REPLY_CODE_I2C_ACK)) {
d76271d22694e8 Hyun Kwon 2018-07-07   992               reg = 
zynqmp_dp_read(dp, ZYNQMP_DP_REPLY_DATA_COUNT);
d76271d22694e8 Hyun Kwon 2018-07-07   993               if ((reg & 
ZYNQMP_DP_REPLY_DATA_COUNT_MASK) != bytes)
d76271d22694e8 Hyun Kwon 2018-07-07   994                       return -EIO;
d76271d22694e8 Hyun Kwon 2018-07-07   995  
d76271d22694e8 Hyun Kwon 2018-07-07   996               for (i = 0; i < bytes; 
i++)
d76271d22694e8 Hyun Kwon 2018-07-07  @997                       buf[i] = 
zynqmp_dp_read(dp, ZYNQMP_DP_AUX_REPLY_DATA);
d76271d22694e8 Hyun Kwon 2018-07-07   998       }
d76271d22694e8 Hyun Kwon 2018-07-07   999  
d76271d22694e8 Hyun Kwon 2018-07-07  1000       return 0;
d76271d22694e8 Hyun Kwon 2018-07-07  1001  }
d76271d22694e8 Hyun Kwon 2018-07-07  1002  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to