@@ -222,6 +222,87 @@ static inline void mchp_coreqspi_write_op(struct mchp_coreqspi *qspi)
222222 }
223223}
224224
225+ static inline void mchp_coreqspi_write_read_op (struct mchp_coreqspi * qspi )
226+ {
227+ u32 control , data ;
228+
229+ qspi -> rx_len = qspi -> tx_len ;
230+
231+ control = readl_relaxed (qspi -> regs + REG_CONTROL );
232+ control |= CONTROL_FLAGSX4 ;
233+ writel_relaxed (control , qspi -> regs + REG_CONTROL );
234+
235+ while (qspi -> tx_len >= 4 ) {
236+ while (readl_relaxed (qspi -> regs + REG_STATUS ) & STATUS_TXFIFOFULL )
237+ ;
238+
239+ data = qspi -> txbuf ? * ((u32 * )qspi -> txbuf ) : 0xaa ;
240+ if (qspi -> txbuf )
241+ qspi -> txbuf += 4 ;
242+ qspi -> tx_len -= 4 ;
243+ writel_relaxed (data , qspi -> regs + REG_X4_TX_DATA );
244+
245+ /*
246+ * The rx FIFO is twice the size of the tx FIFO, so there is
247+ * no requirement to block transmission if receive data is not
248+ * ready, and it is fine to let the tx FIFO completely fill
249+ * without reading anything from the rx FIFO. Once the tx FIFO
250+ * has been filled and becomes non-full due to a transmission
251+ * occurring there will always be something to receive.
252+ * IOW, this is safe as TX_FIFO_SIZE + 4 < 2 * TX_FIFO_SIZE
253+ */
254+ if (qspi -> rx_len >= 4 ) {
255+ if (readl_relaxed (qspi -> regs + REG_STATUS ) & STATUS_RXAVAILABLE ) {
256+ data = readl_relaxed (qspi -> regs + REG_X4_RX_DATA );
257+ * (u32 * )qspi -> rxbuf = data ;
258+ qspi -> rxbuf += 4 ;
259+ qspi -> rx_len -= 4 ;
260+ }
261+ }
262+ }
263+
264+ /*
265+ * Since transmission is not being blocked by clearing the rx FIFO,
266+ * loop here until all received data "leaked" by the loop above has
267+ * been dealt with.
268+ */
269+ while (qspi -> rx_len >= 4 ) {
270+ while (readl_relaxed (qspi -> regs + REG_STATUS ) & STATUS_RXFIFOEMPTY )
271+ ;
272+ data = readl_relaxed (qspi -> regs + REG_X4_RX_DATA );
273+ * (u32 * )qspi -> rxbuf = data ;
274+ qspi -> rxbuf += 4 ;
275+ qspi -> rx_len -= 4 ;
276+ }
277+
278+ /*
279+ * Since rx_len and tx_len must be < 4 bytes at this point, there's no
280+ * concern about overflowing the rx or tx FIFOs any longer. It's
281+ * therefore safe to loop over the remainder of the transmit data before
282+ * handling the remaining receive data.
283+ */
284+ if (!qspi -> tx_len )
285+ return ;
286+
287+ control &= ~CONTROL_FLAGSX4 ;
288+ writel_relaxed (control , qspi -> regs + REG_CONTROL );
289+
290+ while (qspi -> tx_len -- ) {
291+ while (readl_relaxed (qspi -> regs + REG_STATUS ) & STATUS_TXFIFOFULL )
292+ ;
293+ data = qspi -> txbuf ? * qspi -> txbuf : 0xaa ;
294+ qspi -> txbuf ++ ;
295+ writel_relaxed (data , qspi -> regs + REG_TX_DATA );
296+ }
297+
298+ while (qspi -> rx_len -- ) {
299+ while (readl_relaxed (qspi -> regs + REG_STATUS ) & STATUS_RXFIFOEMPTY )
300+ ;
301+ data = readl_relaxed (qspi -> regs + REG_RX_DATA );
302+ * qspi -> rxbuf ++ = (data & 0xFF );
303+ }
304+ }
305+
225306static void mchp_coreqspi_enable_ints (struct mchp_coreqspi * qspi )
226307{
227308 u32 mask = IEN_TXDONE |
@@ -266,7 +347,7 @@ static irqreturn_t mchp_coreqspi_isr(int irq, void *dev_id)
266347}
267348
268349static int mchp_coreqspi_setup_clock (struct mchp_coreqspi * qspi , struct spi_device * spi ,
269- const struct spi_mem_op * op )
350+ u32 max_freq )
270351{
271352 unsigned long clk_hz ;
272353 u32 control , baud_rate_val = 0 ;
@@ -275,11 +356,11 @@ static int mchp_coreqspi_setup_clock(struct mchp_coreqspi *qspi, struct spi_devi
275356 if (!clk_hz )
276357 return - EINVAL ;
277358
278- baud_rate_val = DIV_ROUND_UP (clk_hz , 2 * op -> max_freq );
359+ baud_rate_val = DIV_ROUND_UP (clk_hz , 2 * max_freq );
279360 if (baud_rate_val > MAX_DIVIDER || baud_rate_val < MIN_DIVIDER ) {
280361 dev_err (& spi -> dev ,
281362 "could not configure the clock for spi clock %d Hz & system clock %ld Hz\n" ,
282- op -> max_freq , clk_hz );
363+ max_freq , clk_hz );
283364 return - EINVAL ;
284365 }
285366
@@ -367,23 +448,13 @@ static inline void mchp_coreqspi_config_op(struct mchp_coreqspi *qspi, const str
367448 writel_relaxed (frames , qspi -> regs + REG_FRAMES );
368449}
369450
370- static int mchp_qspi_wait_for_ready (struct spi_mem * mem )
451+ static int mchp_coreqspi_wait_for_ready (struct mchp_coreqspi * qspi )
371452{
372- struct mchp_coreqspi * qspi = spi_controller_get_devdata
373- (mem -> spi -> controller );
374453 u32 status ;
375- int ret ;
376454
377- ret = readl_poll_timeout (qspi -> regs + REG_STATUS , status ,
455+ return readl_poll_timeout (qspi -> regs + REG_STATUS , status ,
378456 (status & STATUS_READY ), 0 ,
379457 TIMEOUT_MS );
380- if (ret ) {
381- dev_err (& mem -> spi -> dev ,
382- "Timeout waiting on QSPI ready.\n" );
383- return - ETIMEDOUT ;
384- }
385-
386- return ret ;
387458}
388459
389460static int mchp_coreqspi_exec_op (struct spi_mem * mem , const struct spi_mem_op * op )
@@ -396,11 +467,13 @@ static int mchp_coreqspi_exec_op(struct spi_mem *mem, const struct spi_mem_op *o
396467 int err , i ;
397468
398469 mutex_lock (& qspi -> op_lock );
399- err = mchp_qspi_wait_for_ready (mem );
400- if (err )
470+ err = mchp_coreqspi_wait_for_ready (qspi );
471+ if (err ) {
472+ dev_err (& mem -> spi -> dev , "Timeout waiting on QSPI ready.\n" );
401473 goto error ;
474+ }
402475
403- err = mchp_coreqspi_setup_clock (qspi , mem -> spi , op );
476+ err = mchp_coreqspi_setup_clock (qspi , mem -> spi , op -> max_freq );
404477 if (err )
405478 goto error ;
406479
@@ -515,6 +588,109 @@ static const struct spi_controller_mem_caps mchp_coreqspi_mem_caps = {
515588 .per_op_freq = true,
516589};
517590
591+ static int mchp_coreqspi_unprepare_message (struct spi_controller * ctlr , struct spi_message * m )
592+ {
593+ struct mchp_coreqspi * qspi = spi_controller_get_devdata (ctlr );
594+
595+ /*
596+ * This delay is required for the driver to function correctly,
597+ * but no explanation has been determined for why it is required.
598+ */
599+ udelay (750 );
600+
601+ mutex_unlock (& qspi -> op_lock );
602+
603+ return 0 ;
604+ }
605+
606+ static int mchp_coreqspi_prepare_message (struct spi_controller * ctlr , struct spi_message * m )
607+ {
608+ struct mchp_coreqspi * qspi = spi_controller_get_devdata (ctlr );
609+ struct spi_transfer * t = NULL ;
610+ u32 control , frames ;
611+ u32 total_bytes = 0 , cmd_bytes = 0 , idle_cycles = 0 ;
612+ int ret ;
613+ bool quad = false, dual = false;
614+
615+ mutex_lock (& qspi -> op_lock );
616+ ret = mchp_coreqspi_wait_for_ready (qspi );
617+ if (ret ) {
618+ mutex_unlock (& qspi -> op_lock );
619+ dev_err (& ctlr -> dev , "Timeout waiting on QSPI ready.\n" );
620+ return ret ;
621+ }
622+
623+ ret = mchp_coreqspi_setup_clock (qspi , m -> spi , m -> spi -> max_speed_hz );
624+ if (ret ) {
625+ mutex_unlock (& qspi -> op_lock );
626+ return ret ;
627+ }
628+
629+ control = readl_relaxed (qspi -> regs + REG_CONTROL );
630+ control &= ~(CONTROL_MODE12_MASK | CONTROL_MODE0 );
631+ writel_relaxed (control , qspi -> regs + REG_CONTROL );
632+
633+ reinit_completion (& qspi -> data_completion );
634+
635+ list_for_each_entry (t , & m -> transfers , transfer_list ) {
636+ total_bytes += t -> len ;
637+ if (!cmd_bytes && !(t -> tx_buf && t -> rx_buf ))
638+ cmd_bytes = t -> len ;
639+ if (!t -> rx_buf )
640+ cmd_bytes = total_bytes ;
641+ if (t -> tx_nbits == SPI_NBITS_QUAD || t -> rx_nbits == SPI_NBITS_QUAD )
642+ quad = true;
643+ else if (t -> tx_nbits == SPI_NBITS_DUAL || t -> rx_nbits == SPI_NBITS_DUAL )
644+ dual = true;
645+ }
646+
647+ control = readl_relaxed (qspi -> regs + REG_CONTROL );
648+ if (quad ) {
649+ control |= (CONTROL_MODE0 | CONTROL_MODE12_EX_RW );
650+ } else if (dual ) {
651+ control &= ~CONTROL_MODE0 ;
652+ control |= CONTROL_MODE12_FULL ;
653+ } else {
654+ control &= ~(CONTROL_MODE12_MASK | CONTROL_MODE0 );
655+ }
656+ writel_relaxed (control , qspi -> regs + REG_CONTROL );
657+
658+ frames = total_bytes & BYTESUPPER_MASK ;
659+ writel_relaxed (frames , qspi -> regs + REG_FRAMESUP );
660+ frames = total_bytes & BYTESLOWER_MASK ;
661+ frames |= cmd_bytes << FRAMES_CMDBYTES_SHIFT ;
662+ frames |= idle_cycles << FRAMES_IDLE_SHIFT ;
663+ control = readl_relaxed (qspi -> regs + REG_CONTROL );
664+ if (control & CONTROL_MODE12_MASK )
665+ frames |= (1 << FRAMES_SHIFT );
666+
667+ frames |= FRAMES_FLAGWORD ;
668+ writel_relaxed (frames , qspi -> regs + REG_FRAMES );
669+
670+ return 0 ;
671+ };
672+
673+ static int mchp_coreqspi_transfer_one (struct spi_controller * ctlr , struct spi_device * spi ,
674+ struct spi_transfer * t )
675+ {
676+ struct mchp_coreqspi * qspi = spi_controller_get_devdata (ctlr );
677+
678+ qspi -> tx_len = t -> len ;
679+
680+ if (t -> tx_buf )
681+ qspi -> txbuf = (u8 * )t -> tx_buf ;
682+
683+ if (!t -> rx_buf ) {
684+ mchp_coreqspi_write_op (qspi );
685+ } else {
686+ qspi -> rxbuf = (u8 * )t -> rx_buf ;
687+ qspi -> rx_len = t -> len ;
688+ mchp_coreqspi_write_read_op (qspi );
689+ }
690+
691+ return 0 ;
692+ }
693+
518694static int mchp_coreqspi_probe (struct platform_device * pdev )
519695{
520696 struct spi_controller * ctlr ;
@@ -563,6 +739,11 @@ static int mchp_coreqspi_probe(struct platform_device *pdev)
563739 SPI_TX_DUAL | SPI_TX_QUAD ;
564740 ctlr -> dev .of_node = np ;
565741 ctlr -> min_speed_hz = clk_get_rate (qspi -> clk ) / 30 ;
742+ ctlr -> prepare_message = mchp_coreqspi_prepare_message ;
743+ ctlr -> unprepare_message = mchp_coreqspi_unprepare_message ;
744+ ctlr -> transfer_one = mchp_coreqspi_transfer_one ;
745+ ctlr -> num_chipselect = 2 ;
746+ ctlr -> use_gpio_descriptors = true;
566747
567748 ret = devm_spi_register_controller (& pdev -> dev , ctlr );
568749 if (ret )
0 commit comments