From patchwork Sat May 13 00:07:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ruchika Gupta X-Patchwork-Id: 761817 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 3wPfWT5r4sz9s3w for ; Sat, 13 May 2017 05:03:16 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 72451C21DF0; Fri, 12 May 2017 19:03:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: ** X-Spam-Status: No, score=2.4 required=5.0 tests=BAD_ENC_HEADER, DATE_IN_FUTURE_03_06, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 21BD0C21D6D; Fri, 12 May 2017 19:03:09 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 1DDCCC21D6D; Fri, 12 May 2017 19:03:08 +0000 (UTC) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0055.outbound.protection.outlook.com [104.47.33.55]) by lists.denx.de (Postfix) with ESMTPS id 4F758C21D0E for ; Fri, 12 May 2017 19:03:07 +0000 (UTC) Received: from DM2PR03CA0037.namprd03.prod.outlook.com (10.141.96.36) by BN1PR03MB172.namprd03.prod.outlook.com (10.255.200.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1075.11; Fri, 12 May 2017 19:03:05 +0000 Received: from BL2FFO11FD023.protection.gbl (2a01:111:f400:7c09::100) by DM2PR03CA0037.outlook.office365.com (2a01:111:e400:2428::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1084.16 via Frontend Transport; Fri, 12 May 2017 19:03:04 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD023.mail.protection.outlook.com (10.173.161.102) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Fri, 12 May 2017 19:03:04 +0000 Received: from perf-idc04.ap.freescale.net (perf-idc04.ap.freescale.net [10.232.14.49]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id v4CJ30R8023873; Fri, 12 May 2017 12:03:02 -0700 From: Ruchika Gupta To: , , Date: Sat, 13 May 2017 05:37:05 +0530 Message-ID: <1494634025-22588-1-git-send-email-ruchika.gupta@nxp.com> X-Mailer: git-send-email 1.8.1.4 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131390893847000827; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39380400002)(39450400003)(39860400002)(39840400002)(39410400002)(39400400002)(39850400002)(2980300002)(1109001)(1110001)(339900001)(189002)(199003)(9170700003)(189998001)(53936002)(106466001)(50226002)(47776003)(105606002)(498600001)(4326008)(77096006)(8656002)(2906002)(50986999)(36756003)(4720700003)(6636002)(2201001)(8936002)(5003940100001)(38730400002)(305945005)(104016004)(50466002)(48376002)(81166006)(356003)(5660300001)(8676002)(85426001)(86362001)(33646002); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR03MB172; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; MX:1; A:1; PTR:InfoDomainNonexistent; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD023; 1:whaYrHGbh4VW7Lf4m/ISOzKSh1kw/Sd7GQJPyf95W/KWBcahidoGAZNh2wHIPbhZk4v0NeWkKFAS3DjwN3X1yBxSpfsS+n9z3inkFPybXtoU4C+LaG6Jk1IWTxrj1c3mXAg2hHFrLgU2Fc1x4ZdXvgeGt26ahx9unhxd2Sd10CS0qAUGC50DEqJ2blU7QfmxjHnygatE1Ke+kxmm4FBHlaT/TgWtboSohkc2GPcaUXIH2ZDyid5X4hdypb5JZEGxHmx+l/KMB9HOI4JayMX59r/eFLFokV6R00r7k+/g0IeFflUSNk+psP5uuy37ZcFrZWdykQEnvMAwNSIhBIaiHpzkgpSDHVV4n2zjS0mYMyurF2CEgVcsY92+bjvPuQFplYm6MDjtpFna+gJwuIc+3nA7I3sgozq122c9EQkybL3JCCyDufhWxN2J8fWhdHmXjWhwSVyRWBXUfINt5vPIs1JejdZIejAui62S4TjUpwxwlwehCGfP3imsvejn1xEHdH/yujblCl29Pbfg89SIfVhcqcK6bTfCqTNDuiGX5PDFm9gzINS29Koq0mn844c33s6jy2njGsMjosiV7f2E70q9I1np6D1CAWrCJYWQZRVw7ydXy/xFnYJZ1HQVU0ZiwWlHQ07yDZucGiSEfWn8yIta1ThJzc/XH8Pqzrci6CMkJxoOrcJzw/UEVivMEqwMMjL5EJQr4NvVYjqlW1EgXIV1MhcA4zCTVJAouDpYnvc= MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 51120625-dcba-4d9c-b6fb-08d4996984ef X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BN1PR03MB172; X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB172; 3:pi31unM2rKo31psCDx2ujGe+bfIPQBabzws6K0t0xjaFuaeUKJo6OxPwet7XIOS1p9Rq1FZvMdoVi8DDhfQ+AXO3Rbb6rSebQVfmsLdF/pjuy8tMyJ2ZWcCQ1fmzVRvc968iWF8GHh/b3tKR3jBfbPvRTy7bz9TbAykeDwssCxV2SirO2q8eejROKoTJ4THNcmTDezXC0DR7pdw+5rnGTdWoFSc4KCm87w5c1ODIULBqks54zgeVZ5GhHqJ30IMcBd/h7GKtabew7+Ub3YpBehI+hMVJDIeKqnI1fm/dLDe/JiyKRAtdvOwf1DIfujvBJqbuu2o6qbES2ZgiIVuaI1jvCkRswbpmWGhmtRflfAxsDKWDVCTNXNORJS1ro/zimAh9YUvrCy/DJ42KtPl2Y8Yb7q+sXoomMefqCQ1U45dHwVzrbO4nOYs6S45aYCuf; 25:7Zecr6O9snUYyDCN/X/KMKxIf9ZMnY9yb6CzF/vUw5wZVgyxUlduBD2W6qvtAWfuNai3XZX8oLlL0Yop7fN4BgQM7aAg3bHZMIdqGNqXrYOY/96schBZqFs9QGNs5hemBAmMhTeGc/lwfLforvbkLRQIsAvJXriEVCJV8x9A6eNVQbYnGAYo2TrbHUD334YMezkez4/N8D5E52cazaJabRHJ/PCLLAyjhqohYTMWZSEJQlLx/p04MYLwe9eus7AyQNtvsN4HkpGyM1bliaTz2smftU8NVtFIjcxpYJJyP+YuzJlBpn9IRq3B6k9V9W3EVFIKu4Zb6CzwZIN0v5BYogp8P0TP/BEbeHIAPUjCJjxNcNdXHePszjIdGoiB8Nnq7F0MwIVYvOzIEpZE8N+ZDxrmsbxHgKgJluEGg2gOnP8HOxE4/hzILXs0XssFeuvoFmw+/qjsPxMhtIk2t5CAmw== X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB172; 31:L4KL7/2wDURq9Tf/8HJfOecDH1lchk0XUHMzK7DQi7Xlq6INIPieWEMUt832T+otev0Ou/9QamKE3itX0ruUgv/rQjRVEfni9c6o+FThSXocihLu6pQYA4ZlL9mFOg5RpG3zWUa47qV0ZYCSa7aYp+q3yaTE53cl1KkGcA+KpRW5+mMOsqBSL5l6+67KyHIoK9UkCr7sQTo2VlGGs7K0r4Am23r+6M1glebZLQV2JIKGh+X3PtSO3fkNcwpZOdYCV5Awsr5C2nRgC3Dx91/o+g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13024025)(13015025)(13017025)(5005006)(13018025)(13023025)(8121501046)(3002001)(93006095)(93001095)(10201501046)(6055026)(6096035)(20161123559100)(20161123561025)(20161123563025)(20161123565025)(20161123556025)(201703131430075)(201703131448075)(201703131433075)(201703161259150)(201703151042153); SRVR:BN1PR03MB172; BCL:0; PCL:0; RULEID:(400006); SRVR:BN1PR03MB172; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR03MB172; 4:ehSz7+4o0B48JuWHeJhiyQ5dLaZhC33mhd7RLho3Pwj?= =?us-ascii?Q?zQgsS60/W4PxHBet8NBM8Y47ma3CelDB/7/GduVHB11a1LyYXJkPhYzcpHA+?= =?us-ascii?Q?rIpdLEsfYWzjmpGBY3HAjyxqbbPOm0r1FeVftONMk+5Xc5KV1F1oLVSQ2iuZ?= =?us-ascii?Q?fLYuziihIzc4moxH/g/fATi+NxGed69zk2uX1LLVK7eV8EJ+1DVaJMWjt9XE?= =?us-ascii?Q?koa3Uq9OfmXtOEDwaaV4BGVdSvfoXkZhS3j1+NVyseN4e2kuNYYi3uDzlkmw?= =?us-ascii?Q?sVStWvwMYRFGfXW/WifN0OaEENxR8lnPa2V3u2B4oG+8HQgbJD0wS9ZCrU0e?= =?us-ascii?Q?kUC7kWU3tl3PqI1qYTC9is70qxh8vQel/kudaHY1YUxxwVwEkIpRj+YN7eL8?= =?us-ascii?Q?8YKtcYZFYWOBcdZ9XCXRxx2PDhzYnaZPtDTlQTGx27zTTaANEppH35BRCg/a?= =?us-ascii?Q?YF1yVgkZJXaGz7MfpUMo0sG3Ft2UdgN0dTmhLIEk5iJn0xB4CxQif7n67K1g?= =?us-ascii?Q?/SO3efNnbuj/2eWaZ7qk1rvqT/eZXu8gtlrHX/mwcIcYYTuSn9c08GsKYQf7?= =?us-ascii?Q?55o6Nte/dfJxL/w9fsH54YchAafkLeKvFyvLKADUKn2fjlwHJhtg53gr+4h4?= =?us-ascii?Q?j59emk3fEQELTY4jQ4GO69EESMmsOOratAL8xRDTr9YB/Rlty/N/wpB0sEJn?= =?us-ascii?Q?NWmomhOnKWhQ5dgg9eeQmrtE4mOaxadYKnUpKvMZctYCI4+rH9hZh/0lSC2+?= =?us-ascii?Q?ZvjLm0mpEgLwx27ZLECV2JCxRgvUMSEZty1oCnOMqD9haCODOj3pHzAVsvBJ?= =?us-ascii?Q?6nvypDazmuf/jRmYa4s1arAq+DkSIsRusJf3SOGLqlIZ1bPg4mQ0X3UCPhOA?= =?us-ascii?Q?jvXkEN2xVQCFMeKHAm1PL/aYIm8Ac53E7KfSS3ov0/uDH4aJqIJ+YXBE7H1+?= =?us-ascii?Q?iS+KoivRhRNB4ys/6YB93lbqdRPXxskMw3VgbsQ=3D=3D?= X-Forefront-PRVS: 0305463112 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR03MB172; 23:IDem4MKmTg4VX63aRKwo+UluBPWutPWn7K+QTD8n6l?= =?us-ascii?Q?0nwgBf4d75VWujFwP19zZSaCN6Beh4PCIyGpZAAIaNCs7unRPOxkmaCyMr2j?= =?us-ascii?Q?W5hLjhWNIXmNXrxyM/9ow6Nifz6HEQySwA6BFoTAs1gKK7DNcMlhBug2YU4D?= =?us-ascii?Q?JVDLbS0ymCLwpaL2SftnRar4dANvrT2yLZWoMBA5PNyBj9lqelrXfQzCCp4J?= =?us-ascii?Q?EXFPpJdJSxh0m/tLN2ztvOpRW8lqzUCFfQgxrGXgsSnf07IUVLjgZi03PX6Q?= =?us-ascii?Q?V3eHPcci9hgg1Ptc44KmIW73iXCFa2nk2Lk6VWM8p01JUlX0tSXCr/JAHiur?= =?us-ascii?Q?LrE4xH/yR1/sqspV16MjeSnSHORiapZSMTXTiH8tpYXnJ3PK+PpwXPsIpQDw?= =?us-ascii?Q?Zrf9nn+qlUGAgwL1fy5qyiF23zQfdaAu34ihFIEYGDYztTS+gxYoEbtrPv8G?= =?us-ascii?Q?8S7T/gjnQERTWjqncnkB4wIuz+PDQUnLJ60iE6Rgq0NOXkhM5CTtcr29dHSV?= =?us-ascii?Q?fbr+cvjRVDECpWkyRrxvhDqA0495OvNQFNB3dmaX2gP/5E/93/+dHsgyQlDI?= =?us-ascii?Q?MevdUFdhys/BD1vibHaxE40tzUoxz4LIBxF/f4RwbA+XlI05B68SJYPTWOWM?= =?us-ascii?Q?09rzIVFSKCGc8kicEBW3MrFtGvMLGGDN9Y34y+4cgIwUM51uyqLooaMdzEEB?= =?us-ascii?Q?88bZAuSu5ln+71IjcgKPbjsUi2ru6N7k4LbCEh7WxPVRnI7mZHIqRy7CUbp6?= =?us-ascii?Q?9xsKCjNxpYPfula01LFlcFZKFoQgL4PTg7in8/ZvIzEY92NlEdl3lPiklPVL?= =?us-ascii?Q?Etyj4yEU/H/WQXq8pEsr7FU7t054YywbzzXX1hlhvxwRxU2m/FFNNWvkILDv?= =?us-ascii?Q?oRPAO2/rjNsSQWGsZuS1S57lNouPTFJOTs8+8JY7a3/OIyQqR1eLZBy1SYtn?= =?us-ascii?Q?FpIyRg3gMWyCUSAIYsr2U1I3iFHRUy5DoP5sjpMPRA8DgRya32OksXXpnR4o?= =?us-ascii?Q?B1ey+Ev/mdvvogcio5hExuDbQ/l8PJY5E4MaFm18nYrjOV86nuMv7SIttm10?= =?us-ascii?Q?M3ULdDvDqz3SdSfwAp1ABImSkoCW9OjMkZzDTVZIfW+tzbJK40gcGvtcvdYT?= =?us-ascii?Q?4kOUw+C1wGMpvwzJjSp12cVavv8tvOJ8N70ojFUFDQlenbp4GQsQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB172; 6:krhEr709cAK16clx9QOb50gf5eYHU9Wc7BMBbarQICQhR9/lY2/Kfryln/uZq6oIDpAvrZ03K0qO+a7G8txu/bM3ugxrfVtDsCdDSlywJbVt9RIL/uKKYP97uF3zMcZTitxvKBxymh3TLN0aCqcOLgN+c8MrgFhiVXeK7y++UEqhQQ1iclhoperYNkQ/IZK2vnjSETogX5xC2e5A/8DdXeocV6HMSL9IjbXzJ0HzixlIt6D/1QEF0y7NgIzC742gTLAR53byZw5NAZOa9HHChRIfSA9xMWM3ZTj2ZJ2J0puZbdNkUHK+xhDh0LjD6+PowgNbTEyTjQcBzuyXFGo6ovt5xxrVh/TKIdIj0PQyGErbCDW9ULCHOjT1yJLeIjM7lPb58dEVN7OII+HjxQVZ9Kok26nIJEoPiGjb8L0+0CoMw4iHSAtoeeiUDavVELvO062O+Ehpfr7TLwfiWvlEivpUdeZWy4kdEcdY2ptxuV/k0R6YEafM7yDFPryF/PjichOd9iRFj5dZL4Kq1Ff3AQ==; 5:oMhlM6jDJlOeEF+iVaxitnzGv9nJjBP0dd+timzxXOEeUsUgFippLwJA0zXJ9R4HVdrLKzES/mOEQfvV+5DLHLyip7DQQ1qLBABKARAIjwZKmx2v7RMaXEPLH8x6rgtesqVrtQKapGALvvpNnVHN2CTW1mQIY9A+QCYn9Zek07RoiADBYeA/96KU6J7VkIyc; 24:dY4VAtRfKwLmD4CFibT+0eprdTp4My9GRhsksHWg7oQB3guLkZCveLI1i4Mjf8aPd8tCZtbo2btImX5s+4gXbQZAjGinGBNxY5TZVRnWfLQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR03MB172; 7:Gy5pR38x3+2puOc4O/APyKQ+heRfBfwNwARjAxMAxfMEt4In4I8sPhF2FX5cMaZ44npnVNLbFW/nZ5s5DS5OwUfBNjrmwyHSxbTTW7AqDxlP2UvcFeKPNDOXD0Ks3/NaRzvtZrIN2EbaQjvHiBU+TJ/aYCma3uQJmyS7yPy/xzcF7YNvTUcQ9tiKdQ/UJYlKOOZQXEQuTtCoK2DpA3CIdxjTYvN2AYY76ygFm/Hn8OVB6FRBw+FEAmbqfTA4DmApqU8L3S8x8Kkf2/l3YyQ+m9dr2KNQ2r4bXirxgWRSoiUvk8fcpwiBllcaerfiANH5NJwyoCLgWVyM+2kFx39Wrg== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 May 2017 19:03:04.4816 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN1PR03MB172 Cc: Ruchika Gupta Subject: [U-Boot] [PATCH] ARMv8/sec_firmware : Update chosen/kaslr-seed X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" kASLR support in kernel requires a random number to be passed via chosen/kaslr-seed propert. sec_firmware generates this random seed which can then be passed in the device tree node sec_firmware reserves JR3 for it's own usage. Node for JR3 is removed from device-tree. Signed-off-by: Ruchika Gupta --- arch/arm/cpu/armv8/fsl-layerscape/fdt.c | 73 +++++++++++++++++++++++++++++++ arch/arm/cpu/armv8/sec_firmware.c | 53 ++++++++++++++++++++++ arch/arm/include/asm/armv8/sec_firmware.h | 9 ++++ 3 files changed, 135 insertions(+) diff --git a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c index 05c4577..d4ca129 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/fdt.c +++ b/arch/arm/cpu/armv8/fsl-layerscape/fdt.c @@ -345,6 +345,75 @@ static void fdt_fixup_msi(void *blob) } #endif + +int fdt_fixup_kaslr(void *fdt) +{ + int nodeoffset; + int err, ret = 0; + u8 rand[8]; + +#if defined(CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT) + /* Check if random seed generation is supported */ + if (sec_firmware_support_hwrng() == false) + return 0; + + ret = sec_firmware_get_random(rand, 8); + if (ret < 0) { + printf("WARNING: could not get random number to set", + "kaslr-seed\n"); + return 0; + } + + err = fdt_check_header(fdt); + if (err < 0) { + printf("fdt_chosen: %s\n", fdt_strerror(err)); + return 0; + } + + /* find or create "/chosen" node. */ + nodeoffset = fdt_find_or_add_subnode(fdt, 0, "chosen"); + if (nodeoffset < 0) + return 0; + + err = fdt_setprop(fdt, nodeoffset, "kaslr-seed", rand, + sizeof(rand)); + if (err < 0) { + printf("WARNING: could not set kaslr-seed %s.\n", + fdt_strerror(err)); + return 0; + } + ret = 1; +#endif + + return ret; +} + +/* Remove JR node used by SEC firmware */ +void fdt_fixup_remove_jr(void *blob) +{ + int jr_node, addr_cells, len; + int crypto_node = fdt_path_offset(blob, "crypto"); + u64 jr_offset, used_jr; + fdt32_t *reg; + + used_jr = sec_firmware_used_jobring_offset(); + of_bus_default_count_cells(blob, crypto_node, &addr_cells, NULL); + + jr_node = fdt_node_offset_by_compatible(blob, crypto_node, + "fsl,sec-v4.0-job-ring"); + + while (jr_node != -FDT_ERR_NOTFOUND) { + reg = (fdt32_t *)fdt_getprop(blob, jr_node, "reg", &len); + jr_offset = of_read_number(reg, addr_cells); + if (jr_offset == used_jr) { + fdt_del_node(blob, jr_node); + break; + } + jr_node = fdt_node_offset_by_compatible(blob, jr_node, + "fsl,sec-v4.0-job-ring"); + } +} + void ft_cpu_setup(void *blob, bd_t *bd) { #ifdef CONFIG_FSL_LSCH2 @@ -358,6 +427,9 @@ void ft_cpu_setup(void *blob, bd_t *bd) else { ccsr_sec_t __iomem *sec; + if (fdt_fixup_kaslr(blob)) + fdt_fixup_remove_jr(blob); + sec = (void __iomem *)CONFIG_SYS_FSL_SEC_ADDR; fdt_fixup_crypto_node(blob, sec_in32(&sec->secvid_ms)); } @@ -396,4 +468,5 @@ void ft_cpu_setup(void *blob, bd_t *bd) #ifdef CONFIG_HAS_FEATURE_ENHANCED_MSI fdt_fixup_msi(blob); #endif + } diff --git a/arch/arm/cpu/armv8/sec_firmware.c b/arch/arm/cpu/armv8/sec_firmware.c index 4afa3ad..f460cca 100644 --- a/arch/arm/cpu/armv8/sec_firmware.c +++ b/arch/arm/cpu/armv8/sec_firmware.c @@ -232,6 +232,59 @@ unsigned int sec_firmware_support_psci_version(void) #endif /* + * Check with sec_firmware if it supports random number generation + * via HW RNG + * + * The return value will be true if it is supported + */ +bool sec_firmware_support_hwrng(void) +{ + uint8_t rand[8]; + if (sec_firmware_addr & SEC_FIRMWARE_RUNNING) { + if (!sec_firmware_get_random(rand, 8)) + return true; + } + + return false; +} + +/* + * sec_firmware_get_random - Initialize the SEC Firmware + * @rand: random number buffer to be filled + * @bytes: Number of bytes of random number to be supported + * @eret: -1 in case of error, 0 for success + */ +int sec_firmware_get_random(uint8_t *rand, int bytes) +{ + unsigned long long num; + struct pt_regs regs; + int param1; + + if (!bytes || bytes > 8) { + printf("Max Random bytes genration supported is 8\n"); + return -1; + } +#define SIP_RNG_64 0xC200FF11 + regs.regs[0] = SIP_RNG_64; + + if (bytes <= 4) + param1 = 0; + else + param1 = 1; + regs.regs[1] = param1; + + smc_call(®s); + + if (regs.regs[0]) + return -1; + + num = regs.regs[1]; + memcpy(rand, &num, bytes); + + return 0; +} + +/* * sec_firmware_init - Initialize the SEC Firmware * @sec_firmware_img: the SEC Firmware image address * @eret_hold_l: the address to hold exception return address low diff --git a/arch/arm/include/asm/armv8/sec_firmware.h b/arch/arm/include/asm/armv8/sec_firmware.h index bc1d97d..1dc547a 100644 --- a/arch/arm/include/asm/armv8/sec_firmware.h +++ b/arch/arm/include/asm/armv8/sec_firmware.h @@ -8,10 +8,13 @@ #define __SEC_FIRMWARE_H_ #define PSCI_INVALID_VER 0xffffffff +#define SEC_JR3_OFFSET 0x40000 int sec_firmware_init(const void *, u32 *, u32 *); int _sec_firmware_entry(const void *, u32 *, u32 *); bool sec_firmware_is_valid(const void *); +bool sec_firmware_support_hwrng(void); +int sec_firmware_get_random(uint8_t *rand, int bytes); #ifdef CONFIG_SEC_FIRMWARE_ARMV8_PSCI unsigned int sec_firmware_support_psci_version(void); unsigned int _sec_firmware_support_psci_version(void); @@ -22,4 +25,10 @@ static inline unsigned int sec_firmware_support_psci_version(void) } #endif +static inline unsigned int sec_firmware_used_jobring_offset(void) +{ + return SEC_JR3_OFFSET; +} + + #endif /* __SEC_FIRMWARE_H_ */