blob: 76c2e84893cc61bf0e780f57e23f476bedd03162 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Paul Mundtefd590d2010-01-20 15:08:36 +09002#ifndef __MACH_SDK7786_FPGA_H
3#define __MACH_SDK7786_FPGA_H
4
5#include <linux/io.h>
6#include <linux/types.h>
7#include <linux/bitops.h>
8
9#define SRSTR 0x000
Paul Mundtd9116d02010-01-20 18:25:19 +090010#define SRSTR_MAGIC 0x1971 /* Fixed magical read value */
11
Paul Mundtefd590d2010-01-20 15:08:36 +090012#define INTASR 0x010
13#define INTAMR 0x020
14#define MODSWR 0x030
15#define INTTESTR 0x040
16#define SYSSR 0x050
17#define NRGPR 0x060
Paul Mundt76496f82010-12-17 18:58:04 +090018
Paul Mundtefd590d2010-01-20 15:08:36 +090019#define NMISR 0x070
Paul Mundt76496f82010-12-17 18:58:04 +090020#define NMISR_MAN_NMI BIT(0)
21#define NMISR_AUX_NMI BIT(1)
22#define NMISR_MASK (NMISR_MAN_NMI | NMISR_AUX_NMI)
Paul Mundtefd590d2010-01-20 15:08:36 +090023
24#define NMIMR 0x080
25#define NMIMR_MAN_NMIM BIT(0) /* Manual NMI mask */
26#define NMIMR_AUX_NMIM BIT(1) /* Auxiliary NMI mask */
Paul Mundt76496f82010-12-17 18:58:04 +090027#define NMIMR_MASK (NMIMR_MAN_NMIM | NMIMR_AUX_NMIM)
Paul Mundtefd590d2010-01-20 15:08:36 +090028
29#define INTBSR 0x090
30#define INTBMR 0x0a0
31#define USRLEDR 0x0b0
32#define MAPSWR 0x0c0
33#define FPGAVR 0x0d0
34#define FPGADR 0x0e0
35#define PCBRR 0x0f0
36#define RSR 0x100
37#define EXTASR 0x110
38#define SPCAR 0x120
39#define INTMSR 0x130
Paul Mundt61a467662010-10-14 07:37:01 +090040
Paul Mundtefd590d2010-01-20 15:08:36 +090041#define PCIECR 0x140
Paul Mundt61a467662010-10-14 07:37:01 +090042#define PCIECR_PCIEMUX1 BIT(15)
43#define PCIECR_PCIEMUX0 BIT(14)
44#define PCIECR_PRST4 BIT(12) /* slot 4 card present */
45#define PCIECR_PRST3 BIT(11) /* slot 3 card present */
46#define PCIECR_PRST2 BIT(10) /* slot 2 card present */
47#define PCIECR_PRST1 BIT(9) /* slot 1 card present */
Paul Mundtb6b77b22010-10-14 08:44:55 +090048#define PCIECR_CLKEN BIT(4) /* oscillator enable */
Paul Mundt61a467662010-10-14 07:37:01 +090049
Paul Mundtefd590d2010-01-20 15:08:36 +090050#define FAER 0x150
51#define USRGPIR 0x160
Paul Mundtd8d6b902010-10-15 02:13:04 +090052
Paul Mundtefd590d2010-01-20 15:08:36 +090053/* 0x170 reserved */
Paul Mundtd8d6b902010-10-15 02:13:04 +090054
55#define LCLASR 0x180
56#define LCLASR_FRAMEN BIT(15)
57
58#define LCLASR_FPGA_SEL_SHIFT 12
59#define LCLASR_NAND_SEL_SHIFT 8
60#define LCLASR_NORB_SEL_SHIFT 4
61#define LCLASR_NORA_SEL_SHIFT 0
62
63#define LCLASR_AREA_MASK 0x7
64
65#define LCLASR_FPGA_SEL_MASK (LCLASR_AREA_MASK << LCLASR_FPGA_SEL_SHIFT)
66#define LCLASR_NAND_SEL_MASK (LCLASR_AREA_MASK << LCLASR_NAND_SEL_SHIFT)
67#define LCLASR_NORB_SEL_MASK (LCLASR_AREA_MASK << LCLASR_NORB_SEL_SHIFT)
68#define LCLASR_NORA_SEL_MASK (LCLASR_AREA_MASK << LCLASR_NORA_SEL_SHIFT)
Paul Mundtefd590d2010-01-20 15:08:36 +090069
70#define SBCR 0x190
71#define SCBR_I2CMEN BIT(0) /* FPGA I2C master enable */
72#define SCBR_I2CCEN BIT(1) /* CPU I2C master enable */
73
74#define PWRCR 0x1a0
Paul Mundtd9c94442010-04-19 16:27:47 +090075#define PWRCR_SCISEL0 BIT(0)
76#define PWRCR_SCISEL1 BIT(1)
77#define PWRCR_SCIEN BIT(2) /* Serial port enable */
78#define PWRCR_PDWNACK BIT(5) /* Power down acknowledge */
79#define PWRCR_PDWNREQ BIT(7) /* Power down request */
80#define PWRCR_INT2 BIT(11) /* INT2 connection to power manager */
81#define PWRCR_BUPINIT BIT(13) /* DDR backup initialize */
82#define PWRCR_BKPRST BIT(15) /* Backup power reset */
83
Paul Mundtefd590d2010-01-20 15:08:36 +090084#define SPCBR 0x1b0
85#define SPICR 0x1c0
86#define SPIDR 0x1d0
87#define I2CCR 0x1e0
88#define I2CDR 0x1f0
89#define FPGACR 0x200
90#define IASELR1 0x210
91#define IASELR2 0x220
92#define IASELR3 0x230
93#define IASELR4 0x240
94#define IASELR5 0x250
95#define IASELR6 0x260
96#define IASELR7 0x270
97#define IASELR8 0x280
98#define IASELR9 0x290
99#define IASELR10 0x2a0
100#define IASELR11 0x2b0
101#define IASELR12 0x2c0
102#define IASELR13 0x2d0
103#define IASELR14 0x2e0
104#define IASELR15 0x2f0
105/* 0x300 reserved */
106#define IBSELR1 0x310
107#define IBSELR2 0x320
108#define IBSELR3 0x330
109#define IBSELR4 0x340
110#define IBSELR5 0x350
111#define IBSELR6 0x360
112#define IBSELR7 0x370
113#define IBSELR8 0x380
114#define IBSELR9 0x390
115#define IBSELR10 0x3a0
116#define IBSELR11 0x3b0
117#define IBSELR12 0x3c0
118#define IBSELR13 0x3d0
119#define IBSELR14 0x3e0
120#define IBSELR15 0x3f0
121#define USRACR 0x400
122#define BEEPR 0x410
123#define USRLCDR 0x420
124#define SMBCR 0x430
125#define SMBDR 0x440
126#define USBCR 0x450
127#define AMSR 0x460
128#define ACCR 0x470
129#define SDIFCR 0x480
130
131/* arch/sh/boards/mach-sdk7786/fpga.c */
132extern void __iomem *sdk7786_fpga_base;
133extern void sdk7786_fpga_init(void);
134
Paul Mundt76496f82010-12-17 18:58:04 +0900135/* arch/sh/boards/mach-sdk7786/nmi.c */
136extern void sdk7786_nmi_init(void);
137
Paul Mundtefd590d2010-01-20 15:08:36 +0900138#define SDK7786_FPGA_REGADDR(reg) (sdk7786_fpga_base + (reg))
139
140/*
141 * A convenience wrapper from register offset to internal I2C address,
142 * when the FPGA is in I2C slave mode.
143 */
144#define SDK7786_FPGA_I2CADDR(reg) ((reg) >> 3)
145
146static inline u16 fpga_read_reg(unsigned int reg)
147{
148 return ioread16(sdk7786_fpga_base + reg);
149}
150
151static inline void fpga_write_reg(u16 val, unsigned int reg)
152{
153 iowrite16(val, sdk7786_fpga_base + reg);
154}
155
156#endif /* __MACH_SDK7786_FPGA_H */