Changeset 3614
- Timestamp:
- 09/29/08 20:09:51 (7 weeks ago)
- Location:
- trunk/coreboot-v2/src/northbridge/amd/amdk8
- Files:
-
- 3 modified
-
amdk8_f.h (modified) (1 diff)
-
raminit_f.c (modified) (55 diffs)
-
raminit_f_dqs.c (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/coreboot-v2/src/northbridge/amd/amdk8/amdk8_f.h
r2439 r3614 482 482 uint8_t is_ecc; 483 483 uint8_t is_Width128; 484 uint8_t is_64MuxMode; 484 485 uint8_t memclk_set; // we need to use this to retrieve the mem param 485 uint8_t rsv[ 3];486 uint8_t rsv[2]; 486 487 } __attribute__((packed)); 487 488 -
trunk/coreboot-v2/src/northbridge/amd/amdk8/raminit_f.c
r3586 r3614 850 850 851 851 static void set_dimm_size(const struct mem_controller *ctrl, 852 struct dimm_size *sz, unsigned index, int is_Width128)852 struct dimm_size *sz, unsigned index, struct mem_info *meminfo) 853 853 { 854 854 uint32_t base0, base1; … … 873 873 874 874 /* Double the size if we are using dual channel memory */ 875 if ( is_Width128) {875 if (meminfo->is_Width128) { 876 876 base0 = (base0 << 1) | (base0 & 1); 877 877 base1 = (base1 << 1) | (base1 & 1); … … 882 882 base1 &= ~0xe007fffe; 883 883 884 /* Set the appropriate DIMM base address register */ 885 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1)+0)<<2), base0); 886 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1)+1)<<2), base1); 884 if (!(meminfo->dimm_mask & 0x0F) && (meminfo->dimm_mask & 0xF0)) { /* channelB only? */ 885 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 4) << 2), base0); 886 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 5) << 2), base1); 887 } else { 888 /* Set the appropriate DIMM base address register */ 889 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 0) << 2), base0); 890 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 1) << 2), base1); 887 891 #if QRANK_DIMM_SUPPORT == 1 888 if (sz->rank == 4) { 889 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1)+4)<<2), base0); 890 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1)+5)<<2), base1); 891 } 892 #endif 892 if (sz->rank == 4) { 893 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 4) << 2), base0); 894 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 5) << 2), base1); 895 } 896 #endif 897 } 893 898 894 899 /* Enable the memory clocks for this DIMM by Clear the MemClkDis bit*/ … … 904 909 #endif 905 910 906 dword = pci_read_config32(ctrl->f2, DRAM_TIMING_LOW); //Channel A 907 dword &= ~(ClkDis0 >> index); 908 #if QRANK_DIMM_SUPPORT == 1 909 if (sz->rank == 4) { 910 dword &= ~(ClkDis0 >> (index+2)); 911 } 912 #endif 913 pci_write_config32(ctrl->f2, DRAM_TIMING_LOW, dword); 914 915 if (is_Width128) { //Channel B 911 if (!(meminfo->dimm_mask & 0x0F) && (meminfo->dimm_mask & 0xF0)) { /* channelB only? */ 916 912 dword = pci_read_config32(ctrl->f2, DRAM_CTRL_MISC); 913 dword &= ~(ClkDis0 >> index); 914 pci_write_config32(ctrl->f2, DRAM_CTRL_MISC, dword); 915 916 } else { 917 dword = pci_read_config32(ctrl->f2, DRAM_TIMING_LOW); //Channel A 917 918 dword &= ~(ClkDis0 >> index); 918 919 #if QRANK_DIMM_SUPPORT == 1 … … 921 922 } 922 923 #endif 923 pci_write_config32(ctrl->f2, DRAM_CTRL_MISC, dword); 924 pci_write_config32(ctrl->f2, DRAM_TIMING_LOW, dword); 925 926 if (meminfo->is_Width128) { // ChannelA+B 927 dword = pci_read_config32(ctrl->f2, DRAM_CTRL_MISC); 928 dword &= ~(ClkDis0 >> index); 929 #if QRANK_DIMM_SUPPORT == 1 930 if (sz->rank == 4) { 931 dword &= ~(ClkDis0 >> (index+2)); 932 } 933 #endif 934 pci_write_config32(ctrl->f2, DRAM_CTRL_MISC, dword); 935 } 924 936 } 925 937 … … 944 956 945 957 static void set_dimm_cs_map(const struct mem_controller *ctrl, 946 struct dimm_size *sz, unsigned index) 958 struct dimm_size *sz, unsigned index, 959 struct mem_info *meminfo) 947 960 { 948 961 static const uint8_t cs_map_aaa[24] = { … … 962 975 uint32_t map; 963 976 977 if (!(meminfo->dimm_mask & 0x0F) && (meminfo->dimm_mask & 0xF0)) { /* channelB only? */ 978 index += 2; 979 } 964 980 map = pci_read_config32(ctrl->f2, DRAM_BANK_ADDR_MAP); 965 981 map &= ~(0xf << (index * 4)); … … 987 1003 988 1004 989 static long spd_set_ram_size(const struct mem_controller *ctrl, long dimm_mask,1005 static long spd_set_ram_size(const struct mem_controller *ctrl, 990 1006 struct mem_info *meminfo) 991 1007 { … … 994 1010 for (i = 0; i < DIMM_SOCKETS; i++) { 995 1011 struct dimm_size *sz = &(meminfo->sz[i]); 996 if (!(dimm_mask & (1 << i))) { 997 continue; 998 } 999 spd_get_dimm_size(ctrl->channel0[i], sz); 1012 u32 spd_device = ctrl->channel0[i]; 1013 1014 if (!(meminfo->dimm_mask & (1 << i))) { 1015 if (meminfo->dimm_mask & (1 << (DIMM_SOCKETS + i))) { /* channelB only? */ 1016 spd_device = ctrl->channel1[i]; 1017 } else { 1018 continue; 1019 } 1020 } 1021 1022 spd_get_dimm_size(spd_device, sz); 1000 1023 if (sz->per_rank == 0) { 1001 1024 return -1; /* Report SPD error */ 1002 1025 } 1003 set_dimm_size(ctrl, sz, i, meminfo ->is_Width128);1004 set_dimm_cs_map (ctrl, sz, i );1005 } 1006 return dimm_mask;1026 set_dimm_size(ctrl, sz, i, meminfo); 1027 set_dimm_cs_map (ctrl, sz, i, meminfo); 1028 } 1029 return meminfo->dimm_mask; 1007 1030 } 1008 1031 … … 1244 1267 pci_write_config32(ctrl->f2, DRAM_CSBASE + (canidate << 2), csbase); 1245 1268 /* Write the new mask register */ 1246 if ((canidate & 1) == 0) { //only have 4 CSMASK1247 pci_write_config32(ctrl->f2, DRAM_CSMASK + ((canidate>>1) << 2), csmask);1248 }1269 if ((canidate & 1) == 0) { //only have 4 CSMASK 1270 pci_write_config32(ctrl->f2, DRAM_CSMASK + ((canidate >> 1) << 2), csmask); 1271 } 1249 1272 1250 1273 } … … 1300 1323 1301 1324 static long disable_dimm(const struct mem_controller *ctrl, unsigned index, 1302 long dimm_mask,struct mem_info *meminfo)1325 struct mem_info *meminfo) 1303 1326 { 1304 1327 print_debug("disabling dimm"); 1305 1328 print_debug_hex8(index); 1306 1329 print_debug("\r\n"); 1307 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1)+0)<<2), 0); 1308 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1)+1)<<2), 0); 1330 if (!(meminfo->dimm_mask & 0x0F) && (meminfo->dimm_mask & 0xF0)) { /* channelB only? */ 1331 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 4) << 2), 0); 1332 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 5) << 2), 0); 1333 } else { 1334 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 0) << 2), 0); 1335 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 1) << 2), 0); 1309 1336 #if QRANK_DIMM_SUPPORT == 1 1310 if (meminfo->sz[index].rank == 4) { 1311 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1)+4)<<2), 0); 1312 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1)+5)<<2), 0); 1313 } 1314 #endif 1315 1316 dimm_mask &= ~(1 << index); 1317 return dimm_mask; 1337 if (meminfo->sz[index].rank == 4) { 1338 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 4) << 2), 0); 1339 pci_write_config32(ctrl->f2, DRAM_CSBASE + (((index << 1) + 5) << 2), 0); 1340 } 1341 #endif 1342 } 1343 1344 meminfo->dimm_mask &= ~(1 << index); 1345 return meminfo->dimm_mask; 1318 1346 } 1319 1347 1320 1348 1321 1349 static long spd_handle_unbuffered_dimms(const struct mem_controller *ctrl, 1322 long dimm_mask,struct mem_info *meminfo)1350 struct mem_info *meminfo) 1323 1351 { 1324 1352 int i; … … 1328 1356 for (i = 0; (i < DIMM_SOCKETS); i++) { 1329 1357 int value; 1330 if (!(dimm_mask & (1 << i))) { 1331 continue; 1332 } 1333 1334 value = spd_read_byte(ctrl->channel0[i], SPD_DIMM_TYPE); 1358 u32 spd_device = ctrl->channel0[i]; 1359 if (!(meminfo->dimm_mask & (1 << i))) { 1360 if (meminfo->dimm_mask & (1 << (DIMM_SOCKETS + i))) { /* channelB only? */ 1361 spd_device = ctrl->channel1[i]; 1362 } else { 1363 continue; 1364 } 1365 } 1366 value = spd_read_byte(spd_device, SPD_DIMM_TYPE); 1335 1367 if (value < 0) { 1336 1368 return -1; … … 1339 1371 /* Registered dimm ? */ 1340 1372 value &= 0x3f; 1341 if ((value == SPD_DIMM_TYPE_RDIMM) || 1342 (value == SPD_DIMM_TYPE_mRDIMM)) { 1343 /* check SPD_MOD_ATTRIB to verify it is 1344 SPD_MOD_ATTRIB_REGADC (0x11)? */ 1373 if ((value == SPD_DIMM_TYPE_RDIMM) || (value == SPD_DIMM_TYPE_mRDIMM)) { 1374 //check SPD_MOD_ATTRIB to verify it is SPD_MOD_ATTRIB_REGADC (0x11)? 1345 1375 registered |= (1<<i); 1346 1376 } … … 1349 1379 if (is_opteron(ctrl)) { 1350 1380 #if 0 1351 if ( registered != ( dimm_mask & ((1<<DIMM_SOCKETS)-1)) ) {1352 dimm_mask &= (registered | (registered << DIMM_SOCKETS) ); //disable unbuffed dimm1381 if ( registered != (meminfo->dimm_mask & ((1<<DIMM_SOCKETS)-1)) ) { 1382 meminfo->dimm_mask &= (registered | (registered << DIMM_SOCKETS) ); //disable unbuffed dimm 1353 1383 // die("Mixed buffered and registered dimms not supported"); 1354 1384 } … … 1377 1407 } 1378 1408 #endif 1379 return dimm_mask;1409 return meminfo->dimm_mask; 1380 1410 } 1381 1411 … … 1407 1437 } 1408 1438 1409 1410 static long spd_enable_2channels(const struct mem_controller *ctrl, long dimm_mask, struct mem_info *meminfo) 1439 static long spd_enable_2channels(const struct mem_controller *ctrl, struct mem_info *meminfo) 1411 1440 { 1412 1441 int i; … … 1439 1468 42, /* *Minimum Auto Refresh Command Time(Trfc) */ 1440 1469 }; 1470 u32 dcl, dcm; 1471 1472 /* S1G1 and AM2 sockets are Mod64BitMux capable. */ 1473 #if CPU_SOCKET_TYPE == 0x11 || CPU_SOCKET_TYPE == 0x12 1474 u8 mux_cap = 1; 1475 #else 1476 u8 mux_cap = 0; 1477 #endif 1478 1441 1479 /* If the dimms are not in pairs do not do dual channels */ 1442 if (( dimm_mask & ((1 << DIMM_SOCKETS) - 1)) !=1443 (( dimm_mask >> DIMM_SOCKETS) & ((1 << DIMM_SOCKETS) - 1))) {1480 if ((meminfo->dimm_mask & ((1 << DIMM_SOCKETS) - 1)) != 1481 ((meminfo->dimm_mask >> DIMM_SOCKETS) & ((1 << DIMM_SOCKETS) - 1))) { 1444 1482 goto single_channel; 1445 1483 } 1446 /* If the cpu is not capable of doing dual channels 1447 don't do dual channels */ 1484 /* If the cpu is not capable of doing dual channels don't do dual channels */ 1448 1485 nbcap = pci_read_config32(ctrl->f3, NORTHBRIDGE_CAP); 1449 1486 if (!(nbcap & NBCAP_128Bit)) { … … 1455 1492 int j; 1456 1493 /* If I don't have a dimm skip this one */ 1457 if (!( dimm_mask & (1 << i))) {1494 if (!(meminfo->dimm_mask & (1 << i))) { 1458 1495 continue; 1459 1496 } … … 1477 1514 } 1478 1515 print_spew("Enabling dual channel memory\r\n"); 1479 uint32_t dcl;1480 1516 dcl = pci_read_config32(ctrl->f2, DRAM_CONFIG_LOW); 1481 1517 dcl &= ~DCL_BurstLength32; /* 32byte mode may be preferred in platforms that include graphics controllers that generate a lot of 32-bytes system memory accesses … … 1484 1520 pci_write_config32(ctrl->f2, DRAM_CONFIG_LOW, dcl); 1485 1521 meminfo->is_Width128 = 1; 1486 return dimm_mask; 1522 return meminfo->dimm_mask; 1523 1487 1524 single_channel: 1488 dimm_mask &= ~((1 << (DIMM_SOCKETS *2)) - (1 << DIMM_SOCKETS));1489 1525 meminfo->is_Width128 = 0; 1490 return dimm_mask; 1526 meminfo->is_64MuxMode = 0; 1527 1528 /* single dimm */ 1529 if ((meminfo->dimm_mask & ((1 << DIMM_SOCKETS) - 1)) != 1530 ((meminfo->dimm_mask >> DIMM_SOCKETS) & ((1 << DIMM_SOCKETS) - 1))) { 1531 if (((meminfo->dimm_mask >> DIMM_SOCKETS) & ((1 << DIMM_SOCKETS) - 1))) { 1532 /* mux capable and single dimm in channelB */ 1533 if (mux_cap) { 1534 printk_spew("Enable 64MuxMode & BurstLength32\n"); 1535 dcm = pci_read_config32(ctrl->f2, DRAM_CTRL_MISC); 1536 dcm |= DCM_Mode64BitMux; 1537 pci_write_config32(ctrl->f2, DRAM_CTRL_MISC, dcm); 1538 dcl = pci_read_config32(ctrl->f2, DRAM_CONFIG_LOW); 1539 //dcl |= DCL_BurstLength32; /* 32byte mode for channelB only */ 1540 pci_write_config32(ctrl->f2, DRAM_CONFIG_LOW, dcl); 1541 meminfo->is_64MuxMode = 1; 1542 } else { 1543 meminfo->dimm_mask &= ~((1 << (DIMM_SOCKETS * 2)) - (1 << DIMM_SOCKETS)); 1544 } 1545 } 1546 } else { /* unmatched dual dimms ? */ 1547 /* unmatched dual dimms not supported by meminit code. Use single channelA dimm. */ 1548 meminfo->dimm_mask &= ~((1 << (DIMM_SOCKETS * 2)) - (1 << DIMM_SOCKETS)); 1549 printk_spew("Unmatched dual dimms. Use single channelA dimm.\n"); 1550 } 1551 return meminfo->dimm_mask; 1491 1552 } 1492 1553 … … 1634 1695 } 1635 1696 1636 static struct spd_set_memclk_result spd_set_memclk(const struct mem_controller *ctrl, long dimm_mask,struct mem_info *meminfo)1697 static struct spd_set_memclk_result spd_set_memclk(const struct mem_controller *ctrl, struct mem_info *meminfo) 1637 1698 { 1638 1699 /* Compute the minimum cycle time for these dimms */ … … 1671 1732 int latencies; 1672 1733 int latency; 1673 1674 if (!(dimm_mask & (1 << i))) { 1675 continue; 1734 u32 spd_device = ctrl->channel0[i]; 1735 1736 print_tx("1.1 dimm_mask:", meminfo->dimm_mask); 1737 if (!(meminfo->dimm_mask & (1 << i))) { 1738 if (meminfo->dimm_mask & (1 << (DIMM_SOCKETS + i))) { /* channelB only? */ 1739 spd_device = ctrl->channel1[i]; 1740 } else { 1741 continue; 1742 } 1676 1743 } 1677 1744 … … 1686 1753 new_latency = 6; 1687 1754 1688 latencies = spd_read_byte( ctrl->channel0[i], SPD_CAS_LAT);1755 latencies = spd_read_byte(spd_device, SPD_CAS_LAT); 1689 1756 if (latencies <= 0) continue; 1690 1757 … … 1701 1768 continue; 1702 1769 } 1703 value = spd_read_byte( ctrl->channel0[i], latency_indicies[index]);1770 value = spd_read_byte(spd_device, latency_indicies[index]); 1704 1771 if (value < 0) { 1705 1772 goto hw_error; … … 1754 1821 print_tx("3 min_latency:", min_latency); 1755 1822 1756 for (i = 0; (i < DIMM_SOCKETS) && (ctrl->channel0[i]); i++) {1823 for (i = 0; (i < DIMM_SOCKETS); i++) { 1757 1824 int latencies; 1758 1825 int latency; 1759 1826 int index; 1760 1827 int value; 1761 if (!(dimm_mask & (1 << i))) { 1762 continue; 1763 } 1764 1765 latencies = spd_read_byte(ctrl->channel0[i], SPD_CAS_LAT); 1828 u32 spd_device = ctrl->channel0[i]; 1829 1830 if (!(meminfo->dimm_mask & (1 << i))) { 1831 if (meminfo->dimm_mask & (1 << (DIMM_SOCKETS + i))) { /* channelB only? */ 1832 spd_device = ctrl->channel1[i]; 1833 } else { 1834 continue; 1835 } 1836 } 1837 1838 latencies = spd_read_byte(spd_device, SPD_CAS_LAT); 1766 1839 if (latencies < 0) goto hw_error; 1767 1840 if (latencies == 0) { … … 1786 1859 1787 1860 /* Read the min_cycle_time for this latency */ 1788 value = spd_read_byte( ctrl->channel0[i], latency_indicies[index]);1861 value = spd_read_byte(spd_device, latency_indicies[index]); 1789 1862 if (value < 0) goto hw_error; 1790 1863 … … 1798 1871 /* Otherwise I have an error, disable the dimm */ 1799 1872 dimm_err: 1800 dimm_mask = disable_dimm(ctrl, i, dimm_mask, meminfo);1873 meminfo->dimm_mask = disable_dimm(ctrl, i, meminfo); 1801 1874 } 1802 1875 … … 1821 1894 pci_write_config32(ctrl->f2, DRAM_TIMING_LOW, value); 1822 1895 1823 result.dimm_mask = dimm_mask;1896 result.dimm_mask = meminfo->dimm_mask; 1824 1897 return result; 1825 1898 hw_error: … … 1838 1911 return valuex; 1839 1912 } 1840 static int update_dimm_Trc(const struct mem_controller *ctrl, const struct mem_param *param, int i) 1913 static int update_dimm_Trc(const struct mem_controller *ctrl, 1914 const struct mem_param *param, 1915 int i, long dimm_mask) 1841 1916 { 1842 1917 unsigned clocks, old_clocks; … … 1844 1919 int value; 1845 1920 int value2; 1846 value = spd_read_byte(ctrl->channel0[i], SPD_TRC); 1921 u32 spd_device = ctrl->channel0[i]; 1922 1923 if (!(dimm_mask & (1 << i)) && (dimm_mask & (1 << (DIMM_SOCKETS + i)))) { /* channelB only? */ 1924 spd_device = ctrl->channel1[i]; 1925 } 1926 1927 value = spd_read_byte(spd_device, SPD_TRC); 1847 1928 if (value < 0) return -1; 1848 1929 1849 value2 = spd_read_byte(ctrl->channel0[i], SPD_TRC -1);1850 value <<= 2;1851 value += convert_to_1_4(value2>>4);1930 value2 = spd_read_byte(spd_device, SPD_TRC -1); 1931 value <<= 2; 1932 value += convert_to_1_4(value2>>4); 1852 1933 1853 1934 value *=10; … … 1879 1960 uint32_t dth; 1880 1961 int value; 1962 u8 ch_b = 0; 1963 u32 spd_device = ctrl->channel0[i]; 1964 1965 if (!(meminfo->dimm_mask & (1 << i)) && (meminfo->dimm_mask & (1 << (DIMM_SOCKETS + i)))) { /* channelB only? */ 1966 spd_device = ctrl->channel1[i]; 1967 ch_b = 2; /* offset to channelB trfc setting */ 1968 } 1881 1969 1882 1970 //get the cs_size --> logic dimm size 1883 value = spd_read_byte( ctrl->channel0[i], SPD_PRI_WIDTH);1971 value = spd_read_byte(spd_device, SPD_PRI_WIDTH); 1884 1972 if (value < 0) { 1885 1973 return -1; … … 1892 1980 dth = pci_read_config32(ctrl->f2, DRAM_TIMING_HIGH); 1893 1981 1894 old_clocks = ((dth >> (DTH_TRFC0_SHIFT+i*3)) & DTH_TRFC_MASK); 1982 old_clocks = ((dth >> (DTH_TRFC0_SHIFT + ((i + ch_b) * 3))) & DTH_TRFC_MASK); 1983 1895 1984 if (old_clocks >= clocks) { // some one did it? 1896 1985 return 1; 1897 1986 } 1898 dth &= ~(DTH_TRFC_MASK << (DTH_TRFC0_SHIFT +i*3));1899 dth |= clocks << (DTH_TRFC0_SHIFT +i*3);1987 dth &= ~(DTH_TRFC_MASK << (DTH_TRFC0_SHIFT + ((i + ch_b) * 3))); 1988 dth |= clocks << (DTH_TRFC0_SHIFT + ((i + ch_b) * 3)); 1900 1989 pci_write_config32(ctrl->f2, DRAM_TIMING_HIGH, dth); 1901 1990 return 1; 1902 1991 } 1903 1992 1904 static int update_dimm_TT_1_4(const struct mem_controller *ctrl, const struct mem_param *param, int i, 1993 static int update_dimm_TT_1_4(const struct mem_controller *ctrl, const struct mem_param *param, int i, long dimm_mask, 1905 1994 unsigned TT_REG, 1906 1995 unsigned SPD_TT, unsigned TT_SHIFT, unsigned TT_MASK, unsigned TT_BASE, unsigned TT_MIN, unsigned TT_MAX ) … … 1909 1998 uint32_t dtl; 1910 1999 int value; 1911 value = spd_read_byte(ctrl->channel0[i], SPD_TT); //already in 1/4 ns 2000 u32 spd_device = ctrl->channel0[i]; 2001 2002 if (!(dimm_mask & (1 << i)) && (dimm_mask & (1 << (DIMM_SOCKETS + i)))) { /* channelB only? */ 2003 spd_device = ctrl->channel1[i]; 2004 } 2005 2006 value = spd_read_byte(spd_device, SPD_TT); //already in 1/4 ns 1912 2007 if (value < 0) return -1; 1913 2008 value *=10; … … 1918 2013 1919 2014 if (clocks > TT_MAX) { 1920 return 0;2015 return 0; 1921 2016 } 1922 2017 … … 1925 2020 old_clocks = ((dtl >> TT_SHIFT) & TT_MASK) + TT_BASE; 1926 2021 if (old_clocks >= clocks) { //some one did it? 1927 // clocks = old_clocks;2022 // clocks = old_clocks; 1928 2023 return 1; 1929 2024 } … … 1936 2031 1937 2032 static int update_dimm_Trcd(const struct mem_controller *ctrl, 1938 const struct mem_param *param, int i) 1939 { 1940 return update_dimm_TT_1_4(ctrl, param, i, DRAM_TIMING_LOW, SPD_TRCD, DTL_TRCD_SHIFT, DTL_TRCD_MASK, DTL_TRCD_BASE, DTL_TRCD_MIN, DTL_TRCD_MAX); 1941 } 1942 1943 1944 static int update_dimm_Trrd(const struct mem_controller *ctrl, const struct mem_param *param, int i) 1945 { 1946 return update_dimm_TT_1_4(ctrl, param, i, DRAM_TIMING_LOW, SPD_TRRD, DTL_TRRD_SHIFT, DTL_TRRD_MASK, DTL_TRRD_BASE, DTL_TRRD_MIN, DTL_TRRD_MAX); 1947 } 1948 1949 1950 static int update_dimm_Tras(const struct mem_controller *ctrl, const struct mem_param *param, int i) 2033 const struct mem_param *param, int i, long dimm_mask) 2034 { 2035 return update_dimm_TT_1_4(ctrl, param, i, dimm_mask, DRAM_TIMING_LOW, SPD_TRCD, DTL_TRCD_SHIFT, DTL_TRCD_MASK, DTL_TRCD_BASE, DTL_TRCD_MIN, DTL_TRCD_MAX); 2036 } 2037 2038 static int update_dimm_Trrd(const struct mem_controller *ctrl, const struct mem_param *param, int i, long dimm_mask) 2039 { 2040 return update_dimm_TT_1_4(ctrl, param, i, dimm_mask, DRAM_TIMING_LOW, SPD_TRRD, DTL_TRRD_SHIFT, DTL_TRRD_MASK, DTL_TRRD_BASE, DTL_TRRD_MIN, DTL_TRRD_MAX); 2041 } 2042
