From patchwork Thu May 24 15:43:32 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Moger, Babu" X-Patchwork-Id: 10425037 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8207C6032A for ; Thu, 24 May 2018 15:44:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5B2B9296C9 for ; Thu, 24 May 2018 15:44:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4F94F296AD; Thu, 24 May 2018 15:44:22 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A61E3296AD for ; Thu, 24 May 2018 15:44:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S968188AbeEXPoU (ORCPT ); Thu, 24 May 2018 11:44:20 -0400 Received: from mail-bl2nam02on0059.outbound.protection.outlook.com ([104.47.38.59]:26944 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S968003AbeEXPoA (ORCPT ); Thu, 24 May 2018 11:44:00 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=m5b1Ebnwj4hezKHpc2yJsioUkypDv+QZ+1TsFcKanrg=; b=1480JHzhp9HdTHdyIiI8+PPLnsuBKfxUfCeIfwaj9EGmvwCL30eWAdwlDat8vcKnEQ2V+v8ZYq9qmqC/bLcMXG4R0+7338cKoJOqqhbThEyOs763vW76GN4CrbD5I5oJp4ZgHqUNEh2JgG4hUYKjM9YqqSM5oEwCCPOy24tPZas= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Babu.Moger@amd.com; Received: from linux-h3ml.amd.com (165.204.77.1) by DM5PR12MB2471.namprd12.prod.outlook.com (2603:10b6:4:b5::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.797.11; Thu, 24 May 2018 15:43:49 +0000 From: Babu Moger To: mst@redhat.com, marcel.apfelbaum@gmail.com, pbonzini@redhat.com, rth@twiddle.net, ehabkost@redhat.com, mtosatti@redhat.com Cc: qemu-devel@nongnu.org, kvm@vger.kernel.org, babu.moger@amd.com, kash@tripleback.net, geoff@hostfission.com Subject: [PATCH v11 3/5] i386: Add support for CPUID_8000_001E for AMD Date: Thu, 24 May 2018 11:43:32 -0400 Message-Id: <1527176614-26271-4-git-send-email-babu.moger@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1527176614-26271-1-git-send-email-babu.moger@amd.com> References: <1527176614-26271-1-git-send-email-babu.moger@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN4PR0501CA0024.namprd05.prod.outlook.com (2603:10b6:803:40::37) To DM5PR12MB2471.namprd12.prod.outlook.com (2603:10b6:4:b5::10) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(2017052603328)(7153060)(7193020); SRVR:DM5PR12MB2471; X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB2471; 3:SHXJwLD897kk9/X9d0j7Dj6UpYekFzfoSlPXQepKY6WmX9FCCSuuv+cTljiq1y0O4g83c/+h2B66hjrn8Q+uhpaT1+uopRJtJQwQaQtiVGA97IX442x1odKVGcjR5XWnERyWqk3revXoZFGJaM6tec6npQY9EpMDVoyi6fpfAW/llxamEvjQszM1bBc0NYjLZNkvTJJxhLHMA+6q2aiOJAqADfChQvfvjCs30cNnQ0PdBH++mdLlDu5MnQzfdCeG; 25:zFQmiAEb4zoWw4TwDFi80AJiNpRDAMsAFiMF/FX9sr0zF/1Y86GsNLg4jzIB+61pnHaA48WoQyK6eqosrRxzSKxi4dfPVvX5DOAfx1WZ5LIz9Sh/nXZaUPl0FmXhcXAGw3LjWS1AjsJjAzOxbQiSZAMQGGZqopJozcL5kfYy4cr2+vAFX5YY4WJh5SlMzJ98txpzj69vlX+3zRem80OGjNomTv+DUr9WN7Dzsk6XD6kPIa2wHF2QE0DTqprhmJ5GXVUrQy+CytcnH7rB2MubBeufiRO6m9RsR0wkgNyE2fIGUfr/KvsVC3Bo9dgzdeiDXRQa6x7dwPDyRQUoNvdjgw==; 31:mI69usPWRUADWNvH5UFuoeZVM/vuOcL+UAz6VH21TuVLuZqR7yEQkwk23yyuaCI5mxYh1B64lB/0K554HwEwitPbhCayxYX/UcNBU+ikirhMJE8YyLKzQlxcYarCQTWIxoci56KmArccbe7Tw59WeAJJQqxFh/suODX2fOamYoKm736jokKq/S5LHEas6ME/szIQwFpo55QG8lwXK6N2eHWI3GrTuQUxOBzdo2KQnQE= X-MS-TrafficTypeDiagnostic: DM5PR12MB2471: X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB2471; 20:A7dlglAy+MFn1ZvrURmDqwuF8cUhYAxQqeO3Uwvjv6vfO2gbOzmBSF7zVVZiuYAE17z4ifaJd0htH8Q/hilknEp4mdJzbHvHbyfp0ADv+vwtnMJMW8iHLcqQFG20aK9VCClmM8EMcN4mq0ZfueETsHqVZUMLy7Orkqpj+c7xrCu1oV8TF+Rc1LHROa/beDcMOlhhKsDpT3acr4NCZ3/Fb7edwzQhziZqItYvFrLVeGh/KmrLcxPN3x1hlkGT9GvcKSTlq0Eg7mrCtJKuCGqyU5Fg9kSeNkPD0lunnueoCeWhbMHGI1eFeyU+EgFo0xfIzUPaIJHXQxp5BC6JXlrfWgmICtk2Q6UjRHUaw9i1D9nTTuSLyzP97Nk7nhphSH+p7L5H+ApOjje4CMBL4EkgDhu2oajRP5PWbQPssWbYCPiG64qaM6ztAAj7DZKW1wHXsU3VHtbqee8eDZH8Q2sdib7ZlrnN5C/nR3GYZIi8etE/EOfKYAGH5nhSgtPewSwE; 4:CkJs6rORkOJ8BuvKNwhNQvmy9nNlak43YoZID/6bhrzbSO831jBGLgLqiPZtEClBa/AbHoSmmF0gOvfaYPryVLa95FTASLHUpbVyFUSST/PpQWQLa9zS9404JAhm88Qx6qDzha8uXN4KF+FhMdKbtyGCQGlmMxbxCeJq3jKHI4yqE/EdRRF7xjY024A2EYXAc1cvnPYSIBoKA7+0dHpaewCmR9R1e+bPl528Ai/uXTyQsra5ZVvVou5/afGjJKjTBimLRCGKR0W7dgsW4u9eOeioPxf9PZdEYt0JoD1QzYb7b/qkj9tQ11h5T90agDt1 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(3231254)(944501410)(52105095)(6055026)(149027)(150027)(6041310)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123558120)(20161123564045)(6072148)(201708071742011)(7699016); SRVR:DM5PR12MB2471; BCL:0; PCL:0; RULEID:; SRVR:DM5PR12MB2471; X-Forefront-PRVS: 0682FC00E8 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(346002)(39380400002)(366004)(39860400002)(396003)(376002)(189003)(199004)(5660300001)(53416004)(6666003)(2616005)(446003)(11346002)(956004)(476003)(486006)(44832011)(16586007)(7416002)(4326008)(25786009)(478600001)(53936002)(39060400002)(26005)(47776003)(316002)(186003)(16526019)(386003)(86362001)(7696005)(51416003)(52116002)(66066001)(68736007)(76176011)(97736004)(2906002)(50466002)(3846002)(6116002)(72206003)(4720700003)(7736002)(6486002)(305945005)(36756003)(48376002)(50226002)(8676002)(8936002)(81166006)(81156014)(105586002)(106356001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR12MB2471; H:linux-h3ml.amd.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR12MB2471; 23:3AZPTYBsJ5lNWhCu9b6QUB79eUnAD0k62LFmiAtEe?= =?us-ascii?Q?z15aEM5w+xhwbNNnKBQG1jWAhT5NAwfi43AotmYX5fPDAKvSkDL1bJuAblbb?= =?us-ascii?Q?pXRWbCp3/2s9wEhJOUPxJTu8+s2aDUc4tFEq9RfWHyZ3G8Z+ktr8ZY7Gz8jF?= =?us-ascii?Q?8lXarBGtzw8kWjc3zRkrWgQ2WImmNwHa8BZmnsAT0tKks+x+aEaPyRCnfcu8?= =?us-ascii?Q?J8aJXcTORwasQvTo58JcsODzleqz4k/NbYoZ4dlbs/2sKW0eKPpTJczAshSk?= =?us-ascii?Q?7ShzsvioSuYxew6WgArZfWHRsusDSm2zKiosPHg90ZJH3rFYdVbFQU0r3uiN?= =?us-ascii?Q?LYIgClkF01kpzRImXsug9B1kJW3JMDBRrrR8st3bsj/nrEUHPmWOjTM3cjMo?= =?us-ascii?Q?IKAnAsD973kAHwuRLd3BWFU2p5Dg7v3A5exG67jfOZnF7WLWhcJ8QBT2cpaO?= =?us-ascii?Q?57lEW5wBi+S/5AAI0c/NaacqVqqpqhJPs71YYhNNkfEWwD6gtqTg4rl3+6d8?= =?us-ascii?Q?gI1UsnimAy+2dK/V1qKg/cYmfoPXviTCamNLmiwEloUIk6Xdh2IPmNSumJQ+?= =?us-ascii?Q?BvnVzg0CMM0ThCYQ8l9q2kFZ9GTTJpWeY0SS+cwAcqHWL3aBEsp6yPg3Hl6t?= =?us-ascii?Q?EiPdNadenrJ6LeRufT1MJaz+RBIQQa5JXwA9F5ywnBzTXh2BzuByLC7NMamq?= =?us-ascii?Q?2DWWhbwPyGsTF1zTdhJgo09g4oZvx8xhqjxvmQS2M/RO8hzgw3mXh/638lz5?= =?us-ascii?Q?Y58r7QSOebmSE5LNqU9QXPeFxFbdI1lI1Wh5CXS7L9GoxXE7MD31NhLGb9Ka?= =?us-ascii?Q?UFWrDztAqo2sOivnKnXoabtNiRoeuZ0HCiUdnFHDYn7624c1tAon8yagIosQ?= =?us-ascii?Q?5CIrl6k8c+8yMyiyk+4c5KQBjNxdYx45QVnyEcf8IWkLAt5i+ZxQ/2bJrE6q?= =?us-ascii?Q?cI6hM1DLxZw/T8yoEtSDP+HzNE+0cJXwZaBpjA8Fbxwna84T2ID1k3k99Ssu?= =?us-ascii?Q?hndIErtw4CW7aBfWksJSvHQo0TcdLKAnBNHNyrdkWoiFuJqWuQicJPUuctGZ?= =?us-ascii?Q?ps5Pwp19R9U8wVuotAPkOPtLww1f43n7AHY+VHrm3IssECV9Gl+zfb75ljKX?= =?us-ascii?Q?Xg7D69peVFjtuj4hmHUQTVLDNPVKEspr8VXGk5apIGo2Bd/lpasCfxTdnoJv?= =?us-ascii?Q?GjTfETYItaZDfDI2GlMh58b7uXH8UYWEGIijM6JUUjoVTbBQM8GJahgKUaYi?= =?us-ascii?Q?HAq1y/PlabxDciOTLC0ffy/rZQV+hKNXH8XHJYB?= X-Microsoft-Antispam-Message-Info: EPa5On5xBe9n5AcKcTN8c20JaswLtmYezX9t+/+UXgiDe4x4ywDts36V1axhrfiwDf5KUCA5o7EQMox29QE1jv0bSeOID/cYO9c68fFi+UlTOB9U2Hk4H/LU2xL/fIXEmnXgM4dotaWNTLO+IqsjZeJa4IkrswBhzZAcL7xsqM8dGRqzBjRDXNNUpp6f1/4R X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB2471; 6:9dlkrsNvEkJSZYscoPUswsftxn78Uw1ZEAXRyi8ryDtiarRVhUb+rlQP3QlM0KbN/yntHcdRbIbTNoBlmswwI4r2fRa6OmmcR5n3wOzCbQ8OiUsKjZ/5U5yI7MUPie6Tp+n8Pr6W7cHKgOdQdIz/J3CddfVq1DjGgEjD3/ruQyPCCoV6PQGC5fUUhxUFLeEvIn2DsPLJFEf4dRyMiEqfUXKzh2dsVpOLanaJSNinW1EKmVWDGEalycZmgXqy6fr1cVjnqfEKB8Wh/t4D8N3E6JPZK5wGrpgwB8dTCD8KGQvNL5fYJmDh2kn4nBxX19XaUKw8gIJvswDNDlbYMyfId++ON0cszpdDXYTagpFoa80eTis2AKr7V0UeLB4zQMluxRoyxxnHa74lNqkdnNpNIFe80ArpW9o1x0gLBrSX3pgD4mMx96IP73aV7ZITCExyFOFwRxupzA5A0HvJLY7rNg==; 5:viv1FdHJEzVNao8CdCaVJY2WVlUr0OKeXWVoAZGnTimGbjd3P1XkVHZG8U/0p2NWMWcvu1J8zDtlEqH+59YnJrX/kTfBFGVPqdxzf/Ang/AVOxhxRR5nAZv+bV45cQ5RaBJISCY2cvhvpfGoYk/zJU5RAucLrNQ966t80XXngNk=; 24:XKM2+xWwYk1fPqjaEV+H7JaC3LccftSJA3YeTP2UvBVxlKWay8+bmRTCBr23HrFrXsM6hzgwWZoOaDP7hfO7jbGAk1dTS5q3xmnW/c8IIzE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM5PR12MB2471; 7:iFfrrcJo4ec8h2JVoeXXorW9xeSsGQSTRte0zgZdFCoZpNuKiKqaoL4q+XvCiYjnfP81Q7nr24pYF/0cUU1oMjxxk/5jEiXkeFo2+1uK23krA24wyZFrfSACShrRknPBRB7IYmc3mx43Afkf/icbAZLcvx7B2vpgHr0ddWTn16CkhBFSjucpt4pXHy1vklzdlY5xOQtmUXov5D4B8o7xlpGNiT9uEi2q+ecZP0LZNV0LBB23V1cQbDHAfBUEx6S6; 20:lxPPZNbVyICOIu/WwkBVMjiDOvHpmVFMl/ZvHiELEe2X+MEgXviB0mC+VkKboZxCYig1fLT0wwCHzQkT7JLcQuFyKI7np+Lsm7lzwTVhXbPKdxZuY8+mwWAupZdmGb9uc9dFvBLjeJTaNwEY+2MI+0roP4qV9o/sG0eKmolnCAS9oC8qL5bAobtJwSaIwR6j2BUisB4lG6caF2D+D5htW4nh8z132l4ma4v7ROfuGr0hzSig2fnIttJBm96YgBjC X-MS-Office365-Filtering-Correlation-Id: 984f1564-e392-4794-1328-08d5c18d251c X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 May 2018 15:43:49.3377 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 984f1564-e392-4794-1328-08d5c18d251c X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB2471 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Add support for cpuid leaf CPUID_8000_001E. Build the config that closely match the underlying hardware. Please refer to the Processor Programming Reference (PPR) for AMD Family 17h Model for more details. Signed-off-by: Babu Moger --- target/i386/cpu.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 0d423e5..9f8bad9 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -429,6 +429,62 @@ static void encode_cache_cpuid8000001d(CPUCacheInfo *cache, CPUState *cs, (cache->complex_indexing ? CACHE_COMPLEX_IDX : 0); } +/* Data structure to hold the configuration info for a given core index */ +struct core_topology { + /* core complex id of the current core index */ + int ccx_id; + /* Adjusted core id for this core index in the topology */ + int core_id; + /* Node id for this core index */ + int node_id; + /* Number of nodes in this config, 0 based */ + int num_nodes; +}; + +/* + * Build the configuration closely match the EPYC hardware. Using the EPYC + * hardware configuration values (MAX_CCX, MAX_CORES_IN_CCX, MAX_CORES_IN_NODE) + * right now. This could change in future. + * nr_cores : Total number of cores in the config + * core_id : Core index of the current CPU + * topo : Data structure to hold all the config info for this core index + */ +static void build_core_topology(int nr_cores, int core_id, + struct core_topology *topo) +{ + int nodes, cores_in_ccx; + + /* First get the number of nodes required */ + nodes = nodes_in_socket(nr_cores); + + cores_in_ccx = cores_in_core_complex(nr_cores); + + topo->node_id = core_id / (cores_in_ccx * MAX_CCX); + topo->ccx_id = (core_id % (cores_in_ccx * MAX_CCX)) / cores_in_ccx; + topo->core_id = core_id % cores_in_ccx; + /* num_nodes is 0 based, return n - 1 */ + topo->num_nodes = nodes - 1; +} + +/* Encode cache info for CPUID[8000001E] */ +static void encode_topo_cpuid8000001e(CPUState *cs, X86CPU *cpu, + uint32_t *eax, uint32_t *ebx, + uint32_t *ecx, uint32_t *edx) +{ + struct core_topology topo = {0}; + + build_core_topology(cs->nr_cores, cpu->core_id, &topo); + *eax = cpu->apic_id; + if (cs->nr_threads - 1) { + *ebx = ((cs->nr_threads - 1) << 8) | (topo.node_id << 3) | + (topo.ccx_id << 2) | topo.core_id; + } else { + *ebx = (topo.node_id << 4) | (topo.ccx_id << 3) | topo.core_id; + } + *ecx = (topo.num_nodes << 8) | (cpu->socket_id << 2) | topo.node_id; + *edx = 0; +} + /* * Definitions of the hardcoded cache entries we expose: * These are legacy cache values. If there is a need to change any @@ -4122,6 +4178,11 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count, break; } break; + case 0x8000001E: + assert(cpu->core_id <= 255); + encode_topo_cpuid8000001e(cs, cpu, + eax, ebx, ecx, edx); + break; case 0xC0000000: *eax = env->cpuid_xlevel2; *ebx = 0;