static void northbridge_init(struct udevice *dev, int rev) { u32 bridge_type; add_fixed_resources(dev, 6); northbridge_dmi_init(dev, rev); bridge_type = readl(MCHBAR_REG(0x5f10)); bridge_type &= ~0xff; if ((rev & BASE_REV_MASK) == BASE_REV_IVB) { /* Enable Power Aware Interrupt Routing - fixed priority */ clrsetbits_8(MCHBAR_REG(0x5418), 0xf, 0x4); /* 30h for IvyBridge */ bridge_type |= 0x30; } else { /* 20h for Sandybridge */ bridge_type |= 0x20; } writel(bridge_type, MCHBAR_REG(0x5f10)); /* * Set bit 0 of BIOS_RESET_CPL to indicate to the CPU * that BIOS has initialized memory and power management */ setbits_8(MCHBAR_REG(BIOS_RESET_CPL), 1); debug("Set BIOS_RESET_CPL\n"); /* Configure turbo power limits 1ms after reset complete bit */ mdelay(1); set_power_limits(28); /* * CPUs with configurable TDP also need power limits set * in MCHBAR. Use same values from MSR_PKG_POWER_LIMIT. */ if (cpu_config_tdp_levels()) { msr_t msr = msr_read(MSR_PKG_POWER_LIMIT); writel(msr.lo, MCHBAR_REG(0x59A0)); writel(msr.hi, MCHBAR_REG(0x59A4)); } /* Set here before graphics PM init */ writel(0x00100001, MCHBAR_REG(0x5500)); }
static void mc_add_dram_resources(device_t dev) { u32 bmbound, bsmmrrl; int index = 0; uint64_t highmem_size = 0; uint32_t fsp_mem_base = 0; GetHighMemorySize(&highmem_size); fsp_mem_base=(uint32_t)cbmem_top(); bmbound = iosf_bunit_read(BUNIT_BMBOUND); bsmmrrl = iosf_bunit_read(BUNIT_SMRRL) << 20; if (bsmmrrl){ printk(BIOS_DEBUG, "UMA, GTT & SMM memory location: 0x%x\n" "UMA, GTT & SMM memory size: %dM\n", bsmmrrl, (bmbound - bsmmrrl) >> 20); printk(BIOS_DEBUG, "FSP memory location: 0x%x\nFSP memory size: %dM\n", fsp_mem_base, (bsmmrrl - fsp_mem_base) >> 20); } printk(BIOS_INFO, "Available memory below 4GB: 0x%08x (%dM)\n", fsp_mem_base, fsp_mem_base >> 20); /* Report the memory regions. */ ram_resource(dev, index++, 0, legacy_hole_base_k); ram_resource(dev, index++, legacy_hole_base_k + legacy_hole_size_k, ((fsp_mem_base >> 10) - (legacy_hole_base_k + legacy_hole_size_k))); /* Mark SMM & FSP regions reserved */ mmio_resource(dev, index++, fsp_mem_base >> 10, (bmbound - fsp_mem_base) >> 10); if (highmem_size) { ram_resource(dev, index++, 0x100000000 >> 10, highmem_size >> 10 ); } printk(BIOS_INFO, "Available memory above 4GB: %lluM\n", highmem_size >> 20); index = add_fixed_resources(dev, index); }
tomlow -= FSP_RESERVE_MEMORY_SIZE; printk(BIOS_SPEW, "Available memory below 4GB: 0x%08x (%dM)\n", tomlow, tomlow >> 20); /* Report the memory regions. */ ram_resource(dev, index++, 0, legacy_hole_base_k); ram_resource(dev, index++, legacy_hole_base_k + legacy_hole_size_k, ((tomlow >> 10) - (legacy_hole_base_k + legacy_hole_size_k))); mmio_resource(dev, index++, tomlow >> 10, (bmbound - bsmmrrl) >> 10); if (bmbound_hi > 0x100000000) { ram_resource(dev, index++, 0x100000000 >> 10, (bmbound_hi - 0x100000000) >> 10 ); printk(BIOS_INFO, "Available memory above 4GB: %lluM\n", (bmbound_hi - 0x100000000) >> 20); } index = add_fixed_resources(dev, index); } static void mc_read_resources(device_t dev) { /* Call the normal read_resources */ pci_dev_read_resources(dev); /* Calculate and add DRAM resources. */ mc_add_dram_resources(dev); } static void pci_domain_set_resources(device_t dev) { /* * Assign memory resources for PCI devices