Blame view

arch/blackfin/include/asm/cplb.h 4.69 KB
3bebca2d2   Robin Getz   Blackfin arch: to...
1
  /*
96f1050d3   Robin Getz   Blackfin: mass cl...
2
   * Copyright 2004-2009 Analog Devices Inc.
1394f0322   Bryan Wu   blackfin architec...
3
   *
96f1050d3   Robin Getz   Blackfin: mass cl...
4
   * Licensed under the GPL-2 or later.
3bebca2d2   Robin Getz   Blackfin arch: to...
5
   */
1394f0322   Bryan Wu   blackfin architec...
6
7
8
  
  #ifndef _CPLB_H
  #define _CPLB_H
639f65714   Bryan Wu   Blackfin arch: mo...
9
  #include <mach/anomaly.h>
1394f0322   Bryan Wu   blackfin architec...
10

3bebca2d2   Robin Getz   Blackfin arch: to...
11
12
13
14
  #define SDRAM_IGENERIC    (CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | CPLB_PORTPRIO)
  #define SDRAM_IKERNEL     (SDRAM_IGENERIC | CPLB_LOCK)
  #define L1_IMEMORY        (               CPLB_USER_RD | CPLB_VALID | CPLB_LOCK)
  #define SDRAM_INON_CHBL   (               CPLB_USER_RD | CPLB_VALID)
3bebca2d2   Robin Getz   Blackfin arch: to...
15
16
17
18
19
20
21
  #if ANOMALY_05000158
  #define ANOMALY_05000158_WORKAROUND             0x200
  #else
  #define ANOMALY_05000158_WORKAROUND             0x0
  #endif
  
  #define CPLB_COMMON	(CPLB_DIRTY | CPLB_SUPV_WR | CPLB_USER_WR | CPLB_USER_RD | CPLB_VALID | ANOMALY_05000158_WORKAROUND)
41ba653f2   Jie Zhang   Blackfin: decoupl...
22
  #ifdef CONFIG_BFIN_EXTMEM_WRITEBACK
3bebca2d2   Robin Getz   Blackfin arch: to...
23
  #define SDRAM_DGENERIC   (CPLB_L1_CHBL | CPLB_COMMON)
41ba653f2   Jie Zhang   Blackfin: decoupl...
24
  #elif defined(CONFIG_BFIN_EXTMEM_WRITETHROUGH)
3bebca2d2   Robin Getz   Blackfin arch: to...
25
  #define SDRAM_DGENERIC   (CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW  | CPLB_COMMON)
41ba653f2   Jie Zhang   Blackfin: decoupl...
26
27
  #else
  #define SDRAM_DGENERIC   (CPLB_COMMON)
3bebca2d2   Robin Getz   Blackfin arch: to...
28
  #endif
5ba766752   Graf Yang   Blackfin: work ar...
29
30
31
  #define SDRAM_DNON_CHBL  (CPLB_COMMON)
  #define SDRAM_EBIU       (CPLB_COMMON)
  #define SDRAM_OOPS       (CPLB_VALID | ANOMALY_05000158_WORKAROUND | CPLB_LOCK | CPLB_DIRTY)
3bebca2d2   Robin Getz   Blackfin arch: to...
32
  #define L1_DMEMORY       (CPLB_LOCK | CPLB_COMMON)
b8a989893   Graf Yang   Blackfin arch: SM...
33
34
  
  #ifdef CONFIG_SMP
5ba766752   Graf Yang   Blackfin: work ar...
35
  #define L2_ATTR          (INITIAL_T | I_CPLB | D_CPLB)
41ba653f2   Jie Zhang   Blackfin: decoupl...
36
37
  #define L2_IMEMORY       (CPLB_COMMON | PAGE_SIZE_1MB)
  #define L2_DMEMORY       (CPLB_LOCK | CPLB_COMMON | PAGE_SIZE_1MB)
b8a989893   Graf Yang   Blackfin arch: SM...
38
39
  
  #else
5ba766752   Graf Yang   Blackfin: work ar...
40
  #define L2_ATTR          (INITIAL_T | SWITCH_T | I_CPLB | D_CPLB)
41ba653f2   Jie Zhang   Blackfin: decoupl...
41
42
43
44
45
  # if defined(CONFIG_BFIN_L2_ICACHEABLE)
  # define L2_IMEMORY      (CPLB_L1_CHBL | CPLB_USER_RD | CPLB_VALID | PAGE_SIZE_1MB)
  # else
  # define L2_IMEMORY      (               CPLB_USER_RD | CPLB_VALID | PAGE_SIZE_1MB)
  # endif
5ba766752   Graf Yang   Blackfin: work ar...
46

41ba653f2   Jie Zhang   Blackfin: decoupl...
47
48
49
50
  # if defined(CONFIG_BFIN_L2_WRITEBACK)
  # define L2_DMEMORY      (CPLB_L1_CHBL | CPLB_COMMON | PAGE_SIZE_1MB)
  # elif defined(CONFIG_BFIN_L2_WRITETHROUGH)
  # define L2_DMEMORY      (CPLB_L1_CHBL | CPLB_WT | CPLB_L1_AOW | CPLB_COMMON | PAGE_SIZE_1MB)
5ba766752   Graf Yang   Blackfin: work ar...
51
  # else
41ba653f2   Jie Zhang   Blackfin: decoupl...
52
  # define L2_DMEMORY      (CPLB_COMMON | PAGE_SIZE_1MB)
5ba766752   Graf Yang   Blackfin: work ar...
53
  # endif
