/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __SPI_SH_MSIOF_H__
#define __SPI_SH_MSIOF_H__
#include <linux/bitfield.h>
#include <linux/bits.h>
#define SITMDR1 0 x00 /* Transmit Mode Register 1 */
#define SITMDR2 0 x04 /* Transmit Mode Register 2 */
#define SITMDR3 0 x08 /* Transmit Mode Register 3 */
#define SIRMDR1 0 x10 /* Receive Mode Register 1 */
#define SIRMDR2 0 x14 /* Receive Mode Register 2 */
#define SIRMDR3 0 x18 /* Receive Mode Register 3 */
#define SITSCR 0 x20 /* Transmit Clock Select Register */
#define SIRSCR 0 x22 /* Receive Clock Select Register (SH, A1, APE6) */
#define SICTR 0 x28 /* Control Register */
#define SIFCTR 0 x30 /* FIFO Control Register */
#define SISTR 0 x40 /* Status Register */
#define SIIER 0 x44 /* Interrupt Enable Register */
#define SITDR1 0 x48 /* Transmit Control Data Register 1 (SH, A1) */
#define SITDR2 0 x4c /* Transmit Control Data Register 2 (SH, A1) */
#define SITFDR 0 x50 /* Transmit FIFO Data Register */
#define SIRDR1 0 x58 /* Receive Control Data Register 1 (SH, A1) */
#define SIRDR2 0 x5c /* Receive Control Data Register 2 (SH, A1) */
#define SIRFDR 0 x60 /* Receive FIFO Data Register */
/* SITMDR1 and SIRMDR1 */
#define SIMDR1_TRMD BIT(31 ) /* Transfer Mode (1 = Master mode) */
#define SIMDR1_SYNCMD GENMASK(29 , 28 ) /* SYNC Mode */
#define SIMDR1_SYNCMD_PULSE 0 U /* Frame start sync pulse */
#define SIMDR1_SYNCMD_SPI 2 U /* Level mode/SPI */
#define SIMDR1_SYNCMD_LR 3 U /* L/R mode */
#define SIMDR1_SYNCAC BIT(25 ) /* Sync Polarity (1 = Active-low) */
#define SIMDR1_BITLSB BIT(24 ) /* MSB/LSB First (1 = LSB first) */
#define SIMDR1_DTDL GENMASK(22 , 20 ) /* Data Pin Bit Delay for MSIOF_SYNC */
#define SIMDR1_SYNCDL GENMASK(18 , 16 ) /* Frame Sync Signal Timing Delay */
#define SIMDR1_FLD GENMASK(3 , 2 ) /* Frame Sync Signal Interval (0-3) */
#define SIMDR1_XXSTP BIT(0 ) /* Transmission/Reception Stop on FIFO */
/* SITMDR1 */
#define SITMDR1_PCON BIT(30 ) /* Transfer Signal Connection */
#define SITMDR1_SYNCCH GENMASK(27 , 26 ) /* Sync Signal Channel Select */
/* 0=MSIOF_SYNC, 1=MSIOF_SS1, 2=MSIOF_SS2 */
/* SITMDR2 and SIRMDR2 */
#define SIMDR2_GRP GENMASK(31 , 30 ) /* Group Count */
#define SIMDR2_BITLEN1 GENMASK(28 , 24 ) /* Data Size (8-32 bits) */
#define SIMDR2_WDLEN1 GENMASK(23 , 16 ) /* Word Count (1-64/256 (SH, A1))) */
#define SIMDR2_GRPMASK GENMASK(3 , 0 ) /* Group Output Mask 1-4 (SH, A1) */
/* SITMDR3 and SIRMDR3 */
#define SIMDR3_BITLEN2 GENMASK(28 , 24 ) /* Data Size (8-32 bits) */
#define SIMDR3_WDLEN2 GENMASK(23 , 16 ) /* Word Count (1-64/256 (SH, A1))) */
/* SITSCR and SIRSCR */
#define SISCR_BRPS GENMASK(12 , 8 ) /* Prescaler Setting (1-32) */
#define SISCR_BRDV GENMASK(2 , 0 ) /* Baud Rate Generator's Division Ratio */
/* SICTR */
#define SICTR_TSCKIZ GENMASK(31 , 30 ) /* Transmit Clock I/O Polarity Select */
#define SICTR_TSCKIZ_SCK BIT(31 ) /* Disable SCK when TX disabled */
#define SICTR_TSCKIZ_POL BIT(30 ) /* Transmit Clock Polarity */
#define SICTR_RSCKIZ GENMASK(29 , 28 ) /* Receive Clock Polarity Select */
#define SICTR_RSCKIZ_SCK BIT(29 ) /* Must match CTR_TSCKIZ_SCK */
#define SICTR_RSCKIZ_POL BIT(28 ) /* Receive Clock Polarity */
#define SICTR_TEDG BIT(27 ) /* Transmit Timing (1 = falling edge) */
#define SICTR_REDG BIT(26 ) /* Receive Timing (1 = falling edge) */
#define SICTR_TXDIZ GENMASK(23 , 22 ) /* Pin Output When TX is Disabled */
#define SICTR_TXDIZ_LOW 0 U /* 0 */
#define SICTR_TXDIZ_HIGH 1 U /* 1 */
#define SICTR_TXDIZ_HIZ 2 U /* High-impedance */
#define SICTR_TSCKE BIT(15 ) /* Transmit Serial Clock Output Enable */
#define SICTR_TFSE BIT(14 ) /* Transmit Frame Sync Signal Output Enable */
#define SICTR_TXE BIT(9 ) /* Transmit Enable */
#define SICTR_RXE BIT(8 ) /* Receive Enable */
#define SICTR_TXRST BIT(1 ) /* Transmit Reset */
#define SICTR_RXRST BIT(0 ) /* Receive Reset */
/* SIFCTR */
#define SIFCTR_TFWM GENMASK(31 , 29 ) /* Transmit FIFO Watermark */
#define SIFCTR_TFWM_64 0 U /* Transfer Request when 64 empty stages */
#define SIFCTR_TFWM_32 1 U /* Transfer Request when 32 empty stages */
#define SIFCTR_TFWM_24 2 U /* Transfer Request when 24 empty stages */
#define SIFCTR_TFWM_16 3 U /* Transfer Request when 16 empty stages */
#define SIFCTR_TFWM_12 4 U /* Transfer Request when 12 empty stages */
#define SIFCTR_TFWM_8 5 U /* Transfer Request when 8 empty stages */
#define SIFCTR_TFWM_4 6 U /* Transfer Request when 4 empty stages */
#define SIFCTR_TFWM_1 7 U /* Transfer Request when 1 empty stage */
#define SIFCTR_TFUA GENMASK(28 , 20 ) /* Transmit FIFO Usable Area */
#define SIFCTR_RFWM GENMASK(15 , 13 ) /* Receive FIFO Watermark */
#define SIFCTR_RFWM_1 0 U /* Transfer Request when 1 valid stages */
#define SIFCTR_RFWM_4 1 U /* Transfer Request when 4 valid stages */
#define SIFCTR_RFWM_8 2 U /* Transfer Request when 8 valid stages */
#define SIFCTR_RFWM_16 3 U /* Transfer Request when 16 valid stages */
#define SIFCTR_RFWM_32 4 U /* Transfer Request when 32 valid stages */
#define SIFCTR_RFWM_64 5 U /* Transfer Request when 64 valid stages */
#define SIFCTR_RFWM_128 6 U /* Transfer Request when 128 valid stages */
#define SIFCTR_RFWM_256 7 U /* Transfer Request when 256 valid stages */
#define SIFCTR_RFUA GENMASK(12 , 4 ) /* Receive FIFO Usable Area (0x40 = full) */
/* SISTR */
#define SISTR_TFEMP BIT(29 ) /* Transmit FIFO Empty */
#define SISTR_TDREQ BIT(28 ) /* Transmit Data Transfer Request */
#define SISTR_TEOF BIT(23 ) /* Frame Transmission End */
#define SISTR_TFSERR BIT(21 ) /* Transmit Frame Synchronization Error */
#define SISTR_TFOVF BIT(20 ) /* Transmit FIFO Overflow */
#define SISTR_TFUDF BIT(19 ) /* Transmit FIFO Underflow */
#define SISTR_RFFUL BIT(13 ) /* Receive FIFO Full */
#define SISTR_RDREQ BIT(12 ) /* Receive Data Transfer Request */
#define SISTR_REOF BIT(7 ) /* Frame Reception End */
#define SISTR_RFSERR BIT(5 ) /* Receive Frame Synchronization Error */
#define SISTR_RFUDF BIT(4 ) /* Receive FIFO Underflow */
#define SISTR_RFOVF BIT(3 ) /* Receive FIFO Overflow */
/* SIIER */
#define SIIER_TDMAE BIT(31 ) /* Transmit Data DMA Transfer Req. Enable */
#define SIIER_TFEMPE BIT(29 ) /* Transmit FIFO Empty Enable */
#define SIIER_TDREQE BIT(28 ) /* Transmit Data Transfer Request Enable */
#define SIIER_TEOFE BIT(23 ) /* Frame Transmission End Enable */
#define SIIER_TFSERRE BIT(21 ) /* Transmit Frame Sync Error Enable */
#define SIIER_TFOVFE BIT(20 ) /* Transmit FIFO Overflow Enable */
#define SIIER_TFUDFE BIT(19 ) /* Transmit FIFO Underflow Enable */
#define SIIER_RDMAE BIT(15 ) /* Receive Data DMA Transfer Req. Enable */
#define SIIER_RFFULE BIT(13 ) /* Receive FIFO Full Enable */
#define SIIER_RDREQE BIT(12 ) /* Receive Data Transfer Request Enable */
#define SIIER_REOFE BIT(7 ) /* Frame Reception End Enable */
#define SIIER_RFSERRE BIT(5 ) /* Receive Frame Sync Error Enable */
#define SIIER_RFUDFE BIT(4 ) /* Receive FIFO Underflow Enable */
#define SIIER_RFOVFE BIT(3 ) /* Receive FIFO Overflow Enable */
enum {
MSIOF_SPI_HOST,
MSIOF_SPI_TARGET,
};
struct sh_msiof_spi_info {
int tx_fifo_override;
int rx_fifo_override;
u16 num_chipselect;
int mode;
unsigned int dma_tx_id;
unsigned int dma_rx_id;
u32 dtdl;
u32 syncdl;
};
#endif /* __SPI_SH_MSIOF_H__ */
Messung V0.5 in Prozent C=95 H=94 G=94
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland