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