/* SPDX-License-Identifier: GPL-2.0-only */ #include #include #include #include #include #include #include const struct southbridge_usb_port mainboard_usb_ports[] = { { 1, 0, 0 }, /* Ext A (XHCI/EHCI) */ { 1, 0, 1 }, /* Ext B (XHCI) */ { 1, 0, 2 }, /* Ext C (XHCI/EHCI) */ { 1, 0, 3 }, /* Ext D (XHCI) */ { 0, 0, -1 }, /* Unused */ { 1, 0, -1 }, /* SD */ { 1, 0, -1 }, /* Wi-Fi */ { 1, 0, -1 }, /* USB Hub (All LS/FS Devices) */ { 1, 0, -1 }, /* Camera */ { 1, 0, 4 }, /* Ext B (EHCI) */ { 1, 0, 5 }, /* Ext D (EHCI) */ { 1, 0, -1 }, /* BT */ { 0, 0, -1 }, /* Unused */ { 0, 0, -1 }, /* Unused */ }; void mainboard_early_init(int s3resume) { bool igd, peg; u32 reg32; early_hybrid_graphics(&igd, &peg); /* Hide disabled devices */ reg32 = pci_read_config32(HOST_BRIDGE, DEVEN); reg32 &= ~(DEVEN_PEG10 | DEVEN_IGD); if (peg) reg32 |= DEVEN_PEG10; if (igd) { reg32 |= DEVEN_IGD; } else { /* Disable IGD VGA decode, no GTT or GFX stolen */ pci_write_config16(HOST_BRIDGE, GGC, 2); } pci_write_config32(HOST_BRIDGE, DEVEN, reg32); } static uint8_t *get_spd_data(int spd_index) { uint8_t *spd_file; size_t spd_file_len; printk(BIOS_DEBUG, "spd index %d\n", spd_index); spd_file = cbfs_map("spd.bin", &spd_file_len); if (!spd_file) die("SPD data not found."); if (spd_file_len < spd_index * 256) die("Missing SPD data."); return spd_file + spd_index * 256; } void mainboard_get_spd(spd_raw_data *spd, bool id_only) { uint8_t *memory; const int spd_gpio_vector[] = {71, 70, 69, 68, -1}; int ramcfg = get_gpios(spd_gpio_vector); int spd_index = -1; /* * GPIO68 GPIO69 GPIO70 GPIO71 Memory Supported * 0 0 0 0 4G Hynix 1600S No * 0 0 0 1 1G Samsung 1600 No * 0 0 1 0 4G Samsung 1600S No * 0 0 1 1 1G Hynix 1600 No * 0 1 0 0 4G Elpida 1600S No * 0 1 0 1 2G Samsung 1600 No * 0 1 1 0 2G Samsung 1333 No * 0 1 1 1 2G Hynix 1600 Yes * 1 0 0 0 4G Samsung 1600 No * 1 0 0 1 4G Hynix 1600 Yes * 1 0 1 0 2G Elpida 1600S No * 1 0 1 1 2G Elpida 1600 No * 1 1 0 0 4G Elpida 1600 No * 1 1 0 1 2G Samsung 1600S No * 1 1 1 0 2G Hynix 1600S No */ if (ramcfg == 7) spd_index = 0; else if (ramcfg == 9) spd_index = 1; if (spd_index == -1) die("Unsupported memory, RAMCFG=%d\n", ramcfg); memory = get_spd_data(spd_index); memcpy(&spd[0], memory, 256); memcpy(&spd[2], memory, 256); }