xref: /optee_os/core/include/drivers/ls_dspi.h (revision 16c559719c3b5d3714bfb29178dbb0d38ac18f99)
13513f269SManish Tomar /* SPDX-License-Identifier: BSD-2-Clause */
23513f269SManish Tomar /*
33513f269SManish Tomar  * Copyright 2021 NXP
43513f269SManish Tomar  *
53513f269SManish Tomar  * Helper Code for DSPI Controller driver
63513f269SManish Tomar  */
73513f269SManish Tomar 
83513f269SManish Tomar #ifndef __DRIVERS_LS_DSPI_H
93513f269SManish Tomar #define __DRIVERS_LS_DSPI_H
103513f269SManish Tomar 
113513f269SManish Tomar #include <mm/core_memprot.h>
123513f269SManish Tomar #include <spi.h>
133513f269SManish Tomar 
143513f269SManish Tomar /* Clock and transfer attributes */
153513f269SManish Tomar #define DSPI_CTAR_BRD	     0x80000000		/* Double Baud Rate [0] */
163513f269SManish Tomar #define DSPI_CTAR_FMSZ(x)    (((x) & 0x0F) << 27) /* Frame Size [1-4] */
173513f269SManish Tomar #define DSPI_CTAR_CPOL	     0x04000000		/* Clock Polarity [5] */
183513f269SManish Tomar #define DSPI_CTAR_CPHA	     0x02000000		/* Clock Phase [6] */
193513f269SManish Tomar #define DSPI_CTAR_LSBFE	     0x01000000		/* LSB First [7] */
203513f269SManish Tomar #define DSPI_CTAR_PCS_SCK(x) (((x) & 0x03) << 22) /* PCSSCK [8-9] */
213513f269SManish Tomar #define DSPI_CTAR_PA_SCK(x)  (((x) & 0x03) << 20) /* PASC [10-11] */
223513f269SManish Tomar #define DSPI_CTAR_P_DT(x)    (((x) & 0x03) << 18) /* PDT [12-13] */
233513f269SManish Tomar #define DSPI_CTAR_BRP(x)     \
243513f269SManish Tomar 	(((x) & 0x03) << 16) /* Baud Rate Prescaler [14-15] */
253513f269SManish Tomar #define DSPI_CTAR_CS_SCK(x)  (((x) & 0x0F) << 12) /* CSSCK [16-19] */
263513f269SManish Tomar #define DSPI_CTAR_A_SCK(x)   (((x) & 0x0F) << 8)	/* ASC [20-23] */
273513f269SManish Tomar #define DSPI_CTAR_A_DT(x)    (((x) & 0x0F) << 4)	/* DT [24-27] */
283513f269SManish Tomar #define DSPI_CTAR_BR(x)	     ((x) & 0x0F)	/* Baud Rate Scaler [28-31] */
293513f269SManish Tomar 
30*c4d300dbSSriram Sriram /* SPI mode flags */
31*c4d300dbSSriram Sriram #define SPI_CPHA      BIT(0) /* clock phase */
32*c4d300dbSSriram Sriram #define SPI_CPOL      BIT(1) /* clock polarity */
33*c4d300dbSSriram Sriram #define SPI_CS_HIGH   BIT(2) /* CS active high */
34*c4d300dbSSriram Sriram #define SPI_LSB_FIRST BIT(3) /* per-word bits-on-wire */
35*c4d300dbSSriram Sriram #define SPI_CONT      BIT(4) /* Continuous CS mode */
36*c4d300dbSSriram Sriram 
373513f269SManish Tomar /*
383513f269SManish Tomar  * struct ls_dspi_data describes DSPI controller chip instance
393513f269SManish Tomar  * The structure contains below members:
403513f269SManish Tomar  * chip:		generic spi_chip instance
413513f269SManish Tomar  * base:		DSPI controller base address
423513f269SManish Tomar  * bus_clk_hz:		DSPI input clk frequency
433513f269SManish Tomar  * speed_hz:		Default SCK frequency=1mhz
443513f269SManish Tomar  * num_chipselect:	chip/slave selection
453513f269SManish Tomar  * slave_bus:		bus value of slave
463513f269SManish Tomar  * slave_cs:		chip slect value of slave
473513f269SManish Tomar  * slave_speed_max_hz:	max spped of slave
483513f269SManish Tomar  * slave_mode:		mode of slave
493513f269SManish Tomar  * slave_data_size_bits:Data size to be transferred (8 or 16 bits)
503513f269SManish Tomar  * ctar_val:		value of Clock and Transfer Attributes Register (CTAR)
513513f269SManish Tomar  * ctar_sel:		CTAR0 or CTAR1
523513f269SManish Tomar  */
533513f269SManish Tomar struct ls_dspi_data {
543513f269SManish Tomar 	struct spi_chip chip;
553513f269SManish Tomar 	vaddr_t base;
563513f269SManish Tomar 	unsigned int bus_clk_hz;
573513f269SManish Tomar 	unsigned int speed_hz;
583513f269SManish Tomar 	unsigned int num_chipselect;
593513f269SManish Tomar 	unsigned int slave_bus;
603513f269SManish Tomar 	unsigned int slave_cs;
613513f269SManish Tomar 	unsigned int slave_speed_max_hz;
623513f269SManish Tomar 	unsigned int slave_mode;
633513f269SManish Tomar 	unsigned int slave_data_size_bits;
643513f269SManish Tomar 	unsigned int ctar_val;
653513f269SManish Tomar 	unsigned int ctar_sel;
663513f269SManish Tomar };
673513f269SManish Tomar 
683513f269SManish Tomar /*
693513f269SManish Tomar  * Initialize DSPI Controller
703513f269SManish Tomar  * dspi_data:	DSPI controller chip instance
713513f269SManish Tomar  */
723513f269SManish Tomar TEE_Result ls_dspi_init(struct ls_dspi_data *dspi_data);
733513f269SManish Tomar 
743513f269SManish Tomar #endif /* __DRIVERS_LS_DSPI_H */
75