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