Received: by 10.223.164.202 with SMTP id h10csp898225wrb; Tue, 7 Nov 2017 17:08:18 -0800 (PST) X-Google-Smtp-Source: ABhQp+SDaPXv2CnFegT36Exz2/F8343h20wSRqo79vHfDLTH1Kfr+ea+du0mLh4wLxE+f3R3TbvW X-Received: by 10.99.8.5 with SMTP id 5mr582890pgi.28.1510103298868; Tue, 07 Nov 2017 17:08:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510103298; cv=none; d=google.com; s=arc-20160816; b=zFpnGKX91WdBn43IoFU8aMKvzJLp4F6eNrnpRkEd8kMSwfUg/+wL0vKFNHtn3YI0Z4 WkIL1KjLfGeofGG1BD0NJjX156N8khXbBowSyaznwWF6NUB0Cy6N64WbUldbRVgThCrb W4Xu+CD5Da2w2pJMs12JJHn7ZZMxaQlaiGuUrrgdjpWXZfVwdlSpMCPOd1ngsYQ7Ej+Z pgh5TyJLL/poEkEHqEtXAT4aq32+gmS6LqMbS+2DcVGU+IasYqT1TxpLw3HBjkuw1n7B UdhXyGZZCCfwT0jBmbKHgTrX1/qjMOaUVUeu4ATOcmr88IYEEV9uD+9fv+Y2zFcgm8ej zNdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:spamdiagnosticmetadata :spamdiagnosticoutput:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature:arc-authentication-results; bh=lYqNIIDA9erlzmKknHQlwnnQUscTJbj+UfMdYzgaVB8=; b=k0/LEX7mLVqmQBk1bCTgSEF1+ldmKwDCIE+q1SCmznIaREQsAmgiloLZGN2mVFDIb/ pODJc6h2Sx02WOQFfIlfiBYKEFeOoZfKavAoiBDT1BpA7k4UtfXs9sDbNBhG9pmWxYF4 KgWtnT0sdXzkPfqk992Z1/zI0NCVWMDC98yjEVE0RzpLOD0trR6rp0nNlNv3UE1RRy9w tavtIoD1pfjLauytM37zQ0OxfFys+cbBA9IKlZ9oP0cwB/RolqJ/3BmoIJ6IpOFYXPMq 3w8BK+H4QROo2zBGYbqBPq2TP6cTO3lhlR1YshOF1m60FcgP4qA2XCejdpQ+O2XBxHT7 liLg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amd-com header.b=MwA9GpyL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x5si2312129plm.625.2017.11.07.17.08.05; Tue, 07 Nov 2017 17:08:18 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amd-com header.b=MwA9GpyL; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756407AbdKGPl1 (ORCPT + 92 others); Tue, 7 Nov 2017 10:41:27 -0500 Received: from mail-sn1nam01on0073.outbound.protection.outlook.com ([104.47.32.73]:39374 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751599AbdKGPlZ (ORCPT ); Tue, 7 Nov 2017 10:41:25 -0500 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=lYqNIIDA9erlzmKknHQlwnnQUscTJbj+UfMdYzgaVB8=; b=MwA9GpyLZWmkdIISXXdfUfGaP5u3qX4/uSn8M6IwaKvD11+mcGVcy9qF/xcMF+NlrdF2yz0KoJpA2bzvh9/ukca3SSad2fa23m5pHEbkUhPDoHUlfUnXtQn2NzpwGDThYxEN5Z0fp6dfmX3XLhYh5gi0DniuT/9wFJavbk7pEuw= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Gary.Hook@amd.com; Received: from [10.236.19.127] (165.204.77.1) by DM5PR12MB1212.namprd12.prod.outlook.com (10.168.237.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.197.13; Tue, 7 Nov 2017 15:41:22 +0000 Subject: Re: [Part2 PATCH v8 12/38] crypto: ccp: Add Platform Security Processor (PSP) device support To: Brijesh Singh , kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: bp@alien8.de, Paolo Bonzini , =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= , Borislav Petkov , Herbert Xu , Tom Lendacky , linux-crypto@vger.kernel.org References: <20171106181130.68491-1-brijesh.singh@amd.com> <20171106181130.68491-13-brijesh.singh@amd.com> From: Gary R Hook Message-ID: <9fdabc59-8cb9-20ba-ec23-69d00d2268a9@amd.com> Date: Tue, 7 Nov 2017 09:42:24 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.4.0 MIME-Version: 1.0 In-Reply-To: <20171106181130.68491-13-brijesh.singh@amd.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: DM5PR06CA0062.namprd06.prod.outlook.com (10.168.110.152) To DM5PR12MB1212.namprd12.prod.outlook.com (10.168.237.15) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 45b7ed13-af6f-47f0-664e-08d525f5ff88 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603199);SRVR:DM5PR12MB1212; X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1212;3:r4piV0OpaEyjg4hYZJ4hbAFuVam+ubHyQBCPNSlETj8W20Du2KTq6vZB8OeF9R3tqPujMdXs4ezGt0TODROsM0oXZ8Cja6sv+hVOudHfqbc7cq7R+NkLixY9ZrP9eAtQV3b+7SvbcM77CUAxT6y3lA7JvvmJH+lP8SfoOt6ar5YXTrXq1gwHoLjsW6RnkW4HyWWl3/5uMMDAUOs9yd1nWIzGagDWiPHWQQgU5FxBf53SosBZKYR9RdFsygyAo8CP;25:BGycQE31bObfumkn5uGimEWJ0Rp+4U+F7MhKlSUF3VqIa6NkBoyZsSaX5vKXRLYrV2Dxl5EzwaRcRXriV+I0Uo37coQ9JlFOSEMuOtCAE6f8b0UhEDEQPVh7xOIHhrV03aNnyMxDj2zg7bDzVL95+dz3mq8EYzXyX8JptOZgwniiiDVg+JDGbKXzxWb1+7YTeiNj2vaPgpx5BoN8Y/0HQq+xed5ggasfgHlZ0oJr7Ag063jqzMYploCCtoSKzseAR8RQIzpNZPAunhgS9xzkUu1tsfyDkjJybT0F8HvytTZiGa3mmUQGIaOko4UgWkRsadmiXbIxImagR5XqjS6oBQ==;31:jrWdFyjkxUo/kMYx7aAwkvwdVdv81fyHoaOBExJnxxnWFNm/6Y9qM+49QNM2Hkl00XObRFTFTKRzucCvZY+0NE8Fua27XEzT/TnhItXV5FA5DExLqW5mynI5x/J7fmHUEJz3/ubpmk9pDetJhPo/GsSeuc3GjFgwZtizUzvO7qkjjMJT3CGbWkYa3RqGW6uVU06ahWnK8zK3EeEY7N9a2W39EoXwyT0Ur+Tso8siaD0= X-MS-TrafficTypeDiagnostic: DM5PR12MB1212: X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1212;20:X+nriwrRVfQ1Xcz8hvMW78okCpNBGbi+fipl2jeTIsmUf49d6uYWfDNuMP/CcmpGnSQIbgxCW9z6TmaRU+GgTGPN3xDW5Sl2mJtgY/B9/6fzZklufBlIvPyereH6iV3TVNmo6bMqufAL+4WZ+MgqqEu0JoF8EEL1Gixyu56dohoLy8XcCfqH4gSQPhBmrefWx8uuFwUxLvO1S5983LVH3lhG/vbpWpoJCi8KNtqSOknmi8kLxTSiwE0AhpAXv100Sls6PoaNggSRcREN+kZpLJAKiaXNxz9RvX2EP24OqJkJ1qalJComw1sYftAULcciDO1k7oTHxXVhZQDtwL5lJ765+xR8/a1xae1xAGNqOb2as0p8tWF6UiR6zR3g58JoWJaAGRxVY4ImTB50/FP5bYHuar4jYddFW2k/1Tc72yv5iAc1aRM+vbaD0LTzvizTRcRsKI9aUifLlLXiIxrC+3s1VkRSeFSgvrIAB18wdBDZ4xWqc0YTYRQ5m1hgozw0;4:FbAbTGf0mx5gxxp5OgW61qa7YHtxhihi5szLCXI8GtRR2GunZsG11gwuxdoFTZXuwoMiXcGi1ENYJIxpUKa2DxUysxAqiEri6r3bKLXKmIaIAvLXQeM7M3/pFTiweffWpWq5XxCm6vHwM1q24fZjdIvYSzvbKkPJI88Ld34UEwPm7ALgs54EHawmymXi2EGOHru85ZXXgHL2wsV8e6JNsQQToXRqqL8+Wf3ugy8YxOE1uE9ojHh6yKUWvV7QDEFOr0Mk1Xmp1WAXrp6Ab8ZavFjue3wmg0D0+DmfldbvVRsUGceBpYMFawUnvNu644taBsgA1mav6hkD1OGoiYrfWTz9d+ktVvqEGy4xBpHI7pDcJU4KvmVm+JcKcFZKImGo X-Exchange-Antispam-Report-Test: UriScan:(192374486261705)(9452136761055)(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(3002001)(3231021)(6055026)(6041248)(20161123562025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123558100)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:DM5PR12MB1212;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:DM5PR12MB1212; X-Forefront-PRVS: 0484063412 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6049001)(6009001)(376002)(39860400002)(346002)(199003)(24454002)(189002)(58126008)(16576012)(54906003)(2950100002)(189998001)(23676003)(33646002)(316002)(8936002)(81156014)(65956001)(81166006)(67846002)(6116002)(3846002)(66066001)(47776003)(106356001)(65806001)(305945005)(7736002)(5660300001)(64126003)(2870700001)(83506002)(65826007)(16526018)(53546010)(53936002)(90366009)(77096006)(6486002)(101416001)(72206003)(15650500001)(50466002)(2906002)(36756003)(6246003)(31686004)(229853002)(68736007)(97736004)(105586002)(8676002)(478600001)(4326008)(50986999)(31696002)(25786009)(54356999)(76176999)(86362001)(2004002);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR12MB1212;H:[10.236.19.127];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTVQUjEyTUIxMjEyOzIzOlNDSXZaeHcwMExFRzlMak1mVmlINjhsZFVw?= =?utf-8?B?SkJJemtaUUdqOCtvRlorWFdiN2VKbENjT0ZXSUZEcjYzSGROc2Y0UnhFYXpv?= =?utf-8?B?Q2w5R3FHNWlycU8zUDVXYVBJQmdoMDM1NFBXeUw1czJDZmlmMncwaHpFUEUv?= =?utf-8?B?aXJ3a09VcGZpekFrWkhRSHdWTFJOM3RscmJrUGhCcXZtOXA2R2V2OHVvSTlr?= =?utf-8?B?T3RORVpzL0RENStVUGtOaUszK21yb2lvWjNBZ2ptRXFtbnlWRkxSRkxHUk5D?= =?utf-8?B?NWpobjRxSVBSeEFUMjhCb01ROVRlcmdMOUd1c0tkbVNleXhWV0NFM2wyOTJt?= =?utf-8?B?UE9TUmZwSFlzU3o5Rk5sK2cxakFjL3FoWUNCSHQ3YUF6czhXOUYzSkNCSlJi?= =?utf-8?B?Q2YzeWpuMDVDdXNoWTRHRDZ3eUphbXpiM1Bza3haalFCNXBnMWJHcjFmRStS?= =?utf-8?B?REx0ajhoaWtrK3BBSDVWMFdzdWxuSnhDM2psOVI4TEZXUVdnQ1E4dlpBOHI3?= =?utf-8?B?VlJXakU3THRKY0w0L3ZxaFcvSTJWNFcybXRRWWU4Tm5vNEliL3U2a1djZE1L?= =?utf-8?B?aFVUY3lwbHZ1ZFVNM0RkemZORmxMLzhCVUIzQUkvSlN1WFpxK016aDU3bWY4?= =?utf-8?B?bFR0Wk84NWducDNDSDE1bnMydDlWRnhkUWhvRTgyTnlOQVZBYjVVdGZZSWI3?= =?utf-8?B?aTJMeHlFaXJNaW01SUJ5U2pPczJrNUg1emVTc3hUKzdUN1dJRWJ4SHNWZWxL?= =?utf-8?B?djJIb2lPZS8wL2t4M0pBN1dra3hWcThkVGlXZ3dpeHpzc0lpVCtlanR0ZjFa?= =?utf-8?B?VjNsMkYvcy9pU2NyUTVONzRaY0NqNk1NMnFGdjhwYVUxc2MyNjdEd25zTFhp?= =?utf-8?B?K3AxR0JYd3F4Q2U5dnFwYWNuV3pFZ2ZieHl2NzBXci8xalk3amdzcng1WGIv?= =?utf-8?B?cVg0a3dMTm9VQnZxejBiTnlQOUxDRytGZFA1WGFibG1CTzNjaGFadE1FdHJh?= =?utf-8?B?cFJ5UXpKMkpjSDJTbkVYMnJqRzdQZmxnVk1Ca0VOUktQWVBDN1J2Ynh4djYx?= =?utf-8?B?YXc0WkZId2Y2dlgxNlQ3R3BSanFhQkh1U2xMcHMwYVZIcG4vMU9QWUhMdTJU?= =?utf-8?B?bmtFYzhDdzFnNkNjU3Mwa1BZYWdjazVOcDBDbW9PK1VVYzg2SDltcC95WWxC?= =?utf-8?B?YmVKYlA5a1RFWEpDL2IrV2ZPNHZrQ0lWV2xONkloV1dLYnNrWGZiWjlmZzY1?= =?utf-8?B?clR4YVJNTnYzaktWc3lRR3p1NjBaQUpQR2IwTWdHanlRTUx6dDRyK1BmYTRP?= =?utf-8?B?NkJVd2Z4OEFCRzN1NDdBOXA4TEtJRGVtMlEwdVYzM2RKemVRNVZlK2xsWEZq?= =?utf-8?B?K1JYZWtJWTZPdjFDK0ZhUVBjNmxZU2NJVGZRTXZrc1MwQ0tvSjhoUzZtYzZM?= =?utf-8?B?SlljOGpIRHVERndpbjlSQ1JVR0ZhQlRheEFSTXhhNTJ6T2MvV1VUWkg5dFdO?= =?utf-8?B?T1NtbnpiWGUvOWdyb1V5U1QvVW9lRVowaUxZK3BvL2FuN0F4YzB0S1pDN2pm?= =?utf-8?B?OEhkeXJZMCtPWW00TjVPYVdEMS9iOVg4RVlSMWlzbmZuQWhRVy9xa0RRTVUv?= =?utf-8?B?ZGFEOTYrTmt3c0EzUXBnTS81RkpXR2ZMK29LeEtSTi9lTHhvVlEwT0lnRFE4?= =?utf-8?B?RnY3TWdwTnNjdHkwY2FMTXBoOE9iOE9ER2ZNWkhvT1kwaS9wYVJxNjlBUEly?= =?utf-8?B?dnhuWEFFeXYyNml4QWIyUGRua3BrcDdQM2dINGhhaC83TmNZZDl1VmRUS1Bt?= =?utf-8?B?ME5JamQrVzkybmI3WHdCYVplZGZKanZwS2ltdFpDRFF1MTR1ZU0ya29WcTQz?= =?utf-8?B?VnhoYlZOYVlrdC95dDF2eC9DQnNYU1NrUFNGeGVjTGtyZlFQdmhicUVvOEZO?= =?utf-8?Q?ZKdadO4CD4utv81uIjccK+xu2mjnCc=3D?= X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1212;6:KSrlKTDo4VhRr/vPnclKM80zrx2a678V4kwpYZmyPPx+coKvatZ68zggBzwX4iYFxKDz1bfH9CGeveqbwhnE2Qn6rE3VzsAAt/b1dH62L4Jxset83Jsj1qUfVfUeZMgG2DJvDM9l9Q98KHK3PXTG4TFLMPlv5aKDbiH/EUpUVQbV+p6rfn/fqbxEM1jmqNnum0Ul2zoCXtisRAjKw4E486tDw3xmSG+oMARK+X8kEY6nwefHEV+Z5GglnqsOCiVYVDyJXFmcSOX8fCXMbj9LDEmwqqMmOg2cRyAbSipGhUa+6Cf98iQh0bTweN2voPBxX7St/JkMCZ2xyTqVhnYJKQU4UZmNTg4jjap0oB4hj5w=;5:QyVBmbNVS5TwcUehI6qCX4EbW4rhBfoCKnMeqaC0bBePFL/WYvP/cJ+sOHCFaunndQBMlkCfQx3yBRuK94bIPzQB7nXBlGqRpOThp5wxGGhV/GlVjyUwO4NUjifqsjWV2CJDSo79kpztg++77M0RkKw/5gG1ljIMqalUuJxBDjk=;24:WcOlwQ3CSwlFsZk0QiZTZqp+30IjGi+nEHsiErTKOwmi6SyLLNgugqXz5F2Gcp7pX6WGnTF+e048FIPYthAT+Kfs+3MTdHN7RB6oK/2CCdA=;7:f1i2dLrePbZvm5Gs9hpZErxswFmj1eY+UU9yMGC0NQ0UY8TYOlaf9z/KB5rF9mCNxHQbpW29XDrkaUCyRoBUzo2mJ/7+SzbraQkABBj9SvyJuyYF4TDKg2SjF8Snkn3YvjMQlPuQ3Y3SMpN5tSKex1CNKhYehTfXfmIyA/036xx82vsmu8h6L7Z43ilg1QcOrm16S+Cgooyym0h/yA8UlEt58E4rdx6AvFt9i9+tcG5lQsXffOznhYllGVCYd96b SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1212;20:lQjGYjGwcXclwnzdLxJ7sp2x4ipmIgiUFGwuNNC9gHCs+sUGoKOszFB4l5zENkKYyCup/Z+AvSiPIj5mLyXlymecojb2d1qzmla4v/EbgV4UwQp/JsA2+H6T/HGn7K80DkYnWvuYhgYRlIqapp9IaUZAPufvqqHTWt39fEauWT6OcNt+S2ReDmU8IUnYtT9QA/KpKJ7HD/bqQ1aHdduQhq0wyvIJ6xY3EWAGvGZ8OL9D6r3hZrR7XMkU7H+IE9f1 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Nov 2017 15:41:22.0887 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 45b7ed13-af6f-47f0-664e-08d525f5ff88 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1212 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 11/06/2017 12:11 PM, Brijesh Singh wrote: > The Platform Security Processor (PSP) is part of the AMD Secure > Processor (AMD-SP) functionality. The PSP is a dedicated processor > that provides support for key management commands in Secure Encrypted > Virtualization (SEV) mode, along with software-based Trusted Execution > Environment (TEE) to enable third-party trusted applications. > > Note that the key management functionality provided by the SEV firmware > can be used outside of the kvm-amd driver hence it doesn't need to > depend on CONFIG_KVM_AMD. > > Cc: Paolo Bonzini > Cc: "Radim Krčmář" > Cc: Borislav Petkov > Cc: Herbert Xu > Cc: Gary Hook > Cc: Tom Lendacky > Cc: linux-crypto@vger.kernel.org > Cc: kvm@vger.kernel.org > Cc: linux-kernel@vger.kernel.org > Improvements-by: Borislav Petkov > Signed-off-by: Brijesh Singh > Reviewed-by: Borislav Petkov Acked-by: Gary R Hook > --- > drivers/crypto/ccp/Kconfig | 11 +++++ > drivers/crypto/ccp/Makefile | 1 + > drivers/crypto/ccp/psp-dev.c | 105 +++++++++++++++++++++++++++++++++++++++++++ > drivers/crypto/ccp/psp-dev.h | 59 ++++++++++++++++++++++++ > drivers/crypto/ccp/sp-dev.c | 26 +++++++++++ > drivers/crypto/ccp/sp-dev.h | 24 +++++++++- > drivers/crypto/ccp/sp-pci.c | 52 +++++++++++++++++++++ > 7 files changed, 277 insertions(+), 1 deletion(-) > create mode 100644 drivers/crypto/ccp/psp-dev.c > create mode 100644 drivers/crypto/ccp/psp-dev.h > > diff --git a/drivers/crypto/ccp/Kconfig b/drivers/crypto/ccp/Kconfig > index 9c84f9838931..b9dfae47aefd 100644 > --- a/drivers/crypto/ccp/Kconfig > +++ b/drivers/crypto/ccp/Kconfig > @@ -33,3 +33,14 @@ config CRYPTO_DEV_CCP_CRYPTO > Support for using the cryptographic API with the AMD Cryptographic > Coprocessor. This module supports offload of SHA and AES algorithms. > If you choose 'M' here, this module will be called ccp_crypto. > + > +config CRYPTO_DEV_SP_PSP > + bool "Platform Security Processor (PSP) device" > + default y > + depends on CRYPTO_DEV_CCP_DD && X86_64 > + help > + Provide support for the AMD Platform Security Processor (PSP). > + The PSP is a dedicated processor that provides support for key > + management commands in Secure Encrypted Virtualization (SEV) mode, > + along with software-based Trusted Execution Environment (TEE) to > + enable third-party trusted applications. > diff --git a/drivers/crypto/ccp/Makefile b/drivers/crypto/ccp/Makefile > index 57f8debfcfb3..008bae7e26ec 100644 > --- a/drivers/crypto/ccp/Makefile > +++ b/drivers/crypto/ccp/Makefile > @@ -7,6 +7,7 @@ ccp-$(CONFIG_CRYPTO_DEV_SP_CCP) += ccp-dev.o \ > ccp-dmaengine.o \ > ccp-debugfs.o > ccp-$(CONFIG_PCI) += sp-pci.o > +ccp-$(CONFIG_CRYPTO_DEV_SP_PSP) += psp-dev.o > > obj-$(CONFIG_CRYPTO_DEV_CCP_CRYPTO) += ccp-crypto.o > ccp-crypto-objs := ccp-crypto-main.o \ > diff --git a/drivers/crypto/ccp/psp-dev.c b/drivers/crypto/ccp/psp-dev.c > new file mode 100644 > index 000000000000..b5789f878560 > --- /dev/null > +++ b/drivers/crypto/ccp/psp-dev.c > @@ -0,0 +1,105 @@ > +/* > + * AMD Platform Security Processor (PSP) interface > + * > + * Copyright (C) 2016-2017 Advanced Micro Devices, Inc. > + * > + * Author: Brijesh Singh > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include "sp-dev.h" > +#include "psp-dev.h" > + > +static struct psp_device *psp_alloc_struct(struct sp_device *sp) > +{ > + struct device *dev = sp->dev; > + struct psp_device *psp; > + > + psp = devm_kzalloc(dev, sizeof(*psp), GFP_KERNEL); > + if (!psp) > + return NULL; > + > + psp->dev = dev; > + psp->sp = sp; > + > + snprintf(psp->name, sizeof(psp->name), "psp-%u", sp->ord); > + > + return psp; > +} > + > +static irqreturn_t psp_irq_handler(int irq, void *data) > +{ > + return IRQ_HANDLED; > +} > + > +int psp_dev_init(struct sp_device *sp) > +{ > + struct device *dev = sp->dev; > + struct psp_device *psp; > + int ret; > + > + ret = -ENOMEM; > + psp = psp_alloc_struct(sp); > + if (!psp) > + goto e_err; > + > + sp->psp_data = psp; > + > + psp->vdata = (struct psp_vdata *)sp->dev_vdata->psp_vdata; > + if (!psp->vdata) { > + ret = -ENODEV; > + dev_err(dev, "missing driver data\n"); > + goto e_err; > + } > + > + psp->io_regs = sp->io_map + psp->vdata->offset; > + > + /* Disable and clear interrupts until ready */ > + iowrite32(0, psp->io_regs + PSP_P2CMSG_INTEN); > + iowrite32(-1, psp->io_regs + PSP_P2CMSG_INTSTS); > + > + /* Request an irq */ > + ret = sp_request_psp_irq(psp->sp, psp_irq_handler, psp->name, psp); > + if (ret) { > + dev_err(dev, "psp: unable to allocate an IRQ\n"); > + goto e_err; > + } > + > + if (sp->set_psp_master_device) > + sp->set_psp_master_device(sp); > + > + /* Enable interrupt */ > + iowrite32(-1, psp->io_regs + PSP_P2CMSG_INTEN); > + > + return 0; > + > +e_err: > + sp->psp_data = NULL; > + > + dev_notice(dev, "psp initialization failed\n"); > + > + return ret; > +} > + > +void psp_dev_destroy(struct sp_device *sp) > +{ > + struct psp_device *psp = sp->psp_data; > + > + sp_free_psp_irq(sp, psp); > +} > diff --git a/drivers/crypto/ccp/psp-dev.h b/drivers/crypto/ccp/psp-dev.h > new file mode 100644 > index 000000000000..55b7808367c3 > --- /dev/null > +++ b/drivers/crypto/ccp/psp-dev.h > @@ -0,0 +1,59 @@ > +/* > + * AMD Platform Security Processor (PSP) interface driver > + * > + * Copyright (C) 2017 Advanced Micro Devices, Inc. > + * > + * Author: Brijesh Singh > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > + > +#ifndef __PSP_DEV_H__ > +#define __PSP_DEV_H__ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include "sp-dev.h" > + > +#define PSP_P2CMSG_INTEN 0x0110 > +#define PSP_P2CMSG_INTSTS 0x0114 > + > +#define PSP_C2PMSG_ATTR_0 0x0118 > +#define PSP_C2PMSG_ATTR_1 0x011c > +#define PSP_C2PMSG_ATTR_2 0x0120 > +#define PSP_C2PMSG_ATTR_3 0x0124 > +#define PSP_P2CMSG_ATTR_0 0x0128 > + > +#define PSP_CMDRESP_CMD_SHIFT 16 > +#define PSP_CMDRESP_IOC BIT(0) > +#define PSP_CMDRESP_RESP BIT(31) > +#define PSP_CMDRESP_ERR_MASK 0xffff > + > +#define MAX_PSP_NAME_LEN 16 > + > +struct psp_device { > + struct list_head entry; > + > + struct psp_vdata *vdata; > + char name[MAX_PSP_NAME_LEN]; > + > + struct device *dev; > + struct sp_device *sp; > + > + void __iomem *io_regs; > +}; > + > +#endif /* __PSP_DEV_H */ > diff --git a/drivers/crypto/ccp/sp-dev.c b/drivers/crypto/ccp/sp-dev.c > index bef387c8abfd..cf101c039c8f 100644 > --- a/drivers/crypto/ccp/sp-dev.c > +++ b/drivers/crypto/ccp/sp-dev.c > @@ -198,6 +198,8 @@ int sp_init(struct sp_device *sp) > if (sp->dev_vdata->ccp_vdata) > ccp_dev_init(sp); > > + if (sp->dev_vdata->psp_vdata) > + psp_dev_init(sp); > return 0; > } > > @@ -206,6 +208,9 @@ void sp_destroy(struct sp_device *sp) > if (sp->dev_vdata->ccp_vdata) > ccp_dev_destroy(sp); > > + if (sp->dev_vdata->psp_vdata) > + psp_dev_destroy(sp); > + > sp_del_device(sp); > } > > @@ -237,6 +242,27 @@ int sp_resume(struct sp_device *sp) > } > #endif > > +struct sp_device *sp_get_psp_master_device(void) > +{ > + struct sp_device *i, *ret = NULL; > + unsigned long flags; > + > + write_lock_irqsave(&sp_unit_lock, flags); > + if (list_empty(&sp_units)) > + goto unlock; > + > + list_for_each_entry(i, &sp_units, entry) { > + if (i->psp_data) > + break; > + } > + > + if (i->get_psp_master_device) > + ret = i->get_psp_master_device(); > +unlock: > + write_unlock_irqrestore(&sp_unit_lock, flags); > + return ret; > +} > + > static int __init sp_mod_init(void) > { > #ifdef CONFIG_X86 > diff --git a/drivers/crypto/ccp/sp-dev.h b/drivers/crypto/ccp/sp-dev.h > index 5ab486ade1ad..909cf3e436b4 100644 > --- a/drivers/crypto/ccp/sp-dev.h > +++ b/drivers/crypto/ccp/sp-dev.h > @@ -42,12 +42,17 @@ struct ccp_vdata { > const unsigned int offset; > const unsigned int rsamax; > }; > + > +struct psp_vdata { > + const unsigned int offset; > +}; > + > /* Structure to hold SP device data */ > struct sp_dev_vdata { > const unsigned int bar; > > const struct ccp_vdata *ccp_vdata; > - void *psp_vdata; > + const struct psp_vdata *psp_vdata; > }; > > struct sp_device { > @@ -68,6 +73,10 @@ struct sp_device { > /* DMA caching attribute support */ > unsigned int axcache; > > + /* get and set master device */ > + struct sp_device*(*get_psp_master_device)(void); > + void (*set_psp_master_device)(struct sp_device *); > + > bool irq_registered; > bool use_tasklet; > > @@ -103,6 +112,7 @@ void sp_free_ccp_irq(struct sp_device *sp, void *data); > int sp_request_psp_irq(struct sp_device *sp, irq_handler_t handler, > const char *name, void *data); > void sp_free_psp_irq(struct sp_device *sp, void *data); > +struct sp_device *sp_get_psp_master_device(void); > > #ifdef CONFIG_CRYPTO_DEV_SP_CCP > > @@ -130,4 +140,16 @@ static inline int ccp_dev_resume(struct sp_device *sp) > } > #endif /* CONFIG_CRYPTO_DEV_SP_CCP */ > > +#ifdef CONFIG_CRYPTO_DEV_SP_PSP > + > +int psp_dev_init(struct sp_device *sp); > +void psp_dev_destroy(struct sp_device *sp); > + > +#else /* !CONFIG_CRYPTO_DEV_SP_PSP */ > + > +static inline int psp_dev_init(struct sp_device *sp) { return 0; } > +static inline void psp_dev_destroy(struct sp_device *sp) { } > + > +#endif /* CONFIG_CRYPTO_DEV_SP_PSP */ > + > #endif > diff --git a/drivers/crypto/ccp/sp-pci.c b/drivers/crypto/ccp/sp-pci.c > index 9859aa683a28..f5f43c50698a 100644 > --- a/drivers/crypto/ccp/sp-pci.c > +++ b/drivers/crypto/ccp/sp-pci.c > @@ -25,6 +25,7 @@ > #include > > #include "ccp-dev.h" > +#include "psp-dev.h" > > #define MSIX_VECTORS 2 > > @@ -32,6 +33,7 @@ struct sp_pci { > int msix_count; > struct msix_entry msix_entry[MSIX_VECTORS]; > }; > +static struct sp_device *sp_dev_master; > > static int sp_get_msix_irqs(struct sp_device *sp) > { > @@ -108,6 +110,45 @@ static void sp_free_irqs(struct sp_device *sp) > sp->psp_irq = 0; > } > > +static bool sp_pci_is_master(struct sp_device *sp) > +{ > + struct device *dev_cur, *dev_new; > + struct pci_dev *pdev_cur, *pdev_new; > + > + dev_new = sp->dev; > + dev_cur = sp_dev_master->dev; > + > + pdev_new = to_pci_dev(dev_new); > + pdev_cur = to_pci_dev(dev_cur); > + > + if (pdev_new->bus->number < pdev_cur->bus->number) > + return true; > + > + if (PCI_SLOT(pdev_new->devfn) < PCI_SLOT(pdev_cur->devfn)) > + return true; > + > + if (PCI_FUNC(pdev_new->devfn) < PCI_FUNC(pdev_cur->devfn)) > + return true; > + > + return false; > +} > + > +static void psp_set_master(struct sp_device *sp) > +{ > + if (!sp_dev_master) { > + sp_dev_master = sp; > + return; > + } > + > + if (sp_pci_is_master(sp)) > + sp_dev_master = sp; > +} > + > +static struct sp_device *psp_get_master(void) > +{ > + return sp_dev_master; > +} > + > static int sp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > { > struct sp_device *sp; > @@ -166,6 +207,8 @@ static int sp_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) > goto e_err; > > pci_set_master(pdev); > + sp->set_psp_master_device = psp_set_master; > + sp->get_psp_master_device = psp_get_master; > > ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(48)); > if (ret) { > @@ -225,6 +268,12 @@ static int sp_pci_resume(struct pci_dev *pdev) > } > #endif > > +#ifdef CONFIG_CRYPTO_DEV_SP_PSP > +static const struct psp_vdata psp_entry = { > + .offset = 0x10500, > +}; > +#endif > + > static const struct sp_dev_vdata dev_vdata[] = { > { > .bar = 2, > @@ -237,6 +286,9 @@ static const struct sp_dev_vdata dev_vdata[] = { > #ifdef CONFIG_CRYPTO_DEV_SP_CCP > .ccp_vdata = &ccpv5a, > #endif > +#ifdef CONFIG_CRYPTO_DEV_SP_PSP > + .psp_vdata = &psp_entry > +#endif > }, > { > .bar = 2, > From 1583349052683108437@xxx Mon Nov 06 20:15:25 +0000 2017 X-GM-THRID: 1583349052683108437 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread