/* Otherwise come from DTB */ if (loongson_sysconf.fw_interface != LOONGSON_LEFI) return;
/* Parse memory information and activate */ for (i = 0; i < loongson_memmap->nr_map; i++) {
node_id = loongson_memmap->map[i].node_id; if (node_id != node) continue;
/* Memory size comes in MB if MEM_SIZE_IS_IN_BYTES not set */ if (mem_size & MEM_SIZE_IS_IN_BYTES)
mem_size &= ~MEM_SIZE_IS_IN_BYTES; else
mem_size = mem_size << 20;
switch (mem_type) { case SYSTEM_RAM_LOW: case SYSTEM_RAM_HIGH: case UMA_VIDEO_RAM:
pr_info("Node %d, mem_type:%d\t[%pa], %pa bytes usable\n",
(u32)node_id, mem_type, &mem_start, &mem_size);
memblock_add_node(mem_start, mem_size, node,
MEMBLOCK_NONE); break; case SYSTEM_RAM_RESERVED: case VIDEO_ROM: case ADAPTER_ROM: case ACPI_TABLE: case SMBIOS_TABLE:
pr_info("Node %d, mem_type:%d\t[%pa], %pa bytes reserved\n",
(u32)node_id, mem_type, &mem_start, &mem_size);
memblock_reserve(mem_start, mem_size); break; /* We should not reserve VUMA_VIDEO_RAM as it overlaps with MMIO */ case VUMA_VIDEO_RAM: default:
pr_info("Node %d, mem_type:%d\t[%pa], %pa bytes unhandled\n",
(u32)node_id, mem_type, &mem_start, &mem_size); break;
}
}
/* Reserve vgabios if it comes from firmware */ if (loongson_sysconf.vgabios_addr)
memblock_reserve(virt_to_phys((void *)loongson_sysconf.vgabios_addr),
SZ_256K); /* set nid for reserved memory */
memblock_set_node((u64)node << 44, (u64)(node + 1) << 44,
&memblock.reserved, node);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.