From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 9B9E9C433FE for ; Mon, 28 Nov 2022 07:37:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:MIME-Version: Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References: Message-ID:Date:Subject:CC:To:From:Reply-To:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=EpH1ipbmAZj61F3BLPpZLUOToV R8aCKXlyyPUzeBbDilyhk3PCOaXF4qSSuR/RdO+Appw0IUxNMzHUSGNc9YBoEUflKMFblc+Xb4UU5 KL9Bl+QbeKvu/ppebZmYupvl86pJ2ITT5r0sXwwPNjWa8nhYvVEgkJDvzyDvA8LYm94vmMDJdynfV bvx6/giAkTzJv6FlXEMQDnQbXTdFRACQDGS0F5haBpLOpj2yHxM0U/jEEs3GW254zfQwCp8SkVHkw dOgOAqhv+Pr7iLP4EW5pqTrCQxRthz30AKaYsYo1wq/k0ceQLfpZ3AA0pzXgEJDks7xVNcLM5yK3i dP5oJWYw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ozYhL-00HMEB-29; Mon, 28 Nov 2022 07:37:03 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ozYh6-00HM9B-Ba; Mon, 28 Nov 2022 07:36:50 +0000 X-UUID: 07ffad0f6abf4d7b9f89bcb5980fdd55-20221128 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=MIME-Version:Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References:Message-ID:Date:Subject:CC:To:From; bh=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=Wt3KnyLwQNU7TivD5qh6G1JxUf4jTaI+Ehwpfp0CKqEJIz6+XmxRnOM9J6LjwIM7Iz5vJ0niGIDiVYkq4bk0qt44T/I6iLGYJ3RPIzoTGULOEcO3IDfNetrlAi/r5hHnGJTRjIE4g3YHc249cevU3+hTQpY9UN8Zf5zxD0j4QX0=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.14,REQID:f670450b-cc47-4769-a626-efa018bd48a6,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:dcaaed0,CLOUDID:45b56bdc-6ad4-42ff-91f3-18e0272db660,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:11|1,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0 X-UUID: 07ffad0f6abf4d7b9f89bcb5980fdd55-20221128 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 29287999; Mon, 28 Nov 2022 00:36:43 -0700 Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.792.15; Mon, 28 Nov 2022 15:26:05 +0800 Received: from APC01-TYZ-obe.outbound.protection.outlook.com (172.21.101.239) by mtkmbs10n1.mediatek.com (172.21.101.34) with Microsoft SMTP Server id 15.2.792.15 via Frontend Transport; Mon, 28 Nov 2022 15:26:05 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=anUgoEbDkL/FtTSH7TQlDwE5h7/RGSxmBKfuplEcKjL6xkvCBazPXOWQDheIZpRKQPkyK96vphX0ONg8QthNKjPlJLK5y9qQcwdP7MCkeNKqFpzcU6n7dAZ/a/7TZCuya5NVFxcjd3tUdo8BwnKyI77+w2QPN35a4B7TNhPwj0iM2O9/hqZcUoiZF310DjMHPH4Hh5RNv+ru3KSqnA6EGN3iP9l7s2C1qhlCm5+rLuJ6ObvrhGWBb0TvX+KUvPboE8bWaxrcaLOr+xRhqK6+B3z59HU/ItMq83ZmywaPlI96gtYfBnBI5mNx9qijSfLShecGNlrth8cHZS7bpyFc/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=YiTPRNdZdV6mPDPAjjWbNn621kYeWP6DhR63/o5vqHDfsTal8r0fPoIfw21UW1pbHC+TpXS0FrNl9cvI2DhB0bAUfFWSq/bRTlIFGNsUiD4gVleCqHQfDDef6ZrC8qUNQN/zwXexdPVzOh/sIvWuYwKwQ9lMgUcGv0R+IzLAxPO9SaaMTe7E3ksI0h8z7h++BP/roFIVi+cI6ku8dSvtwGeWbJOH5krZu3rzMleZToTMrwCA/z95ndddv2PG4XnjuleWCFcgDXj6JaGOUSMtifi4xbRW4B5Yrj9s0KDtQp9avyHBSCBoNpwV9pQSfW0dZaobkwvr9SKUWcR8cvO9GA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mediatek.com; dmarc=pass action=none header.from=mediatek.com; dkim=pass header.d=mediatek.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mediateko365.onmicrosoft.com; s=selector2-mediateko365-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=vSJ3DX9G0Nc3x9P6H66d03Da0NtILHgyw7nfoNAhXKozr3X1L9kvm5PXcTbS3WXWWLwxS4ZsQkmlwulpEf5KIIaQIOpZRldFihBUTwHhzYitQujZoMUH2zwlZuBYZpalcEHwNvSF8MJ6tkrnwl2Akcwec9qWCwj6roOI97ZL454= Received: from KL1PR03MB5062.apcprd03.prod.outlook.com (2603:1096:820:1a::22) by PUZPR03MB7135.apcprd03.prod.outlook.com (2603:1096:301:113::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.21; Mon, 28 Nov 2022 07:26:03 +0000 Received: from KL1PR03MB5062.apcprd03.prod.outlook.com ([fe80::9585:3a04:b796:b696]) by KL1PR03MB5062.apcprd03.prod.outlook.com ([fe80::9585:3a04:b796:b696%5]) with mapi id 15.20.5857.020; Mon, 28 Nov 2022 07:26:03 +0000 From: =?utf-8?B?Q2h1bmZlbmcgWXVuICjkupHmmKXls7Ap?= To: "vkoul@kernel.org" CC: "llvm@lists.linux.dev" , "linux-mediatek@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "nathan@kernel.org" , "kishon@ti.com" , =?utf-8?B?RWRkaWUgSHVuZyAo5rSq5q2j6ZGrKQ==?= , =?utf-8?B?VGlhbnBpbmcgRmFuZyAo5pa55aSp5bmzKQ==?= , "linux-arm-kernel@lists.infradead.org" , "matthias.bgg@gmail.com" , "linux-phy@lists.infradead.org" , "trix@redhat.com" , "angelogioacchino.delregno@collabora.com" , "ndesaulniers@google.com" Subject: Re: [PATCH v4 3/3] phy: mediatek: tphy: add debugfs files Thread-Topic: [PATCH v4 3/3] phy: mediatek: tphy: add debugfs files Thread-Index: AQHY9QhG35CIOR1jTk2qYSnofBdXwa5Ob3gAgAWbzQA= Date: Mon, 28 Nov 2022 07:26:02 +0000 Message-ID: <70407a789b48a4fbd498e392450eb9db76e025bf.camel@mediatek.com> References: <20221110132716.12294-1-chunfeng.yun@mediatek.com> <20221110132716.12294-3-chunfeng.yun@mediatek.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mediatek.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: KL1PR03MB5062:EE_|PUZPR03MB7135:EE_ x-ms-office365-filtering-correlation-id: 21e6dfa4-d55f-443f-27a0-08dad111ce22 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jhTHAuRrrjRF3GHMnhl4fYdToRfL6HRp2zHIN4jaOWVSMcQtjt1Ef7oUrXGMKkd9lrld19tvD0S2rdPvwX7lCJdyVbOrpCIaXuuf3o+HleNt43xdXAOBqmJJcY08je7ehYDH87EiXA82IEJMPfeRP5zXD1cMxoer2zbForUuk3opy0vae4unm4IVDVdmjh7LxPDc7a3eDgCO69IG4rFK7juHiWsEh1ITzGdjx8cw/VEtXKttzWVJyx1NoJcQxuvd770AVTYcWX2NHYtPooIx0PVafIw9k2gHiEcKW41fR/3BH0++d6YLIkLHWN0mXY3yafPScSs6FcjsChCBE9Pigi8L11R87ftzkoU3beoFr9YI+ExvU4NfK5V1fWFygWPqdCZK56oLA8PDyn2xtsaeeKb2SWGLxL5dIXfrqfM+0BqfVRD2nqncJB7xxKvdcLCHZSY3BzHzdUS8RYM9yLBfpy+0M2/BId4tv4quq/Fof7hXo04MeAU6qbG/3ZClA58yX2CYfV7Wq6+wh3MT6uNzYHNtqtYx//r8LdXYS7OiTcVFDIbSkNpOS5zGzdg3ushw4ThYWFhKCSTaLucbYONWA+RHBvezwXeuSoYlYbSaSQuOqISd7kiZED4WjCge/4yvOrdv3oMOgXUayf6LDhFHynAAgQlFDFm6hn+ymnLJb19lKy8K6l4M9D/ZNL4g4ZPDi/Ho4UhtKRxETuF3pbWQQz0fJYUaqI7CsdyZrlfnVhk20STyEz04FhdDYRHx8iwN x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:KL1PR03MB5062.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(366004)(39860400002)(346002)(136003)(376002)(451199015)(6506007)(38100700002)(53546011)(7416002)(83380400001)(6512007)(26005)(86362001)(36756003)(316002)(5660300002)(8936002)(66946007)(76116006)(91956017)(66556008)(66476007)(66446008)(4326008)(8676002)(64756008)(122000001)(85182001)(6916009)(54906003)(71200400001)(2616005)(4001150100001)(30864003)(2906002)(478600001)(6486002)(38070700005)(41300700001)(186003)(99106002)(309714004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WXQxMlFGRnpkdmJpZHpIQTl1ajVad3lKWS8wRThMNmFLR0JhU3M1aXl6ZnZq?= =?utf-8?B?VXNJUjVjUHBsR2ZuWFV2TGZtK090N0lvWjRwTTJaMFh2bVYvQjRZL0tMTHNv?= =?utf-8?B?MTZNelhhbEhmc0pQaVpEbUxRQktrSXZ1ZnVLTmwrMXJudjFSWGR3T0VuYStY?= =?utf-8?B?c1ZvMC9XbGxRdy8vcXU3b3lkNWt0L1FZOVZiMmh6RjNnUXFMWE1EeE4rODQ3?= =?utf-8?B?VThOQ1dZb3BwSGNRbXloWkQ1SVBSR01Rd3JuQmR6bUI4R2hRdndHQjRteC8y?= =?utf-8?B?cW9UbTFUUUNDL1Ric0U1anZRWWN4bmRodFY4aXZnVVlyWXhObUQ4QVNTcUF3?= =?utf-8?B?NzJZTUFwWlg4eTlPR1l2ZWo2b0NCaGppMnlNcDVxbHJidDAzemlHMHBLU25y?= =?utf-8?B?ZmtvNjdOWHB0M2d1VU5TLzI4Mk1rMXRPOXVhM2xGbnNiUXhTN3ByY0V0VkVm?= =?utf-8?B?b2IvVGtYOW81aWJWaTFoNFBJZlRNeFhRblh6MkhPMUxWNlJEbkFPSHR3YzlV?= =?utf-8?B?dXp0bWwwYk5MSGR2Z2N3eFY3ajVPZFF3UDJJcmJPTGdGQWtxZnZlUU1kcWx2?= =?utf-8?B?R3YxMW9jZDZPb1hLQjRxcFY4SXBkWXBkR2V2SzUyWFd3N0JXY2NGT2hUYTNR?= =?utf-8?B?Z3VLNHRMRGV6ZUFIWFpnRkRHRVVMaC9oTGcxZHp5Y2VXVEUvVVE0d0xpd2kx?= =?utf-8?B?L0FNR3J4TGtNOHlBWWQwV3NyT3BjYm5PWFc4YWNacWhZeWE5bWdYR1dtMjEw?= =?utf-8?B?NlhyRWhyR2Vic0RLcyt2ZXVxbi9nM3ZPVjBnSUc3Q0R0ZWZNbGp4QThSRXNm?= =?utf-8?B?WVdRcmExM1lrTXNHVHJqOTRFTnNibEZzQWNkc3pISTB4cXBDTjl0U3BYSkJW?= =?utf-8?B?WlFYWTd3OFhTSy9LVExOZTRUOURGQ2JmcmJ4SVNHVEo0bS9RMERSUENkTEhF?= =?utf-8?B?M0VMYVlYSmxMV29WVTNhT09SWkZ3dm1JUnRBdTFwc2o0UlExS05wTUJBakJC?= =?utf-8?B?MDNkTy9tL2dQZ25vdVN2QzJPTGVtYm9YTXY4RkpwbW0rNElmUGUvbWpjdDRu?= =?utf-8?B?NWRNQ3BobFU4U0pkUEpuK2FoaWdOaEdWRkE1YThoQitOU1I3bkpDYkZIM1U4?= =?utf-8?B?VmFFWERBVmloRnlId1FHb3RUSFJCUXpob21sc0toY0t0bG8xOUx0WWRvdk1S?= =?utf-8?B?Z0xYMVFMZk5uRExHRjBoeW1TSmd4ZUJmQVlDbHdJMVZxWGYxai9Id3dOUS9i?= =?utf-8?B?Zkx4VjgyYTdiY0RkQnBBbERhQVVTRDloQ1pGb2FNK3g0K0pvaVRwR2NxN09k?= =?utf-8?B?NWJtL0tIWWZJdEJDSnBuZVFMMkxQdUw1Z3NCeGR0YUpPNmZpcERVQjdnZ2t3?= =?utf-8?B?WW9uZnZ4U0lFMnRQYnJCNjdsSVJ2RDcxUnBwTno2Vm02c2dWU0t5b0EvdXpK?= =?utf-8?B?Q0xFOXdmdnhGMWtjN21NRUZCdTJLK1pQSEFzU3FKbEp1R2tkaFNOT1dObnFv?= =?utf-8?B?MzFYcTlZcGVaRS8rQkJxM0Y2dEdJQ0JUYU9aM3Z4dW9Zdk5jWWN1aHVlUEMv?= =?utf-8?B?Q0tNNjFxcXJOb1FXWkZoanplVjlkVVZ6ZzI2bTZLYThsbU9yREdXdVcyYzlu?= =?utf-8?B?ZlVPZHNKUDZhNTZ3eG50VlBjcUdkUU9NcW9hZHQ1WDRDMk4vTHhab01CL0wx?= =?utf-8?B?YkNLUzBYTEpJOGU0M3dtTXdNSFRuKzFHOVdmVS94MTRSMWxHVjZrZWUzbEF5?= =?utf-8?B?bndLN3pOS1F2RmVHMWpZMVREZDEyRG56VUppemJUdWVLTmt4ZWgzMmxZTEEr?= =?utf-8?B?TzBPL1NjdjVpSGk3Rnk0NGt4elZhWXNZSnNvZWF2eENvK3lZRTNiZ2c4dDZu?= =?utf-8?B?RFRlMHQ0b0FJL2tJY2wxNVVQYTRweGEwbU9DMFRGSkJuVmFXRTNPNUdHWVUx?= =?utf-8?B?cnVFeldZNWpSV3pFdmNydXlPa0cwVDJjM3NkMW5oUkhWZXdSZGErcmUxZk1Z?= =?utf-8?B?SU8rWk85Q01KUEN1ZVVma3RMUXJ4WG5zTzZsY0U2NFB5cCtwd1VYOE9GcUVh?= =?utf-8?B?WitjUktvVTBUc1FCOEZFcVdnbjdkY1RFVFlNMDJHL1B5aTdCSFdwZk1PTlAy?= =?utf-8?B?ZVorLzhjQmtGODRiRHJYbXh0ci9tSkFnSGJaUmhBQTVwMFZsVGZPN3AyaXYx?= =?utf-8?B?U0E9PQ==?= Content-Type: text/plain; charset="utf-8" Content-ID: <0164C0501224D244919674F4131B309B@apcprd03.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: KL1PR03MB5062.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 21e6dfa4-d55f-443f-27a0-08dad111ce22 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Nov 2022 07:26:02.9184 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a7687ede-7a6b-4ef6-bace-642f677fbe31 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Z8QhKB1U81Z4ZudOmQPCfH+DUKaL2QEVbWZDFZRYWRgByfYfdUL4ZAxNdL2lpz25YYBvyLSZi05lE1Y7ksbId4KpPrePEnxWcmoD5vzVRaM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PUZPR03MB7135 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221127_233648_448808_E734AF2E X-CRM114-Status: GOOD ( 22.72 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org T24gVGh1LCAyMDIyLTExLTI0IGF0IDIzOjE3ICswNTMwLCBWaW5vZCBLb3VsIHdyb3RlOg0KPiBP biAxMC0xMS0yMiwgMjE6MjcsIENodW5mZW5nIFl1biB3cm90ZToNCj4gPiBUaGVzZSBkZWJ1Z2Zz IGZpbGVzIGFyZSBtYWlubHkgdXNlZCB0byBtYWtlIGV5ZSBkaWFncmFtIHRlc3QNCj4gPiBlYXNp ZXIsDQo+ID4gZXNwZWNpYWxseSBoZWxwZnVsIHRvIGRvIEhRQSB0ZXN0IGZvciBhIG5ldyBJQyB3 aXRob3V0IGVmdXNlDQo+ID4gZW5hYmxlZC4NCj4gPiANCj4gPiBTaWduZWQtb2ZmLWJ5OiBDaHVu ZmVuZyBZdW4gPGNodW5mZW5nLnl1bkBtZWRpYXRlay5jb20+DQo+ID4gLS0tDQo+ID4gdjQ6IGZp eCBidWlsZCB3YXJuaW5nIG9mIHNvbWV0aW1lcyB1bmluaXRpYWxpemVkIHZhcmlhYmxlDQo+ID4g DQo+ID4gdjM6IGZpeCB0eXBvIG9mICJkZWJ1Z2ZzIiBzdWdnZXN0ZWQgYnkgQW5nZWxvR2lvYWNj aGlubw0KPiA+IA0KPiA+IHYyOiBhZGQgQ09ORklHX1BIWV9NVEtfVFBIWV9ERUJVR0ZTIHN1Z2dl c3RlZCBieSBBbmdlbG9HaW9hY2NoaW5vDQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvcGh5L21lZGlh dGVrL0tjb25maWcgICAgICAgIHwgICA1ICsNCj4gPiAgZHJpdmVycy9waHkvbWVkaWF0ZWsvcGh5 LW10ay10cGh5LmMgfCA0MDUNCj4gPiArKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+ID4g IDIgZmlsZXMgY2hhbmdlZCwgNDA5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gPiAN Cj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvbWVkaWF0ZWsvS2NvbmZpZw0KPiA+IGIvZHJp dmVycy9waHkvbWVkaWF0ZWsvS2NvbmZpZw0KPiA+IGluZGV4IDMxMjVlY2I1ZDExOS4uZTlmZGZl OWY1MTlmIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGh5L21lZGlhdGVrL0tjb25maWcNCj4g PiArKysgYi9kcml2ZXJzL3BoeS9tZWRpYXRlay9LY29uZmlnDQo+ID4gQEAgLTI3LDYgKzI3LDEx IEBAIGNvbmZpZyBQSFlfTVRLX1RQSFkNCj4gPiAgCSAgbXVsdGktcG9ydHMgaXMgZmlyc3QgdmVy c2lvbiwgb3RoZXJ3aXNlIGlzIHNlY29uZCB2ZXJzaW9uLA0KPiA+ICAJICBzbyB5b3UgY2FuIGVh c2lseSBkaXN0aW5ndWlzaCB0aGVtIGJ5IGJhbmtzIGxheW91dC4NCj4gPiAgDQo+ID4gK2NvbmZp ZyBQSFlfTVRLX1RQSFlfREVCVUdGUw0KPiA+ICsJYm9vbCAiQWRkIFQtUEhZIERlYnVnZnMgRmls ZXMiDQo+ID4gKwloZWxwDQo+ID4gKwkgIFNheSBZIGhlcmUgdG8gYWRkIGRlYnVnZnMgZmlsZXMg bWFpbmx5IGZvciBULVBIWSBIUUEgdGVzdC4NCj4gDQo+IFdoeSBkbyB3ZSBuZWVkIGEgY29uZmln IG9wdGlvbiBmb3IgdGhpcywgaXMgZGVidWdmcyBjb25maWcgb3B0aW9uIG5vdA0KPiBzdWZmaWNp ZW50Pw0KV2UgbWF5IHdhbnQgdG8gZGlzYWJsZSB0aGVzZSBmaWxlcyBldmVuIGRlYnVnZnMgY29u ZmlnIGlzIGVuYWJsZWQgaW4NCnJlbGVhc2UgaW1hZ2UsIGFuZCBwcmVmZXIgdG8gdXNlIHRoZW0g b25seSB3aGVuIGJyaW5nIHVwIG5ldyBJQy4gDQoNCj4gDQo+ID4gKw0KPiA+ICBjb25maWcgUEhZ X01US19VRlMNCj4gPiAgCXRyaXN0YXRlICJNZWRpYVRlayBVRlMgTS1QSFkgZHJpdmVyIg0KPiA+ ICAJZGVwZW5kcyBvbiBBUkNIX01FRElBVEVLIHx8IENPTVBJTEVfVEVTVA0KPiA+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRwaHkuYw0KPiA+IGIvZHJpdmVycy9w aHkvbWVkaWF0ZWsvcGh5LW10ay10cGh5LmMNCj4gPiBpbmRleCBlOTA2YTgyNzkxYmQuLmYyMjBh OWE0MDliZiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BoeS9tZWRpYXRlay9waHktbXRrLXRw aHkuYw0KPiA+ICsrKyBiL2RyaXZlcnMvcGh5L21lZGlhdGVrL3BoeS1tdGstdHBoeS5jDQo+ID4g QEAgLTcsNiArNyw3IEBADQo+ID4gIA0KPiA+ICAjaW5jbHVkZSA8ZHQtYmluZGluZ3MvcGh5L3Bo eS5oPg0KPiA+ICAjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9k ZWJ1Z2ZzLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KPiA+ICAjaW5jbHVkZSA8 bGludXgvaW9wb2xsLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+DQo+ID4g QEAgLTI2NCw2ICsyNjUsOCBAQA0KPiA+ICANCj4gPiAgI2RlZmluZSBUUEhZX0NMS1NfQ05UCTIN Cj4gPiAgDQo+ID4gKyNkZWZpbmUgVVNFUl9CVUZfTEVOKGNvdW50KSBtaW5fdChzaXplX3QsIDgs IChjb3VudCkpDQo+ID4gKw0KPiA+ICBlbnVtIG10a19waHlfdmVyc2lvbiB7DQo+ID4gIAlNVEtf UEhZX1YxID0gMSwNCj4gPiAgCU1US19QSFlfVjIsDQo+ID4gQEAgLTMxMCw2ICszMTMsNyBAQCBz dHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSB7DQo+ID4gIAlzdHJ1Y3QgY2xrX2J1bGtfZGF0YSBjbGtz W1RQSFlfQ0xLU19DTlRdOw0KPiA+ICAJdTMyIGluZGV4Ow0KPiA+ICAJdTMyIHR5cGU7DQo+ID4g KwlzdHJ1Y3QgZGVudHJ5ICpkYmdmczsNCj4gPiAgCXN0cnVjdCByZWdtYXAgKnR5cGVfc3c7DQo+ ID4gIAl1MzIgdHlwZV9zd19yZWc7DQo+ID4gIAl1MzIgdHlwZV9zd19pbmRleDsNCj4gPiBAQCAt MzMyLDEwICszMzYsMzkxIEBAIHN0cnVjdCBtdGtfdHBoeSB7DQo+ID4gIAljb25zdCBzdHJ1Y3Qg bXRrX3BoeV9wZGF0YSAqcGRhdGE7DQo+ID4gIAlzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqKnBo eXM7DQo+ID4gIAlpbnQgbnBoeXM7DQo+ID4gKwlzdHJ1Y3QgZGVudHJ5ICpkYmdmc19yb290Ow0K PiA+ICAJaW50IHNyY19yZWZfY2xrOyAvKiBNSFosIHJlZmVyZW5jZSBjbG9jayBmb3Igc2xldyBy YXRlDQo+ID4gY2FsaWJyYXRlICovDQo+ID4gIAlpbnQgc3JjX2NvZWY7IC8qIGNvZWZmaWNpZW50 IGZvciBzbGV3IHJhdGUgY2FsaWJyYXRlICovDQo+ID4gIH07DQo+ID4gIA0KPiA+ICsjaWYgSVNf RU5BQkxFRChDT05GSUdfUEhZX01US19UUEhZX0RFQlVHRlMpDQo+ID4gKw0KPiA+ICtlbnVtIHUy X3BoeV9wYXJhbXMgew0KPiA+ICsJVTJQX0VZRV9WUlQgPSAwLA0KPiA+ICsJVTJQX0VZRV9URVJN LA0KPiA+ICsJVTJQX0VGVVNFX0VOLA0KPiA+ICsJVTJQX0VGVVNFX0lOVFIsDQo+ID4gKwlVMlBf RElTQ1RILA0KPiA+ICsJVTJQX1BSRV9FTVBIQVNJUywNCj4gPiArfTsNCj4gPiArDQo+ID4gK2Vu dW0gdTNfcGh5X3BhcmFtcyB7DQo+ID4gKwlVM1BfRUZVU0VfRU4gPSAwLA0KPiA+ICsJVTNQX0VG VVNFX0lOVFIsDQo+ID4gKwlVM1BfRUZVU0VfVFhfSU1QLA0KPiA+ICsJVTNQX0VGVVNFX1JYX0lN UCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB1Ml9waHlf ZmlsZXNbXSA9IHsNCj4gPiArCVtVMlBfRVlFX1ZSVF0gPSAidnJ0IiwNCj4gPiArCVtVMlBfRVlF X1RFUk1dID0gInRlcm0iLA0KPiA+ICsJW1UyUF9FRlVTRV9FTl0gPSAiZWZ1c2UiLA0KPiA+ICsJ W1UyUF9FRlVTRV9JTlRSXSA9ICJpbnRyIiwNCj4gPiArCVtVMlBfRElTQ1RIXSA9ICJkaXNjdGgi LA0KPiA+ICsJW1UyUF9QUkVfRU1QSEFTSVNdID0gInByZWVtcGgiLA0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHUzX3BoeV9maWxlc1tdID0gew0KPiA+ICsJ W1UzUF9FRlVTRV9FTl0gPSAiZWZ1c2UiLA0KPiA+ICsJW1UzUF9FRlVTRV9JTlRSXSA9ICJpbnRy IiwNCj4gPiArCVtVM1BfRUZVU0VfVFhfSU1QXSA9ICJ0eC1pbXAiLA0KPiA+ICsJW1UzUF9FRlVT RV9SWF9JTVBdID0gInJ4LWltcCIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHUy X3BoeV9wYXJhbXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp1bnVzZWQpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0ID0gc2YtPnByaXZhdGU7DQo+ ID4gKwljb25zdCBjaGFyICpmbmFtZSA9IGZpbGVfZGVudHJ5KHNmLT5maWxlKS0+ZF9pbmFtZTsN Cj4gPiArCXN0cnVjdCB1MnBoeV9iYW5rcyAqdTJfYmFua3MgPSAmaW5zdC0+dTJfYmFua3M7DQo+ ID4gKwl2b2lkIF9faW9tZW0gKmNvbSA9IHUyX2JhbmtzLT5jb207DQo+ID4gKwl1MzIgbWF4ID0g MDsNCj4gPiArCXUzMiB0bXAgPSAwOw0KPiA+ICsJdTMyIHZhbCA9IDA7DQo+ID4gKwlpbnQgcmV0 Ow0KPiA+ICsNCj4gPiArCXJldCA9IG1hdGNoX3N0cmluZyh1Ml9waHlfZmlsZXMsIEFSUkFZX1NJ WkUodTJfcGh5X2ZpbGVzKSwNCj4gPiBmbmFtZSk7DQo+ID4gKwlpZiAocmV0IDwgMCkNCj4gPiAr CQlyZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArCXN3aXRjaCAocmV0KSB7DQo+ID4gKwljYXNlIFUy UF9FWUVfVlJUOg0KPiA+ICsJCXRtcCA9IHJlYWRsKGNvbSArIFUzUF9VU0JQSFlBQ1IxKTsNCj4g PiArCQl2YWwgPSBGSUVMRF9HRVQoUEExX1JHX1ZSVF9TRUwsIHRtcCk7DQo+ID4gKwkJbWF4ID0g RklFTERfTUFYKFBBMV9SR19WUlRfU0VMKTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwlj YXNlIFUyUF9FWUVfVEVSTToNCj4gPiArCQl0bXAgPSByZWFkbChjb20gKyBVM1BfVVNCUEhZQUNS MSk7DQo+ID4gKwkJdmFsID0gRklFTERfR0VUKFBBMV9SR19URVJNX1NFTCwgdG1wKTsNCj4gPiAr CQltYXggPSBGSUVMRF9NQVgoUEExX1JHX1RFUk1fU0VMKTsNCj4gPiArCQlicmVhazsNCj4gPiAr DQo+ID4gKwljYXNlIFUyUF9FRlVTRV9FTjoNCj4gPiArCQlpZiAodTJfYmFua3MtPm1pc2MpIHsN Cj4gPiArCQkJdG1wID0gcmVhZGwodTJfYmFua3MtPm1pc2MgKyBVM1BfTUlTQ19SRUcxKTsNCj4g PiArCQkJbWF4ID0gMTsNCj4gPiArCQl9DQo+ID4gKw0KPiA+ICsJCXZhbCA9ICEhKHRtcCAmIE1S MV9FRlVTRV9BVVRPX0xPQURfRElTKTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwljYXNl IFUyUF9FRlVTRV9JTlRSOg0KPiA+ICsJCXRtcCA9IHJlYWRsKGNvbSArIFUzUF9VU0JQSFlBQ1Ix KTsNCj4gPiArCQl2YWwgPSBGSUVMRF9HRVQoUEExX1JHX0lOVFJfQ0FMLCB0bXApOw0KPiA+ICsJ CW1heCA9IEZJRUxEX01BWChQQTFfUkdfSU5UUl9DQUwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsN Cj4gPiArCWNhc2UgVTJQX0RJU0NUSDoNCj4gPiArCQl0bXAgPSByZWFkbChjb20gKyBVM1BfVVNC UEhZQUNSNik7DQo+ID4gKwkJdmFsID0gRklFTERfR0VUKFBBNl9SR19VMl9ESVNDVEgsIHRtcCk7 DQo+ID4gKwkJbWF4ID0gRklFTERfTUFYKFBBNl9SR19VMl9ESVNDVEgpOw0KPiA+ICsJCWJyZWFr Ow0KPiA+ICsNCj4gPiArCWNhc2UgVTJQX1BSRV9FTVBIQVNJUzoNCj4gPiArCQl0bXAgPSByZWFk bChjb20gKyBVM1BfVVNCUEhZQUNSNik7DQo+ID4gKwkJdmFsID0gRklFTERfR0VUKFBBNl9SR19V Ml9QUkVfRU1QLCB0bXApOw0KPiA+ICsJCW1heCA9IEZJRUxEX01BWChQQTZfUkdfVTJfUFJFX0VN UCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJZGVmYXVsdDoNCj4gPiArCQlzZXFfcHJp bnRmKHNmLCAiaW52YWxpZCwgJWRcbiIsIHJldCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ ID4gKw0KPiA+ICsJc2VxX3ByaW50ZihzZiwgIiVzIDogJWQgWzAsICVkXVxuIiwgZm5hbWUsIHZh bCwgbWF4KTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGludCB1Ml9waHlfcGFyYW1zX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZp bGUNCj4gPiAqZmlsZSkNCj4gPiArew0KPiA+ICsJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHUy X3BoeV9wYXJhbXNfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBzc2l6ZV90IHUyX3BoeV9wYXJhbXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNv bnN0IGNoYXINCj4gPiBfX3VzZXIgKnVidWYsDQo+ID4gKwkJCQkgICBzaXplX3QgY291bnQsIGxv ZmZfdCAqcHBvcykNCj4gDQo+IHNvIGFyZSB3ZSB3cml0aW5nIHRvIHBoeSByZWdpc3RlcnMgZnJv bSB1c2Vyc3BhY2UsIHdoeT8NCk1haW5seSBiZWNhdXNlIHdoZW4gYnJpbmcgdXAgYSBuZXcgaWMg d2hpY2ggZWZ1c2UgaXMgbm90IHNldCwgd2UgbmVlZA0KdG8gdHVuZSBzb21lIHBhcmFtZXRlcnMg bWFueSB0aW1lcyBmb3IgZXllIGRpYWdyYW0gdGVzdCwgdXNpbmcgZGVidWdmcw0KZmlsZXMgd2ls bCBtYWtlIGl0IGVhc2llciBhdCBydW50aW1lLg0KDQpUaGFua3MgYSBsb3QNCg0KPiANCj4gPiAr ew0KPiA+ICsJY29uc3QgY2hhciAqZm5hbWUgPSBmaWxlX2RlbnRyeShmaWxlKS0+ZF9pbmFtZTsN Cj4gPiArCXN0cnVjdCBzZXFfZmlsZSAqc2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7DQo+ID4gKwlz dHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZSAqaW5zdCA9IHNmLT5wcml2YXRlOw0KPiA+ICsJc3RydWN0 IHUycGh5X2JhbmtzICp1Ml9iYW5rcyA9ICZpbnN0LT51Ml9iYW5rczsNCj4gPiArCXZvaWQgX19p b21lbSAqY29tID0gdTJfYmFua3MtPmNvbTsNCj4gPiArCXNzaXplX3QgcmM7DQo+ID4gKwl1MzIg dmFsOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlyYyA9IGtzdHJ0b3VpbnRfZnJvbV91 c2VyKHVidWYsIFVTRVJfQlVGX0xFTihjb3VudCksIDAsICZ2YWwpOw0KPiA+ICsJaWYgKHJjKQ0K PiA+ICsJCXJldHVybiByYzsNCj4gPiArDQo+ID4gKwlyZXQgPSBtYXRjaF9zdHJpbmcodTJfcGh5 X2ZpbGVzLCBBUlJBWV9TSVpFKHUyX3BoeV9maWxlcyksDQo+ID4gZm5hbWUpOw0KPiA+ICsJaWYg KHJldCA8IDApDQo+ID4gKwkJcmV0dXJuIChzc2l6ZV90KXJldDsNCj4gPiArDQo+ID4gKwlzd2l0 Y2ggKHJldCkgew0KPiA+ICsJY2FzZSBVMlBfRVlFX1ZSVDoNCj4gPiArCQltdGtfcGh5X3VwZGF0 ZV9maWVsZChjb20gKyBVM1BfVVNCUEhZQUNSMSwNCj4gPiBQQTFfUkdfVlJUX1NFTCwgdmFsKTsN Cj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwljYXNlIFUyUF9FWUVfVEVSTToNCj4gPiArCQlt dGtfcGh5X3VwZGF0ZV9maWVsZChjb20gKyBVM1BfVVNCUEhZQUNSMSwNCj4gPiBQQTFfUkdfVEVS TV9TRUwsIHZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJY2FzZSBVMlBfRUZVU0Vf RU46DQo+ID4gKwkJaWYgKHUyX2JhbmtzLT5taXNjKQ0KPiA+ICsJCQltdGtfcGh5X3VwZGF0ZV9m aWVsZCh1Ml9iYW5rcy0+bWlzYyArDQo+ID4gVTNQX01JU0NfUkVHMSwNCj4gPiArCQkJCQkgICAg IE1SMV9FRlVTRV9BVVRPX0xPQURfRElTLA0KPiA+ICEhdmFsKTsNCj4gPiArCQlicmVhazsNCj4g PiArDQo+ID4gKwljYXNlIFUyUF9FRlVTRV9JTlRSOg0KPiA+ICsJCW10a19waHlfdXBkYXRlX2Zp ZWxkKGNvbSArIFUzUF9VU0JQSFlBQ1IxLA0KPiA+IFBBMV9SR19JTlRSX0NBTCwgdmFsKTsNCj4g PiArCQlicmVhazsNCj4gPiArDQo+ID4gKwljYXNlIFUyUF9ESVNDVEg6DQo+ID4gKwkJbXRrX3Bo eV91cGRhdGVfZmllbGQoY29tICsgVTNQX1VTQlBIWUFDUjYsDQo+ID4gUEE2X1JHX1UyX0RJU0NU SCwgdmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwljYXNlIFUyUF9QUkVfRU1QSEFT SVM6DQo+ID4gKwkJbXRrX3BoeV91cGRhdGVfZmllbGQoY29tICsgVTNQX1VTQlBIWUFDUjYsDQo+ ID4gUEE2X1JHX1UyX1BSRV9FTVAsIHZhbCk7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKw0KPiA+ICsJ ZGVmYXVsdDoNCj4gPiArCQlicmVhazsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gY291 bnQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHUyX3BoeV9mb3BzID0gew0KPiA+ICsJLm9wZW4gPSB1Ml9waHlfcGFyYW1zX29wZW4sDQo+ ID4gKwkud3JpdGUgPSB1Ml9waHlfcGFyYW1zX3dyaXRlLA0KPiA+ICsJLnJlYWQgPSBzZXFfcmVh ZCwNCj4gPiArCS5sbHNlZWsgPSBzZXFfbHNlZWssDQo+ID4gKwkucmVsZWFzZSA9IHNpbmdsZV9y ZWxlYXNlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdTJfcGh5X2RiZ2ZzX2Zp bGVzX2NyZWF0ZShzdHJ1Y3QgbXRrX3BoeV9pbnN0YW5jZQ0KPiA+ICppbnN0KQ0KPiA+ICt7DQo+ ID4gKwl1MzIgY291bnQgPSBBUlJBWV9TSVpFKHUyX3BoeV9maWxlcyk7DQo+ID4gKwlpbnQgaTsN Cj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykNCj4gPiArCQlkZWJ1Z2Zz X2NyZWF0ZV9maWxlKHUyX3BoeV9maWxlc1tpXSwgMDY0NCwgaW5zdC0+ZGJnZnMsIA0KPiA+IGlu c3QsICZ1Ml9waHlfZm9wcyk7DQo+IA0KPiBwbHMgdXNlIA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgaW50IHUzX3BoeV9wYXJhbXNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp1 bnVzZWQpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0ID0gc2Yt PnByaXZhdGU7DQo+ID4gKwljb25zdCBjaGFyICpmbmFtZSA9IGZpbGVfZGVudHJ5KHNmLT5maWxl KS0+ZF9pbmFtZTsNCj4gPiArCXN0cnVjdCB1M3BoeV9iYW5rcyAqdTNfYmFua3MgPSAmaW5zdC0+ dTNfYmFua3M7DQo+ID4gKwl1MzIgdmFsID0gMDsNCj4gPiArCXUzMiBtYXggPSAwOw0KPiA+ICsJ dTMyIHRtcDsNCj4gPiArCWludCByZXQ7DQo+ID4gKw0KPiA+ICsJcmV0ID0gbWF0Y2hfc3RyaW5n KHUzX3BoeV9maWxlcywgQVJSQVlfU0laRSh1M19waHlfZmlsZXMpLA0KPiA+IGZuYW1lKTsNCj4g PiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsJc3dpdGNo IChyZXQpIHsNCj4gPiArCWNhc2UgVTNQX0VGVVNFX0VOOg0KPiA+ICsJCXRtcCA9IHJlYWRsKHUz X2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfUlNWKTsNCj4gPiArCQl2YWwgPSAhISh0bXAgJiBQ M0RfUkdfRUZVU0VfQVVUT19MT0FEX0RJUyk7DQo+ID4gKwkJbWF4ID0gMTsNCj4gPiArCQlicmVh azsNCj4gPiArDQo+ID4gKwljYXNlIFUzUF9FRlVTRV9JTlRSOg0KPiA+ICsJCXRtcCA9IHJlYWRs KHUzX2JhbmtzLT5waHlhICsgVTNQX1UzX1BIWUFfUkVHMCk7DQo+ID4gKwkJdmFsID0gRklFTERf R0VUKFAzQV9SR19JRVhUX0lOVFIsIHRtcCk7DQo+ID4gKwkJbWF4ID0gRklFTERfTUFYKFAzQV9S R19JRVhUX0lOVFIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWNhc2UgVTNQX0VGVVNF X1RYX0lNUDoNCj4gPiArCQl0bXAgPSByZWFkbCh1M19iYW5rcy0+cGh5ZCArIFUzUF9VM19QSFlE X0lNUENBTDApOw0KPiA+ICsJCXZhbCA9IEZJRUxEX0dFVChQM0RfUkdfVFhfSU1QRUwsIHRtcCk7 DQo+ID4gKwkJbWF4ID0gRklFTERfTUFYKFAzRF9SR19UWF9JTVBFTCk7DQo+ID4gKwkJYnJlYWs7 DQo+ID4gKw0KPiA+ICsJY2FzZSBVM1BfRUZVU0VfUlhfSU1QOg0KPiA+ICsJCXRtcCA9IHJlYWRs KHUzX2JhbmtzLT5waHlkICsgVTNQX1UzX1BIWURfSU1QQ0FMMSk7DQo+ID4gKwkJdmFsID0gRklF TERfR0VUKFAzRF9SR19SWF9JTVBFTCwgdG1wKTsNCj4gPiArCQltYXggPSBGSUVMRF9NQVgoUDNE X1JHX1JYX0lNUEVMKTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwlkZWZhdWx0Og0KPiA+ ICsJCXNlcV9wcmludGYoc2YsICJpbnZhbGlkLCAlZFxuIiwgcmV0KTsNCj4gPiArCQlicmVhazsN Cj4gPiArCX0NCj4gPiArDQo+ID4gKwlzZXFfcHJpbnRmKHNmLCAiJXMgOiAlZCBbMCwgJWRdXG4i LCBmbmFtZSwgdmFsLCBtYXgpOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgaW50IHUzX3BoeV9wYXJhbXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2Rl LCBzdHJ1Y3QgZmlsZQ0KPiA+ICpmaWxlKQ0KPiA+ICt7DQo+ID4gKwlyZXR1cm4gc2luZ2xlX29w ZW4oZmlsZSwgdTNfcGh5X3BhcmFtc19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHNzaXplX3QgdTNfcGh5X3BhcmFtc193cml0ZShzdHJ1Y3QgZmls ZSAqZmlsZSwgY29uc3QgY2hhcg0KPiA+IF9fdXNlciAqdWJ1ZiwNCj4gPiArCQkJCSAgIHNpemVf dCBjb3VudCwgbG9mZl90ICpwcG9zKQ0KPiA+ICt7DQo+ID4gKwljb25zdCBjaGFyICpmbmFtZSA9 IGZpbGVfZGVudHJ5KGZpbGUpLT5kX2luYW1lOw0KPiA+ICsJc3RydWN0IHNlcV9maWxlICpzZiA9 IGZpbGUtPnByaXZhdGVfZGF0YTsNCj4gPiArCXN0cnVjdCBtdGtfcGh5X2luc3RhbmNlICppbnN0 ID0gc2YtPnByaXZhdGU7DQo+ID4gKwlzdHJ1Y3QgdTNwaHlfYmFua3MgKnUzX2JhbmtzID0gJmlu c3QtPnUzX2JhbmtzOw0KPiA+ICsJdm9pZCBfX2lvbWVtICpwaHlkID0gdTNfYmFua3MtPnBoeWQ7 DQo+ID4gKwlzc2l6ZV90IHJjOw0KPiA+ICsJdTMyIHZhbDsNCj4gPiArCWludCByZXQ7DQo+ID4g Kw0KPiA+ICsJcmMgPSBrc3RydG91aW50X2Zyb21fdXNlcih1YnVmLCBVU0VSX0JVRl9MRU4oY291 bnQpLCAwLCAmdmFsKTsNCj4gPiArCWlmIChyYykNCj4gPiArCQlyZXR1cm4gcmM7DQo+ID4gKw0K PiA+ICsJcmV0ID0gbWF0Y2hfc3RyaW5nKHUzX3BoeV9maWxlcywgQVJSQVlfU0laRSh1M19waHlf ZmlsZXMpLA0KPiA+IGZuYW1lKTsNCj4gPiArCWlmIChyZXQgPCAwKQ0KPiA+ICsJCXJldHVybiAo c3NpemVfdClyZXQ7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChyZXQpIHsNCj4gPiArCWNhc2UgVTNQ X0VGVVNFX0VOOg0KPiA+ICsJCW10a19waHlfdXBkYXRlX2ZpZWxkKHBoeWQgKyBVM1BfVTNfUEhZ RF9SU1YsDQo+ID4gKwkJCQkgICAgIFAzRF9SR19FRlVTRV9BVVRPX0xPQURfRElTLA0KPiA+ICEh dmFsKTsNCj4gPiArCQlicmVhazsNCj4gPiArDQo+ID4gKwljYXNlIFUzUF9FRlVTRV9JTlRSOg0K PiA+ICsJCW10a19waHlfdXBkYXRlX2ZpZWxkKHUzX2JhbmtzLT5waHlhICsgVTNQX1UzX1BIWUFf UkVHMCwNCj4gPiBQM0FfUkdfSUVYVF9JTlRSLCB2YWwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsN Cj4gPiArCWNhc2UgVTNQX0VGVVNFX1RYX0lNUDoNCj4gPiArCQltdGtfcGh5X3VwZGF0ZV9maWVs ZChwaHlkICsgVTNQX1UzX1BIWURfSU1QQ0FMMCwNCj4gPiBQM0RfUkdfVFhfSU1QRUwsIHZhbCk7 DQo+ID4gKwkJbXRrX3BoeV9zZXRfYml0cyhwaHlkICsgVTNQX1UzX1BIWURfSU1QQ0FMMCwNCj4g PiBQM0RfUkdfRk9SQ0VfVFhfSU1QRUwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWNh c2UgVTNQX0VGVVNFX1JYX0lNUDoNCj4gPiArCQltdGtfcGh5X3VwZGF0ZV9maWVsZChwaHlkICsg VTNQX1UzX1BIWURfSU1QQ0FMMSwNCj4gPiBQM0RfUkdfUlhfSU1QRUwsIHZhbCk7DQo+ID4gKwkJ bXRrX3BoeV9zZXRfYml0cyhwaHlkICsgVTNQX1UzX1BIWURfSU1QQ0FMMSwNCj4gPiBQM0RfUkdf Rk9SQ0VfUlhfSU1QRUwpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsNCj4gPiArCWRlZmF1bHQ6DQo+ ID4gKwkJYnJlYWs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJuIGNvdW50Ow0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1M19waHlf Zm9wcyA9IHsNCj4gPiArCS5vcGVuID0gdTNfcGh5X3BhcmFtc19vcGVuLA0KPiA+ICsJLndyaXRl ID0gdTNfcGh5X3BhcmFtc193cml0ZSwNCj4gPiArCS5yZWFkID0gc2VxX3JlYWQsDQo+ID4gKwku bGxzZWVrID0gc2VxX2xzZWVrLA0KPiA+ICsJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwNCj4g PiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHUzX3BoeV9kYmdmc19maWxlc19jcmVhdGUo c3RydWN0IG10a19waHlfaW5zdGFuY2UNCj4gPiAqaW5zdCkNCj4gPiArew0KPiA+ICsJdTMyIGNv dW50ID0gQVJSQVlfU0laRSh1M19waHlfZmlsZXMpOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ ICsJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspDQo+ID4gKwkJZGVidWdmc19jcmVhdGVfZmls ZSh1M19waHlfZmlsZXNbaV0sIDA2NDQsIGluc3QtPmRiZ2ZzLCANCj4gPiBpbnN0LCAmdTNfcGh5 X2ZvcHMpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHRwaHlfdHlwZV9zaG93KHN0 cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnVudXNlZCkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10 a19waHlfaW5zdGFuY2UgKmluc3QgPSBzZi0+cHJpdmF0ZTsNCj4gPiArCWNvbnN0IGNoYXIgKnR5 cGU7DQo+ID4gKw0KPiA+ICsJc3dpdGNoIChpbnN0LT50eXBlKSB7DQo+ID4gKwljYXNlIFBIWV9U WVBFX1VTQjI6DQo+ID4gKwkJdHlwZSA9ICJVU0IyIjsNCj4gPiArCQlicmVhazsNCj4gPiArCWNh c2UgUEhZX1RZUEVfVVNCMzoNCj4gPiArCQl0eXBlID0gIlVTQjMiOw0KPiA+ICsJCWJyZWFrOw0K PiA+ICsJY2FzZSBQSFlfVFlQRV9QQ0lFOg0KPiA+ICsJCXR5cGUgPSAiUENJZSI7DQo+ID4gKwkJ YnJlYWs7DQo+ID4gKwljYXNlIFBIWV9UWVBFX1NHTUlJOg0KPiA+ICsJCXR5cGUgPSAiU0dNSUki Ow0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSBQSFlfVFlQRV9TQVRBOg0KPiA+ICsJCXR5cGUg PSAiU0FUQSI7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwlkZWZhdWx0Og0KPiA+ICsJCXR5cGUgPSAi IjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlzZXFfcHJpbnRmKHNmLCAiJXNcbiIsIHR5cGUpOw0K PiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtERUZJTkVfU0hPV19B VFRSSUJVVEUodHBoeV90eXBlKTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHRwaHlfZGVidWdm c19pbml0KHN0cnVjdCBtdGtfdHBoeSAqdHBoeSwgc3RydWN0DQo+ID4gbXRrX3BoeV9pbnN0YW5j ZSAqaW5zdCkNCj4gPiArew0KPiA+ICsJY2hhciBuYW1lWzE2XTsNCj4gPiArDQo+ID4gKwlzbnBy aW50ZihuYW1lLCBzaXplb2YobmFtZSkgLSAxLCAicGh5LiVkIiwgaW5zdC0+aW5kZXgpOw0KPiA+ ICsJaW5zdC0+ZGJnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIobmFtZSwgdHBoeS0+ZGJnZnNfcm9v dCk7DQo+ID4gKw0KPiA+ICsJZGVidWdmc19jcmVhdGVfZmlsZSgidHlwZSIsIDA0NDQsIGluc3Qt PmRiZ2ZzLCBpbnN0LA0KPiA+ICZ0cGh5X3R5cGVfZm9wcyk7DQo+ID4gKw0KPiA+ICsJc3dpdGNo IChpbnN0LT50eXBlKSB7DQo+ID4gKwljYXNlIFBIWV9UWVBFX1VTQjI6DQo+ID4gKwkJdTJfcGh5 X2RiZ2ZzX2ZpbGVzX2NyZWF0ZShpbnN0KTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgUEhZ X1RZUEVfVVNCMzoNCj4gPiArCWNhc2UgUEhZX1RZUEVfUENJRToNCj4gPiArCQl1M19waHlfZGJn ZnNfZmlsZXNfY3JlYXRlKGluc3QpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVsdDoNCj4g PiArCQlicmVhazsNCj4gPiArCX0NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdHBo eV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG10a19waHlfaW5zdGFuY2UgKmluc3QpDQo+ID4gK3sNCj4g PiArCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShpbnN0LT5kYmdmcyk7DQo+ID4gKwlpbnN0LT5k YmdmcyA9IE5VTEw7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHRwaHlfZGVidWdm c19yb290X2NyZWF0ZShzdHJ1Y3QgbXRrX3RwaHkgKnRwaHkpDQo+ID4gK3sNCj4gPiArCXRwaHkt PmRiZ2ZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUodHBoeS0+ZGV2KSwNCj4g PiBwaHlfZGVidWdfcm9vdCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHRwaHlf ZGVidWdmc19yb290X3JlbW92ZShzdHJ1Y3QgbXRrX3RwaHkgKnRwaHkpDQo+ID4gK3sNCj4gPiAr CWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZSh0cGh5LT5kYmdmc19yb290KTsNCj4gPiArCXRwaHkt PmRiZ2ZzX3Jvb3QgPSBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZWxzZQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQgdHBoeV9kZWJ1Z2ZzX2luaXQoc3RydWN0IG10a190cGh5ICp0cGh5LCBz dHJ1Y3QNCj4gPiBtdGtfcGh5X2luc3RhbmNlICppbnN0KQ0KPiA+ICt7fQ0KPiA+ICsNCj4gPiAr c3RhdGljIHZvaWQgdHBoeV9kZWJ1Z2ZzX2V4aXQoc3RydWN0IG10a19waHlfaW5zdGFuY2UgKmlu c3QpDQo+ID4gK3t9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB0cGh5X2RlYnVnZnNfcm9vdF9j cmVhdGUoc3RydWN0IG10a190cGh5ICp0cGh5KQ0KPiA+ICt7fQ0KPiA+ICsNCj4gPiArc3RhdGlj IHZvaWQgdHBoeV9kZWJ1Z2ZzX3Jvb3RfcmVtb3ZlKHN0cnVjdCBtdGtfdHBoeSAqdHBoeSkNCj4g PiAre30NCj4gPiArDQo+ID4gKyNlbmRpZg0KPiA+ICsNCj4gPiAgc3RhdGljIHZvaWQgaHNfc2xl d19yYXRlX2NhbGlicmF0ZShzdHJ1Y3QgbXRrX3RwaHkgKnRwaHksDQo+ID4gIAlzdHJ1Y3QgbXRr X3BoeV9pbnN0YW5jZSAqaW5zdGFuY2UpDQo+ID4gIHsNCj4gPiBAQCAtMTAzMiw2ICsxNDE3LDgg QEAgc3RhdGljIGludCBtdGtfcGh5X2luaXQoc3RydWN0IHBoeSAqcGh5KQ0KPiA+ICAJCXJldHVy biAtRUlOVkFMOw0KPiA+ICAJfQ0KPiA+ICANCj4gPiArCXRwaHlfZGVidWdmc19pbml0KHRwaHks IGluc3RhbmNlKTsNCj4gPiArDQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+ICANCj4gPiBA QCAtMTA2OCw2ICsxNDU1LDggQEAgc3RhdGljIGludCBtdGtfcGh5X2V4aXQoc3RydWN0IHBoeSAq cGh5KQ0KPiA+ICAJc3RydWN0IG10a19waHlfaW5zdGFuY2UgKmluc3RhbmNlID0gcGh5X2dldF9k cnZkYXRhKHBoeSk7DQo+ID4gIAlzdHJ1Y3QgbXRrX3RwaHkgKnRwaHkgPSBkZXZfZ2V0X2RydmRh dGEocGh5LT5kZXYucGFyZW50KTsNCj4gPiAgDQo+ID4gKwl0cGh5X2RlYnVnZnNfZXhpdChpbnN0 YW5jZSk7DQo+ID4gKw0KPiA+ICAJaWYgKGluc3RhbmNlLT50eXBlID09IFBIWV9UWVBFX1VTQjIp DQo+ID4gIAkJdTJfcGh5X2luc3RhbmNlX2V4aXQodHBoeSwgaW5zdGFuY2UpOw0KPiA+ICANCj4g PiBAQCAtMTI5NSwxNSArMTY4NCwyOSBAQCBzdGF0aWMgaW50IG10a190cGh5X3Byb2JlKHN0cnVj dA0KPiA+IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiAgCX0NCj4gPiAgDQo+ID4gIAlwcm92 aWRlciA9IGRldm1fb2ZfcGh5X3Byb3ZpZGVyX3JlZ2lzdGVyKGRldiwgbXRrX3BoeV94bGF0ZSk7 DQo+ID4gKwlpZiAoSVNfRVJSKHByb3ZpZGVyKSkNCj4gPiArCQlyZXR1cm4gZGV2X2Vycl9wcm9i ZShkZXYsIFBUUl9FUlIocHJvdmlkZXIpLCAicHJvYmUNCj4gPiBmYWlsZWRcbiIpOw0KPiA+ICsN Cj4gPiArCXRwaHlfZGVidWdmc19yb290X2NyZWF0ZSh0cGh5KTsNCj4gPiArCXJldHVybiAwOw0K PiA+ICANCj4gPiAtCXJldHVybiBQVFJfRVJSX09SX1pFUk8ocHJvdmlkZXIpOw0KPiA+ICBwdXRf Y2hpbGQ6DQo+ID4gIAlvZl9ub2RlX3B1dChjaGlsZF9ucCk7DQo+ID4gIAlyZXR1cm4gcmV0dmFs Ow0KPiA+ICB9DQo+ID4gIA0KPiA+ICtzdGF0aWMgaW50IG10a190cGh5X3JlbW92ZShzdHJ1Y3Qg cGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3RwaHkgKnRw aHk7DQo+ID4gKw0KPiA+ICsJdHBoeSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KPiA+ ICsJdHBoeV9kZWJ1Z2ZzX3Jvb3RfcmVtb3ZlKHRwaHkpOw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG10a190cGh5X2Ry aXZlciA9IHsNCj4gPiAgCS5wcm9iZQkJPSBtdGtfdHBoeV9wcm9iZSwNCj4gPiArCS5yZW1vdmUJ CT0gbXRrX3RwaHlfcmVtb3ZlLA0KPiA+ICAJLmRyaXZlcgkJPSB7DQo+ID4gIAkJLm5hbWUJPSAi bXRrLXRwaHkiLA0KPiA+ICAJCS5vZl9tYXRjaF90YWJsZSA9IG10a190cGh5X2lkX3RhYmxlLA0K PiA+IC0tIA0KPiA+IDIuMTguMA0KPiANCj4gDQo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id CFE4FC433FE for ; Mon, 28 Nov 2022 07:36:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-ID:In-Reply-To: References:Message-ID:Date:Subject:CC:To:From:Reply-To:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6bZeKgM9innfEdzS6GggGhgMll/OHFlzWvtcIiVix/E=; b=W7yTySv5ZzjZ1P 3fiZ4cq09IHW3FAzLLXPXwWWYFdICUVyLXDOqo3ThS5chKeihBa/s69458nrXyp7pBz/7iBsN9Hm0 PFL3ROjY4dLIoex65rA7tqFcCY7gwd+V5CWbG36afCVQ8azq2Tr3PZcISaCRestpoYWVYEQeR6Z+a HiyU7H2Hlot2ElDpC5M33MX4bJ9YtSpUa2pp8tqslWG2jhhH4Zbiy+MVhDhG+kyNPSUefV63qN/el XCwev/xqjdDt7UzVIT0+2N8xLCI+xTemMQOW7ZTKvHKWr1x9BEr/IrNehyOtWCoPSwVDZGl6Chx0q FdMx+W3KJoJLBuGk+wRg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ozYhA-00HMB6-3b; Mon, 28 Nov 2022 07:36:52 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ozYh6-00HM9B-Ba; Mon, 28 Nov 2022 07:36:50 +0000 X-UUID: 07ffad0f6abf4d7b9f89bcb5980fdd55-20221128 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=MIME-Version:Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References:Message-ID:Date:Subject:CC:To:From; bh=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=Wt3KnyLwQNU7TivD5qh6G1JxUf4jTaI+Ehwpfp0CKqEJIz6+XmxRnOM9J6LjwIM7Iz5vJ0niGIDiVYkq4bk0qt44T/I6iLGYJ3RPIzoTGULOEcO3IDfNetrlAi/r5hHnGJTRjIE4g3YHc249cevU3+hTQpY9UN8Zf5zxD0j4QX0=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.14,REQID:f670450b-cc47-4769-a626-efa018bd48a6,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:dcaaed0,CLOUDID:45b56bdc-6ad4-42ff-91f3-18e0272db660,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:11|1,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0 X-UUID: 07ffad0f6abf4d7b9f89bcb5980fdd55-20221128 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 29287999; Mon, 28 Nov 2022 00:36:43 -0700 Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.792.15; Mon, 28 Nov 2022 15:26:05 +0800 Received: from APC01-TYZ-obe.outbound.protection.outlook.com (172.21.101.239) by mtkmbs10n1.mediatek.com (172.21.101.34) with Microsoft SMTP Server id 15.2.792.15 via Frontend Transport; Mon, 28 Nov 2022 15:26:05 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=anUgoEbDkL/FtTSH7TQlDwE5h7/RGSxmBKfuplEcKjL6xkvCBazPXOWQDheIZpRKQPkyK96vphX0ONg8QthNKjPlJLK5y9qQcwdP7MCkeNKqFpzcU6n7dAZ/a/7TZCuya5NVFxcjd3tUdo8BwnKyI77+w2QPN35a4B7TNhPwj0iM2O9/hqZcUoiZF310DjMHPH4Hh5RNv+ru3KSqnA6EGN3iP9l7s2C1qhlCm5+rLuJ6ObvrhGWBb0TvX+KUvPboE8bWaxrcaLOr+xRhqK6+B3z59HU/ItMq83ZmywaPlI96gtYfBnBI5mNx9qijSfLShecGNlrth8cHZS7bpyFc/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=YiTPRNdZdV6mPDPAjjWbNn621kYeWP6DhR63/o5vqHDfsTal8r0fPoIfw21UW1pbHC+TpXS0FrNl9cvI2DhB0bAUfFWSq/bRTlIFGNsUiD4gVleCqHQfDDef6ZrC8qUNQN/zwXexdPVzOh/sIvWuYwKwQ9lMgUcGv0R+IzLAxPO9SaaMTe7E3ksI0h8z7h++BP/roFIVi+cI6ku8dSvtwGeWbJOH5krZu3rzMleZToTMrwCA/z95ndddv2PG4XnjuleWCFcgDXj6JaGOUSMtifi4xbRW4B5Yrj9s0KDtQp9avyHBSCBoNpwV9pQSfW0dZaobkwvr9SKUWcR8cvO9GA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mediatek.com; dmarc=pass action=none header.from=mediatek.com; dkim=pass header.d=mediatek.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mediateko365.onmicrosoft.com; s=selector2-mediateko365-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=vSJ3DX9G0Nc3x9P6H66d03Da0NtILHgyw7nfoNAhXKozr3X1L9kvm5PXcTbS3WXWWLwxS4ZsQkmlwulpEf5KIIaQIOpZRldFihBUTwHhzYitQujZoMUH2zwlZuBYZpalcEHwNvSF8MJ6tkrnwl2Akcwec9qWCwj6roOI97ZL454= Received: from KL1PR03MB5062.apcprd03.prod.outlook.com (2603:1096:820:1a::22) by PUZPR03MB7135.apcprd03.prod.outlook.com (2603:1096:301:113::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.21; Mon, 28 Nov 2022 07:26:03 +0000 Received: from KL1PR03MB5062.apcprd03.prod.outlook.com ([fe80::9585:3a04:b796:b696]) by KL1PR03MB5062.apcprd03.prod.outlook.com ([fe80::9585:3a04:b796:b696%5]) with mapi id 15.20.5857.020; Mon, 28 Nov 2022 07:26:03 +0000 From: =?utf-8?B?Q2h1bmZlbmcgWXVuICjkupHmmKXls7Ap?= To: "vkoul@kernel.org" CC: "llvm@lists.linux.dev" , "linux-mediatek@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "nathan@kernel.org" , "kishon@ti.com" , =?utf-8?B?RWRkaWUgSHVuZyAo5rSq5q2j6ZGrKQ==?= , =?utf-8?B?VGlhbnBpbmcgRmFuZyAo5pa55aSp5bmzKQ==?= , "linux-arm-kernel@lists.infradead.org" , "matthias.bgg@gmail.com" , "linux-phy@lists.infradead.org" , "trix@redhat.com" , "angelogioacchino.delregno@collabora.com" , "ndesaulniers@google.com" Subject: Re: [PATCH v4 3/3] phy: mediatek: tphy: add debugfs files Thread-Topic: [PATCH v4 3/3] phy: mediatek: tphy: add debugfs files Thread-Index: AQHY9QhG35CIOR1jTk2qYSnofBdXwa5Ob3gAgAWbzQA= Date: Mon, 28 Nov 2022 07:26:02 +0000 Message-ID: <70407a789b48a4fbd498e392450eb9db76e025bf.camel@mediatek.com> References: <20221110132716.12294-1-chunfeng.yun@mediatek.com> <20221110132716.12294-3-chunfeng.yun@mediatek.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mediatek.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: KL1PR03MB5062:EE_|PUZPR03MB7135:EE_ x-ms-office365-filtering-correlation-id: 21e6dfa4-d55f-443f-27a0-08dad111ce22 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jhTHAuRrrjRF3GHMnhl4fYdToRfL6HRp2zHIN4jaOWVSMcQtjt1Ef7oUrXGMKkd9lrld19tvD0S2rdPvwX7lCJdyVbOrpCIaXuuf3o+HleNt43xdXAOBqmJJcY08je7ehYDH87EiXA82IEJMPfeRP5zXD1cMxoer2zbForUuk3opy0vae4unm4IVDVdmjh7LxPDc7a3eDgCO69IG4rFK7juHiWsEh1ITzGdjx8cw/VEtXKttzWVJyx1NoJcQxuvd770AVTYcWX2NHYtPooIx0PVafIw9k2gHiEcKW41fR/3BH0++d6YLIkLHWN0mXY3yafPScSs6FcjsChCBE9Pigi8L11R87ftzkoU3beoFr9YI+ExvU4NfK5V1fWFygWPqdCZK56oLA8PDyn2xtsaeeKb2SWGLxL5dIXfrqfM+0BqfVRD2nqncJB7xxKvdcLCHZSY3BzHzdUS8RYM9yLBfpy+0M2/BId4tv4quq/Fof7hXo04MeAU6qbG/3ZClA58yX2CYfV7Wq6+wh3MT6uNzYHNtqtYx//r8LdXYS7OiTcVFDIbSkNpOS5zGzdg3ushw4ThYWFhKCSTaLucbYONWA+RHBvezwXeuSoYlYbSaSQuOqISd7kiZED4WjCge/4yvOrdv3oMOgXUayf6LDhFHynAAgQlFDFm6hn+ymnLJb19lKy8K6l4M9D/ZNL4g4ZPDi/Ho4UhtKRxETuF3pbWQQz0fJYUaqI7CsdyZrlfnVhk20STyEz04FhdDYRHx8iwN x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:KL1PR03MB5062.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(366004)(39860400002)(346002)(136003)(376002)(451199015)(6506007)(38100700002)(53546011)(7416002)(83380400001)(6512007)(26005)(86362001)(36756003)(316002)(5660300002)(8936002)(66946007)(76116006)(91956017)(66556008)(66476007)(66446008)(4326008)(8676002)(64756008)(122000001)(85182001)(6916009)(54906003)(71200400001)(2616005)(4001150100001)(30864003)(2906002)(478600001)(6486002)(38070700005)(41300700001)(186003)(99106002)(309714004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WXQxMlFGRnpkdmJpZHpIQTl1ajVad3lKWS8wRThMNmFLR0JhU3M1aXl6ZnZq?= =?utf-8?B?VXNJUjVjUHBsR2ZuWFV2TGZtK090N0lvWjRwTTJaMFh2bVYvQjRZL0tMTHNv?= =?utf-8?B?MTZNelhhbEhmc0pQaVpEbUxRQktrSXZ1ZnVLTmwrMXJudjFSWGR3T0VuYStY?= =?utf-8?B?c1ZvMC9XbGxRdy8vcXU3b3lkNWt0L1FZOVZiMmh6RjNnUXFMWE1EeE4rODQ3?= =?utf-8?B?VThOQ1dZb3BwSGNRbXloWkQ1SVBSR01Rd3JuQmR6bUI4R2hRdndHQjRteC8y?= =?utf-8?B?cW9UbTFUUUNDL1Ric0U1anZRWWN4bmRodFY4aXZnVVlyWXhObUQ4QVNTcUF3?= =?utf-8?B?NzJZTUFwWlg4eTlPR1l2ZWo2b0NCaGppMnlNcDVxbHJidDAzemlHMHBLU25y?= =?utf-8?B?ZmtvNjdOWHB0M2d1VU5TLzI4Mk1rMXRPOXVhM2xGbnNiUXhTN3ByY0V0VkVm?= =?utf-8?B?b2IvVGtYOW81aWJWaTFoNFBJZlRNeFhRblh6MkhPMUxWNlJEbkFPSHR3YzlV?= =?utf-8?B?dXp0bWwwYk5MSGR2Z2N3eFY3ajVPZFF3UDJJcmJPTGdGQWtxZnZlUU1kcWx2?= =?utf-8?B?R3YxMW9jZDZPb1hLQjRxcFY4SXBkWXBkR2V2SzUyWFd3N0JXY2NGT2hUYTNR?= =?utf-8?B?Z3VLNHRMRGV6ZUFIWFpnRkRHRVVMaC9oTGcxZHp5Y2VXVEUvVVE0d0xpd2kx?= =?utf-8?B?L0FNR3J4TGtNOHlBWWQwV3NyT3BjYm5PWFc4YWNacWhZeWE5bWdYR1dtMjEw?= =?utf-8?B?NlhyRWhyR2Vic0RLcyt2ZXVxbi9nM3ZPVjBnSUc3Q0R0ZWZNbGp4QThSRXNm?= =?utf-8?B?WVdRcmExM1lrTXNHVHJqOTRFTnNibEZzQWNkc3pISTB4cXBDTjl0U3BYSkJW?= =?utf-8?B?WlFYWTd3OFhTSy9LVExOZTRUOURGQ2JmcmJ4SVNHVEo0bS9RMERSUENkTEhF?= =?utf-8?B?M0VMYVlYSmxMV29WVTNhT09SWkZ3dm1JUnRBdTFwc2o0UlExS05wTUJBakJC?= =?utf-8?B?MDNkTy9tL2dQZ25vdVN2QzJPTGVtYm9YTXY4RkpwbW0rNElmUGUvbWpjdDRu?= =?utf-8?B?NWRNQ3BobFU4U0pkUEpuK2FoaWdOaEdWRkE1YThoQitOU1I3bkpDYkZIM1U4?= =?utf-8?B?VmFFWERBVmloRnlId1FHb3RUSFJCUXpob21sc0toY0t0bG8xOUx0WWRvdk1S?= =?utf-8?B?Z0xYMVFMZk5uRExHRjBoeW1TSmd4ZUJmQVlDbHdJMVZxWGYxai9Id3dOUS9i?= =?utf-8?B?Zkx4VjgyYTdiY0RkQnBBbERhQVVTRDloQ1pGb2FNK3g0K0pvaVRwR2NxN09k?= =?utf-8?B?NWJtL0tIWWZJdEJDSnBuZVFMMkxQdUw1Z3NCeGR0YUpPNmZpcERVQjdnZ2t3?= =?utf-8?B?WW9uZnZ4U0lFMnRQYnJCNjdsSVJ2RDcxUnBwTno2Vm02c2dWU0t5b0EvdXpK?= =?utf-8?B?Q0xFOXdmdnhGMWtjN21NRUZCdTJLK1pQSEFzU3FKbEp1R2tkaFNOT1dObnFv?= =?utf-8?B?MzFYcTlZcGVaRS8rQkJxM0Y2dEdJQ0JUYU9aM3Z4dW9Zdk5jWWN1aHVlUEMv?= =?utf-8?B?Q0tNNjFxcXJOb1FXWkZoanplVjlkVVZ6ZzI2bTZLYThsbU9yREdXdVcyYzlu?= =?utf-8?B?ZlVPZHNKUDZhNTZ3eG50VlBjcUdkUU9NcW9hZHQ1WDRDMk4vTHhab01CL0wx?= =?utf-8?B?YkNLUzBYTEpJOGU0M3dtTXdNSFRuKzFHOVdmVS94MTRSMWxHVjZrZWUzbEF5?= =?utf-8?B?bndLN3pOS1F2RmVHMWpZMVREZDEyRG56VUppemJUdWVLTmt4ZWgzMmxZTEEr?= =?utf-8?B?TzBPL1NjdjVpSGk3Rnk0NGt4elZhWXNZSnNvZWF2eENvK3lZRTNiZ2c4dDZu?= =?utf-8?B?RFRlMHQ0b0FJL2tJY2wxNVVQYTRweGEwbU9DMFRGSkJuVmFXRTNPNUdHWVUx?= =?utf-8?B?cnVFeldZNWpSV3pFdmNydXlPa0cwVDJjM3NkMW5oUkhWZXdSZGErcmUxZk1Z?= =?utf-8?B?SU8rWk85Q01KUEN1ZVVma3RMUXJ4WG5zTzZsY0U2NFB5cCtwd1VYOE9GcUVh?= =?utf-8?B?WitjUktvVTBUc1FCOEZFcVdnbjdkY1RFVFlNMDJHL1B5aTdCSFdwZk1PTlAy?= =?utf-8?B?ZVorLzhjQmtGODRiRHJYbXh0ci9tSkFnSGJaUmhBQTVwMFZsVGZPN3AyaXYx?= =?utf-8?B?U0E9PQ==?= Content-ID: <0164C0501224D244919674F4131B309B@apcprd03.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: KL1PR03MB5062.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 21e6dfa4-d55f-443f-27a0-08dad111ce22 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Nov 2022 07:26:02.9184 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a7687ede-7a6b-4ef6-bace-642f677fbe31 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Z8QhKB1U81Z4ZudOmQPCfH+DUKaL2QEVbWZDFZRYWRgByfYfdUL4ZAxNdL2lpz25YYBvyLSZi05lE1Y7ksbId4KpPrePEnxWcmoD5vzVRaM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PUZPR03MB7135 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221127_233648_448808_E734AF2E X-CRM114-Status: GOOD ( 22.72 ) X-BeenThere: linux-phy@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Linux Phy Mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-phy" Errors-To: linux-phy-bounces+linux-phy=archiver.kernel.org@lists.infradead.org On Thu, 2022-11-24 at 23:17 +0530, Vinod Koul wrote: > On 10-11-22, 21:27, Chunfeng Yun wrote: > > These debugfs files are mainly used to make eye diagram test > > easier, > > especially helpful to do HQA test for a new IC without efuse > > enabled. > > > > Signed-off-by: Chunfeng Yun > > --- > > v4: fix build warning of sometimes uninitialized variable > > > > v3: fix typo of "debugfs" suggested by AngeloGioacchino > > > > v2: add CONFIG_PHY_MTK_TPHY_DEBUGFS suggested by AngeloGioacchino > > --- > > drivers/phy/mediatek/Kconfig | 5 + > > drivers/phy/mediatek/phy-mtk-tphy.c | 405 > > +++++++++++++++++++++++++++- > > 2 files changed, 409 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/phy/mediatek/Kconfig > > b/drivers/phy/mediatek/Kconfig > > index 3125ecb5d119..e9fdfe9f519f 100644 > > --- a/drivers/phy/mediatek/Kconfig > > +++ b/drivers/phy/mediatek/Kconfig > > @@ -27,6 +27,11 @@ config PHY_MTK_TPHY > > multi-ports is first version, otherwise is second version, > > so you can easily distinguish them by banks layout. > > > > +config PHY_MTK_TPHY_DEBUGFS > > + bool "Add T-PHY Debugfs Files" > > + help > > + Say Y here to add debugfs files mainly for T-PHY HQA test. > > Why do we need a config option for this, is debugfs config option not > sufficient? We may want to disable these files even debugfs config is enabled in release image, and prefer to use them only when bring up new IC. > > > + > > config PHY_MTK_UFS > > tristate "MediaTek UFS M-PHY driver" > > depends on ARCH_MEDIATEK || COMPILE_TEST > > diff --git a/drivers/phy/mediatek/phy-mtk-tphy.c > > b/drivers/phy/mediatek/phy-mtk-tphy.c > > index e906a82791bd..f220a9a409bf 100644 > > --- a/drivers/phy/mediatek/phy-mtk-tphy.c > > +++ b/drivers/phy/mediatek/phy-mtk-tphy.c > > @@ -7,6 +7,7 @@ > > > > #include > > #include > > +#include > > #include > > #include > > #include > > @@ -264,6 +265,8 @@ > > > > #define TPHY_CLKS_CNT 2 > > > > +#define USER_BUF_LEN(count) min_t(size_t, 8, (count)) > > + > > enum mtk_phy_version { > > MTK_PHY_V1 = 1, > > MTK_PHY_V2, > > @@ -310,6 +313,7 @@ struct mtk_phy_instance { > > struct clk_bulk_data clks[TPHY_CLKS_CNT]; > > u32 index; > > u32 type; > > + struct dentry *dbgfs; > > struct regmap *type_sw; > > u32 type_sw_reg; > > u32 type_sw_index; > > @@ -332,10 +336,391 @@ struct mtk_tphy { > > const struct mtk_phy_pdata *pdata; > > struct mtk_phy_instance **phys; > > int nphys; > > + struct dentry *dbgfs_root; > > int src_ref_clk; /* MHZ, reference clock for slew rate > > calibrate */ > > int src_coef; /* coefficient for slew rate calibrate */ > > }; > > > > +#if IS_ENABLED(CONFIG_PHY_MTK_TPHY_DEBUGFS) > > + > > +enum u2_phy_params { > > + U2P_EYE_VRT = 0, > > + U2P_EYE_TERM, > > + U2P_EFUSE_EN, > > + U2P_EFUSE_INTR, > > + U2P_DISCTH, > > + U2P_PRE_EMPHASIS, > > +}; > > + > > +enum u3_phy_params { > > + U3P_EFUSE_EN = 0, > > + U3P_EFUSE_INTR, > > + U3P_EFUSE_TX_IMP, > > + U3P_EFUSE_RX_IMP, > > +}; > > + > > +static const char *const u2_phy_files[] = { > > + [U2P_EYE_VRT] = "vrt", > > + [U2P_EYE_TERM] = "term", > > + [U2P_EFUSE_EN] = "efuse", > > + [U2P_EFUSE_INTR] = "intr", > > + [U2P_DISCTH] = "discth", > > + [U2P_PRE_EMPHASIS] = "preemph", > > +}; > > + > > +static const char *const u3_phy_files[] = { > > + [U3P_EFUSE_EN] = "efuse", > > + [U3P_EFUSE_INTR] = "intr", > > + [U3P_EFUSE_TX_IMP] = "tx-imp", > > + [U3P_EFUSE_RX_IMP] = "rx-imp", > > +}; > > + > > +static int u2_phy_params_show(struct seq_file *sf, void *unused) > > +{ > > + struct mtk_phy_instance *inst = sf->private; > > + const char *fname = file_dentry(sf->file)->d_iname; > > + struct u2phy_banks *u2_banks = &inst->u2_banks; > > + void __iomem *com = u2_banks->com; > > + u32 max = 0; > > + u32 tmp = 0; > > + u32 val = 0; > > + int ret; > > + > > + ret = match_string(u2_phy_files, ARRAY_SIZE(u2_phy_files), > > fname); > > + if (ret < 0) > > + return ret; > > + > > + switch (ret) { > > + case U2P_EYE_VRT: > > + tmp = readl(com + U3P_USBPHYACR1); > > + val = FIELD_GET(PA1_RG_VRT_SEL, tmp); > > + max = FIELD_MAX(PA1_RG_VRT_SEL); > > + break; > > + > > + case U2P_EYE_TERM: > > + tmp = readl(com + U3P_USBPHYACR1); > > + val = FIELD_GET(PA1_RG_TERM_SEL, tmp); > > + max = FIELD_MAX(PA1_RG_TERM_SEL); > > + break; > > + > > + case U2P_EFUSE_EN: > > + if (u2_banks->misc) { > > + tmp = readl(u2_banks->misc + U3P_MISC_REG1); > > + max = 1; > > + } > > + > > + val = !!(tmp & MR1_EFUSE_AUTO_LOAD_DIS); > > + break; > > + > > + case U2P_EFUSE_INTR: > > + tmp = readl(com + U3P_USBPHYACR1); > > + val = FIELD_GET(PA1_RG_INTR_CAL, tmp); > > + max = FIELD_MAX(PA1_RG_INTR_CAL); > > + break; > > + > > + case U2P_DISCTH: > > + tmp = readl(com + U3P_USBPHYACR6); > > + val = FIELD_GET(PA6_RG_U2_DISCTH, tmp); > > + max = FIELD_MAX(PA6_RG_U2_DISCTH); > > + break; > > + > > + case U2P_PRE_EMPHASIS: > > + tmp = readl(com + U3P_USBPHYACR6); > > + val = FIELD_GET(PA6_RG_U2_PRE_EMP, tmp); > > + max = FIELD_MAX(PA6_RG_U2_PRE_EMP); > > + break; > > + > > + default: > > + seq_printf(sf, "invalid, %d\n", ret); > > + break; > > + } > > + > > + seq_printf(sf, "%s : %d [0, %d]\n", fname, val, max); > > + > > + return 0; > > +} > > + > > +static int u2_phy_params_open(struct inode *inode, struct file > > *file) > > +{ > > + return single_open(file, u2_phy_params_show, inode->i_private); > > +} > > + > > +static ssize_t u2_phy_params_write(struct file *file, const char > > __user *ubuf, > > + size_t count, loff_t *ppos) > > so are we writing to phy registers from userspace, why? Mainly because when bring up a new ic which efuse is not set, we need to tune some parameters many times for eye diagram test, using debugfs files will make it easier at runtime. Thanks a lot > > > +{ > > + const char *fname = file_dentry(file)->d_iname; > > + struct seq_file *sf = file->private_data; > > + struct mtk_phy_instance *inst = sf->private; > > + struct u2phy_banks *u2_banks = &inst->u2_banks; > > + void __iomem *com = u2_banks->com; > > + ssize_t rc; > > + u32 val; > > + int ret; > > + > > + rc = kstrtouint_from_user(ubuf, USER_BUF_LEN(count), 0, &val); > > + if (rc) > > + return rc; > > + > > + ret = match_string(u2_phy_files, ARRAY_SIZE(u2_phy_files), > > fname); > > + if (ret < 0) > > + return (ssize_t)ret; > > + > > + switch (ret) { > > + case U2P_EYE_VRT: > > + mtk_phy_update_field(com + U3P_USBPHYACR1, > > PA1_RG_VRT_SEL, val); > > + break; > > + > > + case U2P_EYE_TERM: > > + mtk_phy_update_field(com + U3P_USBPHYACR1, > > PA1_RG_TERM_SEL, val); > > + break; > > + > > + case U2P_EFUSE_EN: > > + if (u2_banks->misc) > > + mtk_phy_update_field(u2_banks->misc + > > U3P_MISC_REG1, > > + MR1_EFUSE_AUTO_LOAD_DIS, > > !!val); > > + break; > > + > > + case U2P_EFUSE_INTR: > > + mtk_phy_update_field(com + U3P_USBPHYACR1, > > PA1_RG_INTR_CAL, val); > > + break; > > + > > + case U2P_DISCTH: > > + mtk_phy_update_field(com + U3P_USBPHYACR6, > > PA6_RG_U2_DISCTH, val); > > + break; > > + > > + case U2P_PRE_EMPHASIS: > > + mtk_phy_update_field(com + U3P_USBPHYACR6, > > PA6_RG_U2_PRE_EMP, val); > > + break; > > + > > + default: > > + break; > > + } > > + > > + return count; > > +} > > + > > +static const struct file_operations u2_phy_fops = { > > + .open = u2_phy_params_open, > > + .write = u2_phy_params_write, > > + .read = seq_read, > > + .llseek = seq_lseek, > > + .release = single_release, > > +}; > > + > > +static void u2_phy_dbgfs_files_create(struct mtk_phy_instance > > *inst) > > +{ > > + u32 count = ARRAY_SIZE(u2_phy_files); > > + int i; > > + > > + for (i = 0; i < count; i++) > > + debugfs_create_file(u2_phy_files[i], 0644, inst->dbgfs, > > inst, &u2_phy_fops); > > pls use > > +} > > + > > +static int u3_phy_params_show(struct seq_file *sf, void *unused) > > +{ > > + struct mtk_phy_instance *inst = sf->private; > > + const char *fname = file_dentry(sf->file)->d_iname; > > + struct u3phy_banks *u3_banks = &inst->u3_banks; > > + u32 val = 0; > > + u32 max = 0; > > + u32 tmp; > > + int ret; > > + > > + ret = match_string(u3_phy_files, ARRAY_SIZE(u3_phy_files), > > fname); > > + if (ret < 0) > > + return ret; > > + > > + switch (ret) { > > + case U3P_EFUSE_EN: > > + tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RSV); > > + val = !!(tmp & P3D_RG_EFUSE_AUTO_LOAD_DIS); > > + max = 1; > > + break; > > + > > + case U3P_EFUSE_INTR: > > + tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG0); > > + val = FIELD_GET(P3A_RG_IEXT_INTR, tmp); > > + max = FIELD_MAX(P3A_RG_IEXT_INTR); > > + break; > > + > > + case U3P_EFUSE_TX_IMP: > > + tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL0); > > + val = FIELD_GET(P3D_RG_TX_IMPEL, tmp); > > + max = FIELD_MAX(P3D_RG_TX_IMPEL); > > + break; > > + > > + case U3P_EFUSE_RX_IMP: > > + tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL1); > > + val = FIELD_GET(P3D_RG_RX_IMPEL, tmp); > > + max = FIELD_MAX(P3D_RG_RX_IMPEL); > > + break; > > + > > + default: > > + seq_printf(sf, "invalid, %d\n", ret); > > + break; > > + } > > + > > + seq_printf(sf, "%s : %d [0, %d]\n", fname, val, max); > > + > > + return 0; > > +} > > + > > +static int u3_phy_params_open(struct inode *inode, struct file > > *file) > > +{ > > + return single_open(file, u3_phy_params_show, inode->i_private); > > +} > > + > > +static ssize_t u3_phy_params_write(struct file *file, const char > > __user *ubuf, > > + size_t count, loff_t *ppos) > > +{ > > + const char *fname = file_dentry(file)->d_iname; > > + struct seq_file *sf = file->private_data; > > + struct mtk_phy_instance *inst = sf->private; > > + struct u3phy_banks *u3_banks = &inst->u3_banks; > > + void __iomem *phyd = u3_banks->phyd; > > + ssize_t rc; > > + u32 val; > > + int ret; > > + > > + rc = kstrtouint_from_user(ubuf, USER_BUF_LEN(count), 0, &val); > > + if (rc) > > + return rc; > > + > > + ret = match_string(u3_phy_files, ARRAY_SIZE(u3_phy_files), > > fname); > > + if (ret < 0) > > + return (ssize_t)ret; > > + > > + switch (ret) { > > + case U3P_EFUSE_EN: > > + mtk_phy_update_field(phyd + U3P_U3_PHYD_RSV, > > + P3D_RG_EFUSE_AUTO_LOAD_DIS, > > !!val); > > + break; > > + > > + case U3P_EFUSE_INTR: > > + mtk_phy_update_field(u3_banks->phya + U3P_U3_PHYA_REG0, > > P3A_RG_IEXT_INTR, val); > > + break; > > + > > + case U3P_EFUSE_TX_IMP: > > + mtk_phy_update_field(phyd + U3P_U3_PHYD_IMPCAL0, > > P3D_RG_TX_IMPEL, val); > > + mtk_phy_set_bits(phyd + U3P_U3_PHYD_IMPCAL0, > > P3D_RG_FORCE_TX_IMPEL); > > + break; > > + > > + case U3P_EFUSE_RX_IMP: > > + mtk_phy_update_field(phyd + U3P_U3_PHYD_IMPCAL1, > > P3D_RG_RX_IMPEL, val); > > + mtk_phy_set_bits(phyd + U3P_U3_PHYD_IMPCAL1, > > P3D_RG_FORCE_RX_IMPEL); > > + break; > > + > > + default: > > + break; > > + } > > + > > + return count; > > +} > > + > > +static const struct file_operations u3_phy_fops = { > > + .open = u3_phy_params_open, > > + .write = u3_phy_params_write, > > + .read = seq_read, > > + .llseek = seq_lseek, > > + .release = single_release, > > +}; > > + > > +static void u3_phy_dbgfs_files_create(struct mtk_phy_instance > > *inst) > > +{ > > + u32 count = ARRAY_SIZE(u3_phy_files); > > + int i; > > + > > + for (i = 0; i < count; i++) > > + debugfs_create_file(u3_phy_files[i], 0644, inst->dbgfs, > > inst, &u3_phy_fops); > > +} > > + > > +static int tphy_type_show(struct seq_file *sf, void *unused) > > +{ > > + struct mtk_phy_instance *inst = sf->private; > > + const char *type; > > + > > + switch (inst->type) { > > + case PHY_TYPE_USB2: > > + type = "USB2"; > > + break; > > + case PHY_TYPE_USB3: > > + type = "USB3"; > > + break; > > + case PHY_TYPE_PCIE: > > + type = "PCIe"; > > + break; > > + case PHY_TYPE_SGMII: > > + type = "SGMII"; > > + break; > > + case PHY_TYPE_SATA: > > + type = "SATA"; > > + break; > > + default: > > + type = ""; > > + } > > + > > + seq_printf(sf, "%s\n", type); > > + > > + return 0; > > +} > > + > > +DEFINE_SHOW_ATTRIBUTE(tphy_type); > > + > > +static void tphy_debugfs_init(struct mtk_tphy *tphy, struct > > mtk_phy_instance *inst) > > +{ > > + char name[16]; > > + > > + snprintf(name, sizeof(name) - 1, "phy.%d", inst->index); > > + inst->dbgfs = debugfs_create_dir(name, tphy->dbgfs_root); > > + > > + debugfs_create_file("type", 0444, inst->dbgfs, inst, > > &tphy_type_fops); > > + > > + switch (inst->type) { > > + case PHY_TYPE_USB2: > > + u2_phy_dbgfs_files_create(inst); > > + break; > > + case PHY_TYPE_USB3: > > + case PHY_TYPE_PCIE: > > + u3_phy_dbgfs_files_create(inst); > > + break; > > + default: > > + break; > > + } > > +} > > + > > +static void tphy_debugfs_exit(struct mtk_phy_instance *inst) > > +{ > > + debugfs_remove_recursive(inst->dbgfs); > > + inst->dbgfs = NULL; > > +} > > + > > +static void tphy_debugfs_root_create(struct mtk_tphy *tphy) > > +{ > > + tphy->dbgfs_root = debugfs_create_dir(dev_name(tphy->dev), > > phy_debug_root); > > +} > > + > > +static void tphy_debugfs_root_remove(struct mtk_tphy *tphy) > > +{ > > + debugfs_remove_recursive(tphy->dbgfs_root); > > + tphy->dbgfs_root = NULL; > > +} > > + > > +#else > > + > > +static void tphy_debugfs_init(struct mtk_tphy *tphy, struct > > mtk_phy_instance *inst) > > +{} > > + > > +static void tphy_debugfs_exit(struct mtk_phy_instance *inst) > > +{} > > + > > +static void tphy_debugfs_root_create(struct mtk_tphy *tphy) > > +{} > > + > > +static void tphy_debugfs_root_remove(struct mtk_tphy *tphy) > > +{} > > + > > +#endif > > + > > static void hs_slew_rate_calibrate(struct mtk_tphy *tphy, > > struct mtk_phy_instance *instance) > > { > > @@ -1032,6 +1417,8 @@ static int mtk_phy_init(struct phy *phy) > > return -EINVAL; > > } > > > > + tphy_debugfs_init(tphy, instance); > > + > > return 0; > > } > > > > @@ -1068,6 +1455,8 @@ static int mtk_phy_exit(struct phy *phy) > > struct mtk_phy_instance *instance = phy_get_drvdata(phy); > > struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent); > > > > + tphy_debugfs_exit(instance); > > + > > if (instance->type == PHY_TYPE_USB2) > > u2_phy_instance_exit(tphy, instance); > > > > @@ -1295,15 +1684,29 @@ static int mtk_tphy_probe(struct > > platform_device *pdev) > > } > > > > provider = devm_of_phy_provider_register(dev, mtk_phy_xlate); > > + if (IS_ERR(provider)) > > + return dev_err_probe(dev, PTR_ERR(provider), "probe > > failed\n"); > > + > > + tphy_debugfs_root_create(tphy); > > + return 0; > > > > - return PTR_ERR_OR_ZERO(provider); > > put_child: > > of_node_put(child_np); > > return retval; > > } > > > > +static int mtk_tphy_remove(struct platform_device *pdev) > > +{ > > + struct mtk_tphy *tphy; > > + > > + tphy = platform_get_drvdata(pdev); > > + tphy_debugfs_root_remove(tphy); > > + return 0; > > +} > > + > > static struct platform_driver mtk_tphy_driver = { > > .probe = mtk_tphy_probe, > > + .remove = mtk_tphy_remove, > > .driver = { > > .name = "mtk-tphy", > > .of_match_table = mtk_tphy_id_table, > > -- > > 2.18.0 > > -- linux-phy mailing list linux-phy@lists.infradead.org https://lists.infradead.org/mailman/listinfo/linux-phy From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 67CC4C433FE for ; Mon, 28 Nov 2022 07:38:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Content-ID:In-Reply-To: References:Message-ID:Date:Subject:CC:To:From:Reply-To:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=dmLmzT1rOq4oU1PBKlCgFnjUqfclLlMn6sgSXNe/Kdo=; b=ol8GvVXpgb3Ndn Yg1Gm9YJUYfgiFpjNbHZSncaKwdlObc03T9jeRpd5z0tudO3ut4ldNobZy0JWhKS0QpLe31ySx4kk uespvrlhjanlD/qwwVCtA5dPhiE1W0lPAjs1noJs+oIYFPhkWBs9n581RVvcy9hbnGxVoxqlIHUVY 2pzcg+wIfxN9wHvlC5EaETEAh6ILgwDKej+V0JqOehKI4X3KRYIZMwYhudUMx569d0en1jdb9CETz BWCQSJrhveSNgjqIYZPE0lx95mxhlbUAYc3UsPqA6QL6JntcVmSnj6sz2Oaz0R0DDGx+xeWlwDaRB KPNuJDNN2bXOX3VuQjyw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ozYhB-00HMBG-3m; Mon, 28 Nov 2022 07:36:53 +0000 Received: from mailgw02.mediatek.com ([216.200.240.185]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ozYh6-00HM9B-Ba; Mon, 28 Nov 2022 07:36:50 +0000 X-UUID: 07ffad0f6abf4d7b9f89bcb5980fdd55-20221128 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=MIME-Version:Content-Transfer-Encoding:Content-ID:Content-Type:In-Reply-To:References:Message-ID:Date:Subject:CC:To:From; bh=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=Wt3KnyLwQNU7TivD5qh6G1JxUf4jTaI+Ehwpfp0CKqEJIz6+XmxRnOM9J6LjwIM7Iz5vJ0niGIDiVYkq4bk0qt44T/I6iLGYJ3RPIzoTGULOEcO3IDfNetrlAi/r5hHnGJTRjIE4g3YHc249cevU3+hTQpY9UN8Zf5zxD0j4QX0=; X-CID-P-RULE: Release_Ham X-CID-O-INFO: VERSION:1.1.14,REQID:f670450b-cc47-4769-a626-efa018bd48a6,IP:0,U RL:0,TC:0,Content:0,EDM:0,RT:0,SF:0,FILE:0,BULK:0,RULE:Release_Ham,ACTION: release,TS:0 X-CID-META: VersionHash:dcaaed0,CLOUDID:45b56bdc-6ad4-42ff-91f3-18e0272db660,B ulkID:nil,BulkQuantity:0,Recheck:0,SF:102,TC:nil,Content:0,EDM:-3,IP:nil,U RL:11|1,File:nil,Bulk:nil,QS:nil,BEC:nil,COL:0 X-UUID: 07ffad0f6abf4d7b9f89bcb5980fdd55-20221128 Received: from mtkmbs11n1.mediatek.inc [(172.21.101.185)] by mailgw02.mediatek.com (envelope-from ) (musrelay.mediatek.com ESMTP with TLSv1.2 ECDHE-RSA-AES256-GCM-SHA384 256/256) with ESMTP id 29287999; Mon, 28 Nov 2022 00:36:43 -0700 Received: from mtkmbs10n1.mediatek.inc (172.21.101.34) by mtkmbs11n1.mediatek.inc (172.21.101.185) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.792.15; Mon, 28 Nov 2022 15:26:05 +0800 Received: from APC01-TYZ-obe.outbound.protection.outlook.com (172.21.101.239) by mtkmbs10n1.mediatek.com (172.21.101.34) with Microsoft SMTP Server id 15.2.792.15 via Frontend Transport; Mon, 28 Nov 2022 15:26:05 +0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=anUgoEbDkL/FtTSH7TQlDwE5h7/RGSxmBKfuplEcKjL6xkvCBazPXOWQDheIZpRKQPkyK96vphX0ONg8QthNKjPlJLK5y9qQcwdP7MCkeNKqFpzcU6n7dAZ/a/7TZCuya5NVFxcjd3tUdo8BwnKyI77+w2QPN35a4B7TNhPwj0iM2O9/hqZcUoiZF310DjMHPH4Hh5RNv+ru3KSqnA6EGN3iP9l7s2C1qhlCm5+rLuJ6ObvrhGWBb0TvX+KUvPboE8bWaxrcaLOr+xRhqK6+B3z59HU/ItMq83ZmywaPlI96gtYfBnBI5mNx9qijSfLShecGNlrth8cHZS7bpyFc/A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=YiTPRNdZdV6mPDPAjjWbNn621kYeWP6DhR63/o5vqHDfsTal8r0fPoIfw21UW1pbHC+TpXS0FrNl9cvI2DhB0bAUfFWSq/bRTlIFGNsUiD4gVleCqHQfDDef6ZrC8qUNQN/zwXexdPVzOh/sIvWuYwKwQ9lMgUcGv0R+IzLAxPO9SaaMTe7E3ksI0h8z7h++BP/roFIVi+cI6ku8dSvtwGeWbJOH5krZu3rzMleZToTMrwCA/z95ndddv2PG4XnjuleWCFcgDXj6JaGOUSMtifi4xbRW4B5Yrj9s0KDtQp9avyHBSCBoNpwV9pQSfW0dZaobkwvr9SKUWcR8cvO9GA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=mediatek.com; dmarc=pass action=none header.from=mediatek.com; dkim=pass header.d=mediatek.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mediateko365.onmicrosoft.com; s=selector2-mediateko365-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=pR6z3Drkt/OqyP8hQO0X4zLgD3ZjV8CA3he6pLqij3k=; b=vSJ3DX9G0Nc3x9P6H66d03Da0NtILHgyw7nfoNAhXKozr3X1L9kvm5PXcTbS3WXWWLwxS4ZsQkmlwulpEf5KIIaQIOpZRldFihBUTwHhzYitQujZoMUH2zwlZuBYZpalcEHwNvSF8MJ6tkrnwl2Akcwec9qWCwj6roOI97ZL454= Received: from KL1PR03MB5062.apcprd03.prod.outlook.com (2603:1096:820:1a::22) by PUZPR03MB7135.apcprd03.prod.outlook.com (2603:1096:301:113::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5857.21; Mon, 28 Nov 2022 07:26:03 +0000 Received: from KL1PR03MB5062.apcprd03.prod.outlook.com ([fe80::9585:3a04:b796:b696]) by KL1PR03MB5062.apcprd03.prod.outlook.com ([fe80::9585:3a04:b796:b696%5]) with mapi id 15.20.5857.020; Mon, 28 Nov 2022 07:26:03 +0000 From: =?utf-8?B?Q2h1bmZlbmcgWXVuICjkupHmmKXls7Ap?= To: "vkoul@kernel.org" CC: "llvm@lists.linux.dev" , "linux-mediatek@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "nathan@kernel.org" , "kishon@ti.com" , =?utf-8?B?RWRkaWUgSHVuZyAo5rSq5q2j6ZGrKQ==?= , =?utf-8?B?VGlhbnBpbmcgRmFuZyAo5pa55aSp5bmzKQ==?= , "linux-arm-kernel@lists.infradead.org" , "matthias.bgg@gmail.com" , "linux-phy@lists.infradead.org" , "trix@redhat.com" , "angelogioacchino.delregno@collabora.com" , "ndesaulniers@google.com" Subject: Re: [PATCH v4 3/3] phy: mediatek: tphy: add debugfs files Thread-Topic: [PATCH v4 3/3] phy: mediatek: tphy: add debugfs files Thread-Index: AQHY9QhG35CIOR1jTk2qYSnofBdXwa5Ob3gAgAWbzQA= Date: Mon, 28 Nov 2022 07:26:02 +0000 Message-ID: <70407a789b48a4fbd498e392450eb9db76e025bf.camel@mediatek.com> References: <20221110132716.12294-1-chunfeng.yun@mediatek.com> <20221110132716.12294-3-chunfeng.yun@mediatek.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: Evolution 3.28.5-0ubuntu0.18.04.2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=mediatek.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: KL1PR03MB5062:EE_|PUZPR03MB7135:EE_ x-ms-office365-filtering-correlation-id: 21e6dfa4-d55f-443f-27a0-08dad111ce22 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: jhTHAuRrrjRF3GHMnhl4fYdToRfL6HRp2zHIN4jaOWVSMcQtjt1Ef7oUrXGMKkd9lrld19tvD0S2rdPvwX7lCJdyVbOrpCIaXuuf3o+HleNt43xdXAOBqmJJcY08je7ehYDH87EiXA82IEJMPfeRP5zXD1cMxoer2zbForUuk3opy0vae4unm4IVDVdmjh7LxPDc7a3eDgCO69IG4rFK7juHiWsEh1ITzGdjx8cw/VEtXKttzWVJyx1NoJcQxuvd770AVTYcWX2NHYtPooIx0PVafIw9k2gHiEcKW41fR/3BH0++d6YLIkLHWN0mXY3yafPScSs6FcjsChCBE9Pigi8L11R87ftzkoU3beoFr9YI+ExvU4NfK5V1fWFygWPqdCZK56oLA8PDyn2xtsaeeKb2SWGLxL5dIXfrqfM+0BqfVRD2nqncJB7xxKvdcLCHZSY3BzHzdUS8RYM9yLBfpy+0M2/BId4tv4quq/Fof7hXo04MeAU6qbG/3ZClA58yX2CYfV7Wq6+wh3MT6uNzYHNtqtYx//r8LdXYS7OiTcVFDIbSkNpOS5zGzdg3ushw4ThYWFhKCSTaLucbYONWA+RHBvezwXeuSoYlYbSaSQuOqISd7kiZED4WjCge/4yvOrdv3oMOgXUayf6LDhFHynAAgQlFDFm6hn+ymnLJb19lKy8K6l4M9D/ZNL4g4ZPDi/Ho4UhtKRxETuF3pbWQQz0fJYUaqI7CsdyZrlfnVhk20STyEz04FhdDYRHx8iwN x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:KL1PR03MB5062.apcprd03.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(396003)(366004)(39860400002)(346002)(136003)(376002)(451199015)(6506007)(38100700002)(53546011)(7416002)(83380400001)(6512007)(26005)(86362001)(36756003)(316002)(5660300002)(8936002)(66946007)(76116006)(91956017)(66556008)(66476007)(66446008)(4326008)(8676002)(64756008)(122000001)(85182001)(6916009)(54906003)(71200400001)(2616005)(4001150100001)(30864003)(2906002)(478600001)(6486002)(38070700005)(41300700001)(186003)(99106002)(309714004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?WXQxMlFGRnpkdmJpZHpIQTl1ajVad3lKWS8wRThMNmFLR0JhU3M1aXl6ZnZq?= =?utf-8?B?VXNJUjVjUHBsR2ZuWFV2TGZtK090N0lvWjRwTTJaMFh2bVYvQjRZL0tMTHNv?= =?utf-8?B?MTZNelhhbEhmc0pQaVpEbUxRQktrSXZ1ZnVLTmwrMXJudjFSWGR3T0VuYStY?= =?utf-8?B?c1ZvMC9XbGxRdy8vcXU3b3lkNWt0L1FZOVZiMmh6RjNnUXFMWE1EeE4rODQ3?= =?utf-8?B?VThOQ1dZb3BwSGNRbXloWkQ1SVBSR01Rd3JuQmR6bUI4R2hRdndHQjRteC8y?= =?utf-8?B?cW9UbTFUUUNDL1Ric0U1anZRWWN4bmRodFY4aXZnVVlyWXhObUQ4QVNTcUF3?= =?utf-8?B?NzJZTUFwWlg4eTlPR1l2ZWo2b0NCaGppMnlNcDVxbHJidDAzemlHMHBLU25y?= =?utf-8?B?ZmtvNjdOWHB0M2d1VU5TLzI4Mk1rMXRPOXVhM2xGbnNiUXhTN3ByY0V0VkVm?= =?utf-8?B?b2IvVGtYOW81aWJWaTFoNFBJZlRNeFhRblh6MkhPMUxWNlJEbkFPSHR3YzlV?= =?utf-8?B?dXp0bWwwYk5MSGR2Z2N3eFY3ajVPZFF3UDJJcmJPTGdGQWtxZnZlUU1kcWx2?= =?utf-8?B?R3YxMW9jZDZPb1hLQjRxcFY4SXBkWXBkR2V2SzUyWFd3N0JXY2NGT2hUYTNR?= =?utf-8?B?Z3VLNHRMRGV6ZUFIWFpnRkRHRVVMaC9oTGcxZHp5Y2VXVEUvVVE0d0xpd2kx?= =?utf-8?B?L0FNR3J4TGtNOHlBWWQwV3NyT3BjYm5PWFc4YWNacWhZeWE5bWdYR1dtMjEw?= =?utf-8?B?NlhyRWhyR2Vic0RLcyt2ZXVxbi9nM3ZPVjBnSUc3Q0R0ZWZNbGp4QThSRXNm?= =?utf-8?B?WVdRcmExM1lrTXNHVHJqOTRFTnNibEZzQWNkc3pISTB4cXBDTjl0U3BYSkJW?= =?utf-8?B?WlFYWTd3OFhTSy9LVExOZTRUOURGQ2JmcmJ4SVNHVEo0bS9RMERSUENkTEhF?= =?utf-8?B?M0VMYVlYSmxMV29WVTNhT09SWkZ3dm1JUnRBdTFwc2o0UlExS05wTUJBakJC?= =?utf-8?B?MDNkTy9tL2dQZ25vdVN2QzJPTGVtYm9YTXY4RkpwbW0rNElmUGUvbWpjdDRu?= =?utf-8?B?NWRNQ3BobFU4U0pkUEpuK2FoaWdOaEdWRkE1YThoQitOU1I3bkpDYkZIM1U4?= =?utf-8?B?VmFFWERBVmloRnlId1FHb3RUSFJCUXpob21sc0toY0t0bG8xOUx0WWRvdk1S?= =?utf-8?B?Z0xYMVFMZk5uRExHRjBoeW1TSmd4ZUJmQVlDbHdJMVZxWGYxai9Id3dOUS9i?= =?utf-8?B?Zkx4VjgyYTdiY0RkQnBBbERhQVVTRDloQ1pGb2FNK3g0K0pvaVRwR2NxN09k?= =?utf-8?B?NWJtL0tIWWZJdEJDSnBuZVFMMkxQdUw1Z3NCeGR0YUpPNmZpcERVQjdnZ2t3?= =?utf-8?B?WW9uZnZ4U0lFMnRQYnJCNjdsSVJ2RDcxUnBwTno2Vm02c2dWU0t5b0EvdXpK?= =?utf-8?B?Q0xFOXdmdnhGMWtjN21NRUZCdTJLK1pQSEFzU3FKbEp1R2tkaFNOT1dObnFv?= =?utf-8?B?MzFYcTlZcGVaRS8rQkJxM0Y2dEdJQ0JUYU9aM3Z4dW9Zdk5jWWN1aHVlUEMv?= =?utf-8?B?Q0tNNjFxcXJOb1FXWkZoanplVjlkVVZ6ZzI2bTZLYThsbU9yREdXdVcyYzlu?= =?utf-8?B?ZlVPZHNKUDZhNTZ3eG50VlBjcUdkUU9NcW9hZHQ1WDRDMk4vTHhab01CL0wx?= =?utf-8?B?YkNLUzBYTEpJOGU0M3dtTXdNSFRuKzFHOVdmVS94MTRSMWxHVjZrZWUzbEF5?= =?utf-8?B?bndLN3pOS1F2RmVHMWpZMVREZDEyRG56VUppemJUdWVLTmt4ZWgzMmxZTEEr?= =?utf-8?B?TzBPL1NjdjVpSGk3Rnk0NGt4elZhWXNZSnNvZWF2eENvK3lZRTNiZ2c4dDZu?= =?utf-8?B?RFRlMHQ0b0FJL2tJY2wxNVVQYTRweGEwbU9DMFRGSkJuVmFXRTNPNUdHWVUx?= =?utf-8?B?cnVFeldZNWpSV3pFdmNydXlPa0cwVDJjM3NkMW5oUkhWZXdSZGErcmUxZk1Z?= =?utf-8?B?SU8rWk85Q01KUEN1ZVVma3RMUXJ4WG5zTzZsY0U2NFB5cCtwd1VYOE9GcUVh?= =?utf-8?B?WitjUktvVTBUc1FCOEZFcVdnbjdkY1RFVFlNMDJHL1B5aTdCSFdwZk1PTlAy?= =?utf-8?B?ZVorLzhjQmtGODRiRHJYbXh0ci9tSkFnSGJaUmhBQTVwMFZsVGZPN3AyaXYx?= =?utf-8?B?U0E9PQ==?= Content-ID: <0164C0501224D244919674F4131B309B@apcprd03.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: KL1PR03MB5062.apcprd03.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 21e6dfa4-d55f-443f-27a0-08dad111ce22 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Nov 2022 07:26:02.9184 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a7687ede-7a6b-4ef6-bace-642f677fbe31 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Z8QhKB1U81Z4ZudOmQPCfH+DUKaL2QEVbWZDFZRYWRgByfYfdUL4ZAxNdL2lpz25YYBvyLSZi05lE1Y7ksbId4KpPrePEnxWcmoD5vzVRaM= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PUZPR03MB7135 X-MTK: N X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221127_233648_448808_E734AF2E X-CRM114-Status: GOOD ( 22.72 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Thu, 2022-11-24 at 23:17 +0530, Vinod Koul wrote: > On 10-11-22, 21:27, Chunfeng Yun wrote: > > These debugfs files are mainly used to make eye diagram test > > easier, > > especially helpful to do HQA test for a new IC without efuse > > enabled. > > > > Signed-off-by: Chunfeng Yun > > --- > > v4: fix build warning of sometimes uninitialized variable > > > > v3: fix typo of "debugfs" suggested by AngeloGioacchino > > > > v2: add CONFIG_PHY_MTK_TPHY_DEBUGFS suggested by AngeloGioacchino > > --- > > drivers/phy/mediatek/Kconfig | 5 + > > drivers/phy/mediatek/phy-mtk-tphy.c | 405 > > +++++++++++++++++++++++++++- > > 2 files changed, 409 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/phy/mediatek/Kconfig > > b/drivers/phy/mediatek/Kconfig > > index 3125ecb5d119..e9fdfe9f519f 100644 > > --- a/drivers/phy/mediatek/Kconfig > > +++ b/drivers/phy/mediatek/Kconfig > > @@ -27,6 +27,11 @@ config PHY_MTK_TPHY > > multi-ports is first version, otherwise is second version, > > so you can easily distinguish them by banks layout. > > > > +config PHY_MTK_TPHY_DEBUGFS > > + bool "Add T-PHY Debugfs Files" > > + help > > + Say Y here to add debugfs files mainly for T-PHY HQA test. > > Why do we need a config option for this, is debugfs config option not > sufficient? We may want to disable these files even debugfs config is enabled in release image, and prefer to use them only when bring up new IC. > > > + > > config PHY_MTK_UFS > > tristate "MediaTek UFS M-PHY driver" > > depends on ARCH_MEDIATEK || COMPILE_TEST > > diff --git a/drivers/phy/mediatek/phy-mtk-tphy.c > > b/drivers/phy/mediatek/phy-mtk-tphy.c > > index e906a82791bd..f220a9a409bf 100644 > > --- a/drivers/phy/mediatek/phy-mtk-tphy.c > > +++ b/drivers/phy/mediatek/phy-mtk-tphy.c > > @@ -7,6 +7,7 @@ > > > > #include > > #include > > +#include > > #include > > #include > > #include > > @@ -264,6 +265,8 @@ > > > > #define TPHY_CLKS_CNT 2 > > > > +#define USER_BUF_LEN(count) min_t(size_t, 8, (count)) > > + > > enum mtk_phy_version { > > MTK_PHY_V1 = 1, > > MTK_PHY_V2, > > @@ -310,6 +313,7 @@ struct mtk_phy_instance { > > struct clk_bulk_data clks[TPHY_CLKS_CNT]; > > u32 index; > > u32 type; > > + struct dentry *dbgfs; > > struct regmap *type_sw; > > u32 type_sw_reg; > > u32 type_sw_index; > > @@ -332,10 +336,391 @@ struct mtk_tphy { > > const struct mtk_phy_pdata *pdata; > > struct mtk_phy_instance **phys; > > int nphys; > > + struct dentry *dbgfs_root; > > int src_ref_clk; /* MHZ, reference clock for slew rate > > calibrate */ > > int src_coef; /* coefficient for slew rate calibrate */ > > }; > > > > +#if IS_ENABLED(CONFIG_PHY_MTK_TPHY_DEBUGFS) > > + > > +enum u2_phy_params { > > + U2P_EYE_VRT = 0, > > + U2P_EYE_TERM, > > + U2P_EFUSE_EN, > > + U2P_EFUSE_INTR, > > + U2P_DISCTH, > > + U2P_PRE_EMPHASIS, > > +}; > > + > > +enum u3_phy_params { > > + U3P_EFUSE_EN = 0, > > + U3P_EFUSE_INTR, > > + U3P_EFUSE_TX_IMP, > > + U3P_EFUSE_RX_IMP, > > +}; > > + > > +static const char *const u2_phy_files[] = { > > + [U2P_EYE_VRT] = "vrt", > > + [U2P_EYE_TERM] = "term", > > + [U2P_EFUSE_EN] = "efuse", > > + [U2P_EFUSE_INTR] = "intr", > > + [U2P_DISCTH] = "discth", > > + [U2P_PRE_EMPHASIS] = "preemph", > > +}; > > + > > +static const char *const u3_phy_files[] = { > > + [U3P_EFUSE_EN] = "efuse", > > + [U3P_EFUSE_INTR] = "intr", > > + [U3P_EFUSE_TX_IMP] = "tx-imp", > > + [U3P_EFUSE_RX_IMP] = "rx-imp", > > +}; > > + > > +static int u2_phy_params_show(struct seq_file *sf, void *unused) > > +{ > > + struct mtk_phy_instance *inst = sf->private; > > + const char *fname = file_dentry(sf->file)->d_iname; > > + struct u2phy_banks *u2_banks = &inst->u2_banks; > > + void __iomem *com = u2_banks->com; > > + u32 max = 0; > > + u32 tmp = 0; > > + u32 val = 0; > > + int ret; > > + > > + ret = match_string(u2_phy_files, ARRAY_SIZE(u2_phy_files), > > fname); > > + if (ret < 0) > > + return ret; > > + > > + switch (ret) { > > + case U2P_EYE_VRT: > > + tmp = readl(com + U3P_USBPHYACR1); > > + val = FIELD_GET(PA1_RG_VRT_SEL, tmp); > > + max = FIELD_MAX(PA1_RG_VRT_SEL); > > + break; > > + > > + case U2P_EYE_TERM: > > + tmp = readl(com + U3P_USBPHYACR1); > > + val = FIELD_GET(PA1_RG_TERM_SEL, tmp); > > + max = FIELD_MAX(PA1_RG_TERM_SEL); > > + break; > > + > > + case U2P_EFUSE_EN: > > + if (u2_banks->misc) { > > + tmp = readl(u2_banks->misc + U3P_MISC_REG1); > > + max = 1; > > + } > > + > > + val = !!(tmp & MR1_EFUSE_AUTO_LOAD_DIS); > > + break; > > + > > + case U2P_EFUSE_INTR: > > + tmp = readl(com + U3P_USBPHYACR1); > > + val = FIELD_GET(PA1_RG_INTR_CAL, tmp); > > + max = FIELD_MAX(PA1_RG_INTR_CAL); > > + break; > > + > > + case U2P_DISCTH: > > + tmp = readl(com + U3P_USBPHYACR6); > > + val = FIELD_GET(PA6_RG_U2_DISCTH, tmp); > > + max = FIELD_MAX(PA6_RG_U2_DISCTH); > > + break; > > + > > + case U2P_PRE_EMPHASIS: > > + tmp = readl(com + U3P_USBPHYACR6); > > + val = FIELD_GET(PA6_RG_U2_PRE_EMP, tmp); > > + max = FIELD_MAX(PA6_RG_U2_PRE_EMP); > > + break; > > + > > + default: > > + seq_printf(sf, "invalid, %d\n", ret); > > + break; > > + } > > + > > + seq_printf(sf, "%s : %d [0, %d]\n", fname, val, max); > > + > > + return 0; > > +} > > + > > +static int u2_phy_params_open(struct inode *inode, struct file > > *file) > > +{ > > + return single_open(file, u2_phy_params_show, inode->i_private); > > +} > > + > > +static ssize_t u2_phy_params_write(struct file *file, const char > > __user *ubuf, > > + size_t count, loff_t *ppos) > > so are we writing to phy registers from userspace, why? Mainly because when bring up a new ic which efuse is not set, we need to tune some parameters many times for eye diagram test, using debugfs files will make it easier at runtime. Thanks a lot > > > +{ > > + const char *fname = file_dentry(file)->d_iname; > > + struct seq_file *sf = file->private_data; > > + struct mtk_phy_instance *inst = sf->private; > > + struct u2phy_banks *u2_banks = &inst->u2_banks; > > + void __iomem *com = u2_banks->com; > > + ssize_t rc; > > + u32 val; > > + int ret; > > + > > + rc = kstrtouint_from_user(ubuf, USER_BUF_LEN(count), 0, &val); > > + if (rc) > > + return rc; > > + > > + ret = match_string(u2_phy_files, ARRAY_SIZE(u2_phy_files), > > fname); > > + if (ret < 0) > > + return (ssize_t)ret; > > + > > + switch (ret) { > > + case U2P_EYE_VRT: > > + mtk_phy_update_field(com + U3P_USBPHYACR1, > > PA1_RG_VRT_SEL, val); > > + break; > > + > > + case U2P_EYE_TERM: > > + mtk_phy_update_field(com + U3P_USBPHYACR1, > > PA1_RG_TERM_SEL, val); > > + break; > > + > > + case U2P_EFUSE_EN: > > + if (u2_banks->misc) > > + mtk_phy_update_field(u2_banks->misc + > > U3P_MISC_REG1, > > + MR1_EFUSE_AUTO_LOAD_DIS, > > !!val); > > + break; > > + > > + case U2P_EFUSE_INTR: > > + mtk_phy_update_field(com + U3P_USBPHYACR1, > > PA1_RG_INTR_CAL, val); > > + break; > > + > > + case U2P_DISCTH: > > + mtk_phy_update_field(com + U3P_USBPHYACR6, > > PA6_RG_U2_DISCTH, val); > > + break; > > + > > + case U2P_PRE_EMPHASIS: > > + mtk_phy_update_field(com + U3P_USBPHYACR6, > > PA6_RG_U2_PRE_EMP, val); > > + break; > > + > > + default: > > + break; > > + } > > + > > + return count; > > +} > > + > > +static const struct file_operations u2_phy_fops = { > > + .open = u2_phy_params_open, > > + .write = u2_phy_params_write, > > + .read = seq_read, > > + .llseek = seq_lseek, > > + .release = single_release, > > +}; > > + > > +static void u2_phy_dbgfs_files_create(struct mtk_phy_instance > > *inst) > > +{ > > + u32 count = ARRAY_SIZE(u2_phy_files); > > + int i; > > + > > + for (i = 0; i < count; i++) > > + debugfs_create_file(u2_phy_files[i], 0644, inst->dbgfs, > > inst, &u2_phy_fops); > > pls use > > +} > > + > > +static int u3_phy_params_show(struct seq_file *sf, void *unused) > > +{ > > + struct mtk_phy_instance *inst = sf->private; > > + const char *fname = file_dentry(sf->file)->d_iname; > > + struct u3phy_banks *u3_banks = &inst->u3_banks; > > + u32 val = 0; > > + u32 max = 0; > > + u32 tmp; > > + int ret; > > + > > + ret = match_string(u3_phy_files, ARRAY_SIZE(u3_phy_files), > > fname); > > + if (ret < 0) > > + return ret; > > + > > + switch (ret) { > > + case U3P_EFUSE_EN: > > + tmp = readl(u3_banks->phyd + U3P_U3_PHYD_RSV); > > + val = !!(tmp & P3D_RG_EFUSE_AUTO_LOAD_DIS); > > + max = 1; > > + break; > > + > > + case U3P_EFUSE_INTR: > > + tmp = readl(u3_banks->phya + U3P_U3_PHYA_REG0); > > + val = FIELD_GET(P3A_RG_IEXT_INTR, tmp); > > + max = FIELD_MAX(P3A_RG_IEXT_INTR); > > + break; > > + > > + case U3P_EFUSE_TX_IMP: > > + tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL0); > > + val = FIELD_GET(P3D_RG_TX_IMPEL, tmp); > > + max = FIELD_MAX(P3D_RG_TX_IMPEL); > > + break; > > + > > + case U3P_EFUSE_RX_IMP: > > + tmp = readl(u3_banks->phyd + U3P_U3_PHYD_IMPCAL1); > > + val = FIELD_GET(P3D_RG_RX_IMPEL, tmp); > > + max = FIELD_MAX(P3D_RG_RX_IMPEL); > > + break; > > + > > + default: > > + seq_printf(sf, "invalid, %d\n", ret); > > + break; > > + } > > + > > + seq_printf(sf, "%s : %d [0, %d]\n", fname, val, max); > > + > > + return 0; > > +} > > + > > +static int u3_phy_params_open(struct inode *inode, struct file > > *file) > > +{ > > + return single_open(file, u3_phy_params_show, inode->i_private); > > +} > > + > > +static ssize_t u3_phy_params_write(struct file *file, const char > > __user *ubuf, > > + size_t count, loff_t *ppos) > > +{ > > + const char *fname = file_dentry(file)->d_iname; > > + struct seq_file *sf = file->private_data; > > + struct mtk_phy_instance *inst = sf->private; > > + struct u3phy_banks *u3_banks = &inst->u3_banks; > > + void __iomem *phyd = u3_banks->phyd; > > + ssize_t rc; > > + u32 val; > > + int ret; > > + > > + rc = kstrtouint_from_user(ubuf, USER_BUF_LEN(count), 0, &val); > > + if (rc) > > + return rc; > > + > > + ret = match_string(u3_phy_files, ARRAY_SIZE(u3_phy_files), > > fname); > > + if (ret < 0) > > + return (ssize_t)ret; > > + > > + switch (ret) { > > + case U3P_EFUSE_EN: > > + mtk_phy_update_field(phyd + U3P_U3_PHYD_RSV, > > + P3D_RG_EFUSE_AUTO_LOAD_DIS, > > !!val); > > + break; > > + > > + case U3P_EFUSE_INTR: > > + mtk_phy_update_field(u3_banks->phya + U3P_U3_PHYA_REG0, > > P3A_RG_IEXT_INTR, val); > > + break; > > + > > + case U3P_EFUSE_TX_IMP: > > + mtk_phy_update_field(phyd + U3P_U3_PHYD_IMPCAL0, > > P3D_RG_TX_IMPEL, val); > > + mtk_phy_set_bits(phyd + U3P_U3_PHYD_IMPCAL0, > > P3D_RG_FORCE_TX_IMPEL); > > + break; > > + > > + case U3P_EFUSE_RX_IMP: > > + mtk_phy_update_field(phyd + U3P_U3_PHYD_IMPCAL1, > > P3D_RG_RX_IMPEL, val); > > + mtk_phy_set_bits(phyd + U3P_U3_PHYD_IMPCAL1, > > P3D_RG_FORCE_RX_IMPEL); > > + break; > > + > > + default: > > + break; > > + } > > + > > + return count; > > +} > > + > > +static const struct file_operations u3_phy_fops = { > > + .open = u3_phy_params_open, > > + .write = u3_phy_params_write, > > + .read = seq_read, > > + .llseek = seq_lseek, > > + .release = single_release, > > +}; > > + > > +static void u3_phy_dbgfs_files_create(struct mtk_phy_instance > > *inst) > > +{ > > + u32 count = ARRAY_SIZE(u3_phy_files); > > + int i; > > + > > + for (i = 0; i < count; i++) > > + debugfs_create_file(u3_phy_files[i], 0644, inst->dbgfs, > > inst, &u3_phy_fops); > > +} > > + > > +static int tphy_type_show(struct seq_file *sf, void *unused) > > +{ > > + struct mtk_phy_instance *inst = sf->private; > > + const char *type; > > + > > + switch (inst->type) { > > + case PHY_TYPE_USB2: > > + type = "USB2"; > > + break; > > + case PHY_TYPE_USB3: > > + type = "USB3"; > > + break; > > + case PHY_TYPE_PCIE: > > + type = "PCIe"; > > + break; > > + case PHY_TYPE_SGMII: > > + type = "SGMII"; > > + break; > > + case PHY_TYPE_SATA: > > + type = "SATA"; > > + break; > > + default: > > + type = ""; > > + } > > + > > + seq_printf(sf, "%s\n", type); > > + > > + return 0; > > +} > > + > > +DEFINE_SHOW_ATTRIBUTE(tphy_type); > > + > > +static void tphy_debugfs_init(struct mtk_tphy *tphy, struct > > mtk_phy_instance *inst) > > +{ > > + char name[16]; > > + > > + snprintf(name, sizeof(name) - 1, "phy.%d", inst->index); > > + inst->dbgfs = debugfs_create_dir(name, tphy->dbgfs_root); > > + > > + debugfs_create_file("type", 0444, inst->dbgfs, inst, > > &tphy_type_fops); > > + > > + switch (inst->type) { > > + case PHY_TYPE_USB2: > > + u2_phy_dbgfs_files_create(inst); > > + break; > > + case PHY_TYPE_USB3: > > + case PHY_TYPE_PCIE: > > + u3_phy_dbgfs_files_create(inst); > > + break; > > + default: > > + break; > > + } > > +} > > + > > +static void tphy_debugfs_exit(struct mtk_phy_instance *inst) > > +{ > > + debugfs_remove_recursive(inst->dbgfs); > > + inst->dbgfs = NULL; > > +} > > + > > +static void tphy_debugfs_root_create(struct mtk_tphy *tphy) > > +{ > > + tphy->dbgfs_root = debugfs_create_dir(dev_name(tphy->dev), > > phy_debug_root); > > +} > > + > > +static void tphy_debugfs_root_remove(struct mtk_tphy *tphy) > > +{ > > + debugfs_remove_recursive(tphy->dbgfs_root); > > + tphy->dbgfs_root = NULL; > > +} > > + > > +#else > > + > > +static void tphy_debugfs_init(struct mtk_tphy *tphy, struct > > mtk_phy_instance *inst) > > +{} > > + > > +static void tphy_debugfs_exit(struct mtk_phy_instance *inst) > > +{} > > + > > +static void tphy_debugfs_root_create(struct mtk_tphy *tphy) > > +{} > > + > > +static void tphy_debugfs_root_remove(struct mtk_tphy *tphy) > > +{} > > + > > +#endif > > + > > static void hs_slew_rate_calibrate(struct mtk_tphy *tphy, > > struct mtk_phy_instance *instance) > > { > > @@ -1032,6 +1417,8 @@ static int mtk_phy_init(struct phy *phy) > > return -EINVAL; > > } > > > > + tphy_debugfs_init(tphy, instance); > > + > > return 0; > > } > > > > @@ -1068,6 +1455,8 @@ static int mtk_phy_exit(struct phy *phy) > > struct mtk_phy_instance *instance = phy_get_drvdata(phy); > > struct mtk_tphy *tphy = dev_get_drvdata(phy->dev.parent); > > > > + tphy_debugfs_exit(instance); > > + > > if (instance->type == PHY_TYPE_USB2) > > u2_phy_instance_exit(tphy, instance); > > > > @@ -1295,15 +1684,29 @@ static int mtk_tphy_probe(struct > > platform_device *pdev) > > } > > > > provider = devm_of_phy_provider_register(dev, mtk_phy_xlate); > > + if (IS_ERR(provider)) > > + return dev_err_probe(dev, PTR_ERR(provider), "probe > > failed\n"); > > + > > + tphy_debugfs_root_create(tphy); > > + return 0; > > > > - return PTR_ERR_OR_ZERO(provider); > > put_child: > > of_node_put(child_np); > > return retval; > > } > > > > +static int mtk_tphy_remove(struct platform_device *pdev) > > +{ > > + struct mtk_tphy *tphy; > > + > > + tphy = platform_get_drvdata(pdev); > > + tphy_debugfs_root_remove(tphy); > > + return 0; > > +} > > + > > static struct platform_driver mtk_tphy_driver = { > > .probe = mtk_tphy_probe, > > + .remove = mtk_tphy_remove, > > .driver = { > > .name = "mtk-tphy", > > .of_match_table = mtk_tphy_id_table, > > -- > > 2.18.0 > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel