Skip to content
Snippets Groups Projects
Select Git revision
  • 8c57f20eebede3cbe6ea2573d02a7ff9565bac3d
  • ex400 default
  • iop-mediatek-20250604
  • ubi-fastmap
  • add-dtb-rescan
  • agnau-blorgoda
  • agnau-scratch
  • mediatek-20250604
  • iop-mediatek-20250304
  • iop-mediatek-20250304-loc
  • agnau-mtk-back
  • iop-mediatek-20250304-back
  • iop-mediatek-20220630
  • jani-multi-dtb
  • jani-multi-dtb-spl
  • mediatek-20220630
  • iop-mediatek-20220606
  • jani-env-update-mtk
  • jani-env-update-mtk-txt
  • jani-iop-20220606
  • jani-mtk-20220606
  • mediatek-20220606
  • v2023.01-rc1
  • v2022.10
  • v2022.10-rc5
  • v2022.10-rc4
  • v2022.10-rc3
  • v2022.10-rc2
  • v2022.10-rc1
  • v2022.07
  • v2022.07-rc6
  • v2022.07-rc5
  • v2022.07-rc4
  • v2022.07-rc3
  • v2022.07-rc2
  • v2022.07-rc1
  • v2022.04
  • v2022.04-rc5
  • v2022.04-rc4
  • v2022.04-rc3
  • v2022.04-rc2
  • v2022.04-rc1
42 results

ddr_spd.c

Blame
  • ddr_spd.c 3.14 KiB
    /*
     * Copyright 2008-2014 Freescale Semiconductor, Inc.
     *
     * SPDX-License-Identifier:	GPL-2.0
     */
    
    #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.X or less supported by this code
    	 */
    	if (spd_rev >= 0x20) {
    		printf("SPD revision %02X not supported by this code\n",
    		       spd_rev);
    		return 1;
    	}
    	if (spd_rev > 0x13) {
    		printf("SPD revision %02X not verified by this code\n",
    		       spd_rev);
    	}
    
    	/*
    	 * 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);
    }
    
    /*
     * CRC16 compute for DDR3 SPD
     * Copied from DDR3 SPD spec.
     */
    static int
    crc16(char *ptr, int count)