i2c-bcm-iproc.c 36 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. // Copyright (C) 2014 Broadcom Corporation
  3. #include <linux/delay.h>
  4. #include <linux/i2c.h>
  5. #include <linux/interrupt.h>
  6. #include <linux/io.h>
  7. #include <linux/kernel.h>
  8. #include <linux/module.h>
  9. #include <linux/of_device.h>
  10. #include <linux/platform_device.h>
  11. #include <linux/slab.h>
  12. #define IDM_CTRL_DIRECT_OFFSET 0x00
  13. #define CFG_OFFSET 0x00
  14. #define CFG_RESET_SHIFT 31
  15. #define CFG_EN_SHIFT 30
  16. #define CFG_SLAVE_ADDR_0_SHIFT 28
  17. #define CFG_M_RETRY_CNT_SHIFT 16
  18. #define CFG_M_RETRY_CNT_MASK 0x0f
  19. #define TIM_CFG_OFFSET 0x04
  20. #define TIM_CFG_MODE_400_SHIFT 31
  21. #define TIM_RAND_SLAVE_STRETCH_SHIFT 24
  22. #define TIM_RAND_SLAVE_STRETCH_MASK 0x7f
  23. #define TIM_PERIODIC_SLAVE_STRETCH_SHIFT 16
  24. #define TIM_PERIODIC_SLAVE_STRETCH_MASK 0x7f
  25. #define S_CFG_SMBUS_ADDR_OFFSET 0x08
  26. #define S_CFG_EN_NIC_SMB_ADDR3_SHIFT 31
  27. #define S_CFG_NIC_SMB_ADDR3_SHIFT 24
  28. #define S_CFG_NIC_SMB_ADDR3_MASK 0x7f
  29. #define S_CFG_EN_NIC_SMB_ADDR2_SHIFT 23
  30. #define S_CFG_NIC_SMB_ADDR2_SHIFT 16
  31. #define S_CFG_NIC_SMB_ADDR2_MASK 0x7f
  32. #define S_CFG_EN_NIC_SMB_ADDR1_SHIFT 15
  33. #define S_CFG_NIC_SMB_ADDR1_SHIFT 8
  34. #define S_CFG_NIC_SMB_ADDR1_MASK 0x7f
  35. #define S_CFG_EN_NIC_SMB_ADDR0_SHIFT 7
  36. #define S_CFG_NIC_SMB_ADDR0_SHIFT 0
  37. #define S_CFG_NIC_SMB_ADDR0_MASK 0x7f
  38. #define M_FIFO_CTRL_OFFSET 0x0c
  39. #define M_FIFO_RX_FLUSH_SHIFT 31
  40. #define M_FIFO_TX_FLUSH_SHIFT 30
  41. #define M_FIFO_RX_CNT_SHIFT 16
  42. #define M_FIFO_RX_CNT_MASK 0x7f
  43. #define M_FIFO_RX_THLD_SHIFT 8
  44. #define M_FIFO_RX_THLD_MASK 0x3f
  45. #define S_FIFO_CTRL_OFFSET 0x10
  46. #define S_FIFO_RX_FLUSH_SHIFT 31
  47. #define S_FIFO_TX_FLUSH_SHIFT 30
  48. #define S_FIFO_RX_CNT_SHIFT 16
  49. #define S_FIFO_RX_CNT_MASK 0x7f
  50. #define S_FIFO_RX_THLD_SHIFT 8
  51. #define S_FIFO_RX_THLD_MASK 0x3f
  52. #define M_CMD_OFFSET 0x30
  53. #define M_CMD_START_BUSY_SHIFT 31
  54. #define M_CMD_STATUS_SHIFT 25
  55. #define M_CMD_STATUS_MASK 0x07
  56. #define M_CMD_STATUS_SUCCESS 0x0
  57. #define M_CMD_STATUS_LOST_ARB 0x1
  58. #define M_CMD_STATUS_NACK_ADDR 0x2
  59. #define M_CMD_STATUS_NACK_DATA 0x3
  60. #define M_CMD_STATUS_TIMEOUT 0x4
  61. #define M_CMD_STATUS_FIFO_UNDERRUN 0x5
  62. #define M_CMD_STATUS_RX_FIFO_FULL 0x6
  63. #define M_CMD_PROTOCOL_SHIFT 9
  64. #define M_CMD_PROTOCOL_MASK 0xf
  65. #define M_CMD_PROTOCOL_QUICK 0x0
  66. #define M_CMD_PROTOCOL_BLK_WR 0x7
  67. #define M_CMD_PROTOCOL_BLK_RD 0x8
  68. #define M_CMD_PROTOCOL_PROCESS 0xa
  69. #define M_CMD_PEC_SHIFT 8
  70. #define M_CMD_RD_CNT_SHIFT 0
  71. #define M_CMD_RD_CNT_MASK 0xff
  72. #define S_CMD_OFFSET 0x34
  73. #define S_CMD_START_BUSY_SHIFT 31
  74. #define S_CMD_STATUS_SHIFT 23
  75. #define S_CMD_STATUS_MASK 0x07
  76. #define S_CMD_STATUS_SUCCESS 0x0
  77. #define S_CMD_STATUS_TIMEOUT 0x5
  78. #define S_CMD_STATUS_MASTER_ABORT 0x7
  79. #define IE_OFFSET 0x38
  80. #define IE_M_RX_FIFO_FULL_SHIFT 31
  81. #define IE_M_RX_THLD_SHIFT 30
  82. #define IE_M_START_BUSY_SHIFT 28
  83. #define IE_M_TX_UNDERRUN_SHIFT 27
  84. #define IE_S_RX_FIFO_FULL_SHIFT 26
  85. #define IE_S_RX_THLD_SHIFT 25
  86. #define IE_S_RX_EVENT_SHIFT 24
  87. #define IE_S_START_BUSY_SHIFT 23
  88. #define IE_S_TX_UNDERRUN_SHIFT 22
  89. #define IE_S_RD_EVENT_SHIFT 21
  90. #define IS_OFFSET 0x3c
  91. #define IS_M_RX_FIFO_FULL_SHIFT 31
  92. #define IS_M_RX_THLD_SHIFT 30
  93. #define IS_M_START_BUSY_SHIFT 28
  94. #define IS_M_TX_UNDERRUN_SHIFT 27
  95. #define IS_S_RX_FIFO_FULL_SHIFT 26
  96. #define IS_S_RX_THLD_SHIFT 25
  97. #define IS_S_RX_EVENT_SHIFT 24
  98. #define IS_S_START_BUSY_SHIFT 23
  99. #define IS_S_TX_UNDERRUN_SHIFT 22
  100. #define IS_S_RD_EVENT_SHIFT 21
  101. #define M_TX_OFFSET 0x40
  102. #define M_TX_WR_STATUS_SHIFT 31
  103. #define M_TX_DATA_SHIFT 0
  104. #define M_TX_DATA_MASK 0xff
  105. #define M_RX_OFFSET 0x44
  106. #define M_RX_STATUS_SHIFT 30
  107. #define M_RX_STATUS_MASK 0x03
  108. #define M_RX_PEC_ERR_SHIFT 29
  109. #define M_RX_DATA_SHIFT 0
  110. #define M_RX_DATA_MASK 0xff
  111. #define S_TX_OFFSET 0x48
  112. #define S_TX_WR_STATUS_SHIFT 31
  113. #define S_TX_DATA_SHIFT 0
  114. #define S_TX_DATA_MASK 0xff
  115. #define S_RX_OFFSET 0x4c
  116. #define S_RX_STATUS_SHIFT 30
  117. #define S_RX_STATUS_MASK 0x03
  118. #define S_RX_PEC_ERR_SHIFT 29
  119. #define S_RX_DATA_SHIFT 0
  120. #define S_RX_DATA_MASK 0xff
  121. #define I2C_TIMEOUT_MSEC 50000
  122. #define M_TX_RX_FIFO_SIZE 64
  123. #define M_RX_FIFO_MAX_THLD_VALUE (M_TX_RX_FIFO_SIZE - 1)
  124. #define M_RX_MAX_READ_LEN 255
  125. #define M_RX_FIFO_THLD_VALUE 50
  126. #define IE_M_ALL_INTERRUPT_SHIFT 27
  127. #define IE_M_ALL_INTERRUPT_MASK 0x1e
  128. #define SLAVE_READ_WRITE_BIT_MASK 0x1
  129. #define SLAVE_READ_WRITE_BIT_SHIFT 0x1
  130. #define SLAVE_MAX_SIZE_TRANSACTION 64
  131. #define SLAVE_CLOCK_STRETCH_TIME 25
  132. #define IE_S_ALL_INTERRUPT_SHIFT 21
  133. #define IE_S_ALL_INTERRUPT_MASK 0x3f
  134. /*
  135. * It takes ~18us to reading 10bytes of data, hence to keep tasklet
  136. * running for less time, max slave read per tasklet is set to 10 bytes.
  137. */
  138. #define MAX_SLAVE_RX_PER_INT 10
  139. enum i2c_slave_read_status {
  140. I2C_SLAVE_RX_FIFO_EMPTY = 0,
  141. I2C_SLAVE_RX_START,
  142. I2C_SLAVE_RX_DATA,
  143. I2C_SLAVE_RX_END,
  144. };
  145. enum bus_speed_index {
  146. I2C_SPD_100K = 0,
  147. I2C_SPD_400K,
  148. };
  149. enum bcm_iproc_i2c_type {
  150. IPROC_I2C,
  151. IPROC_I2C_NIC
  152. };
  153. struct bcm_iproc_i2c_dev {
  154. struct device *device;
  155. enum bcm_iproc_i2c_type type;
  156. int irq;
  157. void __iomem *base;
  158. void __iomem *idm_base;
  159. u32 ape_addr_mask;
  160. /* lock for indirect access through IDM */
  161. spinlock_t idm_lock;
  162. struct i2c_adapter adapter;
  163. unsigned int bus_speed;
  164. struct completion done;
  165. int xfer_is_done;
  166. struct i2c_msg *msg;
  167. struct i2c_client *slave;
  168. /* bytes that have been transferred */
  169. unsigned int tx_bytes;
  170. /* bytes that have been read */
  171. unsigned int rx_bytes;
  172. unsigned int thld_bytes;
  173. bool slave_rx_only;
  174. bool rx_start_rcvd;
  175. bool slave_read_complete;
  176. u32 tx_underrun;
  177. u32 slave_int_mask;
  178. struct tasklet_struct slave_rx_tasklet;
  179. };
  180. /* tasklet to process slave rx data */
  181. static void slave_rx_tasklet_fn(unsigned long);
  182. /*
  183. * Can be expanded in the future if more interrupt status bits are utilized
  184. */
  185. #define ISR_MASK (BIT(IS_M_START_BUSY_SHIFT) | BIT(IS_M_TX_UNDERRUN_SHIFT)\
  186. | BIT(IS_M_RX_THLD_SHIFT))
  187. #define ISR_MASK_SLAVE (BIT(IS_S_START_BUSY_SHIFT)\
  188. | BIT(IS_S_RX_EVENT_SHIFT) | BIT(IS_S_RD_EVENT_SHIFT)\
  189. | BIT(IS_S_TX_UNDERRUN_SHIFT) | BIT(IS_S_RX_FIFO_FULL_SHIFT)\
  190. | BIT(IS_S_RX_THLD_SHIFT))
  191. static int bcm_iproc_i2c_reg_slave(struct i2c_client *slave);
  192. static int bcm_iproc_i2c_unreg_slave(struct i2c_client *slave);
  193. static void bcm_iproc_i2c_enable_disable(struct bcm_iproc_i2c_dev *iproc_i2c,
  194. bool enable);
  195. static inline u32 iproc_i2c_rd_reg(struct bcm_iproc_i2c_dev *iproc_i2c,
  196. u32 offset)
  197. {
  198. u32 val;
  199. unsigned long flags;
  200. if (iproc_i2c->idm_base) {
  201. spin_lock_irqsave(&iproc_i2c->idm_lock, flags);
  202. writel(iproc_i2c->ape_addr_mask,
  203. iproc_i2c->idm_base + IDM_CTRL_DIRECT_OFFSET);
  204. val = readl(iproc_i2c->base + offset);
  205. spin_unlock_irqrestore(&iproc_i2c->idm_lock, flags);
  206. } else {
  207. val = readl(iproc_i2c->base + offset);
  208. }
  209. return val;
  210. }
  211. static inline void iproc_i2c_wr_reg(struct bcm_iproc_i2c_dev *iproc_i2c,
  212. u32 offset, u32 val)
  213. {
  214. unsigned long flags;
  215. if (iproc_i2c->idm_base) {
  216. spin_lock_irqsave(&iproc_i2c->idm_lock, flags);
  217. writel(iproc_i2c->ape_addr_mask,
  218. iproc_i2c->idm_base + IDM_CTRL_DIRECT_OFFSET);
  219. writel(val, iproc_i2c->base + offset);
  220. spin_unlock_irqrestore(&iproc_i2c->idm_lock, flags);
  221. } else {
  222. writel(val, iproc_i2c->base + offset);
  223. }
  224. }
  225. static void bcm_iproc_i2c_slave_init(
  226. struct bcm_iproc_i2c_dev *iproc_i2c, bool need_reset)
  227. {
  228. u32 val;
  229. iproc_i2c->tx_underrun = 0;
  230. if (need_reset) {
  231. /* put controller in reset */
  232. val = iproc_i2c_rd_reg(iproc_i2c, CFG_OFFSET);
  233. val |= BIT(CFG_RESET_SHIFT);
  234. iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val);
  235. /* wait 100 usec per spec */
  236. udelay(100);
  237. /* bring controller out of reset */
  238. val &= ~(BIT(CFG_RESET_SHIFT));
  239. iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val);
  240. }
  241. /* flush TX/RX FIFOs */
  242. val = (BIT(S_FIFO_RX_FLUSH_SHIFT) | BIT(S_FIFO_TX_FLUSH_SHIFT));
  243. iproc_i2c_wr_reg(iproc_i2c, S_FIFO_CTRL_OFFSET, val);
  244. /* Maximum slave stretch time */
  245. val = iproc_i2c_rd_reg(iproc_i2c, TIM_CFG_OFFSET);
  246. val &= ~(TIM_RAND_SLAVE_STRETCH_MASK << TIM_RAND_SLAVE_STRETCH_SHIFT);
  247. val |= (SLAVE_CLOCK_STRETCH_TIME << TIM_RAND_SLAVE_STRETCH_SHIFT);
  248. iproc_i2c_wr_reg(iproc_i2c, TIM_CFG_OFFSET, val);
  249. /* Configure the slave address */
  250. val = iproc_i2c_rd_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET);
  251. val |= BIT(S_CFG_EN_NIC_SMB_ADDR3_SHIFT);
  252. val &= ~(S_CFG_NIC_SMB_ADDR3_MASK << S_CFG_NIC_SMB_ADDR3_SHIFT);
  253. val |= (iproc_i2c->slave->addr << S_CFG_NIC_SMB_ADDR3_SHIFT);
  254. iproc_i2c_wr_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET, val);
  255. /* clear all pending slave interrupts */
  256. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, ISR_MASK_SLAVE);
  257. /* Enable interrupt register to indicate a valid byte in receive fifo */
  258. val = BIT(IE_S_RX_EVENT_SHIFT);
  259. /* Enable interrupt register to indicate Slave Rx FIFO Full */
  260. val |= BIT(IE_S_RX_FIFO_FULL_SHIFT);
  261. /* Enable interrupt register to indicate a Master read transaction */
  262. val |= BIT(IE_S_RD_EVENT_SHIFT);
  263. /* Enable interrupt register for the Slave BUSY command */
  264. val |= BIT(IE_S_START_BUSY_SHIFT);
  265. iproc_i2c->slave_int_mask = val;
  266. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val);
  267. }
  268. static bool bcm_iproc_i2c_check_slave_status
  269. (struct bcm_iproc_i2c_dev *iproc_i2c, u32 status)
  270. {
  271. u32 val;
  272. bool recover = false;
  273. /* check slave transmit status only if slave is transmitting */
  274. if (!iproc_i2c->slave_rx_only) {
  275. val = iproc_i2c_rd_reg(iproc_i2c, S_CMD_OFFSET);
  276. /* status is valid only when START_BUSY is cleared */
  277. if (!(val & BIT(S_CMD_START_BUSY_SHIFT))) {
  278. val = (val >> S_CMD_STATUS_SHIFT) & S_CMD_STATUS_MASK;
  279. if (val == S_CMD_STATUS_TIMEOUT ||
  280. val == S_CMD_STATUS_MASTER_ABORT) {
  281. dev_warn(iproc_i2c->device,
  282. (val == S_CMD_STATUS_TIMEOUT) ?
  283. "slave random stretch time timeout\n" :
  284. "Master aborted read transaction\n");
  285. recover = true;
  286. }
  287. }
  288. }
  289. /* RX_EVENT is not valid when START_BUSY is set */
  290. if ((status & BIT(IS_S_RX_EVENT_SHIFT)) &&
  291. (status & BIT(IS_S_START_BUSY_SHIFT))) {
  292. dev_warn(iproc_i2c->device, "Slave aborted read transaction\n");
  293. recover = true;
  294. }
  295. if (recover) {
  296. /* re-initialize i2c for recovery */
  297. bcm_iproc_i2c_enable_disable(iproc_i2c, false);
  298. bcm_iproc_i2c_slave_init(iproc_i2c, true);
  299. bcm_iproc_i2c_enable_disable(iproc_i2c, true);
  300. }
  301. return recover;
  302. }
  303. static void bcm_iproc_i2c_slave_read(struct bcm_iproc_i2c_dev *iproc_i2c)
  304. {
  305. u8 rx_data, rx_status;
  306. u32 rx_bytes = 0;
  307. u32 val;
  308. while (rx_bytes < MAX_SLAVE_RX_PER_INT) {
  309. val = iproc_i2c_rd_reg(iproc_i2c, S_RX_OFFSET);
  310. rx_status = (val >> S_RX_STATUS_SHIFT) & S_RX_STATUS_MASK;
  311. rx_data = ((val >> S_RX_DATA_SHIFT) & S_RX_DATA_MASK);
  312. if (rx_status == I2C_SLAVE_RX_START) {
  313. /* Start of SMBUS Master write */
  314. i2c_slave_event(iproc_i2c->slave,
  315. I2C_SLAVE_WRITE_REQUESTED, &rx_data);
  316. iproc_i2c->rx_start_rcvd = true;
  317. iproc_i2c->slave_read_complete = false;
  318. } else if (rx_status == I2C_SLAVE_RX_DATA &&
  319. iproc_i2c->rx_start_rcvd) {
  320. /* Middle of SMBUS Master write */
  321. i2c_slave_event(iproc_i2c->slave,
  322. I2C_SLAVE_WRITE_RECEIVED, &rx_data);
  323. } else if (rx_status == I2C_SLAVE_RX_END &&
  324. iproc_i2c->rx_start_rcvd) {
  325. /* End of SMBUS Master write */
  326. if (iproc_i2c->slave_rx_only)
  327. i2c_slave_event(iproc_i2c->slave,
  328. I2C_SLAVE_WRITE_RECEIVED,
  329. &rx_data);
  330. i2c_slave_event(iproc_i2c->slave, I2C_SLAVE_STOP,
  331. &rx_data);
  332. } else if (rx_status == I2C_SLAVE_RX_FIFO_EMPTY) {
  333. iproc_i2c->rx_start_rcvd = false;
  334. iproc_i2c->slave_read_complete = true;
  335. break;
  336. }
  337. rx_bytes++;
  338. }
  339. }
  340. static void slave_rx_tasklet_fn(unsigned long data)
  341. {
  342. struct bcm_iproc_i2c_dev *iproc_i2c = (struct bcm_iproc_i2c_dev *)data;
  343. u32 int_clr;
  344. bcm_iproc_i2c_slave_read(iproc_i2c);
  345. /* clear pending IS_S_RX_EVENT_SHIFT interrupt */
  346. int_clr = BIT(IS_S_RX_EVENT_SHIFT);
  347. if (!iproc_i2c->slave_rx_only && iproc_i2c->slave_read_complete) {
  348. /*
  349. * In case of single byte master-read request,
  350. * IS_S_TX_UNDERRUN_SHIFT event is generated before
  351. * IS_S_START_BUSY_SHIFT event. Hence start slave data send
  352. * from first IS_S_TX_UNDERRUN_SHIFT event.
  353. *
  354. * This means don't send any data from slave when
  355. * IS_S_RD_EVENT_SHIFT event is generated else it will increment
  356. * eeprom or other backend slave driver read pointer twice.
  357. */
  358. iproc_i2c->tx_underrun = 0;
  359. iproc_i2c->slave_int_mask |= BIT(IE_S_TX_UNDERRUN_SHIFT);
  360. /* clear IS_S_RD_EVENT_SHIFT interrupt */
  361. int_clr |= BIT(IS_S_RD_EVENT_SHIFT);
  362. }
  363. /* clear slave interrupt */
  364. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, int_clr);
  365. /* enable slave interrupts */
  366. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, iproc_i2c->slave_int_mask);
  367. }
  368. static bool bcm_iproc_i2c_slave_isr(struct bcm_iproc_i2c_dev *iproc_i2c,
  369. u32 status)
  370. {
  371. u32 val;
  372. u8 value;
  373. if (status & BIT(IS_S_TX_UNDERRUN_SHIFT)) {
  374. iproc_i2c->tx_underrun++;
  375. if (iproc_i2c->tx_underrun == 1)
  376. /* Start of SMBUS for Master Read */
  377. i2c_slave_event(iproc_i2c->slave,
  378. I2C_SLAVE_READ_REQUESTED,
  379. &value);
  380. else
  381. /* Master read other than start */
  382. i2c_slave_event(iproc_i2c->slave,
  383. I2C_SLAVE_READ_PROCESSED,
  384. &value);
  385. iproc_i2c_wr_reg(iproc_i2c, S_TX_OFFSET, value);
  386. /* start transfer */
  387. val = BIT(S_CMD_START_BUSY_SHIFT);
  388. iproc_i2c_wr_reg(iproc_i2c, S_CMD_OFFSET, val);
  389. /* clear interrupt */
  390. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET,
  391. BIT(IS_S_TX_UNDERRUN_SHIFT));
  392. }
  393. /* Stop received from master in case of master read transaction */
  394. if (status & BIT(IS_S_START_BUSY_SHIFT)) {
  395. /*
  396. * Disable interrupt for TX FIFO becomes empty and
  397. * less than PKT_LENGTH bytes were output on the SMBUS
  398. */
  399. iproc_i2c->slave_int_mask &= ~BIT(IE_S_TX_UNDERRUN_SHIFT);
  400. val = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  401. val &= ~BIT(IE_S_TX_UNDERRUN_SHIFT);
  402. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val);
  403. /* End of SMBUS for Master Read */
  404. val = BIT(S_TX_WR_STATUS_SHIFT);
  405. iproc_i2c_wr_reg(iproc_i2c, S_TX_OFFSET, val);
  406. val = BIT(S_CMD_START_BUSY_SHIFT);
  407. iproc_i2c_wr_reg(iproc_i2c, S_CMD_OFFSET, val);
  408. /* flush TX FIFOs */
  409. val = iproc_i2c_rd_reg(iproc_i2c, S_FIFO_CTRL_OFFSET);
  410. val |= (BIT(S_FIFO_TX_FLUSH_SHIFT));
  411. iproc_i2c_wr_reg(iproc_i2c, S_FIFO_CTRL_OFFSET, val);
  412. i2c_slave_event(iproc_i2c->slave, I2C_SLAVE_STOP, &value);
  413. /* clear interrupt */
  414. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET,
  415. BIT(IS_S_START_BUSY_SHIFT));
  416. }
  417. /* if the controller has been reset, immediately return from the ISR */
  418. if (bcm_iproc_i2c_check_slave_status(iproc_i2c, status))
  419. return true;
  420. /*
  421. * Slave events in case of master-write, master-write-read and,
  422. * master-read
  423. *
  424. * Master-write : only IS_S_RX_EVENT_SHIFT event
  425. * Master-write-read: both IS_S_RX_EVENT_SHIFT and IS_S_RD_EVENT_SHIFT
  426. * events
  427. * Master-read : both IS_S_RX_EVENT_SHIFT and IS_S_RD_EVENT_SHIFT
  428. * events or only IS_S_RD_EVENT_SHIFT
  429. *
  430. * iproc has a slave rx fifo size of 64 bytes. Rx fifo full interrupt
  431. * (IS_S_RX_FIFO_FULL_SHIFT) will be generated when RX fifo becomes
  432. * full. This can happen if Master issues write requests of more than
  433. * 64 bytes.
  434. */
  435. if (status & BIT(IS_S_RX_EVENT_SHIFT) ||
  436. status & BIT(IS_S_RD_EVENT_SHIFT) ||
  437. status & BIT(IS_S_RX_FIFO_FULL_SHIFT)) {
  438. /* disable slave interrupts */
  439. val = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  440. val &= ~iproc_i2c->slave_int_mask;
  441. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val);
  442. if (status & BIT(IS_S_RD_EVENT_SHIFT))
  443. /* Master-write-read request */
  444. iproc_i2c->slave_rx_only = false;
  445. else
  446. /* Master-write request only */
  447. iproc_i2c->slave_rx_only = true;
  448. /* schedule tasklet to read data later */
  449. tasklet_schedule(&iproc_i2c->slave_rx_tasklet);
  450. /* clear IS_S_RX_FIFO_FULL_SHIFT interrupt */
  451. if (status & BIT(IS_S_RX_FIFO_FULL_SHIFT)) {
  452. val = BIT(IS_S_RX_FIFO_FULL_SHIFT);
  453. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, val);
  454. }
  455. }
  456. return true;
  457. }
  458. static void bcm_iproc_i2c_read_valid_bytes(struct bcm_iproc_i2c_dev *iproc_i2c)
  459. {
  460. struct i2c_msg *msg = iproc_i2c->msg;
  461. uint32_t val;
  462. /* Read valid data from RX FIFO */
  463. while (iproc_i2c->rx_bytes < msg->len) {
  464. val = iproc_i2c_rd_reg(iproc_i2c, M_RX_OFFSET);
  465. /* rx fifo empty */
  466. if (!((val >> M_RX_STATUS_SHIFT) & M_RX_STATUS_MASK))
  467. break;
  468. msg->buf[iproc_i2c->rx_bytes] =
  469. (val >> M_RX_DATA_SHIFT) & M_RX_DATA_MASK;
  470. iproc_i2c->rx_bytes++;
  471. }
  472. }
  473. static void bcm_iproc_i2c_send(struct bcm_iproc_i2c_dev *iproc_i2c)
  474. {
  475. struct i2c_msg *msg = iproc_i2c->msg;
  476. unsigned int tx_bytes = msg->len - iproc_i2c->tx_bytes;
  477. unsigned int i;
  478. u32 val;
  479. /* can only fill up to the FIFO size */
  480. tx_bytes = min_t(unsigned int, tx_bytes, M_TX_RX_FIFO_SIZE);
  481. for (i = 0; i < tx_bytes; i++) {
  482. /* start from where we left over */
  483. unsigned int idx = iproc_i2c->tx_bytes + i;
  484. val = msg->buf[idx];
  485. /* mark the last byte */
  486. if (idx == msg->len - 1) {
  487. val |= BIT(M_TX_WR_STATUS_SHIFT);
  488. if (iproc_i2c->irq) {
  489. u32 tmp;
  490. /*
  491. * Since this is the last byte, we should now
  492. * disable TX FIFO underrun interrupt
  493. */
  494. tmp = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  495. tmp &= ~BIT(IE_M_TX_UNDERRUN_SHIFT);
  496. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET,
  497. tmp);
  498. }
  499. }
  500. /* load data into TX FIFO */
  501. iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val);
  502. }
  503. /* update number of transferred bytes */
  504. iproc_i2c->tx_bytes += tx_bytes;
  505. }
  506. static void bcm_iproc_i2c_read(struct bcm_iproc_i2c_dev *iproc_i2c)
  507. {
  508. struct i2c_msg *msg = iproc_i2c->msg;
  509. u32 bytes_left, val;
  510. bcm_iproc_i2c_read_valid_bytes(iproc_i2c);
  511. bytes_left = msg->len - iproc_i2c->rx_bytes;
  512. if (bytes_left == 0) {
  513. if (iproc_i2c->irq) {
  514. /* finished reading all data, disable rx thld event */
  515. val = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  516. val &= ~BIT(IS_M_RX_THLD_SHIFT);
  517. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val);
  518. }
  519. } else if (bytes_left < iproc_i2c->thld_bytes) {
  520. /* set bytes left as threshold */
  521. val = iproc_i2c_rd_reg(iproc_i2c, M_FIFO_CTRL_OFFSET);
  522. val &= ~(M_FIFO_RX_THLD_MASK << M_FIFO_RX_THLD_SHIFT);
  523. val |= (bytes_left << M_FIFO_RX_THLD_SHIFT);
  524. iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val);
  525. iproc_i2c->thld_bytes = bytes_left;
  526. }
  527. /*
  528. * bytes_left >= iproc_i2c->thld_bytes,
  529. * hence no need to change the THRESHOLD SET.
  530. * It will remain as iproc_i2c->thld_bytes itself
  531. */
  532. }
  533. static void bcm_iproc_i2c_process_m_event(struct bcm_iproc_i2c_dev *iproc_i2c,
  534. u32 status)
  535. {
  536. /* TX FIFO is empty and we have more data to send */
  537. if (status & BIT(IS_M_TX_UNDERRUN_SHIFT))
  538. bcm_iproc_i2c_send(iproc_i2c);
  539. /* RX FIFO threshold is reached and data needs to be read out */
  540. if (status & BIT(IS_M_RX_THLD_SHIFT))
  541. bcm_iproc_i2c_read(iproc_i2c);
  542. /* transfer is done */
  543. if (status & BIT(IS_M_START_BUSY_SHIFT)) {
  544. iproc_i2c->xfer_is_done = 1;
  545. if (iproc_i2c->irq)
  546. complete(&iproc_i2c->done);
  547. }
  548. }
  549. static irqreturn_t bcm_iproc_i2c_isr(int irq, void *data)
  550. {
  551. struct bcm_iproc_i2c_dev *iproc_i2c = data;
  552. u32 slave_status;
  553. u32 status;
  554. bool ret;
  555. status = iproc_i2c_rd_reg(iproc_i2c, IS_OFFSET);
  556. /* process only slave interrupt which are enabled */
  557. slave_status = status & iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET) &
  558. ISR_MASK_SLAVE;
  559. if (slave_status) {
  560. ret = bcm_iproc_i2c_slave_isr(iproc_i2c, slave_status);
  561. if (ret)
  562. return IRQ_HANDLED;
  563. else
  564. return IRQ_NONE;
  565. }
  566. status &= ISR_MASK;
  567. if (!status)
  568. return IRQ_NONE;
  569. /* process all master based events */
  570. bcm_iproc_i2c_process_m_event(iproc_i2c, status);
  571. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, status);
  572. return IRQ_HANDLED;
  573. }
  574. static int bcm_iproc_i2c_init(struct bcm_iproc_i2c_dev *iproc_i2c)
  575. {
  576. u32 val;
  577. /* put controller in reset */
  578. val = iproc_i2c_rd_reg(iproc_i2c, CFG_OFFSET);
  579. val |= BIT(CFG_RESET_SHIFT);
  580. val &= ~(BIT(CFG_EN_SHIFT));
  581. iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val);
  582. /* wait 100 usec per spec */
  583. udelay(100);
  584. /* bring controller out of reset */
  585. val &= ~(BIT(CFG_RESET_SHIFT));
  586. iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val);
  587. /* flush TX/RX FIFOs and set RX FIFO threshold to zero */
  588. val = (BIT(M_FIFO_RX_FLUSH_SHIFT) | BIT(M_FIFO_TX_FLUSH_SHIFT));
  589. iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val);
  590. /* disable all interrupts */
  591. val = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  592. val &= ~(IE_M_ALL_INTERRUPT_MASK <<
  593. IE_M_ALL_INTERRUPT_SHIFT);
  594. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val);
  595. /* clear all pending interrupts */
  596. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, 0xffffffff);
  597. return 0;
  598. }
  599. static void bcm_iproc_i2c_enable_disable(struct bcm_iproc_i2c_dev *iproc_i2c,
  600. bool enable)
  601. {
  602. u32 val;
  603. val = iproc_i2c_rd_reg(iproc_i2c, CFG_OFFSET);
  604. if (enable)
  605. val |= BIT(CFG_EN_SHIFT);
  606. else
  607. val &= ~BIT(CFG_EN_SHIFT);
  608. iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val);
  609. }
  610. static int bcm_iproc_i2c_check_status(struct bcm_iproc_i2c_dev *iproc_i2c,
  611. struct i2c_msg *msg)
  612. {
  613. u32 val;
  614. val = iproc_i2c_rd_reg(iproc_i2c, M_CMD_OFFSET);
  615. val = (val >> M_CMD_STATUS_SHIFT) & M_CMD_STATUS_MASK;
  616. switch (val) {
  617. case M_CMD_STATUS_SUCCESS:
  618. return 0;
  619. case M_CMD_STATUS_LOST_ARB:
  620. dev_dbg(iproc_i2c->device, "lost bus arbitration\n");
  621. return -EAGAIN;
  622. case M_CMD_STATUS_NACK_ADDR:
  623. dev_dbg(iproc_i2c->device, "NAK addr:0x%02x\n", msg->addr);
  624. return -ENXIO;
  625. case M_CMD_STATUS_NACK_DATA:
  626. dev_dbg(iproc_i2c->device, "NAK data\n");
  627. return -ENXIO;
  628. case M_CMD_STATUS_TIMEOUT:
  629. dev_dbg(iproc_i2c->device, "bus timeout\n");
  630. return -ETIMEDOUT;
  631. case M_CMD_STATUS_FIFO_UNDERRUN:
  632. dev_dbg(iproc_i2c->device, "FIFO under-run\n");
  633. return -ENXIO;
  634. case M_CMD_STATUS_RX_FIFO_FULL:
  635. dev_dbg(iproc_i2c->device, "RX FIFO full\n");
  636. return -ETIMEDOUT;
  637. default:
  638. dev_dbg(iproc_i2c->device, "unknown error code=%d\n", val);
  639. /* re-initialize i2c for recovery */
  640. bcm_iproc_i2c_enable_disable(iproc_i2c, false);
  641. bcm_iproc_i2c_init(iproc_i2c);
  642. bcm_iproc_i2c_enable_disable(iproc_i2c, true);
  643. return -EIO;
  644. }
  645. }
  646. static int bcm_iproc_i2c_xfer_wait(struct bcm_iproc_i2c_dev *iproc_i2c,
  647. struct i2c_msg *msg,
  648. u32 cmd)
  649. {
  650. unsigned long time_left = msecs_to_jiffies(I2C_TIMEOUT_MSEC);
  651. u32 val, status;
  652. int ret;
  653. iproc_i2c_wr_reg(iproc_i2c, M_CMD_OFFSET, cmd);
  654. if (iproc_i2c->irq) {
  655. time_left = wait_for_completion_timeout(&iproc_i2c->done,
  656. time_left);
  657. /* disable all interrupts */
  658. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, 0);
  659. /* read it back to flush the write */
  660. iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  661. /* make sure the interrupt handler isn't running */
  662. synchronize_irq(iproc_i2c->irq);
  663. } else { /* polling mode */
  664. unsigned long timeout = jiffies + time_left;
  665. do {
  666. status = iproc_i2c_rd_reg(iproc_i2c,
  667. IS_OFFSET) & ISR_MASK;
  668. bcm_iproc_i2c_process_m_event(iproc_i2c, status);
  669. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, status);
  670. if (time_after(jiffies, timeout)) {
  671. time_left = 0;
  672. break;
  673. }
  674. cpu_relax();
  675. cond_resched();
  676. } while (!iproc_i2c->xfer_is_done);
  677. }
  678. if (!time_left && !iproc_i2c->xfer_is_done) {
  679. dev_err(iproc_i2c->device, "transaction timed out\n");
  680. /* flush both TX/RX FIFOs */
  681. val = BIT(M_FIFO_RX_FLUSH_SHIFT) | BIT(M_FIFO_TX_FLUSH_SHIFT);
  682. iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val);
  683. return -ETIMEDOUT;
  684. }
  685. ret = bcm_iproc_i2c_check_status(iproc_i2c, msg);
  686. if (ret) {
  687. /* flush both TX/RX FIFOs */
  688. val = BIT(M_FIFO_RX_FLUSH_SHIFT) | BIT(M_FIFO_TX_FLUSH_SHIFT);
  689. iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val);
  690. return ret;
  691. }
  692. return 0;
  693. }
  694. /*
  695. * If 'process_call' is true, then this is a multi-msg transfer that requires
  696. * a repeated start between the messages.
  697. * More specifically, it must be a write (reg) followed by a read (data).
  698. * The i2c quirks are set to enforce this rule.
  699. */
  700. static int bcm_iproc_i2c_xfer_internal(struct bcm_iproc_i2c_dev *iproc_i2c,
  701. struct i2c_msg *msgs, bool process_call)
  702. {
  703. int i;
  704. u8 addr;
  705. u32 val, tmp, val_intr_en;
  706. unsigned int tx_bytes;
  707. struct i2c_msg *msg = &msgs[0];
  708. /* check if bus is busy */
  709. if (!!(iproc_i2c_rd_reg(iproc_i2c,
  710. M_CMD_OFFSET) & BIT(M_CMD_START_BUSY_SHIFT))) {
  711. dev_warn(iproc_i2c->device, "bus is busy\n");
  712. return -EBUSY;
  713. }
  714. iproc_i2c->msg = msg;
  715. /* format and load slave address into the TX FIFO */
  716. addr = i2c_8bit_addr_from_msg(msg);
  717. iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, addr);
  718. /*
  719. * For a write transaction, load data into the TX FIFO. Only allow
  720. * loading up to TX FIFO size - 1 bytes of data since the first byte
  721. * has been used up by the slave address
  722. */
  723. tx_bytes = min_t(unsigned int, msg->len, M_TX_RX_FIFO_SIZE - 1);
  724. if (!(msg->flags & I2C_M_RD)) {
  725. for (i = 0; i < tx_bytes; i++) {
  726. val = msg->buf[i];
  727. /* mark the last byte */
  728. if (!process_call && (i == msg->len - 1))
  729. val |= BIT(M_TX_WR_STATUS_SHIFT);
  730. iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val);
  731. }
  732. iproc_i2c->tx_bytes = tx_bytes;
  733. }
  734. /* Process the read message if this is process call */
  735. if (process_call) {
  736. msg++;
  737. iproc_i2c->msg = msg; /* point to second msg */
  738. /*
  739. * The last byte to be sent out should be a slave
  740. * address with read operation
  741. */
  742. addr = i2c_8bit_addr_from_msg(msg);
  743. /* mark it the last byte out */
  744. val = addr | BIT(M_TX_WR_STATUS_SHIFT);
  745. iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val);
  746. }
  747. /* mark as incomplete before starting the transaction */
  748. if (iproc_i2c->irq)
  749. reinit_completion(&iproc_i2c->done);
  750. iproc_i2c->xfer_is_done = 0;
  751. /*
  752. * Enable the "start busy" interrupt, which will be triggered after the
  753. * transaction is done, i.e., the internal start_busy bit, transitions
  754. * from 1 to 0.
  755. */
  756. val_intr_en = BIT(IE_M_START_BUSY_SHIFT);
  757. /*
  758. * If TX data size is larger than the TX FIFO, need to enable TX
  759. * underrun interrupt, which will be triggerred when the TX FIFO is
  760. * empty. When that happens we can then pump more data into the FIFO
  761. */
  762. if (!process_call && !(msg->flags & I2C_M_RD) &&
  763. msg->len > iproc_i2c->tx_bytes)
  764. val_intr_en |= BIT(IE_M_TX_UNDERRUN_SHIFT);
  765. /*
  766. * Now we can activate the transfer. For a read operation, specify the
  767. * number of bytes to read
  768. */
  769. val = BIT(M_CMD_START_BUSY_SHIFT);
  770. if (msg->len == 0) {
  771. /* SMBUS QUICK Command (Read/Write) */
  772. val |= (M_CMD_PROTOCOL_QUICK << M_CMD_PROTOCOL_SHIFT);
  773. } else if (msg->flags & I2C_M_RD) {
  774. u32 protocol;
  775. iproc_i2c->rx_bytes = 0;
  776. if (msg->len > M_RX_FIFO_MAX_THLD_VALUE)
  777. iproc_i2c->thld_bytes = M_RX_FIFO_THLD_VALUE;
  778. else
  779. iproc_i2c->thld_bytes = msg->len;
  780. /* set threshold value */
  781. tmp = iproc_i2c_rd_reg(iproc_i2c, M_FIFO_CTRL_OFFSET);
  782. tmp &= ~(M_FIFO_RX_THLD_MASK << M_FIFO_RX_THLD_SHIFT);
  783. tmp |= iproc_i2c->thld_bytes << M_FIFO_RX_THLD_SHIFT;
  784. iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, tmp);
  785. /* enable the RX threshold interrupt */
  786. val_intr_en |= BIT(IE_M_RX_THLD_SHIFT);
  787. protocol = process_call ?
  788. M_CMD_PROTOCOL_PROCESS : M_CMD_PROTOCOL_BLK_RD;
  789. val |= (protocol << M_CMD_PROTOCOL_SHIFT) |
  790. (msg->len << M_CMD_RD_CNT_SHIFT);
  791. } else {
  792. val |= (M_CMD_PROTOCOL_BLK_WR << M_CMD_PROTOCOL_SHIFT);
  793. }
  794. if (iproc_i2c->irq)
  795. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val_intr_en);
  796. return bcm_iproc_i2c_xfer_wait(iproc_i2c, msg, val);
  797. }
  798. static int bcm_iproc_i2c_xfer(struct i2c_adapter *adapter,
  799. struct i2c_msg msgs[], int num)
  800. {
  801. struct bcm_iproc_i2c_dev *iproc_i2c = i2c_get_adapdata(adapter);
  802. bool process_call = false;
  803. int ret;
  804. if (num == 2) {
  805. /* Repeated start, use process call */
  806. process_call = true;
  807. if (msgs[1].flags & I2C_M_NOSTART) {
  808. dev_err(iproc_i2c->device, "Invalid repeated start\n");
  809. return -EOPNOTSUPP;
  810. }
  811. }
  812. ret = bcm_iproc_i2c_xfer_internal(iproc_i2c, msgs, process_call);
  813. if (ret) {
  814. dev_dbg(iproc_i2c->device, "xfer failed\n");
  815. return ret;
  816. }
  817. return num;
  818. }
  819. static uint32_t bcm_iproc_i2c_functionality(struct i2c_adapter *adap)
  820. {
  821. u32 val;
  822. val = I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
  823. if (adap->algo->reg_slave)
  824. val |= I2C_FUNC_SLAVE;
  825. return val;
  826. }
  827. static struct i2c_algorithm bcm_iproc_algo = {
  828. .master_xfer = bcm_iproc_i2c_xfer,
  829. .functionality = bcm_iproc_i2c_functionality,
  830. .reg_slave = bcm_iproc_i2c_reg_slave,
  831. .unreg_slave = bcm_iproc_i2c_unreg_slave,
  832. };
  833. static const struct i2c_adapter_quirks bcm_iproc_i2c_quirks = {
  834. .flags = I2C_AQ_COMB_WRITE_THEN_READ,
  835. .max_comb_1st_msg_len = M_TX_RX_FIFO_SIZE,
  836. .max_read_len = M_RX_MAX_READ_LEN,
  837. };
  838. static int bcm_iproc_i2c_cfg_speed(struct bcm_iproc_i2c_dev *iproc_i2c)
  839. {
  840. unsigned int bus_speed;
  841. u32 val;
  842. int ret = of_property_read_u32(iproc_i2c->device->of_node,
  843. "clock-frequency", &bus_speed);
  844. if (ret < 0) {
  845. dev_info(iproc_i2c->device,
  846. "unable to interpret clock-frequency DT property\n");
  847. bus_speed = I2C_MAX_STANDARD_MODE_FREQ;
  848. }
  849. if (bus_speed < I2C_MAX_STANDARD_MODE_FREQ) {
  850. dev_err(iproc_i2c->device, "%d Hz bus speed not supported\n",
  851. bus_speed);
  852. dev_err(iproc_i2c->device,
  853. "valid speeds are 100khz and 400khz\n");
  854. return -EINVAL;
  855. } else if (bus_speed < I2C_MAX_FAST_MODE_FREQ) {
  856. bus_speed = I2C_MAX_STANDARD_MODE_FREQ;
  857. } else {
  858. bus_speed = I2C_MAX_FAST_MODE_FREQ;
  859. }
  860. iproc_i2c->bus_speed = bus_speed;
  861. val = iproc_i2c_rd_reg(iproc_i2c, TIM_CFG_OFFSET);
  862. val &= ~BIT(TIM_CFG_MODE_400_SHIFT);
  863. val |= (bus_speed == I2C_MAX_FAST_MODE_FREQ) << TIM_CFG_MODE_400_SHIFT;
  864. iproc_i2c_wr_reg(iproc_i2c, TIM_CFG_OFFSET, val);
  865. dev_info(iproc_i2c->device, "bus set to %u Hz\n", bus_speed);
  866. return 0;
  867. }
  868. static int bcm_iproc_i2c_probe(struct platform_device *pdev)
  869. {
  870. int irq, ret = 0;
  871. struct bcm_iproc_i2c_dev *iproc_i2c;
  872. struct i2c_adapter *adap;
  873. struct resource *res;
  874. iproc_i2c = devm_kzalloc(&pdev->dev, sizeof(*iproc_i2c),
  875. GFP_KERNEL);
  876. if (!iproc_i2c)
  877. return -ENOMEM;
  878. platform_set_drvdata(pdev, iproc_i2c);
  879. iproc_i2c->device = &pdev->dev;
  880. iproc_i2c->type =
  881. (enum bcm_iproc_i2c_type)of_device_get_match_data(&pdev->dev);
  882. init_completion(&iproc_i2c->done);
  883. res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  884. iproc_i2c->base = devm_ioremap_resource(iproc_i2c->device, res);
  885. if (IS_ERR(iproc_i2c->base))
  886. return PTR_ERR(iproc_i2c->base);
  887. if (iproc_i2c->type == IPROC_I2C_NIC) {
  888. res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
  889. iproc_i2c->idm_base = devm_ioremap_resource(iproc_i2c->device,
  890. res);
  891. if (IS_ERR(iproc_i2c->idm_base))
  892. return PTR_ERR(iproc_i2c->idm_base);
  893. ret = of_property_read_u32(iproc_i2c->device->of_node,
  894. "brcm,ape-hsls-addr-mask",
  895. &iproc_i2c->ape_addr_mask);
  896. if (ret < 0) {
  897. dev_err(iproc_i2c->device,
  898. "'brcm,ape-hsls-addr-mask' missing\n");
  899. return -EINVAL;
  900. }
  901. spin_lock_init(&iproc_i2c->idm_lock);
  902. /* no slave support */
  903. bcm_iproc_algo.reg_slave = NULL;
  904. bcm_iproc_algo.unreg_slave = NULL;
  905. }
  906. ret = bcm_iproc_i2c_init(iproc_i2c);
  907. if (ret)
  908. return ret;
  909. ret = bcm_iproc_i2c_cfg_speed(iproc_i2c);
  910. if (ret)
  911. return ret;
  912. irq = platform_get_irq(pdev, 0);
  913. if (irq > 0) {
  914. ret = devm_request_irq(iproc_i2c->device, irq,
  915. bcm_iproc_i2c_isr, 0, pdev->name,
  916. iproc_i2c);
  917. if (ret < 0) {
  918. dev_err(iproc_i2c->device,
  919. "unable to request irq %i\n", irq);
  920. return ret;
  921. }
  922. iproc_i2c->irq = irq;
  923. } else {
  924. dev_warn(iproc_i2c->device,
  925. "no irq resource, falling back to poll mode\n");
  926. }
  927. bcm_iproc_i2c_enable_disable(iproc_i2c, true);
  928. adap = &iproc_i2c->adapter;
  929. i2c_set_adapdata(adap, iproc_i2c);
  930. snprintf(adap->name, sizeof(adap->name),
  931. "Broadcom iProc (%s)",
  932. of_node_full_name(iproc_i2c->device->of_node));
  933. adap->algo = &bcm_iproc_algo;
  934. adap->quirks = &bcm_iproc_i2c_quirks;
  935. adap->dev.parent = &pdev->dev;
  936. adap->dev.of_node = pdev->dev.of_node;
  937. return i2c_add_adapter(adap);
  938. }
  939. static int bcm_iproc_i2c_remove(struct platform_device *pdev)
  940. {
  941. struct bcm_iproc_i2c_dev *iproc_i2c = platform_get_drvdata(pdev);
  942. if (iproc_i2c->irq) {
  943. /*
  944. * Make sure there's no pending interrupt when we remove the
  945. * adapter
  946. */
  947. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, 0);
  948. iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  949. synchronize_irq(iproc_i2c->irq);
  950. }
  951. i2c_del_adapter(&iproc_i2c->adapter);
  952. bcm_iproc_i2c_enable_disable(iproc_i2c, false);
  953. return 0;
  954. }
  955. #ifdef CONFIG_PM_SLEEP
  956. static int bcm_iproc_i2c_suspend(struct device *dev)
  957. {
  958. struct bcm_iproc_i2c_dev *iproc_i2c = dev_get_drvdata(dev);
  959. if (iproc_i2c->irq) {
  960. /*
  961. * Make sure there's no pending interrupt when we go into
  962. * suspend
  963. */
  964. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, 0);
  965. iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  966. synchronize_irq(iproc_i2c->irq);
  967. }
  968. /* now disable the controller */
  969. bcm_iproc_i2c_enable_disable(iproc_i2c, false);
  970. return 0;
  971. }
  972. static int bcm_iproc_i2c_resume(struct device *dev)
  973. {
  974. struct bcm_iproc_i2c_dev *iproc_i2c = dev_get_drvdata(dev);
  975. int ret;
  976. u32 val;
  977. /*
  978. * Power domain could have been shut off completely in system deep
  979. * sleep, so re-initialize the block here
  980. */
  981. ret = bcm_iproc_i2c_init(iproc_i2c);
  982. if (ret)
  983. return ret;
  984. /* configure to the desired bus speed */
  985. val = iproc_i2c_rd_reg(iproc_i2c, TIM_CFG_OFFSET);
  986. val &= ~BIT(TIM_CFG_MODE_400_SHIFT);
  987. val |= (iproc_i2c->bus_speed == I2C_MAX_FAST_MODE_FREQ) << TIM_CFG_MODE_400_SHIFT;
  988. iproc_i2c_wr_reg(iproc_i2c, TIM_CFG_OFFSET, val);
  989. bcm_iproc_i2c_enable_disable(iproc_i2c, true);
  990. return 0;
  991. }
  992. static const struct dev_pm_ops bcm_iproc_i2c_pm_ops = {
  993. .suspend_late = &bcm_iproc_i2c_suspend,
  994. .resume_early = &bcm_iproc_i2c_resume
  995. };
  996. #define BCM_IPROC_I2C_PM_OPS (&bcm_iproc_i2c_pm_ops)
  997. #else
  998. #define BCM_IPROC_I2C_PM_OPS NULL
  999. #endif /* CONFIG_PM_SLEEP */
  1000. static int bcm_iproc_i2c_reg_slave(struct i2c_client *slave)
  1001. {
  1002. struct bcm_iproc_i2c_dev *iproc_i2c = i2c_get_adapdata(slave->adapter);
  1003. if (iproc_i2c->slave)
  1004. return -EBUSY;
  1005. if (slave->flags & I2C_CLIENT_TEN)
  1006. return -EAFNOSUPPORT;
  1007. iproc_i2c->slave = slave;
  1008. tasklet_init(&iproc_i2c->slave_rx_tasklet, slave_rx_tasklet_fn,
  1009. (unsigned long)iproc_i2c);
  1010. bcm_iproc_i2c_slave_init(iproc_i2c, false);
  1011. return 0;
  1012. }
  1013. static int bcm_iproc_i2c_unreg_slave(struct i2c_client *slave)
  1014. {
  1015. u32 tmp;
  1016. struct bcm_iproc_i2c_dev *iproc_i2c = i2c_get_adapdata(slave->adapter);
  1017. if (!iproc_i2c->slave)
  1018. return -EINVAL;
  1019. disable_irq(iproc_i2c->irq);
  1020. tasklet_kill(&iproc_i2c->slave_rx_tasklet);
  1021. /* disable all slave interrupts */
  1022. tmp = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET);
  1023. tmp &= ~(IE_S_ALL_INTERRUPT_MASK <<
  1024. IE_S_ALL_INTERRUPT_SHIFT);
  1025. iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, tmp);
  1026. /* Erase the slave address programmed */
  1027. tmp = iproc_i2c_rd_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET);
  1028. tmp &= ~BIT(S_CFG_EN_NIC_SMB_ADDR3_SHIFT);
  1029. iproc_i2c_wr_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET, tmp);
  1030. /* flush TX/RX FIFOs */
  1031. tmp = (BIT(S_FIFO_RX_FLUSH_SHIFT) | BIT(S_FIFO_TX_FLUSH_SHIFT));
  1032. iproc_i2c_wr_reg(iproc_i2c, S_FIFO_CTRL_OFFSET, tmp);
  1033. /* clear all pending slave interrupts */
  1034. iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, ISR_MASK_SLAVE);
  1035. iproc_i2c->slave = NULL;
  1036. enable_irq(iproc_i2c->irq);
  1037. return 0;
  1038. }
  1039. static const struct of_device_id bcm_iproc_i2c_of_match[] = {
  1040. {
  1041. .compatible = "brcm,iproc-i2c",
  1042. .data = (int *)IPROC_I2C,
  1043. }, {
  1044. .compatible = "brcm,iproc-nic-i2c",
  1045. .data = (int *)IPROC_I2C_NIC,
  1046. },
  1047. { /* sentinel */ }
  1048. };
  1049. MODULE_DEVICE_TABLE(of, bcm_iproc_i2c_of_match);
  1050. static struct platform_driver bcm_iproc_i2c_driver = {
  1051. .driver = {
  1052. .name = "bcm-iproc-i2c",
  1053. .of_match_table = bcm_iproc_i2c_of_match,
  1054. .pm = BCM_IPROC_I2C_PM_OPS,
  1055. },
  1056. .probe = bcm_iproc_i2c_probe,
  1057. .remove = bcm_iproc_i2c_remove,
  1058. };
  1059. module_platform_driver(bcm_iproc_i2c_driver);
  1060. MODULE_AUTHOR("Ray Jui <[email protected]>");
  1061. MODULE_DESCRIPTION("Broadcom iProc I2C Driver");
  1062. MODULE_LICENSE("GPL v2");