diff options
author | Tom Rini <trini@ti.com> | 2014-04-25 14:53:51 -0400 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2014-04-25 14:53:51 -0400 |
commit | 080d897585428d0fd42c237abfb6746908f4effc (patch) | |
tree | dc65d6d4bbbf1a7f06bbb045a981270a7624ec67 /common/ddr_spd.c | |
parent | adcdeacc3eda1e5949e54062aa99c299e12483be (diff) | |
parent | 08ad9b068afb8842df4cd559c327f54a42811a8d (diff) | |
download | u-boot-imx-080d897585428d0fd42c237abfb6746908f4effc.zip u-boot-imx-080d897585428d0fd42c237abfb6746908f4effc.tar.gz u-boot-imx-080d897585428d0fd42c237abfb6746908f4effc.tar.bz2 |
Merge branch 'master' of git://git.denx.de/u-boot-mpc85xx
Diffstat (limited to 'common/ddr_spd.c')
-rw-r--r-- | common/ddr_spd.c | 45 |
1 files changed, 44 insertions, 1 deletions
diff --git a/common/ddr_spd.c b/common/ddr_spd.c index 7a388bb..438e71a 100644 --- a/common/ddr_spd.c +++ b/common/ddr_spd.c @@ -1,5 +1,5 @@ /* - * Copyright 2008 Freescale Semiconductor, Inc. + * Copyright 2008-2014 Freescale Semiconductor, Inc. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -116,3 +116,46 @@ ddr3_spd_check(const ddr3_spd_eeprom_t *spd) return 1; } } + +unsigned int ddr4_spd_check(const struct ddr4_spd_eeprom_s *spd) +{ + char *p = (char *)spd; + int csum16; + int len; + char crc_lsb; /* byte 126 */ + char crc_msb; /* byte 127 */ + + len = 126; + csum16 = crc16(p, len); + + crc_lsb = (char) (csum16 & 0xff); + crc_msb = (char) (csum16 >> 8); + + if (spd->crc[0] != crc_lsb || spd->crc[1] != crc_msb) { + printf("SPD checksum unexpected.\n" + "Checksum lsb in SPD = %02X, computed SPD = %02X\n" + "Checksum msb in SPD = %02X, computed SPD = %02X\n", + spd->crc[0], crc_lsb, spd->crc[1], crc_msb); + return 1; + } + + p = (char *)((ulong)spd + 128); + len = 126; + csum16 = crc16(p, len); + + crc_lsb = (char) (csum16 & 0xff); + crc_msb = (char) (csum16 >> 8); + + if (spd->mod_section.uc[126] != crc_lsb || + spd->mod_section.uc[127] != crc_msb) { + printf("SPD checksum unexpected.\n" + "Checksum lsb in SPD = %02X, computed SPD = %02X\n" + "Checksum msb in SPD = %02X, computed SPD = %02X\n", + spd->mod_section.uc[126], + crc_lsb, spd->mod_section.uc[127], + crc_msb); + return 1; + } + + return 0; +} |