Blame view

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