i2c-aspeed.c 33 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Aspeed 24XX/25XX I2C Controller.
  4. *
  5. * Copyright (C) 2012-2017 ASPEED Technology Inc.
  6. * Copyright 2017 IBM Corporation
  7. * Copyright 2017 Google, Inc.
  8. */
  9. #include <linux/clk.h>
  10. #include <linux/completion.h>
  11. #include <linux/err.h>
  12. #include <linux/errno.h>
  13. #include <linux/i2c.h>
  14. #include <linux/init.h>
  15. #include <linux/interrupt.h>
  16. #include <linux/io.h>
  17. #include <linux/irq.h>
  18. #include <linux/kernel.h>
  19. #include <linux/module.h>
  20. #include <linux/of_address.h>
  21. #include <linux/of_irq.h>
  22. #include <linux/of_platform.h>
  23. #include <linux/platform_device.h>
  24. #include <linux/reset.h>
  25. #include <linux/slab.h>
  26. /* I2C Register */
  27. #define ASPEED_I2C_FUN_CTRL_REG 0x00
  28. #define ASPEED_I2C_AC_TIMING_REG1 0x04
  29. #define ASPEED_I2C_AC_TIMING_REG2 0x08
  30. #define ASPEED_I2C_INTR_CTRL_REG 0x0c
  31. #define ASPEED_I2C_INTR_STS_REG 0x10
  32. #define ASPEED_I2C_CMD_REG 0x14
  33. #define ASPEED_I2C_DEV_ADDR_REG 0x18
  34. #define ASPEED_I2C_BYTE_BUF_REG 0x20
  35. /* Global Register Definition */
  36. /* 0x00 : I2C Interrupt Status Register */
  37. /* 0x08 : I2C Interrupt Target Assignment */
  38. /* Device Register Definition */
  39. /* 0x00 : I2CD Function Control Register */
  40. #define ASPEED_I2CD_MULTI_MASTER_DIS BIT(15)
  41. #define ASPEED_I2CD_SDA_DRIVE_1T_EN BIT(8)
  42. #define ASPEED_I2CD_M_SDA_DRIVE_1T_EN BIT(7)
  43. #define ASPEED_I2CD_M_HIGH_SPEED_EN BIT(6)
  44. #define ASPEED_I2CD_SLAVE_EN BIT(1)
  45. #define ASPEED_I2CD_MASTER_EN BIT(0)
  46. /* 0x04 : I2CD Clock and AC Timing Control Register #1 */
  47. #define ASPEED_I2CD_TIME_TBUF_MASK GENMASK(31, 28)
  48. #define ASPEED_I2CD_TIME_THDSTA_MASK GENMASK(27, 24)
  49. #define ASPEED_I2CD_TIME_TACST_MASK GENMASK(23, 20)
  50. #define ASPEED_I2CD_TIME_SCL_HIGH_SHIFT 16
  51. #define ASPEED_I2CD_TIME_SCL_HIGH_MASK GENMASK(19, 16)
  52. #define ASPEED_I2CD_TIME_SCL_LOW_SHIFT 12
  53. #define ASPEED_I2CD_TIME_SCL_LOW_MASK GENMASK(15, 12)
  54. #define ASPEED_I2CD_TIME_BASE_DIVISOR_MASK GENMASK(3, 0)
  55. #define ASPEED_I2CD_TIME_SCL_REG_MAX GENMASK(3, 0)
  56. /* 0x08 : I2CD Clock and AC Timing Control Register #2 */
  57. #define ASPEED_NO_TIMEOUT_CTRL 0
  58. /* 0x0c : I2CD Interrupt Control Register &
  59. * 0x10 : I2CD Interrupt Status Register
  60. *
  61. * These share bit definitions, so use the same values for the enable &
  62. * status bits.
  63. */
  64. #define ASPEED_I2CD_INTR_RECV_MASK 0xf000ffff
  65. #define ASPEED_I2CD_INTR_SDA_DL_TIMEOUT BIT(14)
  66. #define ASPEED_I2CD_INTR_BUS_RECOVER_DONE BIT(13)
  67. #define ASPEED_I2CD_INTR_SLAVE_MATCH BIT(7)
  68. #define ASPEED_I2CD_INTR_SCL_TIMEOUT BIT(6)
  69. #define ASPEED_I2CD_INTR_ABNORMAL BIT(5)
  70. #define ASPEED_I2CD_INTR_NORMAL_STOP BIT(4)
  71. #define ASPEED_I2CD_INTR_ARBIT_LOSS BIT(3)
  72. #define ASPEED_I2CD_INTR_RX_DONE BIT(2)
  73. #define ASPEED_I2CD_INTR_TX_NAK BIT(1)
  74. #define ASPEED_I2CD_INTR_TX_ACK BIT(0)
  75. #define ASPEED_I2CD_INTR_MASTER_ERRORS \
  76. (ASPEED_I2CD_INTR_SDA_DL_TIMEOUT | \
  77. ASPEED_I2CD_INTR_SCL_TIMEOUT | \
  78. ASPEED_I2CD_INTR_ABNORMAL | \
  79. ASPEED_I2CD_INTR_ARBIT_LOSS)
  80. #define ASPEED_I2CD_INTR_ALL \
  81. (ASPEED_I2CD_INTR_SDA_DL_TIMEOUT | \
  82. ASPEED_I2CD_INTR_BUS_RECOVER_DONE | \
  83. ASPEED_I2CD_INTR_SCL_TIMEOUT | \
  84. ASPEED_I2CD_INTR_ABNORMAL | \
  85. ASPEED_I2CD_INTR_NORMAL_STOP | \
  86. ASPEED_I2CD_INTR_ARBIT_LOSS | \
  87. ASPEED_I2CD_INTR_RX_DONE | \
  88. ASPEED_I2CD_INTR_TX_NAK | \
  89. ASPEED_I2CD_INTR_TX_ACK)
  90. /* 0x14 : I2CD Command/Status Register */
  91. #define ASPEED_I2CD_SCL_LINE_STS BIT(18)
  92. #define ASPEED_I2CD_SDA_LINE_STS BIT(17)
  93. #define ASPEED_I2CD_BUS_BUSY_STS BIT(16)
  94. #define ASPEED_I2CD_BUS_RECOVER_CMD BIT(11)
  95. /* Command Bit */
  96. #define ASPEED_I2CD_M_STOP_CMD BIT(5)
  97. #define ASPEED_I2CD_M_S_RX_CMD_LAST BIT(4)
  98. #define ASPEED_I2CD_M_RX_CMD BIT(3)
  99. #define ASPEED_I2CD_S_TX_CMD BIT(2)
  100. #define ASPEED_I2CD_M_TX_CMD BIT(1)
  101. #define ASPEED_I2CD_M_START_CMD BIT(0)
  102. #define ASPEED_I2CD_MASTER_CMDS_MASK \
  103. (ASPEED_I2CD_M_STOP_CMD | \
  104. ASPEED_I2CD_M_S_RX_CMD_LAST | \
  105. ASPEED_I2CD_M_RX_CMD | \
  106. ASPEED_I2CD_M_TX_CMD | \
  107. ASPEED_I2CD_M_START_CMD)
  108. /* 0x18 : I2CD Slave Device Address Register */
  109. #define ASPEED_I2CD_DEV_ADDR_MASK GENMASK(6, 0)
  110. enum aspeed_i2c_master_state {
  111. ASPEED_I2C_MASTER_INACTIVE,
  112. ASPEED_I2C_MASTER_PENDING,
  113. ASPEED_I2C_MASTER_START,
  114. ASPEED_I2C_MASTER_TX_FIRST,
  115. ASPEED_I2C_MASTER_TX,
  116. ASPEED_I2C_MASTER_RX_FIRST,
  117. ASPEED_I2C_MASTER_RX,
  118. ASPEED_I2C_MASTER_STOP,
  119. };
  120. enum aspeed_i2c_slave_state {
  121. ASPEED_I2C_SLAVE_INACTIVE,
  122. ASPEED_I2C_SLAVE_START,
  123. ASPEED_I2C_SLAVE_READ_REQUESTED,
  124. ASPEED_I2C_SLAVE_READ_PROCESSED,
  125. ASPEED_I2C_SLAVE_WRITE_REQUESTED,
  126. ASPEED_I2C_SLAVE_WRITE_RECEIVED,
  127. ASPEED_I2C_SLAVE_STOP,
  128. };
  129. struct aspeed_i2c_bus {
  130. struct i2c_adapter adap;
  131. struct device *dev;
  132. void __iomem *base;
  133. struct reset_control *rst;
  134. /* Synchronizes I/O mem access to base. */
  135. spinlock_t lock;
  136. struct completion cmd_complete;
  137. u32 (*get_clk_reg_val)(struct device *dev,
  138. u32 divisor);
  139. unsigned long parent_clk_frequency;
  140. u32 bus_frequency;
  141. /* Transaction state. */
  142. enum aspeed_i2c_master_state master_state;
  143. struct i2c_msg *msgs;
  144. size_t buf_index;
  145. size_t msgs_index;
  146. size_t msgs_count;
  147. bool send_stop;
  148. int cmd_err;
  149. /* Protected only by i2c_lock_bus */
  150. int master_xfer_result;
  151. /* Multi-master */
  152. bool multi_master;
  153. #if IS_ENABLED(CONFIG_I2C_SLAVE)
  154. struct i2c_client *slave;
  155. enum aspeed_i2c_slave_state slave_state;
  156. #endif /* CONFIG_I2C_SLAVE */
  157. };
  158. static int aspeed_i2c_reset(struct aspeed_i2c_bus *bus);
  159. /* precondition: bus.lock has been acquired. */
  160. static void aspeed_i2c_do_stop(struct aspeed_i2c_bus *bus)
  161. {
  162. bus->master_state = ASPEED_I2C_MASTER_STOP;
  163. writel(ASPEED_I2CD_M_STOP_CMD, bus->base + ASPEED_I2C_CMD_REG);
  164. }
  165. static int aspeed_i2c_recover_bus(struct aspeed_i2c_bus *bus)
  166. {
  167. unsigned long time_left, flags;
  168. int ret = 0;
  169. u32 command;
  170. spin_lock_irqsave(&bus->lock, flags);
  171. command = readl(bus->base + ASPEED_I2C_CMD_REG);
  172. if (command & ASPEED_I2CD_SDA_LINE_STS) {
  173. /* Bus is idle: no recovery needed. */
  174. if (command & ASPEED_I2CD_SCL_LINE_STS)
  175. goto out;
  176. dev_dbg(bus->dev, "SCL hung (state %x), attempting recovery\n",
  177. command);
  178. reinit_completion(&bus->cmd_complete);
  179. aspeed_i2c_do_stop(bus);
  180. spin_unlock_irqrestore(&bus->lock, flags);
  181. time_left = wait_for_completion_timeout(
  182. &bus->cmd_complete, bus->adap.timeout);
  183. spin_lock_irqsave(&bus->lock, flags);
  184. if (time_left == 0)
  185. goto reset_out;
  186. else if (bus->cmd_err)
  187. goto reset_out;
  188. /* Recovery failed. */
  189. else if (!(readl(bus->base + ASPEED_I2C_CMD_REG) &
  190. ASPEED_I2CD_SCL_LINE_STS))
  191. goto reset_out;
  192. /* Bus error. */
  193. } else {
  194. dev_dbg(bus->dev, "SDA hung (state %x), attempting recovery\n",
  195. command);
  196. reinit_completion(&bus->cmd_complete);
  197. /* Writes 1 to 8 SCL clock cycles until SDA is released. */
  198. writel(ASPEED_I2CD_BUS_RECOVER_CMD,
  199. bus->base + ASPEED_I2C_CMD_REG);
  200. spin_unlock_irqrestore(&bus->lock, flags);
  201. time_left = wait_for_completion_timeout(
  202. &bus->cmd_complete, bus->adap.timeout);
  203. spin_lock_irqsave(&bus->lock, flags);
  204. if (time_left == 0)
  205. goto reset_out;
  206. else if (bus->cmd_err)
  207. goto reset_out;
  208. /* Recovery failed. */
  209. else if (!(readl(bus->base + ASPEED_I2C_CMD_REG) &
  210. ASPEED_I2CD_SDA_LINE_STS))
  211. goto reset_out;
  212. }
  213. out:
  214. spin_unlock_irqrestore(&bus->lock, flags);
  215. return ret;
  216. reset_out:
  217. spin_unlock_irqrestore(&bus->lock, flags);
  218. return aspeed_i2c_reset(bus);
  219. }
  220. #if IS_ENABLED(CONFIG_I2C_SLAVE)
  221. static u32 aspeed_i2c_slave_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
  222. {
  223. u32 command, irq_handled = 0;
  224. struct i2c_client *slave = bus->slave;
  225. u8 value;
  226. int ret;
  227. if (!slave)
  228. return 0;
  229. /*
  230. * Handle stop conditions early, prior to SLAVE_MATCH. Some masters may drive
  231. * transfers with low enough latency between the nak/stop phase of the current
  232. * command and the start/address phase of the following command that the
  233. * interrupts are coalesced by the time we process them.
  234. */
  235. if (irq_status & ASPEED_I2CD_INTR_NORMAL_STOP) {
  236. irq_handled |= ASPEED_I2CD_INTR_NORMAL_STOP;
  237. bus->slave_state = ASPEED_I2C_SLAVE_STOP;
  238. }
  239. if (irq_status & ASPEED_I2CD_INTR_TX_NAK &&
  240. bus->slave_state == ASPEED_I2C_SLAVE_READ_PROCESSED) {
  241. irq_handled |= ASPEED_I2CD_INTR_TX_NAK;
  242. bus->slave_state = ASPEED_I2C_SLAVE_STOP;
  243. }
  244. /* Propagate any stop conditions to the slave implementation. */
  245. if (bus->slave_state == ASPEED_I2C_SLAVE_STOP) {
  246. i2c_slave_event(slave, I2C_SLAVE_STOP, &value);
  247. bus->slave_state = ASPEED_I2C_SLAVE_INACTIVE;
  248. }
  249. /*
  250. * Now that we've dealt with any potentially coalesced stop conditions,
  251. * address any start conditions.
  252. */
  253. if (irq_status & ASPEED_I2CD_INTR_SLAVE_MATCH) {
  254. irq_handled |= ASPEED_I2CD_INTR_SLAVE_MATCH;
  255. bus->slave_state = ASPEED_I2C_SLAVE_START;
  256. }
  257. /*
  258. * If the slave has been stopped and not started then slave interrupt
  259. * handling is complete.
  260. */
  261. if (bus->slave_state == ASPEED_I2C_SLAVE_INACTIVE)
  262. return irq_handled;
  263. command = readl(bus->base + ASPEED_I2C_CMD_REG);
  264. dev_dbg(bus->dev, "slave irq status 0x%08x, cmd 0x%08x\n",
  265. irq_status, command);
  266. /* Slave was sent something. */
  267. if (irq_status & ASPEED_I2CD_INTR_RX_DONE) {
  268. value = readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8;
  269. /* Handle address frame. */
  270. if (bus->slave_state == ASPEED_I2C_SLAVE_START) {
  271. if (value & 0x1)
  272. bus->slave_state =
  273. ASPEED_I2C_SLAVE_READ_REQUESTED;
  274. else
  275. bus->slave_state =
  276. ASPEED_I2C_SLAVE_WRITE_REQUESTED;
  277. }
  278. irq_handled |= ASPEED_I2CD_INTR_RX_DONE;
  279. }
  280. switch (bus->slave_state) {
  281. case ASPEED_I2C_SLAVE_READ_REQUESTED:
  282. if (unlikely(irq_status & ASPEED_I2CD_INTR_TX_ACK))
  283. dev_err(bus->dev, "Unexpected ACK on read request.\n");
  284. bus->slave_state = ASPEED_I2C_SLAVE_READ_PROCESSED;
  285. i2c_slave_event(slave, I2C_SLAVE_READ_REQUESTED, &value);
  286. writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG);
  287. writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG);
  288. break;
  289. case ASPEED_I2C_SLAVE_READ_PROCESSED:
  290. if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) {
  291. dev_err(bus->dev,
  292. "Expected ACK after processed read.\n");
  293. break;
  294. }
  295. irq_handled |= ASPEED_I2CD_INTR_TX_ACK;
  296. i2c_slave_event(slave, I2C_SLAVE_READ_PROCESSED, &value);
  297. writel(value, bus->base + ASPEED_I2C_BYTE_BUF_REG);
  298. writel(ASPEED_I2CD_S_TX_CMD, bus->base + ASPEED_I2C_CMD_REG);
  299. break;
  300. case ASPEED_I2C_SLAVE_WRITE_REQUESTED:
  301. bus->slave_state = ASPEED_I2C_SLAVE_WRITE_RECEIVED;
  302. ret = i2c_slave_event(slave, I2C_SLAVE_WRITE_REQUESTED, &value);
  303. /*
  304. * Slave ACK's on this address phase already but as the backend driver
  305. * returns an errno, the bus driver should nack the next incoming byte.
  306. */
  307. if (ret < 0)
  308. writel(ASPEED_I2CD_M_S_RX_CMD_LAST, bus->base + ASPEED_I2C_CMD_REG);
  309. break;
  310. case ASPEED_I2C_SLAVE_WRITE_RECEIVED:
  311. i2c_slave_event(slave, I2C_SLAVE_WRITE_RECEIVED, &value);
  312. break;
  313. case ASPEED_I2C_SLAVE_STOP:
  314. /* Stop event handling is done early. Unreachable. */
  315. break;
  316. case ASPEED_I2C_SLAVE_START:
  317. /* Slave was just started. Waiting for the next event. */;
  318. break;
  319. default:
  320. dev_err(bus->dev, "unknown slave_state: %d\n",
  321. bus->slave_state);
  322. bus->slave_state = ASPEED_I2C_SLAVE_INACTIVE;
  323. break;
  324. }
  325. return irq_handled;
  326. }
  327. #endif /* CONFIG_I2C_SLAVE */
  328. /* precondition: bus.lock has been acquired. */
  329. static void aspeed_i2c_do_start(struct aspeed_i2c_bus *bus)
  330. {
  331. u32 command = ASPEED_I2CD_M_START_CMD | ASPEED_I2CD_M_TX_CMD;
  332. struct i2c_msg *msg = &bus->msgs[bus->msgs_index];
  333. u8 slave_addr = i2c_8bit_addr_from_msg(msg);
  334. #if IS_ENABLED(CONFIG_I2C_SLAVE)
  335. /*
  336. * If it's requested in the middle of a slave session, set the master
  337. * state to 'pending' then H/W will continue handling this master
  338. * command when the bus comes back to the idle state.
  339. */
  340. if (bus->slave_state != ASPEED_I2C_SLAVE_INACTIVE) {
  341. bus->master_state = ASPEED_I2C_MASTER_PENDING;
  342. return;
  343. }
  344. #endif /* CONFIG_I2C_SLAVE */
  345. bus->master_state = ASPEED_I2C_MASTER_START;
  346. bus->buf_index = 0;
  347. if (msg->flags & I2C_M_RD) {
  348. command |= ASPEED_I2CD_M_RX_CMD;
  349. /* Need to let the hardware know to NACK after RX. */
  350. if (msg->len == 1 && !(msg->flags & I2C_M_RECV_LEN))
  351. command |= ASPEED_I2CD_M_S_RX_CMD_LAST;
  352. }
  353. writel(slave_addr, bus->base + ASPEED_I2C_BYTE_BUF_REG);
  354. writel(command, bus->base + ASPEED_I2C_CMD_REG);
  355. }
  356. /* precondition: bus.lock has been acquired. */
  357. static void aspeed_i2c_next_msg_or_stop(struct aspeed_i2c_bus *bus)
  358. {
  359. if (bus->msgs_index + 1 < bus->msgs_count) {
  360. bus->msgs_index++;
  361. aspeed_i2c_do_start(bus);
  362. } else {
  363. aspeed_i2c_do_stop(bus);
  364. }
  365. }
  366. static int aspeed_i2c_is_irq_error(u32 irq_status)
  367. {
  368. if (irq_status & ASPEED_I2CD_INTR_ARBIT_LOSS)
  369. return -EAGAIN;
  370. if (irq_status & (ASPEED_I2CD_INTR_SDA_DL_TIMEOUT |
  371. ASPEED_I2CD_INTR_SCL_TIMEOUT))
  372. return -EBUSY;
  373. if (irq_status & (ASPEED_I2CD_INTR_ABNORMAL))
  374. return -EPROTO;
  375. return 0;
  376. }
  377. static u32 aspeed_i2c_master_irq(struct aspeed_i2c_bus *bus, u32 irq_status)
  378. {
  379. u32 irq_handled = 0, command = 0;
  380. struct i2c_msg *msg;
  381. u8 recv_byte;
  382. int ret;
  383. if (irq_status & ASPEED_I2CD_INTR_BUS_RECOVER_DONE) {
  384. bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
  385. irq_handled |= ASPEED_I2CD_INTR_BUS_RECOVER_DONE;
  386. goto out_complete;
  387. }
  388. /*
  389. * We encountered an interrupt that reports an error: the hardware
  390. * should clear the command queue effectively taking us back to the
  391. * INACTIVE state.
  392. */
  393. ret = aspeed_i2c_is_irq_error(irq_status);
  394. if (ret) {
  395. dev_dbg(bus->dev, "received error interrupt: 0x%08x\n",
  396. irq_status);
  397. irq_handled |= (irq_status & ASPEED_I2CD_INTR_MASTER_ERRORS);
  398. if (bus->master_state != ASPEED_I2C_MASTER_INACTIVE) {
  399. irq_handled = irq_status;
  400. bus->cmd_err = ret;
  401. bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
  402. goto out_complete;
  403. }
  404. }
  405. /* Master is not currently active, irq was for someone else. */
  406. if (bus->master_state == ASPEED_I2C_MASTER_INACTIVE ||
  407. bus->master_state == ASPEED_I2C_MASTER_PENDING)
  408. goto out_no_complete;
  409. /* We are in an invalid state; reset bus to a known state. */
  410. if (!bus->msgs) {
  411. dev_err(bus->dev, "bus in unknown state. irq_status: 0x%x\n",
  412. irq_status);
  413. bus->cmd_err = -EIO;
  414. if (bus->master_state != ASPEED_I2C_MASTER_STOP &&
  415. bus->master_state != ASPEED_I2C_MASTER_INACTIVE)
  416. aspeed_i2c_do_stop(bus);
  417. goto out_no_complete;
  418. }
  419. msg = &bus->msgs[bus->msgs_index];
  420. /*
  421. * START is a special case because we still have to handle a subsequent
  422. * TX or RX immediately after we handle it, so we handle it here and
  423. * then update the state and handle the new state below.
  424. */
  425. if (bus->master_state == ASPEED_I2C_MASTER_START) {
  426. #if IS_ENABLED(CONFIG_I2C_SLAVE)
  427. /*
  428. * If a peer master starts a xfer immediately after it queues a
  429. * master command, clear the queued master command and change
  430. * its state to 'pending'. To simplify handling of pending
  431. * cases, it uses S/W solution instead of H/W command queue
  432. * handling.
  433. */
  434. if (unlikely(irq_status & ASPEED_I2CD_INTR_SLAVE_MATCH)) {
  435. writel(readl(bus->base + ASPEED_I2C_CMD_REG) &
  436. ~ASPEED_I2CD_MASTER_CMDS_MASK,
  437. bus->base + ASPEED_I2C_CMD_REG);
  438. bus->master_state = ASPEED_I2C_MASTER_PENDING;
  439. dev_dbg(bus->dev,
  440. "master goes pending due to a slave start\n");
  441. goto out_no_complete;
  442. }
  443. #endif /* CONFIG_I2C_SLAVE */
  444. if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) {
  445. if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_NAK))) {
  446. bus->cmd_err = -ENXIO;
  447. bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
  448. goto out_complete;
  449. }
  450. pr_devel("no slave present at %02x\n", msg->addr);
  451. irq_handled |= ASPEED_I2CD_INTR_TX_NAK;
  452. bus->cmd_err = -ENXIO;
  453. aspeed_i2c_do_stop(bus);
  454. goto out_no_complete;
  455. }
  456. irq_handled |= ASPEED_I2CD_INTR_TX_ACK;
  457. if (msg->len == 0) { /* SMBUS_QUICK */
  458. aspeed_i2c_do_stop(bus);
  459. goto out_no_complete;
  460. }
  461. if (msg->flags & I2C_M_RD)
  462. bus->master_state = ASPEED_I2C_MASTER_RX_FIRST;
  463. else
  464. bus->master_state = ASPEED_I2C_MASTER_TX_FIRST;
  465. }
  466. switch (bus->master_state) {
  467. case ASPEED_I2C_MASTER_TX:
  468. if (unlikely(irq_status & ASPEED_I2CD_INTR_TX_NAK)) {
  469. dev_dbg(bus->dev, "slave NACKed TX\n");
  470. irq_handled |= ASPEED_I2CD_INTR_TX_NAK;
  471. goto error_and_stop;
  472. } else if (unlikely(!(irq_status & ASPEED_I2CD_INTR_TX_ACK))) {
  473. dev_err(bus->dev, "slave failed to ACK TX\n");
  474. goto error_and_stop;
  475. }
  476. irq_handled |= ASPEED_I2CD_INTR_TX_ACK;
  477. fallthrough;
  478. case ASPEED_I2C_MASTER_TX_FIRST:
  479. if (bus->buf_index < msg->len) {
  480. bus->master_state = ASPEED_I2C_MASTER_TX;
  481. writel(msg->buf[bus->buf_index++],
  482. bus->base + ASPEED_I2C_BYTE_BUF_REG);
  483. writel(ASPEED_I2CD_M_TX_CMD,
  484. bus->base + ASPEED_I2C_CMD_REG);
  485. } else {
  486. aspeed_i2c_next_msg_or_stop(bus);
  487. }
  488. goto out_no_complete;
  489. case ASPEED_I2C_MASTER_RX_FIRST:
  490. /* RX may not have completed yet (only address cycle) */
  491. if (!(irq_status & ASPEED_I2CD_INTR_RX_DONE))
  492. goto out_no_complete;
  493. fallthrough;
  494. case ASPEED_I2C_MASTER_RX:
  495. if (unlikely(!(irq_status & ASPEED_I2CD_INTR_RX_DONE))) {
  496. dev_err(bus->dev, "master failed to RX\n");
  497. goto error_and_stop;
  498. }
  499. irq_handled |= ASPEED_I2CD_INTR_RX_DONE;
  500. recv_byte = readl(bus->base + ASPEED_I2C_BYTE_BUF_REG) >> 8;
  501. msg->buf[bus->buf_index++] = recv_byte;
  502. if (msg->flags & I2C_M_RECV_LEN) {
  503. if (unlikely(recv_byte > I2C_SMBUS_BLOCK_MAX)) {
  504. bus->cmd_err = -EPROTO;
  505. aspeed_i2c_do_stop(bus);
  506. goto out_no_complete;
  507. }
  508. msg->len = recv_byte +
  509. ((msg->flags & I2C_CLIENT_PEC) ? 2 : 1);
  510. msg->flags &= ~I2C_M_RECV_LEN;
  511. }
  512. if (bus->buf_index < msg->len) {
  513. bus->master_state = ASPEED_I2C_MASTER_RX;
  514. command = ASPEED_I2CD_M_RX_CMD;
  515. if (bus->buf_index + 1 == msg->len)
  516. command |= ASPEED_I2CD_M_S_RX_CMD_LAST;
  517. writel(command, bus->base + ASPEED_I2C_CMD_REG);
  518. } else {
  519. aspeed_i2c_next_msg_or_stop(bus);
  520. }
  521. goto out_no_complete;
  522. case ASPEED_I2C_MASTER_STOP:
  523. if (unlikely(!(irq_status & ASPEED_I2CD_INTR_NORMAL_STOP))) {
  524. dev_err(bus->dev,
  525. "master failed to STOP. irq_status:0x%x\n",
  526. irq_status);
  527. bus->cmd_err = -EIO;
  528. /* Do not STOP as we have already tried. */
  529. } else {
  530. irq_handled |= ASPEED_I2CD_INTR_NORMAL_STOP;
  531. }
  532. bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
  533. goto out_complete;
  534. case ASPEED_I2C_MASTER_INACTIVE:
  535. dev_err(bus->dev,
  536. "master received interrupt 0x%08x, but is inactive\n",
  537. irq_status);
  538. bus->cmd_err = -EIO;
  539. /* Do not STOP as we should be inactive. */
  540. goto out_complete;
  541. default:
  542. WARN(1, "unknown master state\n");
  543. bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
  544. bus->cmd_err = -EINVAL;
  545. goto out_complete;
  546. }
  547. error_and_stop:
  548. bus->cmd_err = -EIO;
  549. aspeed_i2c_do_stop(bus);
  550. goto out_no_complete;
  551. out_complete:
  552. bus->msgs = NULL;
  553. if (bus->cmd_err)
  554. bus->master_xfer_result = bus->cmd_err;
  555. else
  556. bus->master_xfer_result = bus->msgs_index + 1;
  557. complete(&bus->cmd_complete);
  558. out_no_complete:
  559. return irq_handled;
  560. }
  561. static irqreturn_t aspeed_i2c_bus_irq(int irq, void *dev_id)
  562. {
  563. struct aspeed_i2c_bus *bus = dev_id;
  564. u32 irq_received, irq_remaining, irq_handled;
  565. spin_lock(&bus->lock);
  566. irq_received = readl(bus->base + ASPEED_I2C_INTR_STS_REG);
  567. /* Ack all interrupts except for Rx done */
  568. writel(irq_received & ~ASPEED_I2CD_INTR_RX_DONE,
  569. bus->base + ASPEED_I2C_INTR_STS_REG);
  570. readl(bus->base + ASPEED_I2C_INTR_STS_REG);
  571. irq_received &= ASPEED_I2CD_INTR_RECV_MASK;
  572. irq_remaining = irq_received;
  573. #if IS_ENABLED(CONFIG_I2C_SLAVE)
  574. /*
  575. * In most cases, interrupt bits will be set one by one, although
  576. * multiple interrupt bits could be set at the same time. It's also
  577. * possible that master interrupt bits could be set along with slave
  578. * interrupt bits. Each case needs to be handled using corresponding
  579. * handlers depending on the current state.
  580. */
  581. if (bus->master_state != ASPEED_I2C_MASTER_INACTIVE &&
  582. bus->master_state != ASPEED_I2C_MASTER_PENDING) {
  583. irq_handled = aspeed_i2c_master_irq(bus, irq_remaining);
  584. irq_remaining &= ~irq_handled;
  585. if (irq_remaining)
  586. irq_handled |= aspeed_i2c_slave_irq(bus, irq_remaining);
  587. } else {
  588. irq_handled = aspeed_i2c_slave_irq(bus, irq_remaining);
  589. irq_remaining &= ~irq_handled;
  590. if (irq_remaining)
  591. irq_handled |= aspeed_i2c_master_irq(bus,
  592. irq_remaining);
  593. }
  594. /*
  595. * Start a pending master command at here if a slave operation is
  596. * completed.
  597. */
  598. if (bus->master_state == ASPEED_I2C_MASTER_PENDING &&
  599. bus->slave_state == ASPEED_I2C_SLAVE_INACTIVE)
  600. aspeed_i2c_do_start(bus);
  601. #else
  602. irq_handled = aspeed_i2c_master_irq(bus, irq_remaining);
  603. #endif /* CONFIG_I2C_SLAVE */
  604. irq_remaining &= ~irq_handled;
  605. if (irq_remaining)
  606. dev_err(bus->dev,
  607. "irq handled != irq. expected 0x%08x, but was 0x%08x\n",
  608. irq_received, irq_handled);
  609. /* Ack Rx done */
  610. if (irq_received & ASPEED_I2CD_INTR_RX_DONE) {
  611. writel(ASPEED_I2CD_INTR_RX_DONE,
  612. bus->base + ASPEED_I2C_INTR_STS_REG);
  613. readl(bus->base + ASPEED_I2C_INTR_STS_REG);
  614. }
  615. spin_unlock(&bus->lock);
  616. return irq_remaining ? IRQ_NONE : IRQ_HANDLED;
  617. }
  618. static int aspeed_i2c_master_xfer(struct i2c_adapter *adap,
  619. struct i2c_msg *msgs, int num)
  620. {
  621. struct aspeed_i2c_bus *bus = i2c_get_adapdata(adap);
  622. unsigned long time_left, flags;
  623. spin_lock_irqsave(&bus->lock, flags);
  624. bus->cmd_err = 0;
  625. /* If bus is busy in a single master environment, attempt recovery. */
  626. if (!bus->multi_master &&
  627. (readl(bus->base + ASPEED_I2C_CMD_REG) &
  628. ASPEED_I2CD_BUS_BUSY_STS)) {
  629. int ret;
  630. spin_unlock_irqrestore(&bus->lock, flags);
  631. ret = aspeed_i2c_recover_bus(bus);
  632. if (ret)
  633. return ret;
  634. spin_lock_irqsave(&bus->lock, flags);
  635. }
  636. bus->cmd_err = 0;
  637. bus->msgs = msgs;
  638. bus->msgs_index = 0;
  639. bus->msgs_count = num;
  640. reinit_completion(&bus->cmd_complete);
  641. aspeed_i2c_do_start(bus);
  642. spin_unlock_irqrestore(&bus->lock, flags);
  643. time_left = wait_for_completion_timeout(&bus->cmd_complete,
  644. bus->adap.timeout);
  645. if (time_left == 0) {
  646. /*
  647. * In a multi-master setup, if a timeout occurs, attempt
  648. * recovery. But if the bus is idle, we still need to reset the
  649. * i2c controller to clear the remaining interrupts.
  650. */
  651. if (bus->multi_master &&
  652. (readl(bus->base + ASPEED_I2C_CMD_REG) &
  653. ASPEED_I2CD_BUS_BUSY_STS))
  654. aspeed_i2c_recover_bus(bus);
  655. else
  656. aspeed_i2c_reset(bus);
  657. /*
  658. * If timed out and the state is still pending, drop the pending
  659. * master command.
  660. */
  661. spin_lock_irqsave(&bus->lock, flags);
  662. if (bus->master_state == ASPEED_I2C_MASTER_PENDING)
  663. bus->master_state = ASPEED_I2C_MASTER_INACTIVE;
  664. spin_unlock_irqrestore(&bus->lock, flags);
  665. return -ETIMEDOUT;
  666. }
  667. return bus->master_xfer_result;
  668. }
  669. static u32 aspeed_i2c_functionality(struct i2c_adapter *adap)
  670. {
  671. return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_SMBUS_BLOCK_DATA;
  672. }
  673. #if IS_ENABLED(CONFIG_I2C_SLAVE)
  674. /* precondition: bus.lock has been acquired. */
  675. static void __aspeed_i2c_reg_slave(struct aspeed_i2c_bus *bus, u16 slave_addr)
  676. {
  677. u32 addr_reg_val, func_ctrl_reg_val;
  678. /*
  679. * Set slave addr. Reserved bits can all safely be written with zeros
  680. * on all of ast2[456]00, so zero everything else to ensure we only
  681. * enable a single slave address (ast2500 has two, ast2600 has three,
  682. * the enable bits for which are also in this register) so that we don't
  683. * end up with additional phantom devices responding on the bus.
  684. */
  685. addr_reg_val = slave_addr & ASPEED_I2CD_DEV_ADDR_MASK;
  686. writel(addr_reg_val, bus->base + ASPEED_I2C_DEV_ADDR_REG);
  687. /* Turn on slave mode. */
  688. func_ctrl_reg_val = readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);
  689. func_ctrl_reg_val |= ASPEED_I2CD_SLAVE_EN;
  690. writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG);
  691. bus->slave_state = ASPEED_I2C_SLAVE_INACTIVE;
  692. }
  693. static int aspeed_i2c_reg_slave(struct i2c_client *client)
  694. {
  695. struct aspeed_i2c_bus *bus = i2c_get_adapdata(client->adapter);
  696. unsigned long flags;
  697. spin_lock_irqsave(&bus->lock, flags);
  698. if (bus->slave) {
  699. spin_unlock_irqrestore(&bus->lock, flags);
  700. return -EINVAL;
  701. }
  702. __aspeed_i2c_reg_slave(bus, client->addr);
  703. bus->slave = client;
  704. spin_unlock_irqrestore(&bus->lock, flags);
  705. return 0;
  706. }
  707. static int aspeed_i2c_unreg_slave(struct i2c_client *client)
  708. {
  709. struct aspeed_i2c_bus *bus = i2c_get_adapdata(client->adapter);
  710. u32 func_ctrl_reg_val;
  711. unsigned long flags;
  712. spin_lock_irqsave(&bus->lock, flags);
  713. if (!bus->slave) {
  714. spin_unlock_irqrestore(&bus->lock, flags);
  715. return -EINVAL;
  716. }
  717. /* Turn off slave mode. */
  718. func_ctrl_reg_val = readl(bus->base + ASPEED_I2C_FUN_CTRL_REG);
  719. func_ctrl_reg_val &= ~ASPEED_I2CD_SLAVE_EN;
  720. writel(func_ctrl_reg_val, bus->base + ASPEED_I2C_FUN_CTRL_REG);
  721. bus->slave = NULL;
  722. spin_unlock_irqrestore(&bus->lock, flags);
  723. return 0;
  724. }
  725. #endif /* CONFIG_I2C_SLAVE */
  726. static const struct i2c_algorithm aspeed_i2c_algo = {
  727. .master_xfer = aspeed_i2c_master_xfer,
  728. .functionality = aspeed_i2c_functionality,
  729. #if IS_ENABLED(CONFIG_I2C_SLAVE)
  730. .reg_slave = aspeed_i2c_reg_slave,
  731. .unreg_slave = aspeed_i2c_unreg_slave,
  732. #endif /* CONFIG_I2C_SLAVE */
  733. };
  734. static u32 aspeed_i2c_get_clk_reg_val(struct device *dev,
  735. u32 clk_high_low_mask,
  736. u32 divisor)
  737. {
  738. u32 base_clk_divisor, clk_high_low_max, clk_high, clk_low, tmp;
  739. /*
  740. * SCL_high and SCL_low represent a value 1 greater than what is stored
  741. * since a zero divider is meaningless. Thus, the max value each can
  742. * store is every bit set + 1. Since SCL_high and SCL_low are added
  743. * together (see below), the max value of both is the max value of one
  744. * them times two.
  745. */
  746. clk_high_low_max = (clk_high_low_mask + 1) * 2;
  747. /*
  748. * The actual clock frequency of SCL is:
  749. * SCL_freq = APB_freq / (base_freq * (SCL_high + SCL_low))
  750. * = APB_freq / divisor
  751. * where base_freq is a programmable clock divider; its value is
  752. * base_freq = 1 << base_clk_divisor
  753. * SCL_high is the number of base_freq clock cycles that SCL stays high
  754. * and SCL_low is the number of base_freq clock cycles that SCL stays
  755. * low for a period of SCL.
  756. * The actual register has a minimum SCL_high and SCL_low minimum of 1;
  757. * thus, they start counting at zero. So
  758. * SCL_high = clk_high + 1
  759. * SCL_low = clk_low + 1
  760. * Thus,
  761. * SCL_freq = APB_freq /
  762. * ((1 << base_clk_divisor) * (clk_high + 1 + clk_low + 1))
  763. * The documentation recommends clk_high >= clk_high_max / 2 and
  764. * clk_low >= clk_low_max / 2 - 1 when possible; this last constraint
  765. * gives us the following solution:
  766. */
  767. base_clk_divisor = divisor > clk_high_low_max ?
  768. ilog2((divisor - 1) / clk_high_low_max) + 1 : 0;
  769. if (base_clk_divisor > ASPEED_I2CD_TIME_BASE_DIVISOR_MASK) {
  770. base_clk_divisor = ASPEED_I2CD_TIME_BASE_DIVISOR_MASK;
  771. clk_low = clk_high_low_mask;
  772. clk_high = clk_high_low_mask;
  773. dev_err(dev,
  774. "clamping clock divider: divider requested, %u, is greater than largest possible divider, %u.\n",
  775. divisor, (1 << base_clk_divisor) * clk_high_low_max);
  776. } else {
  777. tmp = (divisor + (1 << base_clk_divisor) - 1)
  778. >> base_clk_divisor;
  779. clk_low = tmp / 2;
  780. clk_high = tmp - clk_low;
  781. if (clk_high)
  782. clk_high--;
  783. if (clk_low)
  784. clk_low--;
  785. }
  786. return ((clk_high << ASPEED_I2CD_TIME_SCL_HIGH_SHIFT)
  787. & ASPEED_I2CD_TIME_SCL_HIGH_MASK)
  788. | ((clk_low << ASPEED_I2CD_TIME_SCL_LOW_SHIFT)
  789. & ASPEED_I2CD_TIME_SCL_LOW_MASK)
  790. | (base_clk_divisor
  791. & ASPEED_I2CD_TIME_BASE_DIVISOR_MASK);
  792. }
  793. static u32 aspeed_i2c_24xx_get_clk_reg_val(struct device *dev, u32 divisor)
  794. {
  795. /*
  796. * clk_high and clk_low are each 3 bits wide, so each can hold a max
  797. * value of 8 giving a clk_high_low_max of 16.
  798. */
  799. return aspeed_i2c_get_clk_reg_val(dev, GENMASK(2, 0), divisor);
  800. }
  801. static u32 aspeed_i2c_25xx_get_clk_reg_val(struct device *dev, u32 divisor)
  802. {
  803. /*
  804. * clk_high and clk_low are each 4 bits wide, so each can hold a max
  805. * value of 16 giving a clk_high_low_max of 32.
  806. */
  807. return aspeed_i2c_get_clk_reg_val(dev, GENMASK(3, 0), divisor);
  808. }
  809. /* precondition: bus.lock has been acquired. */
  810. static int aspeed_i2c_init_clk(struct aspeed_i2c_bus *bus)
  811. {
  812. u32 divisor, clk_reg_val;
  813. divisor = DIV_ROUND_UP(bus->parent_clk_frequency, bus->bus_frequency);
  814. clk_reg_val = readl(bus->base + ASPEED_I2C_AC_TIMING_REG1);
  815. clk_reg_val &= (ASPEED_I2CD_TIME_TBUF_MASK |
  816. ASPEED_I2CD_TIME_THDSTA_MASK |
  817. ASPEED_I2CD_TIME_TACST_MASK);
  818. clk_reg_val |= bus->get_clk_reg_val(bus->dev, divisor);
  819. writel(clk_reg_val, bus->base + ASPEED_I2C_AC_TIMING_REG1);
  820. writel(ASPEED_NO_TIMEOUT_CTRL, bus->base + ASPEED_I2C_AC_TIMING_REG2);
  821. return 0;
  822. }
  823. /* precondition: bus.lock has been acquired. */
  824. static int aspeed_i2c_init(struct aspeed_i2c_bus *bus,
  825. struct platform_device *pdev)
  826. {
  827. u32 fun_ctrl_reg = ASPEED_I2CD_MASTER_EN;
  828. int ret;
  829. /* Disable everything. */
  830. writel(0, bus->base + ASPEED_I2C_FUN_CTRL_REG);
  831. ret = aspeed_i2c_init_clk(bus);
  832. if (ret < 0)
  833. return ret;
  834. if (of_property_read_bool(pdev->dev.of_node, "multi-master"))
  835. bus->multi_master = true;
  836. else
  837. fun_ctrl_reg |= ASPEED_I2CD_MULTI_MASTER_DIS;
  838. /* Enable Master Mode */
  839. writel(readl(bus->base + ASPEED_I2C_FUN_CTRL_REG) | fun_ctrl_reg,
  840. bus->base + ASPEED_I2C_FUN_CTRL_REG);
  841. #if IS_ENABLED(CONFIG_I2C_SLAVE)
  842. /* If slave has already been registered, re-enable it. */
  843. if (bus->slave)
  844. __aspeed_i2c_reg_slave(bus, bus->slave->addr);
  845. #endif /* CONFIG_I2C_SLAVE */
  846. /* Set interrupt generation of I2C controller */
  847. writel(ASPEED_I2CD_INTR_ALL, bus->base + ASPEED_I2C_INTR_CTRL_REG);
  848. return 0;
  849. }
  850. static int aspeed_i2c_reset(struct aspeed_i2c_bus *bus)
  851. {
  852. struct platform_device *pdev = to_platform_device(bus->dev);
  853. unsigned long flags;
  854. int ret;
  855. spin_lock_irqsave(&bus->lock, flags);
  856. /* Disable and ack all interrupts. */
  857. writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
  858. writel(0xffffffff, bus->base + ASPEED_I2C_INTR_STS_REG);
  859. ret = aspeed_i2c_init(bus, pdev);
  860. spin_unlock_irqrestore(&bus->lock, flags);
  861. return ret;
  862. }
  863. static const struct of_device_id aspeed_i2c_bus_of_table[] = {
  864. {
  865. .compatible = "aspeed,ast2400-i2c-bus",
  866. .data = aspeed_i2c_24xx_get_clk_reg_val,
  867. },
  868. {
  869. .compatible = "aspeed,ast2500-i2c-bus",
  870. .data = aspeed_i2c_25xx_get_clk_reg_val,
  871. },
  872. {
  873. .compatible = "aspeed,ast2600-i2c-bus",
  874. .data = aspeed_i2c_25xx_get_clk_reg_val,
  875. },
  876. { }
  877. };
  878. MODULE_DEVICE_TABLE(of, aspeed_i2c_bus_of_table);
  879. static int aspeed_i2c_probe_bus(struct platform_device *pdev)
  880. {
  881. const struct of_device_id *match;
  882. struct aspeed_i2c_bus *bus;
  883. struct clk *parent_clk;
  884. int irq, ret;
  885. bus = devm_kzalloc(&pdev->dev, sizeof(*bus), GFP_KERNEL);
  886. if (!bus)
  887. return -ENOMEM;
  888. bus->base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
  889. if (IS_ERR(bus->base))
  890. return PTR_ERR(bus->base);
  891. parent_clk = devm_clk_get(&pdev->dev, NULL);
  892. if (IS_ERR(parent_clk))
  893. return PTR_ERR(parent_clk);
  894. bus->parent_clk_frequency = clk_get_rate(parent_clk);
  895. /* We just need the clock rate, we don't actually use the clk object. */
  896. devm_clk_put(&pdev->dev, parent_clk);
  897. bus->rst = devm_reset_control_get_shared(&pdev->dev, NULL);
  898. if (IS_ERR(bus->rst)) {
  899. dev_err(&pdev->dev,
  900. "missing or invalid reset controller device tree entry\n");
  901. return PTR_ERR(bus->rst);
  902. }
  903. reset_control_deassert(bus->rst);
  904. ret = of_property_read_u32(pdev->dev.of_node,
  905. "bus-frequency", &bus->bus_frequency);
  906. if (ret < 0) {
  907. dev_err(&pdev->dev,
  908. "Could not read bus-frequency property\n");
  909. bus->bus_frequency = I2C_MAX_STANDARD_MODE_FREQ;
  910. }
  911. match = of_match_node(aspeed_i2c_bus_of_table, pdev->dev.of_node);
  912. if (!match)
  913. bus->get_clk_reg_val = aspeed_i2c_24xx_get_clk_reg_val;
  914. else
  915. bus->get_clk_reg_val = (u32 (*)(struct device *, u32))
  916. match->data;
  917. /* Initialize the I2C adapter */
  918. spin_lock_init(&bus->lock);
  919. init_completion(&bus->cmd_complete);
  920. bus->adap.owner = THIS_MODULE;
  921. bus->adap.retries = 0;
  922. bus->adap.algo = &aspeed_i2c_algo;
  923. bus->adap.dev.parent = &pdev->dev;
  924. bus->adap.dev.of_node = pdev->dev.of_node;
  925. strscpy(bus->adap.name, pdev->name, sizeof(bus->adap.name));
  926. i2c_set_adapdata(&bus->adap, bus);
  927. bus->dev = &pdev->dev;
  928. /* Clean up any left over interrupt state. */
  929. writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
  930. writel(0xffffffff, bus->base + ASPEED_I2C_INTR_STS_REG);
  931. /*
  932. * bus.lock does not need to be held because the interrupt handler has
  933. * not been enabled yet.
  934. */
  935. ret = aspeed_i2c_init(bus, pdev);
  936. if (ret < 0)
  937. return ret;
  938. irq = irq_of_parse_and_map(pdev->dev.of_node, 0);
  939. ret = devm_request_irq(&pdev->dev, irq, aspeed_i2c_bus_irq,
  940. 0, dev_name(&pdev->dev), bus);
  941. if (ret < 0)
  942. return ret;
  943. ret = i2c_add_adapter(&bus->adap);
  944. if (ret < 0)
  945. return ret;
  946. platform_set_drvdata(pdev, bus);
  947. dev_info(bus->dev, "i2c bus %d registered, irq %d\n",
  948. bus->adap.nr, irq);
  949. return 0;
  950. }
  951. static void aspeed_i2c_remove_bus(struct platform_device *pdev)
  952. {
  953. struct aspeed_i2c_bus *bus = platform_get_drvdata(pdev);
  954. unsigned long flags;
  955. spin_lock_irqsave(&bus->lock, flags);
  956. /* Disable everything. */
  957. writel(0, bus->base + ASPEED_I2C_FUN_CTRL_REG);
  958. writel(0, bus->base + ASPEED_I2C_INTR_CTRL_REG);
  959. spin_unlock_irqrestore(&bus->lock, flags);
  960. reset_control_assert(bus->rst);
  961. i2c_del_adapter(&bus->adap);
  962. }
  963. static struct platform_driver aspeed_i2c_bus_driver = {
  964. .probe = aspeed_i2c_probe_bus,
  965. .remove_new = aspeed_i2c_remove_bus,
  966. .driver = {
  967. .name = "aspeed-i2c-bus",
  968. .of_match_table = aspeed_i2c_bus_of_table,
  969. },
  970. };
  971. module_platform_driver(aspeed_i2c_bus_driver);
  972. MODULE_AUTHOR("Brendan Higgins <brendanhiggins@google.com>");
  973. MODULE_DESCRIPTION("Aspeed I2C Bus Driver");
  974. MODULE_LICENSE("GPL v2");