pio.c (29359B)
1// SPDX-License-Identifier: BSD-3-Clause 2/* 3 * Copyright (c) 2020, MIPI Alliance, Inc. 4 * 5 * Author: Nicolas Pitre <npitre@baylibre.com> 6 */ 7 8#include <linux/bitfield.h> 9#include <linux/device.h> 10#include <linux/errno.h> 11#include <linux/i3c/master.h> 12#include <linux/io.h> 13 14#include "hci.h" 15#include "cmd.h" 16#include "ibi.h" 17 18 19/* 20 * PIO Access Area 21 */ 22 23#define pio_reg_read(r) readl(hci->PIO_regs + (PIO_##r)) 24#define pio_reg_write(r, v) writel(v, hci->PIO_regs + (PIO_##r)) 25 26#define PIO_COMMAND_QUEUE_PORT 0x00 27#define PIO_RESPONSE_QUEUE_PORT 0x04 28#define PIO_XFER_DATA_PORT 0x08 29#define PIO_IBI_PORT 0x0c 30 31#define PIO_QUEUE_THLD_CTRL 0x10 32#define QUEUE_IBI_STATUS_THLD GENMASK(31, 24) 33#define QUEUE_IBI_DATA_THLD GENMASK(23, 16) 34#define QUEUE_RESP_BUF_THLD GENMASK(15, 8) 35#define QUEUE_CMD_EMPTY_BUF_THLD GENMASK(7, 0) 36 37#define PIO_DATA_BUFFER_THLD_CTRL 0x14 38#define DATA_RX_START_THLD GENMASK(26, 24) 39#define DATA_TX_START_THLD GENMASK(18, 16) 40#define DATA_RX_BUF_THLD GENMASK(10, 8) 41#define DATA_TX_BUF_THLD GENMASK(2, 0) 42 43#define PIO_QUEUE_SIZE 0x18 44#define TX_DATA_BUFFER_SIZE GENMASK(31, 24) 45#define RX_DATA_BUFFER_SIZE GENMASK(23, 16) 46#define IBI_STATUS_SIZE GENMASK(15, 8) 47#define CR_QUEUE_SIZE GENMASK(7, 0) 48 49#define PIO_INTR_STATUS 0x20 50#define PIO_INTR_STATUS_ENABLE 0x24 51#define PIO_INTR_SIGNAL_ENABLE 0x28 52#define PIO_INTR_FORCE 0x2c 53#define STAT_TRANSFER_BLOCKED BIT(25) 54#define STAT_PERR_RESP_UFLOW BIT(24) 55#define STAT_PERR_CMD_OFLOW BIT(23) 56#define STAT_PERR_IBI_UFLOW BIT(22) 57#define STAT_PERR_RX_UFLOW BIT(21) 58#define STAT_PERR_TX_OFLOW BIT(20) 59#define STAT_ERR_RESP_QUEUE_FULL BIT(19) 60#define STAT_WARN_RESP_QUEUE_FULL BIT(18) 61#define STAT_ERR_IBI_QUEUE_FULL BIT(17) 62#define STAT_WARN_IBI_QUEUE_FULL BIT(16) 63#define STAT_ERR_RX_DATA_FULL BIT(15) 64#define STAT_WARN_RX_DATA_FULL BIT(14) 65#define STAT_ERR_TX_DATA_EMPTY BIT(13) 66#define STAT_WARN_TX_DATA_EMPTY BIT(12) 67#define STAT_TRANSFER_ERR BIT(9) 68#define STAT_WARN_INS_STOP_MODE BIT(7) 69#define STAT_TRANSFER_ABORT BIT(5) 70#define STAT_RESP_READY BIT(4) 71#define STAT_CMD_QUEUE_READY BIT(3) 72#define STAT_IBI_STATUS_THLD BIT(2) 73#define STAT_RX_THLD BIT(1) 74#define STAT_TX_THLD BIT(0) 75 76#define PIO_QUEUE_CUR_STATUS 0x38 77#define CUR_IBI_Q_LEVEL GENMASK(28, 20) 78#define CUR_RESP_Q_LEVEL GENMASK(18, 10) 79#define CUR_CMD_Q_EMPTY_LEVEL GENMASK(8, 0) 80 81#define PIO_DATA_BUFFER_CUR_STATUS 0x3c 82#define CUR_RX_BUF_LVL GENMASK(26, 16) 83#define CUR_TX_BUF_LVL GENMASK(10, 0) 84 85/* 86 * Handy status bit combinations 87 */ 88 89#define STAT_LATENCY_WARNINGS (STAT_WARN_RESP_QUEUE_FULL | \ 90 STAT_WARN_IBI_QUEUE_FULL | \ 91 STAT_WARN_RX_DATA_FULL | \ 92 STAT_WARN_TX_DATA_EMPTY | \ 93 STAT_WARN_INS_STOP_MODE) 94 95#define STAT_LATENCY_ERRORS (STAT_ERR_RESP_QUEUE_FULL | \ 96 STAT_ERR_IBI_QUEUE_FULL | \ 97 STAT_ERR_RX_DATA_FULL | \ 98 STAT_ERR_TX_DATA_EMPTY) 99 100#define STAT_PROG_ERRORS (STAT_TRANSFER_BLOCKED | \ 101 STAT_PERR_RESP_UFLOW | \ 102 STAT_PERR_CMD_OFLOW | \ 103 STAT_PERR_IBI_UFLOW | \ 104 STAT_PERR_RX_UFLOW | \ 105 STAT_PERR_TX_OFLOW) 106 107#define STAT_ALL_ERRORS (STAT_TRANSFER_ABORT | \ 108 STAT_TRANSFER_ERR | \ 109 STAT_LATENCY_ERRORS | \ 110 STAT_PROG_ERRORS) 111 112struct hci_pio_dev_ibi_data { 113 struct i3c_generic_ibi_pool *pool; 114 unsigned int max_len; 115}; 116 117struct hci_pio_ibi_data { 118 struct i3c_ibi_slot *slot; 119 void *data_ptr; 120 unsigned int addr; 121 unsigned int seg_len, seg_cnt; 122 unsigned int max_len; 123 bool last_seg; 124}; 125 126struct hci_pio_data { 127 spinlock_t lock; 128 struct hci_xfer *curr_xfer, *xfer_queue; 129 struct hci_xfer *curr_rx, *rx_queue; 130 struct hci_xfer *curr_tx, *tx_queue; 131 struct hci_xfer *curr_resp, *resp_queue; 132 struct hci_pio_ibi_data ibi; 133 unsigned int rx_thresh_size, tx_thresh_size; 134 unsigned int max_ibi_thresh; 135 u32 reg_queue_thresh; 136 u32 enabled_irqs; 137}; 138 139static int hci_pio_init(struct i3c_hci *hci) 140{ 141 struct hci_pio_data *pio; 142 u32 val, size_val, rx_thresh, tx_thresh, ibi_val; 143 144 pio = kzalloc(sizeof(*pio), GFP_KERNEL); 145 if (!pio) 146 return -ENOMEM; 147 148 hci->io_data = pio; 149 spin_lock_init(&pio->lock); 150 151 size_val = pio_reg_read(QUEUE_SIZE); 152 dev_info(&hci->master.dev, "CMD/RESP FIFO = %ld entries\n", 153 FIELD_GET(CR_QUEUE_SIZE, size_val)); 154 dev_info(&hci->master.dev, "IBI FIFO = %ld bytes\n", 155 4 * FIELD_GET(IBI_STATUS_SIZE, size_val)); 156 dev_info(&hci->master.dev, "RX data FIFO = %d bytes\n", 157 4 * (2 << FIELD_GET(RX_DATA_BUFFER_SIZE, size_val))); 158 dev_info(&hci->master.dev, "TX data FIFO = %d bytes\n", 159 4 * (2 << FIELD_GET(TX_DATA_BUFFER_SIZE, size_val))); 160 161 /* 162 * Let's initialize data thresholds to half of the actual FIFO size. 163 * The start thresholds aren't used (set to 0) as the FIFO is always 164 * serviced before the corresponding command is queued. 165 */ 166 rx_thresh = FIELD_GET(RX_DATA_BUFFER_SIZE, size_val); 167 tx_thresh = FIELD_GET(TX_DATA_BUFFER_SIZE, size_val); 168 if (hci->version_major == 1) { 169 /* those are expressed as 2^[n+1), so just sub 1 if not 0 */ 170 if (rx_thresh) 171 rx_thresh -= 1; 172 if (tx_thresh) 173 tx_thresh -= 1; 174 pio->rx_thresh_size = 2 << rx_thresh; 175 pio->tx_thresh_size = 2 << tx_thresh; 176 } else { 177 /* size is 2^(n+1) and threshold is 2^n i.e. already halved */ 178 pio->rx_thresh_size = 1 << rx_thresh; 179 pio->tx_thresh_size = 1 << tx_thresh; 180 } 181 val = FIELD_PREP(DATA_RX_BUF_THLD, rx_thresh) | 182 FIELD_PREP(DATA_TX_BUF_THLD, tx_thresh); 183 pio_reg_write(DATA_BUFFER_THLD_CTRL, val); 184 185 /* 186 * Let's raise an interrupt as soon as there is one free cmd slot 187 * or one available response or IBI. For IBI data let's use half the 188 * IBI queue size within allowed bounds. 189 */ 190 ibi_val = FIELD_GET(IBI_STATUS_SIZE, size_val); 191 pio->max_ibi_thresh = clamp_val(ibi_val/2, 1, 63); 192 val = FIELD_PREP(QUEUE_IBI_STATUS_THLD, 1) | 193 FIELD_PREP(QUEUE_IBI_DATA_THLD, pio->max_ibi_thresh) | 194 FIELD_PREP(QUEUE_RESP_BUF_THLD, 1) | 195 FIELD_PREP(QUEUE_CMD_EMPTY_BUF_THLD, 1); 196 pio_reg_write(QUEUE_THLD_CTRL, val); 197 pio->reg_queue_thresh = val; 198 199 /* Disable all IRQs but allow all status bits */ 200 pio_reg_write(INTR_SIGNAL_ENABLE, 0x0); 201 pio_reg_write(INTR_STATUS_ENABLE, 0xffffffff); 202 203 /* Always accept error interrupts (will be activated on first xfer) */ 204 pio->enabled_irqs = STAT_ALL_ERRORS; 205 206 return 0; 207} 208 209static void hci_pio_cleanup(struct i3c_hci *hci) 210{ 211 struct hci_pio_data *pio = hci->io_data; 212 213 pio_reg_write(INTR_SIGNAL_ENABLE, 0x0); 214 215 if (pio) { 216 DBG("status = %#x/%#x", 217 pio_reg_read(INTR_STATUS), pio_reg_read(INTR_SIGNAL_ENABLE)); 218 BUG_ON(pio->curr_xfer); 219 BUG_ON(pio->curr_rx); 220 BUG_ON(pio->curr_tx); 221 BUG_ON(pio->curr_resp); 222 kfree(pio); 223 hci->io_data = NULL; 224 } 225} 226 227static void hci_pio_write_cmd(struct i3c_hci *hci, struct hci_xfer *xfer) 228{ 229 DBG("cmd_desc[%d] = 0x%08x", 0, xfer->cmd_desc[0]); 230 DBG("cmd_desc[%d] = 0x%08x", 1, xfer->cmd_desc[1]); 231 pio_reg_write(COMMAND_QUEUE_PORT, xfer->cmd_desc[0]); 232 pio_reg_write(COMMAND_QUEUE_PORT, xfer->cmd_desc[1]); 233 if (hci->cmd == &mipi_i3c_hci_cmd_v2) { 234 DBG("cmd_desc[%d] = 0x%08x", 2, xfer->cmd_desc[2]); 235 DBG("cmd_desc[%d] = 0x%08x", 3, xfer->cmd_desc[3]); 236 pio_reg_write(COMMAND_QUEUE_PORT, xfer->cmd_desc[2]); 237 pio_reg_write(COMMAND_QUEUE_PORT, xfer->cmd_desc[3]); 238 } 239} 240 241static bool hci_pio_do_rx(struct i3c_hci *hci, struct hci_pio_data *pio) 242{ 243 struct hci_xfer *xfer = pio->curr_rx; 244 unsigned int nr_words; 245 u32 *p; 246 247 p = xfer->data; 248 p += (xfer->data_len - xfer->data_left) / 4; 249 250 while (xfer->data_left >= 4) { 251 /* bail out if FIFO hasn't reached the threshold value yet */ 252 if (!(pio_reg_read(INTR_STATUS) & STAT_RX_THLD)) 253 return false; 254 nr_words = min(xfer->data_left / 4, pio->rx_thresh_size); 255 /* extract data from FIFO */ 256 xfer->data_left -= nr_words * 4; 257 DBG("now %d left %d", nr_words * 4, xfer->data_left); 258 while (nr_words--) 259 *p++ = pio_reg_read(XFER_DATA_PORT); 260 } 261 262 /* trailing data is retrieved upon response reception */ 263 return !xfer->data_left; 264} 265 266static void hci_pio_do_trailing_rx(struct i3c_hci *hci, 267 struct hci_pio_data *pio, unsigned int count) 268{ 269 struct hci_xfer *xfer = pio->curr_rx; 270 u32 *p; 271 272 DBG("%d remaining", count); 273 274 p = xfer->data; 275 p += (xfer->data_len - xfer->data_left) / 4; 276 277 if (count >= 4) { 278 unsigned int nr_words = count / 4; 279 /* extract data from FIFO */ 280 xfer->data_left -= nr_words * 4; 281 DBG("now %d left %d", nr_words * 4, xfer->data_left); 282 while (nr_words--) 283 *p++ = pio_reg_read(XFER_DATA_PORT); 284 } 285 286 count &= 3; 287 if (count) { 288 /* 289 * There are trailing bytes in the last word. 290 * Fetch it and extract bytes in an endian independent way. 291 * Unlike the TX case, we must not write memory past the 292 * end of the destination buffer. 293 */ 294 u8 *p_byte = (u8 *)p; 295 u32 data = pio_reg_read(XFER_DATA_PORT); 296 297 xfer->data_word_before_partial = data; 298 xfer->data_left -= count; 299 data = (__force u32) cpu_to_le32(data); 300 while (count--) { 301 *p_byte++ = data; 302 data >>= 8; 303 } 304 } 305} 306 307static bool hci_pio_do_tx(struct i3c_hci *hci, struct hci_pio_data *pio) 308{ 309 struct hci_xfer *xfer = pio->curr_tx; 310 unsigned int nr_words; 311 u32 *p; 312 313 p = xfer->data; 314 p += (xfer->data_len - xfer->data_left) / 4; 315 316 while (xfer->data_left >= 4) { 317 /* bail out if FIFO free space is below set threshold */ 318 if (!(pio_reg_read(INTR_STATUS) & STAT_TX_THLD)) 319 return false; 320 /* we can fill up to that TX threshold */ 321 nr_words = min(xfer->data_left / 4, pio->tx_thresh_size); 322 /* push data into the FIFO */ 323 xfer->data_left -= nr_words * 4; 324 DBG("now %d left %d", nr_words * 4, xfer->data_left); 325 while (nr_words--) 326 pio_reg_write(XFER_DATA_PORT, *p++); 327 } 328 329 if (xfer->data_left) { 330 /* 331 * There are trailing bytes to send. We can simply load 332 * them from memory as a word which will keep those bytes 333 * in their proper place even on a BE system. This will 334 * also get some bytes past the actual buffer but no one 335 * should care as they won't be sent out. 336 */ 337 if (!(pio_reg_read(INTR_STATUS) & STAT_TX_THLD)) 338 return false; 339 DBG("trailing %d", xfer->data_left); 340 pio_reg_write(XFER_DATA_PORT, *p); 341 xfer->data_left = 0; 342 } 343 344 return true; 345} 346 347static bool hci_pio_process_rx(struct i3c_hci *hci, struct hci_pio_data *pio) 348{ 349 while (pio->curr_rx && hci_pio_do_rx(hci, pio)) 350 pio->curr_rx = pio->curr_rx->next_data; 351 return !pio->curr_rx; 352} 353 354static bool hci_pio_process_tx(struct i3c_hci *hci, struct hci_pio_data *pio) 355{ 356 while (pio->curr_tx && hci_pio_do_tx(hci, pio)) 357 pio->curr_tx = pio->curr_tx->next_data; 358 return !pio->curr_tx; 359} 360 361static void hci_pio_queue_data(struct i3c_hci *hci, struct hci_pio_data *pio) 362{ 363 struct hci_xfer *xfer = pio->curr_xfer; 364 struct hci_xfer *prev_queue_tail; 365 366 if (!xfer->data) { 367 xfer->data_len = xfer->data_left = 0; 368 return; 369 } 370 371 if (xfer->rnw) { 372 prev_queue_tail = pio->rx_queue; 373 pio->rx_queue = xfer; 374 if (pio->curr_rx) { 375 prev_queue_tail->next_data = xfer; 376 } else { 377 pio->curr_rx = xfer; 378 if (!hci_pio_process_rx(hci, pio)) 379 pio->enabled_irqs |= STAT_RX_THLD; 380 } 381 } else { 382 prev_queue_tail = pio->tx_queue; 383 pio->tx_queue = xfer; 384 if (pio->curr_tx) { 385 prev_queue_tail->next_data = xfer; 386 } else { 387 pio->curr_tx = xfer; 388 if (!hci_pio_process_tx(hci, pio)) 389 pio->enabled_irqs |= STAT_TX_THLD; 390 } 391 } 392} 393 394static void hci_pio_push_to_next_rx(struct i3c_hci *hci, struct hci_xfer *xfer, 395 unsigned int words_to_keep) 396{ 397 u32 *from = xfer->data; 398 u32 from_last; 399 unsigned int received, count; 400 401 received = (xfer->data_len - xfer->data_left) / 4; 402 if ((xfer->data_len - xfer->data_left) & 3) { 403 from_last = xfer->data_word_before_partial; 404 received += 1; 405 } else { 406 from_last = from[received]; 407 } 408 from += words_to_keep; 409 count = received - words_to_keep; 410 411 while (count) { 412 unsigned int room, left, chunk, bytes_to_move; 413 u32 last_word; 414 415 xfer = xfer->next_data; 416 if (!xfer) { 417 dev_err(&hci->master.dev, "pushing RX data to unexistent xfer\n"); 418 return; 419 } 420 421 room = DIV_ROUND_UP(xfer->data_len, 4); 422 left = DIV_ROUND_UP(xfer->data_left, 4); 423 chunk = min(count, room); 424 if (chunk > left) { 425 hci_pio_push_to_next_rx(hci, xfer, chunk - left); 426 left = chunk; 427 xfer->data_left = left * 4; 428 } 429 430 bytes_to_move = xfer->data_len - xfer->data_left; 431 if (bytes_to_move & 3) { 432 /* preserve word to become partial */ 433 u32 *p = xfer->data; 434 435 xfer->data_word_before_partial = p[bytes_to_move / 4]; 436 } 437 memmove(xfer->data + chunk, xfer->data, bytes_to_move); 438 439 /* treat last word specially because of partial word issues */ 440 chunk -= 1; 441 442 memcpy(xfer->data, from, chunk * 4); 443 xfer->data_left -= chunk * 4; 444 from += chunk; 445 count -= chunk; 446 447 last_word = (count == 1) ? from_last : *from++; 448 if (xfer->data_left < 4) { 449 /* 450 * Like in hci_pio_do_trailing_rx(), preserve original 451 * word to be stored partially then store bytes it 452 * in an endian independent way. 453 */ 454 u8 *p_byte = xfer->data; 455 456 p_byte += chunk * 4; 457 xfer->data_word_before_partial = last_word; 458 last_word = (__force u32) cpu_to_le32(last_word); 459 while (xfer->data_left--) { 460 *p_byte++ = last_word; 461 last_word >>= 8; 462 } 463 } else { 464 u32 *p = xfer->data; 465 466 p[chunk] = last_word; 467 xfer->data_left -= 4; 468 } 469 count--; 470 } 471} 472 473static void hci_pio_err(struct i3c_hci *hci, struct hci_pio_data *pio, 474 u32 status); 475 476static bool hci_pio_process_resp(struct i3c_hci *hci, struct hci_pio_data *pio) 477{ 478 while (pio->curr_resp && 479 (pio_reg_read(INTR_STATUS) & STAT_RESP_READY)) { 480 struct hci_xfer *xfer = pio->curr_resp; 481 u32 resp = pio_reg_read(RESPONSE_QUEUE_PORT); 482 unsigned int tid = RESP_TID(resp); 483 484 DBG("resp = 0x%08x", resp); 485 if (tid != xfer->cmd_tid) { 486 dev_err(&hci->master.dev, 487 "response tid=%d when expecting %d\n", 488 tid, xfer->cmd_tid); 489 /* let's pretend it is a prog error... any of them */ 490 hci_pio_err(hci, pio, STAT_PROG_ERRORS); 491 return false; 492 } 493 xfer->response = resp; 494 495 if (pio->curr_rx == xfer) { 496 /* 497 * Response availability implies RX completion. 498 * Retrieve trailing RX data if any. 499 * Note that short reads are possible. 500 */ 501 unsigned int received, expected, to_keep; 502 503 received = xfer->data_len - xfer->data_left; 504 expected = RESP_DATA_LENGTH(xfer->response); 505 if (expected > received) { 506 hci_pio_do_trailing_rx(hci, pio, 507 expected - received); 508 } else if (received > expected) { 509 /* we consumed data meant for next xfer */ 510 to_keep = DIV_ROUND_UP(expected, 4); 511 hci_pio_push_to_next_rx(hci, xfer, to_keep); 512 } 513 514 /* then process the RX list pointer */ 515 if (hci_pio_process_rx(hci, pio)) 516 pio->enabled_irqs &= ~STAT_RX_THLD; 517 } 518 519 /* 520 * We're about to give back ownership of the xfer structure 521 * to the waiting instance. Make sure no reference to it 522 * still exists. 523 */ 524 if (pio->curr_rx == xfer) { 525 DBG("short RX ?"); 526 pio->curr_rx = pio->curr_rx->next_data; 527 } else if (pio->curr_tx == xfer) { 528 DBG("short TX ?"); 529 pio->curr_tx = pio->curr_tx->next_data; 530 } else if (xfer->data_left) { 531 DBG("PIO xfer count = %d after response", 532 xfer->data_left); 533 } 534 535 pio->curr_resp = xfer->next_resp; 536 if (xfer->completion) 537 complete(xfer->completion); 538 } 539 return !pio->curr_resp; 540} 541 542static void hci_pio_queue_resp(struct i3c_hci *hci, struct hci_pio_data *pio) 543{ 544 struct hci_xfer *xfer = pio->curr_xfer; 545 struct hci_xfer *prev_queue_tail; 546 547 if (!(xfer->cmd_desc[0] & CMD_0_ROC)) 548 return; 549 550 prev_queue_tail = pio->resp_queue; 551 pio->resp_queue = xfer; 552 if (pio->curr_resp) { 553 prev_queue_tail->next_resp = xfer; 554 } else { 555 pio->curr_resp = xfer; 556 if (!hci_pio_process_resp(hci, pio)) 557 pio->enabled_irqs |= STAT_RESP_READY; 558 } 559} 560 561static bool hci_pio_process_cmd(struct i3c_hci *hci, struct hci_pio_data *pio) 562{ 563 while (pio->curr_xfer && 564 (pio_reg_read(INTR_STATUS) & STAT_CMD_QUEUE_READY)) { 565 /* 566 * Always process the data FIFO before sending the command 567 * so needed TX data or RX space is available upfront. 568 */ 569 hci_pio_queue_data(hci, pio); 570 /* 571 * Then queue our response request. This will also process 572 * the response FIFO in case it got suddenly filled up 573 * with results from previous commands. 574 */ 575 hci_pio_queue_resp(hci, pio); 576 /* 577 * Finally send the command. 578 */ 579 hci_pio_write_cmd(hci, pio->curr_xfer); 580 /* 581 * And move on. 582 */ 583 pio->curr_xfer = pio->curr_xfer->next_xfer; 584 } 585 return !pio->curr_xfer; 586} 587 588static int hci_pio_queue_xfer(struct i3c_hci *hci, struct hci_xfer *xfer, int n) 589{ 590 struct hci_pio_data *pio = hci->io_data; 591 struct hci_xfer *prev_queue_tail; 592 int i; 593 594 DBG("n = %d", n); 595 596 /* link xfer instances together and initialize data count */ 597 for (i = 0; i < n; i++) { 598 xfer[i].next_xfer = (i + 1 < n) ? &xfer[i + 1] : NULL; 599 xfer[i].next_data = NULL; 600 xfer[i].next_resp = NULL; 601 xfer[i].data_left = xfer[i].data_len; 602 } 603 604 spin_lock_irq(&pio->lock); 605 prev_queue_tail = pio->xfer_queue; 606 pio->xfer_queue = &xfer[n - 1]; 607 if (pio->curr_xfer) { 608 prev_queue_tail->next_xfer = xfer; 609 } else { 610 pio->curr_xfer = xfer; 611 if (!hci_pio_process_cmd(hci, pio)) 612 pio->enabled_irqs |= STAT_CMD_QUEUE_READY; 613 pio_reg_write(INTR_SIGNAL_ENABLE, pio->enabled_irqs); 614 DBG("status = %#x/%#x", 615 pio_reg_read(INTR_STATUS), pio_reg_read(INTR_SIGNAL_ENABLE)); 616 } 617 spin_unlock_irq(&pio->lock); 618 return 0; 619} 620 621static bool hci_pio_dequeue_xfer_common(struct i3c_hci *hci, 622 struct hci_pio_data *pio, 623 struct hci_xfer *xfer, int n) 624{ 625 struct hci_xfer *p, **p_prev_next; 626 int i; 627 628 /* 629 * To safely dequeue a transfer request, it must be either entirely 630 * processed, or not yet processed at all. If our request tail is 631 * reachable from either the data or resp list that means the command 632 * was submitted and not yet completed. 633 */ 634 for (p = pio->curr_resp; p; p = p->next_resp) 635 for (i = 0; i < n; i++) 636 if (p == &xfer[i]) 637 goto pio_screwed; 638 for (p = pio->curr_rx; p; p = p->next_data) 639 for (i = 0; i < n; i++) 640 if (p == &xfer[i]) 641 goto pio_screwed; 642 for (p = pio->curr_tx; p; p = p->next_data) 643 for (i = 0; i < n; i++) 644 if (p == &xfer[i]) 645 goto pio_screwed; 646 647 /* 648 * The command was completed, or wasn't yet submitted. 649 * Unlink it from the que if the later. 650 */ 651 p_prev_next = &pio->curr_xfer; 652 for (p = pio->curr_xfer; p; p = p->next_xfer) { 653 if (p == &xfer[0]) { 654 *p_prev_next = xfer[n - 1].next_xfer; 655 break; 656 } 657 p_prev_next = &p->next_xfer; 658 } 659 660 /* return true if we actually unqueued something */ 661 return !!p; 662 663pio_screwed: 664 /* 665 * Life is tough. We must invalidate the hardware state and 666 * discard everything that is still queued. 667 */ 668 for (p = pio->curr_resp; p; p = p->next_resp) { 669 p->response = FIELD_PREP(RESP_ERR_FIELD, RESP_ERR_HC_TERMINATED); 670 if (p->completion) 671 complete(p->completion); 672 } 673 for (p = pio->curr_xfer; p; p = p->next_xfer) { 674 p->response = FIELD_PREP(RESP_ERR_FIELD, RESP_ERR_HC_TERMINATED); 675 if (p->completion) 676 complete(p->completion); 677 } 678 pio->curr_xfer = pio->curr_rx = pio->curr_tx = pio->curr_resp = NULL; 679 680 return true; 681} 682 683static bool hci_pio_dequeue_xfer(struct i3c_hci *hci, struct hci_xfer *xfer, int n) 684{ 685 struct hci_pio_data *pio = hci->io_data; 686 int ret; 687 688 spin_lock_irq(&pio->lock); 689 DBG("n=%d status=%#x/%#x", n, 690 pio_reg_read(INTR_STATUS), pio_reg_read(INTR_SIGNAL_ENABLE)); 691 DBG("main_status = %#x/%#x", 692 readl(hci->base_regs + 0x20), readl(hci->base_regs + 0x28)); 693 694 ret = hci_pio_dequeue_xfer_common(hci, pio, xfer, n); 695 spin_unlock_irq(&pio->lock); 696 return ret; 697} 698 699static void hci_pio_err(struct i3c_hci *hci, struct hci_pio_data *pio, 700 u32 status) 701{ 702 /* TODO: this ought to be more sophisticated eventually */ 703 704 if (pio_reg_read(INTR_STATUS) & STAT_RESP_READY) { 705 /* this may happen when an error is signaled with ROC unset */ 706 u32 resp = pio_reg_read(RESPONSE_QUEUE_PORT); 707 708 dev_err(&hci->master.dev, 709 "orphan response (%#x) on error\n", resp); 710 } 711 712 /* dump states on programming errors */ 713 if (status & STAT_PROG_ERRORS) { 714 u32 queue = pio_reg_read(QUEUE_CUR_STATUS); 715 u32 data = pio_reg_read(DATA_BUFFER_CUR_STATUS); 716 717 dev_err(&hci->master.dev, 718 "prog error %#lx (C/R/I = %ld/%ld/%ld, TX/RX = %ld/%ld)\n", 719 status & STAT_PROG_ERRORS, 720 FIELD_GET(CUR_CMD_Q_EMPTY_LEVEL, queue), 721 FIELD_GET(CUR_RESP_Q_LEVEL, queue), 722 FIELD_GET(CUR_IBI_Q_LEVEL, queue), 723 FIELD_GET(CUR_TX_BUF_LVL, data), 724 FIELD_GET(CUR_RX_BUF_LVL, data)); 725 } 726 727 /* just bust out everything with pending responses for now */ 728 hci_pio_dequeue_xfer_common(hci, pio, pio->curr_resp, 1); 729 /* ... and half-way TX transfers if any */ 730 if (pio->curr_tx && pio->curr_tx->data_left != pio->curr_tx->data_len) 731 hci_pio_dequeue_xfer_common(hci, pio, pio->curr_tx, 1); 732 /* then reset the hardware */ 733 mipi_i3c_hci_pio_reset(hci); 734 mipi_i3c_hci_resume(hci); 735 736 DBG("status=%#x/%#x", 737 pio_reg_read(INTR_STATUS), pio_reg_read(INTR_SIGNAL_ENABLE)); 738} 739 740static void hci_pio_set_ibi_thresh(struct i3c_hci *hci, 741 struct hci_pio_data *pio, 742 unsigned int thresh_val) 743{ 744 u32 regval = pio->reg_queue_thresh; 745 746 regval &= ~QUEUE_IBI_STATUS_THLD; 747 regval |= FIELD_PREP(QUEUE_IBI_STATUS_THLD, thresh_val); 748 /* write the threshold reg only if it changes */ 749 if (regval != pio->reg_queue_thresh) { 750 pio_reg_write(QUEUE_THLD_CTRL, regval); 751 pio->reg_queue_thresh = regval; 752 DBG("%d", thresh_val); 753 } 754} 755 756static bool hci_pio_get_ibi_segment(struct i3c_hci *hci, 757 struct hci_pio_data *pio) 758{ 759 struct hci_pio_ibi_data *ibi = &pio->ibi; 760 unsigned int nr_words, thresh_val; 761 u32 *p; 762 763 p = ibi->data_ptr; 764 p += (ibi->seg_len - ibi->seg_cnt) / 4; 765 766 while ((nr_words = ibi->seg_cnt/4)) { 767 /* determine our IBI queue threshold value */ 768 thresh_val = min(nr_words, pio->max_ibi_thresh); 769 hci_pio_set_ibi_thresh(hci, pio, thresh_val); 770 /* bail out if we don't have that amount of data ready */ 771 if (!(pio_reg_read(INTR_STATUS) & STAT_IBI_STATUS_THLD)) 772 return false; 773 /* extract the data from the IBI port */ 774 nr_words = thresh_val; 775 ibi->seg_cnt -= nr_words * 4; 776 DBG("now %d left %d", nr_words * 4, ibi->seg_cnt); 777 while (nr_words--) 778 *p++ = pio_reg_read(IBI_PORT); 779 } 780 781 if (ibi->seg_cnt) { 782 /* 783 * There are trailing bytes in the last word. 784 * Fetch it and extract bytes in an endian independent way. 785 * Unlike the TX case, we must not write past the end of 786 * the destination buffer. 787 */ 788 u32 data; 789 u8 *p_byte = (u8 *)p; 790 791 hci_pio_set_ibi_thresh(hci, pio, 1); 792 if (!(pio_reg_read(INTR_STATUS) & STAT_IBI_STATUS_THLD)) 793 return false; 794 DBG("trailing %d", ibi->seg_cnt); 795 data = pio_reg_read(IBI_PORT); 796 data = (__force u32) cpu_to_le32(data); 797 while (ibi->seg_cnt--) { 798 *p_byte++ = data; 799 data >>= 8; 800 } 801 } 802 803 return true; 804} 805 806static bool hci_pio_prep_new_ibi(struct i3c_hci *hci, struct hci_pio_data *pio) 807{ 808 struct hci_pio_ibi_data *ibi = &pio->ibi; 809 struct i3c_dev_desc *dev; 810 struct i3c_hci_dev_data *dev_data; 811 struct hci_pio_dev_ibi_data *dev_ibi; 812 u32 ibi_status; 813 814 /* 815 * We have a new IBI. Try to set up its payload retrieval. 816 * When returning true, the IBI data has to be consumed whether 817 * or not we are set up to capture it. If we return true with 818 * ibi->slot == NULL that means the data payload has to be 819 * drained out of the IBI port and dropped. 820 */ 821 822 ibi_status = pio_reg_read(IBI_PORT); 823 DBG("status = %#x", ibi_status); 824 ibi->addr = FIELD_GET(IBI_TARGET_ADDR, ibi_status); 825 if (ibi_status & IBI_ERROR) { 826 dev_err(&hci->master.dev, "IBI error from %#x\n", ibi->addr); 827 return false; 828 } 829 830 ibi->last_seg = ibi_status & IBI_LAST_STATUS; 831 ibi->seg_len = FIELD_GET(IBI_DATA_LENGTH, ibi_status); 832 ibi->seg_cnt = ibi->seg_len; 833 834 dev = i3c_hci_addr_to_dev(hci, ibi->addr); 835 if (!dev) { 836 dev_err(&hci->master.dev, 837 "IBI for unknown device %#x\n", ibi->addr); 838 return true; 839 } 840 841 dev_data = i3c_dev_get_master_data(dev); 842 dev_ibi = dev_data->ibi_data; 843 ibi->max_len = dev_ibi->max_len; 844 845 if (ibi->seg_len > ibi->max_len) { 846 dev_err(&hci->master.dev, "IBI payload too big (%d > %d)\n", 847 ibi->seg_len, ibi->max_len); 848 return true; 849 } 850 851 ibi->slot = i3c_generic_ibi_get_free_slot(dev_ibi->pool); 852 if (!ibi->slot) { 853 dev_err(&hci->master.dev, "no free slot for IBI\n"); 854 } else { 855 ibi->slot->len = 0; 856 ibi->data_ptr = ibi->slot->data; 857 } 858 return true; 859} 860 861static void hci_pio_free_ibi_slot(struct i3c_hci *hci, struct hci_pio_data *pio) 862{ 863 struct hci_pio_ibi_data *ibi = &pio->ibi; 864 struct hci_pio_dev_ibi_data *dev_ibi; 865 866 if (ibi->slot) { 867 dev_ibi = ibi->slot->dev->common.master_priv; 868 i3c_generic_ibi_recycle_slot(dev_ibi->pool, ibi->slot); 869 ibi->slot = NULL; 870 } 871} 872 873static bool hci_pio_process_ibi(struct i3c_hci *hci, struct hci_pio_data *pio) 874{ 875 struct hci_pio_ibi_data *ibi = &pio->ibi; 876 877 if (!ibi->slot && !ibi->seg_cnt && ibi->last_seg) 878 if (!hci_pio_prep_new_ibi(hci, pio)) 879 return false; 880 881 for (;;) { 882 u32 ibi_status; 883 unsigned int ibi_addr; 884 885 if (ibi->slot) { 886 if (!hci_pio_get_ibi_segment(hci, pio)) 887 return false; 888 ibi->slot->len += ibi->seg_len; 889 ibi->data_ptr += ibi->seg_len; 890 if (ibi->last_seg) { 891 /* was the last segment: submit it and leave */ 892 i3c_master_queue_ibi(ibi->slot->dev, ibi->slot); 893 ibi->slot = NULL; 894 hci_pio_set_ibi_thresh(hci, pio, 1); 895 return true; 896 } 897 } else if (ibi->seg_cnt) { 898 /* 899 * No slot but a non-zero count. This is the result 900 * of some error and the payload must be drained. 901 * This normally does not happen therefore no need 902 * to be extra optimized here. 903 */ 904 hci_pio_set_ibi_thresh(hci, pio, 1); 905 do { 906 if (!(pio_reg_read(INTR_STATUS) & STAT_IBI_STATUS_THLD)) 907 return false; 908 pio_reg_read(IBI_PORT); 909 } while (--ibi->seg_cnt); 910 if (ibi->last_seg) 911 return true; 912 } 913 914 /* try to move to the next segment right away */ 915 hci_pio_set_ibi_thresh(hci, pio, 1); 916 if (!(pio_reg_read(INTR_STATUS) & STAT_IBI_STATUS_THLD)) 917 return false; 918 ibi_status = pio_reg_read(IBI_PORT); 919 ibi_addr = FIELD_GET(IBI_TARGET_ADDR, ibi_status); 920 if (ibi->addr != ibi_addr) { 921 /* target address changed before last segment */ 922 dev_err(&hci->master.dev, 923 "unexp IBI address changed from %d to %d\n", 924 ibi->addr, ibi_addr); 925 hci_pio_free_ibi_slot(hci, pio); 926 } 927 ibi->last_seg = ibi_status & IBI_LAST_STATUS; 928 ibi->seg_len = FIELD_GET(IBI_DATA_LENGTH, ibi_status); 929 ibi->seg_cnt = ibi->seg_len; 930 if (ibi->slot && ibi->slot->len + ibi->seg_len > ibi->max_len) { 931 dev_err(&hci->master.dev, 932 "IBI payload too big (%d > %d)\n", 933 ibi->slot->len + ibi->seg_len, ibi->max_len); 934 hci_pio_free_ibi_slot(hci, pio); 935 } 936 } 937 938 return false; 939} 940 941static int hci_pio_request_ibi(struct i3c_hci *hci, struct i3c_dev_desc *dev, 942 const struct i3c_ibi_setup *req) 943{ 944 struct i3c_hci_dev_data *dev_data = i3c_dev_get_master_data(dev); 945 struct i3c_generic_ibi_pool *pool; 946 struct hci_pio_dev_ibi_data *dev_ibi; 947 948 dev_ibi = kmalloc(sizeof(*dev_ibi), GFP_KERNEL); 949 if (!dev_ibi) 950 return -ENOMEM; 951 pool = i3c_generic_ibi_alloc_pool(dev, req); 952 if (IS_ERR(pool)) { 953 kfree(dev_ibi); 954 return PTR_ERR(pool); 955 } 956 dev_ibi->pool = pool; 957 dev_ibi->max_len = req->max_payload_len; 958 dev_data->ibi_data = dev_ibi; 959 return 0; 960} 961 962static void hci_pio_free_ibi(struct i3c_hci *hci, struct i3c_dev_desc *dev) 963{ 964 struct i3c_hci_dev_data *dev_data = i3c_dev_get_master_data(dev); 965 struct hci_pio_dev_ibi_data *dev_ibi = dev_data->ibi_data; 966 967 dev_data->ibi_data = NULL; 968 i3c_generic_ibi_free_pool(dev_ibi->pool); 969 kfree(dev_ibi); 970} 971 972static void hci_pio_recycle_ibi_slot(struct i3c_hci *hci, 973 struct i3c_dev_desc *dev, 974 struct i3c_ibi_slot *slot) 975{ 976 struct i3c_hci_dev_data *dev_data = i3c_dev_get_master_data(dev); 977 struct hci_pio_dev_ibi_data *dev_ibi = dev_data->ibi_data; 978 979 i3c_generic_ibi_recycle_slot(dev_ibi->pool, slot); 980} 981 982static bool hci_pio_irq_handler(struct i3c_hci *hci, unsigned int unused) 983{ 984 struct hci_pio_data *pio = hci->io_data; 985 u32 status; 986 987 spin_lock(&pio->lock); 988 status = pio_reg_read(INTR_STATUS); 989 DBG("(in) status: %#x/%#x", status, pio->enabled_irqs); 990 status &= pio->enabled_irqs | STAT_LATENCY_WARNINGS; 991 if (!status) { 992 spin_unlock(&pio->lock); 993 return false; 994 } 995 996 if (status & STAT_IBI_STATUS_THLD) 997 hci_pio_process_ibi(hci, pio); 998 999 if (status & STAT_RX_THLD) 1000 if (hci_pio_process_rx(hci, pio)) 1001 pio->enabled_irqs &= ~STAT_RX_THLD; 1002 if (status & STAT_TX_THLD) 1003 if (hci_pio_process_tx(hci, pio)) 1004 pio->enabled_irqs &= ~STAT_TX_THLD; 1005 if (status & STAT_RESP_READY) 1006 if (hci_pio_process_resp(hci, pio)) 1007 pio->enabled_irqs &= ~STAT_RESP_READY; 1008 1009 if (unlikely(status & STAT_LATENCY_WARNINGS)) { 1010 pio_reg_write(INTR_STATUS, status & STAT_LATENCY_WARNINGS); 1011 dev_warn_ratelimited(&hci->master.dev, 1012 "encountered warning condition %#lx\n", 1013 status & STAT_LATENCY_WARNINGS); 1014 } 1015 1016 if (unlikely(status & STAT_ALL_ERRORS)) { 1017 pio_reg_write(INTR_STATUS, status & STAT_ALL_ERRORS); 1018 hci_pio_err(hci, pio, status & STAT_ALL_ERRORS); 1019 } 1020 1021 if (status & STAT_CMD_QUEUE_READY) 1022 if (hci_pio_process_cmd(hci, pio)) 1023 pio->enabled_irqs &= ~STAT_CMD_QUEUE_READY; 1024 1025 pio_reg_write(INTR_SIGNAL_ENABLE, pio->enabled_irqs); 1026 DBG("(out) status: %#x/%#x", 1027 pio_reg_read(INTR_STATUS), pio_reg_read(INTR_SIGNAL_ENABLE)); 1028 spin_unlock(&pio->lock); 1029 return true; 1030} 1031 1032const struct hci_io_ops mipi_i3c_hci_pio = { 1033 .init = hci_pio_init, 1034 .cleanup = hci_pio_cleanup, 1035 .queue_xfer = hci_pio_queue_xfer, 1036 .dequeue_xfer = hci_pio_dequeue_xfer, 1037 .irq_handler = hci_pio_irq_handler, 1038 .request_ibi = hci_pio_request_ibi, 1039 .free_ibi = hci_pio_free_ibi, 1040 .recycle_ibi_slot = hci_pio_recycle_ibi_slot, 1041};