i2c-designware-master.c 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Synopsys DesignWare I2C adapter driver (master only).
  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. #define DEFAULT_SYMBOL_NAMESPACE "I2C_DW"
  12. #include <linux/delay.h>
  13. #include <linux/err.h>
  14. #include <linux/errno.h>
  15. #include <linux/export.h>
  16. #include <linux/gpio/consumer.h>
  17. #include <linux/i2c.h>
  18. #include <linux/interrupt.h>
  19. #include <linux/io.h>
  20. #include <linux/module.h>
  21. #include <linux/pinctrl/consumer.h>
  22. #include <linux/pm_runtime.h>
  23. #include <linux/regmap.h>
  24. #include <linux/reset.h>
  25. #include "i2c-designware-core.h"
  26. #define AMD_TIMEOUT_MIN_US 25
  27. #define AMD_TIMEOUT_MAX_US 250
  28. #define AMD_MASTERCFG_MASK GENMASK(15, 0)
  29. static void i2c_dw_configure_fifo_master(struct dw_i2c_dev *dev)
  30. {
  31. /* Configure Tx/Rx FIFO threshold levels */
  32. regmap_write(dev->map, DW_IC_TX_TL, dev->tx_fifo_depth / 2);
  33. regmap_write(dev->map, DW_IC_RX_TL, 0);
  34. /* Configure the I2C master */
  35. regmap_write(dev->map, DW_IC_CON, dev->master_cfg);
  36. }
  37. static int i2c_dw_set_timings_master(struct dw_i2c_dev *dev)
  38. {
  39. unsigned int comp_param1;
  40. u32 sda_falling_time, scl_falling_time;
  41. struct i2c_timings *t = &dev->timings;
  42. const char *fp_str = "";
  43. u32 ic_clk;
  44. int ret;
  45. ret = i2c_dw_acquire_lock(dev);
  46. if (ret)
  47. return ret;
  48. ret = regmap_read(dev->map, DW_IC_COMP_PARAM_1, &comp_param1);
  49. i2c_dw_release_lock(dev);
  50. if (ret)
  51. return ret;
  52. /* Set standard and fast speed dividers for high/low periods */
  53. sda_falling_time = t->sda_fall_ns ?: 300; /* ns */
  54. scl_falling_time = t->scl_fall_ns ?: 300; /* ns */
  55. /* Calculate SCL timing parameters for standard mode if not set */
  56. if (!dev->ss_hcnt || !dev->ss_lcnt) {
  57. ic_clk = i2c_dw_clk_rate(dev);
  58. dev->ss_hcnt =
  59. i2c_dw_scl_hcnt(dev,
  60. DW_IC_SS_SCL_HCNT,
  61. ic_clk,
  62. 4000, /* tHD;STA = tHIGH = 4.0 us */
  63. sda_falling_time,
  64. 0, /* 0: DW default, 1: Ideal */
  65. 0); /* No offset */
  66. dev->ss_lcnt =
  67. i2c_dw_scl_lcnt(dev,
  68. DW_IC_SS_SCL_LCNT,
  69. ic_clk,
  70. 4700, /* tLOW = 4.7 us */
  71. scl_falling_time,
  72. 0); /* No offset */
  73. }
  74. dev_dbg(dev->dev, "Standard Mode HCNT:LCNT = %d:%d\n",
  75. dev->ss_hcnt, dev->ss_lcnt);
  76. /*
  77. * Set SCL timing parameters for fast mode or fast mode plus. Only
  78. * difference is the timing parameter values since the registers are
  79. * the same.
  80. */
  81. if (t->bus_freq_hz == I2C_MAX_FAST_MODE_PLUS_FREQ) {
  82. /*
  83. * Check are Fast Mode Plus parameters available. Calculate
  84. * SCL timing parameters for Fast Mode Plus if not set.
  85. */
  86. if (dev->fp_hcnt && dev->fp_lcnt) {
  87. dev->fs_hcnt = dev->fp_hcnt;
  88. dev->fs_lcnt = dev->fp_lcnt;
  89. } else {
  90. ic_clk = i2c_dw_clk_rate(dev);
  91. dev->fs_hcnt =
  92. i2c_dw_scl_hcnt(dev,
  93. DW_IC_FS_SCL_HCNT,
  94. ic_clk,
  95. 260, /* tHIGH = 260 ns */
  96. sda_falling_time,
  97. 0, /* DW default */
  98. 0); /* No offset */
  99. dev->fs_lcnt =
  100. i2c_dw_scl_lcnt(dev,
  101. DW_IC_FS_SCL_LCNT,
  102. ic_clk,
  103. 500, /* tLOW = 500 ns */
  104. scl_falling_time,
  105. 0); /* No offset */
  106. }
  107. fp_str = " Plus";
  108. }
  109. /*
  110. * Calculate SCL timing parameters for fast mode if not set. They are
  111. * needed also in high speed mode.
  112. */
  113. if (!dev->fs_hcnt || !dev->fs_lcnt) {
  114. ic_clk = i2c_dw_clk_rate(dev);
  115. dev->fs_hcnt =
  116. i2c_dw_scl_hcnt(dev,
  117. DW_IC_FS_SCL_HCNT,
  118. ic_clk,
  119. 600, /* tHD;STA = tHIGH = 0.6 us */
  120. sda_falling_time,
  121. 0, /* 0: DW default, 1: Ideal */
  122. 0); /* No offset */
  123. dev->fs_lcnt =
  124. i2c_dw_scl_lcnt(dev,
  125. DW_IC_FS_SCL_LCNT,
  126. ic_clk,
  127. 1300, /* tLOW = 1.3 us */
  128. scl_falling_time,
  129. 0); /* No offset */
  130. }
  131. dev_dbg(dev->dev, "Fast Mode%s HCNT:LCNT = %d:%d\n",
  132. fp_str, dev->fs_hcnt, dev->fs_lcnt);
  133. /* Check is high speed possible and fall back to fast mode if not */
  134. if ((dev->master_cfg & DW_IC_CON_SPEED_MASK) ==
  135. DW_IC_CON_SPEED_HIGH) {
  136. if ((comp_param1 & DW_IC_COMP_PARAM_1_SPEED_MODE_MASK)
  137. != DW_IC_COMP_PARAM_1_SPEED_MODE_HIGH) {
  138. dev_err(dev->dev, "High Speed not supported!\n");
  139. t->bus_freq_hz = I2C_MAX_FAST_MODE_FREQ;
  140. dev->master_cfg &= ~DW_IC_CON_SPEED_MASK;
  141. dev->master_cfg |= DW_IC_CON_SPEED_FAST;
  142. dev->hs_hcnt = 0;
  143. dev->hs_lcnt = 0;
  144. } else if (!dev->hs_hcnt || !dev->hs_lcnt) {
  145. ic_clk = i2c_dw_clk_rate(dev);
  146. dev->hs_hcnt =
  147. i2c_dw_scl_hcnt(dev,
  148. DW_IC_HS_SCL_HCNT,
  149. ic_clk,
  150. 160, /* tHIGH = 160 ns */
  151. sda_falling_time,
  152. 0, /* DW default */
  153. 0); /* No offset */
  154. dev->hs_lcnt =
  155. i2c_dw_scl_lcnt(dev,
  156. DW_IC_HS_SCL_LCNT,
  157. ic_clk,
  158. 320, /* tLOW = 320 ns */
  159. scl_falling_time,
  160. 0); /* No offset */
  161. }
  162. dev_dbg(dev->dev, "High Speed Mode HCNT:LCNT = %d:%d\n",
  163. dev->hs_hcnt, dev->hs_lcnt);
  164. }
  165. ret = i2c_dw_set_sda_hold(dev);
  166. if (ret)
  167. return ret;
  168. dev_dbg(dev->dev, "Bus speed: %s\n", i2c_freq_mode_string(t->bus_freq_hz));
  169. return 0;
  170. }
  171. /**
  172. * i2c_dw_init_master() - Initialize the designware I2C master hardware
  173. * @dev: device private data
  174. *
  175. * This functions configures and enables the I2C master.
  176. * This function is called during I2C init function, and in case of timeout at
  177. * run time.
  178. */
  179. static int i2c_dw_init_master(struct dw_i2c_dev *dev)
  180. {
  181. int ret;
  182. ret = i2c_dw_acquire_lock(dev);
  183. if (ret)
  184. return ret;
  185. /* Disable the adapter */
  186. __i2c_dw_disable(dev);
  187. /* Write standard speed timing parameters */
  188. regmap_write(dev->map, DW_IC_SS_SCL_HCNT, dev->ss_hcnt);
  189. regmap_write(dev->map, DW_IC_SS_SCL_LCNT, dev->ss_lcnt);
  190. /* Write fast mode/fast mode plus timing parameters */
  191. regmap_write(dev->map, DW_IC_FS_SCL_HCNT, dev->fs_hcnt);
  192. regmap_write(dev->map, DW_IC_FS_SCL_LCNT, dev->fs_lcnt);
  193. /* Write high speed timing parameters if supported */
  194. if (dev->hs_hcnt && dev->hs_lcnt) {
  195. regmap_write(dev->map, DW_IC_HS_SCL_HCNT, dev->hs_hcnt);
  196. regmap_write(dev->map, DW_IC_HS_SCL_LCNT, dev->hs_lcnt);
  197. }
  198. /* Write SDA hold time if supported */
  199. if (dev->sda_hold_time)
  200. regmap_write(dev->map, DW_IC_SDA_HOLD, dev->sda_hold_time);
  201. i2c_dw_configure_fifo_master(dev);
  202. i2c_dw_release_lock(dev);
  203. return 0;
  204. }
  205. static void i2c_dw_xfer_init(struct dw_i2c_dev *dev)
  206. {
  207. struct i2c_msg *msgs = dev->msgs;
  208. u32 ic_con = 0, ic_tar = 0;
  209. unsigned int dummy;
  210. /* Disable the adapter */
  211. __i2c_dw_disable(dev);
  212. /* If the slave address is ten bit address, enable 10BITADDR */
  213. if (msgs[dev->msg_write_idx].flags & I2C_M_TEN) {
  214. ic_con = DW_IC_CON_10BITADDR_MASTER;
  215. /*
  216. * If I2C_DYNAMIC_TAR_UPDATE is set, the 10-bit addressing
  217. * mode has to be enabled via bit 12 of IC_TAR register.
  218. * We set it always as I2C_DYNAMIC_TAR_UPDATE can't be
  219. * detected from registers.
  220. */
  221. ic_tar = DW_IC_TAR_10BITADDR_MASTER;
  222. }
  223. regmap_update_bits(dev->map, DW_IC_CON, DW_IC_CON_10BITADDR_MASTER,
  224. ic_con);
  225. /*
  226. * Set the slave (target) address and enable 10-bit addressing mode
  227. * if applicable.
  228. */
  229. regmap_write(dev->map, DW_IC_TAR,
  230. msgs[dev->msg_write_idx].addr | ic_tar);
  231. /* Enforce disabled interrupts (due to HW issues) */
  232. __i2c_dw_write_intr_mask(dev, 0);
  233. /* Enable the adapter */
  234. __i2c_dw_enable(dev);
  235. /* Dummy read to avoid the register getting stuck on Bay Trail */
  236. regmap_read(dev->map, DW_IC_ENABLE_STATUS, &dummy);
  237. /* Clear and enable interrupts */
  238. regmap_read(dev->map, DW_IC_CLR_INTR, &dummy);
  239. __i2c_dw_write_intr_mask(dev, DW_IC_INTR_MASTER_MASK);
  240. }
  241. /*
  242. * This function waits for the controller to be idle before disabling I2C
  243. * When the controller is not in the IDLE state, the MST_ACTIVITY bit
  244. * (IC_STATUS[5]) is set.
  245. *
  246. * Values:
  247. * 0x1 (ACTIVE): Controller not idle
  248. * 0x0 (IDLE): Controller is idle
  249. *
  250. * The function is called after completing the current transfer.
  251. *
  252. * Returns:
  253. * False when the controller is in the IDLE state.
  254. * True when the controller is in the ACTIVE state.
  255. */
  256. static bool i2c_dw_is_controller_active(struct dw_i2c_dev *dev)
  257. {
  258. u32 status;
  259. regmap_read(dev->map, DW_IC_STATUS, &status);
  260. if (!(status & DW_IC_STATUS_MASTER_ACTIVITY))
  261. return false;
  262. return regmap_read_poll_timeout(dev->map, DW_IC_STATUS, status,
  263. !(status & DW_IC_STATUS_MASTER_ACTIVITY),
  264. 1100, 20000) != 0;
  265. }
  266. static int i2c_dw_check_stopbit(struct dw_i2c_dev *dev)
  267. {
  268. u32 val;
  269. int ret;
  270. ret = regmap_read_poll_timeout(dev->map, DW_IC_INTR_STAT, val,
  271. !(val & DW_IC_INTR_STOP_DET),
  272. 1100, 20000);
  273. if (ret)
  274. dev_err(dev->dev, "i2c timeout error %d\n", ret);
  275. return ret;
  276. }
  277. static int i2c_dw_status(struct dw_i2c_dev *dev)
  278. {
  279. int status;
  280. status = i2c_dw_wait_bus_not_busy(dev);
  281. if (status)
  282. return status;
  283. return i2c_dw_check_stopbit(dev);
  284. }
  285. /*
  286. * Initiate and continue master read/write transaction with polling
  287. * based transfer routine afterward write messages into the Tx buffer.
  288. */
  289. static int amd_i2c_dw_xfer_quirk(struct i2c_adapter *adap, struct i2c_msg *msgs, int num_msgs)
  290. {
  291. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  292. int msg_wrt_idx, msg_itr_lmt, buf_len, data_idx;
  293. int cmd = 0, status;
  294. u8 *tx_buf;
  295. unsigned int val;
  296. /*
  297. * In order to enable the interrupt for UCSI i.e. AMD NAVI GPU card,
  298. * it is mandatory to set the right value in specific register
  299. * (offset:0x474) as per the hardware IP specification.
  300. */
  301. regmap_write(dev->map, AMD_UCSI_INTR_REG, AMD_UCSI_INTR_EN);
  302. dev->msgs = msgs;
  303. dev->msgs_num = num_msgs;
  304. dev->msg_write_idx = 0;
  305. i2c_dw_xfer_init(dev);
  306. /* Initiate messages read/write transaction */
  307. for (msg_wrt_idx = 0; msg_wrt_idx < num_msgs; msg_wrt_idx++) {
  308. tx_buf = msgs[msg_wrt_idx].buf;
  309. buf_len = msgs[msg_wrt_idx].len;
  310. if (!(msgs[msg_wrt_idx].flags & I2C_M_RD))
  311. regmap_write(dev->map, DW_IC_TX_TL, buf_len - 1);
  312. /*
  313. * Initiate the i2c read/write transaction of buffer length,
  314. * and poll for bus busy status. For the last message transfer,
  315. * update the command with stopbit enable.
  316. */
  317. for (msg_itr_lmt = buf_len; msg_itr_lmt > 0; msg_itr_lmt--) {
  318. if (msg_wrt_idx == num_msgs - 1 && msg_itr_lmt == 1)
  319. cmd |= BIT(9);
  320. if (msgs[msg_wrt_idx].flags & I2C_M_RD) {
  321. /* Due to hardware bug, need to write the same command twice. */
  322. regmap_write(dev->map, DW_IC_DATA_CMD, 0x100);
  323. regmap_write(dev->map, DW_IC_DATA_CMD, 0x100 | cmd);
  324. if (cmd) {
  325. regmap_write(dev->map, DW_IC_TX_TL, 2 * (buf_len - 1));
  326. regmap_write(dev->map, DW_IC_RX_TL, 2 * (buf_len - 1));
  327. /*
  328. * Need to check the stop bit. However, it cannot be
  329. * detected from the registers so we check it always
  330. * when read/write the last byte.
  331. */
  332. status = i2c_dw_status(dev);
  333. if (status)
  334. return status;
  335. for (data_idx = 0; data_idx < buf_len; data_idx++) {
  336. regmap_read(dev->map, DW_IC_DATA_CMD, &val);
  337. tx_buf[data_idx] = val;
  338. }
  339. status = i2c_dw_check_stopbit(dev);
  340. if (status)
  341. return status;
  342. }
  343. } else {
  344. regmap_write(dev->map, DW_IC_DATA_CMD, *tx_buf++ | cmd);
  345. usleep_range(AMD_TIMEOUT_MIN_US, AMD_TIMEOUT_MAX_US);
  346. }
  347. }
  348. status = i2c_dw_check_stopbit(dev);
  349. if (status)
  350. return status;
  351. }
  352. return 0;
  353. }
  354. /*
  355. * Initiate (and continue) low level master read/write transaction.
  356. * This function is only called from i2c_dw_isr, and pumping i2c_msg
  357. * messages into the tx buffer. Even if the size of i2c_msg data is
  358. * longer than the size of the tx buffer, it handles everything.
  359. */
  360. static void
  361. i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
  362. {
  363. struct i2c_msg *msgs = dev->msgs;
  364. u32 intr_mask;
  365. int tx_limit, rx_limit;
  366. u32 addr = msgs[dev->msg_write_idx].addr;
  367. u32 buf_len = dev->tx_buf_len;
  368. u8 *buf = dev->tx_buf;
  369. bool need_restart = false;
  370. unsigned int flr;
  371. intr_mask = DW_IC_INTR_MASTER_MASK;
  372. for (; dev->msg_write_idx < dev->msgs_num; dev->msg_write_idx++) {
  373. u32 flags = msgs[dev->msg_write_idx].flags;
  374. /*
  375. * If target address has changed, we need to
  376. * reprogram the target address in the I2C
  377. * adapter when we are done with this transfer.
  378. */
  379. if (msgs[dev->msg_write_idx].addr != addr) {
  380. dev_err(dev->dev,
  381. "%s: invalid target address\n", __func__);
  382. dev->msg_err = -EINVAL;
  383. break;
  384. }
  385. if (!(dev->status & STATUS_WRITE_IN_PROGRESS)) {
  386. /* new i2c_msg */
  387. buf = msgs[dev->msg_write_idx].buf;
  388. buf_len = msgs[dev->msg_write_idx].len;
  389. /* If both IC_EMPTYFIFO_HOLD_MASTER_EN and
  390. * IC_RESTART_EN are set, we must manually
  391. * set restart bit between messages.
  392. */
  393. if ((dev->master_cfg & DW_IC_CON_RESTART_EN) &&
  394. (dev->msg_write_idx > 0))
  395. need_restart = true;
  396. }
  397. regmap_read(dev->map, DW_IC_TXFLR, &flr);
  398. tx_limit = dev->tx_fifo_depth - flr;
  399. regmap_read(dev->map, DW_IC_RXFLR, &flr);
  400. rx_limit = dev->rx_fifo_depth - flr;
  401. while (buf_len > 0 && tx_limit > 0 && rx_limit > 0) {
  402. u32 cmd = 0;
  403. /*
  404. * If IC_EMPTYFIFO_HOLD_MASTER_EN is set we must
  405. * manually set the stop bit. However, it cannot be
  406. * detected from the registers so we set it always
  407. * when writing/reading the last byte.
  408. */
  409. /*
  410. * i2c-core always sets the buffer length of
  411. * I2C_FUNC_SMBUS_BLOCK_DATA to 1. The length will
  412. * be adjusted when receiving the first byte.
  413. * Thus we can't stop the transaction here.
  414. */
  415. if (dev->msg_write_idx == dev->msgs_num - 1 &&
  416. buf_len == 1 && !(flags & I2C_M_RECV_LEN))
  417. cmd |= BIT(9);
  418. if (need_restart) {
  419. cmd |= BIT(10);
  420. need_restart = false;
  421. }
  422. if (msgs[dev->msg_write_idx].flags & I2C_M_RD) {
  423. /* Avoid rx buffer overrun */
  424. if (dev->rx_outstanding >= dev->rx_fifo_depth)
  425. break;
  426. regmap_write(dev->map, DW_IC_DATA_CMD,
  427. cmd | 0x100);
  428. rx_limit--;
  429. dev->rx_outstanding++;
  430. } else {
  431. regmap_write(dev->map, DW_IC_DATA_CMD,
  432. cmd | *buf++);
  433. }
  434. tx_limit--; buf_len--;
  435. }
  436. dev->tx_buf = buf;
  437. dev->tx_buf_len = buf_len;
  438. /*
  439. * Because we don't know the buffer length in the
  440. * I2C_FUNC_SMBUS_BLOCK_DATA case, we can't stop the
  441. * transaction here. Also disable the TX_EMPTY IRQ
  442. * while waiting for the data length byte to avoid the
  443. * bogus interrupts flood.
  444. */
  445. if (flags & I2C_M_RECV_LEN) {
  446. dev->status |= STATUS_WRITE_IN_PROGRESS;
  447. intr_mask &= ~DW_IC_INTR_TX_EMPTY;
  448. break;
  449. } else if (buf_len > 0) {
  450. /* more bytes to be written */
  451. dev->status |= STATUS_WRITE_IN_PROGRESS;
  452. break;
  453. } else
  454. dev->status &= ~STATUS_WRITE_IN_PROGRESS;
  455. }
  456. /*
  457. * If i2c_msg index search is completed, we don't need TX_EMPTY
  458. * interrupt any more.
  459. */
  460. if (dev->msg_write_idx == dev->msgs_num)
  461. intr_mask &= ~DW_IC_INTR_TX_EMPTY;
  462. if (dev->msg_err)
  463. intr_mask = 0;
  464. __i2c_dw_write_intr_mask(dev, intr_mask);
  465. }
  466. static u8
  467. i2c_dw_recv_len(struct dw_i2c_dev *dev, u8 len)
  468. {
  469. struct i2c_msg *msgs = dev->msgs;
  470. u32 flags = msgs[dev->msg_read_idx].flags;
  471. unsigned int intr_mask;
  472. /*
  473. * Adjust the buffer length and mask the flag
  474. * after receiving the first byte.
  475. */
  476. len += (flags & I2C_CLIENT_PEC) ? 2 : 1;
  477. dev->tx_buf_len = len - min_t(u8, len, dev->rx_outstanding);
  478. msgs[dev->msg_read_idx].len = len;
  479. msgs[dev->msg_read_idx].flags &= ~I2C_M_RECV_LEN;
  480. /*
  481. * Received buffer length, re-enable TX_EMPTY interrupt
  482. * to resume the SMBUS transaction.
  483. */
  484. __i2c_dw_read_intr_mask(dev, &intr_mask);
  485. intr_mask |= DW_IC_INTR_TX_EMPTY;
  486. __i2c_dw_write_intr_mask(dev, intr_mask);
  487. return len;
  488. }
  489. static void
  490. i2c_dw_read(struct dw_i2c_dev *dev)
  491. {
  492. struct i2c_msg *msgs = dev->msgs;
  493. unsigned int rx_valid;
  494. for (; dev->msg_read_idx < dev->msgs_num; dev->msg_read_idx++) {
  495. unsigned int tmp;
  496. u32 len;
  497. u8 *buf;
  498. if (!(msgs[dev->msg_read_idx].flags & I2C_M_RD))
  499. continue;
  500. if (!(dev->status & STATUS_READ_IN_PROGRESS)) {
  501. len = msgs[dev->msg_read_idx].len;
  502. buf = msgs[dev->msg_read_idx].buf;
  503. } else {
  504. len = dev->rx_buf_len;
  505. buf = dev->rx_buf;
  506. }
  507. regmap_read(dev->map, DW_IC_RXFLR, &rx_valid);
  508. for (; len > 0 && rx_valid > 0; len--, rx_valid--) {
  509. u32 flags = msgs[dev->msg_read_idx].flags;
  510. regmap_read(dev->map, DW_IC_DATA_CMD, &tmp);
  511. tmp &= DW_IC_DATA_CMD_DAT;
  512. /* Ensure length byte is a valid value */
  513. if (flags & I2C_M_RECV_LEN) {
  514. /*
  515. * if IC_EMPTYFIFO_HOLD_MASTER_EN is set, which cannot be
  516. * detected from the registers, the controller can be
  517. * disabled if the STOP bit is set. But it is only set
  518. * after receiving block data response length in
  519. * I2C_FUNC_SMBUS_BLOCK_DATA case. That needs to read
  520. * another byte with STOP bit set when the block data
  521. * response length is invalid to complete the transaction.
  522. */
  523. if (!tmp || tmp > I2C_SMBUS_BLOCK_MAX)
  524. tmp = 1;
  525. len = i2c_dw_recv_len(dev, tmp);
  526. }
  527. *buf++ = tmp;
  528. dev->rx_outstanding--;
  529. }
  530. if (len > 0) {
  531. dev->status |= STATUS_READ_IN_PROGRESS;
  532. dev->rx_buf_len = len;
  533. dev->rx_buf = buf;
  534. return;
  535. } else
  536. dev->status &= ~STATUS_READ_IN_PROGRESS;
  537. }
  538. }
  539. static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
  540. {
  541. unsigned int stat, dummy;
  542. /*
  543. * The IC_INTR_STAT register just indicates "enabled" interrupts.
  544. * The unmasked raw version of interrupt status bits is available
  545. * in the IC_RAW_INTR_STAT register.
  546. *
  547. * That is,
  548. * stat = readl(IC_INTR_STAT);
  549. * equals to,
  550. * stat = readl(IC_RAW_INTR_STAT) & readl(IC_INTR_MASK);
  551. *
  552. * The raw version might be useful for debugging purposes.
  553. */
  554. if (!(dev->flags & ACCESS_POLLING)) {
  555. regmap_read(dev->map, DW_IC_INTR_STAT, &stat);
  556. } else {
  557. regmap_read(dev->map, DW_IC_RAW_INTR_STAT, &stat);
  558. stat &= dev->sw_mask;
  559. }
  560. /*
  561. * Do not use the IC_CLR_INTR register to clear interrupts, or
  562. * you'll miss some interrupts, triggered during the period from
  563. * readl(IC_INTR_STAT) to readl(IC_CLR_INTR).
  564. *
  565. * Instead, use the separately-prepared IC_CLR_* registers.
  566. */
  567. if (stat & DW_IC_INTR_RX_UNDER)
  568. regmap_read(dev->map, DW_IC_CLR_RX_UNDER, &dummy);
  569. if (stat & DW_IC_INTR_RX_OVER)
  570. regmap_read(dev->map, DW_IC_CLR_RX_OVER, &dummy);
  571. if (stat & DW_IC_INTR_TX_OVER)
  572. regmap_read(dev->map, DW_IC_CLR_TX_OVER, &dummy);
  573. if (stat & DW_IC_INTR_RD_REQ)
  574. regmap_read(dev->map, DW_IC_CLR_RD_REQ, &dummy);
  575. if (stat & DW_IC_INTR_TX_ABRT) {
  576. /*
  577. * The IC_TX_ABRT_SOURCE register is cleared whenever
  578. * the IC_CLR_TX_ABRT is read. Preserve it beforehand.
  579. */
  580. regmap_read(dev->map, DW_IC_TX_ABRT_SOURCE, &dev->abort_source);
  581. regmap_read(dev->map, DW_IC_CLR_TX_ABRT, &dummy);
  582. }
  583. if (stat & DW_IC_INTR_RX_DONE)
  584. regmap_read(dev->map, DW_IC_CLR_RX_DONE, &dummy);
  585. if (stat & DW_IC_INTR_ACTIVITY)
  586. regmap_read(dev->map, DW_IC_CLR_ACTIVITY, &dummy);
  587. if ((stat & DW_IC_INTR_STOP_DET) &&
  588. ((dev->rx_outstanding == 0) || (stat & DW_IC_INTR_RX_FULL)))
  589. regmap_read(dev->map, DW_IC_CLR_STOP_DET, &dummy);
  590. if (stat & DW_IC_INTR_START_DET)
  591. regmap_read(dev->map, DW_IC_CLR_START_DET, &dummy);
  592. if (stat & DW_IC_INTR_GEN_CALL)
  593. regmap_read(dev->map, DW_IC_CLR_GEN_CALL, &dummy);
  594. return stat;
  595. }
  596. static void i2c_dw_process_transfer(struct dw_i2c_dev *dev, unsigned int stat)
  597. {
  598. if (stat & DW_IC_INTR_TX_ABRT) {
  599. dev->cmd_err |= DW_IC_ERR_TX_ABRT;
  600. dev->status &= ~STATUS_MASK;
  601. dev->rx_outstanding = 0;
  602. /*
  603. * Anytime TX_ABRT is set, the contents of the tx/rx
  604. * buffers are flushed. Make sure to skip them.
  605. */
  606. __i2c_dw_write_intr_mask(dev, 0);
  607. goto tx_aborted;
  608. }
  609. if (stat & DW_IC_INTR_RX_FULL)
  610. i2c_dw_read(dev);
  611. if (stat & DW_IC_INTR_TX_EMPTY)
  612. i2c_dw_xfer_msg(dev);
  613. /*
  614. * No need to modify or disable the interrupt mask here.
  615. * i2c_dw_xfer_msg() will take care of it according to
  616. * the current transmit status.
  617. */
  618. tx_aborted:
  619. if (((stat & (DW_IC_INTR_TX_ABRT | DW_IC_INTR_STOP_DET)) || dev->msg_err) &&
  620. (dev->rx_outstanding == 0))
  621. complete(&dev->cmd_complete);
  622. else if (unlikely(dev->flags & ACCESS_INTR_MASK)) {
  623. /* Workaround to trigger pending interrupt */
  624. __i2c_dw_read_intr_mask(dev, &stat);
  625. __i2c_dw_write_intr_mask(dev, 0);
  626. __i2c_dw_write_intr_mask(dev, stat);
  627. }
  628. }
  629. /*
  630. * Interrupt service routine. This gets called whenever an I2C master interrupt
  631. * occurs.
  632. */
  633. static irqreturn_t i2c_dw_isr(int this_irq, void *dev_id)
  634. {
  635. struct dw_i2c_dev *dev = dev_id;
  636. unsigned int stat, enabled;
  637. regmap_read(dev->map, DW_IC_ENABLE, &enabled);
  638. regmap_read(dev->map, DW_IC_RAW_INTR_STAT, &stat);
  639. if (!enabled || !(stat & ~DW_IC_INTR_ACTIVITY))
  640. return IRQ_NONE;
  641. if (pm_runtime_suspended(dev->dev) || stat == GENMASK(31, 0))
  642. return IRQ_NONE;
  643. dev_dbg(dev->dev, "enabled=%#x stat=%#x\n", enabled, stat);
  644. stat = i2c_dw_read_clear_intrbits(dev);
  645. if (!(dev->status & STATUS_ACTIVE)) {
  646. /*
  647. * Unexpected interrupt in driver point of view. State
  648. * variables are either unset or stale so acknowledge and
  649. * disable interrupts for suppressing further interrupts if
  650. * interrupt really came from this HW (E.g. firmware has left
  651. * the HW active).
  652. */
  653. __i2c_dw_write_intr_mask(dev, 0);
  654. return IRQ_HANDLED;
  655. }
  656. i2c_dw_process_transfer(dev, stat);
  657. return IRQ_HANDLED;
  658. }
  659. static int i2c_dw_wait_transfer(struct dw_i2c_dev *dev)
  660. {
  661. unsigned long timeout = dev->adapter.timeout;
  662. unsigned int stat;
  663. int ret;
  664. if (!(dev->flags & ACCESS_POLLING)) {
  665. ret = wait_for_completion_timeout(&dev->cmd_complete, timeout);
  666. } else {
  667. timeout += jiffies;
  668. do {
  669. ret = try_wait_for_completion(&dev->cmd_complete);
  670. if (ret)
  671. break;
  672. stat = i2c_dw_read_clear_intrbits(dev);
  673. if (stat)
  674. i2c_dw_process_transfer(dev, stat);
  675. else
  676. /* Try save some power */
  677. usleep_range(3, 25);
  678. } while (time_before(jiffies, timeout));
  679. }
  680. return ret ? 0 : -ETIMEDOUT;
  681. }
  682. /*
  683. * Prepare controller for a transaction and call i2c_dw_xfer_msg.
  684. */
  685. static int
  686. i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
  687. {
  688. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  689. int ret;
  690. dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num);
  691. pm_runtime_get_sync(dev->dev);
  692. switch (dev->flags & MODEL_MASK) {
  693. case MODEL_AMD_NAVI_GPU:
  694. ret = amd_i2c_dw_xfer_quirk(adap, msgs, num);
  695. goto done_nolock;
  696. default:
  697. break;
  698. }
  699. reinit_completion(&dev->cmd_complete);
  700. dev->msgs = msgs;
  701. dev->msgs_num = num;
  702. dev->cmd_err = 0;
  703. dev->msg_write_idx = 0;
  704. dev->msg_read_idx = 0;
  705. dev->msg_err = 0;
  706. dev->status = 0;
  707. dev->abort_source = 0;
  708. dev->rx_outstanding = 0;
  709. ret = i2c_dw_acquire_lock(dev);
  710. if (ret)
  711. goto done_nolock;
  712. ret = i2c_dw_wait_bus_not_busy(dev);
  713. if (ret < 0)
  714. goto done;
  715. /* Start the transfers */
  716. i2c_dw_xfer_init(dev);
  717. /* Wait for tx to complete */
  718. ret = i2c_dw_wait_transfer(dev);
  719. if (ret) {
  720. dev_err(dev->dev, "controller timed out\n");
  721. /* i2c_dw_init_master() implicitly disables the adapter */
  722. i2c_recover_bus(&dev->adapter);
  723. i2c_dw_init_master(dev);
  724. goto done;
  725. }
  726. /*
  727. * This happens rarely (~1:500) and is hard to reproduce. Debug trace
  728. * showed that IC_STATUS had value of 0x23 when STOP_DET occurred,
  729. * if disable IC_ENABLE.ENABLE immediately that can result in
  730. * IC_RAW_INTR_STAT.MASTER_ON_HOLD holding SCL low. Check if
  731. * controller is still ACTIVE before disabling I2C.
  732. */
  733. if (i2c_dw_is_controller_active(dev))
  734. dev_err(dev->dev, "controller active\n");
  735. /*
  736. * We must disable the adapter before returning and signaling the end
  737. * of the current transfer. Otherwise the hardware might continue
  738. * generating interrupts which in turn causes a race condition with
  739. * the following transfer. Needs some more investigation if the
  740. * additional interrupts are a hardware bug or this driver doesn't
  741. * handle them correctly yet.
  742. */
  743. __i2c_dw_disable_nowait(dev);
  744. if (dev->msg_err) {
  745. ret = dev->msg_err;
  746. goto done;
  747. }
  748. /* No error */
  749. if (likely(!dev->cmd_err && !dev->status)) {
  750. ret = num;
  751. goto done;
  752. }
  753. /* We have an error */
  754. if (dev->cmd_err == DW_IC_ERR_TX_ABRT) {
  755. ret = i2c_dw_handle_tx_abort(dev);
  756. goto done;
  757. }
  758. if (dev->status)
  759. dev_err(dev->dev,
  760. "transfer terminated early - interrupt latency too high?\n");
  761. ret = -EIO;
  762. done:
  763. i2c_dw_release_lock(dev);
  764. done_nolock:
  765. pm_runtime_mark_last_busy(dev->dev);
  766. pm_runtime_put_autosuspend(dev->dev);
  767. return ret;
  768. }
  769. static const struct i2c_algorithm i2c_dw_algo = {
  770. .master_xfer = i2c_dw_xfer,
  771. .functionality = i2c_dw_func,
  772. };
  773. static const struct i2c_adapter_quirks i2c_dw_quirks = {
  774. .flags = I2C_AQ_NO_ZERO_LEN,
  775. };
  776. void i2c_dw_configure_master(struct dw_i2c_dev *dev)
  777. {
  778. struct i2c_timings *t = &dev->timings;
  779. dev->functionality = I2C_FUNC_10BIT_ADDR | DW_IC_DEFAULT_FUNCTIONALITY;
  780. dev->master_cfg = DW_IC_CON_MASTER | DW_IC_CON_SLAVE_DISABLE |
  781. DW_IC_CON_RESTART_EN;
  782. dev->mode = DW_IC_MASTER;
  783. switch (t->bus_freq_hz) {
  784. case I2C_MAX_STANDARD_MODE_FREQ:
  785. dev->master_cfg |= DW_IC_CON_SPEED_STD;
  786. break;
  787. case I2C_MAX_HIGH_SPEED_MODE_FREQ:
  788. dev->master_cfg |= DW_IC_CON_SPEED_HIGH;
  789. break;
  790. default:
  791. dev->master_cfg |= DW_IC_CON_SPEED_FAST;
  792. }
  793. }
  794. EXPORT_SYMBOL_GPL(i2c_dw_configure_master);
  795. static void i2c_dw_prepare_recovery(struct i2c_adapter *adap)
  796. {
  797. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  798. i2c_dw_disable(dev);
  799. reset_control_assert(dev->rst);
  800. i2c_dw_prepare_clk(dev, false);
  801. }
  802. static void i2c_dw_unprepare_recovery(struct i2c_adapter *adap)
  803. {
  804. struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
  805. i2c_dw_prepare_clk(dev, true);
  806. reset_control_deassert(dev->rst);
  807. i2c_dw_init_master(dev);
  808. }
  809. static int i2c_dw_init_recovery_info(struct dw_i2c_dev *dev)
  810. {
  811. struct i2c_bus_recovery_info *rinfo = &dev->rinfo;
  812. struct i2c_adapter *adap = &dev->adapter;
  813. struct gpio_desc *gpio;
  814. gpio = devm_gpiod_get_optional(dev->dev, "scl", GPIOD_OUT_HIGH);
  815. if (IS_ERR_OR_NULL(gpio))
  816. return PTR_ERR_OR_ZERO(gpio);
  817. rinfo->scl_gpiod = gpio;
  818. gpio = devm_gpiod_get_optional(dev->dev, "sda", GPIOD_IN);
  819. if (IS_ERR(gpio))
  820. return PTR_ERR(gpio);
  821. rinfo->sda_gpiod = gpio;
  822. rinfo->pinctrl = devm_pinctrl_get(dev->dev);
  823. if (IS_ERR(rinfo->pinctrl)) {
  824. if (PTR_ERR(rinfo->pinctrl) == -EPROBE_DEFER)
  825. return PTR_ERR(rinfo->pinctrl);
  826. rinfo->pinctrl = NULL;
  827. dev_err(dev->dev, "getting pinctrl info failed: bus recovery might not work\n");
  828. } else if (!rinfo->pinctrl) {
  829. dev_dbg(dev->dev, "pinctrl is disabled, bus recovery might not work\n");
  830. }
  831. rinfo->recover_bus = i2c_generic_scl_recovery;
  832. rinfo->prepare_recovery = i2c_dw_prepare_recovery;
  833. rinfo->unprepare_recovery = i2c_dw_unprepare_recovery;
  834. adap->bus_recovery_info = rinfo;
  835. dev_info(dev->dev, "running with gpio recovery mode! scl%s",
  836. rinfo->sda_gpiod ? ",sda" : "");
  837. return 0;
  838. }
  839. int i2c_dw_probe_master(struct dw_i2c_dev *dev)
  840. {
  841. struct i2c_adapter *adap = &dev->adapter;
  842. unsigned long irq_flags;
  843. unsigned int ic_con;
  844. int ret;
  845. init_completion(&dev->cmd_complete);
  846. dev->init = i2c_dw_init_master;
  847. ret = i2c_dw_init_regmap(dev);
  848. if (ret)
  849. return ret;
  850. ret = i2c_dw_set_timings_master(dev);
  851. if (ret)
  852. return ret;
  853. ret = i2c_dw_set_fifo_size(dev);
  854. if (ret)
  855. return ret;
  856. /* Lock the bus for accessing DW_IC_CON */
  857. ret = i2c_dw_acquire_lock(dev);
  858. if (ret)
  859. return ret;
  860. /*
  861. * On AMD platforms BIOS advertises the bus clear feature
  862. * and enables the SCL/SDA stuck low. SMU FW does the
  863. * bus recovery process. Driver should not ignore this BIOS
  864. * advertisement of bus clear feature.
  865. */
  866. ret = regmap_read(dev->map, DW_IC_CON, &ic_con);
  867. i2c_dw_release_lock(dev);
  868. if (ret)
  869. return ret;
  870. if (ic_con & DW_IC_CON_BUS_CLEAR_CTRL)
  871. dev->master_cfg |= DW_IC_CON_BUS_CLEAR_CTRL;
  872. ret = dev->init(dev);
  873. if (ret)
  874. return ret;
  875. snprintf(adap->name, sizeof(adap->name),
  876. "Synopsys DesignWare I2C adapter");
  877. adap->retries = 3;
  878. adap->algo = &i2c_dw_algo;
  879. adap->quirks = &i2c_dw_quirks;
  880. adap->dev.parent = dev->dev;
  881. i2c_set_adapdata(adap, dev);
  882. if (dev->flags & ACCESS_NO_IRQ_SUSPEND) {
  883. irq_flags = IRQF_NO_SUSPEND;
  884. } else {
  885. irq_flags = IRQF_SHARED | IRQF_COND_SUSPEND;
  886. }
  887. ret = i2c_dw_acquire_lock(dev);
  888. if (ret)
  889. return ret;
  890. __i2c_dw_write_intr_mask(dev, 0);
  891. i2c_dw_release_lock(dev);
  892. if (!(dev->flags & ACCESS_POLLING)) {
  893. ret = devm_request_irq(dev->dev, dev->irq, i2c_dw_isr,
  894. irq_flags, dev_name(dev->dev), dev);
  895. if (ret) {
  896. dev_err(dev->dev, "failure requesting irq %i: %d\n",
  897. dev->irq, ret);
  898. return ret;
  899. }
  900. }
  901. ret = i2c_dw_init_recovery_info(dev);
  902. if (ret)
  903. return ret;
  904. /*
  905. * Increment PM usage count during adapter registration in order to
  906. * avoid possible spurious runtime suspend when adapter device is
  907. * registered to the device core and immediate resume in case bus has
  908. * registered I2C slaves that do I2C transfers in their probe.
  909. */
  910. pm_runtime_get_noresume(dev->dev);
  911. ret = i2c_add_numbered_adapter(adap);
  912. if (ret)
  913. dev_err(dev->dev, "failure adding adapter: %d\n", ret);
  914. pm_runtime_put_noidle(dev->dev);
  915. return ret;
  916. }
  917. EXPORT_SYMBOL_GPL(i2c_dw_probe_master);
  918. MODULE_DESCRIPTION("Synopsys DesignWare I2C bus master adapter");
  919. MODULE_LICENSE("GPL");
  920. MODULE_IMPORT_NS(I2C_DW_COMMON);