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