1c18ec02fSPetter Reinholdtsen /* 2c18ec02fSPetter Reinholdtsen * Copyright (c) 2003 Sun Microsystems, Inc. All Rights Reserved. 3c18ec02fSPetter Reinholdtsen * 4c18ec02fSPetter Reinholdtsen * Redistribution and use in source and binary forms, with or without 5c18ec02fSPetter Reinholdtsen * modification, are permitted provided that the following conditions 6c18ec02fSPetter Reinholdtsen * are met: 7c18ec02fSPetter Reinholdtsen * 8c18ec02fSPetter Reinholdtsen * Redistribution of source code must retain the above copyright 9c18ec02fSPetter Reinholdtsen * notice, this list of conditions and the following disclaimer. 10c18ec02fSPetter Reinholdtsen * 11c18ec02fSPetter Reinholdtsen * Redistribution in binary form must reproduce the above copyright 12c18ec02fSPetter Reinholdtsen * notice, this list of conditions and the following disclaimer in the 13c18ec02fSPetter Reinholdtsen * documentation and/or other materials provided with the distribution. 14c18ec02fSPetter Reinholdtsen * 15c18ec02fSPetter Reinholdtsen * Neither the name of Sun Microsystems, Inc. or the names of 16c18ec02fSPetter Reinholdtsen * contributors may be used to endorse or promote products derived 17c18ec02fSPetter Reinholdtsen * from this software without specific prior written permission. 18c18ec02fSPetter Reinholdtsen * 19c18ec02fSPetter Reinholdtsen * This software is provided "AS IS," without a warranty of any kind. 20c18ec02fSPetter Reinholdtsen * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, 21c18ec02fSPetter Reinholdtsen * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A 22c18ec02fSPetter Reinholdtsen * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. 23c18ec02fSPetter Reinholdtsen * SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE 24c18ec02fSPetter Reinholdtsen * FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING 25c18ec02fSPetter Reinholdtsen * OR DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL 26c18ec02fSPetter Reinholdtsen * SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, 27c18ec02fSPetter Reinholdtsen * OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR 28c18ec02fSPetter Reinholdtsen * PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF 29c18ec02fSPetter Reinholdtsen * LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, 30c18ec02fSPetter Reinholdtsen * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 31c18ec02fSPetter Reinholdtsen */ 32c18ec02fSPetter Reinholdtsen 33c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi.h> 34c18ec02fSPetter Reinholdtsen #include <ipmitool/log.h> 35c18ec02fSPetter Reinholdtsen #include <ipmitool/helper.h> 36c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_intf.h> 37c18ec02fSPetter Reinholdtsen #include <ipmitool/ipmi_fru.h> 38c18ec02fSPetter Reinholdtsen 39c18ec02fSPetter Reinholdtsen #include <stdlib.h> 40c18ec02fSPetter Reinholdtsen #include <string.h> 41c18ec02fSPetter Reinholdtsen 42c18ec02fSPetter Reinholdtsen extern int verbose; 43c18ec02fSPetter Reinholdtsen 44c18ec02fSPetter Reinholdtsen /* 45c18ec02fSPetter Reinholdtsen * Also, see ipmi_fru.c. 46c18ec02fSPetter Reinholdtsen * 47c18ec02fSPetter Reinholdtsen * Apparently some systems have problems with FRU access greater than 16 bytes 48c18ec02fSPetter Reinholdtsen * at a time, even when using byte (not word) access. In order to ensure we 49c18ec02fSPetter Reinholdtsen * work with the widest variety of hardware request size is capped at 16 bytes. 50c18ec02fSPetter Reinholdtsen * Since this may result in slowdowns on some systems with lots of FRU data you 51c18ec02fSPetter Reinholdtsen * can change this define to enable larger (up to 32 bytes at a time) access. 52c18ec02fSPetter Reinholdtsen */ 53c18ec02fSPetter Reinholdtsen #define FRU_DATA_RQST_SIZE 16; 54c18ec02fSPetter Reinholdtsen 55c18ec02fSPetter Reinholdtsen const struct valstr spd_memtype_vals[] = { 56c18ec02fSPetter Reinholdtsen { 0x01, "STD FPM DRAM" }, 57c18ec02fSPetter Reinholdtsen { 0x02, "EDO" }, 58c18ec02fSPetter Reinholdtsen { 0x04, "SDRAM" }, 59c18ec02fSPetter Reinholdtsen { 0x05, "ROM" }, 60c18ec02fSPetter Reinholdtsen { 0x06, "DDR SGRAM" }, 61c18ec02fSPetter Reinholdtsen { 0x07, "DDR SDRAM" }, 62c18ec02fSPetter Reinholdtsen { 0x08, "DDR2 SDRAM" }, 63c18ec02fSPetter Reinholdtsen { 0x09, "DDR2 SDRAM FB-DIMM" }, 64c18ec02fSPetter Reinholdtsen { 0x0A, "DDR2 SDRAM FB-DIMM Probe" }, 65c18ec02fSPetter Reinholdtsen { 0x0B, "DDR3 SDRAM" }, 66732be1b9SJim Mankovich { 0x0C, "DDR4 SDRAM" }, 67c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 68c18ec02fSPetter Reinholdtsen }; 69c18ec02fSPetter Reinholdtsen 70c18ec02fSPetter Reinholdtsen const struct valstr ddr3_density_vals[] = 71c18ec02fSPetter Reinholdtsen { 72c18ec02fSPetter Reinholdtsen { 0, "256 Mb" }, 73c18ec02fSPetter Reinholdtsen { 1, "512 Mb" }, 74c18ec02fSPetter Reinholdtsen { 2, "1 Gb" }, 75c18ec02fSPetter Reinholdtsen { 3, "2 Gb" }, 76c18ec02fSPetter Reinholdtsen { 4, "4 Gb" }, 77c18ec02fSPetter Reinholdtsen { 5, "8 Gb" }, 78c18ec02fSPetter Reinholdtsen { 6, "16 Gb" }, 79c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 80c18ec02fSPetter Reinholdtsen }; 81c18ec02fSPetter Reinholdtsen 82c18ec02fSPetter Reinholdtsen const struct valstr ddr3_banks_vals[] = 83c18ec02fSPetter Reinholdtsen { 84c18ec02fSPetter Reinholdtsen { 0, "3 (8 Banks)" }, 85c18ec02fSPetter Reinholdtsen { 1, "4 (16 Banks)" }, 86c18ec02fSPetter Reinholdtsen { 2, "5 (32 Banks)" }, 87c18ec02fSPetter Reinholdtsen { 3, "6 (64 Banks)" }, 88c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 89c18ec02fSPetter Reinholdtsen }; 90c18ec02fSPetter Reinholdtsen 9196b19bb6SJim Mankovich 9296b19bb6SJim Mankovich #define ddr4_ecc_vals ddr3_ecc_vals 93c18ec02fSPetter Reinholdtsen const struct valstr ddr3_ecc_vals[] = 94c18ec02fSPetter Reinholdtsen { 95c18ec02fSPetter Reinholdtsen { 0, "0 bits" }, 96c18ec02fSPetter Reinholdtsen { 1, "8 bits" }, 97c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 98c18ec02fSPetter Reinholdtsen }; 99c18ec02fSPetter Reinholdtsen 10096b19bb6SJim Mankovich const struct valstr ddr4_density_vals[] = 10196b19bb6SJim Mankovich { 10296b19bb6SJim Mankovich { 0, "256 Mb" }, 10396b19bb6SJim Mankovich { 1, "512 Mb" }, 10496b19bb6SJim Mankovich { 2, "1 Gb" }, 10596b19bb6SJim Mankovich { 3, "2 Gb" }, 10696b19bb6SJim Mankovich { 4, "4 Gb" }, 10796b19bb6SJim Mankovich { 5, "8 Gb" }, 10896b19bb6SJim Mankovich { 6, "16 Gb" }, 10996b19bb6SJim Mankovich { 7, "32 Gb" }, 11096b19bb6SJim Mankovich { 0x00, NULL }, 11196b19bb6SJim Mankovich }; 11296b19bb6SJim Mankovich 11396b19bb6SJim Mankovich const struct valstr ddr4_banks_vals[] = 11496b19bb6SJim Mankovich { 11596b19bb6SJim Mankovich { 0, "2 (4 Banks)" }, 11696b19bb6SJim Mankovich { 1, "3 (8 Banks)" }, 11796b19bb6SJim Mankovich { 0x00, NULL }, 11896b19bb6SJim Mankovich }; 11996b19bb6SJim Mankovich 12096b19bb6SJim Mankovich const struct valstr ddr4_bank_groups[] = 12196b19bb6SJim Mankovich { 12296b19bb6SJim Mankovich { 0, "0 (no Bank Groups)" }, 12396b19bb6SJim Mankovich { 1, "1 (2 Bank Groups)" }, 12496b19bb6SJim Mankovich { 2, "2 (4 Bank Groups)" }, 12596b19bb6SJim Mankovich { 0x00, NULL }, 12696b19bb6SJim Mankovich }; 12796b19bb6SJim Mankovich 12896b19bb6SJim Mankovich const struct valstr ddr4_package_type[] = 12996b19bb6SJim Mankovich { 13096b19bb6SJim Mankovich { 0, "Monolithic DRAM Device" }, 13196b19bb6SJim Mankovich { 1, "Non-Monolithic Device" }, 13296b19bb6SJim Mankovich { 0x00, NULL }, 13396b19bb6SJim Mankovich }; 13496b19bb6SJim Mankovich 13596b19bb6SJim Mankovich const struct valstr ddr4_technology_type[] = 13696b19bb6SJim Mankovich { 13796b19bb6SJim Mankovich { 0, "Extended module type, see byte 15" }, 13896b19bb6SJim Mankovich { 1, "RDIMM" }, 13996b19bb6SJim Mankovich { 2, "UDIMM" }, 14096b19bb6SJim Mankovich { 3, "SO-DIMM" }, 14196b19bb6SJim Mankovich { 4, "LRDIMM" }, 14296b19bb6SJim Mankovich { 5, "Mini-RDIMM" }, 14396b19bb6SJim Mankovich { 6, "Mini-UDIMM" }, 14496b19bb6SJim Mankovich { 7, "7 - Reserved" }, 14596b19bb6SJim Mankovich { 8, "72b-SO-RDIMM" }, 14696b19bb6SJim Mankovich { 9, "72b-SO-UDIMM" }, 14796b19bb6SJim Mankovich { 10, "10 - Reserved" }, 14896b19bb6SJim Mankovich { 11, "11 - Reserved" }, 14996b19bb6SJim Mankovich { 12, "16b-SO-DIMM" }, 15096b19bb6SJim Mankovich { 13, "32b-SO-DIMM" }, 15196b19bb6SJim Mankovich { 14, "14 - Reserved" }, 15296b19bb6SJim Mankovich { 15, "No base memory present" }, 15396b19bb6SJim Mankovich { 0x00, NULL }, 15496b19bb6SJim Mankovich }; 15596b19bb6SJim Mankovich 156c18ec02fSPetter Reinholdtsen const struct valstr spd_config_vals[] = { 157c18ec02fSPetter Reinholdtsen { 0x00, "None" }, 158c18ec02fSPetter Reinholdtsen { 0x01, "Parity" }, 159c18ec02fSPetter Reinholdtsen { 0x02, "ECC" }, 160c18ec02fSPetter Reinholdtsen { 0x04, "Addr Cmd Parity" }, 161c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 162c18ec02fSPetter Reinholdtsen }; 163c18ec02fSPetter Reinholdtsen 164c18ec02fSPetter Reinholdtsen const struct valstr spd_voltage_vals[] = { 165c18ec02fSPetter Reinholdtsen { 0x00, "5.0V TTL" }, 166c18ec02fSPetter Reinholdtsen { 0x01, "LVTTL" }, 167c18ec02fSPetter Reinholdtsen { 0x02, "HSTL 1.5V" }, 168c18ec02fSPetter Reinholdtsen { 0x03, "SSTL 3.3V" }, 169c18ec02fSPetter Reinholdtsen { 0x04, "SSTL 2.5V" }, 170c18ec02fSPetter Reinholdtsen { 0x05, "SSTL 1.8V" }, 171c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 172c18ec02fSPetter Reinholdtsen }; 173c18ec02fSPetter Reinholdtsen 174c18ec02fSPetter Reinholdtsen /* 175c18ec02fSPetter Reinholdtsen * JEDEC Standard Manufacturers Identification Code 176c18ec02fSPetter Reinholdtsen * publication JEP106N, December 2003 177c18ec02fSPetter Reinholdtsen */ 178c18ec02fSPetter Reinholdtsen 179c18ec02fSPetter Reinholdtsen const struct valstr jedec_id1_vals[] = { 180c18ec02fSPetter Reinholdtsen { 0x01, "AMD" }, 181c18ec02fSPetter Reinholdtsen { 0x02, "AMI" }, 182c18ec02fSPetter Reinholdtsen { 0x83, "Fairchild" }, 183c18ec02fSPetter Reinholdtsen { 0x04, "Fujitsu" }, 184c18ec02fSPetter Reinholdtsen { 0x85, "GTE" }, 185c18ec02fSPetter Reinholdtsen { 0x86, "Harris" }, 186c18ec02fSPetter Reinholdtsen { 0x07, "Hitachi" }, 187c18ec02fSPetter Reinholdtsen { 0x08, "Inmos" }, 188c18ec02fSPetter Reinholdtsen { 0x89, "Intel" }, 189c18ec02fSPetter Reinholdtsen { 0x8a, "I.T.T." }, 190c18ec02fSPetter Reinholdtsen { 0x0b, "Intersil" }, 191c18ec02fSPetter Reinholdtsen { 0x8c, "Monolithic Memories" }, 192c18ec02fSPetter Reinholdtsen { 0x0d, "Mostek" }, 193c18ec02fSPetter Reinholdtsen { 0x0e, "Motorola" }, 194c18ec02fSPetter Reinholdtsen { 0x8f, "National" }, 195c18ec02fSPetter Reinholdtsen { 0x10, "NEC" }, 196c18ec02fSPetter Reinholdtsen { 0x91, "RCA" }, 197c18ec02fSPetter Reinholdtsen { 0x92, "Raytheon" }, 198c18ec02fSPetter Reinholdtsen { 0x13, "Conexant (Rockwell)" }, 199c18ec02fSPetter Reinholdtsen { 0x94, "Seeq" }, 200c18ec02fSPetter Reinholdtsen { 0x15, "Philips Semi. (Signetics)" }, 201c18ec02fSPetter Reinholdtsen { 0x16, "Synertek" }, 202c18ec02fSPetter Reinholdtsen { 0x97, "Texas Instruments" }, 203c18ec02fSPetter Reinholdtsen { 0x98, "Toshiba" }, 204c18ec02fSPetter Reinholdtsen { 0x19, "Xicor" }, 205c18ec02fSPetter Reinholdtsen { 0x1a, "Zilog" }, 206c18ec02fSPetter Reinholdtsen { 0x9b, "Eurotechnique" }, 207c18ec02fSPetter Reinholdtsen { 0x1c, "Mitsubishi" }, 208c18ec02fSPetter Reinholdtsen { 0x9d, "Lucent (AT&T)" }, 209c18ec02fSPetter Reinholdtsen { 0x9e, "Exel" }, 210c18ec02fSPetter Reinholdtsen { 0x1f, "Atmel" }, 211c18ec02fSPetter Reinholdtsen { 0x20, "SGS/Thomson" }, 212c18ec02fSPetter Reinholdtsen { 0xa1, "Lattice Semi." }, 213c18ec02fSPetter Reinholdtsen { 0xa2, "NCR" }, 214c18ec02fSPetter Reinholdtsen { 0x23, "Wafer Scale Integration" }, 215c18ec02fSPetter Reinholdtsen { 0xa4, "IBM" }, 216c18ec02fSPetter Reinholdtsen { 0x25, "Tristar" }, 217c18ec02fSPetter Reinholdtsen { 0x26, "Visic" }, 218c18ec02fSPetter Reinholdtsen { 0xa7, "Intl. CMOS Technology" }, 219c18ec02fSPetter Reinholdtsen { 0xa8, "SSSI" }, 220c18ec02fSPetter Reinholdtsen { 0x29, "Microchip Technology" }, 221c18ec02fSPetter Reinholdtsen { 0x2a, "Ricoh Ltd." }, 222c18ec02fSPetter Reinholdtsen { 0xab, "VLSI" }, 223c18ec02fSPetter Reinholdtsen { 0x2c, "Micron Technology" }, 224c18ec02fSPetter Reinholdtsen { 0xad, "Hyundai Electronics" }, 225c18ec02fSPetter Reinholdtsen { 0xae, "OKI Semiconductor" }, 226c18ec02fSPetter Reinholdtsen { 0x2f, "ACTEL" }, 227c18ec02fSPetter Reinholdtsen { 0xb0, "Sharp" }, 228c18ec02fSPetter Reinholdtsen { 0x31, "Catalyst" }, 229c18ec02fSPetter Reinholdtsen { 0x32, "Panasonic" }, 230c18ec02fSPetter Reinholdtsen { 0xb3, "IDT" }, 231c18ec02fSPetter Reinholdtsen { 0x34, "Cypress" }, 232c18ec02fSPetter Reinholdtsen { 0xb5, "DEC" }, 233c18ec02fSPetter Reinholdtsen { 0xb6, "LSI Logic" }, 234c18ec02fSPetter Reinholdtsen { 0x37, "Zarlink" }, 235c18ec02fSPetter Reinholdtsen { 0x38, "UTMC" }, 236c18ec02fSPetter Reinholdtsen { 0xb9, "Thinking Machine" }, 237c18ec02fSPetter Reinholdtsen { 0xba, "Thomson CSF" }, 238c18ec02fSPetter Reinholdtsen { 0x3b, "Integrated CMOS(Vertex)" }, 239c18ec02fSPetter Reinholdtsen { 0xbc, "Honeywell" }, 240c18ec02fSPetter Reinholdtsen { 0x3d, "Tektronix" }, 241c18ec02fSPetter Reinholdtsen { 0x3e, "Sun Microsystems" }, 242c18ec02fSPetter Reinholdtsen { 0xbf, "SST" }, 243c18ec02fSPetter Reinholdtsen { 0x40, "MOSEL" }, 244c18ec02fSPetter Reinholdtsen { 0xc1, "Infineon" }, 245c18ec02fSPetter Reinholdtsen { 0xc2, "Macronix" }, 246c18ec02fSPetter Reinholdtsen { 0x43, "Xerox" }, 247c18ec02fSPetter Reinholdtsen { 0xc4, "Plus Logic" }, 248c18ec02fSPetter Reinholdtsen { 0x45, "SunDisk" }, 249c18ec02fSPetter Reinholdtsen { 0x46, "Elan Circuit Tech." }, 250c18ec02fSPetter Reinholdtsen { 0xc7, "European Silicon Str." }, 251c18ec02fSPetter Reinholdtsen { 0xc8, "Apple Computer" }, 252c18ec02fSPetter Reinholdtsen { 0xc9, "Xilinx" }, 253c18ec02fSPetter Reinholdtsen { 0x4a, "Compaq" }, 254c18ec02fSPetter Reinholdtsen { 0xcb, "Protocol Engines" }, 255c18ec02fSPetter Reinholdtsen { 0x4c, "SCI" }, 256c18ec02fSPetter Reinholdtsen { 0xcd, "Seiko Instruments" }, 257c18ec02fSPetter Reinholdtsen { 0xce, "Samsung" }, 258c18ec02fSPetter Reinholdtsen { 0x4f, "I3 Design System" }, 259c18ec02fSPetter Reinholdtsen { 0xd0, "Klic" }, 260c18ec02fSPetter Reinholdtsen { 0x51, "Crosspoint Solutions" }, 261c18ec02fSPetter Reinholdtsen { 0x52, "Alliance Semiconductor" }, 262c18ec02fSPetter Reinholdtsen { 0xd3, "Tandem" }, 263c18ec02fSPetter Reinholdtsen { 0x54, "Hewlett-Packard" }, 264c18ec02fSPetter Reinholdtsen { 0xd5, "Intg. Silicon Solutions" }, 265c18ec02fSPetter Reinholdtsen { 0xd6, "Brooktree" }, 266c18ec02fSPetter Reinholdtsen { 0x57, "New Media" }, 267c18ec02fSPetter Reinholdtsen { 0x58, "MHS Electronic" }, 268c18ec02fSPetter Reinholdtsen { 0xd9, "Performance Semi." }, 269c18ec02fSPetter Reinholdtsen { 0xda, "Winbond Electronic" }, 270c18ec02fSPetter Reinholdtsen { 0x5b, "Kawasaki Steel" }, 271c18ec02fSPetter Reinholdtsen { 0xdc, "Bright Micro" }, 272c18ec02fSPetter Reinholdtsen { 0x5d, "TECMAR" }, 273c18ec02fSPetter Reinholdtsen { 0x5e, "Exar" }, 274c18ec02fSPetter Reinholdtsen { 0xdf, "PCMCIA" }, 275c18ec02fSPetter Reinholdtsen { 0xe0, "LG Semiconductor" }, 276c18ec02fSPetter Reinholdtsen { 0x61, "Northern Telecom" }, 277c18ec02fSPetter Reinholdtsen { 0x62, "Sanyo" }, 278c18ec02fSPetter Reinholdtsen { 0xe3, "Array Microsystems" }, 279c18ec02fSPetter Reinholdtsen { 0x64, "Crystal Semiconductor" }, 280c18ec02fSPetter Reinholdtsen { 0xe5, "Analog Devices" }, 281c18ec02fSPetter Reinholdtsen { 0xe6, "PMC-Sierra" }, 282c18ec02fSPetter Reinholdtsen { 0x67, "Asparix" }, 283c18ec02fSPetter Reinholdtsen { 0x68, "Convex Computer" }, 284c18ec02fSPetter Reinholdtsen { 0xe9, "Quality Semiconductor" }, 285c18ec02fSPetter Reinholdtsen { 0xea, "Nimbus Technology" }, 286c18ec02fSPetter Reinholdtsen { 0x6b, "Transwitch" }, 287c18ec02fSPetter Reinholdtsen { 0xec, "Micronas (ITT Intermetall)" }, 288c18ec02fSPetter Reinholdtsen { 0x6d, "Cannon" }, 289c18ec02fSPetter Reinholdtsen { 0x6e, "Altera" }, 290c18ec02fSPetter Reinholdtsen { 0xef, "NEXCOM" }, 291c18ec02fSPetter Reinholdtsen { 0x70, "QUALCOMM" }, 292c18ec02fSPetter Reinholdtsen { 0xf1, "Sony" }, 293c18ec02fSPetter Reinholdtsen { 0xf2, "Cray Research" }, 294c18ec02fSPetter Reinholdtsen { 0x73, "AMS (Austria Micro)" }, 295c18ec02fSPetter Reinholdtsen { 0xf4, "Vitesse" }, 296c18ec02fSPetter Reinholdtsen { 0x75, "Aster Electronics" }, 297c18ec02fSPetter Reinholdtsen { 0x76, "Bay Networks (Synoptic)" }, 298c18ec02fSPetter Reinholdtsen { 0xf7, "Zentrum" }, 299c18ec02fSPetter Reinholdtsen { 0xf8, "TRW" }, 300c18ec02fSPetter Reinholdtsen { 0x79, "Thesys" }, 301c18ec02fSPetter Reinholdtsen { 0x7a, "Solbourne Computer" }, 302c18ec02fSPetter Reinholdtsen { 0xfb, "Allied-Signal" }, 303c18ec02fSPetter Reinholdtsen { 0x7c, "Dialog" }, 304c18ec02fSPetter Reinholdtsen { 0xfd, "Media Vision" }, 305c18ec02fSPetter Reinholdtsen { 0xfe, "Level One Communication" }, 306c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 307c18ec02fSPetter Reinholdtsen }; 308c18ec02fSPetter Reinholdtsen 309c18ec02fSPetter Reinholdtsen const struct valstr jedec_id2_vals[] = { 310c18ec02fSPetter Reinholdtsen { 0x01, "Cirrus Logic" }, 311c18ec02fSPetter Reinholdtsen { 0x02, "National Instruments" }, 312c18ec02fSPetter Reinholdtsen { 0x83, "ILC Data Device" }, 313c18ec02fSPetter Reinholdtsen { 0x04, "Alcatel Mietec" }, 314c18ec02fSPetter Reinholdtsen { 0x85, "Micro Linear" }, 315c18ec02fSPetter Reinholdtsen { 0x86, "Univ. of NC" }, 316c18ec02fSPetter Reinholdtsen { 0x07, "JTAG Technologies" }, 317c18ec02fSPetter Reinholdtsen { 0x08, "Loral" }, 318c18ec02fSPetter Reinholdtsen { 0x89, "Nchip" }, 319c18ec02fSPetter Reinholdtsen { 0x8A, "Galileo Tech" }, 320c18ec02fSPetter Reinholdtsen { 0x0B, "Bestlink Systems" }, 321c18ec02fSPetter Reinholdtsen { 0x8C, "Graychip" }, 322c18ec02fSPetter Reinholdtsen { 0x0D, "GENNUM" }, 323c18ec02fSPetter Reinholdtsen { 0x0E, "VideoLogic" }, 324c18ec02fSPetter Reinholdtsen { 0x8F, "Robert Bosch" }, 325c18ec02fSPetter Reinholdtsen { 0x10, "Chip Express" }, 326c18ec02fSPetter Reinholdtsen { 0x91, "DATARAM" }, 327c18ec02fSPetter Reinholdtsen { 0x92, "United Microelec Corp." }, 328c18ec02fSPetter Reinholdtsen { 0x13, "TCSI" }, 329c18ec02fSPetter Reinholdtsen { 0x94, "Smart Modular" }, 330c18ec02fSPetter Reinholdtsen { 0x15, "Hughes Aircraft" }, 331c18ec02fSPetter Reinholdtsen { 0x16, "Lanstar Semiconductor" }, 332c18ec02fSPetter Reinholdtsen { 0x97, "Qlogic" }, 333c18ec02fSPetter Reinholdtsen { 0x98, "Kingston" }, 334c18ec02fSPetter Reinholdtsen { 0x19, "Music Semi" }, 335c18ec02fSPetter Reinholdtsen { 0x1A, "Ericsson Components" }, 336c18ec02fSPetter Reinholdtsen { 0x9B, "SpaSE" }, 337c18ec02fSPetter Reinholdtsen { 0x1C, "Eon Silicon Devices" }, 338c18ec02fSPetter Reinholdtsen { 0x9D, "Programmable Micro Corp" }, 339c18ec02fSPetter Reinholdtsen { 0x9E, "DoD" }, 340c18ec02fSPetter Reinholdtsen { 0x1F, "Integ. Memories Tech." }, 341c18ec02fSPetter Reinholdtsen { 0x20, "Corollary Inc." }, 342c18ec02fSPetter Reinholdtsen { 0xA1, "Dallas Semiconductor" }, 343c18ec02fSPetter Reinholdtsen { 0xA2, "Omnivision" }, 344c18ec02fSPetter Reinholdtsen { 0x23, "EIV(Switzerland)" }, 345c18ec02fSPetter Reinholdtsen { 0xA4, "Novatel Wireless" }, 346c18ec02fSPetter Reinholdtsen { 0x25, "Zarlink (formerly Mitel)" }, 347c18ec02fSPetter Reinholdtsen { 0x26, "Clearpoint" }, 348c18ec02fSPetter Reinholdtsen { 0xA7, "Cabletron" }, 349c18ec02fSPetter Reinholdtsen { 0xA8, "Silicon Technology" }, 350c18ec02fSPetter Reinholdtsen { 0x29, "Vanguard" }, 351c18ec02fSPetter Reinholdtsen { 0x2A, "Hagiwara Sys-Com" }, 352c18ec02fSPetter Reinholdtsen { 0xAB, "Vantis" }, 353c18ec02fSPetter Reinholdtsen { 0x2C, "Celestica" }, 354c18ec02fSPetter Reinholdtsen { 0xAD, "Century" }, 355c18ec02fSPetter Reinholdtsen { 0xAE, "Hal Computers" }, 356c18ec02fSPetter Reinholdtsen { 0x2F, "Rohm Company Ltd." }, 357c18ec02fSPetter Reinholdtsen { 0xB0, "Juniper Networks" }, 358c18ec02fSPetter Reinholdtsen { 0x31, "Libit Signal Processing" }, 359c18ec02fSPetter Reinholdtsen { 0x32, "Enhanced Memories Inc." }, 360c18ec02fSPetter Reinholdtsen { 0xB3, "Tundra Semiconductor" }, 361c18ec02fSPetter Reinholdtsen { 0x34, "Adaptec Inc." }, 362c18ec02fSPetter Reinholdtsen { 0xB5, "LightSpeed Semi." }, 363c18ec02fSPetter Reinholdtsen { 0xB6, "ZSP Corp." }, 364c18ec02fSPetter Reinholdtsen { 0x37, "AMIC Technology" }, 365c18ec02fSPetter Reinholdtsen { 0x38, "Adobe Systems" }, 366c18ec02fSPetter Reinholdtsen { 0xB9, "Dynachip" }, 367c18ec02fSPetter Reinholdtsen { 0xBA, "PNY Electronics" }, 368c18ec02fSPetter Reinholdtsen { 0x3B, "Newport Digital" }, 369c18ec02fSPetter Reinholdtsen { 0xBC, "MMC Networks" }, 370c18ec02fSPetter Reinholdtsen { 0x3D, "T Square" }, 371c18ec02fSPetter Reinholdtsen { 0x3E, "Seiko Epson" }, 372c18ec02fSPetter Reinholdtsen { 0xBF, "Broadcom" }, 373c18ec02fSPetter Reinholdtsen { 0x40, "Viking Components" }, 374c18ec02fSPetter Reinholdtsen { 0xC1, "V3 Semiconductor" }, 375c18ec02fSPetter Reinholdtsen { 0xC2, "Flextronics (formerly Orbit)" }, 376c18ec02fSPetter Reinholdtsen { 0x43, "Suwa Electronics" }, 377c18ec02fSPetter Reinholdtsen { 0xC4, "Transmeta" }, 378c18ec02fSPetter Reinholdtsen { 0x45, "Micron CMS" }, 379c18ec02fSPetter Reinholdtsen { 0x46, "American Computer & Digital Components Inc" }, 380c18ec02fSPetter Reinholdtsen { 0xC7, "Enhance 3000 Inc" }, 381c18ec02fSPetter Reinholdtsen { 0xC8, "Tower Semiconductor" }, 382c18ec02fSPetter Reinholdtsen { 0x49, "CPU Design" }, 383c18ec02fSPetter Reinholdtsen { 0x4A, "Price Point" }, 384c18ec02fSPetter Reinholdtsen { 0xCB, "Maxim Integrated Product" }, 385c18ec02fSPetter Reinholdtsen { 0x4C, "Tellabs" }, 386c18ec02fSPetter Reinholdtsen { 0xCD, "Centaur Technology" }, 387c18ec02fSPetter Reinholdtsen { 0xCE, "Unigen Corporation" }, 388c18ec02fSPetter Reinholdtsen { 0x4F, "Transcend Information" }, 389c18ec02fSPetter Reinholdtsen { 0xD0, "Memory Card Technology" }, 390c18ec02fSPetter Reinholdtsen { 0x51, "CKD Corporation Ltd." }, 391c18ec02fSPetter Reinholdtsen { 0x52, "Capital Instruments, Inc." }, 392c18ec02fSPetter Reinholdtsen { 0xD3, "Aica Kogyo, Ltd." }, 393c18ec02fSPetter Reinholdtsen { 0x54, "Linvex Technology" }, 394c18ec02fSPetter Reinholdtsen { 0xD5, "MSC Vertriebs GmbH" }, 395c18ec02fSPetter Reinholdtsen { 0xD6, "AKM Company, Ltd." }, 396c18ec02fSPetter Reinholdtsen { 0x57, "Dynamem, Inc." }, 397c18ec02fSPetter Reinholdtsen { 0x58, "NERA ASA" }, 398c18ec02fSPetter Reinholdtsen { 0xD9, "GSI Technology" }, 399c18ec02fSPetter Reinholdtsen { 0xDA, "Dane-Elec (C Memory)" }, 400c18ec02fSPetter Reinholdtsen { 0x5B, "Acorn Computers" }, 401c18ec02fSPetter Reinholdtsen { 0xDC, "Lara Technology" }, 402c18ec02fSPetter Reinholdtsen { 0x5D, "Oak Technology, Inc." }, 403c18ec02fSPetter Reinholdtsen { 0x5E, "Itec Memory" }, 404c18ec02fSPetter Reinholdtsen { 0xDF, "Tanisys Technology" }, 405c18ec02fSPetter Reinholdtsen { 0xE0, "Truevision" }, 406c18ec02fSPetter Reinholdtsen { 0x61, "Wintec Industries" }, 407c18ec02fSPetter Reinholdtsen { 0x62, "Super PC Memory" }, 408c18ec02fSPetter Reinholdtsen { 0xE3, "MGV Memory" }, 409c18ec02fSPetter Reinholdtsen { 0x64, "Galvantech" }, 410c18ec02fSPetter Reinholdtsen { 0xE5, "Gadzoox Nteworks" }, 411c18ec02fSPetter Reinholdtsen { 0xE6, "Multi Dimensional Cons." }, 412c18ec02fSPetter Reinholdtsen { 0x67, "GateField" }, 413c18ec02fSPetter Reinholdtsen { 0x68, "Integrated Memory System" }, 414c18ec02fSPetter Reinholdtsen { 0xE9, "Triscend" }, 415c18ec02fSPetter Reinholdtsen { 0xEA, "XaQti" }, 416c18ec02fSPetter Reinholdtsen { 0x6B, "Goldenram" }, 417c18ec02fSPetter Reinholdtsen { 0xEC, "Clear Logic" }, 418c18ec02fSPetter Reinholdtsen { 0x6D, "Cimaron Communications" }, 419c18ec02fSPetter Reinholdtsen { 0x6E, "Nippon Steel Semi. Corp." }, 420c18ec02fSPetter Reinholdtsen { 0xEF, "Advantage Memory" }, 421c18ec02fSPetter Reinholdtsen { 0x70, "AMCC" }, 422c18ec02fSPetter Reinholdtsen { 0xF1, "LeCroy" }, 423c18ec02fSPetter Reinholdtsen { 0xF2, "Yamaha Corporation" }, 424c18ec02fSPetter Reinholdtsen { 0x73, "Digital Microwave" }, 425c18ec02fSPetter Reinholdtsen { 0xF4, "NetLogic Microsystems" }, 426c18ec02fSPetter Reinholdtsen { 0x75, "MIMOS Semiconductor" }, 427c18ec02fSPetter Reinholdtsen { 0x76, "Advanced Fibre" }, 428c18ec02fSPetter Reinholdtsen { 0xF7, "BF Goodrich Data." }, 429c18ec02fSPetter Reinholdtsen { 0xF8, "Epigram" }, 430c18ec02fSPetter Reinholdtsen { 0x79, "Acbel Polytech Inc." }, 431c18ec02fSPetter Reinholdtsen { 0x7A, "Apacer Technology" }, 432c18ec02fSPetter Reinholdtsen { 0xFB, "Admor Memory" }, 433c18ec02fSPetter Reinholdtsen { 0x7C, "FOXCONN" }, 434c18ec02fSPetter Reinholdtsen { 0xFD, "Quadratics Superconductor" }, 435c18ec02fSPetter Reinholdtsen { 0xFE, "3COM" }, 436c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 437c18ec02fSPetter Reinholdtsen }; 438c18ec02fSPetter Reinholdtsen 439c18ec02fSPetter Reinholdtsen const struct valstr jedec_id3_vals[] = { 440c18ec02fSPetter Reinholdtsen { 0x01, "Camintonn Corporation" }, 441c18ec02fSPetter Reinholdtsen { 0x02, "ISOA Incorporated" }, 442c18ec02fSPetter Reinholdtsen { 0x83, "Agate Semiconductor" }, 443c18ec02fSPetter Reinholdtsen { 0x04, "ADMtek Incorporated" }, 444c18ec02fSPetter Reinholdtsen { 0x85, "HYPERTEC" }, 445c18ec02fSPetter Reinholdtsen { 0x86, "Adhoc Technologies" }, 446c18ec02fSPetter Reinholdtsen { 0x07, "MOSAID Technologies" }, 447c18ec02fSPetter Reinholdtsen { 0x08, "Ardent Technologies" }, 448c18ec02fSPetter Reinholdtsen { 0x89, "Switchcore" }, 449c18ec02fSPetter Reinholdtsen { 0x8A, "Cisco Systems, Inc." }, 450c18ec02fSPetter Reinholdtsen { 0x0B, "Allayer Technologies" }, 451c18ec02fSPetter Reinholdtsen { 0x8C, "WorkX AG" }, 452c18ec02fSPetter Reinholdtsen { 0x0D, "Oasis Semiconductor" }, 453c18ec02fSPetter Reinholdtsen { 0x0E, "Novanet Semiconductor" }, 454c18ec02fSPetter Reinholdtsen { 0x8F, "E-M Solutions" }, 455c18ec02fSPetter Reinholdtsen { 0x10, "Power General" }, 456c18ec02fSPetter Reinholdtsen { 0x91, "Advanced Hardware Arch." }, 457c18ec02fSPetter Reinholdtsen { 0x92, "Inova Semiconductors GmbH" }, 458c18ec02fSPetter Reinholdtsen { 0x13, "Telocity" }, 459c18ec02fSPetter Reinholdtsen { 0x94, "Delkin Devices" }, 460c18ec02fSPetter Reinholdtsen { 0x15, "Symagery Microsystems" }, 461c18ec02fSPetter Reinholdtsen { 0x16, "C-Port Corporation" }, 462c18ec02fSPetter Reinholdtsen { 0x97, "SiberCore Technologies" }, 463c18ec02fSPetter Reinholdtsen { 0x98, "Southland Microsystems" }, 464c18ec02fSPetter Reinholdtsen { 0x19, "Malleable Technologies" }, 465c18ec02fSPetter Reinholdtsen { 0x1A, "Kendin Communications" }, 466c18ec02fSPetter Reinholdtsen { 0x9B, "Great Technology Microcomputer" }, 467c18ec02fSPetter Reinholdtsen { 0x1C, "Sanmina Corporation" }, 468c18ec02fSPetter Reinholdtsen { 0x9D, "HADCO Corporation" }, 469c18ec02fSPetter Reinholdtsen { 0x9E, "Corsair" }, 470c18ec02fSPetter Reinholdtsen { 0x1F, "Actrans System Inc." }, 471c18ec02fSPetter Reinholdtsen { 0x20, "ALPHA Technologies" }, 472c18ec02fSPetter Reinholdtsen { 0xA1, "Cygnal Integrated Products Incorporated" }, 473c18ec02fSPetter Reinholdtsen { 0xA2, "Artesyn Technologies" }, 474c18ec02fSPetter Reinholdtsen { 0x23, "Align Manufacturing" }, 475c18ec02fSPetter Reinholdtsen { 0xA4, "Peregrine Semiconductor" }, 476c18ec02fSPetter Reinholdtsen { 0x25, "Chameleon Systems" }, 477c18ec02fSPetter Reinholdtsen { 0x26, "Aplus Flash Technology" }, 478c18ec02fSPetter Reinholdtsen { 0xA7, "MIPS Technologies" }, 479c18ec02fSPetter Reinholdtsen { 0xA8, "Chrysalis ITS" }, 480c18ec02fSPetter Reinholdtsen { 0x29, "ADTEC Corporation" }, 481c18ec02fSPetter Reinholdtsen { 0x2A, "Kentron Technologies" }, 482c18ec02fSPetter Reinholdtsen { 0xAB, "Win Technologies" }, 483c18ec02fSPetter Reinholdtsen { 0x2C, "ASIC Designs Inc" }, 484c18ec02fSPetter Reinholdtsen { 0xAD, "Extreme Packet Devices" }, 485c18ec02fSPetter Reinholdtsen { 0xAE, "RF Micro Devices" }, 486c18ec02fSPetter Reinholdtsen { 0x2F, "Siemens AG" }, 487c18ec02fSPetter Reinholdtsen { 0xB0, "Sarnoff Corporation" }, 488c18ec02fSPetter Reinholdtsen { 0x31, "Itautec Philco SA" }, 489c18ec02fSPetter Reinholdtsen { 0x32, "Radiata Inc." }, 490c18ec02fSPetter Reinholdtsen { 0xB3, "Benchmark Elect. (AVEX)" }, 491c18ec02fSPetter Reinholdtsen { 0x34, "Legend" }, 492c18ec02fSPetter Reinholdtsen { 0xB5, "SpecTek Incorporated" }, 493c18ec02fSPetter Reinholdtsen { 0xB6, "Hi/fn" }, 494c18ec02fSPetter Reinholdtsen { 0x37, "Enikia Incorporated" }, 495c18ec02fSPetter Reinholdtsen { 0x38, "SwitchOn Networks" }, 496c18ec02fSPetter Reinholdtsen { 0xB9, "AANetcom Incorporated" }, 497c18ec02fSPetter Reinholdtsen { 0xBA, "Micro Memory Bank" }, 498c18ec02fSPetter Reinholdtsen { 0x3B, "ESS Technology" }, 499c18ec02fSPetter Reinholdtsen { 0xBC, "Virata Corporation" }, 500c18ec02fSPetter Reinholdtsen { 0x3D, "Excess Bandwidth" }, 501c18ec02fSPetter Reinholdtsen { 0x3E, "West Bay Semiconductor" }, 502c18ec02fSPetter Reinholdtsen { 0xBF, "DSP Group" }, 503c18ec02fSPetter Reinholdtsen { 0x40, "Newport Communications" }, 504c18ec02fSPetter Reinholdtsen { 0xC1, "Chip2Chip Incorporated" }, 505c18ec02fSPetter Reinholdtsen { 0xC2, "Phobos Corporation" }, 506c18ec02fSPetter Reinholdtsen { 0x43, "Intellitech Corporation" }, 507c18ec02fSPetter Reinholdtsen { 0xC4, "Nordic VLSI ASA" }, 508c18ec02fSPetter Reinholdtsen { 0x45, "Ishoni Networks" }, 509c18ec02fSPetter Reinholdtsen { 0x46, "Silicon Spice" }, 510c18ec02fSPetter Reinholdtsen { 0xC7, "Alchemy Semiconductor" }, 511c18ec02fSPetter Reinholdtsen { 0xC8, "Agilent Technologies" }, 512c18ec02fSPetter Reinholdtsen { 0x49, "Centillium Communications" }, 513c18ec02fSPetter Reinholdtsen { 0x4A, "W.L. Gore" }, 514c18ec02fSPetter Reinholdtsen { 0xCB, "HanBit Electronics" }, 515c18ec02fSPetter Reinholdtsen { 0x4C, "GlobeSpan" }, 516c18ec02fSPetter Reinholdtsen { 0xCD, "Element 14" }, 517c18ec02fSPetter Reinholdtsen { 0xCE, "Pycon" }, 518c18ec02fSPetter Reinholdtsen { 0x4F, "Saifun Semiconductors" }, 519c18ec02fSPetter Reinholdtsen { 0xD0, "Sibyte, Incorporated" }, 520c18ec02fSPetter Reinholdtsen { 0x51, "MetaLink Technologies" }, 521c18ec02fSPetter Reinholdtsen { 0x52, "Feiya Technology" }, 522c18ec02fSPetter Reinholdtsen { 0xD3, "I & C Technology" }, 523c18ec02fSPetter Reinholdtsen { 0x54, "Shikatronics" }, 524c18ec02fSPetter Reinholdtsen { 0xD5, "Elektrobit" }, 525c18ec02fSPetter Reinholdtsen { 0xD6, "Megic" }, 526c18ec02fSPetter Reinholdtsen { 0x57, "Com-Tier" }, 527c18ec02fSPetter Reinholdtsen { 0x58, "Malaysia Micro Solutions" }, 528c18ec02fSPetter Reinholdtsen { 0xD9, "Hyperchip" }, 529c18ec02fSPetter Reinholdtsen { 0xDA, "Gemstone Communications" }, 530c18ec02fSPetter Reinholdtsen { 0x5B, "Anadyne Microelectronics" }, 531c18ec02fSPetter Reinholdtsen { 0xDC, "3ParData" }, 532c18ec02fSPetter Reinholdtsen { 0x5D, "Mellanox Technologies" }, 533c18ec02fSPetter Reinholdtsen { 0x5E, "Tenx Technologies" }, 534c18ec02fSPetter Reinholdtsen { 0xDF, "Helix AG" }, 535c18ec02fSPetter Reinholdtsen { 0xE0, "Domosys" }, 536c18ec02fSPetter Reinholdtsen { 0x61, "Skyup Technology" }, 537c18ec02fSPetter Reinholdtsen { 0x62, "HiNT Corporation" }, 538c18ec02fSPetter Reinholdtsen { 0xE3, "Chiaro" }, 539c18ec02fSPetter Reinholdtsen { 0x64, "MCI Computer GMBH" }, 540c18ec02fSPetter Reinholdtsen { 0xE5, "Exbit Technology A/S" }, 541c18ec02fSPetter Reinholdtsen { 0xE6, "Integrated Technology Express" }, 542c18ec02fSPetter Reinholdtsen { 0x67, "AVED Memory" }, 543c18ec02fSPetter Reinholdtsen { 0x68, "Legerity" }, 544c18ec02fSPetter Reinholdtsen { 0xE9, "Jasmine Networks" }, 545c18ec02fSPetter Reinholdtsen { 0xEA, "Caspian Networks" }, 546c18ec02fSPetter Reinholdtsen { 0x6B, "nCUBE" }, 547c18ec02fSPetter Reinholdtsen { 0xEC, "Silicon Access Networks" }, 548c18ec02fSPetter Reinholdtsen { 0x6D, "FDK Corporation" }, 549c18ec02fSPetter Reinholdtsen { 0x6E, "High Bandwidth Access" }, 550c18ec02fSPetter Reinholdtsen { 0xEF, "MultiLink Technology" }, 551c18ec02fSPetter Reinholdtsen { 0x70, "BRECIS" }, 552c18ec02fSPetter Reinholdtsen { 0xF1, "World Wide Packets" }, 553c18ec02fSPetter Reinholdtsen { 0xF2, "APW" }, 554c18ec02fSPetter Reinholdtsen { 0x73, "Chicory Systems" }, 555c18ec02fSPetter Reinholdtsen { 0xF4, "Xstream Logic" }, 556c18ec02fSPetter Reinholdtsen { 0x75, "Fast-Chip" }, 557c18ec02fSPetter Reinholdtsen { 0x76, "Zucotto Wireless" }, 558c18ec02fSPetter Reinholdtsen { 0xF7, "Realchip" }, 559c18ec02fSPetter Reinholdtsen { 0xF8, "Galaxy Power" }, 560c18ec02fSPetter Reinholdtsen { 0x79, "eSilicon" }, 561c18ec02fSPetter Reinholdtsen { 0x7A, "Morphics Technology" }, 562c18ec02fSPetter Reinholdtsen { 0xFB, "Accelerant Networks" }, 563c18ec02fSPetter Reinholdtsen { 0x7C, "Silicon Wave" }, 564c18ec02fSPetter Reinholdtsen { 0xFD, "SandCraft" }, 565c18ec02fSPetter Reinholdtsen { 0xFE, "Elpida" }, 566c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 567c18ec02fSPetter Reinholdtsen }; 568c18ec02fSPetter Reinholdtsen 569c18ec02fSPetter Reinholdtsen const struct valstr jedec_id4_vals[] = { 570c18ec02fSPetter Reinholdtsen { 0x01, "Solectron" }, 571c18ec02fSPetter Reinholdtsen { 0x02, "Optosys Technologies" }, 572c18ec02fSPetter Reinholdtsen { 0x83, "Buffalo (Formerly Melco)" }, 573c18ec02fSPetter Reinholdtsen { 0x04, "TriMedia Technologies" }, 574c18ec02fSPetter Reinholdtsen { 0x85, "Cyan Technologies" }, 575c18ec02fSPetter Reinholdtsen { 0x86, "Global Locate" }, 576c18ec02fSPetter Reinholdtsen { 0x07, "Optillion" }, 577c18ec02fSPetter Reinholdtsen { 0x08, "Terago Communications" }, 578c18ec02fSPetter Reinholdtsen { 0x89, "Ikanos Communications" }, 579c18ec02fSPetter Reinholdtsen { 0x8A, "Princeton Technology" }, 580c18ec02fSPetter Reinholdtsen { 0x0B, "Nanya Technology" }, 581c18ec02fSPetter Reinholdtsen { 0x8C, "Elite Flash Storage" }, 582c18ec02fSPetter Reinholdtsen { 0x0D, "Mysticom" }, 583c18ec02fSPetter Reinholdtsen { 0x0E, "LightSand Communications" }, 584c18ec02fSPetter Reinholdtsen { 0x8F, "ATI Technologies" }, 585c18ec02fSPetter Reinholdtsen { 0x10, "Agere Systems" }, 586c18ec02fSPetter Reinholdtsen { 0x91, "NeoMagic" }, 587c18ec02fSPetter Reinholdtsen { 0x92, "AuroraNetics" }, 588c18ec02fSPetter Reinholdtsen { 0x13, "Golden Empire" }, 589c18ec02fSPetter Reinholdtsen { 0x94, "Muskin" }, 590c18ec02fSPetter Reinholdtsen { 0x15, "Tioga Technologies" }, 591c18ec02fSPetter Reinholdtsen { 0x16, "Netlist" }, 592c18ec02fSPetter Reinholdtsen { 0x97, "TeraLogic" }, 593c18ec02fSPetter Reinholdtsen { 0x98, "Cicada Semiconductor" }, 594c18ec02fSPetter Reinholdtsen { 0x19, "Centon Electronics" }, 595c18ec02fSPetter Reinholdtsen { 0x1A, "Tyco Electronics" }, 596c18ec02fSPetter Reinholdtsen { 0x9B, "Magis Works" }, 597c18ec02fSPetter Reinholdtsen { 0x1C, "Zettacom" }, 598c18ec02fSPetter Reinholdtsen { 0x9D, "Cogency Semiconductor" }, 599c18ec02fSPetter Reinholdtsen { 0x9E, "Chipcon AS" }, 600c18ec02fSPetter Reinholdtsen { 0x1F, "Aspex Technology" }, 601c18ec02fSPetter Reinholdtsen { 0x20, "F5 Networks" }, 602c18ec02fSPetter Reinholdtsen { 0xA1, "Programmable Silicon Solutions" }, 603c18ec02fSPetter Reinholdtsen { 0xA2, "ChipWrights" }, 604c18ec02fSPetter Reinholdtsen { 0x23, "Acorn Networks" }, 605c18ec02fSPetter Reinholdtsen { 0xA4, "Quicklogic" }, 606c18ec02fSPetter Reinholdtsen { 0x25, "Kingmax Semiconductor" }, 607c18ec02fSPetter Reinholdtsen { 0x26, "BOPS" }, 608c18ec02fSPetter Reinholdtsen { 0xA7, "Flasys" }, 609c18ec02fSPetter Reinholdtsen { 0xA8, "BitBlitz Communications" }, 610c18ec02fSPetter Reinholdtsen { 0x29, "eMemory Technology" }, 611c18ec02fSPetter Reinholdtsen { 0x2A, "Procket Networks" }, 612c18ec02fSPetter Reinholdtsen { 0xAB, "Purple Ray" }, 613c18ec02fSPetter Reinholdtsen { 0x2C, "Trebia Networks" }, 614c18ec02fSPetter Reinholdtsen { 0xAD, "Delta Electronics" }, 615c18ec02fSPetter Reinholdtsen { 0xAE, "Onex Communications" }, 616c18ec02fSPetter Reinholdtsen { 0x2F, "Ample Communications" }, 617c18ec02fSPetter Reinholdtsen { 0xB0, "Memory Experts Intl" }, 618c18ec02fSPetter Reinholdtsen { 0x31, "Astute Networks" }, 619c18ec02fSPetter Reinholdtsen { 0x32, "Azanda Network Devices" }, 620c18ec02fSPetter Reinholdtsen { 0xB3, "Dibcom" }, 621c18ec02fSPetter Reinholdtsen { 0x34, "Tekmos" }, 622c18ec02fSPetter Reinholdtsen { 0xB5, "API NetWorks" }, 623c18ec02fSPetter Reinholdtsen { 0xB6, "Bay Microsystems" }, 624c18ec02fSPetter Reinholdtsen { 0x37, "Firecron Ltd" }, 625c18ec02fSPetter Reinholdtsen { 0x38, "Resonext Communications" }, 626c18ec02fSPetter Reinholdtsen { 0xB9, "Tachys Technologies" }, 627c18ec02fSPetter Reinholdtsen { 0xBA, "Equator Technology" }, 628c18ec02fSPetter Reinholdtsen { 0x3B, "Concept Computer" }, 629c18ec02fSPetter Reinholdtsen { 0xBC, "SILCOM" }, 630c18ec02fSPetter Reinholdtsen { 0x3D, "3Dlabs" }, 631c18ec02fSPetter Reinholdtsen { 0x3E, "ct Magazine" }, 632c18ec02fSPetter Reinholdtsen { 0xBF, "Sanera Systems" }, 633c18ec02fSPetter Reinholdtsen { 0x40, "Silicon Packets" }, 634c18ec02fSPetter Reinholdtsen { 0xC1, "Viasystems Group" }, 635c18ec02fSPetter Reinholdtsen { 0xC2, "Simtek" }, 636c18ec02fSPetter Reinholdtsen { 0x43, "Semicon Devices Singapore" }, 637c18ec02fSPetter Reinholdtsen { 0xC4, "Satron Handelsges" }, 638c18ec02fSPetter Reinholdtsen { 0x45, "Improv Systems" }, 639c18ec02fSPetter Reinholdtsen { 0x46, "INDUSYS GmbH" }, 640c18ec02fSPetter Reinholdtsen { 0xC7, "Corrent" }, 641c18ec02fSPetter Reinholdtsen { 0xC8, "Infrant Technologies" }, 642c18ec02fSPetter Reinholdtsen { 0x49, "Ritek Corp" }, 643c18ec02fSPetter Reinholdtsen { 0x4A, "empowerTel Networks" }, 644c18ec02fSPetter Reinholdtsen { 0xCB, "Hypertec" }, 645c18ec02fSPetter Reinholdtsen { 0x4C, "Cavium Networks" }, 646c18ec02fSPetter Reinholdtsen { 0xCD, "PLX Technology" }, 647c18ec02fSPetter Reinholdtsen { 0xCE, "Massana Design" }, 648c18ec02fSPetter Reinholdtsen { 0x4F, "Intrinsity" }, 649c18ec02fSPetter Reinholdtsen { 0xD0, "Valence Semiconductor" }, 650c18ec02fSPetter Reinholdtsen { 0x51, "Terawave Communications" }, 651c18ec02fSPetter Reinholdtsen { 0x52, "IceFyre Semiconductor" }, 652c18ec02fSPetter Reinholdtsen { 0xD3, "Primarion" }, 653c18ec02fSPetter Reinholdtsen { 0x54, "Picochip Designs Ltd" }, 654c18ec02fSPetter Reinholdtsen { 0xD5, "Silverback Systems" }, 655c18ec02fSPetter Reinholdtsen { 0xD6, "Jade Star Technologies" }, 656c18ec02fSPetter Reinholdtsen { 0x57, "Pijnenburg Securealink" }, 657c18ec02fSPetter Reinholdtsen { 0x58, "MemorySolutioN" }, 658c18ec02fSPetter Reinholdtsen { 0xD9, "Cambridge Silicon Radio" }, 659c18ec02fSPetter Reinholdtsen { 0xDA, "Swissbit" }, 660c18ec02fSPetter Reinholdtsen { 0x5B, "Nazomi Communications" }, 661c18ec02fSPetter Reinholdtsen { 0xDC, "eWave System" }, 662c18ec02fSPetter Reinholdtsen { 0x5D, "Rockwell Collins" }, 663c18ec02fSPetter Reinholdtsen { 0x5E, "PAION" }, 664c18ec02fSPetter Reinholdtsen { 0xDF, "Alphamosaic Ltd" }, 665c18ec02fSPetter Reinholdtsen { 0xE0, "Sandburst" }, 666c18ec02fSPetter Reinholdtsen { 0x61, "SiCon Video" }, 667c18ec02fSPetter Reinholdtsen { 0x62, "NanoAmp Solutions" }, 668c18ec02fSPetter Reinholdtsen { 0xE3, "Ericsson Technology" }, 669c18ec02fSPetter Reinholdtsen { 0x64, "PrairieComm" }, 670c18ec02fSPetter Reinholdtsen { 0xE5, "Mitac International" }, 671c18ec02fSPetter Reinholdtsen { 0xE6, "Layer N Networks" }, 672c18ec02fSPetter Reinholdtsen { 0x67, "Atsana Semiconductor" }, 673c18ec02fSPetter Reinholdtsen { 0x68, "Allegro Networks" }, 674c18ec02fSPetter Reinholdtsen { 0xE9, "Marvell Semiconductors" }, 675c18ec02fSPetter Reinholdtsen { 0xEA, "Netergy Microelectronic" }, 676c18ec02fSPetter Reinholdtsen { 0x6B, "NVIDIA" }, 677c18ec02fSPetter Reinholdtsen { 0xEC, "Internet Machines" }, 678c18ec02fSPetter Reinholdtsen { 0x6D, "Peak Electronics" }, 679c18ec02fSPetter Reinholdtsen { 0xEF, "Accton Technology" }, 680c18ec02fSPetter Reinholdtsen { 0x70, "Teradiant Networks" }, 681c18ec02fSPetter Reinholdtsen { 0xF1, "Europe Technologies" }, 682c18ec02fSPetter Reinholdtsen { 0xF2, "Cortina Systems" }, 683c18ec02fSPetter Reinholdtsen { 0x73, "RAM Components" }, 684c18ec02fSPetter Reinholdtsen { 0xF4, "Raqia Networks" }, 685c18ec02fSPetter Reinholdtsen { 0x75, "ClearSpeed" }, 686c18ec02fSPetter Reinholdtsen { 0x76, "Matsushita Battery" }, 687c18ec02fSPetter Reinholdtsen { 0xF7, "Xelerated" }, 688c18ec02fSPetter Reinholdtsen { 0xF8, "SimpleTech" }, 689c18ec02fSPetter Reinholdtsen { 0x79, "Utron Technology" }, 690c18ec02fSPetter Reinholdtsen { 0x7A, "Astec International" }, 691c18ec02fSPetter Reinholdtsen { 0xFB, "AVM gmbH" }, 692c18ec02fSPetter Reinholdtsen { 0x7C, "Redux Communications" }, 693c18ec02fSPetter Reinholdtsen { 0xFD, "Dot Hill Systems" }, 694c18ec02fSPetter Reinholdtsen { 0xFE, "TeraChip" }, 695c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 696c18ec02fSPetter Reinholdtsen }; 697c18ec02fSPetter Reinholdtsen 698c18ec02fSPetter Reinholdtsen const struct valstr jedec_id5_vals[] = { 699c18ec02fSPetter Reinholdtsen { 0x01, "T-RAM Incorporated" }, 700c18ec02fSPetter Reinholdtsen { 0x02, "Innovics Wireless" }, 701c18ec02fSPetter Reinholdtsen { 0x83, "Teknovus" }, 702c18ec02fSPetter Reinholdtsen { 0x04, "KeyEye Communications" }, 703c18ec02fSPetter Reinholdtsen { 0x85, "Runcom Technologies" }, 704c18ec02fSPetter Reinholdtsen { 0x86, "RedSwitch" }, 705c18ec02fSPetter Reinholdtsen { 0x07, "Dotcast" }, 706c18ec02fSPetter Reinholdtsen { 0x08, "Silicon Mountain Memory" }, 707c18ec02fSPetter Reinholdtsen { 0x89, "Signia Technologies" }, 708c18ec02fSPetter Reinholdtsen { 0x8A, "Pixim" }, 709c18ec02fSPetter Reinholdtsen { 0x0B, "Galazar Networks" }, 710c18ec02fSPetter Reinholdtsen { 0x8C, "White Electronic Designs" }, 711c18ec02fSPetter Reinholdtsen { 0x0D, "Patriot Scientific" }, 712c18ec02fSPetter Reinholdtsen { 0x0E, "Neoaxiom Corporation" }, 713c18ec02fSPetter Reinholdtsen { 0x8F, "3Y Power Technology" }, 714c18ec02fSPetter Reinholdtsen { 0x10, "Europe Technologies" }, 715c18ec02fSPetter Reinholdtsen { 0x91, "Potentia Power Systems" }, 716c18ec02fSPetter Reinholdtsen { 0x92, "C-guys Incorporated" }, 717c18ec02fSPetter Reinholdtsen { 0x13, "Digital Communications Technology Incorporated" }, 718c18ec02fSPetter Reinholdtsen { 0x94, "Silicon-Based Technology" }, 719c18ec02fSPetter Reinholdtsen { 0x15, "Fulcrum Microsystems" }, 720c18ec02fSPetter Reinholdtsen { 0x16, "Positivo Informatica Ltd" }, 721c18ec02fSPetter Reinholdtsen { 0x97, "XIOtech Corporation" }, 722c18ec02fSPetter Reinholdtsen { 0x98, "PortalPlayer" }, 723c18ec02fSPetter Reinholdtsen { 0x19, "Zhiying Software" }, 724c18ec02fSPetter Reinholdtsen { 0x1A, "Direct2Data" }, 725c18ec02fSPetter Reinholdtsen { 0x9B, "Phonex Broadband" }, 726c18ec02fSPetter Reinholdtsen { 0x1C, "Skyworks Solutions" }, 727c18ec02fSPetter Reinholdtsen { 0x9D, "Entropic Communications" }, 728c18ec02fSPetter Reinholdtsen { 0x9E, "Pacific Force Technology" }, 729c18ec02fSPetter Reinholdtsen { 0x1F, "Zensys A/S" }, 730c18ec02fSPetter Reinholdtsen { 0x20, "Legend Silicon Corp." }, 731c18ec02fSPetter Reinholdtsen { 0xA1, "sci-worx GmbH" }, 732c18ec02fSPetter Reinholdtsen { 0xA2, "Oasis Silicon Systems" }, 733c18ec02fSPetter Reinholdtsen { 0x23, "Renesas Technology" }, 734c18ec02fSPetter Reinholdtsen { 0xA4, "Raza Microelectronics" }, 735c18ec02fSPetter Reinholdtsen { 0x25, "Phyworks" }, 736c18ec02fSPetter Reinholdtsen { 0x26, "MediaTek" }, 737c18ec02fSPetter Reinholdtsen { 0xA7, "Non-cents Productions" }, 738c18ec02fSPetter Reinholdtsen { 0xA8, "US Modular" }, 739c18ec02fSPetter Reinholdtsen { 0x29, "Wintegra Ltd" }, 740c18ec02fSPetter Reinholdtsen { 0x2A, "Mathstar" }, 741c18ec02fSPetter Reinholdtsen { 0xAB, "StarCore" }, 742c18ec02fSPetter Reinholdtsen { 0x2C, "Oplus Technologies" }, 743c18ec02fSPetter Reinholdtsen { 0xAD, "Mindspeed" }, 744c18ec02fSPetter Reinholdtsen { 0xAE, "Just Young Computer" }, 745c18ec02fSPetter Reinholdtsen { 0x2F, "Radia Communications" }, 746c18ec02fSPetter Reinholdtsen { 0xB0, "OCZ" }, 747c18ec02fSPetter Reinholdtsen { 0x31, "Emuzed" }, 748c18ec02fSPetter Reinholdtsen { 0x32, "LOGIC Devices" }, 749c18ec02fSPetter Reinholdtsen { 0xB3, "Inphi Corporation" }, 750c18ec02fSPetter Reinholdtsen { 0x34, "Quake Technologies" }, 751c18ec02fSPetter Reinholdtsen { 0xB5, "Vixel" }, 752c18ec02fSPetter Reinholdtsen { 0xB6, "SolusTek" }, 753c18ec02fSPetter Reinholdtsen { 0x37, "Kongsberg Maritime" }, 754c18ec02fSPetter Reinholdtsen { 0x38, "Faraday Technology" }, 755c18ec02fSPetter Reinholdtsen { 0xB9, "Altium Ltd." }, 756c18ec02fSPetter Reinholdtsen { 0xBA, "Insyte" }, 757c18ec02fSPetter Reinholdtsen { 0x3B, "ARM Ltd." }, 758c18ec02fSPetter Reinholdtsen { 0xBC, "DigiVision" }, 759c18ec02fSPetter Reinholdtsen { 0x3D, "Vativ Technologies" }, 760c18ec02fSPetter Reinholdtsen { 0x3E, "Endicott Interconnect Technologies" }, 761c18ec02fSPetter Reinholdtsen { 0xBF, "Pericom" }, 762c18ec02fSPetter Reinholdtsen { 0x40, "Bandspeed" }, 763c18ec02fSPetter Reinholdtsen { 0xC1, "LeWiz Communications" }, 764c18ec02fSPetter Reinholdtsen { 0xC2, "CPU Technology" }, 765c18ec02fSPetter Reinholdtsen { 0x43, "Ramaxel Technology" }, 766c18ec02fSPetter Reinholdtsen { 0xC4, "DSP Group" }, 767c18ec02fSPetter Reinholdtsen { 0x45, "Axis Communications" }, 768c18ec02fSPetter Reinholdtsen { 0x46, "Legacy Electronics" }, 769c18ec02fSPetter Reinholdtsen { 0xC7, "Chrontel" }, 770c18ec02fSPetter Reinholdtsen { 0xC8, "Powerchip Semiconductor" }, 771c18ec02fSPetter Reinholdtsen { 0x49, "MobilEye Technologies" }, 772c18ec02fSPetter Reinholdtsen { 0x4A, "Excel Semiconductor" }, 773c18ec02fSPetter Reinholdtsen { 0xCB, "A-DATA Technology" }, 774c18ec02fSPetter Reinholdtsen { 0x4C, "VirtualDigm" }, 775c18ec02fSPetter Reinholdtsen { 0x00, NULL }, 776c18ec02fSPetter Reinholdtsen }; 777c18ec02fSPetter Reinholdtsen 778c18ec02fSPetter Reinholdtsen int 779c18ec02fSPetter Reinholdtsen ipmi_spd_print(uint8_t *spd_data, int len) 780c18ec02fSPetter Reinholdtsen { 78102e4a036SZdenek Styblik int k = 0; 78202e4a036SZdenek Styblik int ii = 0; 783c18ec02fSPetter Reinholdtsen 784c18ec02fSPetter Reinholdtsen if (len < 92) 785c18ec02fSPetter Reinholdtsen return -1; /* we need first 91 bytes to do our thing */ 786c18ec02fSPetter Reinholdtsen 787c18ec02fSPetter Reinholdtsen printf(" Memory Type : %s\n", 788c18ec02fSPetter Reinholdtsen val2str(spd_data[2], spd_memtype_vals)); 789c18ec02fSPetter Reinholdtsen 790c18ec02fSPetter Reinholdtsen if (spd_data[2] == 0x0B) /* DDR3 SDRAM */ 791c18ec02fSPetter Reinholdtsen { 792c18ec02fSPetter Reinholdtsen int iPN; 793c18ec02fSPetter Reinholdtsen char *pchPN = spd_data+128; 794c18ec02fSPetter Reinholdtsen int sdram_cap = 0; 795c18ec02fSPetter Reinholdtsen int pri_bus_width = 0; 796c18ec02fSPetter Reinholdtsen int sdram_width = 0; 797c18ec02fSPetter Reinholdtsen int ranks = 0; 798c18ec02fSPetter Reinholdtsen int mem_size = 0; 799c18ec02fSPetter Reinholdtsen 800c18ec02fSPetter Reinholdtsen if (len < 148) 801c18ec02fSPetter Reinholdtsen return -1; /* we need first 91 bytes to do our thing */ 802c18ec02fSPetter Reinholdtsen 803c18ec02fSPetter Reinholdtsen 804c18ec02fSPetter Reinholdtsen sdram_cap = ldexp(256,(spd_data[4]&15)); 805c18ec02fSPetter Reinholdtsen pri_bus_width = ldexp(8,(spd_data[8]&7)); 806c18ec02fSPetter Reinholdtsen sdram_width = ldexp(4,(spd_data[7]&7)); 807c18ec02fSPetter Reinholdtsen ranks = ldexp(1,((spd_data[7]&0x3F)>>3)); 808c18ec02fSPetter Reinholdtsen mem_size = (sdram_cap/8) * (pri_bus_width/sdram_width) * ranks; 809c18ec02fSPetter Reinholdtsen printf(" SDRAM Capacity : %d MB\n", sdram_cap ); 810c18ec02fSPetter Reinholdtsen printf(" Memory Banks : %s\n", val2str(spd_data[4]>>4, ddr3_banks_vals)); 811c18ec02fSPetter Reinholdtsen printf(" Primary Bus Width : %d bits\n", pri_bus_width ); 812c18ec02fSPetter Reinholdtsen printf(" SDRAM Device Width : %d bits\n", sdram_width ); 813c18ec02fSPetter Reinholdtsen printf(" Number of Ranks : %d\n", ranks ); 814c18ec02fSPetter Reinholdtsen printf(" Memory size : %d MB\n", mem_size ); 815c18ec02fSPetter Reinholdtsen 816c18ec02fSPetter Reinholdtsen /* printf(" Memory Density : %s\n", val2str(spd_data[4]&15, ddr3_density_vals)); */ 817c18ec02fSPetter Reinholdtsen printf(" 1.5 V Nominal Op : %s\n", (((spd_data[6]&1) != 0) ? "No":"Yes" ) ); 818c18ec02fSPetter Reinholdtsen printf(" 1.35 V Nominal Op : %s\n", (((spd_data[6]&2) != 0) ? "No":"Yes" ) ); 819c18ec02fSPetter Reinholdtsen printf(" 1.2X V Nominal Op : %s\n", (((spd_data[6]&4) != 0) ? "No":"Yes" ) ); 820c18ec02fSPetter Reinholdtsen printf(" Error Detect/Cor : %s\n", val2str(spd_data[8]>>3, ddr3_ecc_vals)); 821c18ec02fSPetter Reinholdtsen 822c18ec02fSPetter Reinholdtsen printf(" Manufacturer : "); 823c18ec02fSPetter Reinholdtsen switch (spd_data[117]&127) 824c18ec02fSPetter Reinholdtsen { 825c18ec02fSPetter Reinholdtsen case 0: 826c18ec02fSPetter Reinholdtsen printf("%s\n", val2str(spd_data[118], jedec_id1_vals)); 827c18ec02fSPetter Reinholdtsen break; 828c18ec02fSPetter Reinholdtsen 829c18ec02fSPetter Reinholdtsen case 1: 830c18ec02fSPetter Reinholdtsen printf("%s\n", val2str(spd_data[118], jedec_id2_vals)); 831c18ec02fSPetter Reinholdtsen break; 832c18ec02fSPetter Reinholdtsen 833c18ec02fSPetter Reinholdtsen case 2: 834c18ec02fSPetter Reinholdtsen printf("%s\n", val2str(spd_data[118], jedec_id3_vals)); 835c18ec02fSPetter Reinholdtsen break; 836c18ec02fSPetter Reinholdtsen 837c18ec02fSPetter Reinholdtsen case 3: 838c18ec02fSPetter Reinholdtsen printf("%s\n", val2str(spd_data[118], jedec_id4_vals)); 839c18ec02fSPetter Reinholdtsen break; 840c18ec02fSPetter Reinholdtsen 841c18ec02fSPetter Reinholdtsen case 4: 842c18ec02fSPetter Reinholdtsen printf("%s\n", val2str(spd_data[118], jedec_id5_vals)); 843c18ec02fSPetter Reinholdtsen break; 844c18ec02fSPetter Reinholdtsen 845c18ec02fSPetter Reinholdtsen default: 846c18ec02fSPetter Reinholdtsen printf("%s\n", "JEDEC JEP106 update required" ); 847c18ec02fSPetter Reinholdtsen 848c18ec02fSPetter Reinholdtsen } 849c18ec02fSPetter Reinholdtsen 850c18ec02fSPetter Reinholdtsen printf(" Manufacture Date : year %c%c week %c%c\n", 851c18ec02fSPetter Reinholdtsen '0'+(spd_data[120]>>4), '0'+(spd_data[120]&15), '0'+(spd_data[121]>>4), '0'+(spd_data[121]&15) ); 852c18ec02fSPetter Reinholdtsen 853c18ec02fSPetter Reinholdtsen printf(" Serial Number : %02x%02x%02x%02x\n", 854c18ec02fSPetter Reinholdtsen spd_data[122], spd_data[123], spd_data[124], spd_data[125]); 855c18ec02fSPetter Reinholdtsen 856c18ec02fSPetter Reinholdtsen printf(" Part Number : "); 857c18ec02fSPetter Reinholdtsen for (iPN=0; iPN < 19; iPN++) 858c18ec02fSPetter Reinholdtsen { 859c18ec02fSPetter Reinholdtsen printf( "%c", *pchPN++ ); 860c18ec02fSPetter Reinholdtsen } 861c18ec02fSPetter Reinholdtsen printf("\n"); 86296b19bb6SJim Mankovich } else if (spd_data[2] == 0x0C) /* DDR4 SDRAM */ 86396b19bb6SJim Mankovich { 86496b19bb6SJim Mankovich int i; 86596b19bb6SJim Mankovich int sdram_cap = 0; 86696b19bb6SJim Mankovich int pri_bus_width = 0; 86796b19bb6SJim Mankovich int sdram_width = 0; 86896b19bb6SJim Mankovich int mem_size = 0; 86996b19bb6SJim Mankovich int lrank_dimm; 870*104a7176SZdenek Styblik uint32_t year; 871*104a7176SZdenek Styblik uint32_t week; 87296b19bb6SJim Mankovich 87396b19bb6SJim Mankovich if (len < 148) 87496b19bb6SJim Mankovich return -1; /* we need first 91 bytes to do our thing */ 87596b19bb6SJim Mankovich 87696b19bb6SJim Mankovich /* "Logical rank" referes to the individually addressable die 87796b19bb6SJim Mankovich * in a 3DS stack and has no meaning for monolithic or 87896b19bb6SJim Mankovich * multi-load stacked SDRAMs; however, for the purposes of 87996b19bb6SJim Mankovich * calculating the capacity of the module, one should treat 88096b19bb6SJim Mankovich * monolithic and multi-load stack SDRAMs as having one logical 88196b19bb6SJim Mankovich * rank per package rank. 88296b19bb6SJim Mankovich */ 88396b19bb6SJim Mankovich lrank_dimm = (spd_data[12]>>3&0x3) + 1; /* Number of Package Ranks per DIMM */ 88496b19bb6SJim Mankovich if ((spd_data[6] & 0x3) == 0x10) { /* 3DS package Type */ 88596b19bb6SJim Mankovich lrank_dimm *= ((spd_data[6]>>4)&0x3) + 1; /* Die Count */ 88696b19bb6SJim Mankovich } 88796b19bb6SJim Mankovich sdram_cap = ldexp(256,(spd_data[4]&15)); 88896b19bb6SJim Mankovich pri_bus_width = ldexp(8,(spd_data[13]&7)); 88996b19bb6SJim Mankovich sdram_width = ldexp(4,(spd_data[12]&7)); 89096b19bb6SJim Mankovich mem_size = (sdram_cap/8) * (pri_bus_width/sdram_width) * lrank_dimm; 89196b19bb6SJim Mankovich printf(" SDRAM Package Type : %s\n", val2str((spd_data[6]>>7), ddr4_package_type)); 89296b19bb6SJim Mankovich printf(" Technology : %s\n", val2str((spd_data[3]&15), ddr4_technology_type)); 89396b19bb6SJim Mankovich printf(" SDRAM Die Count : %d\n", ((spd_data[6]>>4) & 3)+1); 89496b19bb6SJim Mankovich printf(" SDRAM Capacity : %d Mb\n", sdram_cap ); 89596b19bb6SJim Mankovich printf(" Memory Bank Group : %s\n", val2str((spd_data[4]>>6 & 0x3), ddr4_bank_groups)); 89696b19bb6SJim Mankovich printf(" Memory Banks : %s\n", val2str((spd_data[4]>>4 & 0x3), ddr4_banks_vals)); 89796b19bb6SJim Mankovich printf(" Primary Bus Width : %d bits\n", pri_bus_width ); 89896b19bb6SJim Mankovich printf(" SDRAM Device Width : %d bits\n", sdram_width ); 89996b19bb6SJim Mankovich printf(" Logical Rank per DIMM : %d\n", lrank_dimm ); 90096b19bb6SJim Mankovich printf(" Memory size : %d MB\n", mem_size ); 90196b19bb6SJim Mankovich 90296b19bb6SJim Mankovich printf(" Memory Density : %s\n", val2str(spd_data[4]&15, ddr4_density_vals)); 90396b19bb6SJim Mankovich printf(" 1.2 V Nominal Op : %s\n", (((spd_data[11]&3) != 3) ? "No":"Yes" ) ); 90496b19bb6SJim Mankovich printf(" TBD1 V Nominal Op : %s\n", (((spd_data[11]>>2&3) != 3) ? "No":"Yes" ) ); 90596b19bb6SJim Mankovich printf(" TBD2 V Nominal Op : %s\n", (((spd_data[11]>>4&3) != 3) ? "No":"Yes" ) ); 90696b19bb6SJim Mankovich printf(" Error Detect/Cor : %s\n", val2str(spd_data[13]>>3, ddr4_ecc_vals)); 90796b19bb6SJim Mankovich 90896b19bb6SJim Mankovich printf(" Manufacturer : "); 90996b19bb6SJim Mankovich switch (spd_data[320]&127) 91096b19bb6SJim Mankovich { 91196b19bb6SJim Mankovich case 0: 91296b19bb6SJim Mankovich printf("%s\n", val2str(spd_data[321], jedec_id1_vals)); 91396b19bb6SJim Mankovich break; 91496b19bb6SJim Mankovich 91596b19bb6SJim Mankovich case 1: 91696b19bb6SJim Mankovich printf("%s\n", val2str(spd_data[321], jedec_id2_vals)); 91796b19bb6SJim Mankovich break; 91896b19bb6SJim Mankovich 91996b19bb6SJim Mankovich case 2: 92096b19bb6SJim Mankovich printf("%s\n", val2str(spd_data[321], jedec_id3_vals)); 92196b19bb6SJim Mankovich break; 92296b19bb6SJim Mankovich 92396b19bb6SJim Mankovich case 3: 92496b19bb6SJim Mankovich printf("%s\n", val2str(spd_data[321], jedec_id4_vals)); 92596b19bb6SJim Mankovich break; 92696b19bb6SJim Mankovich 92796b19bb6SJim Mankovich case 4: 92896b19bb6SJim Mankovich printf("%s\n", val2str(spd_data[321], jedec_id5_vals)); 92996b19bb6SJim Mankovich break; 93096b19bb6SJim Mankovich 93196b19bb6SJim Mankovich default: 93296b19bb6SJim Mankovich printf("%s\n", "JEDEC JEP106 update required"); 93396b19bb6SJim Mankovich 93496b19bb6SJim Mankovich } 93596b19bb6SJim Mankovich 936*104a7176SZdenek Styblik year = (spd_data[323]>>4)*10 + spd_data[323]&15; 937*104a7176SZdenek Styblik week = (spd_data[324]>>4)*10 + spd_data[324]&15; 93896b19bb6SJim Mankovich printf(" Manufacture Date : year %4d week %2d\n", 93996b19bb6SJim Mankovich 2000 + year, week); 94096b19bb6SJim Mankovich 94196b19bb6SJim Mankovich printf(" Serial Number : %02x%02x%02x%02x\n", 94296b19bb6SJim Mankovich spd_data[325], spd_data[326], spd_data[327], spd_data[328]); 94396b19bb6SJim Mankovich 94496b19bb6SJim Mankovich printf(" Part Number : "); 94596b19bb6SJim Mankovich for (i=329; i <= 348; i++) 94696b19bb6SJim Mankovich { 94796b19bb6SJim Mankovich printf( "%c", spd_data[i]); 94896b19bb6SJim Mankovich } 94996b19bb6SJim Mankovich printf("\n"); 950c18ec02fSPetter Reinholdtsen } 951c18ec02fSPetter Reinholdtsen else 952c18ec02fSPetter Reinholdtsen { 95302e4a036SZdenek Styblik ii = (spd_data[3] & 0x0f) + (spd_data[4] & 0x0f) - 17; 95402e4a036SZdenek Styblik k = ((spd_data[5] & 0x7) + 1) * spd_data[17]; 95502e4a036SZdenek Styblik 95602e4a036SZdenek Styblik if(ii > 0 && ii <= 12 && k > 0) { 95702e4a036SZdenek Styblik printf(" Memory Size : %d MB\n", ((1 << ii) * k)); 95802e4a036SZdenek Styblik } else { 95902e4a036SZdenek Styblik printf(" Memory Size INVALID: %d, %d, %d, %d\n", spd_data[3], 96002e4a036SZdenek Styblik spd_data[4], spd_data[5], spd_data[17]); 96102e4a036SZdenek Styblik } 962c18ec02fSPetter Reinholdtsen printf(" Voltage Intf : %s\n", 963c18ec02fSPetter Reinholdtsen val2str(spd_data[8], spd_voltage_vals)); 964c18ec02fSPetter Reinholdtsen printf(" Error Detect/Cor : %s\n", 965c18ec02fSPetter Reinholdtsen val2str(spd_data[11], spd_config_vals)); 966c18ec02fSPetter Reinholdtsen 967c18ec02fSPetter Reinholdtsen /* handle jedec table bank continuation values */ 968c18ec02fSPetter Reinholdtsen printf(" Manufacturer : "); 969c18ec02fSPetter Reinholdtsen if (spd_data[64] != 0x7f) 970c18ec02fSPetter Reinholdtsen printf("%s\n", 971c18ec02fSPetter Reinholdtsen val2str(spd_data[64], jedec_id1_vals)); 972c18ec02fSPetter Reinholdtsen else { 973c18ec02fSPetter Reinholdtsen if (spd_data[65] != 0x7f) 974c18ec02fSPetter Reinholdtsen printf("%s\n", 975c18ec02fSPetter Reinholdtsen val2str(spd_data[65], jedec_id2_vals)); 976c18ec02fSPetter Reinholdtsen else { 977c18ec02fSPetter Reinholdtsen if (spd_data[66] != 0x7f) 978c18ec02fSPetter Reinholdtsen printf("%s\n", 979c18ec02fSPetter Reinholdtsen val2str(spd_data[66], jedec_id3_vals)); 980c18ec02fSPetter Reinholdtsen else { 981c18ec02fSPetter Reinholdtsen if (spd_data[67] != 0x7f) 982c18ec02fSPetter Reinholdtsen printf("%s\n", 983c18ec02fSPetter Reinholdtsen val2str(spd_data[67], 984c18ec02fSPetter Reinholdtsen jedec_id4_vals)); 985c18ec02fSPetter Reinholdtsen else 986c18ec02fSPetter Reinholdtsen printf("%s\n", 987c18ec02fSPetter Reinholdtsen val2str(spd_data[68], 988c18ec02fSPetter Reinholdtsen jedec_id5_vals)); 989c18ec02fSPetter Reinholdtsen } 990c18ec02fSPetter Reinholdtsen } 991c18ec02fSPetter Reinholdtsen } 992c18ec02fSPetter Reinholdtsen 993c18ec02fSPetter Reinholdtsen if (spd_data[73]) { 994c18ec02fSPetter Reinholdtsen char part[19]; 995c18ec02fSPetter Reinholdtsen memcpy(part, spd_data+73, 18); 996c18ec02fSPetter Reinholdtsen part[18] = 0; 997c18ec02fSPetter Reinholdtsen printf(" Part Number : %s\n", part); 998c18ec02fSPetter Reinholdtsen } 999c18ec02fSPetter Reinholdtsen 1000c18ec02fSPetter Reinholdtsen printf(" Serial Number : %02x%02x%02x%02x\n", 1001c18ec02fSPetter Reinholdtsen spd_data[95], spd_data[96], spd_data[97], spd_data[98]); 1002c18ec02fSPetter Reinholdtsen } 1003c18ec02fSPetter Reinholdtsen 1004c18ec02fSPetter Reinholdtsen if (verbose) { 1005c18ec02fSPetter Reinholdtsen printf("\n"); 1006c18ec02fSPetter Reinholdtsen printbuf(spd_data, len, "SPD DATA"); 1007c18ec02fSPetter Reinholdtsen } 1008c18ec02fSPetter Reinholdtsen 1009c18ec02fSPetter Reinholdtsen return 0; 1010c18ec02fSPetter Reinholdtsen } 1011c18ec02fSPetter Reinholdtsen 1012c18ec02fSPetter Reinholdtsen int 1013c18ec02fSPetter Reinholdtsen ipmi_spd_print_fru(struct ipmi_intf * intf, uint8_t id) 1014c18ec02fSPetter Reinholdtsen { 1015c18ec02fSPetter Reinholdtsen struct ipmi_rs * rsp; 1016c18ec02fSPetter Reinholdtsen struct ipmi_rq req; 1017c18ec02fSPetter Reinholdtsen struct fru_info fru; 101896b19bb6SJim Mankovich uint8_t *spd_data, msg_data[4]; 1019c18ec02fSPetter Reinholdtsen int len, offset; 1020c18ec02fSPetter Reinholdtsen 1021c18ec02fSPetter Reinholdtsen msg_data[0] = id; 1022c18ec02fSPetter Reinholdtsen 1023c18ec02fSPetter Reinholdtsen memset(&req, 0, sizeof(req)); 1024c18ec02fSPetter Reinholdtsen req.msg.netfn = IPMI_NETFN_STORAGE; 1025c18ec02fSPetter Reinholdtsen req.msg.cmd = GET_FRU_INFO; 1026c18ec02fSPetter Reinholdtsen req.msg.data = msg_data; 1027c18ec02fSPetter Reinholdtsen req.msg.data_len = 1; 1028c18ec02fSPetter Reinholdtsen 1029c18ec02fSPetter Reinholdtsen rsp = intf->sendrecv(intf, &req); 1030c18ec02fSPetter Reinholdtsen if (rsp == NULL) { 1031c18ec02fSPetter Reinholdtsen printf(" Device not present (No Response)\n"); 1032c18ec02fSPetter Reinholdtsen return -1; 1033c18ec02fSPetter Reinholdtsen } 1034c18ec02fSPetter Reinholdtsen if (rsp->ccode > 0) { 1035c18ec02fSPetter Reinholdtsen printf(" Device not present (%s)\n", 1036c18ec02fSPetter Reinholdtsen val2str(rsp->ccode, completion_code_vals)); 1037c18ec02fSPetter Reinholdtsen return -1; 1038c18ec02fSPetter Reinholdtsen } 1039c18ec02fSPetter Reinholdtsen 1040c18ec02fSPetter Reinholdtsen fru.size = (rsp->data[1] << 8) | rsp->data[0]; 1041c18ec02fSPetter Reinholdtsen fru.access = rsp->data[2] & 0x1; 1042c18ec02fSPetter Reinholdtsen 1043c18ec02fSPetter Reinholdtsen lprintf(LOG_DEBUG, "fru.size = %d bytes (accessed by %s)", 1044c18ec02fSPetter Reinholdtsen fru.size, fru.access ? "words" : "bytes"); 1045c18ec02fSPetter Reinholdtsen 104696b19bb6SJim Mankovich 1047c18ec02fSPetter Reinholdtsen if (fru.size < 1) { 1048c18ec02fSPetter Reinholdtsen lprintf(LOG_ERR, " Invalid FRU size %d", fru.size); 1049c18ec02fSPetter Reinholdtsen return -1; 1050c18ec02fSPetter Reinholdtsen } 1051c18ec02fSPetter Reinholdtsen 105296b19bb6SJim Mankovich spd_data = malloc(fru.size); 105396b19bb6SJim Mankovich 105496b19bb6SJim Mankovich if (spd_data == NULL) { 105596b19bb6SJim Mankovich printf(" Unable to malloc memory for spd array of size=%d\n", 105696b19bb6SJim Mankovich fru.size); 105796b19bb6SJim Mankovich return -1; 105896b19bb6SJim Mankovich } 105996b19bb6SJim Mankovich 1060c18ec02fSPetter Reinholdtsen memset(&req, 0, sizeof(req)); 1061c18ec02fSPetter Reinholdtsen req.msg.netfn = IPMI_NETFN_STORAGE; 1062c18ec02fSPetter Reinholdtsen req.msg.cmd = GET_FRU_DATA; 1063c18ec02fSPetter Reinholdtsen req.msg.data = msg_data; 1064c18ec02fSPetter Reinholdtsen req.msg.data_len = 4; 1065c18ec02fSPetter Reinholdtsen 1066c18ec02fSPetter Reinholdtsen offset = 0; 106796b19bb6SJim Mankovich memset(spd_data, 0, fru.size); 1068c18ec02fSPetter Reinholdtsen do { 106996b19bb6SJim Mankovich int i; 1070c18ec02fSPetter Reinholdtsen msg_data[0] = id; 107196b19bb6SJim Mankovich msg_data[1] = offset & 0xFF; 107296b19bb6SJim Mankovich msg_data[2] = offset >> 8; 1073c18ec02fSPetter Reinholdtsen msg_data[3] = FRU_DATA_RQST_SIZE; 1074c18ec02fSPetter Reinholdtsen 1075c18ec02fSPetter Reinholdtsen rsp = intf->sendrecv(intf, &req); 1076c18ec02fSPetter Reinholdtsen if (rsp == NULL) { 1077c18ec02fSPetter Reinholdtsen printf(" Device not present (No Response)\n"); 107896b19bb6SJim Mankovich free(spd_data); 107996b19bb6SJim Mankovich spd_data = NULL; 1080c18ec02fSPetter Reinholdtsen return -1; 1081c18ec02fSPetter Reinholdtsen } 1082c18ec02fSPetter Reinholdtsen if (rsp->ccode > 0) { 1083c18ec02fSPetter Reinholdtsen printf(" Device not present (%s)\n", 1084c18ec02fSPetter Reinholdtsen val2str(rsp->ccode, completion_code_vals)); 1085c18ec02fSPetter Reinholdtsen 108696b19bb6SJim Mankovich free(spd_data); 108796b19bb6SJim Mankovich spd_data = NULL; 1088c18ec02fSPetter Reinholdtsen /* Timeouts are acceptable. No DIMM in the socket */ 1089c18ec02fSPetter Reinholdtsen if (rsp->ccode == 0xc3) 1090c18ec02fSPetter Reinholdtsen return 1; 1091c18ec02fSPetter Reinholdtsen 1092c18ec02fSPetter Reinholdtsen return -1; 1093c18ec02fSPetter Reinholdtsen } 1094c18ec02fSPetter Reinholdtsen 1095c18ec02fSPetter Reinholdtsen len = rsp->data[0]; 1096c18ec02fSPetter Reinholdtsen memcpy(&spd_data[offset], rsp->data + 1, len); 1097c18ec02fSPetter Reinholdtsen offset += len; 1098c18ec02fSPetter Reinholdtsen } while (offset < fru.size); 1099c18ec02fSPetter Reinholdtsen 1100c18ec02fSPetter Reinholdtsen /* now print spd info */ 1101c18ec02fSPetter Reinholdtsen ipmi_spd_print(spd_data, offset); 110296b19bb6SJim Mankovich free(spd_data); 110396b19bb6SJim Mankovich spd_data = NULL; 1104c18ec02fSPetter Reinholdtsen 1105c18ec02fSPetter Reinholdtsen return 0; 1106c18ec02fSPetter Reinholdtsen } 1107