i2c: i801: Consolidate chipset names in documentation and Kconfig
[linux-block.git] / drivers / i2c / busses / i2c-i801.c
CommitLineData
1da177e4 1/*
1da177e4
LT
2 Copyright (c) 1998 - 2002 Frodo Looijaard <frodol@dds.nl>,
3 Philip Edelbrock <phil@netroedge.com>, and Mark D. Studebaker
4 <mdsxyz123@yahoo.com>
b3b8df97 5 Copyright (C) 2007 - 2014 Jean Delvare <jdelvare@suse.de>
0cd96eb0
DW
6 Copyright (C) 2010 Intel Corporation,
7 David Woodhouse <dwmw2@infradead.org>
1da177e4
LT
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
1da177e4
LT
18*/
19
20/*
ce316110
JD
21 * Supports the following Intel I/O Controller Hubs (ICH):
22 *
23 * I/O Block I2C
24 * region SMBus Block proc. block
25 * Chip name PCI ID size PEC buffer call read
26 * ---------------------------------------------------------------------------
27 * 82801AA (ICH) 0x2413 16 no no no no
28 * 82801AB (ICH0) 0x2423 16 no no no no
29 * 82801BA (ICH2) 0x2443 16 no no no no
30 * 82801CA (ICH3) 0x2483 32 soft no no no
31 * 82801DB (ICH4) 0x24c3 32 hard yes no no
32 * 82801E (ICH5) 0x24d3 32 hard yes yes yes
33 * 6300ESB 0x25a4 32 hard yes yes yes
34 * 82801F (ICH6) 0x266a 32 hard yes yes yes
35 * 6310ESB/6320ESB 0x269b 32 hard yes yes yes
36 * 82801G (ICH7) 0x27da 32 hard yes yes yes
37 * 82801H (ICH8) 0x283e 32 hard yes yes yes
38 * 82801I (ICH9) 0x2930 32 hard yes yes yes
39 * EP80579 (Tolapai) 0x5032 32 hard yes yes yes
40 * ICH10 0x3a30 32 hard yes yes yes
41 * ICH10 0x3a60 32 hard yes yes yes
42 * 5/3400 Series (PCH) 0x3b30 32 hard yes yes yes
43 * 6 Series (PCH) 0x1c22 32 hard yes yes yes
44 * Patsburg (PCH) 0x1d22 32 hard yes yes yes
45 * Patsburg (PCH) IDF 0x1d70 32 hard yes yes yes
46 * Patsburg (PCH) IDF 0x1d71 32 hard yes yes yes
47 * Patsburg (PCH) IDF 0x1d72 32 hard yes yes yes
48 * DH89xxCC (PCH) 0x2330 32 hard yes yes yes
49 * Panther Point (PCH) 0x1e22 32 hard yes yes yes
50 * Lynx Point (PCH) 0x8c22 32 hard yes yes yes
51 * Lynx Point-LP (PCH) 0x9c22 32 hard yes yes yes
52 * Avoton (SOC) 0x1f3c 32 hard yes yes yes
53 * Wellsburg (PCH) 0x8d22 32 hard yes yes yes
54 * Wellsburg (PCH) MS 0x8d7d 32 hard yes yes yes
55 * Wellsburg (PCH) MS 0x8d7e 32 hard yes yes yes
56 * Wellsburg (PCH) MS 0x8d7f 32 hard yes yes yes
57 * Coleto Creek (PCH) 0x23b0 32 hard yes yes yes
b299de83 58 * Wildcat Point (PCH) 0x8ca2 32 hard yes yes yes
ce316110
JD
59 * Wildcat Point-LP (PCH) 0x9ca2 32 hard yes yes yes
60 * BayTrail (SOC) 0x0f12 32 hard yes yes yes
15407798 61 * Braswell (SOC) 0x2292 32 hard yes yes yes
3e27a844 62 * Sunrise Point-H (PCH) 0xa123 32 hard yes yes yes
3eee1799 63 * Sunrise Point-LP (PCH) 0x9d23 32 hard yes yes yes
84d7f2eb 64 * DNV (SOC) 0x19df 32 hard yes yes yes
dd77f423 65 * Broxton (SOC) 0x5ad4 32 hard yes yes yes
cdc5a311
AY
66 * Lewisburg (PCH) 0xa1a3 32 hard yes yes yes
67 * Lewisburg Supersku (PCH) 0xa223 32 hard yes yes yes
31158763 68 * Kaby Lake PCH-H (PCH) 0xa2a3 32 hard yes yes yes
9827f9eb 69 * Gemini Lake (SOC) 0x31d4 32 hard yes yes yes
09a1de04
SP
70 * Cannon Lake-H (PCH) 0xa323 32 hard yes yes yes
71 * Cannon Lake-LP (PCH) 0x9da3 32 hard yes yes yes
cb09d943 72 * Cedar Fork (PCH) 0x18df 32 hard yes yes yes
ce316110
JD
73 *
74 * Features supported by this driver:
75 * Software PEC no
76 * Hardware PEC yes
77 * Block buffer yes
78 * Block process call transaction no
79 * I2C block read transaction yes (doesn't use the block buffer)
80 * Slave mode no
7b0ed334 81 * SMBus Host Notify yes
ce316110
JD
82 * Interrupt processing yes
83 *
84 * See the file Documentation/i2c/busses/i2c-i801 for details.
85 */
1da177e4 86
636752bc 87#include <linux/interrupt.h>
1da177e4
LT
88#include <linux/module.h>
89#include <linux/pci.h>
90#include <linux/kernel.h>
91#include <linux/stddef.h>
92#include <linux/delay.h>
1da177e4
LT
93#include <linux/ioport.h>
94#include <linux/init.h>
95#include <linux/i2c.h>
7b0ed334 96#include <linux/i2c-smbus.h>
54fb4a05 97#include <linux/acpi.h>
1561bfe5 98#include <linux/io.h>
fa5bfab7 99#include <linux/dmi.h>
665a96b7 100#include <linux/slab.h>
636752bc 101#include <linux/wait.h>
3ad7ea18 102#include <linux/err.h>
94246930
MW
103#include <linux/platform_device.h>
104#include <linux/platform_data/itco_wdt.h>
a7401ca5 105#include <linux/pm_runtime.h>
3ad7ea18 106
175c7080 107#if IS_ENABLED(CONFIG_I2C_MUX_GPIO) && defined CONFIG_DMI
3ad7ea18 108#include <linux/gpio.h>
62ea22c4 109#include <linux/platform_data/i2c-mux-gpio.h>
3ad7ea18 110#endif
1da177e4 111
1da177e4 112/* I801 SMBus address offsets */
0cd96eb0
DW
113#define SMBHSTSTS(p) (0 + (p)->smba)
114#define SMBHSTCNT(p) (2 + (p)->smba)
115#define SMBHSTCMD(p) (3 + (p)->smba)
116#define SMBHSTADD(p) (4 + (p)->smba)
117#define SMBHSTDAT0(p) (5 + (p)->smba)
118#define SMBHSTDAT1(p) (6 + (p)->smba)
119#define SMBBLKDAT(p) (7 + (p)->smba)
120#define SMBPEC(p) (8 + (p)->smba) /* ICH3 and later */
121#define SMBAUXSTS(p) (12 + (p)->smba) /* ICH4 and later */
122#define SMBAUXCTL(p) (13 + (p)->smba) /* ICH4 and later */
7b0ed334
BT
123#define SMBSLVSTS(p) (16 + (p)->smba) /* ICH3 and later */
124#define SMBSLVCMD(p) (17 + (p)->smba) /* ICH3 and later */
125#define SMBNTFDADD(p) (20 + (p)->smba) /* ICH3 and later */
1da177e4
LT
126
127/* PCI Address Constants */
6dcc19df 128#define SMBBAR 4
aeb8a3d1 129#define SMBPCICTL 0x004
636752bc 130#define SMBPCISTS 0x006
1da177e4 131#define SMBHSTCFG 0x040
94246930
MW
132#define TCOBASE 0x050
133#define TCOCTL 0x054
134
135#define ACPIBASE 0x040
136#define ACPIBASE_SMI_OFF 0x030
137#define ACPICTRL 0x044
138#define ACPICTRL_EN 0x080
139
140#define SBREG_BAR 0x10
141#define SBREG_SMBCTRL 0xc6000c
1da177e4 142
636752bc 143/* Host status bits for SMBPCISTS */
fe9ba3ec 144#define SMBPCISTS_INTS BIT(3)
636752bc 145
aeb8a3d1 146/* Control bits for SMBPCICTL */
fe9ba3ec 147#define SMBPCICTL_INTDIS BIT(10)
aeb8a3d1 148
1da177e4 149/* Host configuration bits for SMBHSTCFG */
fe9ba3ec
BT
150#define SMBHSTCFG_HST_EN BIT(0)
151#define SMBHSTCFG_SMB_SMI_EN BIT(1)
152#define SMBHSTCFG_I2C_EN BIT(2)
153#define SMBHSTCFG_SPD_WD BIT(4)
1da177e4 154
94246930 155/* TCO configuration bits for TCOCTL */
fe9ba3ec 156#define TCOCTL_EN BIT(8)
94246930 157
97d34ec1 158/* Auxiliary status register bits, ICH4+ only */
fe9ba3ec
BT
159#define SMBAUXSTS_CRCE BIT(0)
160#define SMBAUXSTS_STCO BIT(1)
97d34ec1 161
25985edc 162/* Auxiliary control register bits, ICH4+ only */
fe9ba3ec
BT
163#define SMBAUXCTL_CRC BIT(0)
164#define SMBAUXCTL_E32B BIT(1)
ca8b9e32 165
1da177e4 166/* Other settings */
84c1af4c 167#define MAX_RETRIES 400
1da177e4
LT
168
169/* I801 command constants */
170#define I801_QUICK 0x00
171#define I801_BYTE 0x04
172#define I801_BYTE_DATA 0x08
173#define I801_WORD_DATA 0x0C
ae7b0497 174#define I801_PROC_CALL 0x10 /* unimplemented */
1da177e4 175#define I801_BLOCK_DATA 0x14
6342064c 176#define I801_I2C_BLOCK_DATA 0x18 /* ICH5 and later */
edbeea63
DK
177
178/* I801 Host Control register bits */
fe9ba3ec
BT
179#define SMBHSTCNT_INTREN BIT(0)
180#define SMBHSTCNT_KILL BIT(1)
181#define SMBHSTCNT_LAST_BYTE BIT(5)
182#define SMBHSTCNT_START BIT(6)
183#define SMBHSTCNT_PEC_EN BIT(7) /* ICH3 and later */
1da177e4 184
ca8b9e32 185/* I801 Hosts Status register bits */
fe9ba3ec
BT
186#define SMBHSTSTS_BYTE_DONE BIT(7)
187#define SMBHSTSTS_INUSE_STS BIT(6)
188#define SMBHSTSTS_SMBALERT_STS BIT(5)
189#define SMBHSTSTS_FAILED BIT(4)
190#define SMBHSTSTS_BUS_ERR BIT(3)
191#define SMBHSTSTS_DEV_ERR BIT(2)
192#define SMBHSTSTS_INTR BIT(1)
193#define SMBHSTSTS_HOST_BUSY BIT(0)
1da177e4 194
9786b1f1 195/* Host Notify Status register bits */
fe9ba3ec 196#define SMBSLVSTS_HST_NTFY_STS BIT(0)
7b0ed334 197
9786b1f1 198/* Host Notify Command register bits */
fe9ba3ec 199#define SMBSLVCMD_HST_NTFY_INTREN BIT(0)
7b0ed334 200
70a1cc19
DK
201#define STATUS_ERROR_FLAGS (SMBHSTSTS_FAILED | SMBHSTSTS_BUS_ERR | \
202 SMBHSTSTS_DEV_ERR)
203
204#define STATUS_FLAGS (SMBHSTSTS_BYTE_DONE | SMBHSTSTS_INTR | \
205 STATUS_ERROR_FLAGS)
cf898dc5 206
a6e5e2be 207/* Older devices have their ID defined in <linux/pci_ids.h> */
ce316110 208#define PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS 0x0f12
cb09d943 209#define PCI_DEVICE_ID_INTEL_CDF_SMBUS 0x18df
34b57f40 210#define PCI_DEVICE_ID_INTEL_DNV_SMBUS 0x19df
ce316110
JD
211#define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS 0x1c22
212#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS 0x1d22
55fee8d7 213/* Patsburg also has three 'Integrated Device Function' SMBus controllers */
ce316110
JD
214#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0 0x1d70
215#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1 0x1d71
216#define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2 0x1d72
217#define PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS 0x1e22
218#define PCI_DEVICE_ID_INTEL_AVOTON_SMBUS 0x1f3c
34b57f40 219#define PCI_DEVICE_ID_INTEL_BRASWELL_SMBUS 0x2292
ce316110
JD
220#define PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS 0x2330
221#define PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS 0x23b0
9827f9eb 222#define PCI_DEVICE_ID_INTEL_GEMINILAKE_SMBUS 0x31d4
ce316110 223#define PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS 0x3b30
34b57f40 224#define PCI_DEVICE_ID_INTEL_BROXTON_SMBUS 0x5ad4
ce316110 225#define PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS 0x8c22
b299de83 226#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_SMBUS 0x8ca2
ce316110
JD
227#define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS 0x8d22
228#define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0 0x8d7d
229#define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1 0x8d7e
230#define PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2 0x8d7f
231#define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS 0x9c22
afc65924 232#define PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS 0x9ca2
3eee1799 233#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS 0x9d23
09a1de04 234#define PCI_DEVICE_ID_INTEL_CANNONLAKE_LP_SMBUS 0x9da3
34b57f40 235#define PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS 0xa123
cdc5a311
AY
236#define PCI_DEVICE_ID_INTEL_LEWISBURG_SMBUS 0xa1a3
237#define PCI_DEVICE_ID_INTEL_LEWISBURG_SSKU_SMBUS 0xa223
31158763 238#define PCI_DEVICE_ID_INTEL_KABYLAKE_PCH_H_SMBUS 0xa2a3
09a1de04 239#define PCI_DEVICE_ID_INTEL_CANNONLAKE_H_SMBUS 0xa323
55fee8d7 240
3ad7ea18
JD
241struct i801_mux_config {
242 char *gpio_chip;
243 unsigned values[3];
244 int n_values;
245 unsigned classes[3];
246 unsigned gpios[2]; /* Relative to gpio_chip->base */
247 int n_gpios;
248};
249
0cd96eb0
DW
250struct i801_priv {
251 struct i2c_adapter adapter;
252 unsigned long smba;
253 unsigned char original_hstcfg;
22e94bd6 254 unsigned char original_slvcmd;
0cd96eb0
DW
255 struct pci_dev *pci_dev;
256 unsigned int features;
636752bc
DK
257
258 /* isr processing */
259 wait_queue_head_t waitq;
260 u8 status;
d3ff6ce4
DK
261
262 /* Command state used by isr for byte-by-byte block transactions */
263 u8 cmd;
264 bool is_read;
265 int count;
266 int len;
267 u8 *data;
3ad7ea18 268
175c7080 269#if IS_ENABLED(CONFIG_I2C_MUX_GPIO) && defined CONFIG_DMI
3ad7ea18 270 const struct i801_mux_config *mux_drvdata;
3ad7ea18
JD
271 struct platform_device *mux_pdev;
272#endif
94246930 273 struct platform_device *tco_pdev;
a7ae8195
MW
274
275 /*
276 * If set to true the host controller registers are reserved for
277 * ACPI AML use. Protected by acpi_lock.
278 */
279 bool acpi_reserved;
280 struct mutex acpi_lock;
0cd96eb0
DW
281};
282
f91fba62
BT
283#define FEATURE_SMBUS_PEC BIT(0)
284#define FEATURE_BLOCK_BUFFER BIT(1)
285#define FEATURE_BLOCK_PROC BIT(2)
286#define FEATURE_I2C_BLOCK_READ BIT(3)
287#define FEATURE_IRQ BIT(4)
288#define FEATURE_HOST_NOTIFY BIT(5)
e7198fbf 289/* Not really a feature, but it's convenient to handle it as such */
f91fba62
BT
290#define FEATURE_IDF BIT(15)
291#define FEATURE_TCO BIT(16)
1da177e4 292
adff687d
JD
293static const char *i801_feature_names[] = {
294 "SMBus PEC",
295 "Block buffer",
296 "Block process call",
297 "I2C block read",
636752bc 298 "Interrupt",
7b0ed334 299 "SMBus Host Notify",
adff687d
JD
300};
301
302static unsigned int disable_features;
303module_param(disable_features, uint, S_IRUGO | S_IWUSR);
53229345
JD
304MODULE_PARM_DESC(disable_features, "Disable selected driver features:\n"
305 "\t\t 0x01 disable SMBus PEC\n"
306 "\t\t 0x02 disable the block buffer\n"
307 "\t\t 0x08 disable the I2C block read functionality\n"
7b0ed334
BT
308 "\t\t 0x10 don't use interrupts\n"
309 "\t\t 0x20 disable SMBus Host Notify ");
adff687d 310
cf898dc5
JD
311/* Make sure the SMBus host is ready to start transmitting.
312 Return 0 if it is, -EBUSY if it is not. */
0cd96eb0 313static int i801_check_pre(struct i801_priv *priv)
1da177e4 314{
2b73809d 315 int status;
1da177e4 316
0cd96eb0 317 status = inb_p(SMBHSTSTS(priv));
cf898dc5 318 if (status & SMBHSTSTS_HOST_BUSY) {
0cd96eb0 319 dev_err(&priv->pci_dev->dev, "SMBus is busy, can't use it!\n");
cf898dc5
JD
320 return -EBUSY;
321 }
322
323 status &= STATUS_FLAGS;
324 if (status) {
0cd96eb0 325 dev_dbg(&priv->pci_dev->dev, "Clearing status flags (%02x)\n",
2b73809d 326 status);
0cd96eb0
DW
327 outb_p(status, SMBHSTSTS(priv));
328 status = inb_p(SMBHSTSTS(priv)) & STATUS_FLAGS;
cf898dc5 329 if (status) {
0cd96eb0 330 dev_err(&priv->pci_dev->dev,
cf898dc5
JD
331 "Failed clearing status flags (%02x)\n",
332 status);
97140342 333 return -EBUSY;
1da177e4
LT
334 }
335 }
336
97d34ec1
EW
337 /*
338 * Clear CRC status if needed.
339 * During normal operation, i801_check_post() takes care
340 * of it after every operation. We do it here only in case
341 * the hardware was already in this state when the driver
342 * started.
343 */
344 if (priv->features & FEATURE_SMBUS_PEC) {
345 status = inb_p(SMBAUXSTS(priv)) & SMBAUXSTS_CRCE;
346 if (status) {
347 dev_dbg(&priv->pci_dev->dev,
348 "Clearing aux status flags (%02x)\n", status);
349 outb_p(status, SMBAUXSTS(priv));
350 status = inb_p(SMBAUXSTS(priv)) & SMBAUXSTS_CRCE;
351 if (status) {
352 dev_err(&priv->pci_dev->dev,
353 "Failed clearing aux status flags (%02x)\n",
354 status);
355 return -EBUSY;
356 }
357 }
358 }
359
cf898dc5
JD
360 return 0;
361}
1da177e4 362
6cad93c4
JD
363/*
364 * Convert the status register to an error code, and clear it.
365 * Note that status only contains the bits we want to clear, not the
366 * actual register value.
367 */
368static int i801_check_post(struct i801_priv *priv, int status)
cf898dc5
JD
369{
370 int result = 0;
1da177e4 371
636752bc
DK
372 /*
373 * If the SMBus is still busy, we give up
374 * Note: This timeout condition only happens when using polling
375 * transactions. For interrupt operation, NAK/timeout is indicated by
376 * DEV_ERR.
377 */
6cad93c4 378 if (unlikely(status < 0)) {
0cd96eb0 379 dev_err(&priv->pci_dev->dev, "Transaction timeout\n");
ca8b9e32 380 /* try to stop the current command */
0cd96eb0
DW
381 dev_dbg(&priv->pci_dev->dev, "Terminating the current operation\n");
382 outb_p(inb_p(SMBHSTCNT(priv)) | SMBHSTCNT_KILL,
383 SMBHSTCNT(priv));
84c1af4c 384 usleep_range(1000, 2000);
0cd96eb0
DW
385 outb_p(inb_p(SMBHSTCNT(priv)) & (~SMBHSTCNT_KILL),
386 SMBHSTCNT(priv));
cf898dc5
JD
387
388 /* Check if it worked */
0cd96eb0 389 status = inb_p(SMBHSTSTS(priv));
cf898dc5
JD
390 if ((status & SMBHSTSTS_HOST_BUSY) ||
391 !(status & SMBHSTSTS_FAILED))
0cd96eb0 392 dev_err(&priv->pci_dev->dev,
cf898dc5 393 "Failed terminating the transaction\n");
0cd96eb0 394 outb_p(STATUS_FLAGS, SMBHSTSTS(priv));
cf898dc5 395 return -ETIMEDOUT;
1da177e4
LT
396 }
397
2b73809d 398 if (status & SMBHSTSTS_FAILED) {
97140342 399 result = -EIO;
0cd96eb0 400 dev_err(&priv->pci_dev->dev, "Transaction failed\n");
cf898dc5
JD
401 }
402 if (status & SMBHSTSTS_DEV_ERR) {
97d34ec1
EW
403 /*
404 * This may be a PEC error, check and clear it.
405 *
406 * AUXSTS is handled differently from HSTSTS.
407 * For HSTSTS, i801_isr() or i801_wait_intr()
408 * has already cleared the error bits in hardware,
409 * and we are passed a copy of the original value
410 * in "status".
411 * For AUXSTS, the hardware register is left
412 * for us to handle here.
413 * This is asymmetric, slightly iffy, but safe,
414 * since all this code is serialized and the CRCE
415 * bit is harmless as long as it's cleared before
416 * the next operation.
417 */
418 if ((priv->features & FEATURE_SMBUS_PEC) &&
419 (inb_p(SMBAUXSTS(priv)) & SMBAUXSTS_CRCE)) {
420 outb_p(SMBAUXSTS_CRCE, SMBAUXSTS(priv));
421 result = -EBADMSG;
422 dev_dbg(&priv->pci_dev->dev, "PEC error\n");
423 } else {
424 result = -ENXIO;
425 dev_dbg(&priv->pci_dev->dev, "No response\n");
426 }
1da177e4 427 }
2b73809d 428 if (status & SMBHSTSTS_BUS_ERR) {
dcb5c923 429 result = -EAGAIN;
0cd96eb0 430 dev_dbg(&priv->pci_dev->dev, "Lost arbitration\n");
1da177e4
LT
431 }
432
6cad93c4
JD
433 /* Clear status flags except BYTE_DONE, to be cleared by caller */
434 outb_p(status, SMBHSTSTS(priv));
1da177e4 435
1da177e4
LT
436 return result;
437}
438
6cad93c4
JD
439/* Wait for BUSY being cleared and either INTR or an error flag being set */
440static int i801_wait_intr(struct i801_priv *priv)
cf898dc5 441{
cf898dc5 442 int timeout = 0;
6cad93c4 443 int status;
cf898dc5
JD
444
445 /* We will always wait for a fraction of a second! */
446 do {
84c1af4c 447 usleep_range(250, 500);
0cd96eb0 448 status = inb_p(SMBHSTSTS(priv));
6cad93c4
JD
449 } while (((status & SMBHSTSTS_HOST_BUSY) ||
450 !(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_INTR))) &&
451 (timeout++ < MAX_RETRIES));
cf898dc5 452
6cad93c4
JD
453 if (timeout > MAX_RETRIES) {
454 dev_dbg(&priv->pci_dev->dev, "INTR Timeout!\n");
455 return -ETIMEDOUT;
456 }
457 return status & (STATUS_ERROR_FLAGS | SMBHSTSTS_INTR);
cf898dc5
JD
458}
459
6cad93c4
JD
460/* Wait for either BYTE_DONE or an error flag being set */
461static int i801_wait_byte_done(struct i801_priv *priv)
ca8b9e32
OR
462{
463 int timeout = 0;
2b73809d 464 int status;
ca8b9e32 465
6cad93c4 466 /* We will always wait for a fraction of a second! */
ca8b9e32 467 do {
84c1af4c 468 usleep_range(250, 500);
0cd96eb0 469 status = inb_p(SMBHSTSTS(priv));
6cad93c4
JD
470 } while (!(status & (STATUS_ERROR_FLAGS | SMBHSTSTS_BYTE_DONE)) &&
471 (timeout++ < MAX_RETRIES));
472
473 if (timeout > MAX_RETRIES) {
474 dev_dbg(&priv->pci_dev->dev, "BYTE_DONE Timeout!\n");
475 return -ETIMEDOUT;
476 }
477 return status & STATUS_ERROR_FLAGS;
478}
479
480static int i801_transaction(struct i801_priv *priv, int xact)
481{
482 int status;
483 int result;
b3b8df97 484 const struct i2c_adapter *adap = &priv->adapter;
ca8b9e32 485
6cad93c4
JD
486 result = i801_check_pre(priv);
487 if (result < 0)
488 return result;
4ccc28f7 489
636752bc
DK
490 if (priv->features & FEATURE_IRQ) {
491 outb_p(xact | SMBHSTCNT_INTREN | SMBHSTCNT_START,
492 SMBHSTCNT(priv));
b3b8df97
JD
493 result = wait_event_timeout(priv->waitq,
494 (status = priv->status),
495 adap->timeout);
496 if (!result) {
497 status = -ETIMEDOUT;
498 dev_warn(&priv->pci_dev->dev,
499 "Timeout waiting for interrupt!\n");
500 }
636752bc
DK
501 priv->status = 0;
502 return i801_check_post(priv, status);
503 }
504
6cad93c4
JD
505 /* the current contents of SMBHSTCNT can be overwritten, since PEC,
506 * SMBSCMD are passed in xact */
507 outb_p(xact | SMBHSTCNT_START, SMBHSTCNT(priv));
508
509 status = i801_wait_intr(priv);
510 return i801_check_post(priv, status);
ca8b9e32
OR
511}
512
0cd96eb0
DW
513static int i801_block_transaction_by_block(struct i801_priv *priv,
514 union i2c_smbus_data *data,
7edcb9ab
OR
515 char read_write, int hwpec)
516{
517 int i, len;
97140342 518 int status;
7edcb9ab 519
0cd96eb0 520 inb_p(SMBHSTCNT(priv)); /* reset the data buffer index */
7edcb9ab
OR
521
522 /* Use 32-byte buffer to process this transaction */
523 if (read_write == I2C_SMBUS_WRITE) {
524 len = data->block[0];
0cd96eb0 525 outb_p(len, SMBHSTDAT0(priv));
7edcb9ab 526 for (i = 0; i < len; i++)
0cd96eb0 527 outb_p(data->block[i+1], SMBBLKDAT(priv));
7edcb9ab
OR
528 }
529
37af8711 530 status = i801_transaction(priv, I801_BLOCK_DATA |
edbeea63 531 (hwpec ? SMBHSTCNT_PEC_EN : 0));
97140342
DB
532 if (status)
533 return status;
7edcb9ab
OR
534
535 if (read_write == I2C_SMBUS_READ) {
0cd96eb0 536 len = inb_p(SMBHSTDAT0(priv));
7edcb9ab 537 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX)
97140342 538 return -EPROTO;
7edcb9ab
OR
539
540 data->block[0] = len;
541 for (i = 0; i < len; i++)
0cd96eb0 542 data->block[i + 1] = inb_p(SMBBLKDAT(priv));
7edcb9ab
OR
543 }
544 return 0;
545}
546
d3ff6ce4
DK
547static void i801_isr_byte_done(struct i801_priv *priv)
548{
549 if (priv->is_read) {
550 /* For SMBus block reads, length is received with first byte */
551 if (((priv->cmd & 0x1c) == I801_BLOCK_DATA) &&
552 (priv->count == 0)) {
553 priv->len = inb_p(SMBHSTDAT0(priv));
554 if (priv->len < 1 || priv->len > I2C_SMBUS_BLOCK_MAX) {
555 dev_err(&priv->pci_dev->dev,
556 "Illegal SMBus block read size %d\n",
557 priv->len);
558 /* FIXME: Recover */
559 priv->len = I2C_SMBUS_BLOCK_MAX;
560 } else {
561 dev_dbg(&priv->pci_dev->dev,
562 "SMBus block read size is %d\n",
563 priv->len);
564 }
565 priv->data[-1] = priv->len;
566 }
567
568 /* Read next byte */
569 if (priv->count < priv->len)
570 priv->data[priv->count++] = inb(SMBBLKDAT(priv));
571 else
572 dev_dbg(&priv->pci_dev->dev,
573 "Discarding extra byte on block read\n");
574
575 /* Set LAST_BYTE for last byte of read transaction */
576 if (priv->count == priv->len - 1)
577 outb_p(priv->cmd | SMBHSTCNT_LAST_BYTE,
578 SMBHSTCNT(priv));
579 } else if (priv->count < priv->len - 1) {
580 /* Write next byte, except for IRQ after last byte */
581 outb_p(priv->data[++priv->count], SMBBLKDAT(priv));
582 }
583
584 /* Clear BYTE_DONE to continue with next byte */
585 outb_p(SMBHSTSTS_BYTE_DONE, SMBHSTSTS(priv));
586}
587
7b0ed334
BT
588static irqreturn_t i801_host_notify_isr(struct i801_priv *priv)
589{
590 unsigned short addr;
7b0ed334
BT
591
592 addr = inb_p(SMBNTFDADD(priv)) >> 1;
7b0ed334 593
c912a25a
BT
594 /*
595 * With the tested platforms, reading SMBNTFDDAT (22 + (p)->smba)
4d5538f5
BT
596 * always returns 0. Our current implementation doesn't provide
597 * data, so we just ignore it.
c912a25a 598 */
4d5538f5 599 i2c_handle_smbus_host_notify(&priv->adapter, addr);
7b0ed334
BT
600
601 /* clear Host Notify bit and return */
602 outb_p(SMBSLVSTS_HST_NTFY_STS, SMBSLVSTS(priv));
603 return IRQ_HANDLED;
604}
605
636752bc 606/*
7b0ed334 607 * There are three kinds of interrupts:
d3ff6ce4
DK
608 *
609 * 1) i801 signals transaction completion with one of these interrupts:
610 * INTR - Success
611 * DEV_ERR - Invalid command, NAK or communication timeout
612 * BUS_ERR - SMI# transaction collision
613 * FAILED - transaction was canceled due to a KILL request
614 * When any of these occur, update ->status and wake up the waitq.
615 * ->status must be cleared before kicking off the next transaction.
616 *
617 * 2) For byte-by-byte (I2C read/write) transactions, one BYTE_DONE interrupt
618 * occurs for each byte of a byte-by-byte to prepare the next byte.
7b0ed334
BT
619 *
620 * 3) Host Notify interrupts
636752bc
DK
621 */
622static irqreturn_t i801_isr(int irq, void *dev_id)
623{
624 struct i801_priv *priv = dev_id;
625 u16 pcists;
626 u8 status;
627
628 /* Confirm this is our interrupt */
629 pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists);
630 if (!(pcists & SMBPCISTS_INTS))
631 return IRQ_NONE;
632
7b0ed334
BT
633 if (priv->features & FEATURE_HOST_NOTIFY) {
634 status = inb_p(SMBSLVSTS(priv));
635 if (status & SMBSLVSTS_HST_NTFY_STS)
636 return i801_host_notify_isr(priv);
637 }
638
636752bc 639 status = inb_p(SMBHSTSTS(priv));
d3ff6ce4
DK
640 if (status & SMBHSTSTS_BYTE_DONE)
641 i801_isr_byte_done(priv);
642
636752bc
DK
643 /*
644 * Clear irq sources and report transaction result.
645 * ->status must be cleared before the next transaction is started.
646 */
647 status &= SMBHSTSTS_INTR | STATUS_ERROR_FLAGS;
648 if (status) {
649 outb_p(status, SMBHSTSTS(priv));
a90bc5d9 650 priv->status = status;
636752bc
DK
651 wake_up(&priv->waitq);
652 }
653
654 return IRQ_HANDLED;
655}
656
efa3cb15
DK
657/*
658 * For "byte-by-byte" block transactions:
659 * I2C write uses cmd=I801_BLOCK_DATA, I2C_EN=1
660 * I2C read uses cmd=I801_I2C_BLOCK_DATA
661 */
0cd96eb0
DW
662static int i801_block_transaction_byte_by_byte(struct i801_priv *priv,
663 union i2c_smbus_data *data,
6342064c
JD
664 char read_write, int command,
665 int hwpec)
1da177e4
LT
666{
667 int i, len;
668 int smbcmd;
2b73809d 669 int status;
cf898dc5 670 int result;
b3b8df97 671 const struct i2c_adapter *adap = &priv->adapter;
cf898dc5 672
0cd96eb0 673 result = i801_check_pre(priv);
cf898dc5
JD
674 if (result < 0)
675 return result;
1da177e4 676
7edcb9ab 677 len = data->block[0];
1da177e4
LT
678
679 if (read_write == I2C_SMBUS_WRITE) {
0cd96eb0
DW
680 outb_p(len, SMBHSTDAT0(priv));
681 outb_p(data->block[1], SMBBLKDAT(priv));
1da177e4
LT
682 }
683
efa3cb15
DK
684 if (command == I2C_SMBUS_I2C_BLOCK_DATA &&
685 read_write == I2C_SMBUS_READ)
686 smbcmd = I801_I2C_BLOCK_DATA;
687 else
688 smbcmd = I801_BLOCK_DATA;
689
d3ff6ce4
DK
690 if (priv->features & FEATURE_IRQ) {
691 priv->is_read = (read_write == I2C_SMBUS_READ);
692 if (len == 1 && priv->is_read)
693 smbcmd |= SMBHSTCNT_LAST_BYTE;
694 priv->cmd = smbcmd | SMBHSTCNT_INTREN;
695 priv->len = len;
696 priv->count = 0;
697 priv->data = &data->block[1];
698
699 outb_p(priv->cmd | SMBHSTCNT_START, SMBHSTCNT(priv));
b3b8df97
JD
700 result = wait_event_timeout(priv->waitq,
701 (status = priv->status),
702 adap->timeout);
703 if (!result) {
704 status = -ETIMEDOUT;
705 dev_warn(&priv->pci_dev->dev,
706 "Timeout waiting for interrupt!\n");
707 }
d3ff6ce4
DK
708 priv->status = 0;
709 return i801_check_post(priv, status);
710 }
711
1da177e4 712 for (i = 1; i <= len; i++) {
efa3cb15 713 if (i == len && read_write == I2C_SMBUS_READ)
edbeea63 714 smbcmd |= SMBHSTCNT_LAST_BYTE;
37af8711 715 outb_p(smbcmd, SMBHSTCNT(priv));
1da177e4 716
1da177e4 717 if (i == 1)
edbeea63 718 outb_p(inb(SMBHSTCNT(priv)) | SMBHSTCNT_START,
0cd96eb0 719 SMBHSTCNT(priv));
1da177e4 720
6cad93c4
JD
721 status = i801_wait_byte_done(priv);
722 if (status)
723 goto exit;
1da177e4 724
6342064c
JD
725 if (i == 1 && read_write == I2C_SMBUS_READ
726 && command != I2C_SMBUS_I2C_BLOCK_DATA) {
0cd96eb0 727 len = inb_p(SMBHSTDAT0(priv));
cf898dc5 728 if (len < 1 || len > I2C_SMBUS_BLOCK_MAX) {
0cd96eb0 729 dev_err(&priv->pci_dev->dev,
cf898dc5
JD
730 "Illegal SMBus block read size %d\n",
731 len);
732 /* Recover */
0cd96eb0
DW
733 while (inb_p(SMBHSTSTS(priv)) &
734 SMBHSTSTS_HOST_BUSY)
735 outb_p(SMBHSTSTS_BYTE_DONE,
736 SMBHSTSTS(priv));
737 outb_p(SMBHSTSTS_INTR, SMBHSTSTS(priv));
97140342 738 return -EPROTO;
cf898dc5 739 }
1da177e4
LT
740 data->block[0] = len;
741 }
742
743 /* Retrieve/store value in SMBBLKDAT */
744 if (read_write == I2C_SMBUS_READ)
0cd96eb0 745 data->block[i] = inb_p(SMBBLKDAT(priv));
1da177e4 746 if (read_write == I2C_SMBUS_WRITE && i+1 <= len)
0cd96eb0 747 outb_p(data->block[i+1], SMBBLKDAT(priv));
1da177e4 748
cf898dc5 749 /* signals SMBBLKDAT ready */
6cad93c4 750 outb_p(SMBHSTSTS_BYTE_DONE, SMBHSTSTS(priv));
1da177e4 751 }
cf898dc5 752
6cad93c4
JD
753 status = i801_wait_intr(priv);
754exit:
755 return i801_check_post(priv, status);
7edcb9ab 756}
1da177e4 757
0cd96eb0 758static int i801_set_block_buffer_mode(struct i801_priv *priv)
7edcb9ab 759{
0cd96eb0
DW
760 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_E32B, SMBAUXCTL(priv));
761 if ((inb_p(SMBAUXCTL(priv)) & SMBAUXCTL_E32B) == 0)
97140342 762 return -EIO;
7edcb9ab
OR
763 return 0;
764}
765
766/* Block transaction function */
0cd96eb0
DW
767static int i801_block_transaction(struct i801_priv *priv,
768 union i2c_smbus_data *data, char read_write,
7edcb9ab
OR
769 int command, int hwpec)
770{
771 int result = 0;
772 unsigned char hostc;
773
774 if (command == I2C_SMBUS_I2C_BLOCK_DATA) {
775 if (read_write == I2C_SMBUS_WRITE) {
776 /* set I2C_EN bit in configuration register */
0cd96eb0
DW
777 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &hostc);
778 pci_write_config_byte(priv->pci_dev, SMBHSTCFG,
7edcb9ab 779 hostc | SMBHSTCFG_I2C_EN);
0cd96eb0
DW
780 } else if (!(priv->features & FEATURE_I2C_BLOCK_READ)) {
781 dev_err(&priv->pci_dev->dev,
6342064c 782 "I2C block read is unsupported!\n");
97140342 783 return -EOPNOTSUPP;
7edcb9ab
OR
784 }
785 }
786
6342064c
JD
787 if (read_write == I2C_SMBUS_WRITE
788 || command == I2C_SMBUS_I2C_BLOCK_DATA) {
7edcb9ab
OR
789 if (data->block[0] < 1)
790 data->block[0] = 1;
791 if (data->block[0] > I2C_SMBUS_BLOCK_MAX)
792 data->block[0] = I2C_SMBUS_BLOCK_MAX;
793 } else {
6342064c 794 data->block[0] = 32; /* max for SMBus block reads */
7edcb9ab
OR
795 }
796
c074c39d
JD
797 /* Experience has shown that the block buffer can only be used for
798 SMBus (not I2C) block transactions, even though the datasheet
799 doesn't mention this limitation. */
0cd96eb0 800 if ((priv->features & FEATURE_BLOCK_BUFFER)
c074c39d 801 && command != I2C_SMBUS_I2C_BLOCK_DATA
0cd96eb0
DW
802 && i801_set_block_buffer_mode(priv) == 0)
803 result = i801_block_transaction_by_block(priv, data,
804 read_write, hwpec);
7edcb9ab 805 else
0cd96eb0
DW
806 result = i801_block_transaction_byte_by_byte(priv, data,
807 read_write,
6342064c 808 command, hwpec);
7edcb9ab 809
6342064c
JD
810 if (command == I2C_SMBUS_I2C_BLOCK_DATA
811 && read_write == I2C_SMBUS_WRITE) {
1da177e4 812 /* restore saved configuration register value */
0cd96eb0 813 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, hostc);
1da177e4
LT
814 }
815 return result;
816}
817
97140342 818/* Return negative errno on error. */
3fb21c64 819static s32 i801_access(struct i2c_adapter *adap, u16 addr,
1da177e4 820 unsigned short flags, char read_write, u8 command,
3fb21c64 821 int size, union i2c_smbus_data *data)
1da177e4 822{
e8aac4a9 823 int hwpec;
1da177e4 824 int block = 0;
a7401ca5 825 int ret = 0, xact = 0;
0cd96eb0 826 struct i801_priv *priv = i2c_get_adapdata(adap);
1da177e4 827
a7ae8195
MW
828 mutex_lock(&priv->acpi_lock);
829 if (priv->acpi_reserved) {
830 mutex_unlock(&priv->acpi_lock);
831 return -EBUSY;
832 }
833
a7401ca5
JN
834 pm_runtime_get_sync(&priv->pci_dev->dev);
835
0cd96eb0 836 hwpec = (priv->features & FEATURE_SMBUS_PEC) && (flags & I2C_CLIENT_PEC)
e8aac4a9
JD
837 && size != I2C_SMBUS_QUICK
838 && size != I2C_SMBUS_I2C_BLOCK_DATA;
1da177e4
LT
839
840 switch (size) {
841 case I2C_SMBUS_QUICK:
842 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0cd96eb0 843 SMBHSTADD(priv));
1da177e4
LT
844 xact = I801_QUICK;
845 break;
846 case I2C_SMBUS_BYTE:
847 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0cd96eb0 848 SMBHSTADD(priv));
1da177e4 849 if (read_write == I2C_SMBUS_WRITE)
0cd96eb0 850 outb_p(command, SMBHSTCMD(priv));
1da177e4
LT
851 xact = I801_BYTE;
852 break;
853 case I2C_SMBUS_BYTE_DATA:
854 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0cd96eb0
DW
855 SMBHSTADD(priv));
856 outb_p(command, SMBHSTCMD(priv));
1da177e4 857 if (read_write == I2C_SMBUS_WRITE)
0cd96eb0 858 outb_p(data->byte, SMBHSTDAT0(priv));
1da177e4
LT
859 xact = I801_BYTE_DATA;
860 break;
861 case I2C_SMBUS_WORD_DATA:
862 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0cd96eb0
DW
863 SMBHSTADD(priv));
864 outb_p(command, SMBHSTCMD(priv));
1da177e4 865 if (read_write == I2C_SMBUS_WRITE) {
0cd96eb0
DW
866 outb_p(data->word & 0xff, SMBHSTDAT0(priv));
867 outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1(priv));
1da177e4
LT
868 }
869 xact = I801_WORD_DATA;
870 break;
871 case I2C_SMBUS_BLOCK_DATA:
1da177e4 872 outb_p(((addr & 0x7f) << 1) | (read_write & 0x01),
0cd96eb0
DW
873 SMBHSTADD(priv));
874 outb_p(command, SMBHSTCMD(priv));
1da177e4
LT
875 block = 1;
876 break;
6342064c 877 case I2C_SMBUS_I2C_BLOCK_DATA:
ba9ad2af
JD
878 /*
879 * NB: page 240 of ICH5 datasheet shows that the R/#W
880 * bit should be cleared here, even when reading.
881 * However if SPD Write Disable is set (Lynx Point and later),
882 * the read will fail if we don't set the R/#W bit.
883 */
884 outb_p(((addr & 0x7f) << 1) |
885 ((priv->original_hstcfg & SMBHSTCFG_SPD_WD) ?
886 (read_write & 0x01) : 0),
887 SMBHSTADD(priv));
6342064c
JD
888 if (read_write == I2C_SMBUS_READ) {
889 /* NB: page 240 of ICH5 datasheet also shows
890 * that DATA1 is the cmd field when reading */
0cd96eb0 891 outb_p(command, SMBHSTDAT1(priv));
6342064c 892 } else
0cd96eb0 893 outb_p(command, SMBHSTCMD(priv));
6342064c
JD
894 block = 1;
895 break;
1da177e4 896 default:
0cd96eb0
DW
897 dev_err(&priv->pci_dev->dev, "Unsupported transaction %d\n",
898 size);
a7401ca5
JN
899 ret = -EOPNOTSUPP;
900 goto out;
1da177e4
LT
901 }
902
ca8b9e32 903 if (hwpec) /* enable/disable hardware PEC */
0cd96eb0 904 outb_p(inb_p(SMBAUXCTL(priv)) | SMBAUXCTL_CRC, SMBAUXCTL(priv));
ca8b9e32 905 else
0cd96eb0
DW
906 outb_p(inb_p(SMBAUXCTL(priv)) & (~SMBAUXCTL_CRC),
907 SMBAUXCTL(priv));
e8aac4a9 908
3fb21c64 909 if (block)
0cd96eb0
DW
910 ret = i801_block_transaction(priv, data, read_write, size,
911 hwpec);
7edcb9ab 912 else
37af8711 913 ret = i801_transaction(priv, xact);
1da177e4 914
c79cfbac 915 /* Some BIOSes don't like it when PEC is enabled at reboot or resume
7edcb9ab
OR
916 time, so we forcibly disable it after every transaction. Turn off
917 E32B for the same reason. */
a0921b6c 918 if (hwpec || block)
0cd96eb0
DW
919 outb_p(inb_p(SMBAUXCTL(priv)) &
920 ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
c79cfbac 921
3fb21c64 922 if (block)
a7401ca5 923 goto out;
3fb21c64 924 if (ret)
a7401ca5 925 goto out;
1da177e4 926 if ((read_write == I2C_SMBUS_WRITE) || (xact == I801_QUICK))
a7401ca5 927 goto out;
1da177e4
LT
928
929 switch (xact & 0x7f) {
930 case I801_BYTE: /* Result put in SMBHSTDAT0 */
931 case I801_BYTE_DATA:
0cd96eb0 932 data->byte = inb_p(SMBHSTDAT0(priv));
1da177e4
LT
933 break;
934 case I801_WORD_DATA:
0cd96eb0
DW
935 data->word = inb_p(SMBHSTDAT0(priv)) +
936 (inb_p(SMBHSTDAT1(priv)) << 8);
1da177e4
LT
937 break;
938 }
a7401ca5
JN
939
940out:
941 pm_runtime_mark_last_busy(&priv->pci_dev->dev);
942 pm_runtime_put_autosuspend(&priv->pci_dev->dev);
a7ae8195 943 mutex_unlock(&priv->acpi_lock);
a7401ca5 944 return ret;
1da177e4
LT
945}
946
947
948static u32 i801_func(struct i2c_adapter *adapter)
949{
0cd96eb0
DW
950 struct i801_priv *priv = i2c_get_adapdata(adapter);
951
1da177e4 952 return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
369f6f4a
JD
953 I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
954 I2C_FUNC_SMBUS_BLOCK_DATA | I2C_FUNC_SMBUS_WRITE_I2C_BLOCK |
0cd96eb0
DW
955 ((priv->features & FEATURE_SMBUS_PEC) ? I2C_FUNC_SMBUS_PEC : 0) |
956 ((priv->features & FEATURE_I2C_BLOCK_READ) ?
7b0ed334
BT
957 I2C_FUNC_SMBUS_READ_I2C_BLOCK : 0) |
958 ((priv->features & FEATURE_HOST_NOTIFY) ?
959 I2C_FUNC_SMBUS_HOST_NOTIFY : 0);
960}
961
4d5538f5 962static void i801_enable_host_notify(struct i2c_adapter *adapter)
7b0ed334
BT
963{
964 struct i801_priv *priv = i2c_get_adapdata(adapter);
965
966 if (!(priv->features & FEATURE_HOST_NOTIFY))
4d5538f5 967 return;
7b0ed334 968
22e94bd6
BT
969 if (!(SMBSLVCMD_HST_NTFY_INTREN & priv->original_slvcmd))
970 outb_p(SMBSLVCMD_HST_NTFY_INTREN | priv->original_slvcmd,
971 SMBSLVCMD(priv));
972
7b0ed334
BT
973 /* clear Host Notify bit to allow a new notification */
974 outb_p(SMBSLVSTS_HST_NTFY_STS, SMBSLVSTS(priv));
1da177e4
LT
975}
976
22e94bd6
BT
977static void i801_disable_host_notify(struct i801_priv *priv)
978{
979 if (!(priv->features & FEATURE_HOST_NOTIFY))
980 return;
981
982 outb_p(priv->original_slvcmd, SMBSLVCMD(priv));
983}
984
8f9082c5 985static const struct i2c_algorithm smbus_algorithm = {
1da177e4
LT
986 .smbus_xfer = i801_access,
987 .functionality = i801_func,
988};
989
392debf1 990static const struct pci_device_id i801_ids[] = {
1da177e4
LT
991 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AA_3) },
992 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801AB_3) },
993 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801BA_2) },
994 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801CA_3) },
995 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801DB_3) },
996 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82801EB_3) },
997 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB_4) },
998 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH6_16) },
999 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH7_17) },
b0a70b57 1000 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ESB2_17) },
8254fc4a 1001 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH8_5) },
adbc2a10 1002 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH9_6) },
cb04e95b 1003 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EP80579_1) },
d28dc711
GJ
1004 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_4) },
1005 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_ICH10_5) },
cb04e95b
SH
1006 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_5_3400_SERIES_SMBUS) },
1007 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS) },
e30d9859 1008 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS) },
55fee8d7
DW
1009 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0) },
1010 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1) },
1011 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2) },
662cda8a 1012 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DH89XXCC_SMBUS) },
6e2a851e 1013 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_PANTHERPOINT_SMBUS) },
062737fb 1014 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_SMBUS) },
4a8f1ddd 1015 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_SMBUS) },
c2db409c 1016 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_AVOTON_SMBUS) },
a3fc0ff0
JR
1017 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS) },
1018 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0) },
1019 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1) },
1020 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2) },
f39901c1 1021 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS) },
9827f9eb 1022 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_GEMINILAKE_SMBUS) },
b299de83 1023 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WILDCATPOINT_SMBUS) },
afc65924 1024 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS) },
1b31e9b7 1025 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS) },
39e8e30e 1026 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BRASWELL_SMBUS) },
3e27a844 1027 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS) },
3eee1799 1028 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS) },
cb09d943 1029 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CDF_SMBUS) },
84d7f2eb 1030 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_DNV_SMBUS) },
dd77f423 1031 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BROXTON_SMBUS) },
cdc5a311
AY
1032 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LEWISBURG_SMBUS) },
1033 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_LEWISBURG_SSKU_SMBUS) },
31158763 1034 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_KABYLAKE_PCH_H_SMBUS) },
09a1de04
SP
1035 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CANNONLAKE_H_SMBUS) },
1036 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_CANNONLAKE_LP_SMBUS) },
1da177e4
LT
1037 { 0, }
1038};
1039
3fb21c64 1040MODULE_DEVICE_TABLE(pci, i801_ids);
1da177e4 1041
8eacfceb 1042#if defined CONFIG_X86 && defined CONFIG_DMI
1561bfe5
JD
1043static unsigned char apanel_addr;
1044
1045/* Scan the system ROM for the signature "FJKEYINF" */
1046static __init const void __iomem *bios_signature(const void __iomem *bios)
1047{
1048 ssize_t offset;
1049 const unsigned char signature[] = "FJKEYINF";
1050
1051 for (offset = 0; offset < 0x10000; offset += 0x10) {
1052 if (check_signature(bios + offset, signature,
1053 sizeof(signature)-1))
1054 return bios + offset;
1055 }
1056 return NULL;
1057}
1058
1059static void __init input_apanel_init(void)
1060{
1061 void __iomem *bios;
1062 const void __iomem *p;
1063
1064 bios = ioremap(0xF0000, 0x10000); /* Can't fail */
1065 p = bios_signature(bios);
1066 if (p) {
1067 /* just use the first address */
1068 apanel_addr = readb(p + 8 + 3) >> 1;
1069 }
1070 iounmap(bios);
1071}
1561bfe5 1072
fa5bfab7
HG
1073struct dmi_onboard_device_info {
1074 const char *name;
1075 u8 type;
1076 unsigned short i2c_addr;
1077 const char *i2c_type;
1078};
1079
0b255e92 1080static const struct dmi_onboard_device_info dmi_devices[] = {
fa5bfab7
HG
1081 { "Syleus", DMI_DEV_TYPE_OTHER, 0x73, "fscsyl" },
1082 { "Hermes", DMI_DEV_TYPE_OTHER, 0x73, "fscher" },
1083 { "Hades", DMI_DEV_TYPE_OTHER, 0x73, "fschds" },
1084};
1085
0b255e92
BP
1086static void dmi_check_onboard_device(u8 type, const char *name,
1087 struct i2c_adapter *adap)
fa5bfab7
HG
1088{
1089 int i;
1090 struct i2c_board_info info;
1091
1092 for (i = 0; i < ARRAY_SIZE(dmi_devices); i++) {
1093 /* & ~0x80, ignore enabled/disabled bit */
1094 if ((type & ~0x80) != dmi_devices[i].type)
1095 continue;
faabd47f 1096 if (strcasecmp(name, dmi_devices[i].name))
fa5bfab7
HG
1097 continue;
1098
1099 memset(&info, 0, sizeof(struct i2c_board_info));
1100 info.addr = dmi_devices[i].i2c_addr;
1101 strlcpy(info.type, dmi_devices[i].i2c_type, I2C_NAME_SIZE);
1102 i2c_new_device(adap, &info);
1103 break;
1104 }
1105}
1106
1107/* We use our own function to check for onboard devices instead of
1108 dmi_find_device() as some buggy BIOS's have the devices we are interested
1109 in marked as disabled */
0b255e92 1110static void dmi_check_onboard_devices(const struct dmi_header *dm, void *adap)
fa5bfab7
HG
1111{
1112 int i, count;
1113
1114 if (dm->type != 10)
1115 return;
1116
1117 count = (dm->length - sizeof(struct dmi_header)) / 2;
1118 for (i = 0; i < count; i++) {
1119 const u8 *d = (char *)(dm + 1) + (i * 2);
1120 const char *name = ((char *) dm) + dm->length;
1121 u8 type = d[0];
1122 u8 s = d[1];
1123
1124 if (!s)
1125 continue;
1126 s--;
1127 while (s > 0 && name[0]) {
1128 name += strlen(name) + 1;
1129 s--;
1130 }
1131 if (name[0] == 0) /* Bogus string reference */
1132 continue;
1133
1134 dmi_check_onboard_device(type, name, adap);
1135 }
1136}
fa5bfab7 1137
e7198fbf 1138/* Register optional slaves */
0b255e92 1139static void i801_probe_optional_slaves(struct i801_priv *priv)
e7198fbf
JD
1140{
1141 /* Only register slaves on main SMBus channel */
1142 if (priv->features & FEATURE_IDF)
1143 return;
1144
e7198fbf
JD
1145 if (apanel_addr) {
1146 struct i2c_board_info info;
1147
1148 memset(&info, 0, sizeof(struct i2c_board_info));
1149 info.addr = apanel_addr;
1150 strlcpy(info.type, "fujitsu_apanel", I2C_NAME_SIZE);
1151 i2c_new_device(&priv->adapter, &info);
1152 }
8eacfceb 1153
e7198fbf
JD
1154 if (dmi_name_in_vendors("FUJITSU"))
1155 dmi_walk(dmi_check_onboard_devices, &priv->adapter);
e7198fbf 1156}
8eacfceb
JD
1157#else
1158static void __init input_apanel_init(void) {}
0b255e92 1159static void i801_probe_optional_slaves(struct i801_priv *priv) {}
8eacfceb 1160#endif /* CONFIG_X86 && CONFIG_DMI */
e7198fbf 1161
175c7080 1162#if IS_ENABLED(CONFIG_I2C_MUX_GPIO) && defined CONFIG_DMI
3ad7ea18
JD
1163static struct i801_mux_config i801_mux_config_asus_z8_d12 = {
1164 .gpio_chip = "gpio_ich",
1165 .values = { 0x02, 0x03 },
1166 .n_values = 2,
1167 .classes = { I2C_CLASS_SPD, I2C_CLASS_SPD },
1168 .gpios = { 52, 53 },
1169 .n_gpios = 2,
1170};
1171
1172static struct i801_mux_config i801_mux_config_asus_z8_d18 = {
1173 .gpio_chip = "gpio_ich",
1174 .values = { 0x02, 0x03, 0x01 },
1175 .n_values = 3,
1176 .classes = { I2C_CLASS_SPD, I2C_CLASS_SPD, I2C_CLASS_SPD },
1177 .gpios = { 52, 53 },
1178 .n_gpios = 2,
1179};
1180
0b255e92 1181static const struct dmi_system_id mux_dmi_table[] = {
3ad7ea18
JD
1182 {
1183 .matches = {
1184 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1185 DMI_MATCH(DMI_BOARD_NAME, "Z8NA-D6(C)"),
1186 },
1187 .driver_data = &i801_mux_config_asus_z8_d12,
1188 },
1189 {
1190 .matches = {
1191 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1192 DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)E-D12(X)"),
1193 },
1194 .driver_data = &i801_mux_config_asus_z8_d12,
1195 },
1196 {
1197 .matches = {
1198 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1199 DMI_MATCH(DMI_BOARD_NAME, "Z8NH-D12"),
1200 },
1201 .driver_data = &i801_mux_config_asus_z8_d12,
1202 },
1203 {
1204 .matches = {
1205 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1206 DMI_MATCH(DMI_BOARD_NAME, "Z8PH-D12/IFB"),
1207 },
1208 .driver_data = &i801_mux_config_asus_z8_d12,
1209 },
1210 {
1211 .matches = {
1212 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1213 DMI_MATCH(DMI_BOARD_NAME, "Z8NR-D12"),
1214 },
1215 .driver_data = &i801_mux_config_asus_z8_d12,
1216 },
1217 {
1218 .matches = {
1219 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1220 DMI_MATCH(DMI_BOARD_NAME, "Z8P(N)H-D12"),
1221 },
1222 .driver_data = &i801_mux_config_asus_z8_d12,
1223 },
1224 {
1225 .matches = {
1226 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1227 DMI_MATCH(DMI_BOARD_NAME, "Z8PG-D18"),
1228 },
1229 .driver_data = &i801_mux_config_asus_z8_d18,
1230 },
1231 {
1232 .matches = {
1233 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1234 DMI_MATCH(DMI_BOARD_NAME, "Z8PE-D18"),
1235 },
1236 .driver_data = &i801_mux_config_asus_z8_d18,
1237 },
1238 {
1239 .matches = {
1240 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
1241 DMI_MATCH(DMI_BOARD_NAME, "Z8PS-D12"),
1242 },
1243 .driver_data = &i801_mux_config_asus_z8_d12,
1244 },
1245 { }
1246};
1247
3ad7ea18 1248/* Setup multiplexing if needed */
0b255e92 1249static int i801_add_mux(struct i801_priv *priv)
3ad7ea18
JD
1250{
1251 struct device *dev = &priv->adapter.dev;
1252 const struct i801_mux_config *mux_config;
3ad7ea18 1253 struct i2c_mux_gpio_platform_data gpio_data;
f82b8626 1254 int err;
3ad7ea18
JD
1255
1256 if (!priv->mux_drvdata)
1257 return 0;
1258 mux_config = priv->mux_drvdata;
1259
3ad7ea18
JD
1260 /* Prepare the platform data */
1261 memset(&gpio_data, 0, sizeof(struct i2c_mux_gpio_platform_data));
1262 gpio_data.parent = priv->adapter.nr;
1263 gpio_data.values = mux_config->values;
1264 gpio_data.n_values = mux_config->n_values;
1265 gpio_data.classes = mux_config->classes;
f82b8626
JD
1266 gpio_data.gpio_chip = mux_config->gpio_chip;
1267 gpio_data.gpios = mux_config->gpios;
3ad7ea18
JD
1268 gpio_data.n_gpios = mux_config->n_gpios;
1269 gpio_data.idle = I2C_MUX_GPIO_NO_IDLE;
1270
1271 /* Register the mux device */
1272 priv->mux_pdev = platform_device_register_data(dev, "i2c-mux-gpio",
f82b8626 1273 PLATFORM_DEVID_AUTO, &gpio_data,
3ad7ea18
JD
1274 sizeof(struct i2c_mux_gpio_platform_data));
1275 if (IS_ERR(priv->mux_pdev)) {
1276 err = PTR_ERR(priv->mux_pdev);
1277 priv->mux_pdev = NULL;
1278 dev_err(dev, "Failed to register i2c-mux-gpio device\n");
1279 return err;
1280 }
1281
1282 return 0;
1283}
1284
0b255e92 1285static void i801_del_mux(struct i801_priv *priv)
3ad7ea18
JD
1286{
1287 if (priv->mux_pdev)
1288 platform_device_unregister(priv->mux_pdev);
1289}
1290
0b255e92 1291static unsigned int i801_get_adapter_class(struct i801_priv *priv)
3ad7ea18
JD
1292{
1293 const struct dmi_system_id *id;
1294 const struct i801_mux_config *mux_config;
1295 unsigned int class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
1296 int i;
1297
1298 id = dmi_first_match(mux_dmi_table);
1299 if (id) {
28901f57 1300 /* Remove branch classes from trunk */
3ad7ea18
JD
1301 mux_config = id->driver_data;
1302 for (i = 0; i < mux_config->n_values; i++)
1303 class &= ~mux_config->classes[i];
1304
1305 /* Remember for later */
1306 priv->mux_drvdata = mux_config;
1307 }
1308
1309 return class;
1310}
1311#else
1312static inline int i801_add_mux(struct i801_priv *priv) { return 0; }
1313static inline void i801_del_mux(struct i801_priv *priv) { }
1314
1315static inline unsigned int i801_get_adapter_class(struct i801_priv *priv)
1316{
1317 return I2C_CLASS_HWMON | I2C_CLASS_SPD;
1318}
1319#endif
1320
94246930
MW
1321static const struct itco_wdt_platform_data tco_platform_data = {
1322 .name = "Intel PCH",
1323 .version = 4,
1324};
1325
1326static DEFINE_SPINLOCK(p2sb_spinlock);
1327
1328static void i801_add_tco(struct i801_priv *priv)
1329{
1330 struct pci_dev *pci_dev = priv->pci_dev;
1331 struct resource tco_res[3], *res;
1332 struct platform_device *pdev;
1333 unsigned int devfn;
1334 u32 tco_base, tco_ctl;
1335 u32 base_addr, ctrl_val;
1336 u64 base64_addr;
bfd4473b 1337 u8 hidden;
94246930
MW
1338
1339 if (!(priv->features & FEATURE_TCO))
1340 return;
1341
1342 pci_read_config_dword(pci_dev, TCOBASE, &tco_base);
1343 pci_read_config_dword(pci_dev, TCOCTL, &tco_ctl);
1344 if (!(tco_ctl & TCOCTL_EN))
1345 return;
1346
1347 memset(tco_res, 0, sizeof(tco_res));
1348
1349 res = &tco_res[ICH_RES_IO_TCO];
1350 res->start = tco_base & ~1;
1351 res->end = res->start + 32 - 1;
1352 res->flags = IORESOURCE_IO;
1353
1354 /*
1355 * Power Management registers.
1356 */
1357 devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 2);
1358 pci_bus_read_config_dword(pci_dev->bus, devfn, ACPIBASE, &base_addr);
1359
1360 res = &tco_res[ICH_RES_IO_SMI];
1361 res->start = (base_addr & ~1) + ACPIBASE_SMI_OFF;
1362 res->end = res->start + 3;
1363 res->flags = IORESOURCE_IO;
1364
1365 /*
1366 * Enable the ACPI I/O space.
1367 */
1368 pci_bus_read_config_dword(pci_dev->bus, devfn, ACPICTRL, &ctrl_val);
1369 ctrl_val |= ACPICTRL_EN;
1370 pci_bus_write_config_dword(pci_dev->bus, devfn, ACPICTRL, ctrl_val);
1371
1372 /*
1373 * We must access the NO_REBOOT bit over the Primary to Sideband
1374 * bridge (P2SB). The BIOS prevents the P2SB device from being
1375 * enumerated by the PCI subsystem, so we need to unhide/hide it
1376 * to lookup the P2SB BAR.
1377 */
1378 spin_lock(&p2sb_spinlock);
1379
1380 devfn = PCI_DEVFN(PCI_SLOT(pci_dev->devfn), 1);
1381
bfd4473b
QZ
1382 /* Unhide the P2SB device, if it is hidden */
1383 pci_bus_read_config_byte(pci_dev->bus, devfn, 0xe1, &hidden);
1384 if (hidden)
1385 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, 0x0);
94246930
MW
1386
1387 pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR, &base_addr);
1388 base64_addr = base_addr & 0xfffffff0;
1389
1390 pci_bus_read_config_dword(pci_dev->bus, devfn, SBREG_BAR + 0x4, &base_addr);
1391 base64_addr |= (u64)base_addr << 32;
1392
bfd4473b
QZ
1393 /* Hide the P2SB device, if it was hidden before */
1394 if (hidden)
1395 pci_bus_write_config_byte(pci_dev->bus, devfn, 0xe1, hidden);
94246930
MW
1396 spin_unlock(&p2sb_spinlock);
1397
1398 res = &tco_res[ICH_RES_MEM_OFF];
1399 res->start = (resource_size_t)base64_addr + SBREG_SMBCTRL;
1400 res->end = res->start + 3;
1401 res->flags = IORESOURCE_MEM;
1402
1403 pdev = platform_device_register_resndata(&pci_dev->dev, "iTCO_wdt", -1,
1404 tco_res, 3, &tco_platform_data,
1405 sizeof(tco_platform_data));
1406 if (IS_ERR(pdev)) {
1407 dev_warn(&pci_dev->dev, "failed to create iTCO device\n");
1408 return;
1409 }
1410
1411 priv->tco_pdev = pdev;
1412}
1413
a7ae8195
MW
1414#ifdef CONFIG_ACPI
1415static acpi_status
1416i801_acpi_io_handler(u32 function, acpi_physical_address address, u32 bits,
1417 u64 *value, void *handler_context, void *region_context)
1418{
1419 struct i801_priv *priv = handler_context;
1420 struct pci_dev *pdev = priv->pci_dev;
1421 acpi_status status;
1422
1423 /*
1424 * Once BIOS AML code touches the OpRegion we warn and inhibit any
1425 * further access from the driver itself. This device is now owned
1426 * by the system firmware.
1427 */
1428 mutex_lock(&priv->acpi_lock);
1429
1430 if (!priv->acpi_reserved) {
1431 priv->acpi_reserved = true;
1432
1433 dev_warn(&pdev->dev, "BIOS is accessing SMBus registers\n");
1434 dev_warn(&pdev->dev, "Driver SMBus register access inhibited\n");
1435
1436 /*
1437 * BIOS is accessing the host controller so prevent it from
1438 * suspending automatically from now on.
1439 */
1440 pm_runtime_get_sync(&pdev->dev);
1441 }
1442
1443 if ((function & ACPI_IO_MASK) == ACPI_READ)
1444 status = acpi_os_read_port(address, (u32 *)value, bits);
1445 else
1446 status = acpi_os_write_port(address, (u32)*value, bits);
1447
1448 mutex_unlock(&priv->acpi_lock);
1449
1450 return status;
1451}
1452
1453static int i801_acpi_probe(struct i801_priv *priv)
1454{
1455 struct acpi_device *adev;
1456 acpi_status status;
1457
1458 adev = ACPI_COMPANION(&priv->pci_dev->dev);
1459 if (adev) {
1460 status = acpi_install_address_space_handler(adev->handle,
1461 ACPI_ADR_SPACE_SYSTEM_IO, i801_acpi_io_handler,
1462 NULL, priv);
1463 if (ACPI_SUCCESS(status))
1464 return 0;
1465 }
1466
1467 return acpi_check_resource_conflict(&priv->pci_dev->resource[SMBBAR]);
1468}
1469
1470static void i801_acpi_remove(struct i801_priv *priv)
1471{
1472 struct acpi_device *adev;
1473
1474 adev = ACPI_COMPANION(&priv->pci_dev->dev);
1475 if (!adev)
1476 return;
1477
1478 acpi_remove_address_space_handler(adev->handle,
1479 ACPI_ADR_SPACE_SYSTEM_IO, i801_acpi_io_handler);
1480
1481 mutex_lock(&priv->acpi_lock);
1482 if (priv->acpi_reserved)
1483 pm_runtime_put(&priv->pci_dev->dev);
1484 mutex_unlock(&priv->acpi_lock);
1485}
1486#else
1487static inline int i801_acpi_probe(struct i801_priv *priv) { return 0; }
1488static inline void i801_acpi_remove(struct i801_priv *priv) { }
1489#endif
1490
0b255e92 1491static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id)
1da177e4 1492{
02dd7ae2 1493 unsigned char temp;
adff687d 1494 int err, i;
0cd96eb0
DW
1495 struct i801_priv *priv;
1496
1621c59d 1497 priv = devm_kzalloc(&dev->dev, sizeof(*priv), GFP_KERNEL);
0cd96eb0
DW
1498 if (!priv)
1499 return -ENOMEM;
1500
1501 i2c_set_adapdata(&priv->adapter, priv);
1502 priv->adapter.owner = THIS_MODULE;
3ad7ea18 1503 priv->adapter.class = i801_get_adapter_class(priv);
0cd96eb0 1504 priv->adapter.algo = &smbus_algorithm;
8eb5c87a
DB
1505 priv->adapter.dev.parent = &dev->dev;
1506 ACPI_COMPANION_SET(&priv->adapter.dev, ACPI_COMPANION(&dev->dev));
1507 priv->adapter.retries = 3;
a7ae8195 1508 mutex_init(&priv->acpi_lock);
1da177e4 1509
0cd96eb0 1510 priv->pci_dev = dev;
250d1bd3 1511 switch (dev->device) {
94246930
MW
1512 case PCI_DEVICE_ID_INTEL_SUNRISEPOINT_H_SMBUS:
1513 case PCI_DEVICE_ID_INTEL_SUNRISEPOINT_LP_SMBUS:
09a1de04
SP
1514 case PCI_DEVICE_ID_INTEL_CANNONLAKE_H_SMBUS:
1515 case PCI_DEVICE_ID_INTEL_CANNONLAKE_LP_SMBUS:
1a1503c5
AY
1516 case PCI_DEVICE_ID_INTEL_LEWISBURG_SMBUS:
1517 case PCI_DEVICE_ID_INTEL_LEWISBURG_SSKU_SMBUS:
cb09d943 1518 case PCI_DEVICE_ID_INTEL_CDF_SMBUS:
84d7f2eb 1519 case PCI_DEVICE_ID_INTEL_DNV_SMBUS:
31158763 1520 case PCI_DEVICE_ID_INTEL_KABYLAKE_PCH_H_SMBUS:
94246930
MW
1521 priv->features |= FEATURE_I2C_BLOCK_READ;
1522 priv->features |= FEATURE_IRQ;
1523 priv->features |= FEATURE_SMBUS_PEC;
1524 priv->features |= FEATURE_BLOCK_BUFFER;
1f6dbb02
MW
1525 /* If we have ACPI based watchdog use that instead */
1526 if (!acpi_has_watchdog())
1527 priv->features |= FEATURE_TCO;
7b0ed334 1528 priv->features |= FEATURE_HOST_NOTIFY;
94246930
MW
1529 break;
1530
e7198fbf
JD
1531 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF0:
1532 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF1:
1533 case PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS_IDF2:
a3fc0ff0
JR
1534 case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS0:
1535 case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS1:
1536 case PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2:
e7198fbf
JD
1537 priv->features |= FEATURE_IDF;
1538 /* fall through */
e0e8398c 1539 default:
0cd96eb0 1540 priv->features |= FEATURE_I2C_BLOCK_READ;
6676a847 1541 priv->features |= FEATURE_IRQ;
6342064c
JD
1542 /* fall through */
1543 case PCI_DEVICE_ID_INTEL_82801DB_3:
0cd96eb0
DW
1544 priv->features |= FEATURE_SMBUS_PEC;
1545 priv->features |= FEATURE_BLOCK_BUFFER;
e0e8398c
JD
1546 /* fall through */
1547 case PCI_DEVICE_ID_INTEL_82801CA_3:
7b0ed334
BT
1548 priv->features |= FEATURE_HOST_NOTIFY;
1549 /* fall through */
e0e8398c
JD
1550 case PCI_DEVICE_ID_INTEL_82801BA_2:
1551 case PCI_DEVICE_ID_INTEL_82801AB_3:
1552 case PCI_DEVICE_ID_INTEL_82801AA_3:
250d1bd3 1553 break;
250d1bd3 1554 }
02dd7ae2 1555
adff687d
JD
1556 /* Disable features on user request */
1557 for (i = 0; i < ARRAY_SIZE(i801_feature_names); i++) {
0cd96eb0 1558 if (priv->features & disable_features & (1 << i))
adff687d
JD
1559 dev_notice(&dev->dev, "%s disabled by user\n",
1560 i801_feature_names[i]);
1561 }
0cd96eb0 1562 priv->features &= ~disable_features;
adff687d 1563
fef220da 1564 err = pcim_enable_device(dev);
02dd7ae2
JD
1565 if (err) {
1566 dev_err(&dev->dev, "Failed to enable SMBus PCI device (%d)\n",
1567 err);
fef220da 1568 return err;
02dd7ae2 1569 }
fef220da 1570 pcim_pin_device(dev);
02dd7ae2
JD
1571
1572 /* Determine the address of the SMBus area */
0cd96eb0
DW
1573 priv->smba = pci_resource_start(dev, SMBBAR);
1574 if (!priv->smba) {
9cbbf3dc
JN
1575 dev_err(&dev->dev,
1576 "SMBus base address uninitialized, upgrade BIOS\n");
fef220da 1577 return -ENODEV;
02dd7ae2
JD
1578 }
1579
a7ae8195 1580 if (i801_acpi_probe(priv))
fef220da 1581 return -ENODEV;
54fb4a05 1582
fef220da
JN
1583 err = pcim_iomap_regions(dev, 1 << SMBBAR,
1584 dev_driver_string(&dev->dev));
02dd7ae2 1585 if (err) {
9cbbf3dc
JN
1586 dev_err(&dev->dev,
1587 "Failed to request SMBus region 0x%lx-0x%Lx\n",
1588 priv->smba,
598736c5 1589 (unsigned long long)pci_resource_end(dev, SMBBAR));
a7ae8195 1590 i801_acpi_remove(priv);
fef220da 1591 return err;
02dd7ae2
JD
1592 }
1593
0cd96eb0
DW
1594 pci_read_config_byte(priv->pci_dev, SMBHSTCFG, &temp);
1595 priv->original_hstcfg = temp;
02dd7ae2
JD
1596 temp &= ~SMBHSTCFG_I2C_EN; /* SMBus timing */
1597 if (!(temp & SMBHSTCFG_HST_EN)) {
1598 dev_info(&dev->dev, "Enabling SMBus device\n");
1599 temp |= SMBHSTCFG_HST_EN;
1600 }
0cd96eb0 1601 pci_write_config_byte(priv->pci_dev, SMBHSTCFG, temp);
02dd7ae2 1602
636752bc 1603 if (temp & SMBHSTCFG_SMB_SMI_EN) {
02dd7ae2 1604 dev_dbg(&dev->dev, "SMBus using interrupt SMI#\n");
636752bc
DK
1605 /* Disable SMBus interrupt feature if SMBus using SMI# */
1606 priv->features &= ~FEATURE_IRQ;
636752bc 1607 }
ba9ad2af
JD
1608 if (temp & SMBHSTCFG_SPD_WD)
1609 dev_info(&dev->dev, "SPD Write Disable is set\n");
1da177e4 1610
a0921b6c 1611 /* Clear special mode bits */
0cd96eb0
DW
1612 if (priv->features & (FEATURE_SMBUS_PEC | FEATURE_BLOCK_BUFFER))
1613 outb_p(inb_p(SMBAUXCTL(priv)) &
1614 ~(SMBAUXCTL_CRC | SMBAUXCTL_E32B), SMBAUXCTL(priv));
a0921b6c 1615
a086bb83
JD
1616 /* Remember original Host Notify setting */
1617 if (priv->features & FEATURE_HOST_NOTIFY)
1618 priv->original_slvcmd = inb_p(SMBSLVCMD(priv));
1619
b3b8df97
JD
1620 /* Default timeout in interrupt mode: 200 ms */
1621 priv->adapter.timeout = HZ / 5;
1622
6e0c9507
HG
1623 if (dev->irq == IRQ_NOTCONNECTED)
1624 priv->features &= ~FEATURE_IRQ;
1625
aeb8a3d1
JD
1626 if (priv->features & FEATURE_IRQ) {
1627 u16 pcictl, pcists;
1628
1629 /* Complain if an interrupt is already pending */
1630 pci_read_config_word(priv->pci_dev, SMBPCISTS, &pcists);
1631 if (pcists & SMBPCISTS_INTS)
1632 dev_warn(&dev->dev, "An interrupt is pending!\n");
1633
1634 /* Check if interrupts have been disabled */
1635 pci_read_config_word(priv->pci_dev, SMBPCICTL, &pcictl);
1636 if (pcictl & SMBPCICTL_INTDIS) {
1637 dev_info(&dev->dev, "Interrupts are disabled\n");
1638 priv->features &= ~FEATURE_IRQ;
1639 }
1640 }
1641
636752bc
DK
1642 if (priv->features & FEATURE_IRQ) {
1643 init_waitqueue_head(&priv->waitq);
1644
1621c59d
JN
1645 err = devm_request_irq(&dev->dev, dev->irq, i801_isr,
1646 IRQF_SHARED,
1647 dev_driver_string(&dev->dev), priv);
636752bc
DK
1648 if (err) {
1649 dev_err(&dev->dev, "Failed to allocate irq %d: %d\n",
1650 dev->irq, err);
ae944717 1651 priv->features &= ~FEATURE_IRQ;
636752bc
DK
1652 }
1653 }
ae944717
JD
1654 dev_info(&dev->dev, "SMBus using %s\n",
1655 priv->features & FEATURE_IRQ ? "PCI interrupt" : "polling");
636752bc 1656
94246930
MW
1657 i801_add_tco(priv);
1658
0cd96eb0
DW
1659 snprintf(priv->adapter.name, sizeof(priv->adapter.name),
1660 "SMBus I801 adapter at %04lx", priv->smba);
1661 err = i2c_add_adapter(&priv->adapter);
02dd7ae2 1662 if (err) {
a7ae8195 1663 i801_acpi_remove(priv);
fef220da 1664 return err;
02dd7ae2 1665 }
1561bfe5 1666
4d5538f5 1667 i801_enable_host_notify(&priv->adapter);
7b0ed334 1668
e7198fbf 1669 i801_probe_optional_slaves(priv);
3ad7ea18
JD
1670 /* We ignore errors - multiplexing is optional */
1671 i801_add_mux(priv);
1561bfe5 1672
0cd96eb0 1673 pci_set_drvdata(dev, priv);
636752bc 1674
a7401ca5
JN
1675 pm_runtime_set_autosuspend_delay(&dev->dev, 1000);
1676 pm_runtime_use_autosuspend(&dev->dev);
1677 pm_runtime_put_autosuspend(&dev->dev);
1678 pm_runtime_allow(&dev->dev);
1679
d6fcb3b9 1680 return 0;
1da177e4
LT
1681}
1682
0b255e92 1683static void i801_remove(struct pci_dev *dev)
1da177e4 1684{
0cd96eb0
DW
1685 struct i801_priv *priv = pci_get_drvdata(dev);
1686
a7401ca5
JN
1687 pm_runtime_forbid(&dev->dev);
1688 pm_runtime_get_noresume(&dev->dev);
1689
22e94bd6 1690 i801_disable_host_notify(priv);
3ad7ea18 1691 i801_del_mux(priv);
0cd96eb0 1692 i2c_del_adapter(&priv->adapter);
a7ae8195 1693 i801_acpi_remove(priv);
0cd96eb0 1694 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
636752bc 1695
94246930
MW
1696 platform_device_unregister(priv->tco_pdev);
1697
d6fcb3b9
DR
1698 /*
1699 * do not call pci_disable_device(dev) since it can cause hard hangs on
1700 * some systems during power-off (eg. Fujitsu-Siemens Lifebook E8010)
1701 */
1da177e4
LT
1702}
1703
f7f6d915
JD
1704static void i801_shutdown(struct pci_dev *dev)
1705{
1706 struct i801_priv *priv = pci_get_drvdata(dev);
1707
1708 /* Restore config registers to avoid hard hang on some systems */
1709 i801_disable_host_notify(priv);
1710 pci_write_config_byte(dev, SMBHSTCFG, priv->original_hstcfg);
1711}
1712
4b2f9bd5 1713#ifdef CONFIG_PM_SLEEP
2ee73c48 1714static int i801_suspend(struct device *dev)
a5aaea37 1715{
2ee73c48
JN
1716 struct pci_dev *pci_dev = to_pci_dev(dev);
1717 struct i801_priv *priv = pci_get_drvdata(pci_dev);
0cd96eb0 1718
2ee73c48 1719 pci_write_config_byte(pci_dev, SMBHSTCFG, priv->original_hstcfg);
a5aaea37
JD
1720 return 0;
1721}
1722
2ee73c48 1723static int i801_resume(struct device *dev)
a5aaea37 1724{
7b0ed334
BT
1725 struct pci_dev *pci_dev = to_pci_dev(dev);
1726 struct i801_priv *priv = pci_get_drvdata(pci_dev);
7b0ed334 1727
4d5538f5 1728 i801_enable_host_notify(&priv->adapter);
7b0ed334 1729
f85da3f5 1730 return 0;
a5aaea37 1731}
a5aaea37
JD
1732#endif
1733
a9c8088c 1734static SIMPLE_DEV_PM_OPS(i801_pm_ops, i801_suspend, i801_resume);
2ee73c48 1735
1da177e4
LT
1736static struct pci_driver i801_driver = {
1737 .name = "i801_smbus",
1738 .id_table = i801_ids,
1739 .probe = i801_probe,
0b255e92 1740 .remove = i801_remove,
f7f6d915 1741 .shutdown = i801_shutdown,
2ee73c48
JN
1742 .driver = {
1743 .pm = &i801_pm_ops,
1744 },
1da177e4
LT
1745};
1746
1747static int __init i2c_i801_init(void)
1748{
6aa1464d
JD
1749 if (dmi_name_in_vendors("FUJITSU"))
1750 input_apanel_init();
1da177e4
LT
1751 return pci_register_driver(&i801_driver);
1752}
1753
1754static void __exit i2c_i801_exit(void)
1755{
1756 pci_unregister_driver(&i801_driver);
1757}
1758
7c81c60f 1759MODULE_AUTHOR("Mark D. Studebaker <mdsxyz123@yahoo.com>, Jean Delvare <jdelvare@suse.de>");
1da177e4
LT
1760MODULE_DESCRIPTION("I801 SMBus driver");
1761MODULE_LICENSE("GPL");
1762
1763module_init(i2c_i801_init);
1764module_exit(i2c_i801_exit);