Commit 30b6f3a866ba4cec86b86ddd22cf3fba3f23ea1d
1 parent
0f78cf0c
Initialize more GT64xxx registers on reset.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2956 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
113 additions
and
11 deletions
hw/gt64xxx.c
| @@ -865,19 +865,31 @@ void gt64120_reset(void *opaque) | @@ -865,19 +865,31 @@ void gt64120_reset(void *opaque) | ||
| 865 | { | 865 | { |
| 866 | GT64120State *s = opaque; | 866 | GT64120State *s = opaque; |
| 867 | 867 | ||
| 868 | + /* FIXME: Malta specific hw assumptions ahead */ | ||
| 869 | + | ||
| 868 | /* CPU Configuration */ | 870 | /* CPU Configuration */ |
| 869 | #ifdef TARGET_WORDS_BIGENDIAN | 871 | #ifdef TARGET_WORDS_BIGENDIAN |
| 870 | s->regs[GT_CPU] = 0x00000000; | 872 | s->regs[GT_CPU] = 0x00000000; |
| 871 | #else | 873 | #else |
| 872 | s->regs[GT_CPU] = 0x00001000; | 874 | s->regs[GT_CPU] = 0x00001000; |
| 873 | #endif | 875 | #endif |
| 874 | - s->regs[GT_MULTI] = 0x00000000; | 876 | + s->regs[GT_MULTI] = 0x00000003; |
| 877 | + | ||
| 878 | + /* CPU Address decode */ | ||
| 879 | + s->regs[GT_SCS10LD] = 0x00000000; | ||
| 880 | + s->regs[GT_SCS10HD] = 0x00000007; | ||
| 881 | + s->regs[GT_SCS32LD] = 0x00000008; | ||
| 882 | + s->regs[GT_SCS32HD] = 0x0000000f; | ||
| 883 | + s->regs[GT_CS20LD] = 0x000000e0; | ||
| 884 | + s->regs[GT_CS20HD] = 0x00000070; | ||
| 885 | + s->regs[GT_CS3BOOTLD] = 0x000000f8; | ||
| 886 | + s->regs[GT_CS3BOOTHD] = 0x0000007f; | ||
| 875 | 887 | ||
| 876 | - /* CPU Address decode FIXME: not complete*/ | ||
| 877 | s->regs[GT_PCI0IOLD] = 0x00000080; | 888 | s->regs[GT_PCI0IOLD] = 0x00000080; |
| 878 | s->regs[GT_PCI0IOHD] = 0x0000000f; | 889 | s->regs[GT_PCI0IOHD] = 0x0000000f; |
| 879 | s->regs[GT_PCI0M0LD] = 0x00000090; | 890 | s->regs[GT_PCI0M0LD] = 0x00000090; |
| 880 | s->regs[GT_PCI0M0HD] = 0x0000001f; | 891 | s->regs[GT_PCI0M0HD] = 0x0000001f; |
| 892 | + s->regs[GT_ISD] = 0x000000a0; | ||
| 881 | s->regs[GT_PCI0M1LD] = 0x00000790; | 893 | s->regs[GT_PCI0M1LD] = 0x00000790; |
| 882 | s->regs[GT_PCI0M1HD] = 0x0000001f; | 894 | s->regs[GT_PCI0M1HD] = 0x0000001f; |
| 883 | s->regs[GT_PCI1IOLD] = 0x00000100; | 895 | s->regs[GT_PCI1IOLD] = 0x00000100; |
| @@ -886,6 +898,12 @@ void gt64120_reset(void *opaque) | @@ -886,6 +898,12 @@ void gt64120_reset(void *opaque) | ||
| 886 | s->regs[GT_PCI1M0HD] = 0x0000001f; | 898 | s->regs[GT_PCI1M0HD] = 0x0000001f; |
| 887 | s->regs[GT_PCI1M1LD] = 0x00000120; | 899 | s->regs[GT_PCI1M1LD] = 0x00000120; |
| 888 | s->regs[GT_PCI1M1HD] = 0x0000002f; | 900 | s->regs[GT_PCI1M1HD] = 0x0000002f; |
| 901 | + | ||
| 902 | + s->regs[GT_SCS10AR] = 0x00000000; | ||
| 903 | + s->regs[GT_SCS32AR] = 0x00000008; | ||
| 904 | + s->regs[GT_CS20R] = 0x000000e0; | ||
| 905 | + s->regs[GT_CS3BOOTR] = 0x000000f8; | ||
| 906 | + | ||
| 889 | s->regs[GT_PCI0IOREMAP] = 0x00000080; | 907 | s->regs[GT_PCI0IOREMAP] = 0x00000080; |
| 890 | s->regs[GT_PCI0M0REMAP] = 0x00000090; | 908 | s->regs[GT_PCI0M0REMAP] = 0x00000090; |
| 891 | s->regs[GT_PCI0M1REMAP] = 0x00000790; | 909 | s->regs[GT_PCI0M1REMAP] = 0x00000790; |
| @@ -900,6 +918,43 @@ void gt64120_reset(void *opaque) | @@ -900,6 +918,43 @@ void gt64120_reset(void *opaque) | ||
| 900 | s->regs[GT_CPUERR_DATAHI] = 0xffffffff; | 918 | s->regs[GT_CPUERR_DATAHI] = 0xffffffff; |
| 901 | s->regs[GT_CPUERR_PARITY] = 0x000000ff; | 919 | s->regs[GT_CPUERR_PARITY] = 0x000000ff; |
| 902 | 920 | ||
| 921 | + /* CPU Sync Barrier */ | ||
| 922 | + s->regs[GT_PCI0SYNC] = 0x00000000; | ||
| 923 | + s->regs[GT_PCI1SYNC] = 0x00000000; | ||
| 924 | + | ||
| 925 | + /* SDRAM and Device Address Decode */ | ||
| 926 | + s->regs[GT_SCS0LD] = 0x00000000; | ||
| 927 | + s->regs[GT_SCS0HD] = 0x00000007; | ||
| 928 | + s->regs[GT_SCS1LD] = 0x00000008; | ||
| 929 | + s->regs[GT_SCS1HD] = 0x0000000f; | ||
| 930 | + s->regs[GT_SCS2LD] = 0x00000010; | ||
| 931 | + s->regs[GT_SCS2HD] = 0x00000017; | ||
| 932 | + s->regs[GT_SCS3LD] = 0x00000018; | ||
| 933 | + s->regs[GT_SCS3HD] = 0x0000001f; | ||
| 934 | + s->regs[GT_CS0LD] = 0x000000c0; | ||
| 935 | + s->regs[GT_CS0HD] = 0x000000c7; | ||
| 936 | + s->regs[GT_CS1LD] = 0x000000c8; | ||
| 937 | + s->regs[GT_CS1HD] = 0x000000cf; | ||
| 938 | + s->regs[GT_CS2LD] = 0x000000d0; | ||
| 939 | + s->regs[GT_CS2HD] = 0x000000df; | ||
| 940 | + s->regs[GT_CS3LD] = 0x000000f0; | ||
| 941 | + s->regs[GT_CS3HD] = 0x000000fb; | ||
| 942 | + s->regs[GT_BOOTLD] = 0x000000fc; | ||
| 943 | + s->regs[GT_BOOTHD] = 0x000000ff; | ||
| 944 | + s->regs[GT_ADERR] = 0xffffffff; | ||
| 945 | + | ||
| 946 | + /* SDRAM Configuration */ | ||
| 947 | + s->regs[GT_SDRAM_CFG] = 0x00000200; | ||
| 948 | + s->regs[GT_SDRAM_OPMODE] = 0x00000000; | ||
| 949 | + s->regs[GT_SDRAM_BM] = 0x00000007; | ||
| 950 | + s->regs[GT_SDRAM_ADDRDECODE] = 0x00000002; | ||
| 951 | + | ||
| 952 | + /* SDRAM Parameters */ | ||
| 953 | + s->regs[GT_SDRAM_B0] = 0x00000005; | ||
| 954 | + s->regs[GT_SDRAM_B1] = 0x00000005; | ||
| 955 | + s->regs[GT_SDRAM_B2] = 0x00000005; | ||
| 956 | + s->regs[GT_SDRAM_B3] = 0x00000005; | ||
| 957 | + | ||
| 903 | /* ECC */ | 958 | /* ECC */ |
| 904 | s->regs[GT_ECC_ERRDATALO] = 0x00000000; | 959 | s->regs[GT_ECC_ERRDATALO] = 0x00000000; |
| 905 | s->regs[GT_ECC_ERRDATAHI] = 0x00000000; | 960 | s->regs[GT_ECC_ERRDATAHI] = 0x00000000; |
| @@ -907,22 +962,69 @@ void gt64120_reset(void *opaque) | @@ -907,22 +962,69 @@ void gt64120_reset(void *opaque) | ||
| 907 | s->regs[GT_ECC_CALC] = 0x00000000; | 962 | s->regs[GT_ECC_CALC] = 0x00000000; |
| 908 | s->regs[GT_ECC_ERRADDR] = 0x00000000; | 963 | s->regs[GT_ECC_ERRADDR] = 0x00000000; |
| 909 | 964 | ||
| 910 | - /* SDRAM Parameters */ | ||
| 911 | - s->regs[GT_SDRAM_B0] = 0x00000005; | ||
| 912 | - s->regs[GT_SDRAM_B1] = 0x00000005; | ||
| 913 | - s->regs[GT_SDRAM_B2] = 0x00000005; | ||
| 914 | - s->regs[GT_SDRAM_B3] = 0x00000005; | 965 | + /* Device Parameters */ |
| 966 | + s->regs[GT_DEV_B0] = 0x386fffff; | ||
| 967 | + s->regs[GT_DEV_B1] = 0x386fffff; | ||
| 968 | + s->regs[GT_DEV_B2] = 0x386fffff; | ||
| 969 | + s->regs[GT_DEV_B3] = 0x386fffff; | ||
| 970 | + s->regs[GT_DEV_BOOT] = 0x146fffff; | ||
| 915 | 971 | ||
| 916 | - /* PCI Internal FIXME: not complete*/ | 972 | + /* DMA registers are all zeroed at reset */ |
| 973 | + | ||
| 974 | + /* Timer/Counter */ | ||
| 975 | + s->regs[GT_TC0] = 0xffffffff; | ||
| 976 | + s->regs[GT_TC1] = 0x00ffffff; | ||
| 977 | + s->regs[GT_TC2] = 0x00ffffff; | ||
| 978 | + s->regs[GT_TC3] = 0x00ffffff; | ||
| 979 | + s->regs[GT_TC_CONTROL] = 0x00000000; | ||
| 980 | + | ||
| 981 | + /* PCI Internal */ | ||
| 917 | #ifdef TARGET_WORDS_BIGENDIAN | 982 | #ifdef TARGET_WORDS_BIGENDIAN |
| 918 | s->regs[GT_PCI0_CMD] = 0x00000000; | 983 | s->regs[GT_PCI0_CMD] = 0x00000000; |
| 919 | - s->regs[GT_PCI1_CMD] = 0x00000000; | ||
| 920 | #else | 984 | #else |
| 921 | s->regs[GT_PCI0_CMD] = 0x00010001; | 985 | s->regs[GT_PCI0_CMD] = 0x00010001; |
| 922 | - s->regs[GT_PCI1_CMD] = 0x00010001; | ||
| 923 | #endif | 986 | #endif |
| 924 | - s->regs[GT_PCI0_IACK] = 0x00000000; | 987 | + s->regs[GT_PCI0_TOR] = 0x0000070f; |
| 988 | + s->regs[GT_PCI0_BS_SCS10] = 0x00fff000; | ||
| 989 | + s->regs[GT_PCI0_BS_SCS32] = 0x00fff000; | ||
| 990 | + s->regs[GT_PCI0_BS_CS20] = 0x01fff000; | ||
| 991 | + s->regs[GT_PCI0_BS_CS3BT] = 0x00fff000; | ||
| 925 | s->regs[GT_PCI1_IACK] = 0x00000000; | 992 | s->regs[GT_PCI1_IACK] = 0x00000000; |
| 993 | + s->regs[GT_PCI0_IACK] = 0x00000000; | ||
| 994 | + s->regs[GT_PCI0_BARE] = 0x0000000f; | ||
| 995 | + s->regs[GT_PCI0_PREFMBR] = 0x00000040; | ||
| 996 | + s->regs[GT_PCI0_SCS10_BAR] = 0x00000000; | ||
| 997 | + s->regs[GT_PCI0_SCS32_BAR] = 0x01000000; | ||
| 998 | + s->regs[GT_PCI0_CS20_BAR] = 0x1c000000; | ||
| 999 | + s->regs[GT_PCI0_CS3BT_BAR] = 0x1f000000; | ||
| 1000 | + s->regs[GT_PCI0_SSCS10_BAR] = 0x00000000; | ||
| 1001 | + s->regs[GT_PCI0_SSCS32_BAR] = 0x01000000; | ||
| 1002 | + s->regs[GT_PCI0_SCS3BT_BAR] = 0x1f000000; | ||
| 1003 | +#ifdef TARGET_WORDS_BIGENDIAN | ||
| 1004 | + s->regs[GT_PCI1_CMD] = 0x00000000; | ||
| 1005 | +#else | ||
| 1006 | + s->regs[GT_PCI1_CMD] = 0x00010001; | ||
| 1007 | +#endif | ||
| 1008 | + s->regs[GT_PCI1_TOR] = 0x0000070f; | ||
| 1009 | + s->regs[GT_PCI1_BS_SCS10] = 0x00fff000; | ||
| 1010 | + s->regs[GT_PCI1_BS_SCS32] = 0x00fff000; | ||
| 1011 | + s->regs[GT_PCI1_BS_CS20] = 0x01fff000; | ||
| 1012 | + s->regs[GT_PCI1_BS_CS3BT] = 0x00fff000; | ||
| 1013 | + s->regs[GT_PCI1_BARE] = 0x0000000f; | ||
| 1014 | + s->regs[GT_PCI1_PREFMBR] = 0x00000040; | ||
| 1015 | + s->regs[GT_PCI1_SCS10_BAR] = 0x00000000; | ||
| 1016 | + s->regs[GT_PCI1_SCS32_BAR] = 0x01000000; | ||
| 1017 | + s->regs[GT_PCI1_CS20_BAR] = 0x1c000000; | ||
| 1018 | + s->regs[GT_PCI1_CS3BT_BAR] = 0x1f000000; | ||
| 1019 | + s->regs[GT_PCI1_SSCS10_BAR] = 0x00000000; | ||
| 1020 | + s->regs[GT_PCI1_SSCS32_BAR] = 0x01000000; | ||
| 1021 | + s->regs[GT_PCI1_SCS3BT_BAR] = 0x1f000000; | ||
| 1022 | + s->regs[GT_PCI1_CFGADDR] = 0x00000000; | ||
| 1023 | + s->regs[GT_PCI1_CFGDATA] = 0x00000000; | ||
| 1024 | + s->regs[GT_PCI0_CFGADDR] = 0x00000000; | ||
| 1025 | + s->regs[GT_PCI0_CFGDATA] = 0x00000000; | ||
| 1026 | + | ||
| 1027 | + /* Interrupt registers are all zeroed at reset */ | ||
| 926 | 1028 | ||
| 927 | gt64120_pci_mapping(s); | 1029 | gt64120_pci_mapping(s); |
| 928 | } | 1030 | } |