Lines Matching +full:rx +full:- +full:input

1 // SPDX-License-Identifier: GPL-2.0+
32 cbd_t rxbd; /* Rx BD */
35 uchar rxbuf[CONFIG_SYS_SMC_RXBUFLEN];/* rx buffers */
41 int divisor = (gd->cpu_clk + 8 * baudrate) / 16 / baudrate; in serial_setdivisor()
51 out_be32(&cp->cp_brgc1, ((divisor - 1) << 1) | CPM_BRG_EN); in serial_setdivisor()
53 out_be32(&cp->cp_brgc1, ((divisor / 16 - 1) << 1) | CPM_BRG_EN | in serial_setdivisor()
65 cpm8xx_t __iomem *cp = &(im->im_cpm); in serial_mpc8xx_setbrg()
73 out_be32(&cp->cp_simode, 0); in serial_mpc8xx_setbrg()
85 cpm8xx_t __iomem *cp = &(im->im_cpm); in serial_mpc8xx_probe()
90 sp = cp->cp_smc + SMC_INDEX; in serial_mpc8xx_probe()
91 up = (smc_uart_t __iomem *)&cp->cp_dparam[PROFF_SMC]; in serial_mpc8xx_probe()
93 out_be16(&up->smc_rpbase, 0); in serial_mpc8xx_probe()
96 clrbits_be16(&sp->smc_smcmr, SMCMR_REN | SMCMR_TEN); in serial_mpc8xx_probe()
99 out_be32(&im->im_siu_conf.sc_sdcr, 1); in serial_mpc8xx_probe()
102 out_8(&im->im_sdma.sdma_sdsr, CONFIG_SYS_SDSR); in serial_mpc8xx_probe()
105 out_8(&im->im_sdma.sdma_sdmr, CONFIG_SYS_SDMR); in serial_mpc8xx_probe()
108 setbits_be32(&cp->cp_pbpar, IOPINS); in serial_mpc8xx_probe()
109 clrbits_be32(&cp->cp_pbdir, IOPINS); in serial_mpc8xx_probe()
110 clrbits_be16(&cp->cp_pbodr, IOPINS); in serial_mpc8xx_probe()
115 rtx = (struct serialbuffer __iomem *)&cp->cp_dpmem[CPM_SERIAL_BASE]; in serial_mpc8xx_probe()
119 * damm: allocating space after the two buffers for rx/tx data in serial_mpc8xx_probe()
122 out_be32(&rtx->rxbd.cbd_bufaddr, (__force uint)&rtx->rxbuf); in serial_mpc8xx_probe()
123 out_be16(&rtx->rxbd.cbd_sc, 0); in serial_mpc8xx_probe()
125 out_be32(&rtx->txbd.cbd_bufaddr, (__force uint)&rtx->txbuf); in serial_mpc8xx_probe()
126 out_be16(&rtx->txbd.cbd_sc, 0); in serial_mpc8xx_probe()
129 out_be16(&up->smc_rbase, CPM_SERIAL_BASE); in serial_mpc8xx_probe()
130 out_be16(&up->smc_tbase, CPM_SERIAL_BASE + sizeof(cbd_t)); in serial_mpc8xx_probe()
131 out_8(&up->smc_rfcr, SMC_EB); in serial_mpc8xx_probe()
132 out_8(&up->smc_tfcr, SMC_EB); in serial_mpc8xx_probe()
137 out_be16(&sp->smc_smcmr, smcr_mk_clen(9) | SMCMR_SM_UART); in serial_mpc8xx_probe()
141 out_8(&sp->smc_smcm, 0); in serial_mpc8xx_probe()
142 out_8(&sp->smc_smce, 0xff); in serial_mpc8xx_probe()
145 serial_mpc8xx_setbrg(dev, gd->baudrate); in serial_mpc8xx_probe()
148 setbits_be16(&rtx->txbd.cbd_sc, BD_SC_WRAP); in serial_mpc8xx_probe()
149 setbits_be16(&rtx->rxbd.cbd_sc, BD_SC_EMPTY | BD_SC_WRAP); in serial_mpc8xx_probe()
152 out_be16(&up->smc_mrblr, CONFIG_SYS_SMC_RXBUFLEN); in serial_mpc8xx_probe()
153 out_be16(&up->smc_maxidl, CONFIG_SYS_MAXIDLE); in serial_mpc8xx_probe()
154 out_be32(&rtx->rxindex, 0); in serial_mpc8xx_probe()
156 /* Initialize Tx/Rx parameters. */ in serial_mpc8xx_probe()
157 while (in_be16(&cp->cp_cpcr) & CPM_CR_FLG) /* wait if cp is busy */ in serial_mpc8xx_probe()
160 out_be16(&cp->cp_cpcr, in serial_mpc8xx_probe()
163 while (in_be16(&cp->cp_cpcr) & CPM_CR_FLG) /* wait if cp is busy */ in serial_mpc8xx_probe()
167 setbits_be16(&sp->smc_smcmr, SMCMR_REN | SMCMR_TEN); in serial_mpc8xx_probe()
175 cpm8xx_t __iomem *cpmp = &(im->im_cpm); in serial_mpc8xx_putc()
181 rtx = (struct serialbuffer __iomem *)&cpmp->cp_dpmem[CPM_SERIAL_BASE]; in serial_mpc8xx_putc()
184 out_8(&rtx->txbuf, c); in serial_mpc8xx_putc()
185 out_be16(&rtx->txbd.cbd_datlen, 1); in serial_mpc8xx_putc()
186 setbits_be16(&rtx->txbd.cbd_sc, BD_SC_READY); in serial_mpc8xx_putc()
188 while (in_be16(&rtx->txbd.cbd_sc) & BD_SC_READY) in serial_mpc8xx_putc()
197 cpm8xx_t __iomem *cpmp = &(im->im_cpm); in serial_mpc8xx_getc()
202 rtx = (struct serialbuffer __iomem *)&cpmp->cp_dpmem[CPM_SERIAL_BASE]; in serial_mpc8xx_getc()
205 while (in_be16(&rtx->rxbd.cbd_sc) & BD_SC_EMPTY) in serial_mpc8xx_getc()
211 rxindex = in_be32(&rtx->rxindex); in serial_mpc8xx_getc()
212 c = in_8(rtx->rxbuf + rxindex); in serial_mpc8xx_getc()
216 if (rxindex >= in_be16(&rtx->rxbd.cbd_datlen)) { in serial_mpc8xx_getc()
218 setbits_be16(&rtx->rxbd.cbd_sc, BD_SC_EMPTY); in serial_mpc8xx_getc()
220 out_be32(&rtx->rxindex, rxindex); in serial_mpc8xx_getc()
224 static int serial_mpc8xx_pending(struct udevice *dev, bool input) in serial_mpc8xx_pending() argument
227 cpm8xx_t __iomem *cpmp = &(im->im_cpm); in serial_mpc8xx_pending()
230 if (!input) in serial_mpc8xx_pending()
233 rtx = (struct serialbuffer __iomem *)&cpmp->cp_dpmem[CPM_SERIAL_BASE]; in serial_mpc8xx_pending()
235 return !(in_be16(&rtx->rxbd.cbd_sc) & BD_SC_EMPTY); in serial_mpc8xx_pending()
246 { .compatible = "fsl,pq1-smc" },