1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * Synopsys DesignWare I2C adapter driver. 4 * 5 * Based on the TI DAVINCI I2C adapter driver. 6 * 7 * Copyright (C) 2006 Texas Instruments. 8 * Copyright (C) 2007 MontaVista Software Inc. 9 * Copyright (C) 2009 Provigent Ltd. 10 */ 11 12 #define DEFAULT_SYMBOL_NAMESPACE "I2C_DW_COMMON" 13 14 #include <linux/acpi.h> 15 #include <linux/bitfield.h> 16 #include <linux/clk.h> 17 #include <linux/delay.h> 18 #include <linux/device.h> 19 #include <linux/err.h> 20 #include <linux/errno.h> 21 #include <linux/export.h> 22 #include <linux/i2c.h> 23 #include <linux/interrupt.h> 24 #include <linux/io.h> 25 #include <linux/kernel.h> 26 #include <linux/module.h> 27 #include <linux/of.h> 28 #include <linux/pm.h> 29 #include <linux/pm_runtime.h> 30 #include <linux/property.h> 31 #include <linux/regmap.h> 32 #include <linux/swab.h> 33 #include <linux/types.h> 34 #include <linux/units.h> 35 36 #include <linux/designware_i2c.h> 37 38 #include "i2c-designware-core.h" 39 40 #define DW_IC_DEFAULT_BUS_CAPACITANCE_pF 100 41 #define DW_IC_ABORT_TIMEOUT_US 10 42 #define DW_IC_BUSY_POLL_TIMEOUT_US (1 * USEC_PER_MSEC) 43 44 static const char *const abort_sources[] = { 45 [ABRT_7B_ADDR_NOACK] = 46 "slave address not acknowledged (7bit mode)", 47 [ABRT_10ADDR1_NOACK] = 48 "first address byte not acknowledged (10bit mode)", 49 [ABRT_10ADDR2_NOACK] = 50 "second address byte not acknowledged (10bit mode)", 51 [ABRT_TXDATA_NOACK] = 52 "data not acknowledged", 53 [ABRT_GCALL_NOACK] = 54 "no acknowledgement for a general call", 55 [ABRT_GCALL_READ] = 56 "read after general call", 57 [ABRT_SBYTE_ACKDET] = 58 "start byte acknowledged", 59 [ABRT_SBYTE_NORSTRT] = 60 "trying to send start byte when restart is disabled", 61 [ABRT_10B_RD_NORSTRT] = 62 "trying to read when restart is disabled (10bit mode)", 63 [ABRT_MASTER_DIS] = 64 "trying to use disabled adapter", 65 [ARB_LOST] = 66 "lost arbitration", 67 [ABRT_SLAVE_FLUSH_TXFIFO] = 68 "read command so flush old data in the TX FIFO", 69 [ABRT_SLAVE_ARBLOST] = 70 "slave lost the bus while transmitting data to a remote master", 71 [ABRT_SLAVE_RD_INTX] = 72 "incorrect slave-transmitter mode configuration", 73 }; 74 75 static int dw_reg_read(void *context, unsigned int reg, unsigned int *val) 76 { 77 struct dw_i2c_dev *dev = context; 78 79 *val = readl(dev->base + reg); 80 81 return 0; 82 } 83 84 static int dw_reg_write(void *context, unsigned int reg, unsigned int val) 85 { 86 struct dw_i2c_dev *dev = context; 87 88 writel(val, dev->base + reg); 89 90 return 0; 91 } 92 93 static int dw_reg_read_swab(void *context, unsigned int reg, unsigned int *val) 94 { 95 struct dw_i2c_dev *dev = context; 96 97 *val = swab32(readl(dev->base + reg)); 98 99 return 0; 100 } 101 102 static int dw_reg_write_swab(void *context, unsigned int reg, unsigned int val) 103 { 104 struct dw_i2c_dev *dev = context; 105 106 writel(swab32(val), dev->base + reg); 107 108 return 0; 109 } 110 111 static int dw_reg_read_word(void *context, unsigned int reg, unsigned int *val) 112 { 113 struct dw_i2c_dev *dev = context; 114 115 *val = readw(dev->base + reg) | 116 (readw(dev->base + reg + DW_IC_REG_STEP_BYTES) << DW_IC_REG_WORD_SHIFT); 117 118 return 0; 119 } 120 121 static int dw_reg_write_word(void *context, unsigned int reg, unsigned int val) 122 { 123 struct dw_i2c_dev *dev = context; 124 125 writew(val, dev->base + reg); 126 writew(val >> DW_IC_REG_WORD_SHIFT, dev->base + reg + DW_IC_REG_STEP_BYTES); 127 128 return 0; 129 } 130 131 /** 132 * i2c_dw_init_regmap() - Initialize registers map 133 * @dev: device private data 134 * 135 * Autodetects needed register access mode and creates the regmap with 136 * corresponding read/write callbacks. This must be called before doing any 137 * other register access. 138 * 139 * Return: 0 on success, or negative errno otherwise. 140 */ 141 static int i2c_dw_init_regmap(struct dw_i2c_dev *dev) 142 { 143 struct regmap_config map_cfg = { 144 .reg_bits = 32, 145 .val_bits = 32, 146 .reg_stride = 4, 147 .disable_locking = true, 148 .reg_read = dw_reg_read, 149 .reg_write = dw_reg_write, 150 .max_register = DW_IC_COMP_TYPE, 151 }; 152 u32 reg; 153 int ret; 154 155 /* 156 * Skip detecting the registers map configuration if the regmap has 157 * already been provided by a higher code. 158 */ 159 if (dev->map) 160 return 0; 161 162 ret = i2c_dw_acquire_lock(dev); 163 if (ret) 164 return ret; 165 166 reg = readl(dev->base + DW_IC_COMP_TYPE); 167 i2c_dw_release_lock(dev); 168 169 if ((dev->flags & MODEL_MASK) == MODEL_AMD_NAVI_GPU) 170 map_cfg.max_register = AMD_UCSI_INTR_REG; 171 172 if (reg == swab32(DW_IC_COMP_TYPE_VALUE)) { 173 map_cfg.reg_read = dw_reg_read_swab; 174 map_cfg.reg_write = dw_reg_write_swab; 175 } else if (reg == lower_16_bits(DW_IC_COMP_TYPE_VALUE)) { 176 map_cfg.reg_read = dw_reg_read_word; 177 map_cfg.reg_write = dw_reg_write_word; 178 } else if (reg != DW_IC_COMP_TYPE_VALUE) { 179 dev_err(dev->dev, 180 "Unknown Synopsys component type: 0x%08x\n", reg); 181 return -ENODEV; 182 } 183 184 /* 185 * Note we'll check the return value of the regmap IO accessors only 186 * at the probe stage. The rest of the code won't do this because 187 * basically we have MMIO-based regmap, so none of the read/write methods 188 * can fail. 189 */ 190 dev->map = devm_regmap_init(dev->dev, NULL, dev, &map_cfg); 191 if (IS_ERR(dev->map)) { 192 dev_err(dev->dev, "Failed to init the registers map\n"); 193 return PTR_ERR(dev->map); 194 } 195 196 return 0; 197 } 198 199 static const u32 supported_speeds[] = { 200 I2C_MAX_HIGH_SPEED_MODE_FREQ, 201 I2C_MAX_FAST_MODE_PLUS_FREQ, 202 I2C_MAX_FAST_MODE_FREQ, 203 I2C_MAX_STANDARD_MODE_FREQ, 204 }; 205 206 static int i2c_dw_validate_speed(struct dw_i2c_dev *dev) 207 { 208 struct i2c_timings *t = &dev->timings; 209 unsigned int i; 210 211 /* 212 * Only standard mode at 100kHz, fast mode at 400kHz, 213 * fast mode plus at 1MHz and high speed mode at 3.4MHz are supported. 214 */ 215 for (i = 0; i < ARRAY_SIZE(supported_speeds); i++) { 216 if (t->bus_freq_hz == supported_speeds[i]) 217 return 0; 218 } 219 220 dev_err(dev->dev, 221 "%d Hz is unsupported, only 100kHz, 400kHz, 1MHz and 3.4MHz are supported\n", 222 t->bus_freq_hz); 223 224 return -EINVAL; 225 } 226 227 #ifdef CONFIG_OF 228 229 #include <linux/platform_device.h> 230 231 #define MSCC_ICPU_CFG_TWI_DELAY 0x0 232 #define MSCC_ICPU_CFG_TWI_DELAY_ENABLE BIT(0) 233 #define MSCC_ICPU_CFG_TWI_SPIKE_FILTER 0x4 234 235 static int mscc_twi_set_sda_hold_time(struct dw_i2c_dev *dev) 236 { 237 writel((dev->sda_hold_time << 1) | MSCC_ICPU_CFG_TWI_DELAY_ENABLE, 238 dev->ext + MSCC_ICPU_CFG_TWI_DELAY); 239 240 return 0; 241 } 242 243 static void i2c_dw_of_configure(struct device *device) 244 { 245 struct platform_device *pdev = to_platform_device(device); 246 struct dw_i2c_dev *dev = dev_get_drvdata(device); 247 248 if (device_is_compatible(dev->dev, "mscc,ocelot-i2c")) { 249 dev->ext = devm_platform_ioremap_resource(pdev, 1); 250 if (!IS_ERR(dev->ext)) 251 dev->set_sda_hold_time = mscc_twi_set_sda_hold_time; 252 } 253 } 254 255 #else /* CONFIG_OF */ 256 257 static inline void i2c_dw_of_configure(struct device *device) { } 258 259 #endif /* CONFIG_OF */ 260 261 #ifdef CONFIG_ACPI 262 263 #include <linux/dmi.h> 264 265 /* 266 * The HCNT/LCNT information coming from ACPI should be the most accurate 267 * for given platform. However, some systems get it wrong. On such systems 268 * we get better results by calculating those based on the input clock. 269 */ 270 static const struct dmi_system_id i2c_dw_no_acpi_params[] = { 271 { 272 .ident = "Dell Inspiron 7348", 273 .matches = { 274 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 275 DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 7348"), 276 }, 277 }, 278 {} 279 }; 280 281 static void i2c_dw_acpi_params(struct device *device, char method[], 282 u16 *hcnt, u16 *lcnt, u32 *sda_hold) 283 { 284 struct acpi_buffer buf = { ACPI_ALLOCATE_BUFFER }; 285 acpi_handle handle = ACPI_HANDLE(device); 286 union acpi_object *obj; 287 288 if (dmi_check_system(i2c_dw_no_acpi_params)) 289 return; 290 291 if (ACPI_FAILURE(acpi_evaluate_object(handle, method, NULL, &buf))) 292 return; 293 294 obj = (union acpi_object *)buf.pointer; 295 if (obj->type == ACPI_TYPE_PACKAGE && obj->package.count == 3) { 296 const union acpi_object *objs = obj->package.elements; 297 298 *hcnt = (u16)objs[0].integer.value; 299 *lcnt = (u16)objs[1].integer.value; 300 *sda_hold = (u32)objs[2].integer.value; 301 } 302 303 kfree(buf.pointer); 304 } 305 306 static void i2c_dw_acpi_configure(struct device *device) 307 { 308 struct dw_i2c_dev *dev = dev_get_drvdata(device); 309 struct i2c_timings *t = &dev->timings; 310 u32 ss_ht = 0, fp_ht = 0, hs_ht = 0, fs_ht = 0; 311 312 /* 313 * Try to get SDA hold time and *CNT values from an ACPI method for 314 * selected speed modes. 315 */ 316 i2c_dw_acpi_params(device, "SSCN", &dev->ss_hcnt, &dev->ss_lcnt, &ss_ht); 317 i2c_dw_acpi_params(device, "FMCN", &dev->fs_hcnt, &dev->fs_lcnt, &fs_ht); 318 i2c_dw_acpi_params(device, "FPCN", &dev->fp_hcnt, &dev->fp_lcnt, &fp_ht); 319 i2c_dw_acpi_params(device, "HSCN", &dev->hs_hcnt, &dev->hs_lcnt, &hs_ht); 320 321 switch (t->bus_freq_hz) { 322 case I2C_MAX_STANDARD_MODE_FREQ: 323 dev->sda_hold_time = ss_ht; 324 break; 325 case I2C_MAX_FAST_MODE_PLUS_FREQ: 326 dev->sda_hold_time = fp_ht; 327 break; 328 case I2C_MAX_HIGH_SPEED_MODE_FREQ: 329 dev->sda_hold_time = hs_ht; 330 break; 331 case I2C_MAX_FAST_MODE_FREQ: 332 default: 333 dev->sda_hold_time = fs_ht; 334 break; 335 } 336 } 337 338 static u32 i2c_dw_acpi_round_bus_speed(struct device *device) 339 { 340 u32 acpi_speed; 341 int i; 342 343 acpi_speed = i2c_acpi_find_bus_speed(device); 344 /* 345 * Some DSDTs use a non standard speed, round down to the lowest 346 * standard speed. 347 */ 348 for (i = 0; i < ARRAY_SIZE(supported_speeds); i++) { 349 if (acpi_speed >= supported_speeds[i]) 350 return supported_speeds[i]; 351 } 352 353 return 0; 354 } 355 356 #else /* CONFIG_ACPI */ 357 358 static inline void i2c_dw_acpi_configure(struct device *device) { } 359 360 static inline u32 i2c_dw_acpi_round_bus_speed(struct device *device) { return 0; } 361 362 #endif /* CONFIG_ACPI */ 363 364 static void i2c_dw_configure_mode(struct dw_i2c_dev *dev, int mode) 365 { 366 switch (mode) { 367 case DW_IC_MASTER: 368 regmap_write(dev->map, DW_IC_TX_TL, dev->tx_fifo_depth / 2); 369 regmap_write(dev->map, DW_IC_RX_TL, 0); 370 regmap_write(dev->map, DW_IC_CON, dev->master_cfg); 371 break; 372 case DW_IC_SLAVE: 373 dev->status = 0; 374 regmap_write(dev->map, DW_IC_TX_TL, 0); 375 regmap_write(dev->map, DW_IC_RX_TL, 0); 376 regmap_write(dev->map, DW_IC_CON, dev->slave_cfg); 377 regmap_write(dev->map, DW_IC_SAR, dev->slave->addr); 378 regmap_write(dev->map, DW_IC_INTR_MASK, DW_IC_INTR_SLAVE_MASK); 379 __i2c_dw_enable(dev); 380 break; 381 default: 382 WARN(1, "Invalid mode %d\n", mode); 383 return; 384 } 385 } 386 387 static void i2c_dw_write_timings(struct dw_i2c_dev *dev) 388 { 389 /* Write standard speed timing parameters */ 390 regmap_write(dev->map, DW_IC_SS_SCL_HCNT, dev->ss_hcnt); 391 regmap_write(dev->map, DW_IC_SS_SCL_LCNT, dev->ss_lcnt); 392 393 /* Write fast mode/fast mode plus timing parameters */ 394 regmap_write(dev->map, DW_IC_FS_SCL_HCNT, dev->fs_hcnt); 395 regmap_write(dev->map, DW_IC_FS_SCL_LCNT, dev->fs_lcnt); 396 397 /* Write high speed timing parameters */ 398 regmap_write(dev->map, DW_IC_HS_SCL_HCNT, dev->hs_hcnt); 399 regmap_write(dev->map, DW_IC_HS_SCL_LCNT, dev->hs_lcnt); 400 } 401 402 /** 403 * i2c_dw_set_mode() - Select the controller mode of operation - master or slave 404 * @dev: device private data 405 * @mode: I2C mode of operation 406 * 407 * Configures the controller to operate in @mode. This function needs to be 408 * called when ever a mode swap is required. 409 * 410 * Setting the slave mode does not have an effect before a slave device is 411 * registered. So before the slave device is registered, the controller is kept 412 * in master mode regardless of @mode. 413 * 414 * The controller must be disabled before this function is called. 415 */ 416 void i2c_dw_set_mode(struct dw_i2c_dev *dev, int mode) 417 { 418 if (mode == DW_IC_SLAVE && !dev->slave) 419 mode = DW_IC_MASTER; 420 if (dev->mode == mode) 421 return; 422 423 i2c_dw_configure_mode(dev, mode); 424 dev->mode = mode; 425 } 426 427 /** 428 * i2c_dw_init() - Initialize the DesignWare I2C hardware 429 * @dev: device private data 430 * 431 * This functions configures and enables the DesigWare I2C hardware. 432 * 433 * Return: 0 on success, or negative errno otherwise. 434 */ 435 int i2c_dw_init(struct dw_i2c_dev *dev) 436 { 437 int ret; 438 439 ret = i2c_dw_acquire_lock(dev); 440 if (ret) 441 return ret; 442 443 /* Disable the adapter */ 444 __i2c_dw_disable(dev); 445 446 /* 447 * Mask SMBus interrupts to block storms from broken 448 * firmware that leaves IC_SMBUS=1; the handler never 449 * services them. 450 */ 451 regmap_write(dev->map, DW_IC_SMBUS_INTR_MASK, 0); 452 453 i2c_dw_write_timings(dev); 454 455 /* Write SDA hold time if supported */ 456 if (dev->sda_hold_time) 457 regmap_write(dev->map, DW_IC_SDA_HOLD, dev->sda_hold_time); 458 459 i2c_dw_configure_mode(dev, dev->mode); 460 461 i2c_dw_release_lock(dev); 462 463 return 0; 464 } 465 EXPORT_SYMBOL_GPL(i2c_dw_init); 466 467 static void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev) 468 { 469 u32 acpi_speed = i2c_dw_acpi_round_bus_speed(dev->dev); 470 struct i2c_timings *t = &dev->timings; 471 472 /* 473 * Find bus speed from the "clock-frequency" device property, ACPI 474 * or by using fast mode if neither is set. 475 */ 476 if (acpi_speed && t->bus_freq_hz) 477 t->bus_freq_hz = min(t->bus_freq_hz, acpi_speed); 478 else if (acpi_speed || t->bus_freq_hz) 479 t->bus_freq_hz = max(t->bus_freq_hz, acpi_speed); 480 else 481 t->bus_freq_hz = I2C_MAX_FAST_MODE_FREQ; 482 } 483 484 int i2c_dw_fw_parse_and_configure(struct dw_i2c_dev *dev) 485 { 486 struct i2c_timings *t = &dev->timings; 487 struct device *device = dev->dev; 488 struct fwnode_handle *fwnode = dev_fwnode(device); 489 490 i2c_parse_fw_timings(device, t, false); 491 492 if (device_property_read_u32(device, "snps,bus-capacitance-pf", &dev->bus_capacitance_pF)) 493 dev->bus_capacitance_pF = DW_IC_DEFAULT_BUS_CAPACITANCE_pF; 494 495 dev->clk_freq_optimized = device_property_read_bool(device, "snps,clk-freq-optimized"); 496 497 /* Mobileye controllers do not hold the clock on empty FIFO */ 498 if (device_is_compatible(device, "mobileye,eyeq6lplus-i2c")) 499 dev->emptyfifo_hold_master = false; 500 else 501 dev->emptyfifo_hold_master = true; 502 503 i2c_dw_adjust_bus_speed(dev); 504 505 if (is_of_node(fwnode)) 506 i2c_dw_of_configure(device); 507 else if (is_acpi_node(fwnode)) 508 i2c_dw_acpi_configure(device); 509 510 return i2c_dw_validate_speed(dev); 511 } 512 EXPORT_SYMBOL_GPL(i2c_dw_fw_parse_and_configure); 513 514 static u32 i2c_dw_read_scl_reg(struct dw_i2c_dev *dev, u32 reg) 515 { 516 u32 val; 517 int ret; 518 519 ret = i2c_dw_acquire_lock(dev); 520 if (ret) 521 return 0; 522 523 ret = regmap_read(dev->map, reg, &val); 524 i2c_dw_release_lock(dev); 525 526 return ret ? 0 : val; 527 } 528 529 u32 i2c_dw_scl_hcnt(struct dw_i2c_dev *dev, unsigned int reg, u32 ic_clk, 530 u32 tSYMBOL, u32 tf, int offset) 531 { 532 if (!ic_clk) 533 return i2c_dw_read_scl_reg(dev, reg); 534 535 /* 536 * Conditional expression: 537 * 538 * IC_[FS]S_SCL_HCNT + 3 >= IC_CLK * (tHD;STA + tf) 539 * 540 * This is just experimental rule; the tHD;STA period turned 541 * out to be proportinal to (_HCNT + 3). With this setting, 542 * we could meet both tHIGH and tHD;STA timing specs. 543 * 544 * If unsure, you'd better to take this alternative. 545 * 546 * The reason why we need to take into account "tf" here, 547 * is the same as described in i2c_dw_scl_lcnt(). 548 */ 549 return DIV_ROUND_CLOSEST_ULL((u64)ic_clk * (tSYMBOL + tf), MICRO) - 3 + offset; 550 } 551 552 u32 i2c_dw_scl_lcnt(struct dw_i2c_dev *dev, unsigned int reg, u32 ic_clk, 553 u32 tLOW, u32 tf, int offset) 554 { 555 if (!ic_clk) 556 return i2c_dw_read_scl_reg(dev, reg); 557 558 /* 559 * Conditional expression: 560 * 561 * IC_[FS]S_SCL_LCNT + 1 >= IC_CLK * (tLOW + tf) 562 * 563 * DW I2C core starts counting the SCL CNTs for the LOW period 564 * of the SCL clock (tLOW) as soon as it pulls the SCL line. 565 * In order to meet the tLOW timing spec, we need to take into 566 * account the fall time of SCL signal (tf). Default tf value 567 * should be 0.3 us, for safety. 568 */ 569 return DIV_ROUND_CLOSEST_ULL((u64)ic_clk * (tLOW + tf), MICRO) - 1 + offset; 570 } 571 572 static int i2c_dw_set_sda_hold(struct dw_i2c_dev *dev) 573 { 574 unsigned int reg; 575 int ret; 576 577 ret = i2c_dw_acquire_lock(dev); 578 if (ret) 579 return ret; 580 581 /* Configure SDA Hold Time if required */ 582 ret = regmap_read(dev->map, DW_IC_COMP_VERSION, ®); 583 if (ret) 584 goto err_release_lock; 585 586 if (reg >= DW_IC_SDA_HOLD_MIN_VERS) { 587 if (!dev->sda_hold_time) { 588 /* Keep previous hold time setting if no one set it */ 589 ret = regmap_read(dev->map, DW_IC_SDA_HOLD, 590 &dev->sda_hold_time); 591 if (ret) 592 goto err_release_lock; 593 } 594 595 /* 596 * Workaround for avoiding TX arbitration lost in case I2C 597 * slave pulls SDA down "too quickly" after falling edge of 598 * SCL by enabling non-zero SDA RX hold. Specification says it 599 * extends incoming SDA low to high transition while SCL is 600 * high but it appears to help also above issue. 601 */ 602 if (!(dev->sda_hold_time & DW_IC_SDA_HOLD_RX_MASK)) 603 dev->sda_hold_time |= 1 << DW_IC_SDA_HOLD_RX_SHIFT; 604 605 dev_dbg(dev->dev, "SDA Hold Time TX:RX = %d:%d\n", 606 dev->sda_hold_time & ~(u32)DW_IC_SDA_HOLD_RX_MASK, 607 dev->sda_hold_time >> DW_IC_SDA_HOLD_RX_SHIFT); 608 } else if (dev->set_sda_hold_time) { 609 dev->set_sda_hold_time(dev); 610 } else if (dev->sda_hold_time) { 611 dev_warn(dev->dev, 612 "Hardware too old to adjust SDA hold time.\n"); 613 dev->sda_hold_time = 0; 614 } 615 616 err_release_lock: 617 i2c_dw_release_lock(dev); 618 619 return ret; 620 } 621 622 void __i2c_dw_disable(struct dw_i2c_dev *dev) 623 { 624 struct i2c_timings *t = &dev->timings; 625 unsigned int raw_intr_stats, ic_stats; 626 unsigned int enable; 627 int timeout = 100; 628 bool abort_needed; 629 unsigned int status; 630 int ret; 631 632 regmap_read(dev->map, DW_IC_RAW_INTR_STAT, &raw_intr_stats); 633 regmap_read(dev->map, DW_IC_STATUS, &ic_stats); 634 regmap_read(dev->map, DW_IC_ENABLE, &enable); 635 636 abort_needed = (raw_intr_stats & DW_IC_INTR_MST_ON_HOLD) || 637 (ic_stats & DW_IC_STATUS_MASTER_HOLD_TX_FIFO_EMPTY); 638 639 /* 640 * If we are in target mode and there is activity, we should also 641 * trigger an abort to clear the internal state machines. 642 */ 643 if (dev->mode == DW_IC_SLAVE && (ic_stats & DW_IC_STATUS_SLAVE_ACTIVITY)) 644 abort_needed = true; 645 646 if (abort_needed) { 647 if (!(enable & DW_IC_ENABLE_ENABLE)) { 648 regmap_write(dev->map, DW_IC_ENABLE, DW_IC_ENABLE_ENABLE); 649 /* 650 * Wait 10 times the signaling period of the highest I2C 651 * transfer supported by the driver (for 400KHz this is 652 * 25us) to ensure the I2C ENABLE bit is already set 653 * as described in the DesignWare I2C databook. 654 */ 655 fsleep(DIV_ROUND_CLOSEST_ULL(10 * MICRO, t->bus_freq_hz)); 656 /* Set ENABLE bit before setting ABORT */ 657 enable |= DW_IC_ENABLE_ENABLE; 658 } 659 660 regmap_write(dev->map, DW_IC_ENABLE, enable | DW_IC_ENABLE_ABORT); 661 ret = regmap_read_poll_timeout(dev->map, DW_IC_ENABLE, enable, 662 !(enable & DW_IC_ENABLE_ABORT), 663 DW_IC_ABORT_TIMEOUT_US, 664 10 * DW_IC_ABORT_TIMEOUT_US); 665 if (ret) 666 dev_err(dev->dev, "timeout while trying to abort current transfer\n"); 667 } 668 669 do { 670 __i2c_dw_disable_nowait(dev); 671 /* 672 * The enable status register may be unimplemented, but 673 * in that case this test reads zero and exits the loop. 674 */ 675 regmap_read(dev->map, DW_IC_ENABLE_STATUS, &status); 676 if (!(status & 1)) 677 return; 678 679 /* 680 * Wait 10 times the signaling period of the highest I2C 681 * transfer supported by the driver (for 400kHz this is 682 * 25us) as described in the DesignWare I2C databook. 683 */ 684 usleep_range(25, 250); 685 } while (timeout--); 686 687 dev_warn(dev->dev, "timeout in disabling adapter\n"); 688 } 689 690 u32 i2c_dw_clk_rate(struct dw_i2c_dev *dev) 691 { 692 /* 693 * Clock is not necessary if we got LCNT/HCNT values directly from 694 * the platform code. 695 */ 696 if (!dev->get_clk_rate_khz) { 697 dev_dbg_once(dev->dev, "Callback get_clk_rate_khz() is not defined\n"); 698 return 0; 699 } 700 return dev->get_clk_rate_khz(dev); 701 } 702 703 int i2c_dw_prepare_clk(struct dw_i2c_dev *dev, bool prepare) 704 { 705 int ret; 706 707 if (prepare) { 708 /* Optional interface clock */ 709 ret = clk_prepare_enable(dev->pclk); 710 if (ret) 711 return ret; 712 713 ret = clk_prepare_enable(dev->clk); 714 if (ret) 715 clk_disable_unprepare(dev->pclk); 716 717 return ret; 718 } 719 720 clk_disable_unprepare(dev->clk); 721 clk_disable_unprepare(dev->pclk); 722 723 return 0; 724 } 725 EXPORT_SYMBOL_GPL(i2c_dw_prepare_clk); 726 727 int i2c_dw_acquire_lock(struct dw_i2c_dev *dev) 728 { 729 int ret; 730 731 if (!dev->acquire_lock) 732 return 0; 733 734 ret = dev->acquire_lock(); 735 if (!ret) 736 return 0; 737 738 dev_err(dev->dev, "couldn't acquire bus ownership\n"); 739 740 return ret; 741 } 742 743 void i2c_dw_release_lock(struct dw_i2c_dev *dev) 744 { 745 if (dev->release_lock) 746 dev->release_lock(); 747 } 748 749 /* 750 * Waiting for bus not busy 751 */ 752 int i2c_dw_wait_bus_not_busy(struct dw_i2c_dev *dev) 753 { 754 unsigned int status; 755 int ret; 756 757 ret = regmap_read_poll_timeout(dev->map, DW_IC_STATUS, status, 758 !(status & DW_IC_STATUS_ACTIVITY), 759 DW_IC_BUSY_POLL_TIMEOUT_US, 760 20 * DW_IC_BUSY_POLL_TIMEOUT_US); 761 if (ret) { 762 dev_warn(dev->dev, "timeout waiting for bus ready\n"); 763 764 i2c_recover_bus(&dev->adapter); 765 766 regmap_read(dev->map, DW_IC_STATUS, &status); 767 if (!(status & DW_IC_STATUS_ACTIVITY)) 768 ret = 0; 769 } 770 771 return ret; 772 } 773 774 int i2c_dw_handle_tx_abort(struct dw_i2c_dev *dev) 775 { 776 unsigned long abort_source = dev->abort_source; 777 int i; 778 779 if (abort_source & DW_IC_TX_ABRT_NOACK) { 780 for_each_set_bit(i, &abort_source, ARRAY_SIZE(abort_sources)) 781 dev_dbg(dev->dev, 782 "%s: %s\n", __func__, abort_sources[i]); 783 return -EREMOTEIO; 784 } 785 786 for_each_set_bit(i, &abort_source, ARRAY_SIZE(abort_sources)) 787 dev_err(dev->dev, "%s: %s\n", __func__, abort_sources[i]); 788 789 if (abort_source & DW_IC_TX_ARB_LOST) 790 return -EAGAIN; 791 if (abort_source & DW_IC_TX_ABRT_GCALL_READ) 792 return -EINVAL; /* wrong msgs[] data */ 793 794 return -EIO; 795 } 796 797 static int i2c_dw_set_fifo_size(struct dw_i2c_dev *dev) 798 { 799 u32 tx_fifo_depth, rx_fifo_depth; 800 unsigned int param; 801 int ret; 802 803 /* DW_IC_COMP_PARAM_1 not implement for IP issue */ 804 if ((dev->flags & MODEL_MASK) == MODEL_WANGXUN_SP) { 805 dev->tx_fifo_depth = TXGBE_TX_FIFO_DEPTH; 806 dev->rx_fifo_depth = TXGBE_RX_FIFO_DEPTH; 807 808 return 0; 809 } 810 811 /* 812 * Try to detect the FIFO depth if not set by interface driver, 813 * the depth could be from 2 to 256 from HW spec. 814 */ 815 ret = i2c_dw_acquire_lock(dev); 816 if (ret) 817 return ret; 818 819 ret = regmap_read(dev->map, DW_IC_COMP_PARAM_1, ¶m); 820 i2c_dw_release_lock(dev); 821 if (ret) 822 return ret; 823 824 tx_fifo_depth = FIELD_GET(DW_IC_FIFO_TX_FIELD, param) + 1; 825 rx_fifo_depth = FIELD_GET(DW_IC_FIFO_RX_FIELD, param) + 1; 826 if (!dev->tx_fifo_depth) { 827 dev->tx_fifo_depth = tx_fifo_depth; 828 dev->rx_fifo_depth = rx_fifo_depth; 829 } else if (tx_fifo_depth >= DW_IC_FIFO_MIN_DEPTH) { 830 dev->tx_fifo_depth = min_t(u32, dev->tx_fifo_depth, 831 tx_fifo_depth); 832 dev->rx_fifo_depth = min_t(u32, dev->rx_fifo_depth, 833 rx_fifo_depth); 834 } 835 836 return 0; 837 } 838 839 u32 i2c_dw_func(struct i2c_adapter *adap) 840 { 841 struct dw_i2c_dev *dev = i2c_get_adapdata(adap); 842 843 return dev->functionality; 844 } 845 846 void i2c_dw_disable(struct dw_i2c_dev *dev) 847 { 848 unsigned int dummy; 849 int ret; 850 851 ret = i2c_dw_acquire_lock(dev); 852 if (ret) 853 return; 854 855 /* Disable controller */ 856 __i2c_dw_disable(dev); 857 858 /* Disable all interrupts */ 859 __i2c_dw_write_intr_mask(dev, 0); 860 regmap_read(dev->map, DW_IC_CLR_INTR, &dummy); 861 862 i2c_dw_release_lock(dev); 863 } 864 EXPORT_SYMBOL_GPL(i2c_dw_disable); 865 866 static irqreturn_t i2c_dw_isr(int this_irq, void *dev_id) 867 { 868 struct dw_i2c_dev *dev = dev_id; 869 870 if (dev->mode == DW_IC_SLAVE) 871 return i2c_dw_isr_slave(dev); 872 873 return i2c_dw_isr_master(dev); 874 } 875 876 static const struct i2c_algorithm i2c_dw_algo = { 877 .xfer = i2c_dw_xfer, 878 .functionality = i2c_dw_func, 879 #if IS_ENABLED(CONFIG_I2C_SLAVE) 880 .reg_slave = i2c_dw_reg_slave, 881 .unreg_slave = i2c_dw_unreg_slave, 882 #endif 883 }; 884 885 static const struct i2c_adapter_quirks i2c_dw_quirks = { 886 .flags = I2C_AQ_NO_ZERO_LEN, 887 }; 888 889 int i2c_dw_probe(struct dw_i2c_dev *dev) 890 { 891 struct i2c_adapter *adap = &dev->adapter; 892 unsigned long irq_flags; 893 int ret; 894 895 device_set_node(&dev->adapter.dev, dev_fwnode(dev->dev)); 896 897 ret = i2c_dw_init_regmap(dev); 898 if (ret) 899 return ret; 900 901 ret = i2c_dw_set_sda_hold(dev); 902 if (ret) 903 return ret; 904 905 ret = i2c_dw_set_fifo_size(dev); 906 if (ret) 907 return ret; 908 909 ret = i2c_dw_probe_master(dev); 910 if (ret) 911 return ret; 912 913 ret = i2c_dw_init(dev); 914 if (ret) 915 return ret; 916 917 if (!adap->name[0]) 918 strscpy(adap->name, "Synopsys DesignWare I2C adapter"); 919 920 adap->retries = 3; 921 adap->algo = &i2c_dw_algo; 922 adap->quirks = &i2c_dw_quirks; 923 adap->dev.parent = dev->dev; 924 i2c_set_adapdata(adap, dev); 925 926 /* 927 * REVISIT: The mode check may not be necessary. 928 * For now keeping the flags as they were originally. 929 */ 930 if (dev->mode == DW_IC_SLAVE) 931 irq_flags = IRQF_SHARED; 932 else if (dev->flags & ACCESS_NO_IRQ_SUSPEND) 933 irq_flags = IRQF_NO_SUSPEND; 934 else 935 irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND; 936 937 /* 938 * The first writing to TX FIFO buffer causes transmission start. 939 * If IC_EMPTYFIFO_HOLD_MASTER_EN is not set, when TX FIFO gets 940 * empty, I2C controller finishes the transaction. If writing to 941 * FIFO is interrupted, FIFO can get empty and the transaction will 942 * be finished prematurely. FIFO buffer is filled in IRQ handler, 943 * but in PREEMPT_RT kernel IRQ handler by default is executed 944 * in thread that can be preempted with another higher priority 945 * thread or an interrupt. So, IRQF_NO_THREAD flag is required in 946 * order to prevent any preemption when filling the FIFO. 947 */ 948 if (!dev->emptyfifo_hold_master) 949 irq_flags |= IRQF_NO_THREAD; 950 951 ret = i2c_dw_acquire_lock(dev); 952 if (ret) 953 return ret; 954 955 __i2c_dw_write_intr_mask(dev, 0); 956 i2c_dw_release_lock(dev); 957 958 if (!(dev->flags & ACCESS_POLLING)) { 959 ret = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr, 960 irq_flags, dev_name(dev->dev), dev); 961 if (ret) 962 return ret; 963 } 964 965 /* 966 * Increment PM usage count during adapter registration in order to 967 * avoid possible spurious runtime suspend when adapter device is 968 * registered to the device core and immediate resume in case bus has 969 * registered I2C slaves that do I2C transfers in their probe. 970 */ 971 PM_RUNTIME_ACQUIRE(dev->dev, pm); 972 ret = PM_RUNTIME_ACQUIRE_ERR(&pm); 973 if (ret) 974 return ret; 975 976 return i2c_add_numbered_adapter(adap); 977 } 978 EXPORT_SYMBOL_GPL(i2c_dw_probe); 979 980 static int i2c_dw_prepare(struct device *device) 981 { 982 /* 983 * If the ACPI companion device object is present for this device, 984 * it may be accessed during suspend and resume of other devices via 985 * I2C operation regions, so tell the PM core and middle layers to 986 * avoid skipping system suspend/resume callbacks for it in that case. 987 */ 988 return !has_acpi_companion(device); 989 } 990 991 static int i2c_dw_runtime_suspend(struct device *device) 992 { 993 struct dw_i2c_dev *dev = dev_get_drvdata(device); 994 995 if (dev->shared_with_punit) 996 return 0; 997 998 i2c_dw_disable(dev); 999 i2c_dw_prepare_clk(dev, false); 1000 1001 return 0; 1002 } 1003 1004 static int i2c_dw_suspend(struct device *device) 1005 { 1006 struct dw_i2c_dev *dev = dev_get_drvdata(device); 1007 1008 i2c_mark_adapter_suspended(&dev->adapter); 1009 1010 return i2c_dw_runtime_suspend(device); 1011 } 1012 1013 static int i2c_dw_runtime_resume(struct device *device) 1014 { 1015 struct dw_i2c_dev *dev = dev_get_drvdata(device); 1016 1017 if (!dev->shared_with_punit) 1018 i2c_dw_prepare_clk(dev, true); 1019 1020 i2c_dw_init(dev); 1021 1022 return 0; 1023 } 1024 1025 static int i2c_dw_resume(struct device *device) 1026 { 1027 struct dw_i2c_dev *dev = dev_get_drvdata(device); 1028 1029 i2c_dw_runtime_resume(device); 1030 i2c_mark_adapter_resumed(&dev->adapter); 1031 1032 return 0; 1033 } 1034 1035 EXPORT_GPL_DEV_PM_OPS(i2c_dw_dev_pm_ops) = { 1036 .prepare = pm_sleep_ptr(i2c_dw_prepare), 1037 LATE_SYSTEM_SLEEP_PM_OPS(i2c_dw_suspend, i2c_dw_resume) 1038 RUNTIME_PM_OPS(i2c_dw_runtime_suspend, i2c_dw_runtime_resume, NULL) 1039 }; 1040 1041 void i2c_dw_shutdown(struct dw_i2c_dev *dev) 1042 { 1043 unsigned int con; 1044 1045 /* 1046 * We only need to handle shutdown for target mode to ensure 1047 * we NACK any incoming controller requests. Controller mode cleanup 1048 * is handled after each transfer in i2c_dw_xfer(). 1049 */ 1050 if (dev->mode != DW_IC_SLAVE) 1051 return; 1052 1053 /* 1054 * To quickly NACK the controller during shutdown, we set the target 1055 * disable bit while the controller is still enabled. 1056 */ 1057 regmap_read(dev->map, DW_IC_CON, &con); 1058 con |= DW_IC_CON_SLAVE_DISABLE; 1059 regmap_write(dev->map, DW_IC_CON, con); 1060 1061 i2c_dw_disable(dev); 1062 } 1063 EXPORT_SYMBOL_GPL(i2c_dw_shutdown); 1064 1065 MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter core"); 1066 MODULE_LICENSE("GPL"); 1067