Lines Matching +full:8 +full:- +full:channel

2  * Porting to u-boot:
9 * (C) Copyright 2005-2010 Freescale Semiconductor, Inc.
11 * SPDX-License-Identifier: GPL-2.0+
20 #include <asm/arch/imx-regs.h>
41 (((struct ipu_ch_param *)(base))->word[(w)].data)
47 if (((bit) + (size) - 1) / 32 > i) { \
48 _param_word(base, w)[i + 1] |= (v) >> (off ? (32 - off) : 0); \
55 u32 mask = (1UL << size) - 1; \
59 if (((bit) + (size) - 1) / 32 > i) { \
61 temp &= ~(mask >> (32 - off)); \
63 temp | ((v) >> (off ? (32 - off) : 0)); \
71 u32 mask = (1UL << size) - 1; \
74 if (((bit)+(size) - 1) / 32 > i) { \
76 temp2 &= mask >> (off ? (32 - off) : 0); \
77 temp1 |= temp2 << (off ? (32 - off) : 0); \
87 if (clk->usecount++ == 0) { in clk_enable()
88 clk->enable(clk); in clk_enable()
96 if (!(--clk->usecount)) { in clk_disable()
97 if (clk->disable) in clk_disable()
98 clk->disable(clk); in clk_disable()
108 return clk->usecount; in clk_get_usecount()
116 return clk->rate; in clk_get_rate()
124 return clk->parent; in clk_get_parent()
129 if (clk && clk->set_rate) in clk_set_rate()
130 clk->set_rate(clk, rate); in clk_set_rate()
131 return clk->rate; in clk_set_rate()
136 if (clk == NULL || !clk->round_rate) in clk_round_rate()
139 return clk->round_rate(clk, rate); in clk_round_rate()
144 clk->parent = parent; in clk_set_parent()
145 if (clk->set_parent) in clk_set_parent()
146 return clk->set_parent(clk, parent); in clk_set_parent()
154 reg = __raw_readl(clk->enable_reg); in clk_ipu_enable()
155 reg |= MXC_CCM_CCGR_CG_MASK << clk->enable_shift; in clk_ipu_enable()
156 __raw_writel(reg, clk->enable_reg); in clk_ipu_enable()
160 reg = __raw_readl(&mxc_ccm->ccdr); in clk_ipu_enable()
162 __raw_writel(reg, &mxc_ccm->ccdr); in clk_ipu_enable()
165 reg = __raw_readl(&mxc_ccm->clpcr); in clk_ipu_enable()
167 __raw_writel(reg, &mxc_ccm->clpcr); in clk_ipu_enable()
176 reg = __raw_readl(clk->enable_reg); in clk_ipu_disable()
177 reg &= ~(MXC_CCM_CCGR_CG_MASK << clk->enable_shift); in clk_ipu_disable()
178 __raw_writel(reg, clk->enable_reg); in clk_ipu_disable()
185 reg = __raw_readl(&mxc_ccm->ccdr); in clk_ipu_disable()
187 __raw_writel(reg, &mxc_ccm->ccdr); in clk_ipu_disable()
190 reg = __raw_readl(&mxc_ccm->clpcr); in clk_ipu_disable()
192 __raw_writel(reg, &mxc_ccm->clpcr); in clk_ipu_disable()
270 phyaddr / 8); in ipu_ch_param_set_buffer()
280 u64 final_rate = (unsigned long long)clk->parent->rate * 16; in ipu_pixel_clk_recalc()
282 div = __raw_readl(DI_BS_CLKGEN0(clk->id)); in ipu_pixel_clk_recalc()
284 div, final_rate, clk->parent->rate); in ipu_pixel_clk_recalc()
286 clk->rate = 0; in ipu_pixel_clk_recalc()
289 clk->rate = final_rate; in ipu_pixel_clk_recalc()
298 u64 parent_rate = (unsigned long long)clk->parent->rate * 16; in ipu_pixel_clk_round_rate()
332 parent_rate = (unsigned long long)clk->parent->rate * 16; in ipu_pixel_clk_set_rate()
347 __raw_writel(div, DI_BS_CLKGEN0(clk->id)); in ipu_pixel_clk_set_rate()
353 __raw_writel((div / 16) << 16, DI_BS_CLKGEN1(clk->id)); in ipu_pixel_clk_set_rate()
357 clk->rate = parent_rate; in ipu_pixel_clk_set_rate()
365 disp_gen |= clk->id ? DI1_COUNTER_RELEASE : DI0_COUNTER_RELEASE; in ipu_pixel_clk_enable()
374 disp_gen &= clk->id ? ~DI1_COUNTER_RELEASE : ~DI0_COUNTER_RELEASE; in ipu_pixel_clk_disable()
381 u32 di_gen = __raw_readl(DI_GENERAL(clk->id)); in ipu_pixel_clk_set_parent()
385 else if (!IS_ERR(g_di_clk[clk->id]) && parent == g_ldb_clk) in ipu_pixel_clk_set_parent()
388 return -EINVAL; in ipu_pixel_clk_set_parent()
390 __raw_writel(di_gen, DI_GENERAL(clk->id)); in ipu_pixel_clk_set_parent()
436 if (!(timeout--)) { in ipu_reset()
553 * This function is called to initialize a logical IPU channel.
555 * @param channel Input parameter for the logical channel ID to init.
557 * @param params Input parameter containing union of channel
562 int32_t ipu_init_channel(ipu_channel_t channel, ipu_channel_params_t *params) in ipu_init_channel() argument
567 debug("init channel = %d\n", IPU_CHAN_ID(channel)); in ipu_init_channel()
575 if (g_channel_init_mask & (1L << IPU_CHAN_ID(channel))) { in ipu_init_channel()
576 printf("Warning: channel already initialized %d\n", in ipu_init_channel()
577 IPU_CHAN_ID(channel)); in ipu_init_channel()
582 switch (channel) { in ipu_init_channel()
584 if (params->mem_dc_sync.di > 1) { in ipu_init_channel()
585 ret = -EINVAL; in ipu_init_channel()
589 g_dc_di_assignment[1] = params->mem_dc_sync.di; in ipu_init_channel()
590 ipu_dc_init(1, params->mem_dc_sync.di, in ipu_init_channel()
591 params->mem_dc_sync.interlaced); in ipu_init_channel()
592 ipu_di_use_count[params->mem_dc_sync.di]++; in ipu_init_channel()
597 if (params->mem_dp_bg_sync.di > 1) { in ipu_init_channel()
598 ret = -EINVAL; in ipu_init_channel()
602 g_dc_di_assignment[5] = params->mem_dp_bg_sync.di; in ipu_init_channel()
603 ipu_dp_init(channel, params->mem_dp_bg_sync.in_pixel_fmt, in ipu_init_channel()
604 params->mem_dp_bg_sync.out_pixel_fmt); in ipu_init_channel()
605 ipu_dc_init(5, params->mem_dp_bg_sync.di, in ipu_init_channel()
606 params->mem_dp_bg_sync.interlaced); in ipu_init_channel()
607 ipu_di_use_count[params->mem_dp_bg_sync.di]++; in ipu_init_channel()
613 ipu_dp_init(channel, params->mem_dp_fg_sync.in_pixel_fmt, in ipu_init_channel()
614 params->mem_dp_fg_sync.out_pixel_fmt); in ipu_init_channel()
621 printf("Missing channel initialization\n"); in ipu_init_channel()
626 g_channel_init_mask |= 1L << IPU_CHAN_ID(channel); in ipu_init_channel()
647 * This function is called to uninitialize a logical IPU channel.
649 * @param channel Input parameter for the logical channel ID to uninit.
651 void ipu_uninit_channel(ipu_channel_t channel) in ipu_uninit_channel() argument
657 if ((g_channel_init_mask & (1L << IPU_CHAN_ID(channel))) == 0) { in ipu_uninit_channel()
658 debug("Channel already uninitialized %d\n", in ipu_uninit_channel()
659 IPU_CHAN_ID(channel)); in ipu_uninit_channel()
664 * Make sure channel is disabled in ipu_uninit_channel()
667 in_dma = channel_2_dma(channel, IPU_OUTPUT_BUFFER); in ipu_uninit_channel()
668 out_dma = channel_2_dma(channel, IPU_VIDEO_IN_BUFFER); in ipu_uninit_channel()
673 "Channel %d is not disabled, disable first\n", in ipu_uninit_channel()
674 IPU_CHAN_ID(channel)); in ipu_uninit_channel()
686 switch (channel) { in ipu_uninit_channel()
689 ipu_di_use_count[g_dc_di_assignment[1]]--; in ipu_uninit_channel()
690 ipu_dc_use_count--; in ipu_uninit_channel()
691 ipu_dmfc_use_count--; in ipu_uninit_channel()
694 ipu_dp_uninit(channel); in ipu_uninit_channel()
696 ipu_di_use_count[g_dc_di_assignment[5]]--; in ipu_uninit_channel()
697 ipu_dc_use_count--; in ipu_uninit_channel()
698 ipu_dp_use_count--; in ipu_uninit_channel()
699 ipu_dmfc_use_count--; in ipu_uninit_channel()
702 ipu_dp_uninit(channel); in ipu_uninit_channel()
703 ipu_dc_use_count--; in ipu_uninit_channel()
704 ipu_dp_use_count--; in ipu_uninit_channel()
705 ipu_dmfc_use_count--; in ipu_uninit_channel()
711 g_channel_init_mask &= ~(1L << IPU_CHAN_ID(channel)); in ipu_uninit_channel()
739 debug("ch %d word 0 - %08X %08X %08X %08X %08X\n", ch, in ipu_ch_param_dump()
740 p->word[0].data[0], p->word[0].data[1], p->word[0].data[2], in ipu_ch_param_dump()
741 p->word[0].data[3], p->word[0].data[4]); in ipu_ch_param_dump()
742 debug("ch %d word 1 - %08X %08X %08X %08X %08X\n", ch, in ipu_ch_param_dump()
743 p->word[1].data[0], p->word[1].data[1], p->word[1].data[2], in ipu_ch_param_dump()
744 p->word[1].data[3], p->word[1].data[4]); in ipu_ch_param_dump()
785 ipu_ch_param_set_field(p, 1, 116, 3, red_width - 1); in ipu_ch_params_set_packing()
788 ipu_ch_param_set_field(p, 1, 119, 3, green_width - 1); in ipu_ch_params_set_packing()
791 ipu_ch_param_set_field(p, 1, 122, 3, blue_width - 1); in ipu_ch_params_set_packing()
794 ipu_ch_param_set_field(p, 1, 125, 3, alpha_width - 1); in ipu_ch_params_set_packing()
811 ipu_ch_param_set_field(&params, 0, 125, 13, width - 1); in ipu_ch_param_init()
813 if ((ch == 8) || (ch == 9) || (ch == 10)) { in ipu_ch_param_init()
814 ipu_ch_param_set_field(&params, 0, 138, 12, (height / 2) - 1); in ipu_ch_param_init()
815 ipu_ch_param_set_field(&params, 1, 102, 14, (stride * 2) - 1); in ipu_ch_param_init()
817 ipu_ch_param_set_field(&params, 0, 138, 12, height - 1); in ipu_ch_param_init()
818 ipu_ch_param_set_field(&params, 1, 102, 14, stride - 1); in ipu_ch_param_init()
826 /*Represents 8-bit Generic data */ in ipu_ch_param_init()
833 /*Represents 32-bit Generic data */ in ipu_ch_param_init()
840 ipu_ch_params_set_packing(&params, 5, 0, 6, 5, 5, 11, 8, 16); in ipu_ch_param_init()
847 ipu_ch_params_set_packing(&params, 8, 0, 8, 8, 8, 16, 8, 24); in ipu_ch_param_init()
855 ipu_ch_params_set_packing(&params, 8, 16, 8, 8, 8, 0, 8, 24); in ipu_ch_param_init()
863 ipu_ch_params_set_packing(&params, 8, 8, 8, 16, 8, 24, 8, 0); in ipu_ch_param_init()
871 ipu_ch_params_set_packing(&params, 8, 24, 8, 16, 8, 8, 8, 0); in ipu_ch_param_init()
877 ipu_ch_params_set_packing(&params, 8, 0, 8, 8, 8, 16, 8, 24); in ipu_ch_param_init()
899 if ((ch == 8) || (ch == 9) || (ch == 10)) { in ipu_ch_param_init()
942 ipu_ch_param_set_field(&params, 1, 128, 14, uv_stride - 1); in ipu_ch_param_init()
950 /* UBO and VBO are 22-bit */ in ipu_ch_param_init()
951 if (u_offset/8 > 0x3fffff) in ipu_ch_param_init()
953 if (v_offset/8 > 0x3fffff) in ipu_ch_param_init()
956 ipu_ch_param_set_field(&params, 0, 46, 22, u_offset / 8); in ipu_ch_param_init()
957 ipu_ch_param_set_field(&params, 0, 68, 22, v_offset / 8); in ipu_ch_param_init()
964 * This function is called to initialize a buffer for logical IPU channel.
966 * @param channel Input parameter for the logical channel ID.
994 int32_t ipu_init_channel_buffer(ipu_channel_t channel, ipu_buffer_t type, in ipu_init_channel_buffer() argument
1004 dma_chan = channel_2_dma(channel, type); in ipu_init_channel_buffer()
1006 return -EINVAL; in ipu_init_channel_buffer()
1013 "Stride not 32-bit aligned, stride = %d\n", stride); in ipu_init_channel_buffer()
1014 return -EINVAL; in ipu_init_channel_buffer()
1016 /* Build parameter memory data for DMA channel */ in ipu_init_channel_buffer()
1043 * This function enables a logical channel.
1045 * @param channel Input parameter for the logical channel ID.
1050 int32_t ipu_enable_channel(ipu_channel_t channel) in ipu_enable_channel() argument
1056 if (g_channel_enable_mask & (1L << IPU_CHAN_ID(channel))) { in ipu_enable_channel()
1057 printf("Warning: channel already enabled %d\n", in ipu_enable_channel()
1058 IPU_CHAN_ID(channel)); in ipu_enable_channel()
1062 out_dma = channel_2_dma(channel, IPU_OUTPUT_BUFFER); in ipu_enable_channel()
1063 in_dma = channel_2_dma(channel, IPU_VIDEO_IN_BUFFER); in ipu_enable_channel()
1074 if ((channel == MEM_DC_SYNC) || (channel == MEM_BG_SYNC) || in ipu_enable_channel()
1075 (channel == MEM_FG_SYNC)) in ipu_enable_channel()
1076 ipu_dp_dc_enable(channel); in ipu_enable_channel()
1078 g_channel_enable_mask |= 1L << IPU_CHAN_ID(channel); in ipu_enable_channel()
1084 * This function clear buffer ready for a logical channel.
1086 * @param channel Input parameter for the logical channel ID.
1094 void ipu_clear_buffer_ready(ipu_channel_t channel, ipu_buffer_t type, in ipu_clear_buffer_ready() argument
1097 uint32_t dma_ch = channel_2_dma(channel, type); in ipu_clear_buffer_ready()
1118 * This function disables a logical channel.
1120 * @param channel Input parameter for the logical channel ID.
1122 * @param wait_for_stop Flag to set whether to wait for channel end
1128 int32_t ipu_disable_channel(ipu_channel_t channel) in ipu_disable_channel() argument
1134 if ((g_channel_enable_mask & (1L << IPU_CHAN_ID(channel))) == 0) { in ipu_disable_channel()
1135 debug("Channel already disabled %d\n", in ipu_disable_channel()
1136 IPU_CHAN_ID(channel)); in ipu_disable_channel()
1141 out_dma = channel_2_dma(channel, IPU_OUTPUT_BUFFER); in ipu_disable_channel()
1142 in_dma = channel_2_dma(channel, IPU_VIDEO_IN_BUFFER); in ipu_disable_channel()
1148 return -EINVAL; in ipu_disable_channel()
1150 if ((channel == MEM_BG_SYNC) || (channel == MEM_FG_SYNC) || in ipu_disable_channel()
1151 (channel == MEM_DC_SYNC)) { in ipu_disable_channel()
1152 ipu_dp_dc_disable(channel, 0); in ipu_disable_channel()
1155 /* Disable DMA channel(s) */ in ipu_disable_channel()
1167 g_channel_enable_mask &= ~(1L << IPU_CHAN_ID(channel)); in ipu_disable_channel()
1169 /* Set channel buffers NOT to be ready */ in ipu_disable_channel()
1171 ipu_clear_buffer_ready(channel, IPU_VIDEO_IN_BUFFER, 0); in ipu_disable_channel()
1172 ipu_clear_buffer_ready(channel, IPU_VIDEO_IN_BUFFER, 1); in ipu_disable_channel()
1175 ipu_clear_buffer_ready(channel, IPU_OUTPUT_BUFFER, 0); in ipu_disable_channel()
1176 ipu_clear_buffer_ready(channel, IPU_OUTPUT_BUFFER, 1); in ipu_disable_channel()