Re: [PATCH v12] i2c: Add drivers for the AMD PCIe MP2 I2C controller

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Elie,

I love your patch! Perhaps something to improve:

[auto build test WARNING on wsa/i2c/for-next]
[also build test WARNING on v4.20-rc5 next-20181207]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Elie-Morisse/i2c-Add-drivers-for-the-AMD-PCIe-MP2-I2C-controller/20181209-070352
base:   https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
config: i386-allmodconfig (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All warnings (new ones prefixed by >>):

   In file included from include/linux/printk.h:336:0,
                    from include/linux/kernel.h:14,
                    from include/linux/list.h:9,
                    from include/linux/wait.h:7,
                    from include/linux/wait_bit.h:8,
                    from include/linux/fs.h:6,
                    from include/linux/debugfs.h:15,
                    from drivers/i2c/busses/i2c-amd-mp2-pci.c:9:
   drivers/i2c/busses/i2c-amd-mp2-pci.c: In function 'amd_mp2_dma_map':
>> drivers/i2c/busses/i2c-amd-mp2-pci.c:125:30: warning: format '%llx' expects argument of type 'long long unsigned int', but argument 5 has type 'dma_addr_t {aka unsigned int}' [-Wformat=]
     dev_dbg(ndev_dev(privdata), "%s dma_addr: %llx size: %u dir: %s\n",
                                 ^
   include/linux/dynamic_debug.h:135:39: note: in definition of macro 'dynamic_dev_dbg'
      __dynamic_dev_dbg(&descriptor, dev, fmt, \
                                          ^~~
   include/linux/device.h:1463:23: note: in expansion of macro 'dev_fmt'
     dynamic_dev_dbg(dev, dev_fmt(fmt), ##__VA_ARGS__)
                          ^~~~~~~
>> drivers/i2c/busses/i2c-amd-mp2-pci.c:125:2: note: in expansion of macro 'dev_dbg'
     dev_dbg(ndev_dev(privdata), "%s dma_addr: %llx size: %u dir: %s\n",
     ^~~~~~~
   drivers/i2c/busses/i2c-amd-mp2-pci.c: In function 'amd_mp2_debugfs_read':
   drivers/i2c/busses/i2c-amd-mp2-pci.c:384:16: warning: unused variable 'mmio' [-Wunused-variable]
     void __iomem *mmio = privdata->mmio;
                   ^~~~

vim +125 drivers/i2c/busses/i2c-amd-mp2-pci.c

   > 9	#include <linux/debugfs.h>
    10	#include <linux/dma-mapping.h>
    11	#include <linux/interrupt.h>
    12	#include <linux/module.h>
    13	#include <linux/pci.h>
    14	#include <linux/slab.h>
    15	
    16	#include "i2c-amd-mp2.h"
    17	
    18	#define DRIVER_NAME	"i2c_amd_mp2"
    19	#define DRIVER_DESC	"AMD(R) PCI-E MP2 I2C Controller Driver"
    20	#define DRIVER_VER	"1.0"
    21	
    22	static inline void write64(u64 val, void __iomem *mmio)
    23	{
    24		writel(val, mmio);
    25		writel(val >> 32, mmio + sizeof(u32));
    26	}
    27	
    28	static inline u64 read64(void __iomem *mmio)
    29	{
    30		u64 low, high;
    31	
    32		low = readl(mmio);
    33		high = readl(mmio + sizeof(u32));
    34		return low | (high << 32);
    35	}
    36	
    37	static void amd_mp2_c2p_mutex_lock(struct amd_i2c_common *i2c_common)
    38	{
    39		struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
    40	
    41		/* there is only one data mailbox for two i2c adapters */
    42		mutex_lock(&privdata->c2p_lock);
    43		privdata->c2p_lock_busid = i2c_common->bus_id;
    44	}
    45	
    46	static void amd_mp2_c2p_mutex_unlock(struct amd_i2c_common *i2c_common)
    47	{
    48		struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
    49	
    50		if (unlikely(privdata->c2p_lock_busid != i2c_common->bus_id)) {
    51			dev_warn(ndev_dev(privdata),
    52				 "bus %d attempting to unlock C2P locked by bus %d\n",
    53				 i2c_common->bus_id, privdata->c2p_lock_busid);
    54			return;
    55		}
    56	
    57		mutex_unlock(&privdata->c2p_lock);
    58	}
    59	
    60	static int amd_mp2_cmd(struct amd_i2c_common *i2c_common,
    61			       union i2c_cmd_base i2c_cmd_base)
    62	{
    63		struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
    64		void __iomem *reg;
    65	
    66		i2c_common->reqcmd = i2c_cmd_base.s.i2c_cmd;
    67	
    68		reg = privdata->mmio + ((i2c_cmd_base.s.bus_id == 1) ?
    69					AMD_C2P_MSG1 : AMD_C2P_MSG0);
    70		writel(i2c_cmd_base.ul, reg);
    71	
    72		return 0;
    73	}
    74	
    75	int amd_mp2_bus_enable_set(struct amd_i2c_common *i2c_common, bool enable)
    76	{
    77		struct amd_mp2_dev *privdata = i2c_common->mp2_dev;
    78		union i2c_cmd_base i2c_cmd_base;
    79	
    80		dev_dbg(ndev_dev(privdata), "%s id: %d\n", __func__,
    81			i2c_common->bus_id);
    82	
    83		i2c_cmd_base.ul = 0;
    84		i2c_cmd_base.s.i2c_cmd = enable ? i2c_enable : i2c_disable;
    85		i2c_cmd_base.s.bus_id = i2c_common->bus_id;
    86		i2c_cmd_base.s.i2c_speed = i2c_common->i2c_speed;
    87	
    88		amd_mp2_c2p_mutex_lock(i2c_common);
    89	
    90		return amd_mp2_cmd(i2c_common, i2c_cmd_base);
    91	}
    92	
    93	static void amd_mp2_cmd_rw_fill(struct amd_i2c_common *i2c_common,
    94					union i2c_cmd_base *i2c_cmd_base,
    95					enum i2c_cmd reqcmd)
    96	{
    97		i2c_cmd_base->s.i2c_cmd = reqcmd;
    98		i2c_cmd_base->s.bus_id = i2c_common->bus_id;
    99		i2c_cmd_base->s.i2c_speed = i2c_common->i2c_speed;
   100		i2c_cmd_base->s.slave_addr = i2c_common->msg->addr;
   101		i2c_cmd_base->s.length = i2c_common->msg->len;
   102	}
   103	
   104	static int amd_mp2_dma_map(struct amd_mp2_dev *privdata,
   105				   struct amd_i2c_common *i2c_common)
   106	{
   107		enum dma_data_direction dma_direction =
   108				i2c_common->msg->flags & I2C_M_RD ?
   109				DMA_FROM_DEVICE : DMA_TO_DEVICE;
   110	
   111		i2c_common->dma_buf = i2c_get_dma_safe_msg_buf(i2c_common->msg, 0);
   112		i2c_common->dma_addr = dma_map_single(&privdata->pci_dev->dev,
   113						      i2c_common->dma_buf,
   114						      i2c_common->msg->len,
   115						      dma_direction);
   116	
   117		if (dma_mapping_error(&privdata->pci_dev->dev,
   118				      i2c_common->dma_addr)) {
   119			dev_err(ndev_dev(privdata),
   120				"Error while mapping dma buffer %p\n",
   121				i2c_common->dma_buf);
   122			return -EIO;
   123		}
   124	
 > 125		dev_dbg(ndev_dev(privdata), "%s dma_addr: %llx size: %u dir: %s\n",
   126			__func__, i2c_common->dma_addr, i2c_common->msg->len,
   127			dma_direction == DMA_FROM_DEVICE ? "from" : "to");
   128	
   129		return 0;
   130	}
   131	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux