diff options
author | David Daney <david.daney@cavium.com> | 2015-01-15 08:11:14 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2015-02-20 09:31:43 -0500 |
commit | debe6a623d3cdc7f0374124830587fb8d1a04b63 (patch) | |
tree | 002af15bade64c15267e300e9a143eb09ca82d8e /arch | |
parent | e3d0ead59f6c1167c817ea338dd9395d517940e1 (diff) |
MIPS: OCTEON: Update octeon-model.h code for new SoCs.
Add coverage for OCTEON III models.
Signed-off-by: David Daney <david.daney@cavium.com>
Signed-off-by: Aleksey Makarov <aleksey.makarov@auriga.com>
Cc: linux-mips@linux-mips.org
Cc: linux-kernel@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/8942/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips/cavium-octeon/dma-octeon.c | 4 | ||||
-rw-r--r-- | arch/mips/cavium-octeon/executive/cvmx-helper-board.c | 2 | ||||
-rw-r--r-- | arch/mips/cavium-octeon/octeon-irq.c | 2 | ||||
-rw-r--r-- | arch/mips/cavium-octeon/setup.c | 2 | ||||
-rw-r--r-- | arch/mips/include/asm/octeon/octeon-model.h | 107 |
5 files changed, 90 insertions, 27 deletions
diff --git a/arch/mips/cavium-octeon/dma-octeon.c b/arch/mips/cavium-octeon/dma-octeon.c index 3778655c4a37..7d8987818ccf 100644 --- a/arch/mips/cavium-octeon/dma-octeon.c +++ b/arch/mips/cavium-octeon/dma-octeon.c | |||
@@ -276,7 +276,7 @@ void __init plat_swiotlb_setup(void) | |||
276 | continue; | 276 | continue; |
277 | 277 | ||
278 | /* These addresses map low for PCI. */ | 278 | /* These addresses map low for PCI. */ |
279 | if (e->addr > 0x410000000ull && !OCTEON_IS_MODEL(OCTEON_CN6XXX)) | 279 | if (e->addr > 0x410000000ull && !OCTEON_IS_OCTEON2()) |
280 | continue; | 280 | continue; |
281 | 281 | ||
282 | addr_size += e->size; | 282 | addr_size += e->size; |
@@ -308,7 +308,7 @@ void __init plat_swiotlb_setup(void) | |||
308 | #endif | 308 | #endif |
309 | #ifdef CONFIG_USB_OCTEON_OHCI | 309 | #ifdef CONFIG_USB_OCTEON_OHCI |
310 | /* OCTEON II ohci is only 32-bit. */ | 310 | /* OCTEON II ohci is only 32-bit. */ |
311 | if (OCTEON_IS_MODEL(OCTEON_CN6XXX) && max_addr >= 0x100000000ul) | 311 | if (OCTEON_IS_OCTEON2() && max_addr >= 0x100000000ul) |
312 | swiotlbsize = 64 * (1<<20); | 312 | swiotlbsize = 64 * (1<<20); |
313 | #endif | 313 | #endif |
314 | swiotlb_nslabs = swiotlbsize >> IO_TLB_SHIFT; | 314 | swiotlb_nslabs = swiotlbsize >> IO_TLB_SHIFT; |
diff --git a/arch/mips/cavium-octeon/executive/cvmx-helper-board.c b/arch/mips/cavium-octeon/executive/cvmx-helper-board.c index 5dfef84b9576..9eb0feef4417 100644 --- a/arch/mips/cavium-octeon/executive/cvmx-helper-board.c +++ b/arch/mips/cavium-octeon/executive/cvmx-helper-board.c | |||
@@ -767,7 +767,7 @@ enum cvmx_helper_board_usb_clock_types __cvmx_helper_board_usb_get_clock_type(vo | |||
767 | break; | 767 | break; |
768 | } | 768 | } |
769 | /* Most boards except NIC10e use a 12MHz crystal */ | 769 | /* Most boards except NIC10e use a 12MHz crystal */ |
770 | if (OCTEON_IS_MODEL(OCTEON_FAM_2)) | 770 | if (OCTEON_IS_OCTEON2()) |
771 | return USB_CLOCK_TYPE_CRYSTAL_12; | 771 | return USB_CLOCK_TYPE_CRYSTAL_12; |
772 | return USB_CLOCK_TYPE_REF_48; | 772 | return USB_CLOCK_TYPE_REF_48; |
773 | } | 773 | } |
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c index 2bc4aa95944e..01bb01cf49ee 100644 --- a/arch/mips/cavium-octeon/octeon-irq.c +++ b/arch/mips/cavium-octeon/octeon-irq.c | |||
@@ -1210,7 +1210,7 @@ static void __init octeon_irq_init_ciu(void) | |||
1210 | if (OCTEON_IS_MODEL(OCTEON_CN58XX_PASS2_X) || | 1210 | if (OCTEON_IS_MODEL(OCTEON_CN58XX_PASS2_X) || |
1211 | OCTEON_IS_MODEL(OCTEON_CN56XX_PASS2_X) || | 1211 | OCTEON_IS_MODEL(OCTEON_CN56XX_PASS2_X) || |
1212 | OCTEON_IS_MODEL(OCTEON_CN52XX_PASS2_X) || | 1212 | OCTEON_IS_MODEL(OCTEON_CN52XX_PASS2_X) || |
1213 | OCTEON_IS_MODEL(OCTEON_CN6XXX)) { | 1213 | OCTEON_IS_OCTEON2() || OCTEON_IS_OCTEON3()) { |
1214 | chip = &octeon_irq_chip_ciu_v2; | 1214 | chip = &octeon_irq_chip_ciu_v2; |
1215 | chip_mbox = &octeon_irq_chip_ciu_mbox_v2; | 1215 | chip_mbox = &octeon_irq_chip_ciu_mbox_v2; |
1216 | chip_wd = &octeon_irq_chip_ciu_wd_v2; | 1216 | chip_wd = &octeon_irq_chip_ciu_wd_v2; |
diff --git a/arch/mips/cavium-octeon/setup.c b/arch/mips/cavium-octeon/setup.c index 6c51ef6d57c7..8d2b82327a72 100644 --- a/arch/mips/cavium-octeon/setup.c +++ b/arch/mips/cavium-octeon/setup.c | |||
@@ -655,7 +655,7 @@ void __init prom_init(void) | |||
655 | sysinfo->dfa_ref_clock_hz = octeon_bootinfo->dfa_ref_clock_hz; | 655 | sysinfo->dfa_ref_clock_hz = octeon_bootinfo->dfa_ref_clock_hz; |
656 | sysinfo->bootloader_config_flags = octeon_bootinfo->config_flags; | 656 | sysinfo->bootloader_config_flags = octeon_bootinfo->config_flags; |
657 | 657 | ||
658 | if (OCTEON_IS_MODEL(OCTEON_CN6XXX)) { | 658 | if (OCTEON_IS_OCTEON2() || OCTEON_IS_OCTEON3()) { |
659 | /* I/O clock runs at a different rate than the CPU. */ | 659 | /* I/O clock runs at a different rate than the CPU. */ |
660 | union cvmx_mio_rst_boot rst_boot; | 660 | union cvmx_mio_rst_boot rst_boot; |
661 | rst_boot.u64 = cvmx_read_csr(CVMX_MIO_RST_BOOT); | 661 | rst_boot.u64 = cvmx_read_csr(CVMX_MIO_RST_BOOT); |
diff --git a/arch/mips/include/asm/octeon/octeon-model.h b/arch/mips/include/asm/octeon/octeon-model.h index e8a1c2fd52cd..92b377e36dac 100644 --- a/arch/mips/include/asm/octeon/octeon-model.h +++ b/arch/mips/include/asm/octeon/octeon-model.h | |||
@@ -45,6 +45,7 @@ | |||
45 | */ | 45 | */ |
46 | 46 | ||
47 | #define OCTEON_FAMILY_MASK 0x00ffff00 | 47 | #define OCTEON_FAMILY_MASK 0x00ffff00 |
48 | #define OCTEON_PRID_MASK 0x00ffffff | ||
48 | 49 | ||
49 | /* Flag bits in top byte */ | 50 | /* Flag bits in top byte */ |
50 | /* Ignores revision in model checks */ | 51 | /* Ignores revision in model checks */ |
@@ -63,11 +64,52 @@ | |||
63 | #define OM_MATCH_6XXX_FAMILY_MODELS 0x40000000 | 64 | #define OM_MATCH_6XXX_FAMILY_MODELS 0x40000000 |
64 | /* Match all cnf7XXX Octeon models. */ | 65 | /* Match all cnf7XXX Octeon models. */ |
65 | #define OM_MATCH_F7XXX_FAMILY_MODELS 0x80000000 | 66 | #define OM_MATCH_F7XXX_FAMILY_MODELS 0x80000000 |
67 | /* Match all cn7XXX Octeon models. */ | ||
68 | #define OM_MATCH_7XXX_FAMILY_MODELS 0x10000000 | ||
69 | #define OM_MATCH_FAMILY_MODELS (OM_MATCH_5XXX_FAMILY_MODELS | \ | ||
70 | OM_MATCH_6XXX_FAMILY_MODELS | \ | ||
71 | OM_MATCH_F7XXX_FAMILY_MODELS | \ | ||
72 | OM_MATCH_7XXX_FAMILY_MODELS) | ||
73 | /* | ||
74 | * CN7XXX models with new revision encoding | ||
75 | */ | ||
76 | |||
77 | #define OCTEON_CN73XX_PASS1_0 0x000d9700 | ||
78 | #define OCTEON_CN73XX (OCTEON_CN73XX_PASS1_0 | OM_IGNORE_REVISION) | ||
79 | #define OCTEON_CN73XX_PASS1_X (OCTEON_CN73XX_PASS1_0 | \ | ||
80 | OM_IGNORE_MINOR_REVISION) | ||
81 | |||
82 | #define OCTEON_CN70XX_PASS1_0 0x000d9600 | ||
83 | #define OCTEON_CN70XX_PASS1_1 0x000d9601 | ||
84 | #define OCTEON_CN70XX_PASS1_2 0x000d9602 | ||
85 | |||
86 | #define OCTEON_CN70XX_PASS2_0 0x000d9608 | ||
87 | |||
88 | #define OCTEON_CN70XX (OCTEON_CN70XX_PASS1_0 | OM_IGNORE_REVISION) | ||
89 | #define OCTEON_CN70XX_PASS1_X (OCTEON_CN70XX_PASS1_0 | \ | ||
90 | OM_IGNORE_MINOR_REVISION) | ||
91 | #define OCTEON_CN70XX_PASS2_X (OCTEON_CN70XX_PASS2_0 | \ | ||
92 | OM_IGNORE_MINOR_REVISION) | ||
93 | |||
94 | #define OCTEON_CN71XX OCTEON_CN70XX | ||
95 | |||
96 | #define OCTEON_CN78XX_PASS1_0 0x000d9500 | ||
97 | #define OCTEON_CN78XX_PASS1_1 0x000d9501 | ||
98 | #define OCTEON_CN78XX_PASS2_0 0x000d9508 | ||
99 | |||
100 | #define OCTEON_CN78XX (OCTEON_CN78XX_PASS1_0 | OM_IGNORE_REVISION) | ||
101 | #define OCTEON_CN78XX_PASS1_X (OCTEON_CN78XX_PASS1_0 | \ | ||
102 | OM_IGNORE_MINOR_REVISION) | ||
103 | #define OCTEON_CN78XX_PASS2_X (OCTEON_CN78XX_PASS2_0 | \ | ||
104 | OM_IGNORE_MINOR_REVISION) | ||
105 | |||
106 | #define OCTEON_CN76XX (0x000d9540 | OM_CHECK_SUBMODEL) | ||
66 | 107 | ||
67 | /* | 108 | /* |
68 | * CNF7XXX models with new revision encoding | 109 | * CNF7XXX models with new revision encoding |
69 | */ | 110 | */ |
70 | #define OCTEON_CNF71XX_PASS1_0 0x000d9400 | 111 | #define OCTEON_CNF71XX_PASS1_0 0x000d9400 |
112 | #define OCTEON_CNF71XX_PASS1_1 0x000d9401 | ||
71 | 113 | ||
72 | #define OCTEON_CNF71XX (OCTEON_CNF71XX_PASS1_0 | OM_IGNORE_REVISION) | 114 | #define OCTEON_CNF71XX (OCTEON_CNF71XX_PASS1_0 | OM_IGNORE_REVISION) |
73 | #define OCTEON_CNF71XX_PASS1_X (OCTEON_CNF71XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) | 115 | #define OCTEON_CNF71XX_PASS1_X (OCTEON_CNF71XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) |
@@ -79,6 +121,8 @@ | |||
79 | #define OCTEON_CN68XX_PASS1_1 0x000d9101 | 121 | #define OCTEON_CN68XX_PASS1_1 0x000d9101 |
80 | #define OCTEON_CN68XX_PASS1_2 0x000d9102 | 122 | #define OCTEON_CN68XX_PASS1_2 0x000d9102 |
81 | #define OCTEON_CN68XX_PASS2_0 0x000d9108 | 123 | #define OCTEON_CN68XX_PASS2_0 0x000d9108 |
124 | #define OCTEON_CN68XX_PASS2_1 0x000d9109 | ||
125 | #define OCTEON_CN68XX_PASS2_2 0x000d910a | ||
82 | 126 | ||
83 | #define OCTEON_CN68XX (OCTEON_CN68XX_PASS2_0 | OM_IGNORE_REVISION) | 127 | #define OCTEON_CN68XX (OCTEON_CN68XX_PASS2_0 | OM_IGNORE_REVISION) |
84 | #define OCTEON_CN68XX_PASS1_X (OCTEON_CN68XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) | 128 | #define OCTEON_CN68XX_PASS1_X (OCTEON_CN68XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) |
@@ -104,11 +148,18 @@ | |||
104 | #define OCTEON_CN63XX_PASS1_X (OCTEON_CN63XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) | 148 | #define OCTEON_CN63XX_PASS1_X (OCTEON_CN63XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) |
105 | #define OCTEON_CN63XX_PASS2_X (OCTEON_CN63XX_PASS2_0 | OM_IGNORE_MINOR_REVISION) | 149 | #define OCTEON_CN63XX_PASS2_X (OCTEON_CN63XX_PASS2_0 | OM_IGNORE_MINOR_REVISION) |
106 | 150 | ||
151 | /* CN62XX is same as CN63XX with 1 MB cache */ | ||
152 | #define OCTEON_CN62XX OCTEON_CN63XX | ||
153 | |||
107 | #define OCTEON_CN61XX_PASS1_0 0x000d9300 | 154 | #define OCTEON_CN61XX_PASS1_0 0x000d9300 |
155 | #define OCTEON_CN61XX_PASS1_1 0x000d9301 | ||
108 | 156 | ||
109 | #define OCTEON_CN61XX (OCTEON_CN61XX_PASS1_0 | OM_IGNORE_REVISION) | 157 | #define OCTEON_CN61XX (OCTEON_CN61XX_PASS1_0 | OM_IGNORE_REVISION) |
110 | #define OCTEON_CN61XX_PASS1_X (OCTEON_CN61XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) | 158 | #define OCTEON_CN61XX_PASS1_X (OCTEON_CN61XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) |
111 | 159 | ||
160 | /* CN60XX is same as CN61XX with 512 KB cache */ | ||
161 | #define OCTEON_CN60XX OCTEON_CN61XX | ||
162 | |||
112 | /* | 163 | /* |
113 | * CN5XXX models with new revision encoding | 164 | * CN5XXX models with new revision encoding |
114 | */ | 165 | */ |
@@ -120,7 +171,7 @@ | |||
120 | #define OCTEON_CN58XX_PASS2_2 0x000d030a | 171 | #define OCTEON_CN58XX_PASS2_2 0x000d030a |
121 | #define OCTEON_CN58XX_PASS2_3 0x000d030b | 172 | #define OCTEON_CN58XX_PASS2_3 0x000d030b |
122 | 173 | ||
123 | #define OCTEON_CN58XX (OCTEON_CN58XX_PASS1_0 | OM_IGNORE_REVISION) | 174 | #define OCTEON_CN58XX (OCTEON_CN58XX_PASS2_0 | OM_IGNORE_REVISION) |
124 | #define OCTEON_CN58XX_PASS1_X (OCTEON_CN58XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) | 175 | #define OCTEON_CN58XX_PASS1_X (OCTEON_CN58XX_PASS1_0 | OM_IGNORE_MINOR_REVISION) |
125 | #define OCTEON_CN58XX_PASS2_X (OCTEON_CN58XX_PASS2_0 | OM_IGNORE_MINOR_REVISION) | 176 | #define OCTEON_CN58XX_PASS2_X (OCTEON_CN58XX_PASS2_0 | OM_IGNORE_MINOR_REVISION) |
126 | #define OCTEON_CN58XX_PASS1 OCTEON_CN58XX_PASS1_X | 177 | #define OCTEON_CN58XX_PASS1 OCTEON_CN58XX_PASS1_X |
@@ -217,12 +268,10 @@ | |||
217 | #define OCTEON_CN3XXX (OCTEON_CN58XX_PASS1_0 | OM_MATCH_PREVIOUS_MODELS | OM_IGNORE_REVISION) | 268 | #define OCTEON_CN3XXX (OCTEON_CN58XX_PASS1_0 | OM_MATCH_PREVIOUS_MODELS | OM_IGNORE_REVISION) |
218 | #define OCTEON_CN5XXX (OCTEON_CN58XX_PASS1_0 | OM_MATCH_5XXX_FAMILY_MODELS) | 269 | #define OCTEON_CN5XXX (OCTEON_CN58XX_PASS1_0 | OM_MATCH_5XXX_FAMILY_MODELS) |
219 | #define OCTEON_CN6XXX (OCTEON_CN63XX_PASS1_0 | OM_MATCH_6XXX_FAMILY_MODELS) | 270 | #define OCTEON_CN6XXX (OCTEON_CN63XX_PASS1_0 | OM_MATCH_6XXX_FAMILY_MODELS) |
220 | 271 | #define OCTEON_CNF7XXX (OCTEON_CNF71XX_PASS1_0 | \ | |
221 | /* These are used to cover entire families of OCTEON processors */ | 272 | OM_MATCH_F7XXX_FAMILY_MODELS) |
222 | #define OCTEON_FAM_1 (OCTEON_CN3XXX) | 273 | #define OCTEON_CN7XXX (OCTEON_CN78XX_PASS1_0 | \ |
223 | #define OCTEON_FAM_PLUS (OCTEON_CN5XXX) | 274 | OM_MATCH_7XXX_FAMILY_MODELS) |
224 | #define OCTEON_FAM_1_PLUS (OCTEON_FAM_PLUS | OM_MATCH_PREVIOUS_MODELS) | ||
225 | #define OCTEON_FAM_2 (OCTEON_CN6XXX) | ||
226 | 275 | ||
227 | /* The revision byte (low byte) has two different encodings. | 276 | /* The revision byte (low byte) has two different encodings. |
228 | * CN3XXX: | 277 | * CN3XXX: |
@@ -232,7 +281,7 @@ | |||
232 | * <4>: alternate package | 281 | * <4>: alternate package |
233 | * <3:0>: revision | 282 | * <3:0>: revision |
234 | * | 283 | * |
235 | * CN5XXX: | 284 | * CN5XXX and older models: |
236 | * | 285 | * |
237 | * bits | 286 | * bits |
238 | * <7>: reserved (0) | 287 | * <7>: reserved (0) |
@@ -251,17 +300,21 @@ | |||
251 | /* CN5XXX and later use different layout of bits in the revision ID field */ | 300 | /* CN5XXX and later use different layout of bits in the revision ID field */ |
252 | #define OCTEON_58XX_FAMILY_MASK OCTEON_38XX_FAMILY_MASK | 301 | #define OCTEON_58XX_FAMILY_MASK OCTEON_38XX_FAMILY_MASK |
253 | #define OCTEON_58XX_FAMILY_REV_MASK 0x00ffff3f | 302 | #define OCTEON_58XX_FAMILY_REV_MASK 0x00ffff3f |
254 | #define OCTEON_58XX_MODEL_MASK 0x00ffffc0 | 303 | #define OCTEON_58XX_MODEL_MASK 0x00ffff40 |
255 | #define OCTEON_58XX_MODEL_REV_MASK (OCTEON_58XX_FAMILY_REV_MASK | OCTEON_58XX_MODEL_MASK) | 304 | #define OCTEON_58XX_MODEL_REV_MASK (OCTEON_58XX_FAMILY_REV_MASK | OCTEON_58XX_MODEL_MASK) |
256 | #define OCTEON_58XX_MODEL_MINOR_REV_MASK (OCTEON_58XX_MODEL_REV_MASK & 0x00fffff8) | 305 | #define OCTEON_58XX_MODEL_MINOR_REV_MASK (OCTEON_58XX_MODEL_REV_MASK & 0x00ffff38) |
257 | #define OCTEON_5XXX_MODEL_MASK 0x00ff0fc0 | 306 | #define OCTEON_5XXX_MODEL_MASK 0x00ff0fc0 |
258 | 307 | ||
259 | /* forward declarations */ | ||
260 | static inline uint32_t cvmx_get_proc_id(void) __attribute__ ((pure)); | 308 | static inline uint32_t cvmx_get_proc_id(void) __attribute__ ((pure)); |
261 | static inline uint64_t cvmx_read_csr(uint64_t csr_addr); | 309 | static inline uint64_t cvmx_read_csr(uint64_t csr_addr); |
262 | 310 | ||
263 | #define __OCTEON_MATCH_MASK__(x, y, z) (((x) & (z)) == ((y) & (z))) | 311 | #define __OCTEON_MATCH_MASK__(x, y, z) (((x) & (z)) == ((y) & (z))) |
264 | 312 | ||
313 | /* | ||
314 | * __OCTEON_IS_MODEL_COMPILE__(arg_model, chip_model) | ||
315 | * returns true if chip_model is identical or belong to the OCTEON | ||
316 | * model group specified in arg_model. | ||
317 | */ | ||
265 | /* NOTE: This for internal use only! */ | 318 | /* NOTE: This for internal use only! */ |
266 | #define __OCTEON_IS_MODEL_COMPILE__(arg_model, chip_model) \ | 319 | #define __OCTEON_IS_MODEL_COMPILE__(arg_model, chip_model) \ |
267 | ((((arg_model & OCTEON_38XX_FAMILY_MASK) < OCTEON_CN58XX_PASS1_0) && ( \ | 320 | ((((arg_model & OCTEON_38XX_FAMILY_MASK) < OCTEON_CN58XX_PASS1_0) && ( \ |
@@ -286,11 +339,18 @@ static inline uint64_t cvmx_read_csr(uint64_t csr_addr); | |||
286 | ((((arg_model) & (OM_FLAG_MASK)) == OM_IGNORE_REVISION) \ | 339 | ((((arg_model) & (OM_FLAG_MASK)) == OM_IGNORE_REVISION) \ |
287 | && __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_FAMILY_MASK)) || \ | 340 | && __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_FAMILY_MASK)) || \ |
288 | ((((arg_model) & (OM_FLAG_MASK)) == OM_CHECK_SUBMODEL) \ | 341 | ((((arg_model) & (OM_FLAG_MASK)) == OM_CHECK_SUBMODEL) \ |
289 | && __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_MODEL_REV_MASK)) || \ | 342 | && __OCTEON_MATCH_MASK__((chip_model), (arg_model), OCTEON_58XX_MODEL_MASK)) || \ |
290 | ((((arg_model) & (OM_MATCH_5XXX_FAMILY_MODELS)) == OM_MATCH_5XXX_FAMILY_MODELS) \ | 343 | ((((arg_model) & (OM_MATCH_5XXX_FAMILY_MODELS)) == OM_MATCH_5XXX_FAMILY_MODELS) \ |
291 | && ((chip_model) >= OCTEON_CN58XX_PASS1_0) && ((chip_model) < OCTEON_CN63XX_PASS1_0)) || \ | 344 | && ((chip_model & OCTEON_PRID_MASK) >= OCTEON_CN58XX_PASS1_0) \ |
345 | && ((chip_model & OCTEON_PRID_MASK) < OCTEON_CN63XX_PASS1_0)) || \ | ||
292 | ((((arg_model) & (OM_MATCH_6XXX_FAMILY_MODELS)) == OM_MATCH_6XXX_FAMILY_MODELS) \ | 346 | ((((arg_model) & (OM_MATCH_6XXX_FAMILY_MODELS)) == OM_MATCH_6XXX_FAMILY_MODELS) \ |
293 | && ((chip_model) >= OCTEON_CN63XX_PASS1_0)) || \ | 347 | && ((chip_model & OCTEON_PRID_MASK) >= OCTEON_CN63XX_PASS1_0) \ |
348 | && ((chip_model & OCTEON_PRID_MASK) < OCTEON_CNF71XX_PASS1_0)) || \ | ||
349 | ((((arg_model) & (OM_MATCH_F7XXX_FAMILY_MODELS)) == OM_MATCH_F7XXX_FAMILY_MODELS) \ | ||
350 | && ((chip_model & OCTEON_PRID_MASK) >= OCTEON_CNF71XX_PASS1_0) \ | ||
351 | && ((chip_model & OCTEON_PRID_MASK) < OCTEON_CN78XX_PASS1_0)) || \ | ||
352 | ((((arg_model) & (OM_MATCH_7XXX_FAMILY_MODELS)) == OM_MATCH_7XXX_FAMILY_MODELS) \ | ||
353 | && ((chip_model & OCTEON_PRID_MASK) >= OCTEON_CN78XX_PASS1_0)) || \ | ||
294 | ((((arg_model) & (OM_MATCH_PREVIOUS_MODELS)) == OM_MATCH_PREVIOUS_MODELS) \ | 354 | ((((arg_model) & (OM_MATCH_PREVIOUS_MODELS)) == OM_MATCH_PREVIOUS_MODELS) \ |
295 | && (((chip_model) & OCTEON_58XX_MODEL_MASK) < ((arg_model) & OCTEON_58XX_MODEL_MASK))) \ | 355 | && (((chip_model) & OCTEON_58XX_MODEL_MASK) < ((arg_model) & OCTEON_58XX_MODEL_MASK))) \ |
296 | ))) | 356 | ))) |
@@ -300,14 +360,6 @@ static inline int __octeon_is_model_runtime__(uint32_t model) | |||
300 | { | 360 | { |
301 | uint32_t cpuid = cvmx_get_proc_id(); | 361 | uint32_t cpuid = cvmx_get_proc_id(); |
302 | 362 | ||
303 | /* | ||
304 | * Check for special case of mismarked 3005 samples. We only | ||
305 | * need to check if the sub model isn't being ignored | ||
306 | */ | ||
307 | if ((model & OM_CHECK_SUBMODEL) == OM_CHECK_SUBMODEL) { | ||
308 | if (cpuid == OCTEON_CN3010_PASS1 && (cvmx_read_csr(0x80011800800007B8ull) & (1ull << 34))) | ||
309 | cpuid |= 0x10; | ||
310 | } | ||
311 | return __OCTEON_IS_MODEL_COMPILE__(model, cpuid); | 363 | return __OCTEON_IS_MODEL_COMPILE__(model, cpuid); |
312 | } | 364 | } |
313 | 365 | ||
@@ -326,10 +378,21 @@ static inline int __octeon_is_model_runtime__(uint32_t model) | |||
326 | #define OCTEON_IS_COMMON_BINARY() 1 | 378 | #define OCTEON_IS_COMMON_BINARY() 1 |
327 | #undef OCTEON_MODEL | 379 | #undef OCTEON_MODEL |
328 | 380 | ||
381 | #define OCTEON_IS_OCTEON1() OCTEON_IS_MODEL(OCTEON_CN3XXX) | ||
382 | #define OCTEON_IS_OCTEONPLUS() OCTEON_IS_MODEL(OCTEON_CN5XXX) | ||
383 | #define OCTEON_IS_OCTEON2() \ | ||
384 | (OCTEON_IS_MODEL(OCTEON_CN6XXX) || OCTEON_IS_MODEL(OCTEON_CNF71XX)) | ||
385 | |||
386 | #define OCTEON_IS_OCTEON3() OCTEON_IS_MODEL(OCTEON_CN7XXX) | ||
387 | |||
388 | #define OCTEON_IS_OCTEON1PLUS() (OCTEON_IS_OCTEON1() || OCTEON_IS_OCTEONPLUS()) | ||
389 | |||
329 | const char *__init octeon_model_get_string(uint32_t chip_id); | 390 | const char *__init octeon_model_get_string(uint32_t chip_id); |
330 | 391 | ||
331 | /* | 392 | /* |
332 | * Return the octeon family, i.e., ProcessorID of the PrID register. | 393 | * Return the octeon family, i.e., ProcessorID of the PrID register. |
394 | * | ||
395 | * @return the octeon family on success, ((unint32_t)-1) on error. | ||
333 | */ | 396 | */ |
334 | static inline uint32_t cvmx_get_octeon_family(void) | 397 | static inline uint32_t cvmx_get_octeon_family(void) |
335 | { | 398 | { |