From 64e38721cde4d9bf6cca0b9e92a5900da1dd9577 Mon Sep 17 00:00:00 2001 From: Renaud Barbier Date: Thu, 13 Mar 2014 18:09:59 +0000 Subject: common: DDR3 SPD verification support Add DDR3 SPD verification support for use by the PPC 8xxx DDR driver. This is based on the equivalent files from U-Boot version git-be937b5. Signed-off-by: Renaud Barbier Signed-off-by: Sascha Hauer --- common/ddr_spd.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'common/ddr_spd.c') 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 +#include #include 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; +} -- cgit v1.2.3