From: kernel test robot <lkp@intel.com>
To: Adam Honse <calcprogrammer1@gmail.com>,
jdelvare@suse.de, linux-i2c@vger.kernel.org, jdelvare@suse.com
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org
Subject: Re: [PATCH] i2c: New driver for Nuvoton SMBus adapters
Date: Tue, 15 Mar 2022 04:28:24 +0800 [thread overview]
Message-ID: <202203150442.qhRCXPnf-lkp@intel.com> (raw)
In-Reply-To: <20220313224020.9005-1-calcprogrammer1@gmail.com>
Hi Adam,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on wsa/i2c/for-next]
[also build test WARNING on v5.17-rc8 next-20220310]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Adam-Honse/i2c-New-driver-for-Nuvoton-SMBus-adapters/20220314-064247
base: https://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git i2c/for-next
config: arm64-allmodconfig (https://download.01.org/0day-ci/archive/20220315/202203150442.qhRCXPnf-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 3e4950d7fa78ac83f33bbf1658e2f49a73719236)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install arm64 cross compiling tool for clang build
# apt-get install binutils-aarch64-linux-gnu
# https://github.com/0day-ci/linux/commit/040a1be0d30ce2c611e30eb923d6f1b0afc44e7d
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Adam-Honse/i2c-New-driver-for-Nuvoton-SMBus-adapters/20220314-064247
git checkout 040a1be0d30ce2c611e30eb923d6f1b0afc44e7d
# save the config file to linux build tree
mkdir build_dir
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/i2c/busses/ drivers/mfd/
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
>> drivers/i2c/busses/i2c-nct6775.c:219:2: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
case I2C_SMBUS_BYTE:
^
drivers/i2c/busses/i2c-nct6775.c:219:2: note: insert '__attribute__((fallthrough));' to silence this warning
case I2C_SMBUS_BYTE:
^
__attribute__((fallthrough));
drivers/i2c/busses/i2c-nct6775.c:219:2: note: insert 'break;' to avoid fall-through
case I2C_SMBUS_BYTE:
^
break;
>> drivers/i2c/busses/i2c-nct6775.c:90:27: warning: unused variable 'nct6775_device_names' [-Wunused-const-variable]
static const char * const nct6775_device_names[] = {
^
drivers/i2c/busses/i2c-nct6775.c:133:1: warning: unused function 'superio_outb' [-Wunused-function]
superio_outb(int ioreg, int reg, int val)
^
3 warnings generated.
vim +219 drivers/i2c/busses/i2c-nct6775.c
88
89 /* used to set data->name = nct6775_device_names[data->sio_kind] */
> 90 static const char * const nct6775_device_names[] = {
91 "nct6106",
92 "nct6775",
93 "nct6776",
94 "nct6779",
95 "nct6791",
96 "nct6792",
97 "nct6793",
98 "nct6795",
99 "nct6796",
100 "nct6798",
101 };
102
103 static const char * const nct6775_sio_names[] __initconst = {
104 "NCT6106D",
105 "NCT6775F",
106 "NCT6776D/F",
107 "NCT6779D",
108 "NCT6791D",
109 "NCT6792D",
110 "NCT6793D",
111 "NCT6795D",
112 "NCT6796D",
113 "NCT6798D",
114 };
115
116 #define SIO_REG_LDSEL 0x07 /* Logical device select */
117 #define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
118 #define SIO_REG_SMBA 0x62 /* SMBus base address register */
119
120 #define SIO_NCT6106_ID 0xc450
121 #define SIO_NCT6775_ID 0xb470
122 #define SIO_NCT6776_ID 0xc330
123 #define SIO_NCT6779_ID 0xc560
124 #define SIO_NCT6791_ID 0xc800
125 #define SIO_NCT6792_ID 0xc910
126 #define SIO_NCT6793_ID 0xd120
127 #define SIO_NCT6795_ID 0xd350
128 #define SIO_NCT6796_ID 0xd420
129 #define SIO_NCT6798_ID 0xd428
130 #define SIO_ID_MASK 0xFFF0
131
132 static inline void
133 superio_outb(int ioreg, int reg, int val)
134 {
135 outb(reg, ioreg);
136 outb(val, ioreg + 1);
137 }
138
139 static inline int
140 superio_inb(int ioreg, int reg)
141 {
142 outb(reg, ioreg);
143 return inb(ioreg + 1);
144 }
145
146 static inline void
147 superio_select(int ioreg, int ld)
148 {
149 outb(SIO_REG_LDSEL, ioreg);
150 outb(ld, ioreg + 1);
151 }
152
153 static inline int
154 superio_enter(int ioreg)
155 {
156 /*
157 * Try to reserve <ioreg> and <ioreg + 1> for exclusive access.
158 */
159 if (!request_muxed_region(ioreg, 2, DRVNAME))
160 return -EBUSY;
161
162 outb(0x87, ioreg);
163 outb(0x87, ioreg);
164
165 return 0;
166 }
167
168 static inline void
169 superio_exit(int ioreg)
170 {
171 outb(0xaa, ioreg);
172 outb(0x02, ioreg);
173 outb(0x02, ioreg + 1);
174 release_region(ioreg, 2);
175 }
176
177 /*
178 * ISA constants
179 */
180
181 #define IOREGION_ALIGNMENT (~7)
182 #define IOREGION_LENGTH 2
183 #define ADDR_REG_OFFSET 0
184 #define DATA_REG_OFFSET 1
185
186 #define NCT6775_REG_BANK 0x4E
187 #define NCT6775_REG_CONFIG 0x40
188
189 static struct i2c_adapter *nct6775_adapter;
190
191 struct i2c_nct6775_adapdata {
192 unsigned short smba;
193 };
194
195 /* Return negative errno on error. */
196 static s32 nct6775_access(struct i2c_adapter *adap, u16 addr,
197 unsigned short flags, char read_write,
198 u8 command, int size, union i2c_smbus_data *data)
199 {
200 struct i2c_nct6775_adapdata *adapdata = i2c_get_adapdata(adap);
201 unsigned short nuvoton_nct6793d_smba = adapdata->smba;
202 int i, len, cnt;
203 union i2c_smbus_data tmp_data;
204 int timeout = 0;
205
206 tmp_data.word = 0;
207 cnt = 0;
208 len = 0;
209
210 outb_p(NCT6793D_SOFT_RESET, SMBHSTCTL);
211
212 switch (size) {
213 case I2C_SMBUS_QUICK:
214 outb_p((addr << 1) | read_write,
215 SMBHSTADD);
216 break;
217 case I2C_SMBUS_BYTE_DATA:
218 tmp_data.byte = data->byte;
> 219 case I2C_SMBUS_BYTE:
220 outb_p((addr << 1) | read_write,
221 SMBHSTADD);
222 outb_p(command, SMBHSTIDX);
223 if (read_write == I2C_SMBUS_WRITE) {
224 outb_p(tmp_data.byte, SMBHSTDAT);
225 outb_p(NCT6793D_WRITE_BYTE, SMBHSTCMD);
226 } else {
227 outb_p(NCT6793D_READ_BYTE, SMBHSTCMD);
228 }
229 break;
230 case I2C_SMBUS_WORD_DATA:
231 outb_p((addr << 1) | read_write,
232 SMBHSTADD);
233 outb_p(command, SMBHSTIDX);
234 if (read_write == I2C_SMBUS_WRITE) {
235 outb_p(data->word & 0xff, SMBHSTDAT);
236 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT);
237 outb_p(NCT6793D_WRITE_WORD, SMBHSTCMD);
238 } else {
239 outb_p(NCT6793D_READ_WORD, SMBHSTCMD);
240 }
241 break;
242 case I2C_SMBUS_BLOCK_DATA:
243 outb_p((addr << 1) | read_write,
244 SMBHSTADD);
245 outb_p(command, SMBHSTIDX);
246 if (read_write == I2C_SMBUS_WRITE) {
247 len = data->block[0];
248 if (len == 0 || len > I2C_SMBUS_BLOCK_MAX)
249 return -EINVAL;
250 outb_p(len, SMBBLKSZ);
251
252 cnt = 1;
253 if (len >= 4) {
254 for (i = cnt; i <= 4; i++)
255 outb_p(data->block[i], SMBHSTDAT);
256
257 len -= 4;
258 cnt += 4;
259 } else {
260 for (i = cnt; i <= len; i++)
261 outb_p(data->block[i], SMBHSTDAT);
262
263 len = 0;
264 }
265
266 outb_p(NCT6793D_WRITE_BLOCK, SMBHSTCMD);
267 } else {
268 return -EOPNOTSUPP;
269 }
270 break;
271 default:
272 dev_warn(&adap->dev, "Unsupported transaction %d\n", size);
273 return -EOPNOTSUPP;
274 }
275
276 outb_p(NCT6793D_MANUAL_START, SMBHSTCTL);
277
278 while ((size == I2C_SMBUS_BLOCK_DATA) && (len > 0)) {
279 if (read_write == I2C_SMBUS_WRITE) {
280 timeout = 0;
281 while ((inb_p(SMBHSTSTS) & NCT6793D_FIFO_EMPTY) == 0) {
282 if (timeout > MAX_RETRIES)
283 return -ETIMEDOUT;
284
285 usleep_range(250, 500);
286 timeout++;
287 }
288
289 //Load more bytes into FIFO
290 if (len >= 4) {
291 for (i = cnt; i <= (cnt + 4); i++)
292 outb_p(data->block[i], SMBHSTDAT);
293
294 len -= 4;
295 cnt += 4;
296 } else {
297 for (i = cnt; i <= (cnt + len); i++)
298 outb_p(data->block[i], SMBHSTDAT);
299
300 len = 0;
301 }
302 } else {
303 return -EOPNOTSUPP;
304 }
305
306 }
307
308 //wait for manual mode to complete
309 timeout = 0;
310 while ((inb_p(SMBHSTSTS) & NCT6793D_MANUAL_ACTIVE) != 0) {
311 if (timeout > MAX_RETRIES)
312 return -ETIMEDOUT;
313
314 usleep_range(250, 500);
315 timeout++;
316 }
317
318 if ((inb_p(SMBHSTERR) & NCT6793D_NO_ACK) != 0)
319 return -ENXIO;
320
321 else if ((read_write == I2C_SMBUS_WRITE) || (size == I2C_SMBUS_QUICK))
322 return 0;
323
324 switch (size) {
325 case I2C_SMBUS_QUICK:
326 case I2C_SMBUS_BYTE_DATA:
327 data->byte = inb_p(SMBHSTDAT);
328 break;
329 case I2C_SMBUS_WORD_DATA:
330 data->word = inb_p(SMBHSTDAT) + (inb_p(SMBHSTDAT) << 8);
331 break;
332 }
333 return 0;
334 }
335
---
0-DAY CI Kernel Test Service
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
prev parent reply other threads:[~2022-03-14 20:28 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-13 22:40 [PATCH] i2c: New driver for Nuvoton SMBus adapters Adam Honse
2022-03-14 1:17 ` kernel test robot
2022-03-14 11:03 ` Jean Delvare
2022-03-14 20:28 ` kernel test robot [this message]
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=202203150442.qhRCXPnf-lkp@intel.com \
--to=lkp@intel.com \
--cc=calcprogrammer1@gmail.com \
--cc=jdelvare@suse.com \
--cc=jdelvare@suse.de \
--cc=kbuild-all@lists.01.org \
--cc=linux-i2c@vger.kernel.org \
--cc=llvm@lists.linux.dev \
/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.