11bd4fe43Sopenharmony_ci/*
21bd4fe43Sopenharmony_ci * Copyright (c) 2020-2021 HiSilicon (Shanghai) Technologies CO., LIMITED.
31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
61bd4fe43Sopenharmony_ci *
71bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
131bd4fe43Sopenharmony_ci * limitations under the License.
141bd4fe43Sopenharmony_ci */
151bd4fe43Sopenharmony_ci
161bd4fe43Sopenharmony_ci#ifndef SPI_HI35XX_H
171bd4fe43Sopenharmony_ci#define SPI_HI35XX_H
181bd4fe43Sopenharmony_ci#include "los_vm_zone.h"
191bd4fe43Sopenharmony_ci
201bd4fe43Sopenharmony_ci#ifdef __cplusplus
211bd4fe43Sopenharmony_ci#if __cplusplus
221bd4fe43Sopenharmony_ciextern "C" {
231bd4fe43Sopenharmony_ci#endif /* __cplusplus */
241bd4fe43Sopenharmony_ci#endif /* __cplusplus */
251bd4fe43Sopenharmony_ci
261bd4fe43Sopenharmony_ci/* ********** spi reg offset define *************** */
271bd4fe43Sopenharmony_ci#define REG_SPI_CR0              0x00
281bd4fe43Sopenharmony_ci#define SPI_CR0_SCR_SHIFT        8
291bd4fe43Sopenharmony_ci#define SPI_CR0_SPH_SHIFT        7
301bd4fe43Sopenharmony_ci#define SPI_CR0_SPO_SHIFT        6
311bd4fe43Sopenharmony_ci#define SPI_CR0_FRF_SHIFT        4
321bd4fe43Sopenharmony_ci#define SPI_CR0_DSS_SHIFT        0
331bd4fe43Sopenharmony_ci#define SPI_CR0_SCR              (0xff << 8) /* clkout=clk/(cpsdvsr*(scr+1)) */
341bd4fe43Sopenharmony_ci#define SPI_CR0_SPH              (0x1 << 7)  /* spi phase */
351bd4fe43Sopenharmony_ci#define SPI_CR0_SPO              (0x1 << 6)  /* spi clk polarity */
361bd4fe43Sopenharmony_ci#define SPI_CR0_FRF              (0x3 << 4)  /* frame format set */
371bd4fe43Sopenharmony_ci#define SPI_CR0_DSS              (0xf << 0)  /* data bits width */
381bd4fe43Sopenharmony_ci
391bd4fe43Sopenharmony_ci#define REG_SPI_CR1              0x04
401bd4fe43Sopenharmony_ci#define SPI_CR1_WAIT_EN_SHIFT    15
411bd4fe43Sopenharmony_ci#define SPI_CR1_WAIT_VAL_SHIFT   8
421bd4fe43Sopenharmony_ci#define SPI_CR1_ALT_SHIFT        6
431bd4fe43Sopenharmony_ci#define SPI_CR1_BIG_END_SHIFT    4
441bd4fe43Sopenharmony_ci#define SPI_CR1_MS_SHIFT         2
451bd4fe43Sopenharmony_ci#define SPI_CR1_SSE_SHIFT        1
461bd4fe43Sopenharmony_ci#define SPI_CR1_LBN_SHIFT        0
471bd4fe43Sopenharmony_ci#define SPI_CR1_WAIT_EN          (0x1 << 15)
481bd4fe43Sopenharmony_ci#define SPI_CR1_WAIT_VAL         (0x7f << 8)
491bd4fe43Sopenharmony_ci
501bd4fe43Sopenharmony_ci/* alt mode:spi enable csn is select; spi disable csn is cancel */
511bd4fe43Sopenharmony_ci#define SPI_CR1_ALT              (0x1 << 6)
521bd4fe43Sopenharmony_ci#define SPI_CR1_BIG_END          (0x1 << 4) /* big end or little */
531bd4fe43Sopenharmony_ci#define SPI_CR1_MS               (0x1 << 2) /* cntlr-device mode */
541bd4fe43Sopenharmony_ci#define SPI_CR1_SSE              (0x1 << 1) /* spi enable set */
551bd4fe43Sopenharmony_ci#define SPI_CR1_LBN              (0x1 << 0) /* loopback mode */
561bd4fe43Sopenharmony_ci
571bd4fe43Sopenharmony_ci#define REG_SPI_DR               0x08
581bd4fe43Sopenharmony_ci
591bd4fe43Sopenharmony_ci#define REG_SPI_SR               0x0c
601bd4fe43Sopenharmony_ci#define SPI_SR_BSY_SHIFT         4
611bd4fe43Sopenharmony_ci#define SPI_SR_RFF_SHIFT         3
621bd4fe43Sopenharmony_ci#define SPI_SR_RNE_SHIFT         2
631bd4fe43Sopenharmony_ci#define SPI_SR_TNF_SHIFT         1
641bd4fe43Sopenharmony_ci#define SPI_SR_TFE_SHIFT         0
651bd4fe43Sopenharmony_ci#define SPI_SR_BSY               (0x1 << 4) /* spi busy flag */
661bd4fe43Sopenharmony_ci#define SPI_SR_RFF               (0x1 << 3) /* Whether to send fifo is full */
671bd4fe43Sopenharmony_ci#define SPI_SR_RNE               (0x1 << 2) /* Whether to send fifo is no empty */
681bd4fe43Sopenharmony_ci#define SPI_SR_TNF               (0x1 << 1) /* Whether to send fifo is no full */
691bd4fe43Sopenharmony_ci#define SPI_SR_TFE               (0x1 << 0) /* Whether to send fifo is empty */
701bd4fe43Sopenharmony_ci
711bd4fe43Sopenharmony_ci#define REG_SPI_CPSR             0x10
721bd4fe43Sopenharmony_ci#define SPI_CPSR_CPSDVSR_SHIFT   0
731bd4fe43Sopenharmony_ci#define SPI_CPSR_CPSDVSR         (0xff << 0)  /* even 2~254 */
741bd4fe43Sopenharmony_ci
751bd4fe43Sopenharmony_ci#define REG_SPI_IMSC             0x14
761bd4fe43Sopenharmony_ci#define SPI_ALL_IRQ_DISABLE      0x0
771bd4fe43Sopenharmony_ci#define SPI_ALL_IRQ_ENABLE       0x5
781bd4fe43Sopenharmony_ci#define REG_SPI_RIS              0x18
791bd4fe43Sopenharmony_ci#define REG_SPI_MIS              0x1c
801bd4fe43Sopenharmony_ci#define SPI_RX_INTR_MASK         (0x1 << 2)
811bd4fe43Sopenharmony_ci
821bd4fe43Sopenharmony_ci#define REG_SPI_ICR              0x20
831bd4fe43Sopenharmony_ci#define SPI_ALL_IRQ_CLEAR        0x3
841bd4fe43Sopenharmony_ci
851bd4fe43Sopenharmony_ci#define MAX_WAIT                 5000
861bd4fe43Sopenharmony_ci#define DEFAULT_SPEED            2000000
871bd4fe43Sopenharmony_ci
881bd4fe43Sopenharmony_ci#define SCR_MAX                  255
891bd4fe43Sopenharmony_ci#define SCR_MIN                  0
901bd4fe43Sopenharmony_ci#define CPSDVSR_MAX              254
911bd4fe43Sopenharmony_ci#define CPSDVSR_MIN              2
921bd4fe43Sopenharmony_ci
931bd4fe43Sopenharmony_ci#define SPI_CS_ACTIVE            0
941bd4fe43Sopenharmony_ci#define SPI_CS_INACTIVE          1
951bd4fe43Sopenharmony_ci#define TWO_BYTES                2
961bd4fe43Sopenharmony_ci#define BITS_PER_WORD_MIN        4
971bd4fe43Sopenharmony_ci#define BITS_PER_WORD_EIGHT      8
981bd4fe43Sopenharmony_ci#define BITS_PER_WORD_MAX        16
991bd4fe43Sopenharmony_ci#define HDF_IO_DEVICE_ADDR       IO_DEVICE_ADDR
1001bd4fe43Sopenharmony_ci
1011bd4fe43Sopenharmony_ci#define SPI_DMA_CR               0x24
1021bd4fe43Sopenharmony_ci#define TX_DMA_EN_SHIFT          1
1031bd4fe43Sopenharmony_ci#define RX_DMA_EN_SHIFT          0
1041bd4fe43Sopenharmony_ci
1051bd4fe43Sopenharmony_ci#define SPI_TX_FIFO_CR           0x28
1061bd4fe43Sopenharmony_ci#define TX_INT_SIZE_SHIFT        3
1071bd4fe43Sopenharmony_ci#define TX_DMA_BR_SIZE_SHIFT     0
1081bd4fe43Sopenharmony_ci#define TX_DMA_BR_SIZE_MASK      0x7
1091bd4fe43Sopenharmony_ci
1101bd4fe43Sopenharmony_ci#define SPI_RX_FIFO_CR           0x2C
1111bd4fe43Sopenharmony_ci#define RX_INT_SIZE_SHIFT        3
1121bd4fe43Sopenharmony_ci#define RX_INT_SIZE_MASK         0x7
1131bd4fe43Sopenharmony_ci#define RX_DMA_BR_SIZE_SHIFT     0
1141bd4fe43Sopenharmony_ci#define RX_DMA_BR_SIZE_MASK      0x7
1151bd4fe43Sopenharmony_ci
1161bd4fe43Sopenharmony_ci#ifdef __cplusplus
1171bd4fe43Sopenharmony_ci#if __cplusplus
1181bd4fe43Sopenharmony_ci}
1191bd4fe43Sopenharmony_ci#endif /* __cplusplus */
1201bd4fe43Sopenharmony_ci#endif /* __cplusplus */
1211bd4fe43Sopenharmony_ci#endif /* SPI_HI35XX_H */
122