]>
Commit | Line | Data |
---|---|---|
418ec858 KG |
1 | /* |
2 | * Copyright 2008-2009 Freescale Semiconductor, Inc. | |
3 | * | |
4 | * This program is free software; you can redistribute it and/or | |
5 | * modify it under the terms of the GNU General Public License | |
6 | * Version 2 as published by the Free Software Foundation. | |
7 | */ | |
8 | ||
83d40dfd KG |
9 | #ifndef _FSL_LAW_H_ |
10 | #define _FSL_LAW_H_ | |
11 | ||
12 | #include <asm/io.h> | |
13 | ||
418ec858 KG |
14 | #define LAW_EN 0x80000000 |
15 | ||
83d40dfd KG |
16 | #define SET_LAW_ENTRY(idx, a, sz, trgt) \ |
17 | { .index = idx, .addr = a, .size = sz, .trgt_id = trgt } | |
18 | ||
f060054d KG |
19 | #define SET_LAW(a, sz, trgt) \ |
20 | { .index = -1, .addr = a, .size = sz, .trgt_id = trgt } | |
21 | ||
83d40dfd KG |
22 | enum law_size { |
23 | LAW_SIZE_4K = 0xb, | |
24 | LAW_SIZE_8K, | |
25 | LAW_SIZE_16K, | |
26 | LAW_SIZE_32K, | |
27 | LAW_SIZE_64K, | |
28 | LAW_SIZE_128K, | |
29 | LAW_SIZE_256K, | |
30 | LAW_SIZE_512K, | |
31 | LAW_SIZE_1M, | |
32 | LAW_SIZE_2M, | |
33 | LAW_SIZE_4M, | |
34 | LAW_SIZE_8M, | |
35 | LAW_SIZE_16M, | |
36 | LAW_SIZE_32M, | |
37 | LAW_SIZE_64M, | |
38 | LAW_SIZE_128M, | |
39 | LAW_SIZE_256M, | |
40 | LAW_SIZE_512M, | |
41 | LAW_SIZE_1G, | |
42 | LAW_SIZE_2G, | |
43 | LAW_SIZE_4G, | |
44 | LAW_SIZE_8G, | |
45 | LAW_SIZE_16G, | |
46 | LAW_SIZE_32G, | |
47 | }; | |
48 | ||
de3cbd78 LY |
49 | #define law_size_bits(sz) (__ilog2_u64(sz) - 1) |
50 | ||
418ec858 KG |
51 | #ifdef CONFIG_FSL_CORENET |
52 | enum law_trgt_if { | |
53 | LAW_TRGT_IF_PCIE_1 = 0x00, | |
54 | LAW_TRGT_IF_PCIE_2 = 0x01, | |
55 | LAW_TRGT_IF_PCIE_3 = 0x02, | |
56 | LAW_TRGT_IF_RIO_1 = 0x08, | |
57 | LAW_TRGT_IF_RIO_2 = 0x09, | |
58 | ||
59 | LAW_TRGT_IF_DDR_1 = 0x10, | |
60 | LAW_TRGT_IF_DDR_2 = 0x11, /* 2nd controller */ | |
61 | LAW_TRGT_IF_DDR_INTRLV = 0x14, | |
62 | ||
63 | LAW_TRGT_IF_BMAN = 0x18, | |
64 | LAW_TRGT_IF_DCSR = 0x1d, | |
65 | LAW_TRGT_IF_LBC = 0x1f, | |
66 | LAW_TRGT_IF_QMAN = 0x3c, | |
67 | }; | |
68 | #define LAW_TRGT_IF_DDR LAW_TRGT_IF_DDR_1 | |
69 | #else | |
83d40dfd KG |
70 | enum law_trgt_if { |
71 | LAW_TRGT_IF_PCI = 0x00, | |
72 | LAW_TRGT_IF_PCI_2 = 0x01, | |
73 | #ifndef CONFIG_MPC8641 | |
74 | LAW_TRGT_IF_PCIE_1 = 0x02, | |
75 | #endif | |
8d949aff | 76 | #if !defined(CONFIG_MPC8572) && !defined(CONFIG_P2020) |
83d40dfd KG |
77 | LAW_TRGT_IF_PCIE_3 = 0x03, |
78 | #endif | |
79 | LAW_TRGT_IF_LBC = 0x04, | |
80 | LAW_TRGT_IF_CCSR = 0x08, | |
81 | LAW_TRGT_IF_DDR_INTRLV = 0x0b, | |
82 | LAW_TRGT_IF_RIO = 0x0c, | |
de3cbd78 | 83 | LAW_TRGT_IF_RIO_2 = 0x0d, |
83d40dfd KG |
84 | LAW_TRGT_IF_DDR = 0x0f, |
85 | LAW_TRGT_IF_DDR_2 = 0x16, /* 2nd controller */ | |
86 | }; | |
87 | #define LAW_TRGT_IF_DDR_1 LAW_TRGT_IF_DDR | |
88 | #define LAW_TRGT_IF_PCI_1 LAW_TRGT_IF_PCI | |
89 | #define LAW_TRGT_IF_PCIX LAW_TRGT_IF_PCI | |
90 | #define LAW_TRGT_IF_PCIE_2 LAW_TRGT_IF_PCI_2 | |
91 | ||
92 | #ifdef CONFIG_MPC8641 | |
93 | #define LAW_TRGT_IF_PCIE_1 LAW_TRGT_IF_PCI | |
94 | #endif | |
95 | ||
8d949aff | 96 | #if defined(CONFIG_MPC8572) || defined(CONFIG_P2020) |
83d40dfd KG |
97 | #define LAW_TRGT_IF_PCIE_3 LAW_TRGT_IF_PCI |
98 | #endif | |
418ec858 | 99 | #endif /* CONFIG_FSL_CORENET */ |
83d40dfd KG |
100 | |
101 | struct law_entry { | |
102 | int index; | |
103 | phys_addr_t addr; | |
104 | enum law_size size; | |
105 | enum law_trgt_if trgt_id; | |
106 | }; | |
107 | ||
108 | extern void set_law(u8 idx, phys_addr_t addr, enum law_size sz, enum law_trgt_if id); | |
f060054d | 109 | extern int set_next_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id); |
ba04f701 | 110 | extern int set_last_law(phys_addr_t addr, enum law_size sz, enum law_trgt_if id); |
f784e32b | 111 | extern int set_ddr_laws(u64 start, u64 sz, enum law_trgt_if id); |
418ec858 | 112 | extern struct law_entry find_law(phys_addr_t addr); |
83d40dfd KG |
113 | extern void disable_law(u8 idx); |
114 | extern void init_laws(void); | |
ddcebcb6 | 115 | extern void print_laws(void); |
83d40dfd KG |
116 | |
117 | /* define in board code */ | |
118 | extern struct law_entry law_table[]; | |
119 | extern int num_law_entries; | |
120 | #endif |