diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2014-04-04 10:06:22 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2014-04-04 10:06:22 +0200 |
commit | 0a5529d0edcd8c00a679c485f7266548851c6948 (patch) | |
tree | 3c8fd0ac7cdf3d9cbbdb1ca628b488e24bb05aa0 /common | |
parent | 149e9d8121a1bf1ea1477e0eabfee1e1bfb2697f (diff) | |
parent | 3e445eb1c78a1916acd2ec5238af58cd83509e94 (diff) | |
download | barebox-0a5529d0edcd8c00a679c485f7266548851c6948.tar.gz barebox-0a5529d0edcd8c00a679c485f7266548851c6948.tar.xz |
Merge branch 'for-next/ppc'
Diffstat (limited to 'common')
-rw-r--r-- | common/ddr_spd.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/common/ddr_spd.c b/common/ddr_spd.c index c8b73ff56c..ea0b529eed 100644 --- a/common/ddr_spd.c +++ b/common/ddr_spd.c @@ -7,6 +7,7 @@ */ #include <common.h> +#include <crc.h> #include <ddr_spd.h> uint32_t ddr2_spd_checksum_pass(const struct ddr2_spd_eeprom_s *spd) @@ -37,3 +38,26 @@ uint32_t ddr2_spd_checksum_pass(const struct ddr2_spd_eeprom_s *spd) error: return 1; } + +uint32_t ddr3_spd_checksum_pass(const struct ddr3_spd_eeprom_s *spd) +{ + char crc_lsb, crc_msb; + int csum16, len; + + /* + * SPD byte0[7] - CRC coverage + * 0 = CRC covers bytes 0~125 + * 1 = CRC covers bytes 0~116 + */ + + len = !(spd->info_size_crc & 0x80) ? 126 : 117; + csum16 = cyg_crc16((char *)spd, len); + + crc_lsb = (char) (csum16 & 0xff); + crc_msb = (char) (csum16 >> 8); + + if (spd->crc[0] != crc_lsb || spd->crc[1] != crc_msb) + return 1; + + return 0; +} |