b8a989893   Graf Yang   Blackfin arch: SM...
54
  #endif /* CONFIG_SMP */
3bebca2d2   Robin Getz   Blackfin arch: to...
55
56
57
58
  #define SIZE_1K 0x00000400      /* 1K */
  #define SIZE_4K 0x00001000      /* 4K */
  #define SIZE_1M 0x00100000      /* 1M */
  #define SIZE_4M 0x00400000      /* 4M */
b97b8a998   Bernd Schmidt   [Blackfin] arch: ...
59
  #define MAX_CPLBS 16
07bdda026   Michael Hennerich   Blackfin arch: bu...
60

1394f0322   Bryan Wu   blackfin architec...
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  #define CPLB_ENABLE_ICACHE_P	0
  #define CPLB_ENABLE_DCACHE_P	1
  #define CPLB_ENABLE_DCACHE2_P	2
  #define CPLB_ENABLE_CPLBS_P	3	/* Deprecated! */
  #define CPLB_ENABLE_ICPLBS_P	4
  #define CPLB_ENABLE_DCPLBS_P	5
  
  #define CPLB_ENABLE_ICACHE	(1<<CPLB_ENABLE_ICACHE_P)
  #define CPLB_ENABLE_DCACHE	(1<<CPLB_ENABLE_DCACHE_P)
  #define CPLB_ENABLE_DCACHE2	(1<<CPLB_ENABLE_DCACHE2_P)
  #define CPLB_ENABLE_CPLBS	(1<<CPLB_ENABLE_CPLBS_P)
  #define CPLB_ENABLE_ICPLBS	(1<<CPLB_ENABLE_ICPLBS_P)
  #define CPLB_ENABLE_DCPLBS	(1<<CPLB_ENABLE_DCPLBS_P)
  #define CPLB_ENABLE_ANY_CPLBS	CPLB_ENABLE_CPLBS | \
  				CPLB_ENABLE_ICPLBS | \
  				CPLB_ENABLE_DCPLBS
  
  #define CPLB_RELOADED		0x0000
  #define CPLB_NO_UNLOCKED	0x0001
  #define CPLB_NO_ADDR_MATCH	0x0002
  #define CPLB_PROT_VIOL		0x0003
  #define CPLB_UNKNOWN_ERR	0x0004
  
  #define CPLB_DEF_CACHE		CPLB_L1_CHBL | CPLB_WT
  #define CPLB_CACHE_ENABLED	CPLB_L1_CHBL | CPLB_DIRTY
1394f0322   Bryan Wu   blackfin architec...
86
87
88
89
90
91
  #define CPLB_I_PAGE_MGMT	CPLB_LOCK | CPLB_VALID
  #define CPLB_D_PAGE_MGMT	CPLB_LOCK | CPLB_ALL_ACCESS | CPLB_VALID
  #define CPLB_DNOCACHE		CPLB_ALL_ACCESS | CPLB_VALID
  #define CPLB_DDOCACHE		CPLB_DNOCACHE | CPLB_DEF_CACHE
  #define CPLB_INOCACHE   	CPLB_USER_RD | CPLB_VALID
  #define CPLB_IDOCACHE   	CPLB_INOCACHE | CPLB_L1_CHBL
dbdf20db5   Bernd Schmidt   Blackfin arch: Fa...
92
93
94
  #define FAULT_RW        (1 << 16)
  #define FAULT_USERSUPV  (1 << 17)
  #define FAULT_CPLBBITS  0x0000ffff
eb7bd9c46   Yi Li   Blackfin: cleanup...
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
  #ifndef __ASSEMBLY__
  
  static inline void _disable_cplb(u32 mmr, u32 mask)
  {
  	u32 ctrl = bfin_read32(mmr) & ~mask;
  	/* CSYNC to ensure load store ordering */
  	__builtin_bfin_csync();
  	bfin_write32(mmr, ctrl);
  	__builtin_bfin_ssync();
  }
  static inline void disable_cplb(u32 mmr, u32 mask)
  {
  	u32 ctrl = bfin_read32(mmr) & ~mask;
  	CSYNC();
  	bfin_write32(mmr, ctrl);
  	SSYNC();
  }
  #define _disable_dcplb() _disable_cplb(DMEM_CONTROL, ENDCPLB)
  #define  disable_dcplb()  disable_cplb(DMEM_CONTROL, ENDCPLB)
  #define _disable_icplb() _disable_cplb(IMEM_CONTROL, ENICPLB)
  #define  disable_icplb()  disable_cplb(IMEM_CONTROL, ENICPLB)
  
  static inline void _enable_cplb(u32 mmr, u32 mask)
  {
  	u32 ctrl = bfin_read32(mmr) | mask;
  	/* CSYNC to ensure load store ordering */
  	__builtin_bfin_csync();
  	bfin_write32(mmr, ctrl);
  	__builtin_bfin_ssync();
  }
  static inline void enable_cplb(u32 mmr, u32 mask)
  {
  	u32 ctrl = bfin_read32(mmr) | mask;
  	CSYNC();
  	bfin_write32(mmr, ctrl);
  	SSYNC();
  }
  #define _enable_dcplb()  _enable_cplb(DMEM_CONTROL, ENDCPLB)
  #define  enable_dcplb()   enable_cplb(DMEM_CONTROL, ENDCPLB)
  #define _enable_icplb()  _enable_cplb(IMEM_CONTROL, ENICPLB)
  #define  enable_icplb()   enable_cplb(IMEM_CONTROL, ENICPLB)
  
  #endif		/* __ASSEMBLY__ */
  
  #endif		/* _CPLB_H */