/* * Driver for Broadcom BRCMSTB, NSP, NS2, Cygnus SPI Controllers * * Copyright 2016 Broadcom * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation (the "GPL"). * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License version 2 (GPLv2) for more details. * * You should have received a copy of the GNU General Public License * version 2 (GPLv2) along with this source code. */#include<linux/clk.h>#include<linux/delay.h>#include<linux/device.h>#include<linux/init.h>#include<linux/interrupt.h>#include<linux/io.h>#include<linux/ioport.h>#include<linux/kernel.h>#include<linux/module.h>#include<linux/of.h>#include<linux/of_irq.h>#include<linux/platform_device.h>#include<linux/slab.h>#include<linux/spi/spi.h>#include<linux/sysfs.h>#include<linux/types.h>#include"spi-bcm-qspi.h"#define DRIVER_NAME "bcm_qspi"/* BSPI register offsets */#define BSPI_REVISION_ID 0x000#define BSPI_SCRATCH 0x004#define BSPI_MAST_N_BOOT_CTRL 0x008#define BSPI_BUSY_STATUS 0x00c#define BSPI_INTR_STATUS 0x010#define BSPI_B0_STATUS 0x014#define BSPI_B0_CTRL 0x018#define BSPI_B1_STATUS 0x01c#define BSPI_B1_CTRL 0x020#define BSPI_STRAP_OVERRIDE_CTRL 0x024#define BSPI_FLEX_MODE_ENABLE 0x028#define BSPI_BITS_PER_CYCLE 0x02c#define BSPI_BITS_PER_PHASE 0x030#define BSPI_CMD_AND_MODE_BYTE 0x034#define BSPI_BSPI_FLASH_UPPER_ADDR_BYTE 0x038#define BSPI_BSPI_XOR_VALUE 0x03c#define BSPI_BSPI_XOR_ENABLE 0x040#define BSPI_BSPI_PIO_MODE_ENABLE 0x044#define BSPI_BSPI_PIO_IODIR 0x048#define BSPI_BSPI_PIO_DATA 0x04c/* RAF register offsets */#define BSPI_RAF_START_ADDR 0x100#define BSPI_RAF_NUM_WORDS 0x104#define BSPI_RAF_CTRL 0x108#define BSPI_RAF_FULLNESS 0x10c#define BSPI_RAF_WATERMARK 0x110#define BSPI_RAF_STATUS 0x114#define BSPI_RAF_READ_DATA 0x118#define BSPI_RAF_WORD_CNT 0x11c#define BSPI_RAF_CURR_ADDR 0x120/* Override mode masks */#define BSPI_STRAP_OVERRIDE_CTRL_OVERRIDE BIT(0)#define BSPI_STRAP_OVERRIDE_CTRL_DATA_DUAL BIT(1)#define BSPI_STRAP_OVERRIDE_CTRL_ADDR_4BYTE BIT(2)#define BSPI_STRAP_OVERRIDE_CTRL_DATA_QUAD BIT(3)#define BSPI_STRAP_OVERRIDE_CTRL_ENDAIN_MODE BIT(4)#define BSPI_ADDRLEN_3BYTES 3#define BSPI_ADDRLEN_4BYTES 4#define BSPI_RAF_STATUS_FIFO_EMPTY_MASK BIT(1)#define BSPI_RAF_CTRL_START_MASK BIT(0)#define BSPI_RAF_CTRL_CLEAR_MASK BIT(1)#define BSPI_BPP_MODE_SELECT_MASK BIT(8)#define BSPI_BPP_ADDR_SELECT_MASK BIT(16)#define BSPI_READ_LENGTH 512/* MSPI register offsets */#define MSPI_SPCR0_LSB 0x000#define MSPI_SPCR0_MSB 0x004#define MSPI_SPCR1_LSB 0x008#define MSPI_SPCR1_MSB 0x00c#define MSPI_NEWQP 0x010#define MSPI_ENDQP 0x014#define MSPI_SPCR2 0x018#define MSPI_MSPI_STATUS 0x020#define MSPI_CPTQP 0x024#define MSPI_SPCR3 0x028#define MSPI_TXRAM 0x040#define MSPI_RXRAM 0x0c0#define MSPI_CDRAM 0x140#define MSPI_WRITE_LOCK 0x180#define MSPI_MASTER_BIT BIT(7)#define MSPI