tdc 111 arch/s390/include/asm/ctl_reg.h unsigned long tdc : 2; tdc 65 arch/s390/kernel/ptrace.c cr2_new.tdc = 0; tdc 68 arch/s390/kernel/ptrace.c cr2_new.tdc = 1; tdc 70 arch/s390/kernel/ptrace.c cr2_new.tdc = 2; tdc 176 drivers/dma/tegra20-apb-dma.c typedef void (*dma_isr_handler)(struct tegra_dma_channel *tdc, tdc 242 drivers/dma/tegra20-apb-dma.c static inline void tdc_write(struct tegra_dma_channel *tdc, tdc 245 drivers/dma/tegra20-apb-dma.c writel(val, tdc->chan_addr + reg); tdc 248 drivers/dma/tegra20-apb-dma.c static inline u32 tdc_read(struct tegra_dma_channel *tdc, u32 reg) tdc 250 drivers/dma/tegra20-apb-dma.c return readl(tdc->chan_addr + reg); tdc 264 drivers/dma/tegra20-apb-dma.c static inline struct device *tdc2dev(struct tegra_dma_channel *tdc) tdc 266 drivers/dma/tegra20-apb-dma.c return &tdc->dma_chan.dev->device; tdc 275 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc) tdc 280 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 283 drivers/dma/tegra20-apb-dma.c list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { tdc 286 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 292 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 299 drivers/dma/tegra20-apb-dma.c dma_async_tx_descriptor_init(&dma_desc->txd, &tdc->dma_chan); tdc 305 drivers/dma/tegra20-apb-dma.c static void tegra_dma_desc_put(struct tegra_dma_channel *tdc, tdc 310 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 312 drivers/dma/tegra20-apb-dma.c list_splice_init(&dma_desc->tx_list, &tdc->free_sg_req); tdc 313 drivers/dma/tegra20-apb-dma.c list_add_tail(&dma_desc->node, &tdc->free_dma_desc); tdc 314 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 318 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc) tdc 323 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 324 drivers/dma/tegra20-apb-dma.c if (!list_empty(&tdc->free_sg_req)) { tdc 325 drivers/dma/tegra20-apb-dma.c sg_req = list_first_entry(&tdc->free_sg_req, tdc 328 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 331 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 341 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); tdc 343 drivers/dma/tegra20-apb-dma.c if (!list_empty(&tdc->pending_sg_req)) { tdc 344 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "Configuration not allowed\n"); tdc 348 drivers/dma/tegra20-apb-dma.c memcpy(&tdc->dma_sconfig, sconfig, sizeof(*sconfig)); tdc 349 drivers/dma/tegra20-apb-dma.c if (tdc->slave_id == TEGRA_APBDMA_SLAVE_ID_INVALID && tdc 353 drivers/dma/tegra20-apb-dma.c tdc->slave_id = sconfig->slave_id; tdc 355 drivers/dma/tegra20-apb-dma.c tdc->config_init = true; tdc 359 drivers/dma/tegra20-apb-dma.c static void tegra_dma_global_pause(struct tegra_dma_channel *tdc, tdc 362 drivers/dma/tegra20-apb-dma.c struct tegra_dma *tdma = tdc->tdma; tdc 366 drivers/dma/tegra20-apb-dma.c if (tdc->tdma->global_pause_count == 0) { tdc 372 drivers/dma/tegra20-apb-dma.c tdc->tdma->global_pause_count++; tdc 377 drivers/dma/tegra20-apb-dma.c static void tegra_dma_global_resume(struct tegra_dma_channel *tdc) tdc 379 drivers/dma/tegra20-apb-dma.c struct tegra_dma *tdma = tdc->tdma; tdc 383 drivers/dma/tegra20-apb-dma.c if (WARN_ON(tdc->tdma->global_pause_count == 0)) tdc 386 drivers/dma/tegra20-apb-dma.c if (--tdc->tdma->global_pause_count == 0) tdc 394 drivers/dma/tegra20-apb-dma.c static void tegra_dma_pause(struct tegra_dma_channel *tdc, tdc 397 drivers/dma/tegra20-apb-dma.c struct tegra_dma *tdma = tdc->tdma; tdc 400 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_CSRE, tdc 405 drivers/dma/tegra20-apb-dma.c tegra_dma_global_pause(tdc, wait_for_burst_complete); tdc 409 drivers/dma/tegra20-apb-dma.c static void tegra_dma_resume(struct tegra_dma_channel *tdc) tdc 411 drivers/dma/tegra20-apb-dma.c struct tegra_dma *tdma = tdc->tdma; tdc 414 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_CSRE, 0); tdc 416 drivers/dma/tegra20-apb-dma.c tegra_dma_global_resume(tdc); tdc 420 drivers/dma/tegra20-apb-dma.c static void tegra_dma_stop(struct tegra_dma_channel *tdc) tdc 426 drivers/dma/tegra20-apb-dma.c csr = tdc_read(tdc, TEGRA_APBDMA_CHAN_CSR); tdc 428 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_CSR, csr); tdc 432 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_CSR, csr); tdc 435 drivers/dma/tegra20-apb-dma.c status = tdc_read(tdc, TEGRA_APBDMA_CHAN_STATUS); tdc 437 drivers/dma/tegra20-apb-dma.c dev_dbg(tdc2dev(tdc), "%s():clearing interrupt\n", __func__); tdc 438 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_STATUS, status); tdc 440 drivers/dma/tegra20-apb-dma.c tdc->busy = false; tdc 443 drivers/dma/tegra20-apb-dma.c static void tegra_dma_start(struct tegra_dma_channel *tdc, tdc 448 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_CSR, ch_regs->csr); tdc 449 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_APBSEQ, ch_regs->apb_seq); tdc 450 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_APBPTR, ch_regs->apb_ptr); tdc 451 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_AHBSEQ, ch_regs->ahb_seq); tdc 452 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_AHBPTR, ch_regs->ahb_ptr); tdc 453 drivers/dma/tegra20-apb-dma.c if (tdc->tdma->chip_data->support_separate_wcount_reg) tdc 454 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_WCOUNT, ch_regs->wcount); tdc 457 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_CSR, tdc 461 drivers/dma/tegra20-apb-dma.c static void tegra_dma_configure_for_next(struct tegra_dma_channel *tdc, tdc 477 drivers/dma/tegra20-apb-dma.c tegra_dma_pause(tdc, false); tdc 478 drivers/dma/tegra20-apb-dma.c status = tdc_read(tdc, TEGRA_APBDMA_CHAN_STATUS); tdc 485 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), tdc 487 drivers/dma/tegra20-apb-dma.c tegra_dma_resume(tdc); tdc 492 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_APBPTR, nsg_req->ch_regs.apb_ptr); tdc 493 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_AHBPTR, nsg_req->ch_regs.ahb_ptr); tdc 494 drivers/dma/tegra20-apb-dma.c if (tdc->tdma->chip_data->support_separate_wcount_reg) tdc 495 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_WCOUNT, tdc 497 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_CSR, tdc 502 drivers/dma/tegra20-apb-dma.c tegra_dma_resume(tdc); tdc 505 drivers/dma/tegra20-apb-dma.c static void tdc_start_head_req(struct tegra_dma_channel *tdc) tdc 509 drivers/dma/tegra20-apb-dma.c if (list_empty(&tdc->pending_sg_req)) tdc 512 drivers/dma/tegra20-apb-dma.c sg_req = list_first_entry(&tdc->pending_sg_req, tdc 514 drivers/dma/tegra20-apb-dma.c tegra_dma_start(tdc, sg_req); tdc 517 drivers/dma/tegra20-apb-dma.c tdc->busy = true; tdc 520 drivers/dma/tegra20-apb-dma.c static void tdc_configure_next_head_desc(struct tegra_dma_channel *tdc) tdc 525 drivers/dma/tegra20-apb-dma.c if (list_empty(&tdc->pending_sg_req)) tdc 528 drivers/dma/tegra20-apb-dma.c hsgreq = list_first_entry(&tdc->pending_sg_req, typeof(*hsgreq), node); tdc 529 drivers/dma/tegra20-apb-dma.c if (!list_is_last(&hsgreq->node, &tdc->pending_sg_req)) { tdc 532 drivers/dma/tegra20-apb-dma.c tegra_dma_configure_for_next(tdc, hnsgreq); tdc 536 drivers/dma/tegra20-apb-dma.c static inline int get_current_xferred_count(struct tegra_dma_channel *tdc, tdc 542 drivers/dma/tegra20-apb-dma.c static void tegra_dma_abort_all(struct tegra_dma_channel *tdc) tdc 547 drivers/dma/tegra20-apb-dma.c while (!list_empty(&tdc->pending_sg_req)) { tdc 548 drivers/dma/tegra20-apb-dma.c sgreq = list_first_entry(&tdc->pending_sg_req, tdc 550 drivers/dma/tegra20-apb-dma.c list_move_tail(&sgreq->node, &tdc->free_sg_req); tdc 554 drivers/dma/tegra20-apb-dma.c list_add_tail(&dma_desc->node, &tdc->free_dma_desc); tdc 559 drivers/dma/tegra20-apb-dma.c &tdc->cb_desc); tdc 563 drivers/dma/tegra20-apb-dma.c tdc->isr_handler = NULL; tdc 566 drivers/dma/tegra20-apb-dma.c static bool handle_continuous_head_request(struct tegra_dma_channel *tdc, tdc 571 drivers/dma/tegra20-apb-dma.c if (list_empty(&tdc->pending_sg_req)) { tdc 572 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA is running without req\n"); tdc 573 drivers/dma/tegra20-apb-dma.c tegra_dma_stop(tdc); tdc 582 drivers/dma/tegra20-apb-dma.c hsgreq = list_first_entry(&tdc->pending_sg_req, typeof(*hsgreq), node); tdc 584 drivers/dma/tegra20-apb-dma.c tegra_dma_stop(tdc); tdc 585 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "Error in DMA transfer, aborting DMA\n"); tdc 586 drivers/dma/tegra20-apb-dma.c tegra_dma_abort_all(tdc); tdc 592 drivers/dma/tegra20-apb-dma.c tdc_configure_next_head_desc(tdc); tdc 596 drivers/dma/tegra20-apb-dma.c static void handle_once_dma_done(struct tegra_dma_channel *tdc, tdc 602 drivers/dma/tegra20-apb-dma.c tdc->busy = false; tdc 603 drivers/dma/tegra20-apb-dma.c sgreq = list_first_entry(&tdc->pending_sg_req, typeof(*sgreq), node); tdc 612 drivers/dma/tegra20-apb-dma.c list_add_tail(&dma_desc->cb_node, &tdc->cb_desc); tdc 614 drivers/dma/tegra20-apb-dma.c list_add_tail(&dma_desc->node, &tdc->free_dma_desc); tdc 616 drivers/dma/tegra20-apb-dma.c list_add_tail(&sgreq->node, &tdc->free_sg_req); tdc 619 drivers/dma/tegra20-apb-dma.c if (to_terminate || list_empty(&tdc->pending_sg_req)) tdc 622 drivers/dma/tegra20-apb-dma.c tdc_start_head_req(tdc); tdc 625 drivers/dma/tegra20-apb-dma.c static void handle_cont_sngl_cycle_dma_done(struct tegra_dma_channel *tdc, tdc 632 drivers/dma/tegra20-apb-dma.c sgreq = list_first_entry(&tdc->pending_sg_req, typeof(*sgreq), node); tdc 641 drivers/dma/tegra20-apb-dma.c list_add_tail(&dma_desc->cb_node, &tdc->cb_desc); tdc 647 drivers/dma/tegra20-apb-dma.c if (!list_is_last(&sgreq->node, &tdc->pending_sg_req)) { tdc 648 drivers/dma/tegra20-apb-dma.c list_move_tail(&sgreq->node, &tdc->pending_sg_req); tdc 650 drivers/dma/tegra20-apb-dma.c st = handle_continuous_head_request(tdc, sgreq, to_terminate); tdc 658 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = (struct tegra_dma_channel *)data; tdc 664 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 665 drivers/dma/tegra20-apb-dma.c while (!list_empty(&tdc->cb_desc)) { tdc 666 drivers/dma/tegra20-apb-dma.c dma_desc = list_first_entry(&tdc->cb_desc, tdc 672 drivers/dma/tegra20-apb-dma.c trace_tegra_dma_complete_cb(&tdc->dma_chan, cb_count, tdc 674 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 677 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 679 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 684 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = dev_id; tdc 688 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 690 drivers/dma/tegra20-apb-dma.c trace_tegra_dma_isr(&tdc->dma_chan, irq); tdc 691 drivers/dma/tegra20-apb-dma.c status = tdc_read(tdc, TEGRA_APBDMA_CHAN_STATUS); tdc 693 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_STATUS, status); tdc 694 drivers/dma/tegra20-apb-dma.c tdc->isr_handler(tdc, false); tdc 695 drivers/dma/tegra20-apb-dma.c tasklet_schedule(&tdc->tasklet); tdc 696 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 700 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 701 drivers/dma/tegra20-apb-dma.c dev_info(tdc2dev(tdc), tdc 709 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(txd->chan); tdc 713 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 716 drivers/dma/tegra20-apb-dma.c list_splice_tail_init(&dma_desc->tx_list, &tdc->pending_sg_req); tdc 717 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 723 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); tdc 726 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 727 drivers/dma/tegra20-apb-dma.c if (list_empty(&tdc->pending_sg_req)) { tdc 728 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "No DMA request\n"); tdc 731 drivers/dma/tegra20-apb-dma.c if (!tdc->busy) { tdc 732 drivers/dma/tegra20-apb-dma.c tdc_start_head_req(tdc); tdc 735 drivers/dma/tegra20-apb-dma.c if (tdc->cyclic) { tdc 741 drivers/dma/tegra20-apb-dma.c tdc_configure_next_head_desc(tdc); tdc 745 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 750 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); tdc 758 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 760 drivers/dma/tegra20-apb-dma.c if (!tdc->busy) tdc 764 drivers/dma/tegra20-apb-dma.c tegra_dma_pause(tdc, true); tdc 766 drivers/dma/tegra20-apb-dma.c status = tdc_read(tdc, TEGRA_APBDMA_CHAN_STATUS); tdc 768 drivers/dma/tegra20-apb-dma.c dev_dbg(tdc2dev(tdc), "%s():handling isr\n", __func__); tdc 769 drivers/dma/tegra20-apb-dma.c tdc->isr_handler(tdc, true); tdc 770 drivers/dma/tegra20-apb-dma.c status = tdc_read(tdc, TEGRA_APBDMA_CHAN_STATUS); tdc 772 drivers/dma/tegra20-apb-dma.c if (tdc->tdma->chip_data->support_separate_wcount_reg) tdc 773 drivers/dma/tegra20-apb-dma.c wcount = tdc_read(tdc, TEGRA_APBDMA_CHAN_WORD_TRANSFER); tdc 777 drivers/dma/tegra20-apb-dma.c was_busy = tdc->busy; tdc 778 drivers/dma/tegra20-apb-dma.c tegra_dma_stop(tdc); tdc 780 drivers/dma/tegra20-apb-dma.c if (!list_empty(&tdc->pending_sg_req) && was_busy) { tdc 781 drivers/dma/tegra20-apb-dma.c sgreq = list_first_entry(&tdc->pending_sg_req, tdc 784 drivers/dma/tegra20-apb-dma.c get_current_xferred_count(tdc, sgreq, wcount); tdc 786 drivers/dma/tegra20-apb-dma.c tegra_dma_resume(tdc); tdc 789 drivers/dma/tegra20-apb-dma.c tegra_dma_abort_all(tdc); tdc 791 drivers/dma/tegra20-apb-dma.c while (!list_empty(&tdc->cb_desc)) { tdc 792 drivers/dma/tegra20-apb-dma.c dma_desc = list_first_entry(&tdc->cb_desc, tdc 797 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 801 drivers/dma/tegra20-apb-dma.c static unsigned int tegra_dma_sg_bytes_xferred(struct tegra_dma_channel *tdc, tdc 806 drivers/dma/tegra20-apb-dma.c if (!list_is_first(&sg_req->node, &tdc->pending_sg_req)) tdc 809 drivers/dma/tegra20-apb-dma.c if (tdc->tdma->chip_data->support_separate_wcount_reg) tdc 810 drivers/dma/tegra20-apb-dma.c wcount = tdc_read(tdc, TEGRA_APBDMA_CHAN_WORD_TRANSFER); tdc 812 drivers/dma/tegra20-apb-dma.c status = tdc_read(tdc, TEGRA_APBDMA_CHAN_STATUS); tdc 814 drivers/dma/tegra20-apb-dma.c if (!tdc->tdma->chip_data->support_separate_wcount_reg) tdc 820 drivers/dma/tegra20-apb-dma.c wcount = get_current_xferred_count(tdc, sg_req, wcount); tdc 863 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); tdc 875 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 878 drivers/dma/tegra20-apb-dma.c list_for_each_entry(dma_desc, &tdc->free_dma_desc, node) { tdc 886 drivers/dma/tegra20-apb-dma.c list_for_each_entry(sg_req, &tdc->pending_sg_req, node) { tdc 889 drivers/dma/tegra20-apb-dma.c bytes = tegra_dma_sg_bytes_xferred(tdc, sg_req); tdc 895 drivers/dma/tegra20-apb-dma.c dev_dbg(tdc2dev(tdc), "cookie %d not found\n", cookie); tdc 906 drivers/dma/tegra20-apb-dma.c trace_tegra_dma_tx_status(&tdc->dma_chan, cookie, txstate); tdc 907 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 911 drivers/dma/tegra20-apb-dma.c static inline int get_bus_width(struct tegra_dma_channel *tdc, tdc 924 drivers/dma/tegra20-apb-dma.c dev_warn(tdc2dev(tdc), tdc 930 drivers/dma/tegra20-apb-dma.c static inline int get_burst_size(struct tegra_dma_channel *tdc, tdc 960 drivers/dma/tegra20-apb-dma.c static int get_transfer_param(struct tegra_dma_channel *tdc, tdc 967 drivers/dma/tegra20-apb-dma.c *apb_addr = tdc->dma_sconfig.dst_addr; tdc 968 drivers/dma/tegra20-apb-dma.c *apb_seq = get_bus_width(tdc, tdc->dma_sconfig.dst_addr_width); tdc 969 drivers/dma/tegra20-apb-dma.c *burst_size = tdc->dma_sconfig.dst_maxburst; tdc 970 drivers/dma/tegra20-apb-dma.c *slave_bw = tdc->dma_sconfig.dst_addr_width; tdc 975 drivers/dma/tegra20-apb-dma.c *apb_addr = tdc->dma_sconfig.src_addr; tdc 976 drivers/dma/tegra20-apb-dma.c *apb_seq = get_bus_width(tdc, tdc->dma_sconfig.src_addr_width); tdc 977 drivers/dma/tegra20-apb-dma.c *burst_size = tdc->dma_sconfig.src_maxburst; tdc 978 drivers/dma/tegra20-apb-dma.c *slave_bw = tdc->dma_sconfig.src_addr_width; tdc 983 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA direction is not supported\n"); tdc 989 drivers/dma/tegra20-apb-dma.c static void tegra_dma_prep_wcount(struct tegra_dma_channel *tdc, tdc 994 drivers/dma/tegra20-apb-dma.c if (tdc->tdma->chip_data->support_separate_wcount_reg) tdc 1005 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); tdc 1015 drivers/dma/tegra20-apb-dma.c if (!tdc->config_init) { tdc 1016 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA channel is not configured\n"); tdc 1020 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "Invalid segment length %d\n", sg_len); tdc 1024 drivers/dma/tegra20-apb-dma.c if (get_transfer_param(tdc, direction, &apb_ptr, &apb_seq, &csr, tdc 1037 drivers/dma/tegra20-apb-dma.c if (tdc->slave_id != TEGRA_APBDMA_SLAVE_ID_INVALID) { tdc 1039 drivers/dma/tegra20-apb-dma.c csr |= tdc->slave_id << TEGRA_APBDMA_CSR_REQ_SEL_SHIFT; tdc 1051 drivers/dma/tegra20-apb-dma.c dma_desc = tegra_dma_desc_get(tdc); tdc 1053 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA descriptors not available\n"); tdc 1071 drivers/dma/tegra20-apb-dma.c (len > tdc->tdma->chip_data->max_dma_count)) { tdc 1072 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), tdc 1074 drivers/dma/tegra20-apb-dma.c tegra_dma_desc_put(tdc, dma_desc); tdc 1078 drivers/dma/tegra20-apb-dma.c sg_req = tegra_dma_sg_req_get(tdc); tdc 1080 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA sg-req not available\n"); tdc 1081 drivers/dma/tegra20-apb-dma.c tegra_dma_desc_put(tdc, dma_desc); tdc 1085 drivers/dma/tegra20-apb-dma.c ahb_seq |= get_burst_size(tdc, burst_size, slave_bw, len); tdc 1091 drivers/dma/tegra20-apb-dma.c tegra_dma_prep_wcount(tdc, &sg_req->ch_regs, len); tdc 1109 drivers/dma/tegra20-apb-dma.c if (!tdc->isr_handler) { tdc 1110 drivers/dma/tegra20-apb-dma.c tdc->isr_handler = handle_once_dma_done; tdc 1111 drivers/dma/tegra20-apb-dma.c tdc->cyclic = false; tdc 1113 drivers/dma/tegra20-apb-dma.c if (tdc->cyclic) { tdc 1114 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA configured in cyclic mode\n"); tdc 1115 drivers/dma/tegra20-apb-dma.c tegra_dma_desc_put(tdc, dma_desc); tdc 1128 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); tdc 1139 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "Invalid buffer/period len\n"); tdc 1143 drivers/dma/tegra20-apb-dma.c if (!tdc->config_init) { tdc 1144 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA slave is not configured\n"); tdc 1154 drivers/dma/tegra20-apb-dma.c if (tdc->busy) { tdc 1155 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "Request not allowed when DMA running\n"); tdc 1164 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "buf_len is not multiple of period_len\n"); tdc 1170 drivers/dma/tegra20-apb-dma.c (len > tdc->tdma->chip_data->max_dma_count)) { tdc 1171 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "Req len/mem address is not correct\n"); tdc 1175 drivers/dma/tegra20-apb-dma.c if (get_transfer_param(tdc, direction, &apb_ptr, &apb_seq, &csr, tdc 1184 drivers/dma/tegra20-apb-dma.c if (tdc->slave_id != TEGRA_APBDMA_SLAVE_ID_INVALID) { tdc 1186 drivers/dma/tegra20-apb-dma.c csr |= tdc->slave_id << TEGRA_APBDMA_CSR_REQ_SEL_SHIFT; tdc 1198 drivers/dma/tegra20-apb-dma.c dma_desc = tegra_dma_desc_get(tdc); tdc 1200 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "not enough descriptors available\n"); tdc 1214 drivers/dma/tegra20-apb-dma.c sg_req = tegra_dma_sg_req_get(tdc); tdc 1216 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA sg-req not available\n"); tdc 1217 drivers/dma/tegra20-apb-dma.c tegra_dma_desc_put(tdc, dma_desc); tdc 1221 drivers/dma/tegra20-apb-dma.c ahb_seq |= get_burst_size(tdc, burst_size, slave_bw, len); tdc 1225 drivers/dma/tegra20-apb-dma.c tegra_dma_prep_wcount(tdc, &sg_req->ch_regs, len); tdc 1245 drivers/dma/tegra20-apb-dma.c if (!tdc->isr_handler) { tdc 1246 drivers/dma/tegra20-apb-dma.c tdc->isr_handler = handle_cont_sngl_cycle_dma_done; tdc 1247 drivers/dma/tegra20-apb-dma.c tdc->cyclic = true; tdc 1249 drivers/dma/tegra20-apb-dma.c if (!tdc->cyclic) { tdc 1250 drivers/dma/tegra20-apb-dma.c dev_err(tdc2dev(tdc), "DMA configuration conflict\n"); tdc 1251 drivers/dma/tegra20-apb-dma.c tegra_dma_desc_put(tdc, dma_desc); tdc 1261 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); tdc 1262 drivers/dma/tegra20-apb-dma.c struct tegra_dma *tdma = tdc->tdma; tdc 1265 drivers/dma/tegra20-apb-dma.c dma_cookie_init(&tdc->dma_chan); tdc 1266 drivers/dma/tegra20-apb-dma.c tdc->config_init = false; tdc 1277 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = to_tegra_dma_chan(dc); tdc 1278 drivers/dma/tegra20-apb-dma.c struct tegra_dma *tdma = tdc->tdma; tdc 1288 drivers/dma/tegra20-apb-dma.c dev_dbg(tdc2dev(tdc), "Freeing channel %d\n", tdc->id); tdc 1290 drivers/dma/tegra20-apb-dma.c if (tdc->busy) tdc 1293 drivers/dma/tegra20-apb-dma.c spin_lock_irqsave(&tdc->lock, flags); tdc 1294 drivers/dma/tegra20-apb-dma.c list_splice_init(&tdc->pending_sg_req, &sg_req_list); tdc 1295 drivers/dma/tegra20-apb-dma.c list_splice_init(&tdc->free_sg_req, &sg_req_list); tdc 1296 drivers/dma/tegra20-apb-dma.c list_splice_init(&tdc->free_dma_desc, &dma_desc_list); tdc 1297 drivers/dma/tegra20-apb-dma.c INIT_LIST_HEAD(&tdc->cb_desc); tdc 1298 drivers/dma/tegra20-apb-dma.c tdc->config_init = false; tdc 1299 drivers/dma/tegra20-apb-dma.c tdc->isr_handler = NULL; tdc 1300 drivers/dma/tegra20-apb-dma.c spin_unlock_irqrestore(&tdc->lock, flags); tdc 1316 drivers/dma/tegra20-apb-dma.c tdc->slave_id = TEGRA_APBDMA_SLAVE_ID_INVALID; tdc 1324 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc; tdc 1335 drivers/dma/tegra20-apb-dma.c tdc = to_tegra_dma_chan(chan); tdc 1336 drivers/dma/tegra20-apb-dma.c tdc->slave_id = dma_spec->args[0]; tdc 1445 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = &tdma->channels[i]; tdc 1447 drivers/dma/tegra20-apb-dma.c tdc->chan_addr = tdma->base_addr + tdc 1457 drivers/dma/tegra20-apb-dma.c tdc->irq = res->start; tdc 1458 drivers/dma/tegra20-apb-dma.c snprintf(tdc->name, sizeof(tdc->name), "apbdma.%d", i); tdc 1459 drivers/dma/tegra20-apb-dma.c ret = request_irq(tdc->irq, tegra_dma_isr, 0, tdc->name, tdc); tdc 1467 drivers/dma/tegra20-apb-dma.c tdc->dma_chan.device = &tdma->dma_dev; tdc 1468 drivers/dma/tegra20-apb-dma.c dma_cookie_init(&tdc->dma_chan); tdc 1469 drivers/dma/tegra20-apb-dma.c list_add_tail(&tdc->dma_chan.device_node, tdc 1471 drivers/dma/tegra20-apb-dma.c tdc->tdma = tdma; tdc 1472 drivers/dma/tegra20-apb-dma.c tdc->id = i; tdc 1473 drivers/dma/tegra20-apb-dma.c tdc->slave_id = TEGRA_APBDMA_SLAVE_ID_INVALID; tdc 1475 drivers/dma/tegra20-apb-dma.c tasklet_init(&tdc->tasklet, tegra_dma_tasklet, tdc 1476 drivers/dma/tegra20-apb-dma.c (unsigned long)tdc); tdc 1477 drivers/dma/tegra20-apb-dma.c spin_lock_init(&tdc->lock); tdc 1479 drivers/dma/tegra20-apb-dma.c INIT_LIST_HEAD(&tdc->pending_sg_req); tdc 1480 drivers/dma/tegra20-apb-dma.c INIT_LIST_HEAD(&tdc->free_sg_req); tdc 1481 drivers/dma/tegra20-apb-dma.c INIT_LIST_HEAD(&tdc->free_dma_desc); tdc 1482 drivers/dma/tegra20-apb-dma.c INIT_LIST_HEAD(&tdc->cb_desc); tdc 1535 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = &tdma->channels[i]; tdc 1537 drivers/dma/tegra20-apb-dma.c free_irq(tdc->irq, tdc); tdc 1538 drivers/dma/tegra20-apb-dma.c tasklet_kill(&tdc->tasklet); tdc 1551 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc; tdc 1556 drivers/dma/tegra20-apb-dma.c tdc = &tdma->channels[i]; tdc 1557 drivers/dma/tegra20-apb-dma.c free_irq(tdc->irq, tdc); tdc 1558 drivers/dma/tegra20-apb-dma.c tasklet_kill(&tdc->tasklet); tdc 1575 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = &tdma->channels[i]; tdc 1576 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg; tdc 1579 drivers/dma/tegra20-apb-dma.c if (!tdc->config_init) tdc 1582 drivers/dma/tegra20-apb-dma.c ch_reg->csr = tdc_read(tdc, TEGRA_APBDMA_CHAN_CSR); tdc 1583 drivers/dma/tegra20-apb-dma.c ch_reg->ahb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_AHBPTR); tdc 1584 drivers/dma/tegra20-apb-dma.c ch_reg->apb_ptr = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBPTR); tdc 1585 drivers/dma/tegra20-apb-dma.c ch_reg->ahb_seq = tdc_read(tdc, TEGRA_APBDMA_CHAN_AHBSEQ); tdc 1586 drivers/dma/tegra20-apb-dma.c ch_reg->apb_seq = tdc_read(tdc, TEGRA_APBDMA_CHAN_APBSEQ); tdc 1588 drivers/dma/tegra20-apb-dma.c ch_reg->wcount = tdc_read(tdc, tdc 1613 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel *tdc = &tdma->channels[i]; tdc 1614 drivers/dma/tegra20-apb-dma.c struct tegra_dma_channel_regs *ch_reg = &tdc->channel_reg; tdc 1617 drivers/dma/tegra20-apb-dma.c if (!tdc->config_init) tdc 1621 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_WCOUNT, tdc 1623 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_APBSEQ, ch_reg->apb_seq); tdc 1624 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_APBPTR, ch_reg->apb_ptr); tdc 1625 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_AHBSEQ, ch_reg->ahb_seq); tdc 1626 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_AHBPTR, ch_reg->ahb_ptr); tdc 1627 drivers/dma/tegra20-apb-dma.c tdc_write(tdc, TEGRA_APBDMA_CHAN_CSR, tdc 180 drivers/dma/tegra210-adma.c static inline void tdma_ch_write(struct tegra_adma_chan *tdc, u32 reg, u32 val) tdc 182 drivers/dma/tegra210-adma.c writel(val, tdc->chan_addr + reg); tdc 185 drivers/dma/tegra210-adma.c static inline u32 tdma_ch_read(struct tegra_adma_chan *tdc, u32 reg) tdc 187 drivers/dma/tegra210-adma.c return readl(tdc->chan_addr + reg); tdc 201 drivers/dma/tegra210-adma.c static inline struct device *tdc2dev(struct tegra_adma_chan *tdc) tdc 203 drivers/dma/tegra210-adma.c return tdc->tdma->dev; tdc 214 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 216 drivers/dma/tegra210-adma.c memcpy(&tdc->sconfig, sconfig, sizeof(*sconfig)); tdc 247 drivers/dma/tegra210-adma.c static int tegra_adma_request_alloc(struct tegra_adma_chan *tdc, tdc 250 drivers/dma/tegra210-adma.c struct tegra_adma *tdma = tdc->tdma; tdc 251 drivers/dma/tegra210-adma.c unsigned int sreq_index = tdc->sreq_index; tdc 253 drivers/dma/tegra210-adma.c if (tdc->sreq_reserved) tdc 254 drivers/dma/tegra210-adma.c return tdc->sreq_dir == direction ? 0 : -EINVAL; tdc 278 drivers/dma/tegra210-adma.c dma_chan_name(&tdc->vc.chan)); tdc 282 drivers/dma/tegra210-adma.c tdc->sreq_dir = direction; tdc 283 drivers/dma/tegra210-adma.c tdc->sreq_reserved = true; tdc 288 drivers/dma/tegra210-adma.c static void tegra_adma_request_free(struct tegra_adma_chan *tdc) tdc 290 drivers/dma/tegra210-adma.c struct tegra_adma *tdma = tdc->tdma; tdc 292 drivers/dma/tegra210-adma.c if (!tdc->sreq_reserved) tdc 295 drivers/dma/tegra210-adma.c switch (tdc->sreq_dir) { tdc 297 drivers/dma/tegra210-adma.c clear_bit(tdc->sreq_index, &tdma->tx_requests_reserved); tdc 301 drivers/dma/tegra210-adma.c clear_bit(tdc->sreq_index, &tdma->rx_requests_reserved); tdc 306 drivers/dma/tegra210-adma.c dma_chan_name(&tdc->vc.chan)); tdc 310 drivers/dma/tegra210-adma.c tdc->sreq_reserved = false; tdc 313 drivers/dma/tegra210-adma.c static u32 tegra_adma_irq_status(struct tegra_adma_chan *tdc) tdc 315 drivers/dma/tegra210-adma.c u32 status = tdma_ch_read(tdc, ADMA_CH_INT_STATUS); tdc 320 drivers/dma/tegra210-adma.c static u32 tegra_adma_irq_clear(struct tegra_adma_chan *tdc) tdc 322 drivers/dma/tegra210-adma.c u32 status = tegra_adma_irq_status(tdc); tdc 325 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_INT_CLEAR, status); tdc 330 drivers/dma/tegra210-adma.c static void tegra_adma_stop(struct tegra_adma_chan *tdc) tdc 335 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CMD, 0); tdc 338 drivers/dma/tegra210-adma.c tegra_adma_irq_clear(tdc); tdc 340 drivers/dma/tegra210-adma.c if (readx_poll_timeout_atomic(readl, tdc->chan_addr + ADMA_CH_STATUS, tdc 343 drivers/dma/tegra210-adma.c dev_err(tdc2dev(tdc), "unable to stop DMA channel\n"); tdc 347 drivers/dma/tegra210-adma.c kfree(tdc->desc); tdc 348 drivers/dma/tegra210-adma.c tdc->desc = NULL; tdc 351 drivers/dma/tegra210-adma.c static void tegra_adma_start(struct tegra_adma_chan *tdc) tdc 353 drivers/dma/tegra210-adma.c struct virt_dma_desc *vd = vchan_next_desc(&tdc->vc); tdc 365 drivers/dma/tegra210-adma.c dev_warn(tdc2dev(tdc), "unable to start DMA, no descriptor\n"); tdc 371 drivers/dma/tegra210-adma.c tdc->tx_buf_pos = 0; tdc 372 drivers/dma/tegra210-adma.c tdc->tx_buf_count = 0; tdc 373 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_TC, ch_regs->tc); tdc 374 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CTRL, ch_regs->ctrl); tdc 375 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_LOWER_SRC_ADDR, ch_regs->src_addr); tdc 376 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_LOWER_TRG_ADDR, ch_regs->trg_addr); tdc 377 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_FIFO_CTRL, ch_regs->fifo_ctrl); tdc 378 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CONFIG, ch_regs->config); tdc 381 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CMD, 1); tdc 383 drivers/dma/tegra210-adma.c tdc->desc = desc; tdc 386 drivers/dma/tegra210-adma.c static unsigned int tegra_adma_get_residue(struct tegra_adma_chan *tdc) tdc 388 drivers/dma/tegra210-adma.c struct tegra_adma_desc *desc = tdc->desc; tdc 390 drivers/dma/tegra210-adma.c unsigned int pos = tdma_ch_read(tdc, ADMA_CH_XFER_STATUS); tdc 396 drivers/dma/tegra210-adma.c if (pos < tdc->tx_buf_pos) tdc 397 drivers/dma/tegra210-adma.c tdc->tx_buf_count += pos + (max - tdc->tx_buf_pos); tdc 399 drivers/dma/tegra210-adma.c tdc->tx_buf_count += pos - tdc->tx_buf_pos; tdc 401 drivers/dma/tegra210-adma.c periods_remaining = tdc->tx_buf_count % desc->num_periods; tdc 402 drivers/dma/tegra210-adma.c tdc->tx_buf_pos = pos; tdc 409 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = dev_id; tdc 413 drivers/dma/tegra210-adma.c spin_lock_irqsave(&tdc->vc.lock, flags); tdc 415 drivers/dma/tegra210-adma.c status = tegra_adma_irq_clear(tdc); tdc 416 drivers/dma/tegra210-adma.c if (status == 0 || !tdc->desc) { tdc 417 drivers/dma/tegra210-adma.c spin_unlock_irqrestore(&tdc->vc.lock, flags); tdc 421 drivers/dma/tegra210-adma.c vchan_cyclic_callback(&tdc->desc->vd); tdc 423 drivers/dma/tegra210-adma.c spin_unlock_irqrestore(&tdc->vc.lock, flags); tdc 430 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 433 drivers/dma/tegra210-adma.c spin_lock_irqsave(&tdc->vc.lock, flags); tdc 435 drivers/dma/tegra210-adma.c if (vchan_issue_pending(&tdc->vc)) { tdc 436 drivers/dma/tegra210-adma.c if (!tdc->desc) tdc 437 drivers/dma/tegra210-adma.c tegra_adma_start(tdc); tdc 440 drivers/dma/tegra210-adma.c spin_unlock_irqrestore(&tdc->vc.lock, flags); tdc 443 drivers/dma/tegra210-adma.c static bool tegra_adma_is_paused(struct tegra_adma_chan *tdc) tdc 447 drivers/dma/tegra210-adma.c csts = tdma_ch_read(tdc, ADMA_CH_STATUS); tdc 455 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 456 drivers/dma/tegra210-adma.c struct tegra_adma_desc *desc = tdc->desc; tdc 460 drivers/dma/tegra210-adma.c ch_regs->ctrl = tdma_ch_read(tdc, ADMA_CH_CTRL); tdc 462 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CTRL, ch_regs->ctrl); tdc 464 drivers/dma/tegra210-adma.c while (dcnt-- && !tegra_adma_is_paused(tdc)) tdc 468 drivers/dma/tegra210-adma.c dev_err(tdc2dev(tdc), "unable to pause DMA channel\n"); tdc 477 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 478 drivers/dma/tegra210-adma.c struct tegra_adma_desc *desc = tdc->desc; tdc 481 drivers/dma/tegra210-adma.c ch_regs->ctrl = tdma_ch_read(tdc, ADMA_CH_CTRL); tdc 483 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CTRL, ch_regs->ctrl); tdc 490 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 494 drivers/dma/tegra210-adma.c spin_lock_irqsave(&tdc->vc.lock, flags); tdc 496 drivers/dma/tegra210-adma.c if (tdc->desc) tdc 497 drivers/dma/tegra210-adma.c tegra_adma_stop(tdc); tdc 499 drivers/dma/tegra210-adma.c tegra_adma_request_free(tdc); tdc 500 drivers/dma/tegra210-adma.c vchan_get_all_descriptors(&tdc->vc, &head); tdc 501 drivers/dma/tegra210-adma.c spin_unlock_irqrestore(&tdc->vc.lock, flags); tdc 502 drivers/dma/tegra210-adma.c vchan_dma_desc_free_list(&tdc->vc, &head); tdc 511 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 522 drivers/dma/tegra210-adma.c spin_lock_irqsave(&tdc->vc.lock, flags); tdc 524 drivers/dma/tegra210-adma.c vd = vchan_find_desc(&tdc->vc, cookie); tdc 528 drivers/dma/tegra210-adma.c } else if (tdc->desc && tdc->desc->vd.tx.cookie == cookie) { tdc 529 drivers/dma/tegra210-adma.c residual = tegra_adma_get_residue(tdc); tdc 534 drivers/dma/tegra210-adma.c spin_unlock_irqrestore(&tdc->vc.lock, flags); tdc 557 drivers/dma/tegra210-adma.c static int tegra_adma_set_xfer_params(struct tegra_adma_chan *tdc, tdc 563 drivers/dma/tegra210-adma.c const struct tegra_adma_chip_data *cdata = tdc->tdma->cdata; tdc 572 drivers/dma/tegra210-adma.c burst_size = tdc->sconfig.dst_maxburst; tdc 574 drivers/dma/tegra210-adma.c ch_regs->ctrl = ADMA_CH_REG_FIELD_VAL(tdc->sreq_index, tdc 582 drivers/dma/tegra210-adma.c burst_size = tdc->sconfig.src_maxburst; tdc 584 drivers/dma/tegra210-adma.c ch_regs->ctrl = ADMA_CH_REG_FIELD_VAL(tdc->sreq_index, tdc 591 drivers/dma/tegra210-adma.c dev_err(tdc2dev(tdc), "DMA direction is not supported\n"); tdc 605 drivers/dma/tegra210-adma.c return tegra_adma_request_alloc(tdc, direction); tdc 613 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 617 drivers/dma/tegra210-adma.c dev_err(tdc2dev(tdc), "invalid buffer/period len\n"); tdc 622 drivers/dma/tegra210-adma.c dev_err(tdc2dev(tdc), "buf_len not a multiple of period_len\n"); tdc 627 drivers/dma/tegra210-adma.c dev_err(tdc2dev(tdc), "invalid buffer alignment\n"); tdc 639 drivers/dma/tegra210-adma.c if (tegra_adma_set_xfer_params(tdc, desc, buf_addr, direction)) { tdc 644 drivers/dma/tegra210-adma.c return vchan_tx_prep(&tdc->vc, &desc->vd, flags); tdc 649 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 652 drivers/dma/tegra210-adma.c ret = request_irq(tdc->irq, tegra_adma_isr, 0, dma_chan_name(dc), tdc); tdc 654 drivers/dma/tegra210-adma.c dev_err(tdc2dev(tdc), "failed to get interrupt for %s\n", tdc 659 drivers/dma/tegra210-adma.c ret = pm_runtime_get_sync(tdc2dev(tdc)); tdc 661 drivers/dma/tegra210-adma.c free_irq(tdc->irq, tdc); tdc 665 drivers/dma/tegra210-adma.c dma_cookie_init(&tdc->vc.chan); tdc 672 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = to_tegra_adma_chan(dc); tdc 675 drivers/dma/tegra210-adma.c vchan_free_chan_resources(&tdc->vc); tdc 676 drivers/dma/tegra210-adma.c tasklet_kill(&tdc->vc.task); tdc 677 drivers/dma/tegra210-adma.c free_irq(tdc->irq, tdc); tdc 678 drivers/dma/tegra210-adma.c pm_runtime_put(tdc2dev(tdc)); tdc 680 drivers/dma/tegra210-adma.c tdc->sreq_index = 0; tdc 681 drivers/dma/tegra210-adma.c tdc->sreq_dir = DMA_TRANS_NONE; tdc 688 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc; tdc 706 drivers/dma/tegra210-adma.c tdc = to_tegra_adma_chan(chan); tdc 707 drivers/dma/tegra210-adma.c tdc->sreq_index = sreq_index; tdc 716 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc; tdc 724 drivers/dma/tegra210-adma.c tdc = &tdma->channels[i]; tdc 725 drivers/dma/tegra210-adma.c ch_reg = &tdc->ch_regs; tdc 726 drivers/dma/tegra210-adma.c ch_reg->cmd = tdma_ch_read(tdc, ADMA_CH_CMD); tdc 730 drivers/dma/tegra210-adma.c ch_reg->tc = tdma_ch_read(tdc, ADMA_CH_TC); tdc 731 drivers/dma/tegra210-adma.c ch_reg->src_addr = tdma_ch_read(tdc, ADMA_CH_LOWER_SRC_ADDR); tdc 732 drivers/dma/tegra210-adma.c ch_reg->trg_addr = tdma_ch_read(tdc, ADMA_CH_LOWER_TRG_ADDR); tdc 733 drivers/dma/tegra210-adma.c ch_reg->ctrl = tdma_ch_read(tdc, ADMA_CH_CTRL); tdc 734 drivers/dma/tegra210-adma.c ch_reg->fifo_ctrl = tdma_ch_read(tdc, ADMA_CH_FIFO_CTRL); tdc 735 drivers/dma/tegra210-adma.c ch_reg->config = tdma_ch_read(tdc, ADMA_CH_CONFIG); tdc 748 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc; tdc 762 drivers/dma/tegra210-adma.c tdc = &tdma->channels[i]; tdc 763 drivers/dma/tegra210-adma.c ch_reg = &tdc->ch_regs; tdc 767 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_TC, ch_reg->tc); tdc 768 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_LOWER_SRC_ADDR, ch_reg->src_addr); tdc 769 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_LOWER_TRG_ADDR, ch_reg->trg_addr); tdc 770 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CTRL, ch_reg->ctrl); tdc 771 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_FIFO_CTRL, ch_reg->fifo_ctrl); tdc 772 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CONFIG, ch_reg->config); tdc 773 drivers/dma/tegra210-adma.c tdma_ch_write(tdc, ADMA_CH_CMD, ch_reg->cmd); tdc 853 drivers/dma/tegra210-adma.c struct tegra_adma_chan *tdc = &tdma->channels[i]; tdc 855 drivers/dma/tegra210-adma.c tdc->chan_addr = tdma->base_addr + cdata->ch_base_offset tdc 858 drivers/dma/tegra210-adma.c tdc->irq = of_irq_get(pdev->dev.of_node, i); tdc 859 drivers/dma/tegra210-adma.c if (tdc->irq <= 0) { tdc 860 drivers/dma/tegra210-adma.c ret = tdc->irq ?: -ENXIO; tdc 864 drivers/dma/tegra210-adma.c vchan_init(&tdc->vc, &tdma->dma_dev); tdc 865 drivers/dma/tegra210-adma.c tdc->vc.desc_free = tegra_adma_desc_free; tdc 866 drivers/dma/tegra210-adma.c tdc->tdma = tdma; tdc 691 drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.c adev->pm.dpm.dyn_state.cac_tdp_table->tdc = le16_to_cpu(pt->usTDC); tdc 199 drivers/gpu/drm/amd/amdgpu/amdgpu_dpm.h u16 tdc; tdc 338 drivers/gpu/drm/radeon/ci_dpm.c tdc_limit = rdev->pm.dpm.dyn_state.cac_tdp_table->tdc * 256; tdc 1283 drivers/gpu/drm/radeon/r600_dpm.c rdev->pm.dpm.dyn_state.cac_tdp_table->tdc = le16_to_cpu(pt->usTDC); tdc 1461 drivers/gpu/drm/radeon/radeon.h u16 tdc; tdc 105 drivers/infiniband/hw/qib/qib_diag.c struct qib_diag_client *tdc, *rdc; tdc 112 drivers/infiniband/hw/qib/qib_diag.c tdc = dc->dd->diag_client; tdc 113 drivers/infiniband/hw/qib/qib_diag.c while (tdc) { tdc 114 drivers/infiniband/hw/qib/qib_diag.c if (dc == tdc->next) { tdc 115 drivers/infiniband/hw/qib/qib_diag.c tdc->next = dc->next; tdc 119 drivers/infiniband/hw/qib/qib_diag.c tdc = tdc->next; tdc 2498 drivers/md/bcache/super.c struct cached_dev *dc, *tdc; tdc 2503 drivers/md/bcache/super.c list_for_each_entry_safe(dc, tdc, &uncached_devices, list) { tdc 2548 drivers/md/bcache/super.c struct cached_dev *dc, *tdc; tdc 2588 drivers/md/bcache/super.c list_for_each_entry_safe(dc, tdc, &uncached_devices, list) tdc 660 drivers/net/can/ifi_canfd/ifi_canfd.c u16 brp, sjw, tseg1, tseg2, tdc; tdc 685 drivers/net/can/ifi_canfd/ifi_canfd.c tdc = dbt->brp * (dbt->prop_seg + dbt->phase_seg1); tdc 686 drivers/net/can/ifi_canfd/ifi_canfd.c tdc &= IFI_CANFD_TDELAY_MASK; tdc 687 drivers/net/can/ifi_canfd/ifi_canfd.c writel(IFI_CANFD_TDELAY_EN | tdc, priv->base + IFI_CANFD_TDELAY); tdc 1237 drivers/platform/x86/intel_ips.c int tdp, tdc; tdc 1242 drivers/platform/x86/intel_ips.c tdc = (int)((turbo_override & TURBO_TDC_MASK) >> TURBO_TDC_SHIFT); tdc 1246 drivers/platform/x86/intel_ips.c tdc = tdc * 10 / 8; tdc 1250 drivers/platform/x86/intel_ips.c tdc / 10, tdc % 10); tdc 1324 fs/f2fs/segment.c struct discard_cmd *tdc = NULL; tdc 1351 fs/f2fs/segment.c tdc = prev_dc; tdc 1364 fs/f2fs/segment.c if (tdc) tdc 1365 fs/f2fs/segment.c __remove_discard_cmd(sbi, tdc);