Lines Matching +full:cs +full:- +full:x
4 * Copyright 2010-2011 Freescale Semiconductor, Inc.
7 * SPDX-License-Identifier: GPL-2.0+
43 #define ESPI_MODE_TXTHR(x) ((x) << 8) /* Tx FIFO threshold */ argument
44 #define ESPI_MODE_RXTHR(x) ((x) << 0) /* Rx FIFO threshold */ argument
46 #define ESPI_COM_CS(x) ((x) << 30) argument
47 #define ESPI_COM_TRANLEN(x) ((x) << 0) argument
53 #define ESPI_CSMODE_PM(x) ((x) << 24) argument
55 #define ESPI_CSMODE_LEN(x) ((x) << 16) argument
56 #define ESPI_CSMODE_CSBEF(x) ((x) << 12) argument
57 #define ESPI_CSMODE_CSAFT(x) ((x) << 8) argument
58 #define ESPI_CSMODE_CSCG(x) ((x) << 3) argument
66 struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs, in spi_setup_slave() argument
75 if (!spi_cs_is_valid(bus, cs)) in spi_setup_slave()
78 fsl = spi_alloc_slave(struct fsl_spi_slave, bus, cs); in spi_setup_slave()
82 fsl->espi = (void *)(CONFIG_SYS_MPC85xx_ESPI_ADDR); in spi_setup_slave()
83 fsl->mode = mode; in spi_setup_slave()
84 fsl->max_transfer_length = ESPI_MAX_DATA_TRANSFER_LEN; in spi_setup_slave()
89 fsl->div16 = 0; in spi_setup_slave()
91 fsl->div16 = ESPI_CSMODE_DIV16; in spi_setup_slave()
101 pm--; in spi_setup_slave()
102 fsl->pm = pm; in spi_setup_slave()
104 if (fsl->div16) in spi_setup_slave()
110 fsl->tx_timeout = DIV_ROUND_UP((US_PER_SECOND * ESPI_FIFO_WIDTH_BIT in spi_setup_slave()
113 return &fsl->slave; in spi_setup_slave()
130 ccsr_espi_t *espi = fsl->espi; in spi_claim_bus()
131 unsigned char pm = fsl->pm; in spi_claim_bus()
132 unsigned int cs = slave->cs; in spi_claim_bus() local
133 unsigned int mode = fsl->mode; in spi_claim_bus()
134 unsigned int div16 = fsl->div16; in spi_claim_bus()
137 debug("%s: bus:%i cs:%i\n", __func__, slave->bus, cs); in spi_claim_bus()
140 out_be32(&espi->mode, ESPI_MODE_RXTHR(3) in spi_claim_bus()
143 out_be32(&espi->event, 0xffffffff); /* Clear all eSPI events */ in spi_claim_bus()
144 out_be32(&espi->mask, 0x00000000); /* Mask all eSPI interrupts */ in spi_claim_bus()
146 /* Init CS mode interface */ in spi_claim_bus()
148 out_be32(&espi->csmode[i], ESPI_CSMODE_INIT_VAL); in spi_claim_bus()
150 out_be32(&espi->csmode[cs], in_be32(&espi->csmode[cs]) & in spi_claim_bus()
156 out_be32(&espi->csmode[cs], in_be32(&espi->csmode[cs]) in spi_claim_bus()
161 out_be32(&espi->csmode[cs], in_be32(&espi->csmode[cs]) in spi_claim_bus()
164 out_be32(&espi->csmode[cs], in_be32(&espi->csmode[cs]) in spi_claim_bus()
168 out_be32(&espi->csmode[cs], in_be32(&espi->csmode[cs]) in spi_claim_bus()
172 out_be32(&espi->csmode[cs], in_be32(&espi->csmode[cs]) in spi_claim_bus()
185 ccsr_espi_t *espi = fsl->espi; in fsl_espi_tx()
194 out_be32(&espi->tx, tmpdout); in fsl_espi_tx()
195 out_be32(&espi->event, ESPI_EV_TNF); in fsl_espi_tx()
196 debug("***spi_xfer:...%08x written\n", tmpdout); in fsl_espi_tx()
198 tmp_tx_timeout = fsl->tx_timeout; in fsl_espi_tx()
200 while (tmp_tx_timeout--) { in fsl_espi_tx()
201 event = in_be32(&espi->event); in fsl_espi_tx()
203 out_be32(&espi->event, ESPI_EV_TXE); in fsl_espi_tx()
210 debug("***spi_xfer:...Tx timeout! event = %08x\n", event); in fsl_espi_tx()
215 ccsr_espi_t *espi = fsl->espi; in fsl_espi_rx()
226 return -1; in fsl_espi_rx()
229 while (rx_times--) { in fsl_espi_rx()
230 tmpdin = in_be32(&espi->rx); in fsl_espi_rx()
231 debug("***spi_xfer:...%08x readed\n", tmpdin); in fsl_espi_rx()
240 out_be32(&espi->event, ESPI_EV_RNE); in fsl_espi_rx()
249 ccsr_espi_t *espi = fsl->espi; in spi_xfer()
258 u8 *cmd_buf = fsl->cmd_buf; in spi_xfer()
259 size_t cmd_len = fsl->cmd_len; in spi_xfer()
264 max_tran_len = fsl->max_transfer_length; in spi_xfer()
267 cmd_len = fsl->cmd_len = data_len; in spi_xfer()
301 debug("spi_xfer: data_out %08X(%p) data_in %08X(%p) len %u\n", in spi_xfer()
305 while (num_chunks--) { in spi_xfer()
312 fsl->data_len = tran_len + cmd_len; in spi_xfer()
316 out_be32(&espi->event , 0xffffffff); in spi_xfer()
317 /* handle data in 32-bit chunks */ in spi_xfer()
319 event = in_be32(&espi->event); in spi_xfer()
324 len -= 4; in spi_xfer()
329 event = in_be32(&espi->event); in spi_xfer()
341 num_blks--; in spi_xfer()
352 data_len -= tran_len; in spi_xfer()
363 int spi_cs_is_valid(unsigned int bus, unsigned int cs) in spi_cs_is_valid() argument
365 return bus == 0 && cs < ESPI_MAX_CS_NUM; in spi_cs_is_valid()
371 ccsr_espi_t *espi = fsl->espi; in spi_cs_activate()
373 size_t data_len = fsl->data_len; in spi_cs_activate()
376 com |= ESPI_COM_CS(slave->cs); in spi_cs_activate()
377 com |= ESPI_COM_TRANLEN(data_len - 1); in spi_cs_activate()
378 out_be32(&espi->com, com); in spi_cs_activate()
384 ccsr_espi_t *espi = fsl->espi; in spi_cs_deactivate()
387 out_be32(&espi->mode, in_be32(&espi->mode) & (~ESPI_MODE_EN)); in spi_cs_deactivate()
388 out_be32(&espi->mode, in_be32(&espi->mode) | ESPI_MODE_EN); in spi_cs_deactivate()