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