diff options
| -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 | { |
