1 // SPDX-License-Identifier: GPL-2.0-only 2 /* 3 * Keystone Queue Manager subsystem driver 4 * 5 * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com 6 * Authors: Sandeep Nair <sandeep_n@ti.com> 7 * Cyril Chemparathy <cyril@ti.com> 8 * Santosh Shilimkar <santosh.shilimkar@ti.com> 9 */ 10 11 #include <linux/debugfs.h> 12 #include <linux/dma-mapping.h> 13 #include <linux/firmware.h> 14 #include <linux/interrupt.h> 15 #include <linux/io.h> 16 #include <linux/module.h> 17 #include <linux/of.h> 18 #include <linux/of_address.h> 19 #include <linux/of_irq.h> 20 #include <linux/platform_device.h> 21 #include <linux/pm_runtime.h> 22 #include <linux/property.h> 23 #include <linux/slab.h> 24 #include <linux/soc/ti/knav_qmss.h> 25 26 #include "knav_qmss.h" 27 28 static struct knav_device *knav_qdev; 29 static DEFINE_MUTEX(knav_dev_lock); 30 /* Queue manager register indices in DTS */ 31 #define KNAV_QUEUE_PEEK_REG_INDEX 0 32 #define KNAV_QUEUE_STATUS_REG_INDEX 1 33 #define KNAV_QUEUE_CONFIG_REG_INDEX 2 34 #define KNAV_QUEUE_REGION_REG_INDEX 3 35 #define KNAV_QUEUE_PUSH_REG_INDEX 4 36 #define KNAV_QUEUE_POP_REG_INDEX 5 37 38 /* Queue manager register indices in DTS for QMSS in K2G NAVSS. 39 * There are no status and vbusm push registers on this version 40 * of QMSS. Push registers are same as pop, So all indices above 1 41 * are to be re-defined 42 */ 43 #define KNAV_L_QUEUE_CONFIG_REG_INDEX 1 44 #define KNAV_L_QUEUE_REGION_REG_INDEX 2 45 #define KNAV_L_QUEUE_PUSH_REG_INDEX 3 46 47 /* PDSP register indices in DTS */ 48 #define KNAV_QUEUE_PDSP_IRAM_REG_INDEX 0 49 #define KNAV_QUEUE_PDSP_REGS_REG_INDEX 1 50 #define KNAV_QUEUE_PDSP_INTD_REG_INDEX 2 51 #define KNAV_QUEUE_PDSP_CMD_REG_INDEX 3 52 53 #define knav_queue_idx_to_inst(kdev, idx) \ 54 (kdev->instances + (idx << kdev->inst_shift)) 55 56 #define for_each_handle_rcu(qh, inst) \ 57 list_for_each_entry_rcu(qh, &inst->handles, list, \ 58 lockdep_is_held(&knav_dev_lock)) 59 60 #define for_each_instance(idx, inst, kdev) \ 61 for (idx = 0, inst = kdev->instances; \ 62 idx < (kdev)->num_queues_in_use; \ 63 idx++, inst = knav_queue_idx_to_inst(kdev, idx)) 64 65 /* All firmware file names end up here. List the firmware file names below. 66 * Newest followed by older ones. Search is done from start of the array 67 * until a firmware file is found. 68 */ 69 static const char * const knav_acc_firmwares[] = {"ks2_qmss_pdsp_acc48.bin"}; 70 71 static bool device_ready; 72 bool knav_qmss_device_ready(void) 73 { 74 return device_ready; 75 } 76 EXPORT_SYMBOL_GPL(knav_qmss_device_ready); 77 78 /** 79 * knav_queue_notify: qmss queue notfier call 80 * 81 * @inst: - qmss queue instance like accumulator 82 */ 83 void knav_queue_notify(struct knav_queue_inst *inst) 84 { 85 struct knav_queue *qh; 86 87 if (!inst) 88 return; 89 90 rcu_read_lock(); 91 for_each_handle_rcu(qh, inst) { 92 if (atomic_read(&qh->notifier_enabled) <= 0) 93 continue; 94 if (WARN_ON(!qh->notifier_fn)) 95 continue; 96 this_cpu_inc(qh->stats->notifies); 97 qh->notifier_fn(qh->notifier_fn_arg); 98 } 99 rcu_read_unlock(); 100 } 101 EXPORT_SYMBOL_GPL(knav_queue_notify); 102 103 static irqreturn_t knav_queue_int_handler(int irq, void *_instdata) 104 { 105 struct knav_queue_inst *inst = _instdata; 106 107 knav_queue_notify(inst); 108 return IRQ_HANDLED; 109 } 110 111 static int knav_queue_setup_irq(struct knav_range_info *range, 112 struct knav_queue_inst *inst) 113 { 114 unsigned queue = inst->id - range->queue_base; 115 int ret = 0, irq; 116 117 if (range->flags & RANGE_HAS_IRQ) { 118 irq = range->irqs[queue].irq; 119 ret = request_irq(irq, knav_queue_int_handler, IRQF_NO_AUTOEN, 120 inst->irq_name, inst); 121 if (ret) 122 return ret; 123 if (range->irqs[queue].cpu_mask) { 124 ret = irq_set_affinity_hint(irq, range->irqs[queue].cpu_mask); 125 if (ret) { 126 dev_warn(range->kdev->dev, 127 "Failed to set IRQ affinity\n"); 128 return ret; 129 } 130 } 131 } 132 return ret; 133 } 134 135 static void knav_queue_free_irq(struct knav_queue_inst *inst) 136 { 137 struct knav_range_info *range = inst->range; 138 unsigned queue = inst->id - inst->range->queue_base; 139 int irq; 140 141 if (range->flags & RANGE_HAS_IRQ) { 142 irq = range->irqs[queue].irq; 143 irq_set_affinity_hint(irq, NULL); 144 free_irq(irq, inst); 145 } 146 } 147 148 static inline bool knav_queue_is_busy(struct knav_queue_inst *inst) 149 { 150 return !list_empty(&inst->handles); 151 } 152 153 static inline bool knav_queue_is_reserved(struct knav_queue_inst *inst) 154 { 155 return inst->range->flags & RANGE_RESERVED; 156 } 157 158 static inline bool knav_queue_is_shared(struct knav_queue_inst *inst) 159 { 160 struct knav_queue *tmp; 161 162 rcu_read_lock(); 163 for_each_handle_rcu(tmp, inst) { 164 if (tmp->flags & KNAV_QUEUE_SHARED) { 165 rcu_read_unlock(); 166 return true; 167 } 168 } 169 rcu_read_unlock(); 170 return false; 171 } 172 173 static inline bool knav_queue_match_type(struct knav_queue_inst *inst, 174 unsigned type) 175 { 176 if ((type == KNAV_QUEUE_QPEND) && 177 (inst->range->flags & RANGE_HAS_IRQ)) { 178 return true; 179 } else if ((type == KNAV_QUEUE_ACC) && 180 (inst->range->flags & RANGE_HAS_ACCUMULATOR)) { 181 return true; 182 } else if ((type == KNAV_QUEUE_GP) && 183 !(inst->range->flags & 184 (RANGE_HAS_ACCUMULATOR | RANGE_HAS_IRQ))) { 185 return true; 186 } 187 return false; 188 } 189 190 static inline struct knav_queue_inst * 191 knav_queue_match_id_to_inst(struct knav_device *kdev, unsigned id) 192 { 193 struct knav_queue_inst *inst; 194 int idx; 195 196 for_each_instance(idx, inst, kdev) { 197 if (inst->id == id) 198 return inst; 199 } 200 return NULL; 201 } 202 203 static inline struct knav_queue_inst *knav_queue_find_by_id(int id) 204 { 205 if (knav_qdev->base_id <= id && 206 knav_qdev->base_id + knav_qdev->num_queues > id) { 207 id -= knav_qdev->base_id; 208 return knav_queue_match_id_to_inst(knav_qdev, id); 209 } 210 return NULL; 211 } 212 213 static struct knav_queue *__knav_queue_open(struct knav_queue_inst *inst, 214 const char *name, unsigned flags) 215 { 216 struct knav_queue *qh; 217 unsigned id; 218 int ret = 0; 219 220 qh = devm_kzalloc(inst->kdev->dev, sizeof(*qh), GFP_KERNEL); 221 if (!qh) 222 return ERR_PTR(-ENOMEM); 223 224 qh->stats = alloc_percpu(struct knav_queue_stats); 225 if (!qh->stats) { 226 ret = -ENOMEM; 227 goto err; 228 } 229 230 qh->flags = flags; 231 qh->inst = inst; 232 id = inst->id - inst->qmgr->start_queue; 233 qh->reg_push = &inst->qmgr->reg_push[id]; 234 qh->reg_pop = &inst->qmgr->reg_pop[id]; 235 qh->reg_peek = &inst->qmgr->reg_peek[id]; 236 237 /* first opener? */ 238 if (!knav_queue_is_busy(inst)) { 239 struct knav_range_info *range = inst->range; 240 241 inst->name = kstrndup(name, KNAV_NAME_SIZE - 1, GFP_KERNEL); 242 if (range->ops && range->ops->open_queue) 243 ret = range->ops->open_queue(range, inst, flags); 244 245 if (ret) 246 goto err; 247 } 248 list_add_tail_rcu(&qh->list, &inst->handles); 249 return qh; 250 251 err: 252 free_percpu(qh->stats); 253 devm_kfree(inst->kdev->dev, qh); 254 return ERR_PTR(ret); 255 } 256 257 static struct knav_queue * 258 knav_queue_open_by_id(const char *name, unsigned id, unsigned flags) 259 { 260 struct knav_queue_inst *inst; 261 struct knav_queue *qh; 262 263 mutex_lock(&knav_dev_lock); 264 265 qh = ERR_PTR(-ENODEV); 266 inst = knav_queue_find_by_id(id); 267 if (!inst) 268 goto unlock_ret; 269 270 qh = ERR_PTR(-EEXIST); 271 if (!(flags & KNAV_QUEUE_SHARED) && knav_queue_is_busy(inst)) 272 goto unlock_ret; 273 274 qh = ERR_PTR(-EBUSY); 275 if ((flags & KNAV_QUEUE_SHARED) && 276 (knav_queue_is_busy(inst) && !knav_queue_is_shared(inst))) 277 goto unlock_ret; 278 279 qh = __knav_queue_open(inst, name, flags); 280 281 unlock_ret: 282 mutex_unlock(&knav_dev_lock); 283 284 return qh; 285 } 286 287 static struct knav_queue *knav_queue_open_by_type(const char *name, 288 unsigned type, unsigned flags) 289 { 290 struct knav_queue_inst *inst; 291 struct knav_queue *qh = ERR_PTR(-EINVAL); 292 int idx; 293 294 mutex_lock(&knav_dev_lock); 295 296 for_each_instance(idx, inst, knav_qdev) { 297 if (knav_queue_is_reserved(inst)) 298 continue; 299 if (!knav_queue_match_type(inst, type)) 300 continue; 301 if (knav_queue_is_busy(inst)) 302 continue; 303 qh = __knav_queue_open(inst, name, flags); 304 goto unlock_ret; 305 } 306 307 unlock_ret: 308 mutex_unlock(&knav_dev_lock); 309 return qh; 310 } 311 312 static void knav_queue_set_notify(struct knav_queue_inst *inst, bool enabled) 313 { 314 struct knav_range_info *range = inst->range; 315 316 if (range->ops && range->ops->set_notify) 317 range->ops->set_notify(range, inst, enabled); 318 } 319 320 static int knav_queue_enable_notifier(struct knav_queue *qh) 321 { 322 struct knav_queue_inst *inst = qh->inst; 323 bool first; 324 325 if (WARN_ON(!qh->notifier_fn)) 326 return -EINVAL; 327 328 /* Adjust the per handle notifier count */ 329 first = (atomic_inc_return(&qh->notifier_enabled) == 1); 330 if (!first) 331 return 0; /* nothing to do */ 332 333 /* Now adjust the per instance notifier count */ 334 first = (atomic_inc_return(&inst->num_notifiers) == 1); 335 if (first) 336 knav_queue_set_notify(inst, true); 337 338 return 0; 339 } 340 341 static int knav_queue_disable_notifier(struct knav_queue *qh) 342 { 343 struct knav_queue_inst *inst = qh->inst; 344 bool last; 345 346 last = (atomic_dec_return(&qh->notifier_enabled) == 0); 347 if (!last) 348 return 0; /* nothing to do */ 349 350 last = (atomic_dec_return(&inst->num_notifiers) == 0); 351 if (last) 352 knav_queue_set_notify(inst, false); 353 354 return 0; 355 } 356 357 static int knav_queue_set_notifier(struct knav_queue *qh, 358 struct knav_queue_notify_config *cfg) 359 { 360 knav_queue_notify_fn old_fn = qh->notifier_fn; 361 362 if (!cfg) 363 return -EINVAL; 364 365 if (!(qh->inst->range->flags & (RANGE_HAS_ACCUMULATOR | RANGE_HAS_IRQ))) 366 return -ENOTSUPP; 367 368 if (!cfg->fn && old_fn) 369 knav_queue_disable_notifier(qh); 370 371 qh->notifier_fn = cfg->fn; 372 qh->notifier_fn_arg = cfg->fn_arg; 373 374 if (cfg->fn && !old_fn) 375 knav_queue_enable_notifier(qh); 376 377 return 0; 378 } 379 380 static int knav_gp_set_notify(struct knav_range_info *range, 381 struct knav_queue_inst *inst, 382 bool enabled) 383 { 384 unsigned queue; 385 386 if (range->flags & RANGE_HAS_IRQ) { 387 queue = inst->id - range->queue_base; 388 if (enabled) 389 enable_irq(range->irqs[queue].irq); 390 else 391 disable_irq_nosync(range->irqs[queue].irq); 392 } 393 return 0; 394 } 395 396 static int knav_gp_open_queue(struct knav_range_info *range, 397 struct knav_queue_inst *inst, unsigned flags) 398 { 399 return knav_queue_setup_irq(range, inst); 400 } 401 402 static int knav_gp_close_queue(struct knav_range_info *range, 403 struct knav_queue_inst *inst) 404 { 405 knav_queue_free_irq(inst); 406 return 0; 407 } 408 409 static const struct knav_range_ops knav_gp_range_ops = { 410 .set_notify = knav_gp_set_notify, 411 .open_queue = knav_gp_open_queue, 412 .close_queue = knav_gp_close_queue, 413 }; 414 415 416 static int knav_queue_get_count(void *qhandle) 417 { 418 struct knav_queue *qh = qhandle; 419 struct knav_queue_inst *inst = qh->inst; 420 421 return readl_relaxed(&qh->reg_peek[0].entry_count) + 422 atomic_read(&inst->desc_count); 423 } 424 425 static void knav_queue_debug_show_instance(struct seq_file *s, 426 struct knav_queue_inst *inst) 427 { 428 struct knav_device *kdev = inst->kdev; 429 struct knav_queue *qh; 430 int cpu = 0; 431 int pushes = 0; 432 int pops = 0; 433 int push_errors = 0; 434 int pop_errors = 0; 435 int notifies = 0; 436 437 if (!knav_queue_is_busy(inst)) 438 return; 439 440 seq_printf(s, "\tqueue id %d (%s)\n", 441 kdev->base_id + inst->id, inst->name); 442 for_each_handle_rcu(qh, inst) { 443 for_each_possible_cpu(cpu) { 444 pushes += per_cpu_ptr(qh->stats, cpu)->pushes; 445 pops += per_cpu_ptr(qh->stats, cpu)->pops; 446 push_errors += per_cpu_ptr(qh->stats, cpu)->push_errors; 447 pop_errors += per_cpu_ptr(qh->stats, cpu)->pop_errors; 448 notifies += per_cpu_ptr(qh->stats, cpu)->notifies; 449 } 450 451 seq_printf(s, "\t\thandle %p: pushes %8d, pops %8d, count %8d, notifies %8d, push errors %8d, pop errors %8d\n", 452 qh, 453 pushes, 454 pops, 455 knav_queue_get_count(qh), 456 notifies, 457 push_errors, 458 pop_errors); 459 } 460 } 461 462 static int knav_queue_debug_show(struct seq_file *s, void *v) 463 { 464 struct knav_queue_inst *inst; 465 int idx; 466 467 mutex_lock(&knav_dev_lock); 468 seq_printf(s, "%s: %u-%u\n", 469 dev_name(knav_qdev->dev), knav_qdev->base_id, 470 knav_qdev->base_id + knav_qdev->num_queues - 1); 471 for_each_instance(idx, inst, knav_qdev) 472 knav_queue_debug_show_instance(s, inst); 473 mutex_unlock(&knav_dev_lock); 474 475 return 0; 476 } 477 478 DEFINE_SHOW_ATTRIBUTE(knav_queue_debug); 479 480 static inline int knav_queue_pdsp_wait(u32 __iomem *addr, unsigned int timeout, 481 u32 flags) 482 { 483 unsigned long end; 484 u32 val = 0; 485 486 end = jiffies + msecs_to_jiffies(timeout); 487 while (time_after(end, jiffies)) { 488 val = readl_relaxed(addr); 489 if (flags) 490 val &= flags; 491 if (!val) 492 break; 493 cpu_relax(); 494 } 495 return val ? -ETIMEDOUT : 0; 496 } 497 498 499 static int knav_queue_flush(struct knav_queue *qh) 500 { 501 struct knav_queue_inst *inst = qh->inst; 502 unsigned id = inst->id - inst->qmgr->start_queue; 503 504 atomic_set(&inst->desc_count, 0); 505 writel_relaxed(0, &inst->qmgr->reg_push[id].ptr_size_thresh); 506 return 0; 507 } 508 509 /** 510 * knav_queue_open() - open a hardware queue 511 * @name: - name to give the queue handle 512 * @id: - desired queue number if any or specifes the type 513 * of queue 514 * @flags: - the following flags are applicable to queues: 515 * KNAV_QUEUE_SHARED - allow the queue to be shared. Queues are 516 * exclusive by default. 517 * Subsequent attempts to open a shared queue should 518 * also have this flag. 519 * 520 * Return: handle to the open hardware queue on success. Use IS_ERR() 521 * to check the returned value for error codes. 522 */ 523 void *knav_queue_open(const char *name, unsigned id, 524 unsigned flags) 525 { 526 struct knav_queue *qh = ERR_PTR(-EINVAL); 527 528 switch (id) { 529 case KNAV_QUEUE_QPEND: 530 case KNAV_QUEUE_ACC: 531 case KNAV_QUEUE_GP: 532 qh = knav_queue_open_by_type(name, id, flags); 533 break; 534 535 default: 536 qh = knav_queue_open_by_id(name, id, flags); 537 break; 538 } 539 return qh; 540 } 541 EXPORT_SYMBOL_GPL(knav_queue_open); 542 543 /** 544 * knav_queue_close() - close a hardware queue handle 545 * @qhandle: - handle to close 546 */ 547 void knav_queue_close(void *qhandle) 548 { 549 struct knav_queue *qh = qhandle; 550 struct knav_queue_inst *inst = qh->inst; 551 552 while (atomic_read(&qh->notifier_enabled) > 0) 553 knav_queue_disable_notifier(qh); 554 555 mutex_lock(&knav_dev_lock); 556 list_del_rcu(&qh->list); 557 mutex_unlock(&knav_dev_lock); 558 synchronize_rcu(); 559 if (!knav_queue_is_busy(inst)) { 560 struct knav_range_info *range = inst->range; 561 562 if (range->ops && range->ops->close_queue) 563 range->ops->close_queue(range, inst); 564 } 565 free_percpu(qh->stats); 566 devm_kfree(inst->kdev->dev, qh); 567 } 568 EXPORT_SYMBOL_GPL(knav_queue_close); 569 570 /** 571 * knav_queue_device_control() - Perform control operations on a queue 572 * @qhandle: - queue handle 573 * @cmd: - control commands 574 * @arg: - command argument 575 * 576 * Return: 0 on success, errno otherwise. 577 */ 578 int knav_queue_device_control(void *qhandle, enum knav_queue_ctrl_cmd cmd, 579 unsigned long arg) 580 { 581 struct knav_queue *qh = qhandle; 582 struct knav_queue_notify_config *cfg; 583 int ret; 584 585 switch ((int)cmd) { 586 case KNAV_QUEUE_GET_ID: 587 ret = qh->inst->kdev->base_id + qh->inst->id; 588 break; 589 590 case KNAV_QUEUE_FLUSH: 591 ret = knav_queue_flush(qh); 592 break; 593 594 case KNAV_QUEUE_SET_NOTIFIER: 595 cfg = (void *)arg; 596 ret = knav_queue_set_notifier(qh, cfg); 597 break; 598 599 case KNAV_QUEUE_ENABLE_NOTIFY: 600 ret = knav_queue_enable_notifier(qh); 601 break; 602 603 case KNAV_QUEUE_DISABLE_NOTIFY: 604 ret = knav_queue_disable_notifier(qh); 605 break; 606 607 case KNAV_QUEUE_GET_COUNT: 608 ret = knav_queue_get_count(qh); 609 break; 610 611 default: 612 ret = -ENOTSUPP; 613 break; 614 } 615 return ret; 616 } 617 EXPORT_SYMBOL_GPL(knav_queue_device_control); 618 619 620 621 /** 622 * knav_queue_push() - push data (or descriptor) to the tail of a queue 623 * @qhandle: - hardware queue handle 624 * @dma: - DMA data to push 625 * @size: - size of data to push 626 * @flags: - can be used to pass additional information 627 * 628 * Return: 0 on success, errno otherwise. 629 */ 630 int knav_queue_push(void *qhandle, dma_addr_t dma, 631 unsigned size, unsigned flags) 632 { 633 struct knav_queue *qh = qhandle; 634 u32 val; 635 636 val = (u32)dma | ((size / 16) - 1); 637 writel_relaxed(val, &qh->reg_push[0].ptr_size_thresh); 638 639 this_cpu_inc(qh->stats->pushes); 640 return 0; 641 } 642 EXPORT_SYMBOL_GPL(knav_queue_push); 643 644 /** 645 * knav_queue_pop() - pop data (or descriptor) from the head of a queue 646 * @qhandle: - hardware queue handle 647 * @size: - (optional) size of the data pop'ed. 648 * 649 * Return: DMA address on success, 0 on failure. 650 */ 651 dma_addr_t knav_queue_pop(void *qhandle, unsigned *size) 652 { 653 struct knav_queue *qh = qhandle; 654 struct knav_queue_inst *inst = qh->inst; 655 dma_addr_t dma; 656 u32 val, idx; 657 658 /* are we accumulated? */ 659 if (inst->descs) { 660 if (unlikely(atomic_dec_return(&inst->desc_count) < 0)) { 661 atomic_inc(&inst->desc_count); 662 return 0; 663 } 664 idx = atomic_inc_return(&inst->desc_head); 665 idx &= ACC_DESCS_MASK; 666 val = inst->descs[idx]; 667 } else { 668 val = readl_relaxed(&qh->reg_pop[0].ptr_size_thresh); 669 if (unlikely(!val)) 670 return 0; 671 } 672 673 dma = val & DESC_PTR_MASK; 674 if (size) 675 *size = ((val & DESC_SIZE_MASK) + 1) * 16; 676 677 this_cpu_inc(qh->stats->pops); 678 return dma; 679 } 680 EXPORT_SYMBOL_GPL(knav_queue_pop); 681 682 /* carve out descriptors and push into queue */ 683 static void kdesc_fill_pool(struct knav_pool *pool) 684 { 685 struct knav_region *region; 686 int i; 687 688 region = pool->region; 689 pool->desc_size = region->desc_size; 690 for (i = 0; i < pool->num_desc; i++) { 691 int index = pool->region_offset + i; 692 dma_addr_t dma_addr; 693 unsigned dma_size; 694 dma_addr = region->dma_start + (region->desc_size * index); 695 dma_size = ALIGN(pool->desc_size, SMP_CACHE_BYTES); 696 dma_sync_single_for_device(pool->dev, dma_addr, dma_size, 697 DMA_TO_DEVICE); 698 knav_queue_push(pool->queue, dma_addr, dma_size, 0); 699 } 700 } 701 702 /* pop out descriptors and close the queue */ 703 static void kdesc_empty_pool(struct knav_pool *pool) 704 { 705 dma_addr_t dma; 706 unsigned size; 707 void *desc; 708 int i; 709 710 if (!pool->queue) 711 return; 712 713 for (i = 0;; i++) { 714 dma = knav_queue_pop(pool->queue, &size); 715 if (!dma) 716 break; 717 desc = knav_pool_desc_dma_to_virt(pool, dma); 718 if (!desc) { 719 dev_dbg(pool->kdev->dev, 720 "couldn't unmap desc, continuing\n"); 721 } 722 } 723 WARN_ON(i != pool->num_desc); 724 knav_queue_close(pool->queue); 725 } 726 727 728 /* Get the DMA address of a descriptor */ 729 dma_addr_t knav_pool_desc_virt_to_dma(void *ph, void *virt) 730 { 731 struct knav_pool *pool = ph; 732 return pool->region->dma_start + (virt - pool->region->virt_start); 733 } 734 EXPORT_SYMBOL_GPL(knav_pool_desc_virt_to_dma); 735 736 void *knav_pool_desc_dma_to_virt(void *ph, dma_addr_t dma) 737 { 738 struct knav_pool *pool = ph; 739 return pool->region->virt_start + (dma - pool->region->dma_start); 740 } 741 EXPORT_SYMBOL_GPL(knav_pool_desc_dma_to_virt); 742 743 /** 744 * knav_pool_create() - Create a pool of descriptors 745 * @name: - name to give the pool handle 746 * @num_desc: - numbers of descriptors in the pool 747 * @region_id: - QMSS region id from which the descriptors are to be 748 * allocated. 749 * 750 * Return: pool handle on success. Use IS_ERR_OR_NULL() to identify 751 * error values on return. 752 */ 753 void *knav_pool_create(const char *name, 754 int num_desc, int region_id) 755 { 756 struct knav_region *reg_itr, *region = NULL; 757 struct knav_pool *pool, *pi = NULL, *iter; 758 struct list_head *node; 759 unsigned last_offset; 760 int ret; 761 762 if (!knav_qdev) 763 return ERR_PTR(-EPROBE_DEFER); 764 765 if (!knav_qdev->dev) 766 return ERR_PTR(-ENODEV); 767 768 pool = devm_kzalloc(knav_qdev->dev, sizeof(*pool), GFP_KERNEL); 769 if (!pool) 770 return ERR_PTR(-ENOMEM); 771 772 for_each_region(knav_qdev, reg_itr) { 773 if (reg_itr->id != region_id) 774 continue; 775 region = reg_itr; 776 break; 777 } 778 779 if (!region) { 780 dev_err(knav_qdev->dev, "region-id(%d) not found\n", region_id); 781 ret = -EINVAL; 782 goto err; 783 } 784 785 pool->queue = knav_queue_open(name, KNAV_QUEUE_GP, 0); 786 if (IS_ERR(pool->queue)) { 787 dev_err(knav_qdev->dev, 788 "failed to open queue for pool(%s), error %pe\n", 789 name, pool->queue); 790 ret = PTR_ERR(pool->queue); 791 goto err; 792 } 793 794 pool->name = kstrndup(name, KNAV_NAME_SIZE - 1, GFP_KERNEL); 795 pool->kdev = knav_qdev; 796 pool->dev = knav_qdev->dev; 797 798 mutex_lock(&knav_dev_lock); 799 800 if (num_desc > (region->num_desc - region->used_desc)) { 801 dev_err(knav_qdev->dev, "out of descs in region(%d) for pool(%s)\n", 802 region_id, name); 803 ret = -ENOMEM; 804 goto err_unlock; 805 } 806 807 /* Region maintains a sorted (by region offset) list of pools 808 * use the first free slot which is large enough to accomodate 809 * the request 810 */ 811 last_offset = 0; 812 node = ®ion->pools; 813 list_for_each_entry(iter, ®ion->pools, region_inst) { 814 if ((iter->region_offset - last_offset) >= num_desc) { 815 pi = iter; 816 break; 817 } 818 last_offset = iter->region_offset + iter->num_desc; 819 } 820 821 if (pi) { 822 node = &pi->region_inst; 823 pool->region = region; 824 pool->num_desc = num_desc; 825 pool->region_offset = last_offset; 826 region->used_desc += num_desc; 827 list_add_tail(&pool->list, &knav_qdev->pools); 828 list_add_tail(&pool->region_inst, node); 829 } else { 830 dev_err(knav_qdev->dev, "pool(%s) create failed: fragmented desc pool in region(%d)\n", 831 name, region_id); 832 ret = -ENOMEM; 833 goto err_unlock; 834 } 835 836 mutex_unlock(&knav_dev_lock); 837 kdesc_fill_pool(pool); 838 return pool; 839 840 err_unlock: 841 mutex_unlock(&knav_dev_lock); 842 err: 843 kfree(pool->name); 844 devm_kfree(knav_qdev->dev, pool); 845 return ERR_PTR(ret); 846 } 847 EXPORT_SYMBOL_GPL(knav_pool_create); 848 849 /** 850 * knav_pool_destroy() - Free a pool of descriptors 851 * @ph: - pool handle 852 */ 853 void knav_pool_destroy(void *ph) 854 { 855 struct knav_pool *pool = ph; 856 857 if (!pool) 858 return; 859 860 if (!pool->region) 861 return; 862 863 kdesc_empty_pool(pool); 864 mutex_lock(&knav_dev_lock); 865 866 pool->region->used_desc -= pool->num_desc; 867 list_del(&pool->region_inst); 868 list_del(&pool->list); 869 870 mutex_unlock(&knav_dev_lock); 871 kfree(pool->name); 872 devm_kfree(knav_qdev->dev, pool); 873 } 874 EXPORT_SYMBOL_GPL(knav_pool_destroy); 875 876 877 /** 878 * knav_pool_desc_get() - Get a descriptor from the pool 879 * @ph: - pool handle 880 * 881 * Return: descriptor from the pool on success, error pointer otherwise. 882 */ 883 void *knav_pool_desc_get(void *ph) 884 { 885 struct knav_pool *pool = ph; 886 dma_addr_t dma; 887 unsigned size; 888 void *data; 889 890 dma = knav_queue_pop(pool->queue, &size); 891 if (unlikely(!dma)) 892 return ERR_PTR(-ENOMEM); 893 data = knav_pool_desc_dma_to_virt(pool, dma); 894 return data; 895 } 896 EXPORT_SYMBOL_GPL(knav_pool_desc_get); 897 898 /** 899 * knav_pool_desc_put() - return a descriptor to the pool 900 * @ph: - pool handle 901 * @desc: - virtual address 902 */ 903 void knav_pool_desc_put(void *ph, void *desc) 904 { 905 struct knav_pool *pool = ph; 906 dma_addr_t dma; 907 dma = knav_pool_desc_virt_to_dma(pool, desc); 908 knav_queue_push(pool->queue, dma, pool->region->desc_size, 0); 909 } 910 EXPORT_SYMBOL_GPL(knav_pool_desc_put); 911 912 /** 913 * knav_pool_desc_map() - Map descriptor for DMA transfer 914 * @ph: - pool handle 915 * @desc: - address of descriptor to map 916 * @size: - size of descriptor to map 917 * @dma: - DMA address return pointer 918 * @dma_sz: - adjusted return pointer 919 * 920 * Return: 0 on success, errno otherwise. 921 */ 922 int knav_pool_desc_map(void *ph, void *desc, unsigned size, 923 dma_addr_t *dma, unsigned *dma_sz) 924 { 925 struct knav_pool *pool = ph; 926 *dma = knav_pool_desc_virt_to_dma(pool, desc); 927 size = min(size, pool->region->desc_size); 928 size = ALIGN(size, SMP_CACHE_BYTES); 929 *dma_sz = size; 930 dma_sync_single_for_device(pool->dev, *dma, size, DMA_TO_DEVICE); 931 932 /* Ensure the descriptor reaches to the memory */ 933 __iowmb(); 934 935 return 0; 936 } 937 EXPORT_SYMBOL_GPL(knav_pool_desc_map); 938 939 /** 940 * knav_pool_desc_unmap() - Unmap descriptor after DMA transfer 941 * @ph: - pool handle 942 * @dma: - DMA address of descriptor to unmap 943 * @dma_sz: - size of descriptor to unmap 944 * 945 * Return: descriptor address on success. Use IS_ERR_OR_NULL() to identify 946 * error values on return. 947 */ 948 void *knav_pool_desc_unmap(void *ph, dma_addr_t dma, unsigned dma_sz) 949 { 950 struct knav_pool *pool = ph; 951 unsigned desc_sz; 952 void *desc; 953 954 desc_sz = min(dma_sz, pool->region->desc_size); 955 desc = knav_pool_desc_dma_to_virt(pool, dma); 956 dma_sync_single_for_cpu(pool->dev, dma, desc_sz, DMA_FROM_DEVICE); 957 prefetch(desc); 958 return desc; 959 } 960 EXPORT_SYMBOL_GPL(knav_pool_desc_unmap); 961 962 /** 963 * knav_pool_count() - Get the number of descriptors in pool. 964 * @ph: - pool handle 965 * 966 * Return: number of elements in the pool. 967 */ 968 int knav_pool_count(void *ph) 969 { 970 struct knav_pool *pool = ph; 971 return knav_queue_get_count(pool->queue); 972 } 973 EXPORT_SYMBOL_GPL(knav_pool_count); 974 975 static void knav_queue_setup_region(struct knav_device *kdev, 976 struct knav_region *region) 977 { 978 unsigned hw_num_desc, hw_desc_size, size; 979 struct knav_reg_region __iomem *regs; 980 struct knav_qmgr_info *qmgr; 981 struct knav_pool *pool; 982 int id = region->id; 983 struct page *page; 984 985 /* unused region? */ 986 if (!region->num_desc) { 987 dev_warn(kdev->dev, "unused region %s\n", region->name); 988 return; 989 } 990 991 /* get hardware descriptor value */ 992 hw_num_desc = ilog2(region->num_desc - 1) + 1; 993 994 /* did we force fit ourselves into nothingness? */ 995 if (region->num_desc < 32) { 996 region->num_desc = 0; 997 dev_warn(kdev->dev, "too few descriptors in region %s\n", 998 region->name); 999 return; 1000 } 1001 1002 size = region->num_desc * region->desc_size; 1003 region->virt_start = alloc_pages_exact(size, GFP_KERNEL | GFP_DMA | 1004 GFP_DMA32); 1005 if (!region->virt_start) { 1006 region->num_desc = 0; 1007 dev_err(kdev->dev, "memory alloc failed for region %s\n", 1008 region->name); 1009 return; 1010 } 1011 region->virt_end = region->virt_start + size; 1012 page = virt_to_page(region->virt_start); 1013 1014 region->dma_start = dma_map_page(kdev->dev, page, 0, size, 1015 DMA_BIDIRECTIONAL); 1016 if (dma_mapping_error(kdev->dev, region->dma_start)) { 1017 dev_err(kdev->dev, "dma map failed for region %s\n", 1018 region->name); 1019 goto fail; 1020 } 1021 region->dma_end = region->dma_start + size; 1022 1023 pool = devm_kzalloc(kdev->dev, sizeof(*pool), GFP_KERNEL); 1024 if (!pool) 1025 goto fail; 1026 pool->num_desc = 0; 1027 pool->region_offset = region->num_desc; 1028 list_add(&pool->region_inst, ®ion->pools); 1029 1030 dev_dbg(kdev->dev, 1031 "region %s (%d): size:%d, link:%d@%d, dma:%pad-%pad, virt:%p-%p\n", 1032 region->name, id, region->desc_size, region->num_desc, 1033 region->link_index, ®ion->dma_start, ®ion->dma_end, 1034 region->virt_start, region->virt_end); 1035 1036 hw_desc_size = (region->desc_size / 16) - 1; 1037 hw_num_desc -= 5; 1038 1039 for_each_qmgr(kdev, qmgr) { 1040 regs = qmgr->reg_region + id; 1041 writel_relaxed((u32)region->dma_start, ®s->base); 1042 writel_relaxed(region->link_index, ®s->start_index); 1043 writel_relaxed(hw_desc_size << 16 | hw_num_desc, 1044 ®s->size_count); 1045 } 1046 return; 1047 1048 fail: 1049 if (region->dma_start) 1050 dma_unmap_page(kdev->dev, region->dma_start, size, 1051 DMA_BIDIRECTIONAL); 1052 if (region->virt_start) 1053 free_pages_exact(region->virt_start, size); 1054 region->num_desc = 0; 1055 return; 1056 } 1057 1058 static const char *knav_queue_find_name(struct device_node *node) 1059 { 1060 const char *name; 1061 1062 if (of_property_read_string(node, "label", &name) < 0) 1063 name = node->name; 1064 if (!name) 1065 name = "unknown"; 1066 return name; 1067 } 1068 1069 static int knav_queue_setup_regions(struct knav_device *kdev, 1070 struct device_node *node) 1071 { 1072 struct device *dev = kdev->dev; 1073 struct device_node *regions __free(device_node) = 1074 of_get_child_by_name(node, "descriptor-regions"); 1075 struct knav_region *region; 1076 u32 temp[2]; 1077 int ret; 1078 1079 if (!regions) 1080 return dev_err_probe(dev, -ENODEV, 1081 "descriptor-regions not specified\n"); 1082 1083 for_each_child_of_node_scoped(regions, child) { 1084 region = devm_kzalloc(dev, sizeof(*region), GFP_KERNEL); 1085 if (!region) 1086 return -ENOMEM; 1087 1088 region->name = knav_queue_find_name(child); 1089 of_property_read_u32(child, "id", ®ion->id); 1090 ret = of_property_read_u32_array(child, "region-spec", temp, 2); 1091 if (!ret) { 1092 region->num_desc = temp[0]; 1093 region->desc_size = temp[1]; 1094 } else { 1095 dev_err(dev, "invalid region info %s\n", region->name); 1096 devm_kfree(dev, region); 1097 continue; 1098 } 1099 1100 ret = of_property_read_u32(child, "link-index", 1101 ®ion->link_index); 1102 if (ret) { 1103 dev_err(dev, "link index not found for %s\n", 1104 region->name); 1105 devm_kfree(dev, region); 1106 continue; 1107 } 1108 1109 INIT_LIST_HEAD(®ion->pools); 1110 list_add_tail(®ion->list, &kdev->regions); 1111 } 1112 if (list_empty(&kdev->regions)) 1113 return dev_err_probe(dev, -ENODEV, 1114 "no valid region information found\n"); 1115 1116 /* Next, we run through the regions and set things up */ 1117 for_each_region(kdev, region) 1118 knav_queue_setup_region(kdev, region); 1119 1120 return 0; 1121 } 1122 1123 static int knav_get_link_ram(struct knav_device *kdev, 1124 const char *name, 1125 struct knav_link_ram_block *block) 1126 { 1127 struct platform_device *pdev = to_platform_device(kdev->dev); 1128 struct device_node *node = pdev->dev.of_node; 1129 u32 temp[2]; 1130 1131 /* 1132 * Note: link ram resources are specified in "entry" sized units. In 1133 * reality, although entries are ~40bits in hardware, we treat them as 1134 * 64-bit entities here. 1135 * 1136 * For example, to specify the internal link ram for Keystone-I class 1137 * devices, we would set the linkram0 resource to 0x80000-0x83fff. 1138 * 1139 * This gets a bit weird when other link rams are used. For example, 1140 * if the range specified is 0x0c000000-0x0c003fff (i.e., 16K entries 1141 * in MSMC SRAM), the actual memory used is 0x0c000000-0x0c020000, 1142 * which accounts for 64-bits per entry, for 16K entries. 1143 */ 1144 if (!of_property_read_u32_array(node, name , temp, 2)) { 1145 if (temp[0]) { 1146 /* 1147 * queue_base specified => using internal or onchip 1148 * link ram WARNING - we do not "reserve" this block 1149 */ 1150 block->dma = (dma_addr_t)temp[0]; 1151 block->virt = NULL; 1152 block->size = temp[1]; 1153 } else { 1154 block->size = temp[1]; 1155 /* queue_base not specific => allocate requested size */ 1156 block->virt = dmam_alloc_coherent(kdev->dev, 1157 8 * block->size, &block->dma, 1158 GFP_KERNEL); 1159 if (!block->virt) { 1160 dev_err(kdev->dev, "failed to alloc linkram\n"); 1161 return -ENOMEM; 1162 } 1163 } 1164 } else { 1165 return -ENODEV; 1166 } 1167 return 0; 1168 } 1169 1170 static int knav_queue_setup_link_ram(struct knav_device *kdev) 1171 { 1172 struct knav_link_ram_block *block; 1173 struct knav_qmgr_info *qmgr; 1174 1175 for_each_qmgr(kdev, qmgr) { 1176 block = &kdev->link_rams[0]; 1177 dev_dbg(kdev->dev, "linkram0: dma:%pad, virt:%p, size:%x\n", 1178 &block->dma, block->virt, block->size); 1179 writel_relaxed((u32)block->dma, &qmgr->reg_config->link_ram_base0); 1180 if (kdev->version == QMSS_66AK2G) 1181 writel_relaxed(block->size, 1182 &qmgr->reg_config->link_ram_size0); 1183 else 1184 writel_relaxed(block->size - 1, 1185 &qmgr->reg_config->link_ram_size0); 1186 block++; 1187 if (!block->size) 1188 continue; 1189 1190 dev_dbg(kdev->dev, "linkram1: dma:%pad, virt:%p, size:%x\n", 1191 &block->dma, block->virt, block->size); 1192 writel_relaxed(block->dma, &qmgr->reg_config->link_ram_base1); 1193 } 1194 1195 return 0; 1196 } 1197 1198 static int knav_setup_queue_range(struct knav_device *kdev, 1199 struct device_node *node) 1200 { 1201 struct device *dev = kdev->dev; 1202 struct knav_range_info *range; 1203 struct knav_qmgr_info *qmgr; 1204 u32 temp[2], start, end, id, index; 1205 int ret, i; 1206 1207 range = devm_kzalloc(dev, sizeof(*range), GFP_KERNEL); 1208 if (!range) 1209 return -ENOMEM; 1210 1211 range->kdev = kdev; 1212 range->name = knav_queue_find_name(node); 1213 ret = of_property_read_u32_array(node, "qrange", temp, 2); 1214 if (!ret) { 1215 range->queue_base = temp[0] - kdev->base_id; 1216 range->num_queues = temp[1]; 1217 } else { 1218 dev_err(dev, "invalid queue range %s\n", range->name); 1219 devm_kfree(dev, range); 1220 return -EINVAL; 1221 } 1222 1223 for (i = 0; i < RANGE_MAX_IRQS; i++) { 1224 struct of_phandle_args oirq; 1225 1226 if (of_irq_parse_one(node, i, &oirq)) 1227 break; 1228 1229 range->irqs[i].irq = irq_create_of_mapping(&oirq); 1230 if (range->irqs[i].irq == IRQ_NONE) 1231 break; 1232 1233 range->num_irqs++; 1234 1235 if (IS_ENABLED(CONFIG_SMP) && oirq.args_count == 3) { 1236 unsigned long mask; 1237 int bit; 1238 1239 range->irqs[i].cpu_mask = devm_kzalloc(dev, 1240 cpumask_size(), GFP_KERNEL); 1241 if (!range->irqs[i].cpu_mask) 1242 return -ENOMEM; 1243 1244 mask = (oirq.args[2] & 0x0000ff00) >> 8; 1245 for_each_set_bit(bit, &mask, BITS_PER_LONG) 1246 cpumask_set_cpu(bit, range->irqs[i].cpu_mask); 1247 } 1248 } 1249 1250 range->num_irqs = min(range->num_irqs, range->num_queues); 1251 if (range->num_irqs) 1252 range->flags |= RANGE_HAS_IRQ; 1253 1254 if (of_property_read_bool(node, "qalloc-by-id")) 1255 range->flags |= RANGE_RESERVED; 1256 1257 if (of_property_present(node, "accumulator")) { 1258 ret = knav_init_acc_range(kdev, node, range); 1259 if (ret < 0) { 1260 devm_kfree(dev, range); 1261 return ret; 1262 } 1263 } else { 1264 range->ops = &knav_gp_range_ops; 1265 } 1266 1267 /* set threshold to 1, and flush out the queues */ 1268 for_each_qmgr(kdev, qmgr) { 1269 start = max(qmgr->start_queue, range->queue_base); 1270 end = min(qmgr->start_queue + qmgr->num_queues, 1271 range->queue_base + range->num_queues); 1272 for (id = start; id < end; id++) { 1273 index = id - qmgr->start_queue; 1274 writel_relaxed(THRESH_GTE | 1, 1275 &qmgr->reg_peek[index].ptr_size_thresh); 1276 writel_relaxed(0, 1277 &qmgr->reg_push[index].ptr_size_thresh); 1278 } 1279 } 1280 1281 list_add_tail(&range->list, &kdev->queue_ranges); 1282 dev_dbg(dev, "added range %s: %d-%d, %d irqs%s%s%s\n", 1283 range->name, range->queue_base, 1284 range->queue_base + range->num_queues - 1, 1285 range->num_irqs, 1286 (range->flags & RANGE_HAS_IRQ) ? ", has irq" : "", 1287 (range->flags & RANGE_RESERVED) ? ", reserved" : "", 1288 (range->flags & RANGE_HAS_ACCUMULATOR) ? ", acc" : ""); 1289 kdev->num_queues_in_use += range->num_queues; 1290 return 0; 1291 } 1292 1293 static int knav_setup_queue_pools(struct knav_device *kdev, 1294 struct device_node *node) 1295 { 1296 struct device_node *queue_pools __free(device_node) = 1297 of_get_child_by_name(node, "queue-pools"); 1298 struct device_node *type, *range; 1299 1300 if (!queue_pools) 1301 return dev_err_probe(kdev->dev, -ENODEV, 1302 "queue-pools not specified\n"); 1303 1304 for_each_child_of_node(queue_pools, type) { 1305 for_each_child_of_node(type, range) { 1306 /* return value ignored, we init the rest... */ 1307 knav_setup_queue_range(kdev, range); 1308 } 1309 } 1310 1311 /* ... and barf if they all failed! */ 1312 if (list_empty(&kdev->queue_ranges)) 1313 return dev_err_probe(kdev->dev, -ENODEV, 1314 "no valid queue range found\n"); 1315 return 0; 1316 } 1317 1318 static void knav_free_queue_range(struct knav_device *kdev, 1319 struct knav_range_info *range) 1320 { 1321 if (range->ops && range->ops->free_range) 1322 range->ops->free_range(range); 1323 list_del(&range->list); 1324 devm_kfree(kdev->dev, range); 1325 } 1326 1327 static void knav_free_queue_ranges(struct knav_device *kdev) 1328 { 1329 struct knav_range_info *range; 1330 1331 for (;;) { 1332 range = first_queue_range(kdev); 1333 if (!range) 1334 break; 1335 knav_free_queue_range(kdev, range); 1336 } 1337 } 1338 1339 static void knav_queue_free_regions(struct knav_device *kdev) 1340 { 1341 struct knav_region *region; 1342 struct knav_pool *pool, *tmp; 1343 unsigned size; 1344 1345 for (;;) { 1346 region = first_region(kdev); 1347 if (!region) 1348 break; 1349 list_for_each_entry_safe(pool, tmp, ®ion->pools, region_inst) 1350 knav_pool_destroy(pool); 1351 1352 size = region->virt_end - region->virt_start; 1353 if (size) 1354 free_pages_exact(region->virt_start, size); 1355 list_del(®ion->list); 1356 devm_kfree(kdev->dev, region); 1357 } 1358 } 1359 1360 static void __iomem *knav_queue_map_reg(struct knav_device *kdev, 1361 struct device_node *node, int index) 1362 { 1363 struct resource res; 1364 void __iomem *regs; 1365 int ret; 1366 1367 ret = of_address_to_resource(node, index, &res); 1368 if (ret) { 1369 dev_err(kdev->dev, "Can't translate of node(%pOFn) address for index(%d)\n", 1370 node, index); 1371 return IOMEM_ERR_PTR(ret); 1372 } 1373 1374 regs = devm_ioremap_resource(kdev->dev, &res); 1375 if (IS_ERR(regs)) 1376 dev_err(kdev->dev, "Failed to map register base for index(%d) node(%pOFn)\n", 1377 index, node); 1378 return regs; 1379 } 1380 1381 static int knav_queue_init_qmgrs(struct knav_device *kdev, 1382 struct device_node *node) 1383 { 1384 struct device *dev = kdev->dev; 1385 struct device_node *qmgrs __free(device_node) = 1386 of_get_child_by_name(node, "qmgrs"); 1387 struct knav_qmgr_info *qmgr; 1388 u32 temp[2]; 1389 int ret; 1390 1391 if (!qmgrs) 1392 return dev_err_probe(dev, -ENODEV, 1393 "queue manager info not specified\n"); 1394 1395 for_each_child_of_node_scoped(qmgrs, child) { 1396 qmgr = devm_kzalloc(dev, sizeof(*qmgr), GFP_KERNEL); 1397 if (!qmgr) 1398 return -ENOMEM; 1399 1400 ret = of_property_read_u32_array(child, "managed-queues", 1401 temp, 2); 1402 if (!ret) { 1403 qmgr->start_queue = temp[0]; 1404 qmgr->num_queues = temp[1]; 1405 } else { 1406 dev_err(dev, "invalid qmgr queue range\n"); 1407 devm_kfree(dev, qmgr); 1408 continue; 1409 } 1410 1411 dev_info(dev, "qmgr start queue %d, number of queues %d\n", 1412 qmgr->start_queue, qmgr->num_queues); 1413 1414 qmgr->reg_peek = 1415 knav_queue_map_reg(kdev, child, 1416 KNAV_QUEUE_PEEK_REG_INDEX); 1417 1418 if (kdev->version == QMSS) { 1419 qmgr->reg_status = 1420 knav_queue_map_reg(kdev, child, 1421 KNAV_QUEUE_STATUS_REG_INDEX); 1422 } 1423 1424 qmgr->reg_config = 1425 knav_queue_map_reg(kdev, child, 1426 (kdev->version == QMSS_66AK2G) ? 1427 KNAV_L_QUEUE_CONFIG_REG_INDEX : 1428 KNAV_QUEUE_CONFIG_REG_INDEX); 1429 qmgr->reg_region = 1430 knav_queue_map_reg(kdev, child, 1431 (kdev->version == QMSS_66AK2G) ? 1432 KNAV_L_QUEUE_REGION_REG_INDEX : 1433 KNAV_QUEUE_REGION_REG_INDEX); 1434 1435 qmgr->reg_push = 1436 knav_queue_map_reg(kdev, child, 1437 (kdev->version == QMSS_66AK2G) ? 1438 KNAV_L_QUEUE_PUSH_REG_INDEX : 1439 KNAV_QUEUE_PUSH_REG_INDEX); 1440 1441 if (kdev->version == QMSS) { 1442 qmgr->reg_pop = 1443 knav_queue_map_reg(kdev, child, 1444 KNAV_QUEUE_POP_REG_INDEX); 1445 } 1446 1447 if (IS_ERR(qmgr->reg_peek) || 1448 ((kdev->version == QMSS) && 1449 (IS_ERR(qmgr->reg_status) || IS_ERR(qmgr->reg_pop))) || 1450 IS_ERR(qmgr->reg_config) || IS_ERR(qmgr->reg_region) || 1451 IS_ERR(qmgr->reg_push)) { 1452 dev_err(dev, "failed to map qmgr regs\n"); 1453 if (kdev->version == QMSS) { 1454 if (!IS_ERR(qmgr->reg_status)) 1455 devm_iounmap(dev, qmgr->reg_status); 1456 if (!IS_ERR(qmgr->reg_pop)) 1457 devm_iounmap(dev, qmgr->reg_pop); 1458 } 1459 if (!IS_ERR(qmgr->reg_peek)) 1460 devm_iounmap(dev, qmgr->reg_peek); 1461 if (!IS_ERR(qmgr->reg_config)) 1462 devm_iounmap(dev, qmgr->reg_config); 1463 if (!IS_ERR(qmgr->reg_region)) 1464 devm_iounmap(dev, qmgr->reg_region); 1465 if (!IS_ERR(qmgr->reg_push)) 1466 devm_iounmap(dev, qmgr->reg_push); 1467 devm_kfree(dev, qmgr); 1468 continue; 1469 } 1470 1471 /* Use same push register for pop as well */ 1472 if (kdev->version == QMSS_66AK2G) 1473 qmgr->reg_pop = qmgr->reg_push; 1474 1475 list_add_tail(&qmgr->list, &kdev->qmgrs); 1476 dev_info(dev, "added qmgr start queue %d, num of queues %d, reg_peek %p, reg_status %p, reg_config %p, reg_region %p, reg_push %p, reg_pop %p\n", 1477 qmgr->start_queue, qmgr->num_queues, 1478 qmgr->reg_peek, qmgr->reg_status, 1479 qmgr->reg_config, qmgr->reg_region, 1480 qmgr->reg_push, qmgr->reg_pop); 1481 } 1482 return 0; 1483 } 1484 1485 static int knav_queue_init_pdsps(struct knav_device *kdev, 1486 struct device_node *pdsps) 1487 { 1488 struct device *dev = kdev->dev; 1489 struct knav_pdsp_info *pdsp; 1490 1491 for_each_child_of_node_scoped(pdsps, child) { 1492 pdsp = devm_kzalloc(dev, sizeof(*pdsp), GFP_KERNEL); 1493 if (!pdsp) 1494 return -ENOMEM; 1495 1496 pdsp->name = knav_queue_find_name(child); 1497 pdsp->iram = 1498 knav_queue_map_reg(kdev, child, 1499 KNAV_QUEUE_PDSP_IRAM_REG_INDEX); 1500 pdsp->regs = 1501 knav_queue_map_reg(kdev, child, 1502 KNAV_QUEUE_PDSP_REGS_REG_INDEX); 1503 pdsp->intd = 1504 knav_queue_map_reg(kdev, child, 1505 KNAV_QUEUE_PDSP_INTD_REG_INDEX); 1506 pdsp->command = 1507 knav_queue_map_reg(kdev, child, 1508 KNAV_QUEUE_PDSP_CMD_REG_INDEX); 1509 1510 if (IS_ERR(pdsp->command) || IS_ERR(pdsp->iram) || 1511 IS_ERR(pdsp->regs) || IS_ERR(pdsp->intd)) { 1512 dev_err(dev, "failed to map pdsp %s regs\n", 1513 pdsp->name); 1514 if (!IS_ERR(pdsp->command)) 1515 devm_iounmap(dev, pdsp->command); 1516 if (!IS_ERR(pdsp->iram)) 1517 devm_iounmap(dev, pdsp->iram); 1518 if (!IS_ERR(pdsp->regs)) 1519 devm_iounmap(dev, pdsp->regs); 1520 if (!IS_ERR(pdsp->intd)) 1521 devm_iounmap(dev, pdsp->intd); 1522 devm_kfree(dev, pdsp); 1523 continue; 1524 } 1525 of_property_read_u32(child, "id", &pdsp->id); 1526 list_add_tail(&pdsp->list, &kdev->pdsps); 1527 dev_dbg(dev, "added pdsp %s: command %p, iram %p, regs %p, intd %p\n", 1528 pdsp->name, pdsp->command, pdsp->iram, pdsp->regs, 1529 pdsp->intd); 1530 } 1531 return 0; 1532 } 1533 1534 static int knav_queue_stop_pdsp(struct knav_device *kdev, 1535 struct knav_pdsp_info *pdsp) 1536 { 1537 u32 val, timeout = 1000; 1538 int ret; 1539 1540 val = readl_relaxed(&pdsp->regs->control) & ~PDSP_CTRL_ENABLE; 1541 writel_relaxed(val, &pdsp->regs->control); 1542 ret = knav_queue_pdsp_wait(&pdsp->regs->control, timeout, 1543 PDSP_CTRL_RUNNING); 1544 if (ret < 0) { 1545 dev_err(kdev->dev, "timed out on pdsp %s stop\n", pdsp->name); 1546 return ret; 1547 } 1548 pdsp->loaded = false; 1549 pdsp->started = false; 1550 return 0; 1551 } 1552 1553 static int knav_queue_load_pdsp(struct knav_device *kdev, 1554 struct knav_pdsp_info *pdsp) 1555 { 1556 int i, ret, fwlen; 1557 const struct firmware *fw; 1558 bool found = false; 1559 const __be32 *fwdata; 1560 1561 for (i = 0; i < ARRAY_SIZE(knav_acc_firmwares); i++) { 1562 if (knav_acc_firmwares[i]) { 1563 ret = request_firmware_direct(&fw, 1564 knav_acc_firmwares[i], 1565 kdev->dev); 1566 if (!ret) { 1567 found = true; 1568 break; 1569 } 1570 } 1571 } 1572 1573 if (!found) { 1574 dev_err(kdev->dev, "failed to get firmware for pdsp\n"); 1575 return -ENODEV; 1576 } 1577 1578 dev_info(kdev->dev, "firmware file %s downloaded for PDSP\n", 1579 knav_acc_firmwares[i]); 1580 1581 writel_relaxed(pdsp->id + 1, pdsp->command + 0x6); 1582 /* download the firmware */ 1583 fwdata = (const __be32 *)fw->data; 1584 fwlen = (fw->size + sizeof(u32) - 1) / sizeof(u32); 1585 for (i = 0; i < fwlen; i++) 1586 writel_relaxed(be32_to_cpu(fwdata[i]), pdsp->iram + i); 1587 1588 release_firmware(fw); 1589 return 0; 1590 } 1591 1592 static int knav_queue_start_pdsp(struct knav_device *kdev, 1593 struct knav_pdsp_info *pdsp) 1594 { 1595 u32 val, timeout = 1000; 1596 int ret; 1597 1598 /* write a command for sync */ 1599 writel_relaxed(0xffffffff, pdsp->command); 1600 while (readl_relaxed(pdsp->command) != 0xffffffff) 1601 cpu_relax(); 1602 1603 /* soft reset the PDSP */ 1604 val = readl_relaxed(&pdsp->regs->control); 1605 val &= ~(PDSP_CTRL_PC_MASK | PDSP_CTRL_SOFT_RESET); 1606 writel_relaxed(val, &pdsp->regs->control); 1607 1608 /* enable pdsp */ 1609 val = readl_relaxed(&pdsp->regs->control) | PDSP_CTRL_ENABLE; 1610 writel_relaxed(val, &pdsp->regs->control); 1611 1612 /* wait for command register to clear */ 1613 ret = knav_queue_pdsp_wait(pdsp->command, timeout, 0); 1614 if (ret < 0) { 1615 dev_err(kdev->dev, 1616 "timed out on pdsp %s command register wait\n", 1617 pdsp->name); 1618 return ret; 1619 } 1620 return 0; 1621 } 1622 1623 static void knav_queue_stop_pdsps(struct knav_device *kdev) 1624 { 1625 struct knav_pdsp_info *pdsp; 1626 1627 /* disable all pdsps */ 1628 for_each_pdsp(kdev, pdsp) 1629 knav_queue_stop_pdsp(kdev, pdsp); 1630 } 1631 1632 static int knav_queue_start_pdsps(struct knav_device *kdev) 1633 { 1634 struct knav_pdsp_info *pdsp; 1635 int ret; 1636 1637 knav_queue_stop_pdsps(kdev); 1638 /* now load them all. We return success even if pdsp 1639 * is not loaded as acc channels are optional on having 1640 * firmware availability in the system. We set the loaded 1641 * and stated flag and when initialize the acc range, check 1642 * it and init the range only if pdsp is started. 1643 */ 1644 for_each_pdsp(kdev, pdsp) { 1645 ret = knav_queue_load_pdsp(kdev, pdsp); 1646 if (!ret) 1647 pdsp->loaded = true; 1648 } 1649 1650 for_each_pdsp(kdev, pdsp) { 1651 if (pdsp->loaded) { 1652 ret = knav_queue_start_pdsp(kdev, pdsp); 1653 if (!ret) 1654 pdsp->started = true; 1655 } 1656 } 1657 return 0; 1658 } 1659 1660 static int knav_queue_setup_pdsps(struct knav_device *kdev, 1661 struct device_node *node) 1662 { 1663 struct device_node *pdsps __free(device_node) = 1664 of_get_child_by_name(node, "pdsps"); 1665 1666 if (pdsps) { 1667 int ret; 1668 1669 ret = knav_queue_init_pdsps(kdev, pdsps); 1670 if (ret) 1671 return ret; 1672 1673 ret = knav_queue_start_pdsps(kdev); 1674 if (ret) 1675 return ret; 1676 } 1677 return 0; 1678 } 1679 1680 static inline struct knav_qmgr_info *knav_find_qmgr(unsigned id) 1681 { 1682 struct knav_qmgr_info *qmgr; 1683 1684 for_each_qmgr(knav_qdev, qmgr) { 1685 if ((id >= qmgr->start_queue) && 1686 (id < qmgr->start_queue + qmgr->num_queues)) 1687 return qmgr; 1688 } 1689 return NULL; 1690 } 1691 1692 static int knav_queue_init_queue(struct knav_device *kdev, 1693 struct knav_range_info *range, 1694 struct knav_queue_inst *inst, 1695 unsigned id) 1696 { 1697 char irq_name[KNAV_NAME_SIZE]; 1698 inst->qmgr = knav_find_qmgr(id); 1699 if (!inst->qmgr) 1700 return -1; 1701 1702 INIT_LIST_HEAD(&inst->handles); 1703 inst->kdev = kdev; 1704 inst->range = range; 1705 inst->irq_num = -1; 1706 inst->id = id; 1707 scnprintf(irq_name, sizeof(irq_name), "hwqueue-%d", id); 1708 inst->irq_name = kstrndup(irq_name, sizeof(irq_name), GFP_KERNEL); 1709 1710 if (range->ops && range->ops->init_queue) 1711 return range->ops->init_queue(range, inst); 1712 else 1713 return 0; 1714 } 1715 1716 static int knav_queue_init_queues(struct knav_device *kdev) 1717 { 1718 struct knav_range_info *range; 1719 int size, id, base_idx; 1720 int idx = 0, ret = 0; 1721 1722 /* how much do we need for instance data? */ 1723 size = sizeof(struct knav_queue_inst); 1724 1725 /* round this up to a power of 2, keep the index to instance 1726 * arithmetic fast. 1727 * */ 1728 kdev->inst_shift = order_base_2(size); 1729 size = (1 << kdev->inst_shift) * kdev->num_queues_in_use; 1730 kdev->instances = devm_kzalloc(kdev->dev, size, GFP_KERNEL); 1731 if (!kdev->instances) 1732 return -ENOMEM; 1733 1734 for_each_queue_range(kdev, range) { 1735 if (range->ops && range->ops->init_range) 1736 range->ops->init_range(range); 1737 base_idx = idx; 1738 for (id = range->queue_base; 1739 id < range->queue_base + range->num_queues; id++, idx++) { 1740 ret = knav_queue_init_queue(kdev, range, 1741 knav_queue_idx_to_inst(kdev, idx), id); 1742 if (ret < 0) 1743 return ret; 1744 } 1745 range->queue_base_inst = 1746 knav_queue_idx_to_inst(kdev, base_idx); 1747 } 1748 return 0; 1749 } 1750 1751 /* Match table for of_platform binding */ 1752 static const struct of_device_id keystone_qmss_of_match[] = { 1753 { 1754 .compatible = "ti,keystone-navigator-qmss", 1755 }, 1756 { 1757 .compatible = "ti,66ak2g-navss-qm", 1758 .data = (void *)QMSS_66AK2G, 1759 }, 1760 {}, 1761 }; 1762 MODULE_DEVICE_TABLE(of, keystone_qmss_of_match); 1763 1764 static int knav_queue_probe(struct platform_device *pdev) 1765 { 1766 struct device_node *node = pdev->dev.of_node; 1767 struct device *dev = &pdev->dev; 1768 u32 temp[2]; 1769 int ret; 1770 1771 if (!node) { 1772 dev_err(dev, "device tree info unavailable\n"); 1773 return -ENODEV; 1774 } 1775 1776 knav_qdev = devm_kzalloc(dev, sizeof(struct knav_device), GFP_KERNEL); 1777 if (!knav_qdev) { 1778 dev_err(dev, "memory allocation failed\n"); 1779 return -ENOMEM; 1780 } 1781 1782 if (device_get_match_data(dev)) 1783 knav_qdev->version = QMSS_66AK2G; 1784 1785 platform_set_drvdata(pdev, knav_qdev); 1786 knav_qdev->dev = dev; 1787 INIT_LIST_HEAD(&knav_qdev->queue_ranges); 1788 INIT_LIST_HEAD(&knav_qdev->qmgrs); 1789 INIT_LIST_HEAD(&knav_qdev->pools); 1790 INIT_LIST_HEAD(&knav_qdev->regions); 1791 INIT_LIST_HEAD(&knav_qdev->pdsps); 1792 1793 pm_runtime_enable(&pdev->dev); 1794 ret = pm_runtime_resume_and_get(&pdev->dev); 1795 if (ret < 0) { 1796 pm_runtime_disable(&pdev->dev); 1797 dev_err(dev, "Failed to enable QMSS\n"); 1798 return ret; 1799 } 1800 1801 if (of_property_read_u32_array(node, "queue-range", temp, 2)) { 1802 dev_err(dev, "queue-range not specified\n"); 1803 ret = -ENODEV; 1804 goto err; 1805 } 1806 knav_qdev->base_id = temp[0]; 1807 knav_qdev->num_queues = temp[1]; 1808 1809 /* Initialize queue managers using device tree configuration */ 1810 ret = knav_queue_init_qmgrs(knav_qdev, node); 1811 if (ret) 1812 goto err; 1813 1814 /* get pdsp configuration values from device tree */ 1815 ret = knav_queue_setup_pdsps(knav_qdev, node); 1816 if (ret) 1817 goto err; 1818 1819 /* get usable queue range values from device tree */ 1820 ret = knav_setup_queue_pools(knav_qdev, node); 1821 if (ret) 1822 goto err; 1823 1824 ret = knav_get_link_ram(knav_qdev, "linkram0", &knav_qdev->link_rams[0]); 1825 if (ret) { 1826 dev_err(knav_qdev->dev, "could not setup linking ram\n"); 1827 goto err; 1828 } 1829 1830 ret = knav_get_link_ram(knav_qdev, "linkram1", &knav_qdev->link_rams[1]); 1831 if (ret) { 1832 /* 1833 * nothing really, we have one linking ram already, so we just 1834 * live within our means 1835 */ 1836 } 1837 1838 ret = knav_queue_setup_link_ram(knav_qdev); 1839 if (ret) 1840 goto err; 1841 1842 ret = knav_queue_setup_regions(knav_qdev, node); 1843 if (ret) 1844 goto err; 1845 1846 ret = knav_queue_init_queues(knav_qdev); 1847 if (ret < 0) { 1848 dev_err(dev, "hwqueue initialization failed\n"); 1849 goto err; 1850 } 1851 1852 debugfs_create_file("qmss", S_IFREG | S_IRUGO, NULL, NULL, 1853 &knav_queue_debug_fops); 1854 device_ready = true; 1855 return 0; 1856 1857 err: 1858 knav_queue_stop_pdsps(knav_qdev); 1859 knav_queue_free_regions(knav_qdev); 1860 knav_free_queue_ranges(knav_qdev); 1861 pm_runtime_put_sync(&pdev->dev); 1862 pm_runtime_disable(&pdev->dev); 1863 return ret; 1864 } 1865 1866 static void knav_queue_remove(struct platform_device *pdev) 1867 { 1868 struct knav_device *kdev = platform_get_drvdata(pdev); 1869 1870 device_ready = false; 1871 knav_queue_stop_pdsps(kdev); 1872 knav_queue_free_regions(kdev); 1873 knav_free_queue_ranges(kdev); 1874 pm_runtime_put_sync(&pdev->dev); 1875 pm_runtime_disable(&pdev->dev); 1876 } 1877 1878 static struct platform_driver keystone_qmss_driver = { 1879 .probe = knav_queue_probe, 1880 .remove = knav_queue_remove, 1881 .driver = { 1882 .name = "keystone-navigator-qmss", 1883 .of_match_table = keystone_qmss_of_match, 1884 }, 1885 }; 1886 module_platform_driver(keystone_qmss_driver); 1887 1888 MODULE_LICENSE("GPL v2"); 1889 MODULE_DESCRIPTION("TI QMSS driver for Keystone SOCs"); 1890 MODULE_AUTHOR("Sandeep Nair <sandeep_n@ti.com>"); 1891 MODULE_AUTHOR("Santosh Shilimkar <santosh.shilimkar@ti.com>"); 1892