From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0054.outbound.protection.outlook.com [104.47.38.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 46F9721BADAD5 for ; Sat, 1 Jul 2017 15:43:44 -0700 (PDT) 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; bh=YGXoDtHQXkN0a1O43Pwr7NUlaRZkpEpnjVGYQ58M4G0=; b=ZwRIC9zhYQuoS51YC4bwC4qv1/kUZamcCHPAAIRrsK1M1TrP6eCqIZpPIy36DkvTTBU5yaZRrKN3WJC9jXmBEwcIj0SapiSl7pKGEYv+1yy3N+15vaERaPyejPA9U0bh66VbcNDNYaeAlwTHJxXoEM9WTmYHJKiDEIa6mMK2heo= Authentication-Results: lists.01.org; dkim=none (message not signed) header.d=none;lists.01.org; dmarc=none action=none header.from=amd.com; Received: from leduran-Precision-WorkStation-T5400.amd.com (165.204.77.1) by MWHPR12MB1247.namprd12.prod.outlook.com (10.169.205.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1220.11; Sat, 1 Jul 2017 22:45:17 +0000 From: Leo Duran To: edk2-devel@lists.01.org Cc: Leo Duran , Jordan Justen , Jeff Fan , Liming Gao , Brijesh Singh Date: Sat, 1 Jul 2017 17:45:04 -0500 Message-Id: <1498949104-11986-2-git-send-email-leo.duran@amd.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1498949104-11986-1-git-send-email-leo.duran@amd.com> References: <1498949104-11986-1-git-send-email-leo.duran@amd.com> MIME-Version: 1.0 X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: BN6PR11CA0005.namprd11.prod.outlook.com (10.172.17.15) To MWHPR12MB1247.namprd12.prod.outlook.com (10.169.205.7) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 736d79d1-d8ae-41cf-b039-08d4c0d2d941 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(48565401081)(300000503095)(300135400095)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:MWHPR12MB1247; X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1247; 3:CkRrPIwoKf9bH+0f92EqMENYPH0UFg71OGYFsFyT+zMu/lAUcM7vPsLEDnxJFPX8cuXbsFMhJvxZ90m48LuQBUXaS8MMjRHyTIIWaWwCbG6AAfZdTybt1Ko7KN9+AzqN32E/EjAvT9bWGgGwcRRjVG9chPqUYE5mMO5UED7vf9t8j1wBrLTHl0TDoY1c4ixkPCzdEs6LA2WgdptKmue3EvC9A7G8f5a3cby3Z8wQ9nzpKg7+LDHZmppXaMvV+kw2UUkYe13bXcMcI8xDlJgnYimStPcSc8ZcEH7jweym9FNWcPAAOgzdD4tJBHYovCAYuz+bXBKwi0MlmXzlYeT7dBHwhGKmsjpfCtiGikBu3xzuqJF3sV+q3mcvxnF/wIS0GC3/xpdXtcT+tQlHMlU/psvNEfoRh+hC4VxSDuv+P+nTKKJ0wQm8Tft30qHVLHpfE4uDGnL5QcYvFm/JvNSK7OyspB6MJNzc7C+PBdCAHYrlLHtt5yknXDbofeToyenn3rZbFVmTYCWP208UBD4eHd8jS4wjiokyt6C2Fv+xKdcuBScMoeqxhHBnYfurw1NfB4s6O81enj3MsqpyFNJr5Sxv5XsJ/IsVKLxwftyJT7HjxzXB0vBCFGIfXkwtZXVaaBgfYGSN0mIErUrx/xIH/Y/MIr4skgR4dEZjoUf3wBUIi6Ah/leW2OZd8DbT6y0c65yutYKAKkI3CjgJLuDgNQBBIdeO+l21lXX0iExmtvEst8xk+T7SgqqVLQXHG2eJA75AkGfxV3AuEyGJ6Lm2NA== X-MS-TrafficTypeDiagnostic: MWHPR12MB1247: X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1247; 25:6wBot7AMOCyn3Ol8qoh0QWsbXZhqc0w0+UkGdHIH3ertRJNDx1g/765Hi4y53kOLAXV2NnB7PD+NJNKApsv/h3S2sKd/KQLn92bYzC9qHzywLTfIbL4wd4gzP5IKudJ9zqaa2qYk/swQeYmIFCl2Q7edNuGCWvs+A0j44NTVPqWnpRbmW0QqJkvc78dH13j3eR6eW/PSwLJHnqv0CGrzuOq5R10uS+ZnuJqix/1hVBYocwtvhgmmgMkpSSAaYsf6StA3Bp3eWMa7+Ozy9NVWFLRXyIQg0+LQgeiBr3yyaMezE9ZcaFAX2/HJBWRaTSx/ops8kB32gn+abm9fqCS8tbvcCFhEwuWsRQJvTXuXjPvs55ssdFq5M7IUcyk4LblClCJJzLMvNYAQT1R0co/yuiQwSQumiW0yB0OBS6/n4abyz1nV8XvNRRXBASznClChDP2gK7hefRMaZNvYVmhRPubQVXp1Bjxw7+fgDMNGlxVIXr+tUzKvc3oiPN0Lkz/oErVXyuNmcuVWAcxN5rqe1btd22QUqxT3BoePxzOL8CrHMws2mXiCe6ls/bz+RbsR9Tkh5bjzPswcdS9arWeE4jya48X5HqBTY/715nio6BdBDzWLPBc9ligONNDFoHHMLkwBFU5GFuu7fdb7SSuxRWAy0SXhJeMlYPPmkh8FLa+e+TVmnKzjMU88TlF2Ox8sOBw0HzJFd1QyEJoLqk2nDTuw7OcwJd1hMWtKNZzfDRPZ6DQ7NP1MbRHEOqyVepdhEVN4gXCkes8USQK/JHHm++I90x7Mm23rVDoE3Y1/F3pn+A/bmcpy55MBXtsrZl2f+hWyms55TVRjYeBWO6IIQjFtQyeyQaFmSe9SJDObXI09od8GuKRcKyhtEigqJbkjNGPNnIidxIiecU+ALKXZh7y2dc+VVb63dQnHnJCc4jo= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1247; 31:fwc+vx4733fhw8Q944TxWERINmqiNXEF6ZP55sXkk3xrPOMaKLou1MMT/k6ZV6VOdRf41xy2w6IMXFVdtqMGr4XhbgNKAVtL00s5tO/c/iidGcxRpJdxsUknofnM+nONmdzEwaC54E9eFtTEIsNHHQjPJP6U1Aeq3y7aiwxEJ70cgOarU8w/vleYP1X0F6EyO89cUR1g4Ez0IMA+QehXGFR51oRaVLqUh2AkzVHlEe+I3JIcz0jkRFGNC1oWjZa5/sLm5h4aGwBnCzr+ifGCjdEjlT1VxfqiTNz2Xmp1182eH2vFTWqy7Ji9Sj/IC8TRwUkSRTu07zKg7dfU1bRZBfwa3xCQofwWeXAVRYkMhonezAw4c/vHRPTZZwY+K96WaFVXE6w34+7mv7VkzWi7ii7kyJHxUED6H4Gom5TC/HruWhU9RC9XMjf5WUiEQA0WO3weP99wUcKnb4MGgKoCn/sqA+TjT+9tXLqnAqZMfScogLXKGxAFHMJe+0getey48kpOguwzrD0RYv7KhHo7Dtx94Z6/SRohRYGZs6lSZQLC/01HnqCFs12GU3hndmmprcbVqKS7h3B85tDqDFEh/FJWNwYE5SuyhkLhtdj4PbTHTMYW8OZiwikavrLAYCjM6iMU0hhWgp1SiL0updhoIpZWpP1MuqkY0p7AndUBvMU= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1247; 20:iLjiubST2tzPvTwjazbKmtZts5TGKcIok1k9FME3NWNNlQBs19MiY+LkxN9cRBRGmFSF62bqyfT6qq0CXd5mScsw5/qcLazxti0VzwdYXSCLtmjLuSKToCvRwS1/HhvBKuaaxH4yskjKAgAwdfu3zqRYioBskWG3kvWbHdzw8xBE0MBKqcQRo8NrESw38DXDyyuE6pUbkz7IR+BgWih4aqD57goCGFffVD7eXv+sjO6YZBgt9f0FwWXDs/aVmQAUTvy0qYvEz4GgG6HJTLyd2jj/BD8oywTVR43hwfahFna/HRzvdYexleODif+I6dx4MsZdtco8nJmtubGC4PKb9HALpKceT+kEGLhOmpcksg2PQGaNHK/i/ao6d6m3xqnORQMS9Tu+fKObtsjMH3IS1eUEcazzMC26l20C38lBBId1nDraPqchmzcWG3OaSBUqB2tQ42hZlOKMYtqbHDvTaBya4kQYFMq9UDbpnSX+RJBS71+JU7ySyzp9XOuYioNp X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(20558992708506)(236129657087228)(767451399110)(228905959029699)(247924648384137); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(100000703101)(100105400095)(10201501046)(93006095)(93001095)(3002001)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123562025)(20161123560025)(20161123558100)(20161123555025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:MWHPR12MB1247; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:MWHPR12MB1247; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR12MB1247; 4:emGjABDRKptNU8SDFdH90L8tPpZpt3fGE6ebp5LG5d?= =?us-ascii?Q?7M2GAuXng4xbCbcZszKkBF4re/Dc3OwRhFO96X35apJvKauPuaOVnK3G6DN8?= =?us-ascii?Q?fdfM0+CYvqjjDZ3OP55HZ/uKMn1H9+yveXccGhiWyvVACL2DK8DJx25fkrSW?= =?us-ascii?Q?k6WEfBNAk1d/7U/lA51vYmkaAGBJvD2R4vgdHGUPFbe9xfWlFQidH3RWlDaQ?= =?us-ascii?Q?q9UHR9y0py4qLZAk9qDMU+UzPnJOJdOrK7ZT+gfjbe30KdEbUBdYL49iTVKu?= =?us-ascii?Q?neoUUlYjlSAIoidBe5yP4PABwYCXvDzyBSGEBVXm8cbBAWMJTAubrcZVEYTn?= =?us-ascii?Q?pv6JcHt1caSBJAIhWpWWH3/3ZtvsLToPFoyIPdOKalU5DSkloskulz2SCtCU?= =?us-ascii?Q?zMC0S9h8SFfN7qWaSz0pa2qzSTN00cTwebPfEMax64A9mpHpno6cnTgOYaPh?= =?us-ascii?Q?rRRNd3yiFM2LuEZmyXZFNSt605dkFKHBzTujvwZN97VQ5JsQjlAwT9df2YzG?= =?us-ascii?Q?vyuPpYihahTGqgTo4hblmcMeXtOr04mFGj2XaLeKEboY/tg059eU3yN5tIPP?= =?us-ascii?Q?+igIYH+M8gfHYB26lljGkGsOvwJOfcyUakQTTa/LD8AVbTN9CDwhpMREIqBz?= =?us-ascii?Q?HD8P+tEWJU3XhRerK163LdpsPI2pbUOZpKL+51FGeO3n5y8WYqEjUY8xQVZh?= =?us-ascii?Q?OqOa64aUtf4mKXjtnWmFpCGMo6mDUE5Za0tQwXyHclxx9HoDN31Me4No7u4g?= =?us-ascii?Q?iX/D1qmHtZqnZe3sP8nqCPVcBntvwvDzeyx98yaXNZYNqVwATUhpn2qq1kiw?= =?us-ascii?Q?ONKz8/ZwRC6It+q+/qGJvzGfhsYfwj5n4J8ckgFiSrULmYQkWxjoyXIEzplf?= =?us-ascii?Q?clWFfFaX27T2aSblIiiTEaLuNhW/ypJ+mi98x7H44KYL5km7Rqg/6Z1XdVaW?= =?us-ascii?Q?NtumHs7kQ9mdDxyxlXMnBzbTYWGfj8VK5UgO568oeHA3fYT+H5BRcC1DnuxG?= =?us-ascii?Q?dHx6PY1GYDeli2HxDlpixlT3Yuy5kGX2pZ3V60/q1/nVrx7a5nF67Pr8rFYR?= =?us-ascii?Q?bj7fmKgkk5nFUnpYHyzpZ7pi8LHOyVLul6wwzQ4FfxtzOK5bFGUNDOZk0xJN?= =?us-ascii?Q?E8o5+0eYUSjj7kiYn8/ItbytTTSRw+WGAYoUQ7zcfRCKJ6CUeKYs4zN7F60g?= =?us-ascii?Q?tcPa/k7b0FIq/a5as+UJNI6BkFLSS5GvhlnO5E+zoigjW227l9+KIGiZuop7?= =?us-ascii?Q?SgcMhZ93thPdp2FOfg5LTUFolTnLbC6L4UtZxUS57Xs6IfEtl/mVL2fa79f9?= =?us-ascii?Q?mSIYVBig3Q2O+06Tir/ATDgEY3EZI5eM1gPxsVmasG?= X-Forefront-PRVS: 0355F3A3AE X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6009001)(39850400002)(39860400002)(39400400002)(39840400002)(39410400002)(39450400003)(53936002)(305945005)(66066001)(5003940100001)(48376002)(4326008)(478600001)(25786009)(7736002)(2361001)(2351001)(6486002)(6116002)(8676002)(3846002)(81166006)(50226002)(33646002)(50466002)(5660300001)(53416004)(2906002)(42186005)(189998001)(76176999)(50986999)(38730400002)(36756003)(110136004)(54906002)(86362001)(47776003)(6666003)(6916009)(2950100002)(19627235001); DIR:OUT; SFP:1101; SCL:1; SRVR:MWHPR12MB1247; H:leduran-Precision-WorkStation-T5400.amd.com; FPR:; SPF:None; MLV:sfv; LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR12MB1247; 23:A1OeEiqjzDVB3uVuwCRO/i9DTapRWN9GN+Xfo5VHu?= =?us-ascii?Q?HCW+7g5hkZPjHgLmcyTGfu5xkt3xZIxdQ3J2MA2c456cizfP5YK1SROk+vuO?= =?us-ascii?Q?mVynmIRipbF6AEb9idPuha8rczkrjsID/B2yXiqNCpMlbukT4VGMzwdOeD1H?= =?us-ascii?Q?86wbT8VnfbNIOzt/5WjUlDNAWCphBTLIbmqy/qkjcnQbRNW/RTirC5FytPSR?= =?us-ascii?Q?GPfPovP7gpldgjmMP9YNSL2BikUvf0cCiYlSMBFGDkfeaSLN3px4D8xhCSDH?= =?us-ascii?Q?hiX5Ylntf9CU90TGfyqo+U4EtKyZLhYfWQC06VGF+5j6ZNFQToba+H4AG5db?= =?us-ascii?Q?l3RiTYx8mrcLiAQ6D5N6DJR1YKkKWmQvVbwX381JSouOZB+mZVhmra6I18WO?= =?us-ascii?Q?4teAv0vfmlRt+H8CySX2JDHpigPNL8zloltCoCGX2cFuButtbbQ+oLBzr5lF?= =?us-ascii?Q?HW9vVUuPdaAFBBGkoz3blRafGhk/Tt7MqdXLpl/tOCX+7ItpFBE0ZKVIZSdP?= =?us-ascii?Q?3lt0gWqjgm5n4WhXr11xaZ2ipUo5yuzhcx7ifPpAbOyM9oRFuTR1k9JlEvD3?= =?us-ascii?Q?4ZUMV5OIKSW0ri0hImTQBSYd+KGmPZUJVO/+w/TAxFKiDd/42e6njEj4BbWS?= =?us-ascii?Q?fEpYuFMPq3ZFEy768T1Nq7Wsnbi9pO3Qhvb1wpnC/745hqkJknChqcyfj9wg?= =?us-ascii?Q?C9VkC1Kids9exEpUy5ylpXZYBTQhhDj2sz0aS2JG9EEzqdN+1afLpLPDCXgA?= =?us-ascii?Q?ESB0bvLgt1YeecvUcVWx7PYV9Tb1ZC65hC2C3+42FEAz9nakCarWDy39xC/G?= =?us-ascii?Q?TisbkTtu2QkIbFAq8ze38nTeD2gxCVbcb8RypinKiBwo6zWCVApg6jX38kRa?= =?us-ascii?Q?7uCHfU5g+LOEQPUu8vTqunW+nM1e3AP+CFdaDkQ68oqE0Pv9/wYApYC1lOxI?= =?us-ascii?Q?aXbROvxj4vdIDrplNm9LsN2b6mYTVyMCOGErO07kA0f1fh4sGZhzWRK9eHyR?= =?us-ascii?Q?xDhYLQE/8LVPDJUut7tnoF+4SCfWtjww1Gl32uBHZ/svUfOCBL7+3OsTeAe5?= =?us-ascii?Q?XL95d6DsvJb4Ib4B3o8/JeUST9MsG/U9x/6hMU/0AxLobpqabyRBxZO85dSC?= =?us-ascii?Q?DPrThum+eI=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; MWHPR12MB1247; 6:n7DLWAwLDm8lNHta5NxCSHcFsSiKVfB+27usNohFR6?= =?us-ascii?Q?FGTlNVBYS/iVzI7GzkfRNAua3lYUABiUAFLWVfKMvJfQ+zB+OOuA7jYwfpAk?= =?us-ascii?Q?ry8dWVPjWKA4Z7D6cryRiJpcLa2SaBfxGbK//tiaDUapJMb0G2+gWCr2DtrH?= =?us-ascii?Q?WTICMYP1MQLRTPxrhxC0guw2RTudG4VIPLxCLIVN25iuQOLa/TH2FCbmfhte?= =?us-ascii?Q?t6n+rDSvXJpBNSd0L+qlhJJlU9ppzjdz64g0rXI5GqMxqyC4H1Tyn367pR5/?= =?us-ascii?Q?sYoQQOI+CR2G0cJDwoH3yJ971btMsQYWIaa4REvxc5ay8Br4v93YfF5wmQio?= =?us-ascii?Q?Esy1qGo5Q57B6TxE5+Ua0W+JjgjrBnJUvMsxLnChmZsQuXW8uueXUgkuaB3w?= =?us-ascii?Q?E2fBp+bbd8kMYgo1zJakqFeBTcELkmQJNu/hpGNybKUmddPvKx34lfLwtYwf?= =?us-ascii?Q?fHZsDaiOGCOS211kJ16gZ0dfR7XVXVaDJLzvQ8KlZs2QuOZ8hJGBD61eC10J?= =?us-ascii?Q?2kcGeCgyWNLKZ/i5i9uhN+Nb61HZDky2ALpXJA2yoKOZjVvk/M0uL6+Umlij?= =?us-ascii?Q?M4FUyND22iFt/G1yRIrdRpVC9cVSeXYkhEB5wq4axqlcuhVRRrl02uYZp4tJ?= =?us-ascii?Q?C6EXOcqEmFPkY2fLGHNW82Yr+LamvLpYUp6Jmd+vWtrvdJDlLiVkOYa4uonn?= =?us-ascii?Q?9FO5SQnb+wD+n641Vexm6p6a97fno/zRaJuBPvonJLVwVPXkI4Y0T92wwpQO?= =?us-ascii?Q?XGRb7j7tJqwMMBJzRhWRoFqeJd1h2Bkc9VCCIimcKOmGuqM2OipTPl6JmTol?= =?us-ascii?Q?tzw7Dn1/KjWeiDVjP0g0DjvFxC3HlwoykmrwSPV0ZYhmARaHKayqfUeKwxPr?= =?us-ascii?Q?8fNzRdI6HFxGJt1YNoZQEIEP9ds/nEeJJK0kt4zGs0FLOclRLuQF7iZaKPNA?= =?us-ascii?Q?dQKw9bAuPNQ15jscUz7KY5tBcA4ZBcZPCB8S8y+LS9XaqBsHNF23klKtdbCf?= =?us-ascii?Q?Tim8ScpwRcyEDK40O7mEJZ?= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1247; 5:8gLq+KMPuP7ucPFcyms4LJ64nr/vINS+CX9mn8xQqKLTPNHaUT66yMH0689ADDNttcJP1PHpukBL/n9Gx9TK0ASAv7qKElsZZQQpiWCDzIB3mEdX333iqTCb93JljaOI1SOw6BxytH03CpykVwyIy3L2m8faga4Z+VGwRgvF+WK+XDWDcysrPMIioRAe6qecxqYpKbS+6WBA/i7yx76+VQDI6iKYqI7pLUtzIOXrzLKyLtQpOnfGBST540zcZZBKkrd8/bNB+FmHGjJaMN7kp7tNlPrrifeFWo9EN1GbG6GZqnKfej4XPMNXWdY/+oYjXNc10Zmem6rB68PgyDw1z7KCXfnI4mkCVVUhUO6P/g182ZorDpIaxEE9HciRXMVySOFbAbyd/x6hN4OiHmO1mxqJSSQRTBi4rw1+WbSr872v7tVgwhKPD3aXMrFUk3HI+S1b7TAe3Y57tEcRZqmdA3YHVxhOEFiLEIe6xP/Uf+/2RqJKbUWPjAND/LGYkW/W; 24:YzgXvH3UZG9q+Bsoki/d+CUdA58yPNMoQdaLYBZZF7HkkU1xub4bzcGC+5c2qLdV0XzeqTQrtpMPBEZ8aNIeXqb22uVU3hkvfAn9xZaDTEg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1247; 7:2wcq2EbQMtsR956mxkP+OlyFIAYrtS6L0yKPHwiWK6wnqj33k9Wuy0VTMwktC5tCdYOYMPK9vUdvWdFUCWMIPyqdxcvZfVVrc3Dx3/r7XWNaxbC80K9SpG7sjfvOrCW5w2RqAZT4OpqBS7BC9sL4d91T8UrrRnVbOUGNmY1G22uymgXQ5DnFFbpZC2Ti1+S5jmIENnUtrxoQuRHi+Ek/YoLg1xVEz+IMGWm0i8h3V/QIS2jt1dHVJOP9EEJT6Udt5AATqrTA4cVmkmhSAvgKvAC4XnKI9S0PNBSzclCx+UUpRX3M/2bbW7viL6UUxVC4hkp17t1+JHMwfcIdmz0bCtotY5n+SZhHqDwi6GGGdBVTcJFZ7Ji7uCZ7t0dR+1wjxGKV4QHsKQ/lccb6Mm1ryQN09JG79YZpTDdsl8jqB+zOKEZYUoi04UDEjG5ErMpK0kaqkZJir7v44xq/DlCYbD6nZWNKBY12pyAji1xHKVO3uk8ig0Fa5CT9/aR+/GdwwgUAc2LXyn5rjIn7lKrGJYvFsEVi29tsNp6Ub2xVF3pkdwVC5GiMEYRRRgXouDboxJL2cry7tpygVhEUEn89qbLyJLkiWKEkt17kctTt3SQ0HD7pHtKG4M3ZgnibmlC9evzqRdW0Z3j2vkVzp76hE1k7ukiCkAPoo0ZaiLeedmY4qQYGb/DHmccwJs6mpB4bpE1Iyj/V7Oy5Z1M2RHCRirSLjzAEeqgDRAJlF+UvW6YwKefQ8dJGG3C3YGdiPAQ9OB/q3g1atTomHZn0pd30xt5P7l+tRIrP5ZVEDcu7RuY= X-Microsoft-Exchange-Diagnostics: 1; MWHPR12MB1247; 20:bKZGMncCbM0uv6VEvtpKWDhakyCn2foZ5YG6+XOUA6VSk8zCoudH7JpPqpjjN+yADun+57CoxNi1vDV8fMhGM0n/Y+Xq1qyMKxvvqBbHz+aB9IibkKSav2J/cNp/gqswN9DPJyXtiZsd6I0oUB5uu1NWeSR1cU85TCUTi3tQAaDRrYxQ2OtMLlp1o72gGUaqymII+ZRRFYlhvsM8dLuDgs/+iuedNf6hDlMSTcz3fdPtryf55jGE2g/hQof+qCwE X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jul 2017 22:45:17.7183 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1247 Subject: [PATCH v2] UefiCpuPkg: ApicLib X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 01 Jul 2017 22:43:44 -0000 Content-Type: text/plain 1) SendInitSipiSipi () Skip repeating SendIpi () on AMD processor. 2) SendInitSipiSipiAllExcludingSelf () Skip repeating SendIpi () on AMD processor. 3) GetProcessorLocationByApicId () Adjust InitialApicId to properly concatenate Package on AMD processor. Clean-ups on C Coding standards. Cc: Jordan Justen Cc: Jeff Fan Cc: Liming Gao Cc: Brijesh Singh Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Leo Duran --- UefiCpuPkg/Library/BaseXApicLib/BaseXApicLib.c | 52 +++++++++++++--------- .../BaseXApicX2ApicLib/BaseXApicX2ApicLib.c | 50 +++++++++++++-------- 2 files changed, 63 insertions(+), 39 deletions(-) diff --git a/UefiCpuPkg/Library/BaseXApicLib/BaseXApicLib.c b/UefiCpuPkg/Library/BaseXApicLib/BaseXApicLib.c index 2091e5e..a6e4e2e 100644 --- a/UefiCpuPkg/Library/BaseXApicLib/BaseXApicLib.c +++ b/UefiCpuPkg/Library/BaseXApicLib/BaseXApicLib.c @@ -338,7 +338,7 @@ GetInitialApicId ( AsmCpuid (CPUID_SIGNATURE, &MaxCpuIdIndex, NULL, NULL, NULL); // - // If CPUID Leaf B is supported, + // If CPUID Leaf B is supported, // And CPUID.0BH:EBX[15:0] reports a non-zero value, // Then the initial 32-bit APIC ID = CPUID.0BH:EDX // Else the initial 8-bit APIC ID = CPUID.1:EBX[31:24] @@ -554,8 +554,10 @@ SendInitSipiSipi ( IcrLow.Bits.DeliveryMode = LOCAL_APIC_DELIVERY_MODE_STARTUP; IcrLow.Bits.Level = 1; SendIpi (IcrLow.Uint32, ApicId); - MicroSecondDelay (200); - SendIpi (IcrLow.Uint32, ApicId); + if (!StandardSignatureIsAuthenticAMD ()) { + MicroSecondDelay (200); + SendIpi (IcrLow.Uint32, ApicId); + } } /** @@ -588,8 +590,10 @@ SendInitSipiSipiAllExcludingSelf ( IcrLow.Bits.Level = 1; IcrLow.Bits.DestinationShorthand = LOCAL_APIC_DESTINATION_SHORTHAND_ALL_EXCLUDING_SELF; SendIpi (IcrLow.Uint32, 0); - MicroSecondDelay (200); - SendIpi (IcrLow.Uint32, 0); + if (!StandardSignatureIsAuthenticAMD ()) { + MicroSecondDelay (200); + SendIpi (IcrLow.Uint32, 0); + } } /** @@ -1013,13 +1017,14 @@ GetProcessorLocationByApicId ( UINT32 MaxCoresPerNode; UINT32 CorePerNodeMask; UINT32 ApicIdShift; + UINT32 ApicIdMask; UINTN ThreadBits; UINTN CoreBits; // // Check if the processor is capable of supporting more than one logical processor. // - AsmCpuid(CPUID_VERSION_INFO, NULL, NULL, NULL, &VersionInfoEdx.Uint32); + AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &VersionInfoEdx.Uint32); if (VersionInfoEdx.Bits.HTT == 0) { if (Thread != NULL) { *Thread = 0; @@ -1042,8 +1047,8 @@ GetProcessorLocationByApicId ( // // Get max index of CPUID // - AsmCpuid(CPUID_SIGNATURE, &MaxStandardCpuIdIndex, NULL, NULL, NULL); - AsmCpuid(CPUID_EXTENDED_FUNCTION, &MaxExtendedCpuIdIndex, NULL, NULL, NULL); + AsmCpuid (CPUID_SIGNATURE, &MaxStandardCpuIdIndex, NULL, NULL, NULL); + AsmCpuid (CPUID_EXTENDED_FUNCTION, &MaxExtendedCpuIdIndex, NULL, NULL, NULL); // // If the extended topology enumeration leaf is available, it @@ -1051,7 +1056,7 @@ GetProcessorLocationByApicId ( // TopologyLeafSupported = FALSE; if (MaxStandardCpuIdIndex >= CPUID_EXTENDED_TOPOLOGY) { - AsmCpuidEx( + AsmCpuidEx ( CPUID_EXTENDED_TOPOLOGY, 0, &ExtendedTopologyEax.Uint32, @@ -1072,7 +1077,7 @@ GetProcessorLocationByApicId ( // the SMT sub-field of x2APIC ID. // LevelType = ExtendedTopologyEcx.Bits.LevelType; - ASSERT(LevelType == CPUID_EXTENDED_TOPOLOGY_LEVEL_TYPE_SMT); + ASSERT (LevelType == CPUID_EXTENDED_TOPOLOGY_LEVEL_TYPE_SMT); ThreadBits = ExtendedTopologyEax.Bits.ApicIdShift; // @@ -1081,7 +1086,7 @@ GetProcessorLocationByApicId ( // SubIndex = 1; do { - AsmCpuidEx( + AsmCpuidEx ( CPUID_EXTENDED_TOPOLOGY, SubIndex, &ExtendedTopologyEax.Uint32, @@ -1103,7 +1108,7 @@ GetProcessorLocationByApicId ( // // Get logical processor count // - AsmCpuid(CPUID_VERSION_INFO, NULL, &VersionInfoEbx.Uint32, NULL, NULL); + AsmCpuid (CPUID_VERSION_INFO, NULL, &VersionInfoEbx.Uint32, NULL, NULL); MaxLogicProcessorsPerPackage = VersionInfoEbx.Bits.MaximumAddressableIdsForLogicalProcessors; // @@ -1114,11 +1119,11 @@ GetProcessorLocationByApicId ( // // Check for topology extensions on AMD processor // - if (StandardSignatureIsAuthenticAMD()) { + if (StandardSignatureIsAuthenticAMD ()) { if (MaxExtendedCpuIdIndex >= CPUID_AMD_PROCESSOR_TOPOLOGY) { - AsmCpuid(CPUID_EXTENDED_CPU_SIG, NULL, NULL, &AmdExtendedCpuSigEcx.Uint32, NULL); + AsmCpuid (CPUID_EXTENDED_CPU_SIG, NULL, NULL, &AmdExtendedCpuSigEcx.Uint32, NULL); if (AmdExtendedCpuSigEcx.Bits.TopologyExtensions != 0) { - AsmCpuid(CPUID_AMD_PROCESSOR_TOPOLOGY, NULL, &AmdProcessorTopologyEbx.Uint32, + AsmCpuid (CPUID_AMD_PROCESSOR_TOPOLOGY, NULL, &AmdProcessorTopologyEbx.Uint32, &AmdProcessorTopologyEcx.Uint32, NULL); // // Get cores per processor package @@ -1128,7 +1133,7 @@ GetProcessorLocationByApicId ( // // Account for actual thread count (e.g., SMT disabled) // - AsmCpuid(CPUID_VIR_PHY_ADDRESS_SIZE, NULL, NULL, &AmdVirPhyAddressSizeEcx.Uint32, NULL); + AsmCpuid (CPUID_VIR_PHY_ADDRESS_SIZE, NULL, NULL, &AmdVirPhyAddressSizeEcx.Uint32, NULL); MaxThreadPerPackageMask = 1 << AmdVirPhyAddressSizeEcx.Bits.ApicIdCoreIdSize; ActualThreadPerPackageMask = 1; while (ActualThreadPerPackageMask < MaxLogicProcessorsPerPackage) { @@ -1136,7 +1141,7 @@ GetProcessorLocationByApicId ( } // - // Adjust APIC Id to report concatenation of Package|Core|Thread. + // Adjust APIC Id to report concatenation of Core|Thread. // if (ActualThreadPerPackageMask < MaxThreadPerPackageMask) { MaxCoresPerNode = MaxCoresPerPackage / (AmdProcessorTopologyEcx.Bits.NodesPerProcessor + 1); @@ -1148,13 +1153,20 @@ GetProcessorLocationByApicId ( CorePerNodeMask -= 1; ApicIdShift = 0; + ApicIdMask = ActualThreadPerPackageMask; do { ApicIdShift += 1; - ActualThreadPerPackageMask <<= 1; - } while (ActualThreadPerPackageMask < MaxThreadPerPackageMask); + ApicIdMask <<= 1; + } while (ApicIdMask < MaxThreadPerPackageMask); InitialApicId = ((InitialApicId & ~CorePerNodeMask) >> ApicIdShift) | (InitialApicId & CorePerNodeMask); } + // + // Adjust APIC Id to report concatenation of Package|Core|Thread. + // + if ((InitialApicId & ~(MaxThreadPerPackageMask - 1)) != 0) { + InitialApicId = (InitialApicId & (ActualThreadPerPackageMask - 1)) | ActualThreadPerPackageMask; + } } } } @@ -1163,7 +1175,7 @@ GetProcessorLocationByApicId ( // Extract core count based on CACHE information // if (MaxStandardCpuIdIndex >= CPUID_CACHE_PARAMS) { - AsmCpuidEx(CPUID_CACHE_PARAMS, 0, &CacheParamsEax.Uint32, NULL, NULL, NULL); + AsmCpuidEx (CPUID_CACHE_PARAMS, 0, &CacheParamsEax.Uint32, NULL, NULL, NULL); if (CacheParamsEax.Uint32 != 0) { MaxCoresPerPackage = CacheParamsEax.Bits.MaximumAddressableIdsForLogicalProcessors + 1; } diff --git a/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c b/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c index d5d4efa..5945b55 100644 --- a/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c +++ b/UefiCpuPkg/Library/BaseXApicX2ApicLib/BaseXApicX2ApicLib.c @@ -649,8 +649,10 @@ SendInitSipiSipi ( IcrLow.Bits.DeliveryMode = LOCAL_APIC_DELIVERY_MODE_STARTUP; IcrLow.Bits.Level = 1; SendIpi (IcrLow.Uint32, ApicId); - MicroSecondDelay (200); - SendIpi (IcrLow.Uint32, ApicId); + if (!StandardSignatureIsAuthenticAMD ()) { + MicroSecondDelay (200); + SendIpi (IcrLow.Uint32, ApicId); + } } /** @@ -683,8 +685,10 @@ SendInitSipiSipiAllExcludingSelf ( IcrLow.Bits.Level = 1; IcrLow.Bits.DestinationShorthand = LOCAL_APIC_DESTINATION_SHORTHAND_ALL_EXCLUDING_SELF; SendIpi (IcrLow.Uint32, 0); - MicroSecondDelay (200); - SendIpi (IcrLow.Uint32, 0); + if (!StandardSignatureIsAuthenticAMD ()) { + MicroSecondDelay (200); + SendIpi (IcrLow.Uint32, 0); + } } /** @@ -1108,13 +1112,14 @@ GetProcessorLocationByApicId ( UINT32 MaxCoresPerNode; UINT32 CorePerNodeMask; UINT32 ApicIdShift; + UINT32 ApicIdMask; UINTN ThreadBits; UINTN CoreBits; // // Check if the processor is capable of supporting more than one logical processor. // - AsmCpuid(CPUID_VERSION_INFO, NULL, NULL, NULL, &VersionInfoEdx.Uint32); + AsmCpuid (CPUID_VERSION_INFO, NULL, NULL, NULL, &VersionInfoEdx.Uint32); if (VersionInfoEdx.Bits.HTT == 0) { if (Thread != NULL) { *Thread = 0; @@ -1137,8 +1142,8 @@ GetProcessorLocationByApicId ( // // Get max index of CPUID // - AsmCpuid(CPUID_SIGNATURE, &MaxStandardCpuIdIndex, NULL, NULL, NULL); - AsmCpuid(CPUID_EXTENDED_FUNCTION, &MaxExtendedCpuIdIndex, NULL, NULL, NULL); + AsmCpuid (CPUID_SIGNATURE, &MaxStandardCpuIdIndex, NULL, NULL, NULL); + AsmCpuid (CPUID_EXTENDED_FUNCTION, &MaxExtendedCpuIdIndex, NULL, NULL, NULL); // // If the extended topology enumeration leaf is available, it @@ -1146,7 +1151,7 @@ GetProcessorLocationByApicId ( // TopologyLeafSupported = FALSE; if (MaxStandardCpuIdIndex >= CPUID_EXTENDED_TOPOLOGY) { - AsmCpuidEx( + AsmCpuidEx ( CPUID_EXTENDED_TOPOLOGY, 0, &ExtendedTopologyEax.Uint32, @@ -1167,7 +1172,7 @@ GetProcessorLocationByApicId ( // the SMT sub-field of x2APIC ID. // LevelType = ExtendedTopologyEcx.Bits.LevelType; - ASSERT(LevelType == CPUID_EXTENDED_TOPOLOGY_LEVEL_TYPE_SMT); + ASSERT (LevelType == CPUID_EXTENDED_TOPOLOGY_LEVEL_TYPE_SMT); ThreadBits = ExtendedTopologyEax.Bits.ApicIdShift; // @@ -1176,7 +1181,7 @@ GetProcessorLocationByApicId ( // SubIndex = 1; do { - AsmCpuidEx( + AsmCpuidEx ( CPUID_EXTENDED_TOPOLOGY, SubIndex, &ExtendedTopologyEax.Uint32, @@ -1198,7 +1203,7 @@ GetProcessorLocationByApicId ( // // Get logical processor count // - AsmCpuid(CPUID_VERSION_INFO, NULL, &VersionInfoEbx.Uint32, NULL, NULL); + AsmCpuid (CPUID_VERSION_INFO, NULL, &VersionInfoEbx.Uint32, NULL, NULL); MaxLogicProcessorsPerPackage = VersionInfoEbx.Bits.MaximumAddressableIdsForLogicalProcessors; // @@ -1209,11 +1214,11 @@ GetProcessorLocationByApicId ( // // Check for topology extensions on AMD processor // - if (StandardSignatureIsAuthenticAMD()) { + if (StandardSignatureIsAuthenticAMD ()) { if (MaxExtendedCpuIdIndex >= CPUID_AMD_PROCESSOR_TOPOLOGY) { - AsmCpuid(CPUID_EXTENDED_CPU_SIG, NULL, NULL, &AmdExtendedCpuSigEcx.Uint32, NULL); + AsmCpuid (CPUID_EXTENDED_CPU_SIG, NULL, NULL, &AmdExtendedCpuSigEcx.Uint32, NULL); if (AmdExtendedCpuSigEcx.Bits.TopologyExtensions != 0) { - AsmCpuid(CPUID_AMD_PROCESSOR_TOPOLOGY, NULL, &AmdProcessorTopologyEbx.Uint32, + AsmCpuid (CPUID_AMD_PROCESSOR_TOPOLOGY, NULL, &AmdProcessorTopologyEbx.Uint32, &AmdProcessorTopologyEcx.Uint32, NULL); // // Get cores per processor package @@ -1223,7 +1228,7 @@ GetProcessorLocationByApicId ( // // Account for actual thread count (e.g., SMT disabled) // - AsmCpuid(CPUID_VIR_PHY_ADDRESS_SIZE, NULL, NULL, &AmdVirPhyAddressSizeEcx.Uint32, NULL); + AsmCpuid (CPUID_VIR_PHY_ADDRESS_SIZE, NULL, NULL, &AmdVirPhyAddressSizeEcx.Uint32, NULL); MaxThreadPerPackageMask = 1 << AmdVirPhyAddressSizeEcx.Bits.ApicIdCoreIdSize; ActualThreadPerPackageMask = 1; while (ActualThreadPerPackageMask < MaxLogicProcessorsPerPackage) { @@ -1231,7 +1236,7 @@ GetProcessorLocationByApicId ( } // - // Adjust APIC Id to report concatenation of Package|Core|Thread. + // Adjust APIC Id to report concatenation of Core|Thread. // if (ActualThreadPerPackageMask < MaxThreadPerPackageMask) { MaxCoresPerNode = MaxCoresPerPackage / (AmdProcessorTopologyEcx.Bits.NodesPerProcessor + 1); @@ -1243,13 +1248,20 @@ GetProcessorLocationByApicId ( CorePerNodeMask -= 1; ApicIdShift = 0; + ApicIdMask = ActualThreadPerPackageMask; do { ApicIdShift += 1; - ActualThreadPerPackageMask <<= 1; - } while (ActualThreadPerPackageMask < MaxThreadPerPackageMask); + ApicIdMask <<= 1; + } while (ApicIdMask < MaxThreadPerPackageMask); InitialApicId = ((InitialApicId & ~CorePerNodeMask) >> ApicIdShift) | (InitialApicId & CorePerNodeMask); } + // + // Adjust APIC Id to report concatenation of Package|Core|Thread. + // + if ((InitialApicId & ~(MaxThreadPerPackageMask - 1)) != 0) { + InitialApicId = (InitialApicId & (ActualThreadPerPackageMask - 1)) | ActualThreadPerPackageMask; + } } } } @@ -1258,7 +1270,7 @@ GetProcessorLocationByApicId ( // Extract core count based on CACHE information // if (MaxStandardCpuIdIndex >= CPUID_CACHE_PARAMS) { - AsmCpuidEx(CPUID_CACHE_PARAMS, 0, &CacheParamsEax.Uint32, NULL, NULL, NULL); + AsmCpuidEx (CPUID_CACHE_PARAMS, 0, &CacheParamsEax.Uint32, NULL, NULL, NULL); if (CacheParamsEax.Uint32 != 0) { MaxCoresPerPackage = CacheParamsEax.Bits.MaximumAddressableIdsForLogicalProcessors + 1; } -- 2.7.4