mb/google/auron: Factor out mainboard_print_spd_info
				
					
				
			It is identical for all variants that have it. Change-Id: Iec3a5f036d9b760d1075059f2db1480b1c76273e Signed-off-by: Angel Pons <th3fanbus@gmail.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/49772 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Michael Niewöhner <foss@mniewoehner.de>
This commit is contained in:
		| @@ -8,6 +8,8 @@ bootblock-$(CONFIG_CHROMEOS) += chromeos.c | ||||
|  | ||||
| smm-y += smihandler.c | ||||
|  | ||||
| romstage-$(CONFIG_HAVE_SPD_IN_CBFS) += spd.c | ||||
|  | ||||
| romstage-y += variants/$(VARIANT_DIR)/pei_data.c | ||||
| ramstage-y += variants/$(VARIANT_DIR)/pei_data.c | ||||
|  | ||||
|   | ||||
							
								
								
									
										70
									
								
								src/mainboard/google/auron/spd.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/mainboard/google/auron/spd.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| /* SPDX-License-Identifier: GPL-2.0-only */ | ||||
|  | ||||
| #include <cbfs.h> | ||||
| #include <console/console.h> | ||||
| #include <mainboard/google/auron/variant.h> | ||||
| #include <soc/gpio.h> | ||||
| #include <soc/pei_data.h> | ||||
| #include <soc/romstage.h> | ||||
| #include <string.h> | ||||
| #include <types.h> | ||||
|  | ||||
| #define SPD_DRAM_TYPE		2 | ||||
| #define SPD_DRAM_DDR3		0x0b | ||||
| #define SPD_DRAM_LPDDR3		0xf1 | ||||
| #define SPD_DENSITY_BANKS	4 | ||||
| #define SPD_ADDRESSING		5 | ||||
| #define SPD_ORGANIZATION	7 | ||||
| #define SPD_BUS_DEV_WIDTH	8 | ||||
| #define SPD_PART_OFF		128 | ||||
| #define SPD_PART_LEN		18 | ||||
|  | ||||
| void mainboard_print_spd_info(uint8_t spd[]) | ||||
| { | ||||
| 	const int spd_banks[8] = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	const int spd_capmb[8] = {  1,  2,  4,  8, 16, 32, 64,  0 }; | ||||
| 	const int spd_rows[8]  = { 12, 13, 14, 15, 16, -1, -1, -1 }; | ||||
| 	const int spd_cols[8]  = {  9, 10, 11, 12, -1, -1, -1, -1 }; | ||||
| 	const int spd_ranks[8] = {  1,  2,  3,  4, -1, -1, -1, -1 }; | ||||
| 	const int spd_devw[8]  = {  4,  8, 16, 32, -1, -1, -1, -1 }; | ||||
| 	const int spd_busw[8]  = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	char spd_name[SPD_PART_LEN+1] = { 0 }; | ||||
|  | ||||
| 	int banks = spd_banks[(spd[SPD_DENSITY_BANKS] >> 4) & 7]; | ||||
| 	int capmb = spd_capmb[spd[SPD_DENSITY_BANKS] & 7] * 256; | ||||
| 	int rows  = spd_rows[(spd[SPD_ADDRESSING] >> 3) & 7]; | ||||
| 	int cols  = spd_cols[spd[SPD_ADDRESSING] & 7]; | ||||
| 	int ranks = spd_ranks[(spd[SPD_ORGANIZATION] >> 3) & 7]; | ||||
| 	int devw  = spd_devw[spd[SPD_ORGANIZATION] & 7]; | ||||
| 	int busw  = spd_busw[spd[SPD_BUS_DEV_WIDTH] & 7]; | ||||
|  | ||||
| 	/* Module type */ | ||||
| 	printk(BIOS_INFO, "SPD: module type is "); | ||||
| 	switch (spd[SPD_DRAM_TYPE]) { | ||||
| 	case SPD_DRAM_DDR3: | ||||
| 		printk(BIOS_INFO, "DDR3\n"); | ||||
| 		break; | ||||
| 	case SPD_DRAM_LPDDR3: | ||||
| 		printk(BIOS_INFO, "LPDDR3\n"); | ||||
| 		break; | ||||
| 	default: | ||||
| 		printk(BIOS_INFO, "Unknown (%02x)\n", spd[SPD_DRAM_TYPE]); | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	/* Module Part Number */ | ||||
| 	memcpy(spd_name, &spd[SPD_PART_OFF], SPD_PART_LEN); | ||||
| 	spd_name[SPD_PART_LEN] = 0; | ||||
| 	printk(BIOS_INFO, "SPD: module part is %s\n", spd_name); | ||||
|  | ||||
| 	printk(BIOS_INFO, "SPD: banks %d, ranks %d, rows %d, columns %d, " | ||||
| 	       "density %d Mb\n", banks, ranks, rows, cols, capmb); | ||||
| 	printk(BIOS_INFO, "SPD: device width %d bits, bus width %d bits\n", | ||||
| 	       devw, busw); | ||||
|  | ||||
| 	if (capmb > 0 && busw > 0 && devw > 0 && ranks > 0) { | ||||
| 		/* SIZE = DENSITY / 8 * BUS_WIDTH / SDRAM_WIDTH * RANKS */ | ||||
| 		printk(BIOS_INFO, "SPD: module size is %u MB (per channel)\n", | ||||
| 		       capmb / 8 * busw / devw * ranks); | ||||
| 	} | ||||
| } | ||||
| @@ -5,6 +5,7 @@ | ||||
|  | ||||
| #include <device/device.h> | ||||
| #include <soc/romstage.h> | ||||
| #include <stdint.h> | ||||
|  | ||||
| int variant_smbios_data(struct device *dev, int *handle, | ||||
| 			unsigned long *current); | ||||
| @@ -12,17 +13,8 @@ void variant_romstage_entry(struct romstage_params *rp); | ||||
| void lan_init(void); | ||||
|  | ||||
| void mainboard_fill_spd_data(struct pei_data *pei_data); | ||||
| void mainboard_print_spd_info(uint8_t spd[]); | ||||
|  | ||||
| #define SPD_LEN			256 | ||||
|  | ||||
| #define SPD_DRAM_TYPE		2 | ||||
| #define SPD_DRAM_DDR3		0x0b | ||||
| #define SPD_DRAM_LPDDR3		0xf1 | ||||
| #define SPD_DENSITY_BANKS	4 | ||||
| #define SPD_ADDRESSING		5 | ||||
| #define SPD_ORGANIZATION	7 | ||||
| #define SPD_BUS_DEV_WIDTH	8 | ||||
| #define SPD_PART_OFF		128 | ||||
| #define SPD_PART_LEN		18 | ||||
|  | ||||
| #endif | ||||
|   | ||||
| @@ -16,56 +16,6 @@ | ||||
| #define SPD_GPIO_BIT1		9 | ||||
| #define SPD_GPIO_BIT2		47 | ||||
|  | ||||
| static void mainboard_print_spd_info(uint8_t spd[]) | ||||
| { | ||||
| 	const int spd_banks[8] = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	const int spd_capmb[8] = {  1,  2,  4,  8, 16, 32, 64,  0 }; | ||||
| 	const int spd_rows[8]  = { 12, 13, 14, 15, 16, -1, -1, -1 }; | ||||
| 	const int spd_cols[8]  = {  9, 10, 11, 12, -1, -1, -1, -1 }; | ||||
| 	const int spd_ranks[8] = {  1,  2,  3,  4, -1, -1, -1, -1 }; | ||||
| 	const int spd_devw[8]  = {  4,  8, 16, 32, -1, -1, -1, -1 }; | ||||
| 	const int spd_busw[8]  = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	char spd_name[SPD_PART_LEN+1] = { 0 }; | ||||
|  | ||||
| 	int banks = spd_banks[(spd[SPD_DENSITY_BANKS] >> 4) & 7]; | ||||
| 	int capmb = spd_capmb[spd[SPD_DENSITY_BANKS] & 7] * 256; | ||||
| 	int rows  = spd_rows[(spd[SPD_ADDRESSING] >> 3) & 7]; | ||||
| 	int cols  = spd_cols[spd[SPD_ADDRESSING] & 7]; | ||||
| 	int ranks = spd_ranks[(spd[SPD_ORGANIZATION] >> 3) & 7]; | ||||
| 	int devw  = spd_devw[spd[SPD_ORGANIZATION] & 7]; | ||||
| 	int busw  = spd_busw[spd[SPD_BUS_DEV_WIDTH] & 7]; | ||||
|  | ||||
| 	/* Module type */ | ||||
| 	printk(BIOS_INFO, "SPD: module type is "); | ||||
| 	switch (spd[SPD_DRAM_TYPE]) { | ||||
| 	case SPD_DRAM_DDR3: | ||||
| 		printk(BIOS_INFO, "DDR3\n"); | ||||
| 		break; | ||||
| 	case SPD_DRAM_LPDDR3: | ||||
| 		printk(BIOS_INFO, "LPDDR3\n"); | ||||
| 		break; | ||||
| 	default: | ||||
| 		printk(BIOS_INFO, "Unknown (%02x)\n", spd[SPD_DRAM_TYPE]); | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	/* Module Part Number */ | ||||
| 	memcpy(spd_name, &spd[SPD_PART_OFF], SPD_PART_LEN); | ||||
| 	spd_name[SPD_PART_LEN] = 0; | ||||
| 	printk(BIOS_INFO, "SPD: module part is %s\n", spd_name); | ||||
|  | ||||
| 	printk(BIOS_INFO, "SPD: banks %d, ranks %d, rows %d, columns %d, " | ||||
| 	       "density %d Mb\n", banks, ranks, rows, cols, capmb); | ||||
| 	printk(BIOS_INFO, "SPD: device width %d bits, bus width %d bits\n", | ||||
| 	       devw, busw); | ||||
|  | ||||
| 	if (capmb > 0 && busw > 0 && devw > 0 && ranks > 0) { | ||||
| 		/* SIZE = DENSITY / 8 * BUS_WIDTH / SDRAM_WIDTH * RANKS */ | ||||
| 		printk(BIOS_INFO, "SPD: module size is %u MB (per channel)\n", | ||||
| 		       capmb / 8 * busw / devw * ranks); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* Copy SPD data for on-board memory */ | ||||
| void mainboard_fill_spd_data(struct pei_data *pei_data) | ||||
| { | ||||
|   | ||||
| @@ -16,56 +16,6 @@ | ||||
| #define SPD_GPIO_BIT1		9 | ||||
| #define SPD_GPIO_BIT2		47 | ||||
|  | ||||
| static void mainboard_print_spd_info(uint8_t spd[]) | ||||
| { | ||||
| 	const int spd_banks[8] = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	const int spd_capmb[8] = {  1,  2,  4,  8, 16, 32, 64,  0 }; | ||||
| 	const int spd_rows[8]  = { 12, 13, 14, 15, 16, -1, -1, -1 }; | ||||
| 	const int spd_cols[8]  = {  9, 10, 11, 12, -1, -1, -1, -1 }; | ||||
| 	const int spd_ranks[8] = {  1,  2,  3,  4, -1, -1, -1, -1 }; | ||||
| 	const int spd_devw[8]  = {  4,  8, 16, 32, -1, -1, -1, -1 }; | ||||
| 	const int spd_busw[8]  = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	char spd_name[SPD_PART_LEN+1] = { 0 }; | ||||
|  | ||||
| 	int banks = spd_banks[(spd[SPD_DENSITY_BANKS] >> 4) & 7]; | ||||
| 	int capmb = spd_capmb[spd[SPD_DENSITY_BANKS] & 7] * 256; | ||||
| 	int rows  = spd_rows[(spd[SPD_ADDRESSING] >> 3) & 7]; | ||||
| 	int cols  = spd_cols[spd[SPD_ADDRESSING] & 7]; | ||||
| 	int ranks = spd_ranks[(spd[SPD_ORGANIZATION] >> 3) & 7]; | ||||
| 	int devw  = spd_devw[spd[SPD_ORGANIZATION] & 7]; | ||||
| 	int busw  = spd_busw[spd[SPD_BUS_DEV_WIDTH] & 7]; | ||||
|  | ||||
| 	/* Module type */ | ||||
| 	printk(BIOS_INFO, "SPD: module type is "); | ||||
| 	switch (spd[SPD_DRAM_TYPE]) { | ||||
| 	case SPD_DRAM_DDR3: | ||||
| 		printk(BIOS_INFO, "DDR3\n"); | ||||
| 		break; | ||||
| 	case SPD_DRAM_LPDDR3: | ||||
| 		printk(BIOS_INFO, "LPDDR3\n"); | ||||
| 		break; | ||||
| 	default: | ||||
| 		printk(BIOS_INFO, "Unknown (%02x)\n", spd[SPD_DRAM_TYPE]); | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	/* Module Part Number */ | ||||
| 	memcpy(spd_name, &spd[SPD_PART_OFF], SPD_PART_LEN); | ||||
| 	spd_name[SPD_PART_LEN] = 0; | ||||
| 	printk(BIOS_INFO, "SPD: module part is %s\n", spd_name); | ||||
|  | ||||
| 	printk(BIOS_INFO, "SPD: banks %d, ranks %d, rows %d, columns %d, " | ||||
| 	       "density %d Mb\n", banks, ranks, rows, cols, capmb); | ||||
| 	printk(BIOS_INFO, "SPD: device width %d bits, bus width %d bits\n", | ||||
| 	       devw, busw); | ||||
|  | ||||
| 	if (capmb > 0 && busw > 0 && devw > 0 && ranks > 0) { | ||||
| 		/* SIZE = DENSITY / 8 * BUS_WIDTH / SDRAM_WIDTH * RANKS */ | ||||
| 		printk(BIOS_INFO, "SPD: module size is %u MB (per channel)\n", | ||||
| 		       capmb / 8 * busw / devw * ranks); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* Copy SPD data for on-board memory */ | ||||
| void mainboard_fill_spd_data(struct pei_data *pei_data) | ||||
| { | ||||
|   | ||||
| @@ -16,56 +16,6 @@ | ||||
| #define SPD_GPIO_BIT1		9 | ||||
| #define SPD_GPIO_BIT2		47 | ||||
|  | ||||
| static void mainboard_print_spd_info(uint8_t spd[]) | ||||
| { | ||||
| 	const int spd_banks[8] = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	const int spd_capmb[8] = {  1,  2,  4,  8, 16, 32, 64,  0 }; | ||||
| 	const int spd_rows[8]  = { 12, 13, 14, 15, 16, -1, -1, -1 }; | ||||
| 	const int spd_cols[8]  = {  9, 10, 11, 12, -1, -1, -1, -1 }; | ||||
| 	const int spd_ranks[8] = {  1,  2,  3,  4, -1, -1, -1, -1 }; | ||||
| 	const int spd_devw[8]  = {  4,  8, 16, 32, -1, -1, -1, -1 }; | ||||
| 	const int spd_busw[8]  = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	char spd_name[SPD_PART_LEN+1] = { 0 }; | ||||
|  | ||||
| 	int banks = spd_banks[(spd[SPD_DENSITY_BANKS] >> 4) & 7]; | ||||
| 	int capmb = spd_capmb[spd[SPD_DENSITY_BANKS] & 7] * 256; | ||||
| 	int rows  = spd_rows[(spd[SPD_ADDRESSING] >> 3) & 7]; | ||||
| 	int cols  = spd_cols[spd[SPD_ADDRESSING] & 7]; | ||||
| 	int ranks = spd_ranks[(spd[SPD_ORGANIZATION] >> 3) & 7]; | ||||
| 	int devw  = spd_devw[spd[SPD_ORGANIZATION] & 7]; | ||||
| 	int busw  = spd_busw[spd[SPD_BUS_DEV_WIDTH] & 7]; | ||||
|  | ||||
| 	/* Module type */ | ||||
| 	printk(BIOS_INFO, "SPD: module type is "); | ||||
| 	switch (spd[SPD_DRAM_TYPE]) { | ||||
| 	case SPD_DRAM_DDR3: | ||||
| 		printk(BIOS_INFO, "DDR3\n"); | ||||
| 		break; | ||||
| 	case SPD_DRAM_LPDDR3: | ||||
| 		printk(BIOS_INFO, "LPDDR3\n"); | ||||
| 		break; | ||||
| 	default: | ||||
| 		printk(BIOS_INFO, "Unknown (%02x)\n", spd[SPD_DRAM_TYPE]); | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	/* Module Part Number */ | ||||
| 	memcpy(spd_name, &spd[SPD_PART_OFF], SPD_PART_LEN); | ||||
| 	spd_name[SPD_PART_LEN] = 0; | ||||
| 	printk(BIOS_INFO, "SPD: module part is %s\n", spd_name); | ||||
|  | ||||
| 	printk(BIOS_INFO, "SPD: banks %d, ranks %d, rows %d, columns %d, " | ||||
| 	       "density %d Mb\n", banks, ranks, rows, cols, capmb); | ||||
| 	printk(BIOS_INFO, "SPD: device width %d bits, bus width %d bits\n", | ||||
| 	       devw, busw); | ||||
|  | ||||
| 	if (capmb > 0 && busw > 0 && devw > 0 && ranks > 0) { | ||||
| 		/* SIZE = DENSITY / 8 * BUS_WIDTH / SDRAM_WIDTH * RANKS */ | ||||
| 		printk(BIOS_INFO, "SPD: module size is %u MB (per channel)\n", | ||||
| 		       capmb / 8 * busw / devw * ranks); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* Copy SPD data for on-board memory */ | ||||
| void mainboard_fill_spd_data(struct pei_data *pei_data) | ||||
| { | ||||
|   | ||||
| @@ -17,56 +17,6 @@ | ||||
| #define SPD_GPIO_BIT2		47 | ||||
| #define SPD_GPIO_BIT3		8 | ||||
|  | ||||
| static void mainboard_print_spd_info(uint8_t spd[]) | ||||
| { | ||||
| 	const int spd_banks[8] = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	const int spd_capmb[8] = {  1,  2,  4,  8, 16, 32, 64,  0 }; | ||||
| 	const int spd_rows[8]  = { 12, 13, 14, 15, 16, -1, -1, -1 }; | ||||
| 	const int spd_cols[8]  = {  9, 10, 11, 12, -1, -1, -1, -1 }; | ||||
| 	const int spd_ranks[8] = {  1,  2,  3,  4, -1, -1, -1, -1 }; | ||||
| 	const int spd_devw[8]  = {  4,  8, 16, 32, -1, -1, -1, -1 }; | ||||
| 	const int spd_busw[8]  = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	char spd_name[SPD_PART_LEN+1] = { 0 }; | ||||
|  | ||||
| 	int banks = spd_banks[(spd[SPD_DENSITY_BANKS] >> 4) & 7]; | ||||
| 	int capmb = spd_capmb[spd[SPD_DENSITY_BANKS] & 7] * 256; | ||||
| 	int rows  = spd_rows[(spd[SPD_ADDRESSING] >> 3) & 7]; | ||||
| 	int cols  = spd_cols[spd[SPD_ADDRESSING] & 7]; | ||||
| 	int ranks = spd_ranks[(spd[SPD_ORGANIZATION] >> 3) & 7]; | ||||
| 	int devw  = spd_devw[spd[SPD_ORGANIZATION] & 7]; | ||||
| 	int busw  = spd_busw[spd[SPD_BUS_DEV_WIDTH] & 7]; | ||||
|  | ||||
| 	/* Module type */ | ||||
| 	printk(BIOS_INFO, "SPD: module type is "); | ||||
| 	switch (spd[SPD_DRAM_TYPE]) { | ||||
| 	case SPD_DRAM_DDR3: | ||||
| 		printk(BIOS_INFO, "DDR3\n"); | ||||
| 		break; | ||||
| 	case SPD_DRAM_LPDDR3: | ||||
| 		printk(BIOS_INFO, "LPDDR3\n"); | ||||
| 		break; | ||||
| 	default: | ||||
| 		printk(BIOS_INFO, "Unknown (%02x)\n", spd[SPD_DRAM_TYPE]); | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	/* Module Part Number */ | ||||
| 	memcpy(spd_name, &spd[SPD_PART_OFF], SPD_PART_LEN); | ||||
| 	spd_name[SPD_PART_LEN] = 0; | ||||
| 	printk(BIOS_INFO, "SPD: module part is %s\n", spd_name); | ||||
|  | ||||
| 	printk(BIOS_INFO, "SPD: banks %d, ranks %d, rows %d, columns %d, " | ||||
| 	       "density %d Mb\n", banks, ranks, rows, cols, capmb); | ||||
| 	printk(BIOS_INFO, "SPD: device width %d bits, bus width %d bits\n", | ||||
| 	       devw, busw); | ||||
|  | ||||
| 	if (capmb > 0 && busw > 0 && devw > 0 && ranks > 0) { | ||||
| 		/* SIZE = DENSITY / 8 * BUS_WIDTH / SDRAM_WIDTH * RANKS */ | ||||
| 		printk(BIOS_INFO, "SPD: module size is %u MB (per channel)\n", | ||||
| 		       capmb / 8 * busw / devw * ranks); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* Copy SPD data for on-board memory */ | ||||
| void mainboard_fill_spd_data(struct pei_data *pei_data) | ||||
| { | ||||
|   | ||||
| @@ -17,56 +17,6 @@ | ||||
| #define SPD_GPIO_BIT2		67 | ||||
| #define SPD_GPIO_BIT3		65 | ||||
|  | ||||
| static void mainboard_print_spd_info(uint8_t spd[]) | ||||
| { | ||||
| 	const int spd_banks[8] = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	const int spd_capmb[8] = {  1,  2,  4,  8, 16, 32, 64,  0 }; | ||||
| 	const int spd_rows[8]  = { 12, 13, 14, 15, 16, -1, -1, -1 }; | ||||
| 	const int spd_cols[8]  = {  9, 10, 11, 12, -1, -1, -1, -1 }; | ||||
| 	const int spd_ranks[8] = {  1,  2,  3,  4, -1, -1, -1, -1 }; | ||||
| 	const int spd_devw[8]  = {  4,  8, 16, 32, -1, -1, -1, -1 }; | ||||
| 	const int spd_busw[8]  = {  8, 16, 32, 64, -1, -1, -1, -1 }; | ||||
| 	char spd_name[SPD_PART_LEN+1] = { 0 }; | ||||
|  | ||||
| 	int banks = spd_banks[(spd[SPD_DENSITY_BANKS] >> 4) & 7]; | ||||
| 	int capmb = spd_capmb[spd[SPD_DENSITY_BANKS] & 7] * 256; | ||||
| 	int rows  = spd_rows[(spd[SPD_ADDRESSING] >> 3) & 7]; | ||||
| 	int cols  = spd_cols[spd[SPD_ADDRESSING] & 7]; | ||||
| 	int ranks = spd_ranks[(spd[SPD_ORGANIZATION] >> 3) & 7]; | ||||
| 	int devw  = spd_devw[spd[SPD_ORGANIZATION] & 7]; | ||||
| 	int busw  = spd_busw[spd[SPD_BUS_DEV_WIDTH] & 7]; | ||||
|  | ||||
| 	/* Module type */ | ||||
| 	printk(BIOS_INFO, "SPD: module type is "); | ||||
| 	switch (spd[SPD_DRAM_TYPE]) { | ||||
| 	case SPD_DRAM_DDR3: | ||||
| 		printk(BIOS_INFO, "DDR3\n"); | ||||
| 		break; | ||||
| 	case SPD_DRAM_LPDDR3: | ||||
| 		printk(BIOS_INFO, "LPDDR3\n"); | ||||
| 		break; | ||||
| 	default: | ||||
| 		printk(BIOS_INFO, "Unknown (%02x)\n", spd[SPD_DRAM_TYPE]); | ||||
| 		break; | ||||
| 	} | ||||
|  | ||||
| 	/* Module Part Number */ | ||||
| 	memcpy(spd_name, &spd[SPD_PART_OFF], SPD_PART_LEN); | ||||
| 	spd_name[SPD_PART_LEN] = 0; | ||||
| 	printk(BIOS_INFO, "SPD: module part is %s\n", spd_name); | ||||
|  | ||||
| 	printk(BIOS_INFO, "SPD: banks %d, ranks %d, rows %d, columns %d, " | ||||
| 	       "density %d Mb\n", banks, ranks, rows, cols, capmb); | ||||
| 	printk(BIOS_INFO, "SPD: device width %d bits, bus width %d bits\n", | ||||
| 	       devw, busw); | ||||
|  | ||||
| 	if (capmb > 0 && busw > 0 && devw > 0 && ranks > 0) { | ||||
| 		/* SIZE = DENSITY / 8 * BUS_WIDTH / SDRAM_WIDTH * RANKS */ | ||||
| 		printk(BIOS_INFO, "SPD: module size is %u MB (per channel)\n", | ||||
| 		       capmb / 8 * busw / devw * ranks); | ||||
| 	} | ||||
| } | ||||
|  | ||||
| /* Copy SPD data for on-board memory */ | ||||
| void mainboard_fill_spd_data(struct pei_data *pei_data) | ||||
| { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user