Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752020AbdGERvE (ORCPT ); Wed, 5 Jul 2017 13:51:04 -0400 Received: from mail-eopbgr20117.outbound.protection.outlook.com ([40.107.2.117]:12096 "EHLO EUR02-VE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751866AbdGERvA (ORCPT ); Wed, 5 Jul 2017 13:51:00 -0400 Authentication-Results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=axentia.se; Subject: Re: [PATCH v3 05/16] drm/fb-helper: do a generic fb_setcmap helper in terms of crtc .gamma_set To: linux-kernel@vger.kernel.org, Boris Brezillon , dri-devel@lists.freedesktop.org, Daniel Vetter References: <1499164632-5582-1-git-send-email-peda@axentia.se> <1499164632-5582-6-git-send-email-peda@axentia.se> <20170705062144.bdyngsas4uc5dj2d@phenom.ffwll.local> From: Peter Rosin Organization: Axentia Technologies AB Message-ID: <3cbc02dc-e535-7d66-923b-c9a4d0f14f13@axentia.se> Date: Wed, 5 Jul 2017 19:50:49 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <20170705062144.bdyngsas4uc5dj2d@phenom.ffwll.local> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [81.224.171.159] X-ClientProxiedBy: VI1PR0802CA0002.eurprd08.prod.outlook.com (2603:10a6:800:aa::12) To VI1PR0202MB2560.eurprd02.prod.outlook.com (2603:10a6:801:6::11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 19b0f987-2ea9-416c-b70b-08d4c3ce6351 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(300000503095)(300135400095)(201703131423075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:VI1PR0202MB2560; X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2560;3:+qngv5RsJ9+PtC1HGTqWdhpVrnwZheq8kr9dsfP4OTRJXYe21mGiShR/A0Fli0zZfh45L6SbWN3xacGtoCxqv0zkV+qbxHC406v2EKrKSLePDqkj3nBD/98OCgK4pdHauvJWbwJMi2tZxyihNDCBoVdomMRL97oqnwqTySa8vipsc4PKdMXclvIqiEduOAC4dzCELkq73U4BOQ8mbTiMnqLhts5qoMyXg4RdEQslqapNw8u9C+yv1Y0iOgLRLObQHPVorCCvMlPxyMl5kGa+OuD6ppTxaWA87RZxeRuvwC15izfEk9inarX/SmkcaYT8rcYH1uNc5d2xcStVZv8LxxMzXK3xW7wgtrXwK0N/6ZT+rf41ocn7Aa+ne+AokyWLhyH+COQ6c02uEX2upgAAip9tMrk4U8+KfPtl3brq2NHgZoz6cJ1Jx75I3Y4A22TtydSXhwQHiTVMMFIFjC5QOeSOfhtxEcMbFQDIfV8ZKRx5K+LSdW2FwZJ8ic/el46ckQ9t3kPZOFSfAHfwlIZEm9ZtJ5H0ZXkqUgYPrGTXqJe3ZvIQKKRcebXg/PGfTJfDdifcH3JFurMG2ejslqO/PkdvIKL29slebJpJ0YVjdg0OUZKo2MZlIw5lwOtfjiYSUOpYdXO6/XwkJek6pYVsW/L/hjItQuSya3bmfx1LijdObijU00lBYpM1TJXvpoZTQKJOv/L0/+DZe0xGFBMRUw== X-MS-TrafficTypeDiagnostic: VI1PR0202MB2560: X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2560;25:Yp3h4HDdiYdN9SUBzNEI2nc1Ox66dVMsgHHEUlQkYvDM+neXMQV4sZNVJBkCqbtLXIP1/S2tdZlCRBTKlOMXqeczl6Harh4h990HkWOtzrqU9K/kOJMagpnCqizSze01q7ESJqNsCxRLjv2ubtnhpXROE2+3hy4LotH7/i/iX1NAJQofai5eUNjEQb3RVpj+OCPsWek4XkLMjZvwUg11xj/lnXo7157W6ACr9I8fCaX8KtmmiYf4fI360sEgWskrn91VhlaQ1be2gcTRyrNm74rqXGXgXiD7nqcypZKmolewvdmDrf1Gi40pznfum+X5UUw9BQ5ujHKZhF/0mn0LpTkew+zCOkxUa3UtaEqLw5tlS9mhIODcZCqbj0HM161897n/W9SIBMy6tvZEXgtrlZP6c21vCFGTR1XFfG8aRyqaQSrafev4HEf7/zai6/xVirvYxnmDN6Y9gINqF+fdjKMMm3DCSv3fjyH0C0+ArQS3hlzgHN2MRXeYMbf2uzNBhrUWwSeiU4CShp/yoTwikrZGGc7HZmLsmZud0q+NMEqNAzxqQmKb8wAzjcW/i2YLltkPNbH8N80a0QiJ5lRpwx27cavi+mhlZ9J8IhENoKjhUMJuGGzj5y9f+OlDo5R1OGxBFIxDH/MSHmxAz6fU8CQWKQ8YyAtwaVn1lgmOWcdCl3sOaOpWCpX6ksoyZ2YUFX3zENegjP6cvvqVieZnFHa9KSEbeTFVspvEmUdhQJK/czWZLfFHU9Jwhkf9esi4CUCxMvl+NcKGh/T4fdRJTFU3wrTqa0zgjg9hY+ikD6O8Vmf8My+iWXOzjBQsbGju0TE8qDp6olUTqWEeUcxUjUAFbiFX3KmLcZRZqGYvD1gHO7BtCRwDJSbf5ei+A/Q30pNQMqIhT9zHuByKPIxdFASGOnA1ozKOQlZDsI+XYrA= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2560;31:Log/+3355hNbpmsq0/FF28fAMKZyxUVYYcD2LS/doU0YTkS4tT+msR433EZhSMsyyV5H/8vZeZaCaHqOcUr4B0Ws9uFQgOWyNIrfaVZbiOI5zpFoDmMjIaOrxMFqFHKqxCXzlLG8E3bofiWFSjtC42BLXTbXs6osIHaKyKpsiG+RHhjsOf7gte68NUFQZXtHUy6ohOLOKgPbrqN/X6Gq+rBovfR2v1XBzOnMiPZ1zbqIKxpZ97rn8HFh/wIFsw18ubavKGPtagL9/hT1XRnrV//OC9erpFIYnTXUSp1yg1NA8zGjA+jBv8ENMqxu8ZkZU3rebIvNpUrn8bPG3UErO6grFPSNd5rRnEJ/tsxtvSbF10QpkAX+MrKDCEex6jLdq6HZfMZFpuPqN1v+y05jXe/E3gPAdg/rrswWdo4qjzqFqNqbFw2bU3dTgxIMG0jxgzy3Bc12yRAYmQgt9SujROg11F9h1cneSy9uIQawaEW2lptt8zIW9bvMdM0GF7WElYOn3P0skEHbgiqU3kqXmDFT5b0eK0qvkfPPQEe8G7XJnLeNAzmqQvamjH0ren6fZ0HQq3YB/NrPHNnCfLDh4ZhkvXmNXy++qELMeSZLeoulTRwHWnqzORWbUTuVZy9gAYYClAn4Vet5IVfIyC/0Wt+x4dnCYFL1zoJ4ABdX/XKd1D1PSioE6N/03ae4YR9kMuQWLeKY91sy4kAWtCprcw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(236129657087228)(48057245064654)(148574349560750)(217544274631240)(247924648384137); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(10201501046)(100000703101)(100105400095)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(20161123558100)(2016111802025)(6072148)(6043046)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:VI1PR0202MB2560;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:VI1PR0202MB2560; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjAyMDJNQjI1NjA7NDpjYjJmb3Uzejg5WTFsL2RZZHBRRXF2azdM?= =?utf-8?B?WDhrOGR2ZC9zaFFJUDZ1L2x0TXVVZ3A5TUVNS2crcmlRdWo1WWYrS245cXlQ?= =?utf-8?B?dGhQZ1phRjRUc3RiSUQzWi9qZkdSenVvV0FBMGtNZVdCQ2h0NVArRXlXemNl?= =?utf-8?B?anNqVG1BeGZVblVsYVhMYU1XTEVkZVA3Z0ZiMUpSdUl0OEFHUkNMTHRRWjV4?= =?utf-8?B?b2RVV0YvdXhQWFZaa2YxNGlIVjZRWWFCTGdxWGdUMGlPSTI2QWZVSmZSd1JJ?= =?utf-8?B?b0RDZC9BYzNIQldaV1drL09oU3Z0T0FPbWpoQUV3SHprNWgweWs3MWEybnRN?= =?utf-8?B?enhNbXVZbFZKWlVSOFY4Zm02c3ZaaXdPWkxIMU1ZQ0lzNGY3Y21taktjY25Z?= =?utf-8?B?dWhwQVQrQ3Yvbld1UnZxRm9VRnhzekVZZ0NkRkxjcmh5OGtzdnI4ZVFxaHdB?= =?utf-8?B?WGJRQzlBTG9zaFVnVTEwbi93QWRvcnJ4UkpudmNpSkdaRDNzWFVVWmtJVHRJ?= =?utf-8?B?aDBrZEFHaW9PMEwxaG5CWnRvLzFTOHZGRHByaWdvcVBlaWp2K0xQVm9wdCtx?= =?utf-8?B?OGdXYVRqL2drQkkrY1EwaDc2ZUduNk91MGV4aUMvRms3MllsbGhXZ1lsa0JZ?= =?utf-8?B?clJVN0Jycmp2NGhoWER0L0YvQnF5eElWK1lua3lrMTVRMHRPaDFMa0pSWW8z?= =?utf-8?B?STRqeFNyTy9kZUZLRzkrK3U5MnBXRjlUTjdNWDBVNlUwd1BSYWY2SWxybmlS?= =?utf-8?B?RDI2cXZQY0Z0VzJYdndRQ1piTkVwV2pibzNvQzBLejRmd1VuNWZkWGoyZnhh?= =?utf-8?B?Q0xxZ04rblJYRkcrby9GM3QxejBnUTYxS1F5ZWp1QVlYUnNCQ2JjU2s3emJh?= =?utf-8?B?cEtyQjVsd1lSZ2FCWm80ZnNPc1V3Vml3UTNPTzZRQ01TTzB6ZHJTV2RteHlK?= =?utf-8?B?QXFxbDBTQ2RZcm9FQTQzZm5wLytpTzRwa3AwNnRhK09pSUwzbnFIRERDNjEz?= =?utf-8?B?OVFHVkh1SXkxVnJYaS9wZlp5ZUhSRXhDdGtDQTN5Q1FJRzFhUlJNSVZvZlBO?= =?utf-8?B?c1FMQjlEUnJoc2gwTXJWNjUwSVppU09ZOU9LRnFsUTJtTU9qMXNvb2FyellR?= =?utf-8?B?UEZkUmlEWk1XTEpGV01ScTdtcGdlRVJheU9GcmRQUUV6bTgyVEU5M3grcVh4?= =?utf-8?B?cWJxaVY0WSthS0sxRURoVEtwa2FmNWxPRHplNHJvK0ZXaVJ5TWhoUi9yb1pm?= =?utf-8?B?dWQwejdVb2l3ZHNxRTBLOTkyc2N5M2VNa2Y5ZFgzOTlzdkdSMk5xYy9RYjRm?= =?utf-8?B?UEM3TkdldE9uM3MwdVltWlk4dVJMNmp6SjZqcnNBUXZPTWdIRmFQK2pZUjRB?= =?utf-8?B?STlpQ2FBekhnb1VEVzh0ditTZUdDMDhTL2NBSEFxek1hVnk1d2RPZmJ1c0ky?= =?utf-8?B?cW9nYWg1aGdZNVQxdXFUbGZGT1BzL3ZJSDY2eXdITHNzd3hRczl0a1Boc05V?= =?utf-8?B?STZuNDdlT0FESlB1MEtWZ1RSNDRWVW5TVGducllPZ0JsNDZocjliTHhiZFZx?= =?utf-8?B?OEF4Y0JpQndiZWQ1SlloSnNzQnJKbnJMRGl5TnVCWGU5SUdSeldtdzNSU1Fl?= =?utf-8?B?TXVnd011dUdkVFJnQ0VGdUo0aHpOQ3EvYWtLYWVXQStBOThDWnR4aTM3cE45?= =?utf-8?B?ZHg3d0FXc3JOYzFEaGRoRDFpbThwR0pzeGZxRTZmZzdpaHZMc2doVXc2ZEV5?= =?utf-8?B?d2w3TU9kbU5NZlNwc01FWDQzRGlwTHp6V3dlaFJCcXFVSktpL0dsNWp4V3RC?= =?utf-8?B?VnJQa2N6aG4zaXdwMzE2cXhPcjlRc05wdzhya2pDZm83L3ZaMWc2aGVxTnZQ?= =?utf-8?Q?y+95F9ZFA9OA=3D?= X-Forefront-PRVS: 0359162B6D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6049001)(6009001)(39830400002)(39400400002)(39410400002)(39450400003)(377424004)(24454002)(2906002)(66066001)(65956001)(50466002)(2950100002)(54356999)(50986999)(189998001)(6116002)(6246003)(38730400002)(76176999)(230700001)(3846002)(6666003)(47776003)(53546010)(31686004)(53936002)(33646002)(42186005)(8676002)(81166006)(36756003)(478600001)(117156002)(83506001)(23676002)(4001350100001)(7736002)(305945005)(25786009)(229853002)(65826007)(86362001)(74482002)(5660300001)(77096006)(31696002)(6486002)(6306002)(966005)(41533002)(142923001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:VI1PR0202MB2560;H:[192.168.0.125];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjAyMDJNQjI1NjA7MjM6eEpwdFRzcTRQd0tBUDcwWjVVdHBGTVpD?= =?utf-8?B?d05qWkdBbmlSYytGQkpVN1BERnFwTWdxS01pbDk0c056VEtsL1JwWWpxaUZX?= =?utf-8?B?Y3FvNlk4M3JSeGtVOTk1aUJPZ0k5dWdZZXpRZ0I2MzhaS0ZNM3JpR3M3Ny9a?= =?utf-8?B?am0zRGZuUStMb2FUZTVpcW9kT2JWWU0zek93Q1BSam03TDFKbEJBNzk0L1VS?= =?utf-8?B?ejAyVUZOR0dNU2d5ZHBtVHJXc05WQ05Mby9mWk1YVmM1azNwTDZCYVBuN0Ew?= =?utf-8?B?eXYvSHRqbUs3QkxHN29NQlk2Z3ZweHczK0tCY2Q2UkdWb2pFdTFqYXd5ODI4?= =?utf-8?B?Z3JoZU1ackV1TW9qQ25zNktUdFZYdVJ4VS9jTXgvUjZCMFZyRjh0dllOS21H?= =?utf-8?B?dmFuZ25lQjlkMlp3S0diMC9zYkUrQ055blNWTEFTdGdNTkJ1QnBxaXZVU05C?= =?utf-8?B?aWsrRUo5ZVJYWVdnV3JXWnBGNnFFVExpN0tIa1p4OEJ4YjRESTZ6SVlpVERm?= =?utf-8?B?Mm1UaCtkOWVFYlhNZDBPTlowSVM5TjNVaGo1SDhTNUt5bjgzQVh0UlBtOEo0?= =?utf-8?B?L1Z4OXNHbGxYNVoxUkYvbGZKWUc1VGJKTEsxVzNrTnpXeHlNejhMS2hlSkNV?= =?utf-8?B?cmdyS2pRUkRFY3JwRVMrWUJRVDljcHkyNWR4NHFDSFFaMEthOWprbFd3NXFk?= =?utf-8?B?ckhSV1BSdmZ1ekNFZCtIZ3p3VWVLdUF4eEhwbk42V0FVVEpoQWk5ZWYwbWNI?= =?utf-8?B?aG9BTFhTb3dlTnZtTkVpWFptYUVrZFBiWmtobHYrbDJRV0hNSkh6UktaeE81?= =?utf-8?B?dmpPZ1BNNGpVak1ITnRacG9OeTByN3ZCcFRSTVJhQXRWVHJZbitoZlArYUEr?= =?utf-8?B?c0poS1dZakcvSGdNNWtMcGZiUXBzODAwOXV6MXdUWGlJQWVBSGh3NjZpWHFm?= =?utf-8?B?SHpwNEJaaE1zS1JFVlF2dm1XSExIUU12bEMrQmF0bmR4MDNoZVFmMGJ0WFJy?= =?utf-8?B?Uk9od3hSTFJta3Zvd2RaYy8vKy9DVWJNbzRwaldvYllYN1h1QUpSYnN2bjh6?= =?utf-8?B?T3I2cGhvMktwWkFLcnhUTXZTZTBtQzVCVVVzVUo4aEVxLzZtQXN4M0JLcW53?= =?utf-8?B?cllUcCtNenhJd3k4RUFzdjhRdU4vKzlIL2ovbHZsN1VFbzdyRlFaQzJkQ255?= =?utf-8?B?d3ZqYm5zL2h1dEJQU3B4cDUraXYxbjNqSVNmaWZYK3E4TC9GTlh0a3U3NVpq?= =?utf-8?B?SGF0d00zKzZZc0VjY0NhdEpSTkM1dXZrcytSYzFEbmxTcEFadVVsYWlMa29C?= =?utf-8?B?SVRLcVpkS0NTWDEvd1RQTjlVSTJsWDd0LzRmQnhBQlE1dlQvdWdLMGFOK1ZF?= =?utf-8?B?d0lOTW5FdWVMa0Zoek4wNm5ySVNuUGFwaSs5RFpDMjBGUE5wSTN1RmJtV2tq?= =?utf-8?B?Y3paM1UwZGJKNm43S0liekFGUlRVeHF4d1JsQ0NWalRnNjg4ME80ZHpFN1cr?= =?utf-8?B?b3ZhMHpOUkVKclE2ODBGV1N4b21laWhUYzUvbUE4Y3BIblpXOVdoRmg3M293?= =?utf-8?B?Q21kWjdJVmtGbEZiU1dPemlUVUJ6RDhlZG1vb3daY0Z4eGw1bHpnUkpRUGlB?= =?utf-8?B?VlBsV1V2MlVKRVJGeUt1YW1FemlnK3hsUHhYTmFkM2sxcUswSVJlbzVIV1Ax?= =?utf-8?B?VnJyU3NXOGVscEVrVXEzTDFrNHMxRWxHTVRUQWVCTUZIbGF1Q2R6UDFieXIr?= =?utf-8?Q?HOO2YKkNMEGydiCqYf0QnQqz2WGMyvsIJq6rNCQ=3D?= X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtWSTFQUjAyMDJNQjI1NjA7Njp6R3hPR2R5UWFnT251TzVTemhjVUZFcFhH?= =?utf-8?B?Y3pTRys4d0RCWnI2K25HTHcwc0VmUWQ1U0k3cXNIRXp3OUhjQjlSL1E3dUJR?= =?utf-8?B?MXlDVjBYZE9aamdNRkNwK1p1eTlNVDNkc1pPb3dOMXpPK25JTlNjZnhJYkVG?= =?utf-8?B?TjBRRlVzaUNYRjU2bHJ0M2pGQzluS0ZDQk9IODJmdWVZV0ZCZTh4RHUwUTBP?= =?utf-8?B?RVczWlBWRWJzWDdXKzRoTi9NSGZtWGhHSnZYTmFZY0dxUUZja1lMaFEvS3lV?= =?utf-8?B?OXRZSGVJbnhmRUhXTjFjeU1TVnZIOThEZmxpV01hbGNRM2FYSDVKTVBIZ01Y?= =?utf-8?B?U0ZvQzl6bXIzaENaWVMzZWRjaWZEVVN1VW5NUW92SVpEd0owMFpVTjRpZm5t?= =?utf-8?B?WEN0L0t1bWNmM3FFQ2hYV0JUSjRMNlNzL2x3NTNEamRqZnBSQzZnMDNqNWNY?= =?utf-8?B?UGR4bnlSclpydWtBaDJSSmxYNjVvU0ZxcnE4TWZtaEJSeUIxbEhPOThCMTQ4?= =?utf-8?B?NVd0RExTT0w4NkhHZlRnTk5PVDhkbVI3WFcxNjRTakRnY21aVi9HYnF1cmxJ?= =?utf-8?B?OHloZ2d4VENZMDdWY25FUFVjQU1xcjFyOS95dmRpTHovcGNURVl2V3grbVZK?= =?utf-8?B?d2t6STY3WkFsTHhnNG9wTlJvM2VGK1gxWEo2cm5rQlJBbUlQQkczQ1RVc1BS?= =?utf-8?B?YmRHb2lzYk80SFRmaGR0Sk1LMm1ZNTBwOUZ6d1I1M1lVV2hoVVVqaFFHRFFu?= =?utf-8?B?Q0ZnWnJTQnNkZ3VmOEtyOEdxSU9zOUpmRnJ2RGtJaTJLZ2lYc3QvSlh5b21I?= =?utf-8?B?VTdtbmVrWjVtZ21RV2l3OU4zOC9HbjZYcWVWMkRqdjRNUi9kc3BDSzA4WFpD?= =?utf-8?B?ZHF4dVV5U1pYRW1MaU43Nm50b3hOVks0QlFLRkRUVG9aa1E3K29SdnVhYlJH?= =?utf-8?B?Wmlua1hkV053dmIwNDNRMktUbzN0WFoveDJ2RkNrV29odFRVaFNJYmZyQnFR?= =?utf-8?B?c0VNc2lYYWFuOEo4U3daRXhIai9SQzJibHlmTmJZSWY1ZkRQd0U5YzRBZkI3?= =?utf-8?B?aElLR0JibHVROFVVR2R4eG9rUmdnQk5IOTRCN2R4QnBybUpjZ3JYY1l0LytG?= =?utf-8?B?RnFyY1A3VmI0S0V0N1MvUHN1ODZHcTYxeks5eDBmYzdnMW1FbHlwSWZVZ2xx?= =?utf-8?B?aTVoeUNJSHY3UzNaSzdtSmozN0JKVXloa1ZlakJZTlJBWUFmWXpXVW9wVFdT?= =?utf-8?B?ZU0xbDBTdEdNK1JKcVdMRm42anRqMWtKcUVNaXpLYXpCOFpmL3puZmRyUXJ6?= =?utf-8?Q?6TJixNyl/buSqXD+o4PiQzIPK2/g4eBow=3D?= X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2560;5:GHd+XMWIu48x4edOYqqOW1naiF8UEkYRGJVlt2UAnZxTT59YGj4CRYFy1h1DL42js0H64HCh+osHhryMZKyh1ux8WPUr5+w51uOwPv199ed/IOBn0av9812r9LR+M+RFOm6zn0afEqumbVlJUXDjzqT1P1nkEA588O4mIOQDQF6xjgTaJZW69pR47AShJ/WMWxa86u2aw9kXytPCloEC6hNcnzw/7SzHco54Lq77YSOmR2E6FBGtIhJ9C3h34dKOv2I7FBqEw0AY/ceTiIV6cvQzY5KtgqOaUkSKAdaWILk7pX1Jo358HMlTyEmh+FqIx1twM9QchPjlMONfj3H3khLQKCHLMb6X8sco4OLj+rYgdp5fpk3JMiMKqGfptn3WONzTVvH1r3Q4qi37vfhOU1oslPG0ZoJUAA4cicK2UTEQh9vRFw9a/XUG+nP+YyLdEeyAX+g05hMbGXyc5h1ZG9IKP4A2Uuf6F67RR5QWMmBqmPIob0p0KAe+sHgI7i2C;24:9ULKK/tahyLxtfeMqGTUUjyxDVKguk6ZrRo5G/4H6Jl1Kt4koiHl7mndb6SdlSg1u9jQ4u0glX8gqv1XNJVCV/ocIBqwSMefT9Xu6vpoQBU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;VI1PR0202MB2560;7:Ei6sK+PXxT2fCFsc1tU5xJErkfY1rOdEXgsPtNLFsYSAQN0rLVm9JLBt+RAJE3PuMQbr8typAQMAdL0ORnfG+6a8s28Z0AKdFPUtIBqIrlkGvc6SWsRkCFgWHSqCGM/g/vfpuTRK5aEZ5x5Jm6pqV7hYX3VSIV/08pMSZJH9Aj9hYCYDV+doW5GSECoHd15mfzoOtO84dMDIVsvx5hlISOCegTTfcA0P2L4iXhz47qFXcfKN3Yv3bTMVpibTwXZmLfIyQ+VHQDCDOQ5vicbvwJw5DCVhiuIjOTBFcEBaIyj/EOn6xCnNHaJ+9lMeVZ7/Z27y/jF5Tq4SjSR48sVkw1LoPxmz6qa4+0ftQ2NFqLMKOXOu+vwvt0QfBI3iauhXHy/L5YApiOhESqtCPgxssdPlg36xkJzv95j6q4t9OJkxqNbhgyrMmPi1fWPBSsMUOtSPjNzeKoEUXUeuyXMQm7wbUMBC8V+FtTxKKW3lJSRbb1FyVOBUN/8WoYz5mlvqcIjD9W/RvwccZXP8zD+23bnqO23xBd/LOMosHQ6wmTNVGrUs1jmntJepDUjhbYd/LHYcJ9uCuPGyKFEBo+GK41KUkXmNdDyh/b3StR8L4el1P7qwrsouDxRaMAvCGKNiqyGUdmqVRrhBItnzi5obA6KfeQzs/QLU//kVFWMA1l+v3915CesaOI/kvYZ4t996rGaATb8MV4YUutCmOHUUkWp+WYhoM066DpBzmY+AffUMsivCDFSo/eFiHaVTTVeNnVCJkUX27mJeYDuMQ4Mu5DpWDdLUBumAglqXDdHdmjw= X-OriginatorOrg: axentia.se X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jul 2017 17:50:54.4405 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0202MB2560 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 9410 Lines: 297 On 2017-07-05 08:21, Daniel Vetter wrote: > On Tue, Jul 04, 2017 at 12:37:01PM +0200, Peter Rosin wrote: >> This makes the redundant fb helpers .load_lut, .gamma_set and .gamma_get >> completely obsolete. >> >> Signed-off-by: Peter Rosin >> --- >> drivers/gpu/drm/drm_fb_helper.c | 165 +++++++++++++++++++++++----------------- >> 1 file changed, 94 insertions(+), 71 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c >> index b75b1f2..7f8199a 100644 >> --- a/drivers/gpu/drm/drm_fb_helper.c >> +++ b/drivers/gpu/drm/drm_fb_helper.c >> @@ -1257,27 +1257,6 @@ void drm_fb_helper_set_suspend_unlocked(struct drm_fb_helper *fb_helper, >> } >> EXPORT_SYMBOL(drm_fb_helper_set_suspend_unlocked); >> >> -static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green, >> - u16 blue, u16 regno, struct fb_info *info) >> -{ >> - struct drm_fb_helper *fb_helper = info->par; >> - struct drm_framebuffer *fb = fb_helper->fb; >> - >> - /* >> - * The driver really shouldn't advertise pseudo/directcolor >> - * visuals if it can't deal with the palette. >> - */ >> - if (WARN_ON(!fb_helper->funcs->gamma_set || >> - !fb_helper->funcs->gamma_get)) >> - return -EINVAL; >> - >> - WARN_ON(fb->format->cpp[0] != 1); >> - >> - fb_helper->funcs->gamma_set(crtc, red, green, blue, regno); >> - >> - return 0; >> -} >> - >> static int setcmap_pseudo_palette(struct fb_cmap *cmap, struct fb_info *info) >> { >> u32 *palette = (u32 *)info->pseudo_palette; >> @@ -1310,54 +1289,68 @@ static int setcmap_pseudo_palette(struct fb_cmap *cmap, struct fb_info *info) >> return 0; >> } >> >> -/** >> - * drm_fb_helper_setcmap - implementation for &fb_ops.fb_setcmap >> - * @cmap: cmap to set >> - * @info: fbdev registered by the helper >> - */ >> -int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) >> +static int setcmap_legacy(struct fb_cmap *cmap, struct fb_info *info) >> { >> struct drm_fb_helper *fb_helper = info->par; >> - struct drm_device *dev = fb_helper->dev; >> - const struct drm_crtc_helper_funcs *crtc_funcs; >> - u16 *red, *green, *blue, *transp; >> struct drm_crtc *crtc; >> u16 *r, *g, *b; >> - int i, j, rc = 0; >> - int start; >> + int i, ret = 0; >> >> - if (oops_in_progress) >> - return -EBUSY; >> + for (i = 0; i < fb_helper->crtc_count; i++) { >> + crtc = fb_helper->crtc_info[i].mode_set.crtc; >> + if (!crtc->funcs->gamma_set || !crtc->gamma_size) >> + return -EINVAL; >> >> - mutex_lock(&fb_helper->lock); >> - if (!drm_fb_helper_is_bound(fb_helper)) { >> - mutex_unlock(&fb_helper->lock); >> - return -EBUSY; >> - } >> + if (cmap->start + cmap->len > crtc->gamma_size) >> + return -EINVAL; >> >> - drm_modeset_lock_all(dev); >> - if (info->fix.visual == FB_VISUAL_TRUECOLOR) { >> - rc = setcmap_pseudo_palette(cmap, info); >> - goto out; >> + r = crtc->gamma_store; >> + g = r + crtc->gamma_size; >> + b = g + crtc->gamma_size; >> + >> + memcpy(r + cmap->start, cmap->red, cmap->len * sizeof(*r)); >> + memcpy(g + cmap->start, cmap->green, cmap->len * sizeof(*g)); >> + memcpy(b + cmap->start, cmap->blue, cmap->len * sizeof(*b)); >> + >> + ret = crtc->funcs->gamma_set(crtc, r, g, b, >> + crtc->gamma_size, NULL); >> + if (ret) >> + return ret; >> } >> >> - for (i = 0; i < fb_helper->crtc_count; i++) { >> - crtc = fb_helper->crtc_info[i].mode_set.crtc; >> - crtc_funcs = crtc->helper_private; >> + return ret; >> +} > > For the legacy path you need to keep the drm_modeset_lock_all (but only in > setcmap_legacy). Otherwise this part here looks good. Oops, didn't intend to zap that one. Thanks for catching! >> >> - red = cmap->red; >> - green = cmap->green; >> - blue = cmap->blue; >> - transp = cmap->transp; >> - start = cmap->start; >> +static int setcmap_atomic(struct fb_cmap *cmap, struct fb_info *info) >> +{ >> + struct drm_fb_helper *fb_helper = info->par; >> + struct drm_device *dev = fb_helper->dev; >> + struct drm_modeset_acquire_ctx ctx; >> + struct drm_crtc_state *crtc_state; >> + struct drm_atomic_state *state; >> + struct drm_crtc *crtc; >> + u16 *r, *g, *b; >> + int i, ret = 0; >> >> - if (!crtc->gamma_size) { >> - rc = -EINVAL; >> + state = drm_atomic_state_alloc(dev); >> + if (!state) >> + return -ENOMEM; >> + drm_modeset_acquire_init(&ctx, 0); >> +retry: >> + ret = drm_modeset_lock_all_ctx(dev, &ctx); > > With atomic you don't need to grab locks, this is done behind the scenes > (as long as you handle the retry/backoff correctly). See the kerneldoc for > the various drm_atomic_get_*_state functions. It doesn't work if I remove it. What is the disconnect? >> + if (ret) >> + goto fini; >> + state->acquire_ctx = &ctx; >> + for (i = 0; i < fb_helper->crtc_count; i++) { >> + crtc = fb_helper->crtc_info[i].mode_set.crtc; >> + if (!crtc->funcs->gamma_set) { >> + ret = -EINVAL; >> goto out; >> } >> >> - if (cmap->start + cmap->len > crtc->gamma_size) { >> - rc = -EINVAL; >> + crtc_state = drm_atomic_get_crtc_state(state, crtc); >> + if (IS_ERR(crtc_state)) { >> + ret = PTR_ERR(crtc_state); >> goto out; >> } >> >> @@ -1369,27 +1362,57 @@ int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) >> memcpy(g + cmap->start, cmap->green, cmap->len * sizeof(*g)); >> memcpy(b + cmap->start, cmap->blue, cmap->len * sizeof(*b)); >> >> - for (j = 0; j < cmap->len; j++) { >> - u16 hred, hgreen, hblue, htransp = 0xffff; >> + ret = crtc->funcs->gamma_set(crtc, r, g, b, >> + crtc->gamma_size, crtc_state); > > I guess my description of what I have in mind wasn't really clear. I think > a proper atomic commit should never reuse one of the old hooks > (->gamma_set) here, that's just confusing. Instead what I had in mind is > to do the proper adjusting that gamma_set does here in this function, i.e. > > - create the new blob, fill it with the cmap data > > - assign that blob to the crtc state: > > drm_atomic_replace_property_blob(&crtc_state->gamma_lut, > new_table, &temp); That function is static, and... > Note that the drm_atomic_helper_legacy_gamma_set() does that in the most > convoluted way by going through a few layers. > > - The one thing you need to do on top is check that the gamma_lut property > is supported (just check whether dev->mode_config.gamma_lut_property > exists). That check is instead of checking for ->gamma_set. ...drm_atomic_helper_legacy_gamma_set calls drm_atomic_crtc_set_property which is already exported and performs all the checks I can think of... > Checking for matching size is optional, the driver must do that already > (for the atomic property). ...except this one. > This way your previous patch isn't needed, and we don't need to change all > the legacy callbacks. The only downside is that we duplicate a bit of the > atomic commit setup scaffolding, but that's imo ok. You could extract that > into a helper function shared between this code here and > drm_atomic_helper_legacy_gamma_set(), but that seems frankly overkill to > me. Creating atomic commits in the kernel is simply a bit verbose, but the > benefit of the current framework is that the driver side looks a lot > simpler. But, yup, ditching 4/16 feels very nice. I'll mimic the code in drm_atomic_helper_legacy_gamma_set for the v4 version of setcmap_atomic. Good suggestion, and thanks for the more verbose explanation. >> + if (ret) >> + goto out; >> + } >> >> - hred = *red++; >> - hgreen = *green++; >> - hblue = *blue++; >> + ret = drm_atomic_commit(state); >> + if (ret == -EDEADLK) { >> + drm_modeset_backoff(&ctx); >> + goto retry; >> + } >> >> - if (transp) >> - htransp = *transp++; >> +out: >> + drm_modeset_drop_locks(&ctx); >> +fini: >> + drm_modeset_acquire_fini(&ctx); >> + drm_atomic_state_put(state); >> >> - rc = setcolreg(crtc, hred, hgreen, hblue, start++, info); >> - if (rc) >> - goto out; >> - } >> - if (crtc_funcs->load_lut) >> - crtc_funcs->load_lut(crtc); >> + return ret; >> +} >> + >> +/** >> + * drm_fb_helper_setcmap - implementation for &fb_ops.fb_setcmap >> + * @cmap: cmap to set >> + * @info: fbdev registered by the helper >> + */ >> +int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info) >> +{ >> + struct drm_fb_helper *fb_helper = info->par; >> + int ret; >> + >> + if (oops_in_progress) >> + return -EBUSY; >> + >> + mutex_lock(&fb_helper->lock); >> + >> + if (!drm_fb_helper_is_bound(fb_helper)) { >> + mutex_unlock(&fb_helper->lock); >> + return -EBUSY; >> } >> - out: >> - drm_modeset_unlock_all(dev); >> + >> + if (info->fix.visual == FB_VISUAL_TRUECOLOR) >> + ret = setcmap_pseudo_palette(cmap, info); >> + else if (drm_drv_uses_atomic_modeset(fb_helper->dev)) >> + ret = setcmap_atomic(cmap, info); >> + else >> + ret = setcmap_legacy(cmap, info); >> + >> mutex_unlock(&fb_helper->lock); >> - return rc; >> + >> + return ret; >> } >> EXPORT_SYMBOL(drm_fb_helper_setcmap); > > Besides the 2 comments this looks good and will get my r-b once revised. > > Also on patches 1-3: > > Reviewed-by: Daniel Vetter Excellent! Cheers, peda > Cheers, Daniel >> >> -- >> 2.1.4 >> >> _______________________________________________ >> dri-devel mailing list >> dri-devel@lists.freedesktop.org >> https://lists.freedesktop.org/mailman/listinfo/dri-devel >