brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · 3d7c359 Raw
105 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright 2016 Broadcom4 */5 6#ifndef __SPI_BCM_QSPI_H__7#define __SPI_BCM_QSPI_H__8 9#include <linux/types.h>10#include <linux/io.h>11 12/* BSPI interrupt masks */13#define INTR_BSPI_LR_OVERREAD_MASK		BIT(4)14#define INTR_BSPI_LR_SESSION_DONE_MASK		BIT(3)15#define INTR_BSPI_LR_IMPATIENT_MASK		BIT(2)16#define INTR_BSPI_LR_SESSION_ABORTED_MASK	BIT(1)17#define INTR_BSPI_LR_FULLNESS_REACHED_MASK	BIT(0)18 19#define BSPI_LR_INTERRUPTS_DATA		       \20	(INTR_BSPI_LR_SESSION_DONE_MASK |	       \21	 INTR_BSPI_LR_FULLNESS_REACHED_MASK)22 23#define BSPI_LR_INTERRUPTS_ERROR               \24	(INTR_BSPI_LR_OVERREAD_MASK |	       \25	 INTR_BSPI_LR_IMPATIENT_MASK |	       \26	 INTR_BSPI_LR_SESSION_ABORTED_MASK)27 28#define BSPI_LR_INTERRUPTS_ALL                 \29	(BSPI_LR_INTERRUPTS_ERROR |	       \30	 BSPI_LR_INTERRUPTS_DATA)31 32/* MSPI Interrupt masks */33#define INTR_MSPI_HALTED_MASK			BIT(6)34#define INTR_MSPI_DONE_MASK			BIT(5)35 36#define MSPI_INTERRUPTS_ALL		       \37	(INTR_MSPI_DONE_MASK |		       \38	 INTR_MSPI_HALTED_MASK)39 40#define QSPI_INTERRUPTS_ALL                    \41	(MSPI_INTERRUPTS_ALL |		       \42	 BSPI_LR_INTERRUPTS_ALL)43 44struct platform_device;45struct dev_pm_ops;46 47enum {48	MSPI_DONE = 0x1,49	BSPI_DONE = 0x2,50	BSPI_ERR = 0x4,51	MSPI_BSPI_DONE = 0x752};53 54struct bcm_qspi_soc_intc {55	void (*bcm_qspi_int_ack)(struct bcm_qspi_soc_intc *soc_intc, int type);56	void (*bcm_qspi_int_set)(struct bcm_qspi_soc_intc *soc_intc, int type,57				 bool en);58	u32 (*bcm_qspi_get_int_status)(struct bcm_qspi_soc_intc *soc_intc);59};60 61/* Read controller register*/62static inline u32 bcm_qspi_readl(bool be, void __iomem *addr)63{64	if (be)65		return ioread32be(addr);66	else67		return readl_relaxed(addr);68}69 70/* Write controller register*/71static inline void bcm_qspi_writel(bool be,72				   unsigned int data, void __iomem *addr)73{74	if (be)75		iowrite32be(data, addr);76	else77		writel_relaxed(data, addr);78}79 80static inline u32 get_qspi_mask(int type)81{82	switch (type) {83	case MSPI_DONE:84		return INTR_MSPI_DONE_MASK;85	case BSPI_DONE:86		return BSPI_LR_INTERRUPTS_ALL;87	case MSPI_BSPI_DONE:88		return QSPI_INTERRUPTS_ALL;89	case BSPI_ERR:90		return BSPI_LR_INTERRUPTS_ERROR;91	}92 93	return 0;94}95 96/* The common driver functions to be called by the SoC platform driver */97int bcm_qspi_probe(struct platform_device *pdev,98		   struct bcm_qspi_soc_intc *soc_intc);99void bcm_qspi_remove(struct platform_device *pdev);100 101/* pm_ops used by the SoC platform driver called on PM suspend/resume */102extern const struct dev_pm_ops bcm_qspi_pm_ops;103 104#endif /* __SPI_BCM_QSPI_H__ */105