Lines Matching +full:cs +full:- +full:dev +full:- +full:assoc

5  *  Copyright (c) 2003-2007 Jocelyn Mayer
23 #include "disas/dis-asm.h"
28 #include "cpu-models.h"
29 #include "mmu-hash32.h"
30 #include "mmu-hash64.h"
31 #include "qemu/error-report.h"
33 #include "qemu/qemu-print.h"
37 #include "hw/qdev-properties.h"
39 #include "mmu-book3s-v3.h"
47 #include "power8-pmu.h"
61 /* Altivec always uses round-to-nearest */
62 set_float_rounding_mode(float_round_nearest_even, &env->vec_status);
675 #define SPR_BOOKE_IVORxx (-1)
831 static inline uint32_t register_tlbncfg(uint32_t assoc, uint32_t minsize,
835 return (assoc << TLBnCFG_ASSOC_SHIFT) |
862 (i == 2 && (env->insns_flags & PPC_64B))
867 if (env->nb_pids > 1) {
873 if (env->nb_pids > 2) {
893 switch (env->nb_ways) {
1635 * HEIR => SPR 339 (Power 2.05 hypv) (64-bit reg from 3.1)
1637 * perf => 768-783 (Power 2.04)
1638 * perf => 784-799 (Power 2.04)
1650 env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000100;
1651 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1652 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1653 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1654 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1655 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1656 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1657 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1658 env->excp_vectors[POWERPC_EXCP_PIT] = 0x00001000;
1659 env->excp_vectors[POWERPC_EXCP_FIT] = 0x00001010;
1660 env->excp_vectors[POWERPC_EXCP_WDT] = 0x00001020;
1661 env->excp_vectors[POWERPC_EXCP_DTLB] = 0x00001100;
1662 env->excp_vectors[POWERPC_EXCP_ITLB] = 0x00001200;
1663 env->excp_vectors[POWERPC_EXCP_DEBUG] = 0x00002000;
1664 env->ivor_mask = 0x0000FFF0UL;
1665 env->ivpr_mask = 0xFFFF0000UL;
1667 env->hreset_vector = 0xFFFFFFFCUL;
1674 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1675 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1676 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1677 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1678 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1679 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1680 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1681 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1682 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1683 env->excp_vectors[POWERPC_EXCP_FPA] = 0x00000E00;
1684 env->excp_vectors[POWERPC_EXCP_EMUL] = 0x00001000;
1685 env->excp_vectors[POWERPC_EXCP_DABR] = 0x00001C00;
1686 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001C00;
1687 env->excp_vectors[POWERPC_EXCP_MEXTBR] = 0x00001E00;
1688 env->excp_vectors[POWERPC_EXCP_NMEXTBR] = 0x00001F00;
1689 env->ivor_mask = 0x0000FFF0UL;
1690 env->ivpr_mask = 0xFFFF0000UL;
1692 env->hreset_vector = 0x00000100UL;
1699 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1700 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1701 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1702 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1703 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1704 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1705 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1706 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1707 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1708 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1709 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1710 env->excp_vectors[POWERPC_EXCP_FPA] = 0x00000E00;
1711 env->excp_vectors[POWERPC_EXCP_EMUL] = 0x00001000;
1712 env->excp_vectors[POWERPC_EXCP_ITLB] = 0x00001100;
1713 env->excp_vectors[POWERPC_EXCP_DTLB] = 0x00001200;
1714 env->excp_vectors[POWERPC_EXCP_ITLBE] = 0x00001300;
1715 env->excp_vectors[POWERPC_EXCP_DTLBE] = 0x00001400;
1716 env->excp_vectors[POWERPC_EXCP_DABR] = 0x00001C00;
1717 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001C00;
1718 env->excp_vectors[POWERPC_EXCP_MEXTBR] = 0x00001E00;
1719 env->excp_vectors[POWERPC_EXCP_NMEXTBR] = 0x00001F00;
1720 env->ivor_mask = 0x0000FFF0UL;
1721 env->ivpr_mask = 0xFFFF0000UL;
1723 env->hreset_vector = 0x00000100UL;
1730 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1731 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1732 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1733 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1734 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1735 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1736 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1737 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1738 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1739 env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000A00;
1740 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1741 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1742 env->excp_vectors[POWERPC_EXCP_IFTLB] = 0x00001000;
1743 env->excp_vectors[POWERPC_EXCP_DLTLB] = 0x00001100;
1744 env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200;
1745 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1746 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400;
1748 env->hreset_vector = 0x00000100UL;
1755 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000FFC;
1756 env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000000;
1757 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000000;
1758 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000000;
1759 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000000;
1760 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000000;
1761 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000000;
1762 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000000;
1763 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000000;
1764 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000000;
1765 env->excp_vectors[POWERPC_EXCP_APU] = 0x00000000;
1766 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000000;
1767 env->excp_vectors[POWERPC_EXCP_FIT] = 0x00000000;
1768 env->excp_vectors[POWERPC_EXCP_WDT] = 0x00000000;
1769 env->excp_vectors[POWERPC_EXCP_DTLB] = 0x00000000;
1770 env->excp_vectors[POWERPC_EXCP_ITLB] = 0x00000000;
1771 env->excp_vectors[POWERPC_EXCP_DEBUG] = 0x00000000;
1777 env->excp_vectors[POWERPC_EXCP_SPEU] = 0x00000000;
1778 env->excp_vectors[POWERPC_EXCP_EFPDI] = 0x00000000;
1780 env->excp_vectors[POWERPC_EXCP_EFPRI] = 0x00000000;
1781 env->ivor_mask = 0x0000FFF7UL;
1782 env->ivpr_mask = ivpr_mask;
1784 env->hreset_vector = 0xFFFFFFFCUL;
1791 env->excp_vectors[POWERPC_EXCP_CRITICAL] = 0x00000000;
1792 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000000;
1793 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000000;
1794 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000000;
1795 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000000;
1796 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000000;
1797 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000000;
1798 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000000;
1799 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000000;
1800 env->excp_vectors[POWERPC_EXCP_APU] = 0x00000000;
1801 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000000;
1802 env->excp_vectors[POWERPC_EXCP_FIT] = 0x00000000;
1803 env->excp_vectors[POWERPC_EXCP_WDT] = 0x00000000;
1804 env->excp_vectors[POWERPC_EXCP_DTLB] = 0x00000000;
1805 env->excp_vectors[POWERPC_EXCP_ITLB] = 0x00000000;
1806 env->excp_vectors[POWERPC_EXCP_DEBUG] = 0x00000000;
1807 env->ivor_mask = 0x0000FFF0UL;
1808 env->ivpr_mask = 0xFFFF0000UL;
1810 env->hreset_vector = 0xFFFFFFFCUL;
1817 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1818 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1819 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1820 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1821 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1822 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1823 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1824 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1825 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1826 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1827 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1828 env->excp_vectors[POWERPC_EXCP_IFTLB] = 0x00001000;
1829 env->excp_vectors[POWERPC_EXCP_DLTLB] = 0x00001100;
1830 env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200;
1831 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1832 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400;
1834 env->hreset_vector = 0x00000100UL;
1841 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1842 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1843 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1844 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1845 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1846 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1847 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1848 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1849 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1850 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1851 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1852 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
1853 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1854 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400;
1856 env->hreset_vector = 0x00000100UL;
1863 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1864 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1865 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1866 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1867 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1868 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1869 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1870 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1871 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1872 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1873 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1874 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
1875 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1876 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400;
1877 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700;
1879 env->hreset_vector = 0x00000100UL;
1886 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1887 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1888 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1889 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1890 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1891 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1892 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1893 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1894 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1895 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1896 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1897 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
1898 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1899 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400;
1901 env->hreset_vector = 0x00000100UL;
1908 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1909 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1910 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1911 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1912 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1913 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1914 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1915 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1916 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1917 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1918 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1919 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
1920 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1921 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700;
1923 env->hreset_vector = 0x00000100UL;
1931 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1932 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1933 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1934 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1935 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1936 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1937 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1938 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1939 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1940 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1941 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1942 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
1943 env->excp_vectors[POWERPC_EXCP_IFTLB] = 0x00001000;
1944 env->excp_vectors[POWERPC_EXCP_DLTLB] = 0x00001100;
1945 env->excp_vectors[POWERPC_EXCP_DSTLB] = 0x00001200;
1946 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1947 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400;
1948 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700;
1950 env->hreset_vector = 0x00000100UL;
1957 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1958 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1959 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1960 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1961 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1962 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1963 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1964 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1965 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1966 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1967 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1968 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
1969 env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20;
1970 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1971 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400;
1972 env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001600;
1973 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001700;
1975 env->hreset_vector = 0x00000100UL;
1982 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
1983 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
1984 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
1985 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
1986 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
1987 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
1988 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
1989 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
1990 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
1991 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
1992 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
1993 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
1994 env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20;
1995 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
1996 env->excp_vectors[POWERPC_EXCP_SMI] = 0x00001400;
1997 env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001600;
1999 env->hreset_vector = 0x00000100UL;
2007 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
2008 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
2009 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
2010 env->excp_vectors[POWERPC_EXCP_DSEG] = 0x00000380;
2011 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
2012 env->excp_vectors[POWERPC_EXCP_ISEG] = 0x00000480;
2013 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2014 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
2015 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
2016 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
2017 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
2018 env->excp_vectors[POWERPC_EXCP_HDECR] = 0x00000980;
2019 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
2020 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
2021 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
2022 env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20;
2023 env->excp_vectors[POWERPC_EXCP_IABR] = 0x00001300;
2024 env->excp_vectors[POWERPC_EXCP_MAINT] = 0x00001600;
2025 env->excp_vectors[POWERPC_EXCP_VPUA] = 0x00001700;
2026 env->excp_vectors[POWERPC_EXCP_THERM] = 0x00001800;
2028 env->hreset_vector = 0x0000000000000100ULL;
2035 env->excp_vectors[POWERPC_EXCP_RESET] = 0x00000100;
2036 env->excp_vectors[POWERPC_EXCP_MCHECK] = 0x00000200;
2037 env->excp_vectors[POWERPC_EXCP_DSI] = 0x00000300;
2038 env->excp_vectors[POWERPC_EXCP_DSEG] = 0x00000380;
2039 env->excp_vectors[POWERPC_EXCP_ISI] = 0x00000400;
2040 env->excp_vectors[POWERPC_EXCP_ISEG] = 0x00000480;
2041 env->excp_vectors[POWERPC_EXCP_EXTERNAL] = 0x00000500;
2042 env->excp_vectors[POWERPC_EXCP_ALIGN] = 0x00000600;
2043 env->excp_vectors[POWERPC_EXCP_PROGRAM] = 0x00000700;
2044 env->excp_vectors[POWERPC_EXCP_FPU] = 0x00000800;
2045 env->excp_vectors[POWERPC_EXCP_DECR] = 0x00000900;
2046 env->excp_vectors[POWERPC_EXCP_HDECR] = 0x00000980;
2047 env->excp_vectors[POWERPC_EXCP_SYSCALL] = 0x00000C00;
2048 env->excp_vectors[POWERPC_EXCP_TRACE] = 0x00000D00;
2049 env->excp_vectors[POWERPC_EXCP_HDSI] = 0x00000E00;
2050 env->excp_vectors[POWERPC_EXCP_HISI] = 0x00000E20;
2051 env->excp_vectors[POWERPC_EXCP_HV_EMU] = 0x00000E40;
2052 env->excp_vectors[POWERPC_EXCP_HV_MAINT] = 0x00000E60;
2053 env->excp_vectors[POWERPC_EXCP_PERFM] = 0x00000F00;
2054 env->excp_vectors[POWERPC_EXCP_VPU] = 0x00000F20;
2055 env->excp_vectors[POWERPC_EXCP_VSXU] = 0x00000F40;
2057 env->hreset_vector = 0x0000000000000100ULL;
2066 env->excp_vectors[POWERPC_EXCP_SDOOR] = 0x00000A00;
2067 env->excp_vectors[POWERPC_EXCP_FU] = 0x00000F60;
2068 env->excp_vectors[POWERPC_EXCP_HV_FU] = 0x00000F80;
2069 env->excp_vectors[POWERPC_EXCP_SDOOR_HV] = 0x00000E80;
2072 env->excp_vectors[POWERPC_EXCP_PERFM_EBB] = 0x0;
2073 env->excp_vectors[POWERPC_EXCP_EXTERNAL_EBB] = 0x0;
2082 env->excp_vectors[POWERPC_EXCP_HVIRT] = 0x00000EA0;
2083 env->excp_vectors[POWERPC_EXCP_SYSCALL_VECTORED] = 0x00017000;
2096 if (env->spr[SPR_HID0] & 0x00E00000) {
2105 if (env->spr[SPR_HID0] & 0x00600000) {
2115 if (env->spr[SPR_HID0] & HID0_ENABLE_ATTN) {
2124 if (env->spr[SPR_HID0] & HID0_POWER9_ENABLE_ATTN) {
2135 env->nb_tlb = 64;
2136 env->nb_ways = 1;
2137 env->tlb_type = TLB_EMB;
2149 env->dcache_line_size = 32;
2150 env->icache_line_size = 32;
2163 dc->desc = "PowerPC 405";
2164 pcc->init_proc = init_proc_405;
2165 pcc->check_pow = check_pow_nocheck;
2166 pcc->check_attn = check_attn_none;
2167 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
2174 pcc->msr_mask = (1ull << MSR_WE) |
2184 pcc->mmu_model = POWERPC_MMU_SOFT_4xx;
2185 pcc->excp_model = POWERPC_EXCP_40x;
2186 pcc->bus_model = PPC_FLAGS_INPUT_405;
2187 pcc->bfd_mach = bfd_mach_ppc_403;
2188 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2218 env->dcache_line_size = 32;
2219 env->icache_line_size = 32;
2231 dc->desc = "PowerPC 440 EP";
2232 pcc->init_proc = init_proc_440EP;
2233 pcc->check_pow = check_pow_nocheck;
2234 pcc->check_attn = check_attn_none;
2235 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2245 pcc->msr_mask = (1ull << MSR_POW) |
2257 pcc->mmu_model = POWERPC_MMU_BOOKE;
2258 pcc->excp_model = POWERPC_EXCP_BOOKE;
2259 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2260 pcc->bfd_mach = bfd_mach_ppc_403;
2261 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2270 dc->desc = "PowerPC 460 EX";
2271 pcc->init_proc = init_proc_440EP;
2272 pcc->check_pow = check_pow_nocheck;
2273 pcc->check_attn = check_attn_none;
2274 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2284 pcc->msr_mask = (1ull << MSR_POW) |
2296 pcc->mmu_model = POWERPC_MMU_BOOKE;
2297 pcc->excp_model = POWERPC_EXCP_BOOKE;
2298 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2299 pcc->bfd_mach = bfd_mach_ppc_403;
2300 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2312 env->dcache_line_size = 32;
2313 env->icache_line_size = 32;
2325 dc->desc = "PowerPC 440 GP";
2326 pcc->init_proc = init_proc_440GP;
2327 pcc->check_pow = check_pow_nocheck;
2328 pcc->check_attn = check_attn_none;
2329 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2336 pcc->msr_mask = (1ull << MSR_POW) |
2348 pcc->mmu_model = POWERPC_MMU_BOOKE;
2349 pcc->excp_model = POWERPC_EXCP_BOOKE;
2350 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2351 pcc->bfd_mach = bfd_mach_ppc_403;
2352 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2382 env->dcache_line_size = 32;
2383 env->icache_line_size = 32;
2395 dc->desc = "PowerPC 440x5";
2396 pcc->init_proc = init_proc_440x5;
2397 pcc->check_pow = check_pow_nocheck;
2398 pcc->check_attn = check_attn_none;
2399 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2406 pcc->msr_mask = (1ull << MSR_POW) |
2418 pcc->mmu_model = POWERPC_MMU_BOOKE;
2419 pcc->excp_model = POWERPC_EXCP_BOOKE;
2420 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2421 pcc->bfd_mach = bfd_mach_ppc_403;
2422 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2431 dc->desc = "PowerPC 440x5 with double precision FPU";
2432 pcc->init_proc = init_proc_440x5;
2433 pcc->check_pow = check_pow_nocheck;
2434 pcc->check_attn = check_attn_none;
2435 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2444 pcc->insns_flags2 = PPC2_FP_CVT_S64;
2445 pcc->msr_mask = (1ull << MSR_POW) |
2457 pcc->mmu_model = POWERPC_MMU_BOOKE;
2458 pcc->excp_model = POWERPC_EXCP_BOOKE;
2459 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2460 pcc->bfd_mach = bfd_mach_ppc_403;
2461 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DWE |
2470 env->dcache_line_size = 32;
2471 env->icache_line_size = 32;
2480 dc->desc = "Freescale 5xx cores (aka RCPU)";
2481 pcc->init_proc = init_proc_MPC5xx;
2482 pcc->check_pow = check_pow_none;
2483 pcc->check_attn = check_attn_none;
2484 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2488 pcc->msr_mask = (1ull << MSR_ILE) |
2500 pcc->mmu_model = POWERPC_MMU_REAL;
2501 pcc->excp_model = POWERPC_EXCP_6xx;
2502 pcc->bus_model = PPC_FLAGS_INPUT_RCPU;
2503 pcc->bfd_mach = bfd_mach_ppc_505;
2504 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
2513 env->dcache_line_size = 32;
2514 env->icache_line_size = 32;
2523 dc->desc = "Freescale 8xx cores (aka PowerQUICC)";
2524 pcc->init_proc = init_proc_MPC8xx;
2525 pcc->check_pow = check_pow_none;
2526 pcc->check_attn = check_attn_none;
2527 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING |
2530 pcc->msr_mask = (1ull << MSR_ILE) |
2542 pcc->mmu_model = POWERPC_MMU_MPC8xx;
2543 pcc->excp_model = POWERPC_EXCP_6xx;
2544 pcc->bus_model = PPC_FLAGS_INPUT_RCPU;
2545 pcc->bfd_mach = bfd_mach_ppc_860;
2546 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
2550 /* Freescale 82xx cores (aka PowerQUICC-II) */
2563 env->dcache_line_size = 32;
2564 env->icache_line_size = 32;
2574 dc->desc = "PowerPC G2";
2575 pcc->init_proc = init_proc_G2;
2576 pcc->check_pow = check_pow_hid0;
2577 pcc->check_attn = check_attn_none;
2578 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
2585 pcc->msr_mask = (1ull << MSR_POW) |
2600 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
2601 pcc->excp_model = POWERPC_EXCP_6xx;
2602 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
2603 pcc->bfd_mach = bfd_mach_ppc_ec603e;
2604 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |
2613 dc->desc = "PowerPC G2LE";
2614 pcc->init_proc = init_proc_G2;
2615 pcc->check_pow = check_pow_hid0;
2616 pcc->check_attn = check_attn_none;
2617 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
2624 pcc->msr_mask = (1ull << MSR_POW) |
2641 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
2642 pcc->excp_model = POWERPC_EXCP_6xx;
2643 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
2644 pcc->bfd_mach = bfd_mach_ppc_ec603e;
2645 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |
2738 env->dcache_line_size = 32;
2739 env->icache_line_size = 32;
2748 dc->desc = "e200 core";
2749 pcc->init_proc = init_proc_e200;
2750 pcc->check_pow = check_pow_hid0;
2751 pcc->check_attn = check_attn_none;
2760 * all SPE multiply-accumulate instructions
2762 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL |
2769 pcc->msr_mask = (1ull << MSR_UCLE) |
2783 pcc->mmu_model = POWERPC_MMU_BOOKE206;
2784 pcc->excp_model = POWERPC_EXCP_BOOKE;
2785 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
2786 pcc->bfd_mach = bfd_mach_ppc_860;
2787 pcc->flags = POWERPC_FLAG_SPE | POWERPC_FLAG_CE |
2852 env->nb_pids = 3;
2853 env->nb_ways = 2;
2870 env->nb_pids = 1;
2876 env->spr[SPR_PVR]);
2883 env->dcache_line_size = 32;
2884 env->icache_line_size = 32;
2888 env->dcache_line_size = 64;
2889 env->icache_line_size = 64;
2894 env->dcache_line_size = 32;
2895 env->icache_line_size = 32;
2901 env->spr[SPR_PVR]);
3014 env->nb_tlb = 0;
3015 env->tlb_type = TLB_MAS;
3017 env->nb_tlb += booke206_tlb_size(env, i);
3036 dc->desc = "e500v1 core";
3037 pcc->init_proc = init_proc_e500v1;
3038 pcc->check_pow = check_pow_hid0;
3039 pcc->check_attn = check_attn_none;
3040 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL |
3046 pcc->insns_flags2 = PPC2_BOOKE206;
3047 pcc->msr_mask = (1ull << MSR_UCLE) |
3061 pcc->mmu_model = POWERPC_MMU_BOOKE206;
3062 pcc->excp_model = POWERPC_EXCP_BOOKE;
3063 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
3064 pcc->bfd_mach = bfd_mach_ppc_860;
3065 pcc->flags = POWERPC_FLAG_SPE | POWERPC_FLAG_CE |
3080 dc->desc = "e500v2 core";
3081 pcc->init_proc = init_proc_e500v2;
3082 pcc->check_pow = check_pow_hid0;
3083 pcc->check_attn = check_attn_none;
3084 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL |
3090 pcc->insns_flags2 = PPC2_BOOKE206;
3091 pcc->msr_mask = (1ull << MSR_UCLE) |
3105 pcc->mmu_model = POWERPC_MMU_BOOKE206;
3106 pcc->excp_model = POWERPC_EXCP_BOOKE;
3107 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
3108 pcc->bfd_mach = bfd_mach_ppc_860;
3109 pcc->flags = POWERPC_FLAG_SPE | POWERPC_FLAG_CE |
3124 dc->desc = "e500mc core";
3125 pcc->init_proc = init_proc_e500mc;
3126 pcc->check_pow = check_pow_none;
3127 pcc->check_attn = check_attn_none;
3128 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_MFTB |
3136 pcc->insns_flags2 = PPC2_BOOKE206 | PPC2_PRCNTL;
3137 pcc->msr_mask = (1ull << MSR_GS) |
3151 pcc->mmu_model = POWERPC_MMU_BOOKE206;
3152 pcc->excp_model = POWERPC_EXCP_BOOKE;
3153 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
3155 pcc->bfd_mach = bfd_mach_ppc_e500;
3156 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DE |
3171 dc->desc = "e5500 core";
3172 pcc->init_proc = init_proc_e5500;
3173 pcc->check_pow = check_pow_none;
3174 pcc->check_attn = check_attn_none;
3175 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_MFTB |
3184 pcc->insns_flags2 = PPC2_BOOKE206 | PPC2_PRCNTL | PPC2_PERM_ISA206 |
3186 pcc->msr_mask = (1ull << MSR_CM) |
3201 pcc->mmu_model = POWERPC_MMU_BOOKE206;
3202 pcc->excp_model = POWERPC_EXCP_BOOKE;
3203 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
3205 pcc->bfd_mach = bfd_mach_ppc_e500;
3206 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DE |
3220 dc->desc = "e6500 core";
3221 pcc->init_proc = init_proc_e6500;
3222 pcc->check_pow = check_pow_none;
3223 pcc->check_attn = check_attn_none;
3224 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_MFTB |
3233 pcc->insns_flags2 = PPC2_BOOKE206 | PPC2_PRCNTL | PPC2_PERM_ISA206 |
3235 pcc->msr_mask = (1ull << MSR_CM) |
3251 pcc->mmu_model = POWERPC_MMU_BOOKE206;
3252 pcc->excp_model = POWERPC_EXCP_BOOKE;
3253 pcc->bus_model = PPC_FLAGS_INPUT_BookE;
3254 pcc->bfd_mach = bfd_mach_ppc_e500;
3255 pcc->flags = POWERPC_FLAG_CE | POWERPC_FLAG_DE |
3261 /* Non-embedded PowerPC */
3272 env->dcache_line_size = 32;
3273 env->icache_line_size = 32;
3283 dc->desc = "PowerPC 603";
3284 pcc->init_proc = init_proc_603;
3285 pcc->check_pow = check_pow_hid0;
3286 pcc->check_attn = check_attn_none;
3287 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3294 pcc->msr_mask = (1ull << MSR_POW) |
3310 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
3311 pcc->excp_model = POWERPC_EXCP_6xx;
3312 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3313 pcc->bfd_mach = bfd_mach_ppc_603;
3314 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |
3323 dc->desc = "PowerPC 603e";
3324 pcc->init_proc = init_proc_603;
3325 pcc->check_pow = check_pow_hid0;
3326 pcc->check_attn = check_attn_none;
3327 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3334 pcc->msr_mask = (1ull << MSR_POW) |
3350 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
3351 pcc->excp_model = POWERPC_EXCP_6xx;
3352 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3353 pcc->bfd_mach = bfd_mach_ppc_ec603e;
3354 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |
3369 dc->desc = "e300 core";
3370 pcc->init_proc = init_proc_e300;
3371 pcc->check_pow = check_pow_hid0;
3372 pcc->check_attn = check_attn_none;
3373 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3380 pcc->msr_mask = (1ull << MSR_POW) |
3397 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
3398 pcc->excp_model = POWERPC_EXCP_6xx;
3399 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3400 pcc->bfd_mach = bfd_mach_ppc_603;
3401 pcc->flags = POWERPC_FLAG_TGPR | POWERPC_FLAG_SE |
3414 env->dcache_line_size = 32;
3415 env->icache_line_size = 32;
3425 dc->desc = "PowerPC 604";
3426 pcc->init_proc = init_proc_604;
3427 pcc->check_pow = check_pow_nocheck;
3428 pcc->check_attn = check_attn_none;
3429 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3436 pcc->msr_mask = (1ull << MSR_POW) |
3452 pcc->mmu_model = POWERPC_MMU_32B;
3453 pcc->excp_model = POWERPC_EXCP_6xx;
3454 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3455 pcc->bfd_mach = bfd_mach_ppc_604;
3456 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3471 dc->desc = "PowerPC 604E";
3472 pcc->init_proc = init_proc_604E;
3473 pcc->check_pow = check_pow_nocheck;
3474 pcc->check_attn = check_attn_none;
3475 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3482 pcc->msr_mask = (1ull << MSR_POW) |
3498 pcc->mmu_model = POWERPC_MMU_32B;
3499 pcc->excp_model = POWERPC_EXCP_6xx;
3500 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3501 pcc->bfd_mach = bfd_mach_ppc_604;
3502 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3517 env->dcache_line_size = 32;
3518 env->icache_line_size = 32;
3528 dc->desc = "PowerPC 740";
3529 pcc->init_proc = init_proc_740;
3530 pcc->check_pow = check_pow_hid0;
3531 pcc->check_attn = check_attn_none;
3532 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3539 pcc->msr_mask = (1ull << MSR_POW) |
3555 pcc->mmu_model = POWERPC_MMU_32B;
3556 pcc->excp_model = POWERPC_EXCP_7xx;
3557 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3558 pcc->bfd_mach = bfd_mach_ppc_750;
3559 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3583 env->dcache_line_size = 32;
3584 env->icache_line_size = 32;
3594 dc->desc = "PowerPC 750";
3595 pcc->init_proc = init_proc_750;
3596 pcc->check_pow = check_pow_hid0;
3597 pcc->check_attn = check_attn_none;
3598 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3605 pcc->msr_mask = (1ull << MSR_POW) |
3621 pcc->mmu_model = POWERPC_MMU_32B;
3622 pcc->excp_model = POWERPC_EXCP_7xx;
3623 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3624 pcc->bfd_mach = bfd_mach_ppc_750;
3625 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3730 env->dcache_line_size = 32;
3731 env->icache_line_size = 32;
3741 dc->desc = "PowerPC 750 CL";
3742 pcc->init_proc = init_proc_750cl;
3743 pcc->check_pow = check_pow_hid0;
3744 pcc->check_attn = check_attn_none;
3784 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3791 pcc->msr_mask = (1ull << MSR_POW) |
3807 pcc->mmu_model = POWERPC_MMU_32B;
3808 pcc->excp_model = POWERPC_EXCP_7xx;
3809 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3810 pcc->bfd_mach = bfd_mach_ppc_750;
3811 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3838 env->dcache_line_size = 32;
3839 env->icache_line_size = 32;
3849 dc->desc = "PowerPC 750CX";
3850 pcc->init_proc = init_proc_750cx;
3851 pcc->check_pow = check_pow_hid0;
3852 pcc->check_attn = check_attn_none;
3853 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3860 pcc->msr_mask = (1ull << MSR_POW) |
3876 pcc->mmu_model = POWERPC_MMU_32B;
3877 pcc->excp_model = POWERPC_EXCP_7xx;
3878 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3879 pcc->bfd_mach = bfd_mach_ppc_750;
3880 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3911 env->dcache_line_size = 32;
3912 env->icache_line_size = 32;
3922 dc->desc = "PowerPC 750FX";
3923 pcc->init_proc = init_proc_750fx;
3924 pcc->check_pow = check_pow_hid0;
3925 pcc->check_attn = check_attn_none;
3926 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
3933 pcc->msr_mask = (1ull << MSR_POW) |
3949 pcc->mmu_model = POWERPC_MMU_32B;
3950 pcc->excp_model = POWERPC_EXCP_7xx;
3951 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
3952 pcc->bfd_mach = bfd_mach_ppc_750;
3953 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
3984 env->dcache_line_size = 32;
3985 env->icache_line_size = 32;
3995 dc->desc = "PowerPC 750GX";
3996 pcc->init_proc = init_proc_750gx;
3997 pcc->check_pow = check_pow_hid0;
3998 pcc->check_attn = check_attn_none;
3999 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4006 pcc->msr_mask = (1ull << MSR_POW) |
4022 pcc->mmu_model = POWERPC_MMU_32B;
4023 pcc->excp_model = POWERPC_EXCP_7xx;
4024 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4025 pcc->bfd_mach = bfd_mach_ppc_750;
4026 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
4044 env->dcache_line_size = 32;
4045 env->icache_line_size = 32;
4055 dc->desc = "PowerPC 745";
4056 pcc->init_proc = init_proc_745;
4057 pcc->check_pow = check_pow_hid0;
4058 pcc->check_attn = check_attn_none;
4059 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4066 pcc->msr_mask = (1ull << MSR_POW) |
4082 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
4083 pcc->excp_model = POWERPC_EXCP_7xx;
4084 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4085 pcc->bfd_mach = bfd_mach_ppc_750;
4086 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
4101 dc->desc = "PowerPC 755";
4102 pcc->init_proc = init_proc_755;
4103 pcc->check_pow = check_pow_hid0;
4104 pcc->check_attn = check_attn_none;
4105 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4112 pcc->msr_mask = (1ull << MSR_POW) |
4128 pcc->mmu_model = POWERPC_MMU_SOFT_6xx;
4129 pcc->excp_model = POWERPC_EXCP_7xx;
4130 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4131 pcc->bfd_mach = bfd_mach_ppc_750;
4132 pcc->flags = POWERPC_FLAG_SE | POWERPC_FLAG_BE |
4157 env->dcache_line_size = 32;
4158 env->icache_line_size = 32;
4168 dc->desc = "PowerPC 7400 (aka G4)";
4169 pcc->init_proc = init_proc_7400;
4170 pcc->check_pow = check_pow_hid0;
4171 pcc->check_attn = check_attn_none;
4172 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4183 pcc->msr_mask = (1ull << MSR_VR) |
4200 pcc->mmu_model = POWERPC_MMU_32B;
4201 pcc->excp_model = POWERPC_EXCP_74xx;
4202 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4203 pcc->bfd_mach = bfd_mach_ppc_7400;
4204 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4237 env->dcache_line_size = 32;
4238 env->icache_line_size = 32;
4248 dc->desc = "PowerPC 7410 (aka G4)";
4249 pcc->init_proc = init_proc_7410;
4250 pcc->check_pow = check_pow_hid0;
4251 pcc->check_attn = check_attn_none;
4252 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4263 pcc->msr_mask = (1ull << MSR_VR) |
4280 pcc->mmu_model = POWERPC_MMU_32B;
4281 pcc->excp_model = POWERPC_EXCP_74xx;
4282 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4283 pcc->bfd_mach = bfd_mach_ppc_7400;
4284 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4338 env->dcache_line_size = 32;
4339 env->icache_line_size = 32;
4349 dc->desc = "PowerPC 7440 (aka G4)";
4350 pcc->init_proc = init_proc_7440;
4351 pcc->check_pow = check_pow_hid0_74xx;
4352 pcc->check_attn = check_attn_none;
4353 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4364 pcc->msr_mask = (1ull << MSR_VR) |
4381 pcc->mmu_model = POWERPC_MMU_32B;
4382 pcc->excp_model = POWERPC_EXCP_74xx;
4383 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4384 pcc->bfd_mach = bfd_mach_ppc_7400;
4385 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4461 env->dcache_line_size = 32;
4462 env->icache_line_size = 32;
4472 dc->desc = "PowerPC 7450 (aka G4)";
4473 pcc->init_proc = init_proc_7450;
4474 pcc->check_pow = check_pow_hid0_74xx;
4475 pcc->check_attn = check_attn_none;
4476 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4487 pcc->msr_mask = (1ull << MSR_VR) |
4504 pcc->mmu_model = POWERPC_MMU_32B;
4505 pcc->excp_model = POWERPC_EXCP_74xx;
4506 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4507 pcc->bfd_mach = bfd_mach_ppc_7400;
4508 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4591 env->dcache_line_size = 32;
4592 env->icache_line_size = 32;
4602 dc->desc = "PowerPC 7445 (aka G4)";
4603 pcc->init_proc = init_proc_7445;
4604 pcc->check_pow = check_pow_hid0_74xx;
4605 pcc->check_attn = check_attn_none;
4606 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4617 pcc->msr_mask = (1ull << MSR_VR) |
4634 pcc->mmu_model = POWERPC_MMU_32B;
4635 pcc->excp_model = POWERPC_EXCP_74xx;
4636 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4637 pcc->bfd_mach = bfd_mach_ppc_7400;
4638 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4723 env->dcache_line_size = 32;
4724 env->icache_line_size = 32;
4734 dc->desc = "PowerPC 7455 (aka G4)";
4735 pcc->init_proc = init_proc_7455;
4736 pcc->check_pow = check_pow_hid0_74xx;
4737 pcc->check_attn = check_attn_none;
4738 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4749 pcc->msr_mask = (1ull << MSR_VR) |
4766 pcc->mmu_model = POWERPC_MMU_32B;
4767 pcc->excp_model = POWERPC_EXCP_74xx;
4768 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4769 pcc->bfd_mach = bfd_mach_ppc_7400;
4770 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
4875 env->dcache_line_size = 32;
4876 env->icache_line_size = 32;
4886 dc->desc = "PowerPC 7457 (aka G4)";
4887 pcc->init_proc = init_proc_7457;
4888 pcc->check_pow = check_pow_hid0_74xx;
4889 pcc->check_attn = check_attn_none;
4890 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
4901 pcc->msr_mask = (1ull << MSR_VR) |
4918 pcc->mmu_model = POWERPC_MMU_32B;
4919 pcc->excp_model = POWERPC_EXCP_74xx;
4920 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
4921 pcc->bfd_mach = bfd_mach_ppc_7400;
4922 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
5010 env->dcache_line_size = 32;
5011 env->icache_line_size = 32;
5021 dc->desc = "PowerPC e600";
5022 pcc->init_proc = init_proc_e600;
5023 pcc->check_pow = check_pow_hid0_74xx;
5024 pcc->check_attn = check_attn_none;
5025 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
5036 pcc->insns_flags2 = PPC_NONE;
5037 pcc->msr_mask = (1ull << MSR_VR) |
5054 pcc->mmu_model = POWERPC_MMU_32B;
5055 pcc->excp_model = POWERPC_EXCP_74xx;
5056 pcc->bus_model = PPC_FLAGS_INPUT_6xx;
5057 pcc->bfd_mach = bfd_mach_ppc_7400;
5058 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
5072 if (env->spr[SPR_HID0] & (HID0_DEEPNAP | HID0_DOZE | HID0_NAP)) {
5118 if (!(env->insns_flags & PPC_ALTIVEC)) {
5516 /* PURR & SPURR: Hack - treat these as aliases for the TB for now */
5687 /* Directed Privileged Door-bell Exception State, used for IPI */
5862 /* in linux-user, setup the hash register with a random value */
5953 env->dcache_line_size = 128;
5954 env->icache_line_size = 128;
5966 dc->desc = "PowerPC 970";
5967 pcc->init_proc = init_proc_970;
5968 pcc->check_pow = check_pow_970;
5969 pcc->check_attn = check_attn_hid0;
5970 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
5979 pcc->insns_flags2 = PPC2_FP_CVT_S64 | PPC2_MEM_LWSYNC;
5980 pcc->msr_mask = (1ull << MSR_SF) |
5995 pcc->mmu_model = POWERPC_MMU_64B;
5997 pcc->hash64_opts = &ppc_hash64_opts_basic;
5999 pcc->excp_model = POWERPC_EXCP_970;
6000 pcc->bus_model = PPC_FLAGS_INPUT_970;
6001 pcc->bfd_mach = bfd_mach_ppc64;
6002 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
6005 pcc->l1_dcache_size = 0x8000;
6006 pcc->l1_icache_size = 0x10000;
6028 env->dcache_line_size = 128;
6029 env->icache_line_size = 128;
6041 dc->fw_name = "PowerPC,POWER5";
6042 dc->desc = "POWER5+";
6043 pcc->init_proc = init_proc_power5plus;
6044 pcc->check_pow = check_pow_970;
6045 pcc->check_attn = check_attn_hid0;
6046 pcc->insns_flags = PPC_INSNS_BASE | PPC_STRING | PPC_MFTB |
6057 pcc->insns_flags2 = PPC2_FP_CVT_S64 | PPC2_MEM_LWSYNC;
6058 pcc->msr_mask = (1ull << MSR_SF) |
6073 pcc->lpcr_mask = LPCR_RMLS | LPCR_ILE | LPCR_LPES0 | LPCR_LPES1 |
6075 pcc->mmu_model = POWERPC_MMU_2_03;
6077 pcc->hash64_opts = &ppc_hash64_opts_basic;
6078 pcc->lrg_decr_bits = 32;
6080 pcc->excp_model = POWERPC_EXCP_970;
6081 pcc->bus_model = PPC_FLAGS_INPUT_970;
6082 pcc->bfd_mach = bfd_mach_ppc64;
6083 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
6086 pcc->l1_dcache_size = 0x8000;
6087 pcc->l1_icache_size = 0x10000;
6113 env->dcache_line_size = 128;
6114 env->icache_line_size = 128;
6124 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK;
6147 dc->fw_name = "PowerPC,POWER7";
6148 dc->desc = "POWER7";
6149 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_2_06_PLUS;
6150 pcc->pvr_match = ppc_pvr_match_power7;
6151 pcc->pcr_mask = PCR_VEC_DIS | PCR_VSX_DIS | PCR_COMPAT_2_05;
6152 pcc->pcr_supported = PCR_COMPAT_2_06 | PCR_COMPAT_2_05;
6153 pcc->init_proc = init_proc_POWER7;
6154 pcc->check_pow = check_pow_nocheck;
6155 pcc->check_attn = check_attn_hid0;
6156 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_STRING | PPC_MFTB |
6169 pcc->insns_flags2 = PPC2_VSX | PPC2_DFP | PPC2_DBRX | PPC2_ISA205 |
6174 pcc->msr_mask = (1ull << MSR_SF) |
6190 pcc->lpcr_mask = LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_DPFD |
6195 pcc->lpcr_pm = LPCR_P7_PECE0 | LPCR_P7_PECE1 | LPCR_P7_PECE2;
6196 pcc->mmu_model = POWERPC_MMU_2_06;
6198 pcc->hash64_opts = &ppc_hash64_opts_POWER7;
6199 pcc->lrg_decr_bits = 32;
6201 pcc->excp_model = POWERPC_EXCP_POWER7;
6202 pcc->bus_model = PPC_FLAGS_INPUT_POWER7;
6203 pcc->bfd_mach = bfd_mach_ppc64;
6204 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
6208 pcc->l1_dcache_size = 0x8000;
6209 pcc->l1_icache_size = 0x8000;
6214 if (env->flags & POWERPC_FLAG_BHRB) {
6218 env->bhrb_num_entries = 1 << num_entries_log2;
6219 env->bhrb_base = (intptr_t)&env->bhrb[0];
6220 env->bhrb_offset_mask = (env->bhrb_num_entries * sizeof(uint64_t)) - 1;
6226 if (env->flags & POWERPC_FLAG_BHRB) {
6227 env->bhrb_offset = 0;
6228 env->bhrb_filter = 0;
6229 memset(env->bhrb, 0, sizeof(env->bhrb));
6273 env->dcache_line_size = 128;
6274 env->icache_line_size = 128;
6286 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK;
6311 dc->fw_name = "PowerPC,POWER8";
6312 dc->desc = "POWER8";
6313 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_2_07;
6314 pcc->pvr_match = ppc_pvr_match_power8;
6315 pcc->pcr_mask = PCR_TM_DIS | PCR_COMPAT_2_06 | PCR_COMPAT_2_05;
6316 pcc->pcr_supported = PCR_COMPAT_2_07 | PCR_COMPAT_2_06 | PCR_COMPAT_2_05;
6317 pcc->init_proc = init_proc_POWER8;
6318 pcc->check_pow = check_pow_nocheck;
6319 pcc->check_attn = check_attn_hid0;
6320 pcc->insns_flags = PPC_INSNS_BASE | PPC_ISEL | PPC_STRING | PPC_MFTB |
6333 pcc->insns_flags2 = PPC2_VSX | PPC2_VSX207 | PPC2_DFP | PPC2_DBRX |
6341 pcc->msr_mask = (1ull << MSR_SF) |
6361 pcc->lpcr_mask = LPCR_VPM0 | LPCR_VPM1 | LPCR_ISL | LPCR_KBV |
6366 pcc->lpcr_pm = LPCR_P8_PECE0 | LPCR_P8_PECE1 | LPCR_P8_PECE2 |
6368 pcc->mmu_model = POWERPC_MMU_2_07;
6370 pcc->hash64_opts = &ppc_hash64_opts_POWER7;
6371 pcc->lrg_decr_bits = 32;
6372 pcc->n_host_threads = 8;
6374 pcc->excp_model = POWERPC_EXCP_POWER8;
6375 pcc->bus_model = PPC_FLAGS_INPUT_POWER7;
6376 pcc->bfd_mach = bfd_mach_ppc64;
6377 pcc->flags = POWERPC_FLAG_VRE | POWERPC_FLAG_SE |
6381 pcc->l1_dcache_size = 0x8000;
6382 pcc->l1_icache_size = 0x8000;
6387 * Radix pg sizes and AP encodings for dt node ibm,processor-radix-AP-encodings
6390 * x -> AP encoding
6391 * y -> radix mode supported page size (encoded as a shift)
6396 0x0000000c, /* 4K - enc: 0x0 */
6397 0xa0000010, /* 64K - enc: 0x5 */
6398 0x20000015, /* 2M - enc: 0x1 */
6399 0x4000001e /* 1G - enc: 0x2 */
6457 env->dcache_line_size = 128;
6458 env->icache_line_size = 128;
6470 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK;
6482 if ((pvr & 0x0f00) != (pcc->pvr & 0x0f00)) {
6490 if ((pcc->pvr & 0xf) == 0) {
6495 if ((pcc->pvr & 0xf) == 2) {
6509 dc->fw_name = "PowerPC,POWER9";
6510 dc->desc = "POWER9";
6511 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_3_00;
6512 pcc->pvr_match = ppc_pvr_match_power9;
6513 pcc->pcr_mask = PPC_PCR_MASK_POWER9;
6514 pcc->pcr_supported = PPC_PCR_SUPPORTED_POWER9;
6515 pcc->init_proc = init_proc_POWER9;
6516 pcc->check_pow = check_pow_nocheck;
6517 pcc->check_attn = check_attn_hid0_power9;
6518 pcc->insns_flags = PPC_INSNS_FLAGS_POWER9;
6519 pcc->insns_flags2 = PPC_INSNS_FLAGS2_POWER9;
6520 pcc->msr_mask = PPC_MSR_MASK_POWER9;
6521 pcc->lpcr_mask = PPC_LPCR_MASK_POWER9;
6522 pcc->lpcr_pm = LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE;
6523 pcc->mmu_model = POWERPC_MMU_3_00;
6526 pcc->hash64_opts = &ppc_hash64_opts_POWER7;
6527 pcc->radix_page_info = &POWER9_radix_page_info;
6528 pcc->lrg_decr_bits = 56;
6529 pcc->n_host_threads = 4;
6531 pcc->excp_model = POWERPC_EXCP_POWER9;
6532 pcc->bus_model = PPC_FLAGS_INPUT_POWER9;
6533 pcc->bfd_mach = bfd_mach_ppc64;
6534 pcc->flags = POWERPC_FLAGS_POWER9;
6535 pcc->l1_dcache_size = 0x8000;
6536 pcc->l1_icache_size = 0x8000;
6541 * Radix pg sizes and AP encodings for dt node ibm,processor-radix-AP-encodings
6544 * x -> AP encoding
6545 * y -> radix mode supported page size (encoded as a shift)
6550 0x0000000c, /* 4K - enc: 0x0 */
6551 0xa0000010, /* 64K - enc: 0x5 */
6552 0x20000015, /* 2M - enc: 0x1 */
6553 0x4000001e /* 1G - enc: 0x2 */
6568 env->dcache_line_size = 128;
6569 env->icache_line_size = 128;
6581 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK;
6593 if ((pvr & 0x0f00) == (pcc->pvr & 0x0f00)) {
6606 dc->fw_name = "PowerPC,POWER10";
6607 dc->desc = "POWER10";
6608 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_3_10;
6609 pcc->pvr_match = ppc_pvr_match_power10;
6610 pcc->pcr_mask = PPC_PCR_MASK_POWER10;
6611 pcc->pcr_supported = PPC_PCR_SUPPORTED_POWER10;
6612 pcc->init_proc = init_proc_POWER10;
6613 pcc->check_pow = check_pow_nocheck;
6614 pcc->check_attn = check_attn_hid0_power9;
6615 pcc->insns_flags = PPC_INSNS_FLAGS_POWER10;
6616 pcc->insns_flags2 = PPC_INSNS_FLAGS2_POWER10;
6617 pcc->msr_mask = PPC_MSR_MASK_POWER10;
6618 pcc->lpcr_mask = PPC_LPCR_MASK_POWER10;
6620 pcc->lpcr_pm = LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE;
6621 pcc->mmu_model = POWERPC_MMU_3_00;
6624 pcc->hash64_opts = &ppc_hash64_opts_POWER7;
6625 pcc->radix_page_info = &POWER10_radix_page_info;
6626 pcc->lrg_decr_bits = 56;
6628 pcc->excp_model = POWERPC_EXCP_POWER10;
6629 pcc->bus_model = PPC_FLAGS_INPUT_POWER9;
6630 pcc->bfd_mach = bfd_mach_ppc64;
6631 pcc->flags = POWERPC_FLAGS_POWER10;
6632 pcc->l1_dcache_size = 0x8000;
6633 pcc->l1_icache_size = 0x8000;
6644 uint32_t pcc_base = pcc->pvr & CPU_POWERPC_POWER_SERVER_MASK;
6654 if ((pvr & 0x0f00) == (pcc->pvr & 0x0f00)) {
6666 dc->fw_name = "PowerPC,POWER11";
6667 dc->desc = "POWER11";
6668 pcc->spapr_logical_pvr = CPU_POWERPC_LOGICAL_3_10_P11;
6669 pcc->pvr_match = ppc_pvr_match_power11;
6670 pcc->pcr_mask = PPC_PCR_MASK_POWER11;
6671 pcc->pcr_supported = PPC_PCR_SUPPORTED_POWER11;
6672 pcc->init_proc = init_proc_POWER11;
6673 pcc->check_pow = check_pow_nocheck;
6674 pcc->check_attn = check_attn_hid0_power9;
6675 pcc->insns_flags = PPC_INSNS_FLAGS_POWER11;
6676 pcc->insns_flags2 = PPC_INSNS_FLAGS2_POWER11;
6677 pcc->msr_mask = PPC_MSR_MASK_POWER11;
6678 pcc->lpcr_mask = PPC_LPCR_MASK_POWER11;
6680 pcc->lpcr_pm = LPCR_PDEE | LPCR_HDEE | LPCR_EEE | LPCR_DEE | LPCR_OEE;
6681 pcc->mmu_model = POWERPC_MMU_3_00;
6684 pcc->hash64_opts = &ppc_hash64_opts_POWER7;
6685 pcc->radix_page_info = &POWER10_radix_page_info;
6686 pcc->lrg_decr_bits = 56;
6688 pcc->excp_model = POWERPC_EXCP_POWER11;
6689 pcc->bus_model = PPC_FLAGS_INPUT_POWER9;
6690 pcc->bfd_mach = bfd_mach_ppc64;
6691 pcc->flags = POWERPC_FLAGS_POWER11;
6692 pcc->l1_dcache_size = 0x8000;
6693 pcc->l1_icache_size = 0x8000;
6699 CPUPPCState *env = &cpu->env;
6701 cpu->vhyp = vhyp;
6702 cpu->vhyp_class = PPC_VIRTUAL_HYPERVISOR_GET_CLASS(vhyp);
6708 env->msr_mask &= ~MSR_HVB;
6713 CPUPPCState *env = &cpu->env;
6720 if (env->flags & POWERPC_FLAG_SMT) {
6721 env->flags |= POWERPC_FLAG_SMT_1LPAR;
6733 CPUPPCState *env = &cpu->env;
6739 env->excp_vectors[i] = (target_ulong)(-1ULL);
6741 env->ivor_mask = 0x00000000;
6742 env->ivpr_mask = 0x00000000;
6744 env->nb_BATs = 0;
6745 env->nb_tlb = 0;
6746 env->nb_ways = 0;
6747 env->tlb_type = TLB_NONE;
6753 (*pcc->init_proc)(env);
6756 if (env->msr_mask & (1 << 25)) {
6757 switch (env->flags & (POWERPC_FLAG_SPE | POWERPC_FLAG_VRE)) {
6766 } else if (env->flags & (POWERPC_FLAG_SPE | POWERPC_FLAG_VRE)) {
6771 if (env->msr_mask & (1 << 17)) {
6772 switch (env->flags & (POWERPC_FLAG_TGPR | POWERPC_FLAG_CE)) {
6781 } else if (env->flags & (POWERPC_FLAG_TGPR | POWERPC_FLAG_CE)) {
6786 if (env->msr_mask & (1 << 10)) {
6787 switch (env->flags & (POWERPC_FLAG_SE | POWERPC_FLAG_DWE |
6799 } else if (env->flags & (POWERPC_FLAG_SE | POWERPC_FLAG_DWE |
6806 if (env->msr_mask & (1 << 9)) {
6807 switch (env->flags & (POWERPC_FLAG_BE | POWERPC_FLAG_DE)) {
6816 } else if (env->flags & (POWERPC_FLAG_BE | POWERPC_FLAG_DE)) {
6821 if (env->msr_mask & (1 << 2)) {
6822 switch (env->flags & (POWERPC_FLAG_PX | POWERPC_FLAG_PMM)) {
6831 } else if (env->flags & (POWERPC_FLAG_PX | POWERPC_FLAG_PMM)) {
6836 if ((env->flags & POWERPC_FLAG_BUS_CLK) == 0) {
6838 "Should define the time-base and decrementer clock source\n");
6843 if (env->nb_tlb) {
6844 switch (env->tlb_type) {
6847 env->tlb.tlb6 = g_new0(ppc6xx_tlb_t, 2 * env->nb_tlb);
6850 env->tlb.tlbe = g_new0(ppcemb_tlb_t, env->nb_tlb);
6853 env->tlb.tlbm = g_new0(ppcmas_tlb_t, env->nb_tlb);
6856 /* Pre-compute some useful values */
6857 env->tlb_per_way = env->nb_tlb / env->nb_ways;
6860 if (env->check_pow == NULL) {
6865 if (env->check_attn == NULL) {
6872 static void ppc_cpu_realize(DeviceState *dev, Error **errp)
6874 CPUState *cs = CPU(dev);
6875 PowerPCCPU *cpu = POWERPC_CPU(dev);
6876 CPUPPCState *env = &cpu->env;
6880 cpu_exec_realizefn(cs, &local_err);
6885 if (cpu->vcpu_id == UNASSIGNED_CPU_INDEX) {
6886 cpu->vcpu_id = cs->cpu_index;
6903 ppc_gdb_init(cs, pcc);
6904 qemu_init_vcpu(cs);
6906 pcc->parent_realize(dev, errp);
6908 if (!ppc_cpu_core_single_threaded(cs)) {
6909 env->flags |= POWERPC_FLAG_SMT;
6915 cpu_exec_unrealizefn(cs);
6918 static void ppc_cpu_unrealize(DeviceState *dev)
6920 PowerPCCPU *cpu = POWERPC_CPU(dev);
6923 pcc->parent_unrealize(dev);
6936 /* -cpu host does a PVR lookup during construction */
6939 return -1;
6942 return pcc->pvr == pvr ? 0 : -1;
6953 pcc = POWERPC_CPU_CLASS(item->data);
6966 /* -cpu host does a PVR lookup during construction */
6969 return -1;
6972 if (pcc->pvr_match(pcc, pvr, true)) {
6976 return -1;
6987 pcc = POWERPC_CPU_CLASS(item->data);
7019 int len = p - name;
7020 len = (len == 10) && (name[1] == 'x') ? len - 2 : len;
7036 return object_class_by_name(mc->default_cpu_type);
7041 cpu_model = g_ascii_strdown(name, -1);
7081 return -1;
7084 if (pcc_a->pvr < pcc_b->pvr) {
7085 return -1;
7086 } else if (pcc_a->pvr > pcc_b->pvr) {
7108 qemu_printf(" %-16s PVR %08x\n", name, pcc->pvr);
7111 ObjectClass *alias_oc = ppc_cpu_class_by_name(alias->model);
7120 if (strcmp(alias->alias, family->desc) == 0) {
7121 qemu_printf(" %-16s (alias for preferred %s CPU)\n",
7122 alias->alias, family->desc);
7124 qemu_printf(" %-16s (alias for %s)\n",
7125 alias->alias, name);
7147 static void ppc_cpu_set_pc(CPUState *cs, vaddr value)
7149 PowerPCCPU *cpu = POWERPC_CPU(cs);
7151 cpu->env.nip = value;
7154 static vaddr ppc_cpu_get_pc(CPUState *cs)
7156 PowerPCCPU *cpu = POWERPC_CPU(cs);
7158 return cpu->env.nip;
7162 static void ppc_restore_state_to_opc(CPUState *cs,
7166 PowerPCCPU *cpu = POWERPC_CPU(cs);
7168 cpu->env.nip = data[0];
7172 static bool ppc_cpu_has_work(CPUState *cs)
7174 return cs->interrupt_request & CPU_INTERRUPT_HARD;
7177 static int ppc_cpu_mmu_index(CPUState *cs, bool ifetch)
7179 return ppc_env_mmu_index(cpu_env(cs), ifetch);
7184 CPUState *cs = CPU(obj);
7185 PowerPCCPU *cpu = POWERPC_CPU(cs);
7187 CPUPPCState *env = &cpu->env;
7191 if (pcc->parent_phases.hold) {
7192 pcc->parent_phases.hold(obj, type);
7215 msr |= (target_ulong)1 << MSR_LE; /* Little-endian user mode */
7216 if (!((env->msr_mask >> MSR_LE) & 1)) {
7217 fprintf(stderr, "Selected CPU does not support little-endian.\n");
7224 if (mmu_is_64bit(env->mmu_model)) {
7232 env->nip = env->hreset_vector | env->excp_prefix;
7235 cpu_breakpoint_remove_all(cs, BP_CPU);
7236 cpu_watchpoint_remove_all(cs, BP_CPU);
7237 if (env->mmu_model != POWERPC_MMU_REAL) {
7244 env->resume_as_sreset = 0;
7247 env->reserve_addr = (target_ulong)-1ULL;
7249 env->pending_interrupts = 0;
7250 cs->exception_index = POWERPC_EXCP_NONE;
7251 env->error_code = 0;
7256 &env->fp_status);
7263 set_float_2nan_prop_rule(float_2nan_prop_ab, &env->fp_status);
7264 set_float_2nan_prop_rule(float_2nan_prop_ab, &env->vec_status);
7266 for (i = 0; i < ARRAY_SIZE(env->spr_cb); i++) {
7267 ppc_spr_t *spr = &env->spr_cb[i];
7269 if (!spr->name) {
7272 env->spr[i] = spr->default_value;
7282 static bool ppc_cpu_is_big_endian(CPUState *cs)
7284 cpu_synchronize_state(cs);
7286 return !FIELD_EX64(cpu_env(cs)->msr, MSR, LE);
7292 CPUPPCState *env = &POWERPC_CPU(obj)->env;
7294 *irq_counts = env->excp_stats;
7295 *nb_irqs = ARRAY_SIZE(env->excp_stats);
7300 static void ppc_cpu_exec_enter(CPUState *cs)
7302 PowerPCCPU *cpu = POWERPC_CPU(cs);
7304 if (cpu->vhyp) {
7305 cpu->vhyp_class->cpu_exec_enter(cpu->vhyp, cpu);
7309 static void ppc_cpu_exec_exit(CPUState *cs)
7311 PowerPCCPU *cpu = POWERPC_CPU(cs);
7313 if (cpu->vhyp) {
7314 cpu->vhyp_class->cpu_exec_exit(cpu->vhyp, cpu);
7325 CPUPPCState *env = &cpu->env;
7327 cpu->vcpu_id = UNASSIGNED_CPU_INDEX;
7329 env->msr_mask = pcc->msr_mask;
7330 env->mmu_model = pcc->mmu_model;
7331 env->excp_model = pcc->excp_model;
7332 env->bus_model = pcc->bus_model;
7333 env->insns_flags = pcc->insns_flags;
7334 env->insns_flags2 = pcc->insns_flags2;
7335 env->flags = pcc->flags;
7336 env->bfd_mach = pcc->bfd_mach;
7337 env->check_pow = pcc->check_pow;
7338 env->check_attn = pcc->check_attn;
7350 env->has_hv_mode = !!(env->msr_mask & MSR_HVB);
7365 return pcc->pvr == pvr;
7368 static void ppc_disas_set_info(CPUState *cs, disassemble_info *info)
7370 CPUPPCState *env = cpu_env(cs);
7372 if ((env->hflags >> MSR_LE) & 1) {
7373 info->endian = BFD_ENDIAN_LITTLE;
7375 info->mach = env->bfd_mach;
7376 if (!env->bfd_mach) {
7378 info->mach = bfd_mach_ppc64;
7380 info->mach = bfd_mach_ppc;
7384 info->cap_arch = CS_ARCH_PPC;
7386 info->cap_mode = CS_MODE_64;
7396 #include "hw/core/sysemu-cpu-ops.h"
7408 #include "hw/core/tcg-cpu-ops.h"
7440 &pcc->parent_realize);
7442 &pcc->parent_unrealize);
7443 pcc->pvr_match = ppc_pvr_match_default;
7447 &pcc->parent_phases);
7449 cc->class_by_name = ppc_cpu_class_by_name;
7450 cc->has_work = ppc_cpu_has_work;
7451 cc->mmu_index = ppc_cpu_mmu_index;
7452 cc->dump_state = ppc_cpu_dump_state;
7453 cc->set_pc = ppc_cpu_set_pc;
7454 cc->get_pc = ppc_cpu_get_pc;
7455 cc->gdb_read_register = ppc_cpu_gdb_read_register;
7456 cc->gdb_write_register = ppc_cpu_gdb_write_register;
7458 cc->sysemu_ops = &ppc_sysemu_ops;
7459 INTERRUPT_STATS_PROVIDER_CLASS(oc)->get_statistics = ppc_get_irq_stats;
7467 cc->gdb_num_core_regs = 71;
7469 cc->gdb_read_register = ppc_cpu_gdb_read_register_apple;
7470 cc->gdb_write_register = ppc_cpu_gdb_write_register_apple;
7471 cc->gdb_num_core_regs = 71 + 32;
7474 cc->gdb_arch_name = ppc_gdb_arch_name;
7476 cc->gdb_core_xml_file = "power64-core.xml";
7478 cc->gdb_core_xml_file = "power-core.xml";
7480 cc->disas_set_info = ppc_disas_set_info;
7482 dc->fw_name = "PowerPC,UNKNOWN";
7485 cc->tcg_ops = &ppc_tcg_ops;
7523 void ppc_cpu_dump_state(CPUState *cs, FILE *f, int flags)
7528 CPUPPCState *env = cpu_env(cs);
7533 env->nip, env->lr, env->ctr, cpu_read_xer(env),
7534 cs->cpu_index);
7537 env->msr, env->spr[SPR_HID0], env->hflags,
7540 if (env->tb_env) {
7550 if ((i & (RGPL - 1)) == 0) {
7554 if ((i & (RGPL - 1)) == (RGPL - 1)) {
7560 qemu_fprintf(f, "%01x", env->crf[i]);
7563 char a = '-';
7564 if (env->crf[i] & 0x08) {
7566 } else if (env->crf[i] & 0x04) {
7568 } else if (env->crf[i] & 0x02) {
7571 qemu_fprintf(f, " %c%c", a, env->crf[i] & 0x01 ? 'O' : ' ');
7574 (int)env->reserve_length, env->reserve_addr);
7578 if ((i & (RFPL - 1)) == 0) {
7582 if ((i & (RFPL - 1)) == (RFPL - 1)) {
7586 qemu_fprintf(f, "FPSCR " TARGET_FMT_lx "\n", env->fpscr);
7592 env->spr[SPR_SRR0], env->spr[SPR_SRR1],
7593 env->spr[SPR_PVR], env->spr[SPR_VRSAVE]);
7597 env->spr[SPR_SPRG0], env->spr[SPR_SPRG1],
7598 env->spr[SPR_SPRG2], env->spr[SPR_SPRG3]);
7602 env->spr[SPR_SPRG4], env->spr[SPR_SPRG5],
7603 env->spr[SPR_SPRG6], env->spr[SPR_SPRG7]);
7605 switch (env->excp_model) {
7612 env->spr[SPR_HSRR0], env->spr[SPR_HSRR1]);
7618 env->spr[SPR_BOOKE_CSRR0], env->spr[SPR_BOOKE_CSRR1],
7619 env->spr[SPR_BOOKE_MCSRR0], env->spr[SPR_BOOKE_MCSRR1]);
7623 env->spr[SPR_BOOKE_TCR], env->spr[SPR_BOOKE_TSR],
7624 env->spr[SPR_BOOKE_ESR], env->spr[SPR_BOOKE_DEAR]);
7628 env->spr[SPR_BOOKE_PIR], env->spr[SPR_BOOKE_DECAR],
7629 env->spr[SPR_BOOKE_IVPR], env->spr[SPR_BOOKE_EPCR]);
7633 env->spr[SPR_BOOKE_MCSR], env->spr[SPR_BOOKE_SPRG8],
7634 env->spr[SPR_BOOKE_EPR]);
7636 /* FSL-specific */
7639 env->spr[SPR_Exxx_MCAR], env->spr[SPR_BOOKE_PID1],
7640 env->spr[SPR_BOOKE_PID2], env->spr[SPR_E500_SVR]);
7643 * IVORs are left out as they are large and do not change often --
7650 env->spr[SPR_40x_TCR], env->spr[SPR_40x_TSR],
7651 env->spr[SPR_40x_ESR], env->spr[SPR_40x_DEAR]);
7655 env->spr[SPR_40x_EVPR], env->spr[SPR_40x_SRR2],
7656 env->spr[SPR_40x_SRR3], env->spr[SPR_40x_PID]);
7663 if (env->flags & POWERPC_FLAG_CFAR) {
7664 qemu_fprintf(f, " CFAR " TARGET_FMT_lx"\n", env->cfar);
7668 if (env->spr_cb[SPR_LPCR].name) {
7669 qemu_fprintf(f, " LPCR " TARGET_FMT_lx "\n", env->spr[SPR_LPCR]);
7672 switch (env->mmu_model) {
7682 if (env->spr_cb[SPR_SDR1].name) { /* SDR1 Exists */
7683 qemu_fprintf(f, " SDR1 " TARGET_FMT_lx " ", env->spr[SPR_SDR1]);
7685 if (env->spr_cb[SPR_PTCR].name) { /* PTCR Exists */
7686 qemu_fprintf(f, " PTCR " TARGET_FMT_lx " ", env->spr[SPR_PTCR]);
7689 env->spr[SPR_DAR], env->spr[SPR_DSISR]);
7694 env->spr[SPR_BOOKE_MAS0], env->spr[SPR_BOOKE_MAS1],
7695 env->spr[SPR_BOOKE_MAS2], env->spr[SPR_BOOKE_MAS3]);
7699 env->spr[SPR_BOOKE_MAS4], env->spr[SPR_BOOKE_MAS6],
7700 env->spr[SPR_BOOKE_MAS7], env->spr[SPR_BOOKE_PID]);
7704 env->spr[SPR_MMUCFG], env->spr[SPR_BOOKE_TLB0CFG],
7705 env->spr[SPR_BOOKE_TLB1CFG]);