From: Chris January Date: Wed, 17 Jun 2020 14:02:19 +0000 (+0100) Subject: fastmodel: Fix hierachical Iris component names. X-Git-Tag: v20.1.0.0~375 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a29cabb5457fa1011b9cdefc750ea1fec6947928;p=gem5.git fastmodel: Fix hierachical Iris component names. Recent releases of Fast Models structure Iris resources in a hierarchy. Use the parent resource ID if set to construct the hierachical name of components when constructing the resource map. Change-Id: Iafafa26d5aff560c3b2e93894f81f770c0e98079 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/31076 Reviewed-by: Gabe Black Maintainer: Gabe Black Tested-by: kokoro --- diff --git a/src/arch/arm/fastmodel/iris/thread_context.cc b/src/arch/arm/fastmodel/iris/thread_context.cc index a2cf2bfc6..070a3862f 100644 --- a/src/arch/arm/fastmodel/iris/thread_context.cc +++ b/src/arch/arm/fastmodel/iris/thread_context.cc @@ -1,4 +1,16 @@ /* + * Copyright (c) 2020 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * * Copyright 2019 Google, Inc. * * Redistribution and use in source and binary forms, with or without @@ -204,9 +216,22 @@ ThreadContext::phaseInitLeave( std::vector resources; call().resource_getList(_instId, resources); + std::map + idToResource; + for (const auto &resource: resources) { + idToResource[resource.rscId] = &resource; + } ResourceMap resourceMap; - for (auto &resource: resources) - resourceMap[resource.name] = resource; + for (const auto &resource: resources) { + std::string name = resource.name; + iris::ResourceId parentId = resource.parentRscId; + while (parentId != iris::IRIS_UINT64_MAX) { + const auto *parent = idToResource[parentId]; + name = parent->name + "." + name; + parentId = parent->parentRscId; + } + resourceMap[name] = resource; + } initFromIrisInstance(resourceMap);