12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /*
- * Copyright 2008 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
- * Version 2 as published by the Free Software Foundation.
- */
- #include <common.h>
- #include <ddr_spd.h>
- /* used for ddr1 and ddr2 spd */
- static int
- spd_check(const u8 *buf, u8 spd_rev, u8 spd_cksum)
- {
- unsigned int cksum = 0;
- unsigned int i;
- /*
- * Check SPD revision supported
- * Rev 1.2 or less supported by this code
- */
- if (spd_rev > 0x12) {
- printf("SPD revision %02X not supported by this code\n",
- spd_rev);
- return 1;
- }
- /*
- * Calculate checksum
- */
- for (i = 0; i < 63; i++) {
- cksum += *buf++;
- }
- cksum &= 0xFF;
- if (cksum != spd_cksum) {
- printf("SPD checksum unexpected. "
- "Checksum in SPD = %02X, computed SPD = %02X\n",
- spd_cksum, cksum);
- return 1;
- }
- return 0;
- }
- unsigned int
- ddr1_spd_check(const ddr1_spd_eeprom_t *spd)
- {
- const u8 *p = (const u8 *)spd;
- return spd_check(p, spd->spd_rev, spd->cksum);
- }
- unsigned int
- ddr2_spd_check(const ddr2_spd_eeprom_t *spd)
- {
- const u8 *p = (const u8 *)spd;
- return spd_check(p, spd->spd_rev, spd->cksum);
- }
|