From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013030.outbound.protection.outlook.com [40.93.196.30]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D4FE86347; Wed, 1 Oct 2025 04:18:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.30 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759292331; cv=fail; b=SS6Nf2kzzRp0DwiXYnqmQS+PFTcQbtjmZQdayVgUIIqhXFnT1vFqUan199FTZmTwpEOpitXqjCfqQm0F1DzD/0VFywlE6w70YW9952D5ZemAdPsznarx6NaG5Hd60hnvAShB8XJwWZcfr80JvEPabIlToG9zKuETaqpg80DD2QI= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1759292331; c=relaxed/simple; bh=2XmsIir6jf1FRGwgP1qaB/SJLhYinkO//pHyrjEUokY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=e3WRQN9XLevMBL+Y5VviCBh9J9c4kkTxB9JnV7vh+cvA+p9FOw98jjnmF7q2pQmenNNsnaTYlY1di5jYzd4sWrrtjgOjRpeTOdo6DfL8iNqA2YEovcexK+Vmbf2jja6HCcsr4TrDJ/7g2JP6sEWXbR1iZl4QekS4WCx8TYAQUs0= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=huix4qyu; arc=fail smtp.client-ip=40.93.196.30 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="huix4qyu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kwRIsZsQSUUAEKMcT19C0K+qg0bdGpO/w4fJyhx5EP58VzIletnOKVGuMeWy9ng45X84LoCS/CL4WYuF7F4C2s0P+vu0jELbe4etmH+E6eoz1DbKHh1u15kOCYmyqxE9Vxv9zulaM6s82ZIPZFvVKlabsLXo9ZlQYu0d5ffMiNzmQSPzMu0liivcUfTW5iXlRQiWj/WE8H9EX2mZYT+1Ohxl1xKrsHtMPrqKM2uLqIwWZIp+QPhxTBlZ1N0JwWdVPQpCoWmNPWxq/fW8V5TrKtCGN+30RyXa1yj436aXU5lZppIcQVYCGMG61IdeTYoww49w80gSUO3kq384pt3Q3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0VYFplCbc036V6MzJFv/yhSvzHuxt/VlkJ6SzRpChXg=; b=ko86TjFrwWfQLqacYI6Rj6pD3dy3c1kRBuRq5Ae/w7jsb2qZQe5Jw5iOhCb+eueUdKNNjDneSM4Ctk40MERrWCSiBfaU7bRnIoG3BTpmsSXD1NuV61528uxgJ9NNGkaAPSlE6vGiTQcof++T6VqMvTRuIPKL1FOM9gNIpNfmsxXFODnDOJXUZzuhUNizohEi3v4s/jPoxIeTZ3YzLKzG5ekFj1gsBWX5tK4OTwtLeyvnB0l9OFrxoYGCN5Sjq/1eae/eu5C66SDwsHzSt3abZqMHlK+NFuE/gPrX7KuoBjFOYb8E8eaAtmHJ9WXOVNUjnhYN+nXL37Utats62sy79Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0VYFplCbc036V6MzJFv/yhSvzHuxt/VlkJ6SzRpChXg=; b=huix4qyuq9ra62bVKtjCAls7n7BAFArB42F8rB7rKe9qJwiM3dAc4uvKdV/5OfRDIWTJ7ARIFEULtcoBhBoWRv8uaXjOHjBEFnkaqgR8q1te1smh9Dx3k76BT6fqGNLXrqXB11Q4wXhH0g6naubnphyJaQpUMSK90nkRtXxdKfyXPVVrei+T+R9+nR6aiR0NhsHKzGgcArxBlGMr6BSwXpLFVGRFkoMKnRv20RiaUztHebd7ypFgKOyyle7JuAVtj8GCprzKiCsWHhZAVUzSuVhxqtYKIBcnwt4W4hA5WJvxqrqT3rIDtIr2L3foyXghHXMJqYtAipzwnIWSAZIHhQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DM4PR12MB6494.namprd12.prod.outlook.com (2603:10b6:8:ba::19) by DM6PR12MB4281.namprd12.prod.outlook.com (2603:10b6:5:21e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9160.18; Wed, 1 Oct 2025 04:18:40 +0000 Received: from DM4PR12MB6494.namprd12.prod.outlook.com ([fe80::346b:2daf:d648:2e11]) by DM4PR12MB6494.namprd12.prod.outlook.com ([fe80::346b:2daf:d648:2e11%6]) with mapi id 15.20.9160.015; Wed, 1 Oct 2025 04:18:40 +0000 From: Mikko Perttunen To: David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Thierry Reding , Jonathan Hunter , Sowjanya Komatineni , Luca Ceresoli , Prashant Gaikwad , Michael Turquette , Stephen Boyd , Linus Walleij , Mauro Carvalho Chehab , Greg Kroah-Hartman , Svyatoslav Ryhel , Jonas =?UTF-8?B?U2Nod8O2YmVs?= , Dmitry Osipenko , Charan Pedumuru , Diogo Ivo , Aaron Kling , Arnd Bergmann , Svyatoslav Ryhel Cc: dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-staging@lists.linux.dev Subject: Re: [PATCH v3 09/22] gpu: host1x: convert MIPI to use operation function pointers Date: Wed, 01 Oct 2025 13:18:37 +0900 Message-ID: <40456849.J2Yia2DhmK@senjougahara> In-Reply-To: <20250925151648.79510-10-clamor95@gmail.com> References: <20250925151648.79510-1-clamor95@gmail.com> <20250925151648.79510-10-clamor95@gmail.com> Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" X-ClientProxiedBy: TYCP286CA0223.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c5::11) To DM4PR12MB6494.namprd12.prod.outlook.com (2603:10b6:8:ba::19) Precedence: bulk X-Mailing-List: linux-clk@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB6494:EE_|DM6PR12MB4281:EE_ X-MS-Office365-Filtering-Correlation-Id: 586860af-aa58-4322-155c-08de00a199e5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|7416014|376014|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?VldnbFdIWFV3THVkMGpBdGtibFlIckpTdHVsUjlWNGFSQTVtTUhiRUFmZ1Yz?= =?utf-8?B?V3dLZDZ3SjN1OWU2SXd2U3hHOXM5RUFkVlYxSWVFdG1PU2JLZ0FyWjJhYzR4?= =?utf-8?B?QlR0RC9CdjQ0U1BjbXpMTlpVTm9hU0xSSmxHejErQ3R5MVhlaHpNcDgwZHRi?= =?utf-8?B?OVcxNmh5YlNzaW1ESldubTdpcDE4Z2FydUJtWnMvcTErN3Z0NitieTVoNkNS?= =?utf-8?B?TE5QNjRia0ZVcWhMdlFTSGs4bmxQYkI1Z2dxWkRvRXVKVVl2UTlQMkhWRGdz?= =?utf-8?B?Z0tidG8xcDdwcVhQcC9EcUhpRFQ0Ymk5Rm9hQ0k0cys5UWJiYytxcjhzeHRl?= =?utf-8?B?Q0s0QkQ3Qnl3YXZUdHFXZDV0QmtCUFd0Nk9pemVmUW80N3VXS0lwZXNybmlY?= =?utf-8?B?Vk5hcDIweVJBOTlxS25zSndWalpoR1RzZEllUUg1bmQzWnJJWFQ4RVd1L1BW?= =?utf-8?B?cXZuY250dVV4RTFLb3VPT1BKa3JDTWJtUUNwZlJUdDk5eXdUTW83RlNuRzRO?= =?utf-8?B?VWVxcGU3Vm0zRzJuVFVKZUQxdmJERzhtSUtjVEVXSSt1dEdYQjMvRzFIRnBO?= =?utf-8?B?c1l0bTlIL1RucU5BUjNCNVYzUGdoMDFLQ1d0YTl3RlNKTE8yMld2bVZGc3gz?= =?utf-8?B?bkV0VDVkMzA5bVpqT2ROWENOeVhteThDc3RLeDM5YkEyQndoVnBhNm5oVXdG?= =?utf-8?B?U0hFcm9lZ2EwTjlaMS9wOUlLaEtmbUNXejJuYk9odDl4dkUyK1dmdmN5TzI5?= =?utf-8?B?UmIvaDNPYW9mVUpSdzRyRjZyUTNBSEY0Q0kxYXptR2VBRmppbEJ2c2JicnAv?= =?utf-8?B?Rm44ZXhhVVdWeVBvdEovanZGTmEwNXJSMjIvZDlObVo4SVZNbGV3Si9iOC9R?= =?utf-8?B?NXJMcjhQOVhGSEZxVzcrcEo0WGZBRW5LdkpNbENqOWg0dDF0N1RVRHZVTThR?= =?utf-8?B?TWJ4SmhHcWhJK05kWkdhZ0k4anBJTzdGVXE2ZDl0MkQ3N0F6OWJqOFBiZWZh?= =?utf-8?B?YmVSNEVtWVVNZUJKdElWUTJRODMvdzU3MXczRzdnZC9DcmtiYWlUUGdrMjdm?= =?utf-8?B?Uk9XdkZQWXFyekFFeU92NHN3aUF1K3JZTXl5b01ab2M3ejFkTldpRWt4WmZv?= =?utf-8?B?dUlmcVBwWFlualU2UklUbU9ES1AvdTZXNUIySnlEVmVncVdJMG1EVHlDdHdG?= =?utf-8?B?SkkwaTlVeDJGZUR3Qi9WM0ZiQXMrUGNzaDVxWUpUd214V3pPQ3BrdmxMZXhQ?= =?utf-8?B?YXJYYjhJMUNjSW0rZkgyZmpiTUpEUWdJZ0ZldEJpNnVOYTZ3alpPdWo5SGtH?= =?utf-8?B?TFBWR3VSOWxJZ3dBKyszV0NsanFpMnBVcU1uTGRpYlFHcllBYWI3SGc5L1BC?= =?utf-8?B?WFRSWEpwdmhtdGpYTmNiVEhDNDROcWVUcm5pTFljVUhTRklxbVYwWnV5ZXc0?= =?utf-8?B?NDZ1OVBVOERrQWY1SThIK282d0pNWllYSGlDdGFxRmp0cnZqOEdyekk5WW1o?= =?utf-8?B?SmxBVElSM3BlV2Yrd0gyVVIzb1l1eHhNbGNBKzlaelNXNWVmRHhJMk9kdlZC?= =?utf-8?B?ZUFOSGlFbGphWlFXUk1vQTkzMWc0dy9Dc0FHaHhCL0lESUc3Vy9rMUYxbHN6?= =?utf-8?B?MkUzYzByWU9Nd3hCZldoUThRYnNGcTliaXM0Sm8wNmhVRlNSNkI4UktqQUln?= =?utf-8?B?YWNlSHJHREthRDFLRW1XODdVZGpqeFFvTTlOU2NEWTVsb0cwb3JVWng0czRn?= =?utf-8?B?WDZaRm9HczhGTnZyVk41ZTlHaWp1bUFJMmlMb1VHc2hTKzF0akdhdVdVYyt4?= =?utf-8?B?WDZTMFJxSnJzQkZ3MmtqT2pEak4zRURHR2E2OTdia1hxVHUvYlJweXVKRFdx?= =?utf-8?B?b200YjhkMTR1ODlRT0V3WW9paXVHYTJaSmk0RTNSMVBuVHQzZjZjWXYycjYw?= =?utf-8?B?ZUJDdTU3bTlSbDlvYVpBRnBqTmxtOVAzNElZMnljcWVOV0lPVXVzQVBHSW13?= =?utf-8?Q?FdI0cXr2Vbls1pjbM6Jln7DkDkmRPQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB6494.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(7416014)(376014)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cmRlTCtnUDE0SVB4STBseXM4VzhYMmJiV0JzYVZGYnByVC9WMER2dncyRksv?= =?utf-8?B?bklqSURzemNyTnFEdGE3Q0ljRGhPU3BaQ2p0ZyttZjlkcXpaTk9YaDlsaVgx?= =?utf-8?B?NHZ5OGptMmdxanNCUXlzZHowOXlRSlErMXlsbHlWZUVMM0FqOFFtUCtKNitt?= =?utf-8?B?dFdzUUl1OWg3d0YxdnZPbVVkN1FOWkk5YUhZOUlEOGFReEVZOWk1UHM3eXlD?= =?utf-8?B?MDRXWndoanFKZ3JMbEdNV2JXR0UzOW8xRThaQXhaTnNZSUhsTmJaOXhBQS9q?= =?utf-8?B?NUNOR3NwZytRRWFHK0JoU1k0VmZFTzltbTI2RjFUdHN4T3RZVk1CWW9Valg0?= =?utf-8?B?dWpHUzhZM0tnQmM1MVducW8zcTR0NXczMFZ2OFlsWjRPdzZDRXhybTE3TEhM?= =?utf-8?B?UUNWamR5aU05N1l4WHVyWVg0eXlucElYeEt2K2tFK1QrSXk0SlV5NHZLWTdk?= =?utf-8?B?R0dhUG9FRFRYTGhFSTJvVEpGc2YxeVNBNjdSd1F4bDRUUlJvdUhGcVQvc2pN?= =?utf-8?B?azdiWm8rdjNtZXBpSi9BanRXajdLa0tVTkFVd0RmUGFyYldJNUtlVUIzVFNw?= =?utf-8?B?d2FhNG8wMld1bXFLNEVIV0FVRHhOak1aMzBxOXZOaTdDTHpPVFBZbWVESXNx?= =?utf-8?B?VGJ2LzFpN1RubXRGc1BycVJRNWF4bjd4czBkcHJNdVQ2NGsxVXltR25zOTNy?= =?utf-8?B?WDhzYitIWlRvQ0loZHFCM3EyTHVlWVN0UXJxQlEvQ0NPa3dpQ0NNMTJCUGpr?= =?utf-8?B?TUVNMUhsOU1DRVdlNEI0amFsZUdUMnBCY2hZbnYrMUVvaFNJRFdaaXl1NkNS?= =?utf-8?B?YnFXREQyc0lRcno1dklpNThQOGZSN1NMampLWXp6emoxa0g4aFM5K29PSERH?= =?utf-8?B?dnpaMmpvMXIzZjMzV0JIaWZDUGt6cEJic2FmN0FZWTlremRqWVprcmU1OWlV?= =?utf-8?B?c0hOcEcyV0RKYUVEck1BVk43SE1VWUlJU1orREJwQXBRQS9iNVlIQUxiR2JZ?= =?utf-8?B?bXhsY2I0cS8vd3VKUlh6MndQSlY4SVdSY2Qrd3JKbi9jZCtNRGQyb2JDWkdF?= =?utf-8?B?QUhKOUsvTCs5UEF1aFQ1QXdrNmRzcUlwYmd6aHc5Z1hNVnRFRmFZQjZPK2s2?= =?utf-8?B?UDJ0OFZ0TzYrR2t3Q3kwdUtPeTNBeE92WFY2cmZ3TmdLb1pYWnFMdk4wSXRO?= =?utf-8?B?SGxCU2hZZEtiV0ZlbUF3ZWtRcm9BQzJ6U1pjMzFhVm0ydDZ2ZTFtaUdrVlAr?= =?utf-8?B?ODhsRWc5a296Q0wybEhqWVpHakkyNEVqSkV6SVRGY2ovb0cxSGJyWTF0aU9k?= =?utf-8?B?YThNcFpOYjdqRE5wNk96bmxaTFdyczJCYytSRFgrWS9xSjZUQ0ZpZi8zVlo3?= =?utf-8?B?dE03MUNmSDlOYzR0ZGhlRGYwc20ydi94cVh3cXpLVG5rcXp2ZlU0V29PQXN6?= =?utf-8?B?RFhzRmZMWm1PQktqL0VDS1RUeHR5Z3JYZjZNNnF3Q01TaVN4UFQ4bmFEelBP?= =?utf-8?B?Qm56b1lnTFo2dTV0QXFDS3hQNnhjS1VNYW9TUXZFTmpPd0dNT1RaNFZ5bXht?= =?utf-8?B?RDlWbTdiMEZ5cUpnVXZqcStYZTY5YmF4YnpqdkxkOUNwTUdUUXVwak5TNmlE?= =?utf-8?B?MHFva1IraGcyTUJXN3k1d01XUU5NU1I2OE5yNXo1eHdDczFPd2s0NHFCdHVl?= =?utf-8?B?aU9HTkN4blZkU2lyM1JCY3UwcDNoYkFOdnhkRktpL1NsOUpJaUE0QXlneW85?= =?utf-8?B?WmhBRjBaTUVHU0IzTWFHSWlDc0YzNWJHejVtM1lRN0VWSlV4U1NYN20rOTdP?= =?utf-8?B?MWhkcFl2U0NRNFlEUlUrb0NoQUIxeUtBZ3hXaEZUVWs5Yzl0UzNGQTVVazdy?= =?utf-8?B?TzhvTjlJNTRoOGxoa1VWckFQenJIdEhJaUFobFV1R2FuMmtQekdDVGpOdzNS?= =?utf-8?B?YlVKK2R1clFZUHVJODAyM0dVNDU5aXZiaEw3b1RYRHIyU0ZWMHZJeXVTYk1h?= =?utf-8?B?QXNRZXdKOHk3OFBFZ1FtcVNtc3o0bzEvRFhCL0ZqOVRmcHJWSzkxYnc5eXgz?= =?utf-8?B?ckZ5VW1TL3ZxelhFS2VOS1JrMWJ1QkIxSWhsN2ZxNDF3c0VkV2Y1eWdlVGE5?= =?utf-8?B?cEt6TDFxdldQQkgxOTFUb05xbFRndDhtU1J6MlpwdFdNSWVjLy9uRGhocWZF?= =?utf-8?B?am9YUXNCSHFtZFc5ZzJsNFZjd1lpRWhFM0xWTk85OWRJVC9qeVhIa1dMcFNU?= =?utf-8?B?cmpJbDF1MWhSTkRobEdwQkFLd3Z3PT0=?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 586860af-aa58-4322-155c-08de00a199e5 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB6494.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Oct 2025 04:18:40.8132 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: ilndaIISiljrFsW3fruKWHYt4Td6MLDBkDg+AubWcv32w1yAmJr2prg8mgxdBAbNDQoEZeAuJxFqc+wVoDeyog== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4281 On Friday, September 26, 2025 12:16=E2=80=AFAM Svyatoslav Ryhel wrote: > Convert existing MIPI code to use operation function pointers, a necessar= y > step for supporting Tegra20/Tegra30 SoCs. All common MIPI configuration > that is SoC-independent remains in mipi.c, while all SoC-specific code is > moved to tegra114-mipi.c (The naming matches the first SoC generation wit= h > a dedicated calibration block). Shared structures and function calls are > placed into tegra-mipi-cal.h. >=20 > Signed-off-by: Svyatoslav Ryhel > --- > drivers/gpu/drm/tegra/dsi.c | 1 + > drivers/gpu/host1x/Makefile | 1 + > drivers/gpu/host1x/dev.c | 2 + > drivers/gpu/host1x/dev.h | 2 + > drivers/gpu/host1x/mipi.c | 501 +++--------------------- > drivers/gpu/host1x/tegra114-mipi.c | 483 +++++++++++++++++++++++ > drivers/staging/media/tegra-video/csi.c | 1 + > include/linux/host1x.h | 10 - > include/linux/tegra-mipi-cal.h | 56 +++ > 9 files changed, 594 insertions(+), 463 deletions(-) > create mode 100644 drivers/gpu/host1x/tegra114-mipi.c > create mode 100644 include/linux/tegra-mipi-cal.h >=20 > diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c > index 64f12a85a9dd..278bf2c85524 100644 > --- a/drivers/gpu/drm/tegra/dsi.c > +++ b/drivers/gpu/drm/tegra/dsi.c > @@ -14,6 +14,7 @@ > #include > #include > #include > +#include > =20 > #include