xref: /OK3568_Linux_fs/kernel/arch/arm/mach-ep93xx/ts72xx.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * arch/arm/mach-ep93xx/include/mach/ts72xx.h
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun /*
7*4882a593Smuzhiyun  * TS72xx memory map:
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * virt		phys		size
10*4882a593Smuzhiyun  * febff000	22000000	4K	model number register (bits 0-2)
11*4882a593Smuzhiyun  * febfe000	22400000	4K	options register
12*4882a593Smuzhiyun  * febfd000	22800000	4K	options register #2
13*4882a593Smuzhiyun  * febfc000     23400000        4K      CPLD version register
14*4882a593Smuzhiyun  */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #ifndef __TS72XX_H_
17*4882a593Smuzhiyun #define __TS72XX_H_
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define TS72XX_MODEL_PHYS_BASE		0x22000000
20*4882a593Smuzhiyun #define TS72XX_MODEL_VIRT_BASE		IOMEM(0xfebff000)
21*4882a593Smuzhiyun #define TS72XX_MODEL_SIZE		0x00001000
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun #define TS72XX_MODEL_TS7200		0x00
24*4882a593Smuzhiyun #define TS72XX_MODEL_TS7250		0x01
25*4882a593Smuzhiyun #define TS72XX_MODEL_TS7260		0x02
26*4882a593Smuzhiyun #define TS72XX_MODEL_TS7300		0x03
27*4882a593Smuzhiyun #define TS72XX_MODEL_TS7400		0x04
28*4882a593Smuzhiyun #define TS72XX_MODEL_MASK		0x07
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun #define TS72XX_OPTIONS_PHYS_BASE	0x22400000
32*4882a593Smuzhiyun #define TS72XX_OPTIONS_VIRT_BASE	IOMEM(0xfebfe000)
33*4882a593Smuzhiyun #define TS72XX_OPTIONS_SIZE		0x00001000
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun #define TS72XX_OPTIONS_COM2_RS485	0x02
36*4882a593Smuzhiyun #define TS72XX_OPTIONS_MAX197		0x01
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun #define TS72XX_OPTIONS2_PHYS_BASE	0x22800000
40*4882a593Smuzhiyun #define TS72XX_OPTIONS2_VIRT_BASE	IOMEM(0xfebfd000)
41*4882a593Smuzhiyun #define TS72XX_OPTIONS2_SIZE		0x00001000
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #define TS72XX_OPTIONS2_TS9420		0x04
44*4882a593Smuzhiyun #define TS72XX_OPTIONS2_TS9420_BOOT	0x02
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun #define TS72XX_CPLDVER_PHYS_BASE	0x23400000
47*4882a593Smuzhiyun #define TS72XX_CPLDVER_VIRT_BASE	IOMEM(0xfebfc000)
48*4882a593Smuzhiyun #define TS72XX_CPLDVER_SIZE		0x00001000
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun #ifndef __ASSEMBLY__
51*4882a593Smuzhiyun 
ts72xx_model(void)52*4882a593Smuzhiyun static inline int ts72xx_model(void)
53*4882a593Smuzhiyun {
54*4882a593Smuzhiyun 	return __raw_readb(TS72XX_MODEL_VIRT_BASE) & TS72XX_MODEL_MASK;
55*4882a593Smuzhiyun }
56*4882a593Smuzhiyun 
board_is_ts7200(void)57*4882a593Smuzhiyun static inline int board_is_ts7200(void)
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun 	return ts72xx_model() == TS72XX_MODEL_TS7200;
60*4882a593Smuzhiyun }
61*4882a593Smuzhiyun 
board_is_ts7250(void)62*4882a593Smuzhiyun static inline int board_is_ts7250(void)
63*4882a593Smuzhiyun {
64*4882a593Smuzhiyun 	return ts72xx_model() == TS72XX_MODEL_TS7250;
65*4882a593Smuzhiyun }
66*4882a593Smuzhiyun 
board_is_ts7260(void)67*4882a593Smuzhiyun static inline int board_is_ts7260(void)
68*4882a593Smuzhiyun {
69*4882a593Smuzhiyun 	return ts72xx_model() == TS72XX_MODEL_TS7260;
70*4882a593Smuzhiyun }
71*4882a593Smuzhiyun 
board_is_ts7300(void)72*4882a593Smuzhiyun static inline int board_is_ts7300(void)
73*4882a593Smuzhiyun {
74*4882a593Smuzhiyun 	return ts72xx_model()  == TS72XX_MODEL_TS7300;
75*4882a593Smuzhiyun }
76*4882a593Smuzhiyun 
board_is_ts7400(void)77*4882a593Smuzhiyun static inline int board_is_ts7400(void)
78*4882a593Smuzhiyun {
79*4882a593Smuzhiyun 	return ts72xx_model() == TS72XX_MODEL_TS7400;
80*4882a593Smuzhiyun }
81*4882a593Smuzhiyun 
is_max197_installed(void)82*4882a593Smuzhiyun static inline int is_max197_installed(void)
83*4882a593Smuzhiyun {
84*4882a593Smuzhiyun 	return !!(__raw_readb(TS72XX_OPTIONS_VIRT_BASE) &
85*4882a593Smuzhiyun 					TS72XX_OPTIONS_MAX197);
86*4882a593Smuzhiyun }
87*4882a593Smuzhiyun 
is_ts9420_installed(void)88*4882a593Smuzhiyun static inline int is_ts9420_installed(void)
89*4882a593Smuzhiyun {
90*4882a593Smuzhiyun 	return !!(__raw_readb(TS72XX_OPTIONS2_VIRT_BASE) &
91*4882a593Smuzhiyun 					TS72XX_OPTIONS2_TS9420);
92*4882a593Smuzhiyun }
93*4882a593Smuzhiyun #endif
94*4882a593Smuzhiyun #endif /* __TS72XX_H_ */
95