.. | .. |
---|
86 | 86 | #define CP0_XCONTEXT $20 |
---|
87 | 87 | #define CP0_FRAMEMASK $21 |
---|
88 | 88 | #define CP0_DIAGNOSTIC $22 |
---|
| 89 | +#define CP0_DIAGNOSTIC1 $22, 1 |
---|
89 | 90 | #define CP0_DEBUG $23 |
---|
90 | 91 | #define CP0_DEPC $24 |
---|
91 | 92 | #define CP0_PERFORMANCE $25 |
---|
.. | .. |
---|
388 | 389 | #define ST0_CU3 0x80000000 |
---|
389 | 390 | #define ST0_XX 0x80000000 /* MIPS IV naming */ |
---|
390 | 391 | |
---|
| 392 | +/* in-kernel enabled CUs */ |
---|
| 393 | +#ifdef CONFIG_CPU_LOONGSON64 |
---|
| 394 | +#define ST0_KERNEL_CUMASK (ST0_CU0 | ST0_CU2) |
---|
| 395 | +#else |
---|
| 396 | +#define ST0_KERNEL_CUMASK ST0_CU0 |
---|
| 397 | +#endif |
---|
| 398 | + |
---|
391 | 399 | /* |
---|
392 | 400 | * Bitfields and bit numbers in the coprocessor 0 IntCtl register. (MIPSR2) |
---|
393 | 401 | */ |
---|
.. | .. |
---|
468 | 476 | #define EXCCODE_THREAD 25 /* Thread exceptions (MT) */ |
---|
469 | 477 | #define EXCCODE_DSPDIS 26 /* DSP disabled exception */ |
---|
470 | 478 | #define EXCCODE_GE 27 /* Virtualized guest exception (VZ) */ |
---|
| 479 | +#define EXCCODE_CACHEERR 30 /* Parity/ECC occured on a core */ |
---|
471 | 480 | |
---|
472 | 481 | /* Implementation specific trap codes used by MIPS cores */ |
---|
473 | 482 | #define MIPS_EXCCODE_TLBPAR 16 /* TLB parity error exception */ |
---|
| 483 | + |
---|
| 484 | +/* Implementation specific trap codes used by Loongson cores */ |
---|
| 485 | +#define LOONGSON_EXCCODE_GSEXC 16 /* Loongson-specific exception */ |
---|
474 | 486 | |
---|
475 | 487 | /* |
---|
476 | 488 | * Bits in the coprocessor 0 config register. |
---|
.. | .. |
---|
563 | 575 | #define MIPS_CONF_MT_FTLB (_ULCAST_(4) << 7) |
---|
564 | 576 | #define MIPS_CONF_AR (_ULCAST_(7) << 10) |
---|
565 | 577 | #define MIPS_CONF_AT (_ULCAST_(3) << 13) |
---|
| 578 | +#define MIPS_CONF_BE (_ULCAST_(1) << 15) |
---|
| 579 | +#define MIPS_CONF_BM (_ULCAST_(1) << 16) |
---|
| 580 | +#define MIPS_CONF_MM (_ULCAST_(3) << 17) |
---|
| 581 | +#define MIPS_CONF_MM_SYSAD (_ULCAST_(1) << 17) |
---|
| 582 | +#define MIPS_CONF_MM_FULL (_ULCAST_(2) << 17) |
---|
| 583 | +#define MIPS_CONF_SB (_ULCAST_(1) << 21) |
---|
| 584 | +#define MIPS_CONF_UDI (_ULCAST_(1) << 22) |
---|
| 585 | +#define MIPS_CONF_DSP (_ULCAST_(1) << 23) |
---|
| 586 | +#define MIPS_CONF_ISP (_ULCAST_(1) << 24) |
---|
| 587 | +#define MIPS_CONF_KU (_ULCAST_(3) << 25) |
---|
| 588 | +#define MIPS_CONF_K23 (_ULCAST_(3) << 28) |
---|
566 | 589 | #define MIPS_CONF_M (_ULCAST_(1) << 31) |
---|
567 | 590 | |
---|
568 | 591 | /* |
---|
.. | .. |
---|
667 | 690 | #define MIPS_CONF5_FRE (_ULCAST_(1) << 8) |
---|
668 | 691 | #define MIPS_CONF5_UFE (_ULCAST_(1) << 9) |
---|
669 | 692 | #define MIPS_CONF5_CA2 (_ULCAST_(1) << 14) |
---|
| 693 | +#define MIPS_CONF5_MI (_ULCAST_(1) << 17) |
---|
670 | 694 | #define MIPS_CONF5_CRCP (_ULCAST_(1) << 18) |
---|
671 | 695 | #define MIPS_CONF5_MSAEN (_ULCAST_(1) << 27) |
---|
672 | 696 | #define MIPS_CONF5_EVA (_ULCAST_(1) << 28) |
---|
673 | 697 | #define MIPS_CONF5_CV (_ULCAST_(1) << 29) |
---|
674 | 698 | #define MIPS_CONF5_K (_ULCAST_(1) << 30) |
---|
675 | 699 | |
---|
676 | | -#define MIPS_CONF6_SYND (_ULCAST_(1) << 13) |
---|
| 700 | +/* Config6 feature bits for proAptiv/P5600 */ |
---|
| 701 | + |
---|
| 702 | +/* Jump register cache prediction disable */ |
---|
| 703 | +#define MTI_CONF6_JRCD (_ULCAST_(1) << 0) |
---|
| 704 | +/* MIPSr6 extensions enable */ |
---|
| 705 | +#define MTI_CONF6_R6 (_ULCAST_(1) << 2) |
---|
| 706 | +/* IFU Performance Control */ |
---|
| 707 | +#define MTI_CONF6_IFUPERFCTL (_ULCAST_(3) << 10) |
---|
| 708 | +#define MTI_CONF6_SYND (_ULCAST_(1) << 13) |
---|
| 709 | +/* Sleep state performance counter disable */ |
---|
| 710 | +#define MTI_CONF6_SPCD (_ULCAST_(1) << 14) |
---|
677 | 711 | /* proAptiv FTLB on/off bit */ |
---|
678 | | -#define MIPS_CONF6_FTLBEN (_ULCAST_(1) << 15) |
---|
679 | | -/* Loongson-3 FTLB on/off bit */ |
---|
680 | | -#define MIPS_CONF6_FTLBDIS (_ULCAST_(1) << 22) |
---|
| 712 | +#define MTI_CONF6_FTLBEN (_ULCAST_(1) << 15) |
---|
| 713 | +/* Disable load/store bonding */ |
---|
| 714 | +#define MTI_CONF6_DLSB (_ULCAST_(1) << 21) |
---|
681 | 715 | /* FTLB probability bits */ |
---|
682 | | -#define MIPS_CONF6_FTLBP_SHIFT (16) |
---|
| 716 | +#define MTI_CONF6_FTLBP_SHIFT (16) |
---|
| 717 | + |
---|
| 718 | +/* Config6 feature bits for Loongson-3 */ |
---|
| 719 | + |
---|
| 720 | +/* Loongson-3 internal timer bit */ |
---|
| 721 | +#define LOONGSON_CONF6_INTIMER (_ULCAST_(1) << 6) |
---|
| 722 | +/* Loongson-3 external timer bit */ |
---|
| 723 | +#define LOONGSON_CONF6_EXTIMER (_ULCAST_(1) << 7) |
---|
| 724 | +/* Loongson-3 SFB on/off bit, STFill in manual */ |
---|
| 725 | +#define LOONGSON_CONF6_SFBEN (_ULCAST_(1) << 8) |
---|
| 726 | +/* Loongson-3's LL on exclusive cacheline */ |
---|
| 727 | +#define LOONGSON_CONF6_LLEXC (_ULCAST_(1) << 16) |
---|
| 728 | +/* Loongson-3's SC has a random delay */ |
---|
| 729 | +#define LOONGSON_CONF6_SCRAND (_ULCAST_(1) << 17) |
---|
| 730 | +/* Loongson-3 FTLB on/off bit, VTLBOnly in manual */ |
---|
| 731 | +#define LOONGSON_CONF6_FTLBDIS (_ULCAST_(1) << 22) |
---|
683 | 732 | |
---|
684 | 733 | #define MIPS_CONF7_WII (_ULCAST_(1) << 31) |
---|
685 | 734 | |
---|
.. | .. |
---|
687 | 736 | |
---|
688 | 737 | #define MIPS_CONF7_IAR (_ULCAST_(1) << 10) |
---|
689 | 738 | #define MIPS_CONF7_AR (_ULCAST_(1) << 16) |
---|
| 739 | + |
---|
| 740 | +/* Ingenic HPTLB off bits */ |
---|
| 741 | +#define XBURST_PAGECTRL_HPTLB_DIS 0xa9000000 |
---|
690 | 742 | |
---|
691 | 743 | /* Ingenic Config7 bits */ |
---|
692 | 744 | #define MIPS_CONF7_BTB_LOOP_EN (_ULCAST_(1) << 4) |
---|
.. | .. |
---|
753 | 805 | #define MIPS_MAAR_ADDR_SHIFT 12 |
---|
754 | 806 | #define MIPS_MAAR_S (_ULCAST_(1) << 1) |
---|
755 | 807 | #define MIPS_MAAR_VL (_ULCAST_(1) << 0) |
---|
| 808 | +#ifdef CONFIG_XPA |
---|
| 809 | +#define MIPS_MAAR_V (MIPS_MAAR_VH | MIPS_MAAR_VL) |
---|
| 810 | +#else |
---|
| 811 | +#define MIPS_MAAR_V MIPS_MAAR_VL |
---|
| 812 | +#endif |
---|
| 813 | +#define MIPS_MAARX_VH (_ULCAST_(1) << 31) |
---|
| 814 | +#define MIPS_MAARX_ADDR 0xF |
---|
| 815 | +#define MIPS_MAARX_ADDR_SHIFT 32 |
---|
756 | 816 | |
---|
757 | 817 | /* MAARI bit definitions */ |
---|
758 | 818 | #define MIPS_MAARI_INDEX (_ULCAST_(0x3f) << 0) |
---|
.. | .. |
---|
989 | 1049 | /* Disable Branch Return Cache */ |
---|
990 | 1050 | #define R10K_DIAG_D_BRC (_ULCAST_(1) << 22) |
---|
991 | 1051 | |
---|
| 1052 | +/* Flush BTB */ |
---|
| 1053 | +#define LOONGSON_DIAG_BTB (_ULCAST_(1) << 1) |
---|
992 | 1054 | /* Flush ITLB */ |
---|
993 | 1055 | #define LOONGSON_DIAG_ITLB (_ULCAST_(1) << 2) |
---|
994 | 1056 | /* Flush DTLB */ |
---|
995 | 1057 | #define LOONGSON_DIAG_DTLB (_ULCAST_(1) << 3) |
---|
| 1058 | +/* Allow some CACHE instructions (CACHE0, 1, 3, 21 and 23) in user mode */ |
---|
| 1059 | +#define LOONGSON_DIAG_UCAC (_ULCAST_(1) << 8) |
---|
996 | 1060 | /* Flush VTLB */ |
---|
997 | 1061 | #define LOONGSON_DIAG_VTLB (_ULCAST_(1) << 12) |
---|
998 | 1062 | /* Flush FTLB */ |
---|
999 | 1063 | #define LOONGSON_DIAG_FTLB (_ULCAST_(1) << 13) |
---|
| 1064 | + |
---|
| 1065 | +/* |
---|
| 1066 | + * Diag1 (GSCause in Loongson-speak) fields |
---|
| 1067 | + */ |
---|
| 1068 | +/* Loongson-specific exception code (GSExcCode) */ |
---|
| 1069 | +#define LOONGSON_DIAG1_EXCCODE_SHIFT 2 |
---|
| 1070 | +#define LOONGSON_DIAG1_EXCCODE GENMASK(6, 2) |
---|
1000 | 1071 | |
---|
1001 | 1072 | /* CvmCtl register field definitions */ |
---|
1002 | 1073 | #define CVMCTL_IPPCI_SHIFT 7 |
---|
.. | .. |
---|
1097 | 1168 | /* |
---|
1098 | 1169 | * Bits 22:20 of the FPU Status Register will be read as 0, |
---|
1099 | 1170 | * and should be written as zero. |
---|
| 1171 | + * MAC2008 was removed in Release 5 so we still treat it as |
---|
| 1172 | + * reserved. |
---|
1100 | 1173 | */ |
---|
1101 | 1174 | #define FPU_CSR_RSVD (_ULCAST_(7) << 20) |
---|
1102 | 1175 | |
---|
| 1176 | +#define FPU_CSR_MAC2008 (_ULCAST_(1) << 20) |
---|
1103 | 1177 | #define FPU_CSR_ABS2008 (_ULCAST_(1) << 19) |
---|
1104 | 1178 | #define FPU_CSR_NAN2008 (_ULCAST_(1) << 18) |
---|
1105 | 1179 | |
---|
.. | .. |
---|
1250 | 1324 | ENC \ |
---|
1251 | 1325 | ".endm") |
---|
1252 | 1326 | |
---|
| 1327 | +/* Instructions with 1 register operand & 1 immediate operand */ |
---|
| 1328 | +#define _ASM_MACRO_1R1I(OP, R1, I2, ENC) \ |
---|
| 1329 | + __asm__(".macro " #OP " " #R1 ", " #I2 "\n\t" \ |
---|
| 1330 | + "parse_r __" #R1 ", \\" #R1 "\n\t" \ |
---|
| 1331 | + ENC \ |
---|
| 1332 | + ".endm") |
---|
| 1333 | + |
---|
1253 | 1334 | /* Instructions with 2 register operands */ |
---|
1254 | 1335 | #define _ASM_MACRO_2R(OP, R1, R2, ENC) \ |
---|
1255 | 1336 | __asm__(".macro " #OP " " #R1 ", " #R2 "\n\t" \ |
---|
.. | .. |
---|
1348 | 1429 | : "=r" (__res)); \ |
---|
1349 | 1430 | else \ |
---|
1350 | 1431 | __asm__ vol( \ |
---|
| 1432 | + ".set\tpush\n\t" \ |
---|
1351 | 1433 | ".set\tmips32\n\t" \ |
---|
1352 | 1434 | "mfc0\t%0, " #source ", " #sel "\n\t" \ |
---|
1353 | | - ".set\tmips0\n\t" \ |
---|
| 1435 | + ".set\tpop\n\t" \ |
---|
1354 | 1436 | : "=r" (__res)); \ |
---|
1355 | 1437 | __res; \ |
---|
1356 | 1438 | }) |
---|
.. | .. |
---|
1361 | 1443 | __res = __read_64bit_c0_split(source, sel, vol); \ |
---|
1362 | 1444 | else if (sel == 0) \ |
---|
1363 | 1445 | __asm__ vol( \ |
---|
| 1446 | + ".set\tpush\n\t" \ |
---|
1364 | 1447 | ".set\tmips3\n\t" \ |
---|
1365 | 1448 | "dmfc0\t%0, " #source "\n\t" \ |
---|
1366 | | - ".set\tmips0" \ |
---|
| 1449 | + ".set\tpop" \ |
---|
1367 | 1450 | : "=r" (__res)); \ |
---|
1368 | 1451 | else \ |
---|
1369 | 1452 | __asm__ vol( \ |
---|
| 1453 | + ".set\tpush\n\t" \ |
---|
1370 | 1454 | ".set\tmips64\n\t" \ |
---|
1371 | 1455 | "dmfc0\t%0, " #source ", " #sel "\n\t" \ |
---|
1372 | | - ".set\tmips0" \ |
---|
| 1456 | + ".set\tpop" \ |
---|
1373 | 1457 | : "=r" (__res)); \ |
---|
1374 | 1458 | __res; \ |
---|
1375 | 1459 | }) |
---|
.. | .. |
---|
1394 | 1478 | : : "Jr" ((unsigned int)(value))); \ |
---|
1395 | 1479 | else \ |
---|
1396 | 1480 | __asm__ __volatile__( \ |
---|
| 1481 | + ".set\tpush\n\t" \ |
---|
1397 | 1482 | ".set\tmips32\n\t" \ |
---|
1398 | 1483 | "mtc0\t%z0, " #register ", " #sel "\n\t" \ |
---|
1399 | | - ".set\tmips0" \ |
---|
| 1484 | + ".set\tpop" \ |
---|
1400 | 1485 | : : "Jr" ((unsigned int)(value))); \ |
---|
1401 | 1486 | } while (0) |
---|
1402 | 1487 | |
---|
.. | .. |
---|
1406 | 1491 | __write_64bit_c0_split(register, sel, value); \ |
---|
1407 | 1492 | else if (sel == 0) \ |
---|
1408 | 1493 | __asm__ __volatile__( \ |
---|
| 1494 | + ".set\tpush\n\t" \ |
---|
1409 | 1495 | ".set\tmips3\n\t" \ |
---|
1410 | 1496 | "dmtc0\t%z0, " #register "\n\t" \ |
---|
1411 | | - ".set\tmips0" \ |
---|
| 1497 | + ".set\tpop" \ |
---|
1412 | 1498 | : : "Jr" (value)); \ |
---|
1413 | 1499 | else \ |
---|
1414 | 1500 | __asm__ __volatile__( \ |
---|
| 1501 | + ".set\tpush\n\t" \ |
---|
1415 | 1502 | ".set\tmips64\n\t" \ |
---|
1416 | 1503 | "dmtc0\t%z0, " #register ", " #sel "\n\t" \ |
---|
1417 | | - ".set\tmips0" \ |
---|
| 1504 | + ".set\tpop" \ |
---|
1418 | 1505 | : : "Jr" (value)); \ |
---|
1419 | 1506 | } while (0) |
---|
1420 | 1507 | |
---|
.. | .. |
---|
1466 | 1553 | local_irq_save(__flags); \ |
---|
1467 | 1554 | if (sel == 0) \ |
---|
1468 | 1555 | __asm__ vol( \ |
---|
| 1556 | + ".set\tpush\n\t" \ |
---|
1469 | 1557 | ".set\tmips64\n\t" \ |
---|
1470 | 1558 | "dmfc0\t%L0, " #source "\n\t" \ |
---|
1471 | 1559 | "dsra\t%M0, %L0, 32\n\t" \ |
---|
1472 | 1560 | "sll\t%L0, %L0, 0\n\t" \ |
---|
1473 | | - ".set\tmips0" \ |
---|
| 1561 | + ".set\tpop" \ |
---|
1474 | 1562 | : "=r" (__val)); \ |
---|
1475 | 1563 | else \ |
---|
1476 | 1564 | __asm__ vol( \ |
---|
| 1565 | + ".set\tpush\n\t" \ |
---|
1477 | 1566 | ".set\tmips64\n\t" \ |
---|
1478 | 1567 | "dmfc0\t%L0, " #source ", " #sel "\n\t" \ |
---|
1479 | 1568 | "dsra\t%M0, %L0, 32\n\t" \ |
---|
1480 | 1569 | "sll\t%L0, %L0, 0\n\t" \ |
---|
1481 | | - ".set\tmips0" \ |
---|
| 1570 | + ".set\tpop" \ |
---|
1482 | 1571 | : "=r" (__val)); \ |
---|
1483 | 1572 | local_irq_restore(__flags); \ |
---|
1484 | 1573 | \ |
---|
.. | .. |
---|
1501 | 1590 | : "+r" (__tmp)); \ |
---|
1502 | 1591 | else if (sel == 0) \ |
---|
1503 | 1592 | __asm__ __volatile__( \ |
---|
| 1593 | + ".set\tpush\n\t" \ |
---|
1504 | 1594 | ".set\tmips64\n\t" \ |
---|
1505 | 1595 | "dsll\t%L0, %L0, 32\n\t" \ |
---|
1506 | 1596 | "dsrl\t%L0, %L0, 32\n\t" \ |
---|
1507 | 1597 | "dsll\t%M0, %M0, 32\n\t" \ |
---|
1508 | 1598 | "or\t%L0, %L0, %M0\n\t" \ |
---|
1509 | 1599 | "dmtc0\t%L0, " #source "\n\t" \ |
---|
1510 | | - ".set\tmips0" \ |
---|
| 1600 | + ".set\tpop" \ |
---|
1511 | 1601 | : "+r" (__tmp)); \ |
---|
1512 | 1602 | else \ |
---|
1513 | 1603 | __asm__ __volatile__( \ |
---|
| 1604 | + ".set\tpush\n\t" \ |
---|
1514 | 1605 | ".set\tmips64\n\t" \ |
---|
1515 | 1606 | "dsll\t%L0, %L0, 32\n\t" \ |
---|
1516 | 1607 | "dsrl\t%L0, %L0, 32\n\t" \ |
---|
1517 | 1608 | "dsll\t%M0, %M0, 32\n\t" \ |
---|
1518 | 1609 | "or\t%L0, %L0, %M0\n\t" \ |
---|
1519 | 1610 | "dmtc0\t%L0, " #source ", " #sel "\n\t" \ |
---|
1520 | | - ".set\tmips0" \ |
---|
| 1611 | + ".set\tpop" \ |
---|
1521 | 1612 | : "+r" (__tmp)); \ |
---|
1522 | 1613 | local_irq_restore(__flags); \ |
---|
1523 | 1614 | } while (0) |
---|
.. | .. |
---|
1596 | 1687 | #define read_c0_xcontextconfig() __read_ulong_c0_register($4, 3) |
---|
1597 | 1688 | #define write_c0_xcontextconfig(val) __write_ulong_c0_register($4, 3, val) |
---|
1598 | 1689 | |
---|
| 1690 | +#define read_c0_memorymapid() __read_32bit_c0_register($4, 5) |
---|
| 1691 | +#define write_c0_memorymapid(val) __write_32bit_c0_register($4, 5, val) |
---|
| 1692 | + |
---|
1599 | 1693 | #define read_c0_pagemask() __read_32bit_c0_register($5, 0) |
---|
1600 | 1694 | #define write_c0_pagemask(val) __write_32bit_c0_register($5, 0, val) |
---|
1601 | 1695 | |
---|
.. | .. |
---|
1619 | 1713 | #define read_c0_count() __read_32bit_c0_register($9, 0) |
---|
1620 | 1714 | #define write_c0_count(val) __write_32bit_c0_register($9, 0, val) |
---|
1621 | 1715 | |
---|
1622 | | -#define read_c0_count2() __read_32bit_c0_register($9, 6) /* pnx8550 */ |
---|
1623 | | -#define write_c0_count2(val) __write_32bit_c0_register($9, 6, val) |
---|
1624 | | - |
---|
1625 | | -#define read_c0_count3() __read_32bit_c0_register($9, 7) /* pnx8550 */ |
---|
1626 | | -#define write_c0_count3(val) __write_32bit_c0_register($9, 7, val) |
---|
1627 | | - |
---|
1628 | 1716 | #define read_c0_entryhi() __read_ulong_c0_register($10, 0) |
---|
1629 | 1717 | #define write_c0_entryhi(val) __write_ulong_c0_register($10, 0, val) |
---|
1630 | 1718 | |
---|
.. | .. |
---|
1642 | 1730 | |
---|
1643 | 1731 | #define read_c0_guestctl0ext() __read_32bit_c0_register($11, 4) |
---|
1644 | 1732 | #define write_c0_guestctl0ext(val) __write_32bit_c0_register($11, 4, val) |
---|
1645 | | - |
---|
1646 | | -#define read_c0_compare2() __read_32bit_c0_register($11, 6) /* pnx8550 */ |
---|
1647 | | -#define write_c0_compare2(val) __write_32bit_c0_register($11, 6, val) |
---|
1648 | | - |
---|
1649 | | -#define read_c0_compare3() __read_32bit_c0_register($11, 7) /* pnx8550 */ |
---|
1650 | | -#define write_c0_compare3(val) __write_32bit_c0_register($11, 7, val) |
---|
1651 | 1733 | |
---|
1652 | 1734 | #define read_c0_status() __read_32bit_c0_register($12, 0) |
---|
1653 | 1735 | |
---|
.. | .. |
---|
1690 | 1772 | #define write_c0_lladdr(val) __write_ulong_c0_register($17, 0, val) |
---|
1691 | 1773 | #define read_c0_maar() __read_ulong_c0_register($17, 1) |
---|
1692 | 1774 | #define write_c0_maar(val) __write_ulong_c0_register($17, 1, val) |
---|
| 1775 | +#define readx_c0_maar() __readx_32bit_c0_register($17, 1) |
---|
| 1776 | +#define writex_c0_maar(val) __writex_32bit_c0_register($17, 1, val) |
---|
1693 | 1777 | #define read_c0_maari() __read_32bit_c0_register($17, 2) |
---|
1694 | 1778 | #define write_c0_maari(val) __write_32bit_c0_register($17, 2, val) |
---|
1695 | 1779 | |
---|
.. | .. |
---|
1949 | 2033 | |
---|
1950 | 2034 | #define read_c0_brcm_sleepcount() __read_32bit_c0_register($22, 7) |
---|
1951 | 2035 | #define write_c0_brcm_sleepcount(val) __write_32bit_c0_register($22, 7, val) |
---|
| 2036 | + |
---|
| 2037 | +/* Ingenic page ctrl register */ |
---|
| 2038 | +#define write_c0_page_ctrl(val) __write_32bit_c0_register($5, 4, val) |
---|
1952 | 2039 | |
---|
1953 | 2040 | /* |
---|
1954 | 2041 | * Macros to access the guest system control coprocessor |
---|
.. | .. |
---|
2290 | 2377 | _write_32bit_cp1_register(dest, val, ) |
---|
2291 | 2378 | #endif |
---|
2292 | 2379 | |
---|
2293 | | -#ifdef HAVE_AS_DSP |
---|
| 2380 | +#ifdef TOOLCHAIN_SUPPORTS_DSP |
---|
2294 | 2381 | #define rddsp(mask) \ |
---|
2295 | 2382 | ({ \ |
---|
2296 | 2383 | unsigned int __dspctl; \ |
---|
2297 | 2384 | \ |
---|
2298 | 2385 | __asm__ __volatile__( \ |
---|
2299 | 2386 | " .set push \n" \ |
---|
| 2387 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2300 | 2388 | " .set dsp \n" \ |
---|
2301 | 2389 | " rddsp %0, %x1 \n" \ |
---|
2302 | 2390 | " .set pop \n" \ |
---|
.. | .. |
---|
2309 | 2397 | do { \ |
---|
2310 | 2398 | __asm__ __volatile__( \ |
---|
2311 | 2399 | " .set push \n" \ |
---|
| 2400 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2312 | 2401 | " .set dsp \n" \ |
---|
2313 | 2402 | " wrdsp %0, %x1 \n" \ |
---|
2314 | 2403 | " .set pop \n" \ |
---|
.. | .. |
---|
2321 | 2410 | long mflo0; \ |
---|
2322 | 2411 | __asm__( \ |
---|
2323 | 2412 | " .set push \n" \ |
---|
| 2413 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2324 | 2414 | " .set dsp \n" \ |
---|
2325 | 2415 | " mflo %0, $ac0 \n" \ |
---|
2326 | 2416 | " .set pop \n" \ |
---|
.. | .. |
---|
2333 | 2423 | long mflo1; \ |
---|
2334 | 2424 | __asm__( \ |
---|
2335 | 2425 | " .set push \n" \ |
---|
| 2426 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2336 | 2427 | " .set dsp \n" \ |
---|
2337 | 2428 | " mflo %0, $ac1 \n" \ |
---|
2338 | 2429 | " .set pop \n" \ |
---|
.. | .. |
---|
2345 | 2436 | long mflo2; \ |
---|
2346 | 2437 | __asm__( \ |
---|
2347 | 2438 | " .set push \n" \ |
---|
| 2439 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2348 | 2440 | " .set dsp \n" \ |
---|
2349 | 2441 | " mflo %0, $ac2 \n" \ |
---|
2350 | 2442 | " .set pop \n" \ |
---|
.. | .. |
---|
2357 | 2449 | long mflo3; \ |
---|
2358 | 2450 | __asm__( \ |
---|
2359 | 2451 | " .set push \n" \ |
---|
| 2452 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2360 | 2453 | " .set dsp \n" \ |
---|
2361 | 2454 | " mflo %0, $ac3 \n" \ |
---|
2362 | 2455 | " .set pop \n" \ |
---|
.. | .. |
---|
2369 | 2462 | long mfhi0; \ |
---|
2370 | 2463 | __asm__( \ |
---|
2371 | 2464 | " .set push \n" \ |
---|
| 2465 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2372 | 2466 | " .set dsp \n" \ |
---|
2373 | 2467 | " mfhi %0, $ac0 \n" \ |
---|
2374 | 2468 | " .set pop \n" \ |
---|
.. | .. |
---|
2381 | 2475 | long mfhi1; \ |
---|
2382 | 2476 | __asm__( \ |
---|
2383 | 2477 | " .set push \n" \ |
---|
| 2478 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2384 | 2479 | " .set dsp \n" \ |
---|
2385 | 2480 | " mfhi %0, $ac1 \n" \ |
---|
2386 | 2481 | " .set pop \n" \ |
---|
.. | .. |
---|
2393 | 2488 | long mfhi2; \ |
---|
2394 | 2489 | __asm__( \ |
---|
2395 | 2490 | " .set push \n" \ |
---|
| 2491 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2396 | 2492 | " .set dsp \n" \ |
---|
2397 | 2493 | " mfhi %0, $ac2 \n" \ |
---|
2398 | 2494 | " .set pop \n" \ |
---|
.. | .. |
---|
2405 | 2501 | long mfhi3; \ |
---|
2406 | 2502 | __asm__( \ |
---|
2407 | 2503 | " .set push \n" \ |
---|
| 2504 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2408 | 2505 | " .set dsp \n" \ |
---|
2409 | 2506 | " mfhi %0, $ac3 \n" \ |
---|
2410 | 2507 | " .set pop \n" \ |
---|
.. | .. |
---|
2417 | 2514 | ({ \ |
---|
2418 | 2515 | __asm__( \ |
---|
2419 | 2516 | " .set push \n" \ |
---|
| 2517 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2420 | 2518 | " .set dsp \n" \ |
---|
2421 | 2519 | " mtlo %0, $ac0 \n" \ |
---|
2422 | 2520 | " .set pop \n" \ |
---|
.. | .. |
---|
2428 | 2526 | ({ \ |
---|
2429 | 2527 | __asm__( \ |
---|
2430 | 2528 | " .set push \n" \ |
---|
| 2529 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2431 | 2530 | " .set dsp \n" \ |
---|
2432 | 2531 | " mtlo %0, $ac1 \n" \ |
---|
2433 | 2532 | " .set pop \n" \ |
---|
.. | .. |
---|
2439 | 2538 | ({ \ |
---|
2440 | 2539 | __asm__( \ |
---|
2441 | 2540 | " .set push \n" \ |
---|
| 2541 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2442 | 2542 | " .set dsp \n" \ |
---|
2443 | 2543 | " mtlo %0, $ac2 \n" \ |
---|
2444 | 2544 | " .set pop \n" \ |
---|
.. | .. |
---|
2450 | 2550 | ({ \ |
---|
2451 | 2551 | __asm__( \ |
---|
2452 | 2552 | " .set push \n" \ |
---|
| 2553 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2453 | 2554 | " .set dsp \n" \ |
---|
2454 | 2555 | " mtlo %0, $ac3 \n" \ |
---|
2455 | 2556 | " .set pop \n" \ |
---|
.. | .. |
---|
2461 | 2562 | ({ \ |
---|
2462 | 2563 | __asm__( \ |
---|
2463 | 2564 | " .set push \n" \ |
---|
| 2565 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2464 | 2566 | " .set dsp \n" \ |
---|
2465 | 2567 | " mthi %0, $ac0 \n" \ |
---|
2466 | 2568 | " .set pop \n" \ |
---|
.. | .. |
---|
2472 | 2574 | ({ \ |
---|
2473 | 2575 | __asm__( \ |
---|
2474 | 2576 | " .set push \n" \ |
---|
| 2577 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2475 | 2578 | " .set dsp \n" \ |
---|
2476 | 2579 | " mthi %0, $ac1 \n" \ |
---|
2477 | 2580 | " .set pop \n" \ |
---|
.. | .. |
---|
2483 | 2586 | ({ \ |
---|
2484 | 2587 | __asm__( \ |
---|
2485 | 2588 | " .set push \n" \ |
---|
| 2589 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2486 | 2590 | " .set dsp \n" \ |
---|
2487 | 2591 | " mthi %0, $ac2 \n" \ |
---|
2488 | 2592 | " .set pop \n" \ |
---|
.. | .. |
---|
2494 | 2598 | ({ \ |
---|
2495 | 2599 | __asm__( \ |
---|
2496 | 2600 | " .set push \n" \ |
---|
| 2601 | + " .set " MIPS_ISA_LEVEL " \n" \ |
---|
2497 | 2602 | " .set dsp \n" \ |
---|
2498 | 2603 | " mthi %0, $ac3 \n" \ |
---|
2499 | 2604 | " .set pop \n" \ |
---|
.. | .. |
---|
2618 | 2723 | |
---|
2619 | 2724 | static inline void tlb_read(void) |
---|
2620 | 2725 | { |
---|
2621 | | -#if MIPS34K_MISSED_ITLB_WAR |
---|
| 2726 | +#ifdef CONFIG_WAR_MIPS34K_MISSED_ITLB |
---|
2622 | 2727 | int res = 0; |
---|
2623 | 2728 | |
---|
2624 | 2729 | __asm__ __volatile__( |
---|
.. | .. |
---|
2640 | 2745 | "tlbr\n\t" |
---|
2641 | 2746 | ".set reorder"); |
---|
2642 | 2747 | |
---|
2643 | | -#if MIPS34K_MISSED_ITLB_WAR |
---|
| 2748 | +#ifdef CONFIG_WAR_MIPS34K_MISSED_ITLB |
---|
2644 | 2749 | if ((res & _ULCAST_(1))) |
---|
2645 | 2750 | __asm__ __volatile__( |
---|
2646 | 2751 | " .set push \n" |
---|
.. | .. |
---|
2777 | 2882 | __BUILD_SET_C0(cause) |
---|
2778 | 2883 | __BUILD_SET_C0(config) |
---|
2779 | 2884 | __BUILD_SET_C0(config5) |
---|
| 2885 | +__BUILD_SET_C0(config6) |
---|
2780 | 2886 | __BUILD_SET_C0(config7) |
---|
| 2887 | +__BUILD_SET_C0(diag) |
---|
2781 | 2888 | __BUILD_SET_C0(intcontrol) |
---|
2782 | 2889 | __BUILD_SET_C0(intctl) |
---|
2783 | 2890 | __BUILD_SET_C0(srsmap) |
---|