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 052ECECAAD8 for ; Wed, 21 Sep 2022 06:28:33 +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=IQYvmmOwUFNNlnXKkT2JyMLj8h/uo4pWmTm+X6GNUrw=; b=EQDcRkACvofEhf EM5ep3mg96DpZ/rgAYZL0tz+sW4kmKo1A3Mu0f3U9LzA31mKFMig7FW4Yd0Cei7v44THoWNHtfeQq 3ty7bEYI4T0cqtxg4hIhemPsTyKl4eNo807tav3BRfbInx/k6jRIyWD/6j7gO4N+UZBY9anDTd80U UHFq7q5tC6XB9EB2c1idVETBkeuQhcIoSOzTe4P2TGCXvMoYIxqwli6tIi5es13iHpkCByZdVyUrJ A47d1ziXbhArhw8jI2sCMF5iW3oZhQPayx8a1xM8tsAONkEJPYCjEnZXqJ6+MFoT/0LFvbmkUVLxC /cA1ufLb2GRgoWaqAAyA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oatCf-009HmP-7g; Wed, 21 Sep 2022 06:27:25 +0000 Received: from esa.microchip.iphmx.com ([68.232.153.233]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oatCZ-009Hkl-JS for linux-arm-kernel@lists.infradead.org; Wed, 21 Sep 2022 06:27:23 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=microchip.com; i=@microchip.com; q=dns/txt; s=mchp; t=1663741639; x=1695277639; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=/38KoVazaiGsUqsD29YeWibjaoBOm2oWuJM65KJMU2o=; b=aKFGCx+Cg71186doqj3qOVk/biAlM4GWbMuglKGBYyfif9NOGeW+H01U fUGbQkONzcEDIZOYDfnRe88qngtgieWPSLrQCoV5KTONJT/nJeDGqBKRs ChMt1a/jKmkdf2/TY8tFM6VXkq9k6qdLaMnTb/9+sZzMKkGJWy7Uipxh3 6YoV5Fg/vo8exwr6gimUP5YJRAEUc3EXcndzf9HwOo6Tn6VVovSo/pPgF j77im/cLsQuyGHKYXh7gHhU4+qS1vL3JVoB2IfxHVL4mbtnMgpAeDc48o cQ6K/sqptIhJFvScyDPiZieOxF0cPeGVIH3ecvzrJGeSKBmFhVvF0aw41 Q==; X-IronPort-AV: E=Sophos;i="5.93,332,1654585200"; d="scan'208";a="181382347" Received: from unknown (HELO email.microchip.com) ([170.129.1.10]) by esa3.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 20 Sep 2022 23:27:17 -0700 Received: from chn-vm-ex04.mchp-main.com (10.10.85.152) by chn-vm-ex01.mchp-main.com (10.10.85.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12; Tue, 20 Sep 2022 23:27:17 -0700 Received: from NAM10-MW2-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.12 via Frontend Transport; Tue, 20 Sep 2022 23:27:16 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=m0BCuVWe4jIFPyLDTTnoRHdYunpOWtE6PxYySxCS3iscPIqmNpdRgTVefIwM2UVP2o9at1Pm6bFc8rviDHZh2bhuqQUqW/M4qSoaykll5/2Q+zLc6J/wl4e8pyB9Zvhpj7i7GgFX+IiXn1/8yw326dVqQ75ahhyA64lEmJZXEHaVNywM5c771CkaQwqyCIY6rApXSwBKJEVDWzP/KTw6E0qq6cCGfEpmKQGX7Zrubo8zqKc4wzOCWOM26f2rszlgMoZgLZ7V7hCSKYBli3g/frGRIgkV0Ewbj5EfcyPvN+fvKZ9BU8mak/EVlaNaCgdSCafLiPJ0rwCz4Y/vgnwnpw== 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=/38KoVazaiGsUqsD29YeWibjaoBOm2oWuJM65KJMU2o=; b=X2m3A87SxaREEUwjk8wQENRjLCQVqyMAGauawRujhnfNldduaWYOkXrFHg/BrjaiO3P8zvl8mQWoqG9Orvt3bDPaEOgVUT7cYMsku+xo5SzmI7GSbu9WlvhX/tXoW4Skaza2vSiuENpp2XTG3pArcFEx0N2fvPzLA234txOp6VjjehnUebLHs7aOxOybfTtKKWqF2hINJCapK5SJ5Boih9TVnywtT0KY0WlnI3eV2KDA8b82/Jcq0PRp/ebd/jMJn8hqzkAPmSqRnR9B51kB9/nQsi4b0EsdapOBIEfHhIVxCrU4slx0ZUHo+zfGiXwR7IdsYR+Fe7E1ME4pxvQYBA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=microchip.com; dmarc=pass action=none header.from=microchip.com; dkim=pass header.d=microchip.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector2-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/38KoVazaiGsUqsD29YeWibjaoBOm2oWuJM65KJMU2o=; b=LsxrEQYGc1DJJb6C8H1ppAYsUd5msRAJfieIFa2cn5VzlXdsyUOzr3+s/rpQJs51/z+OeOhLwgBa3iNFZnbl0/w4noZ9xbp+BA+xe8qnuGL6jIqRRKdTXLHEi2dzqHoT8oCrXQY77HBs1kZT/aIGaUspWEZipokNrNFdmtQejog= Received: from BN6PR11MB1953.namprd11.prod.outlook.com (2603:10b6:404:105::14) by SJ0PR11MB6694.namprd11.prod.outlook.com (2603:10b6:a03:44d::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.18; Wed, 21 Sep 2022 06:27:10 +0000 Received: from BN6PR11MB1953.namprd11.prod.outlook.com ([fe80::a159:97ec:24bc:6610]) by BN6PR11MB1953.namprd11.prod.outlook.com ([fe80::a159:97ec:24bc:6610%11]) with mapi id 15.20.5654.016; Wed, 21 Sep 2022 06:27:10 +0000 From: To: , , , , , , , , , , CC: , , , , Subject: Re: [PATCH v4 9/9] tty: serial: atmel: Make the driver aware of the existence of GCLK Thread-Topic: [PATCH v4 9/9] tty: serial: atmel: Make the driver aware of the existence of GCLK Thread-Index: AQHYzX4orIW/D8J/FEGjyCLG2o41r63pa16A Date: Wed, 21 Sep 2022 06:27:10 +0000 Message-ID: <2894e7db-78b1-59ee-ad5f-e45c8597e9cf@microchip.com> References: <20220919150846.1148783-1-sergiu.moga@microchip.com> <20220919150846.1148783-10-sergiu.moga@microchip.com> <342f5733-25df-9409-2a15-47b3f801a4a7@microchip.com> In-Reply-To: <342f5733-25df-9409-2a15-47b3f801a4a7@microchip.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=microchip.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BN6PR11MB1953:EE_|SJ0PR11MB6694:EE_ x-ms-office365-filtering-correlation-id: 6975c1b6-ec23-46c3-c95c-08da9b9a5079 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: TQYA+RHLQJtWmyfjy0fbFvlN1r7zRF2ZxDV133tFaz7xtzIZptOVIE7i6mrm7zyDxnniBwhO4YvaWrk5oq7RA1AAMjSL+Flo4pwERIk2ibrMyUoYg9Mw5pXV9t5wmQ3Pjo9VOf1hWyD4td/OaKEmqQZ8BmYdhZPQDJ9ZSMWcKwM9IM22cUAG1jfA96LaBIShx7yJbUj/J5uPLdLiosjkacjTwNJRZbUCmGb0P1QmUk0B596woc1qE19fTw5/6v7lQmCBDHrVH+fpUo35hCbAArF2j1HZhCUQLFAw6cOKvgTjUjPL0RENcCklZju6loYg0jhl6svkQU3IsLd/1nxAQmD6xYNsoShjfLS9mDYeCloDwQnIvxkFCoFIf0Usk8NhkQcoOCsXzNQWJRgMa9EyvwWL4rMVwwgklAFCK+fvVDnTaZF+jodtTJEaaR3/pF/8vAzATPfZcCcS3UvQW8oJ67Q3fUyTD0FlRG7tqkGNLDh8sqJDpdLy0JAInY67aGVU1Hc9KpweysqCe8uZG9NNOJeu3inYDx176sE9a8qevfBF+ikQGIIkDCTiX4jEJsWfFVsCQeRyty65T3YTymMKgWrzDW/eSs38NWzxbzqW9mwSKmj/q4xa1JB4kzfEQhCjniaNYAn0FraKq5c1RnmMluYvo8zMQUMCOz41XqaXBktD2zl8+Vnf657zDBO0XisG0hlLhpIVwwvOh8rfupfFpSNMvM1BtUvuQXrcp4kTLGCU47Qr5gYs8rb9UwugGecoyAGzP/QJYGdZCG4CxG5bmIszVYBGAo5byQxRPE+NpM9UvjlOlOffvz7W8rk/H4riRirVeJzwgImqznyzL6J6Iy9seuGgb9ZBEhqcR8owEBY= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN6PR11MB1953.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(136003)(396003)(39860400002)(346002)(366004)(376002)(451199015)(76116006)(4326008)(7416002)(66476007)(66946007)(5660300002)(64756008)(54906003)(6636002)(91956017)(31696002)(66446008)(8676002)(316002)(122000001)(66556008)(38100700002)(6506007)(83380400001)(41300700001)(110136005)(53546011)(6486002)(71200400001)(86362001)(478600001)(921005)(186003)(26005)(2616005)(6512007)(38070700005)(8936002)(2906002)(36756003)(31686004)(43740500002)(45980500001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?dmVCbEVmY1RNYTg4KzB6ZWNRQTRvaDJJOEtaSTZHaTNmM3lsRFZnazRFU0sy?= =?utf-8?B?SEo4YzlVMTJ2aEJ5NmQ1VnZYWGNwUG53U1IrMkxMYXhYeFlqbFgwSWVFQkd2?= =?utf-8?B?cVZRTHkrTGtBNHkyRXBWNXhKNzYrcnhUNmhYL2FwNkdlL055K05KR1pHUnNa?= =?utf-8?B?TzRsczhGUW1qMjk0Slp1SEZYVmMwSDRmOSt5MmtlVVhWNU9OcDZVZEpPeUNx?= =?utf-8?B?MnhERUE2UlRXaU5mS0tvN1BMZWdadHZrQmUvUE9yaHVjYmU0V3FpVGF1L2Fy?= =?utf-8?B?NFBlalJiZ2RuZjV3UUg2YUNibjNyejhER3RvbWtwdElmRmRQN0JXME1TR0F5?= =?utf-8?B?Y2xzSjl2Wm0yV3pFcUdCQ1FPT3AyT3M4NmowV25sajFZUGNzQkZkOHhjQnl4?= =?utf-8?B?WWdLbURma3BlVmY3VDlVeW16eUFtdzUrL0ZJWEJIT2FwOVRoTVIxNWxZbUwr?= =?utf-8?B?dk50RzlHR0RIMWtJNHZiWExMTCtWVWdZbW9XYVEvSUZqTVJtWEdkTmRwK1h1?= =?utf-8?B?bzdnSUQ0OERjTE13ZVRDUkJweGo3elNWRFhSSHhvSkszbGl1NjNJQlg2cmZx?= =?utf-8?B?bWU5ZjRUSUNQeS9TbkY2N1gyZ3JVRHJRK2xTZXYyblpGM28xMENGY0g1dkQr?= =?utf-8?B?RHppbnlCK1AzclhQUWdhUGVKTlVlRXRGZXJrU2JuY1JIamZxbDc0T2FDd2Qr?= =?utf-8?B?TFg4MzBYMjNPeVRmNU42SlN6MmYzUGQ5OG9ENHM3V1lFSksrajhGajJ4b3pr?= =?utf-8?B?dzk0cFdPS3UrYTBTQmhkKzQvTjYzODE0TnRtdzcwMjV1engvY2srWXhBZ2ln?= =?utf-8?B?aUZyWE1hdVZQaysxemdkRDNsdEVUdzVjZmZENmU3TmQzTU5lQXdueHlCb2xT?= =?utf-8?B?SHlNMHNlM214MjZpYWVCZ2loa3JkRTJHTHNETlFoa1BHaURDZyszVklhUFpY?= =?utf-8?B?R1RDaW1IeG1jbFR5UUpZdGM5MHBFOVNRVDNYbm5DR05meWNvTkJvR3FEbW42?= =?utf-8?B?cG5GNG91VmdSNHBsd0p2WHRjOFBBNnNNak0yNnNxNTBwWEZYYlBjTGN4ZUhD?= =?utf-8?B?WlVqZDF3NXJEdlJWZXo5ZW5ITFhnYjIzRGNVRkFBQ0d1dnlYa0EvazRSOTJE?= =?utf-8?B?Q0R1NGtqc2UrOVpvbFM3WjBWblQwTDJwd0ROUmFtbjI2aHA2Y0gwVTVhRjZJ?= =?utf-8?B?RHo4MVpsQ1JXSTNwa0dUMkh2SWlPRGIveHNMd0I0OXFxRURESGtqVzBZcS85?= =?utf-8?B?U2ZEMElucFVUUW8xVFIyNzZiK3U1TVoyMFlSeTNVQ1A3MUJ4VWFLeWZxbVp3?= =?utf-8?B?VXVqaG1ZOWFpV2gwK2R0blhWOFpjOWh3eWZ6ZXJZNkhmZk5Sc2sxcTQvVUc1?= =?utf-8?B?eTFiVjVhNzB4NEE5UnFpSmN6ZlJKdXlRRW1DbC9qSEpTQU1MRHo3ejRGNFZM?= =?utf-8?B?Tzh2cHlBZ3lOTFBrL2lxMWpCVTI4UTB4c1BvVXY4Z1dOWmZUQWd5Z3EwbjVz?= =?utf-8?B?SktpcFA4RGxYbjVQbnp6V3hLb2NQN0RDZXpRYXF5OTBuVC9paHpPZ2plREha?= =?utf-8?B?Rm00a2FXODNGNXVVOW5GSTJ3UVg0eGVhMDViVVY0WjcraGVyM09oOXg1Yks1?= =?utf-8?B?NkFtbWZLUDZqc3ArZ1llcEdsWHdVdWNUbHRVQUYxUDlBK0M2TXEzSTFKM01s?= =?utf-8?B?NzRTd2R4emlEeVp3ZGRvVWp6T0Z6ZGRXbUx5aVZVb0JGcjFJa1JrbnppUVBX?= =?utf-8?B?eW4rZ282bUpZRW5UVWVubEg0bjNrT0dSMUJQSGdxV09DQmFMTE9LdEhBVkIy?= =?utf-8?B?cy9DQWZsNXZYT1BVdHZGa1ZJRzhYOURJVnprZXZuVkZhcWo5Uk0rWWpmMFRo?= =?utf-8?B?VVZKL2srVDg0WFRPUmdhU1d1NEx1QzNxNWw1YVFKajJRbDFKKzN1WkVIWlNV?= =?utf-8?B?RXhaV3VrQTBhVEgvT2JvdkYxT3pBYk0rbWhpdVFzSjBIZW9MS1ZINnlIMDdH?= =?utf-8?B?V2hMSWhvZFFyQUdOekpxanRQbHNtYjYwWmtta2pMalNQNkQ1VVpNc3FGS3dx?= =?utf-8?B?d1orb2xKemJFTG9IOVY5RnhGeG5VWG1jWHlLVUlISk1XSVNhMFp0ZmxnRDJh?= =?utf-8?B?N05MT3g1THU0ckNOd0RaaXJWZlBleEZBWUtnNUZ6RGJod3lKdEN3amxPb1FE?= =?utf-8?B?Mmc9PQ==?= Content-ID: <8E76C7F6E72CC844B04A69BC9D096B5E@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN6PR11MB1953.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6975c1b6-ec23-46c3-c95c-08da9b9a5079 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Sep 2022 06:27:10.3149 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: DPeNBn9ziqmj2OeRHqRMvKD5AwVX2O/WuCeNJ88qLlXmRUWPtG227/4M51GzXCduMLF9S4Q4prICASgpbvaPZ5NsX6UjadkVjw99BsVMDtA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB6694 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220920_232719_670136_4F7DE590 X-CRM114-Status: GOOD ( 25.21 ) 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 21.09.2022 08:51, Claudiu Beznea - M18063 wrote: > On 19.09.2022 18:08, Sergiu Moga wrote: >> Previously, the atmel serial driver did not take into account the >> possibility of using the more customizable generic clock as its >> baudrate generator. Unless there is a Fractional Part available to >> increase accuracy, there is a high chance that we may be able to >> generate a baudrate closer to the desired one by using the GCLK as the >> clock source. Now, depending on the error rate between >> the desired baudrate and the actual baudrate, the serial driver will >> fallback on the generic clock. The generic clock must be provided >> in the DT node of the serial that may need a more flexible clock source. >> >> Signed-off-by: Sergiu Moga > > Reviewed-by: Claudiu Beznea Actually, I'm taking this back at the moment. > > >> --- >> >> >> v1 -> v2: >> - take into account the different placement of the baudrate clock source >> into the IP's Mode Register (USART vs UART) >> - don't check for atmel_port->gclk != NULL >> - use clk_round_rate instead of clk_set_rate + clk_get_rate >> - remove clk_disable_unprepare from the end of the probe method >> >> >> >> v2 -> v3: >> - add the error rate calculation function as an inline function instead of >> a macro definition >> - add `gclk_fail` goto >> - replace `goto err` with `goto err_clk_disable_unprepare;` >> >> >> >> v3 -> v4: >> - Nothing, this was previously [PATCH 14] >> >> >> drivers/tty/serial/atmel_serial.c | 59 ++++++++++++++++++++++++++++++- >> 1 file changed, 58 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/tty/serial/atmel_serial.c b/drivers/tty/serial/atmel_serial.c >> index c983798a4ab2..426f9d4f9a5a 100644 >> --- a/drivers/tty/serial/atmel_serial.c >> +++ b/drivers/tty/serial/atmel_serial.c >> @@ -15,6 +15,7 @@ >> #include >> #include >> #include >> +#include >> #include >> #include >> #include >> @@ -110,6 +111,7 @@ struct atmel_uart_char { >> struct atmel_uart_port { >> struct uart_port uart; /* uart */ >> struct clk *clk; /* uart clock */ >> + struct clk *gclk; /* uart generic clock */ >> int may_wakeup; /* cached value of device_may_wakeup for times we need to disable it */ >> u32 backup_imr; /* IMR saved during suspend */ >> int break_active; /* break being received */ >> @@ -229,6 +231,11 @@ static inline int atmel_uart_is_half_duplex(struct uart_port *port) >> (port->iso7816.flags & SER_ISO7816_ENABLED); >> } >> >> +static inline int atmel_error_rate(int desired_value, int actual_value) >> +{ >> + return 100 - (desired_value * 100) / actual_value; >> +} >> + >> #ifdef CONFIG_SERIAL_ATMEL_PDC >> static bool atmel_use_pdc_rx(struct uart_port *port) >> { >> @@ -2117,6 +2124,8 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state, >> * This is called on uart_close() or a suspend event. >> */ >> clk_disable_unprepare(atmel_port->clk); >> + if (__clk_is_enabled(atmel_port->gclk)) >> + clk_disable_unprepare(atmel_port->gclk); >> break; >> default: >> dev_err(port->dev, "atmel_serial: unknown pm %d\n", state); >> @@ -2132,7 +2141,9 @@ static void atmel_set_termios(struct uart_port *port, >> { >> struct atmel_uart_port *atmel_port = to_atmel_uart_port(port); >> unsigned long flags; >> - unsigned int old_mode, mode, imr, quot, baud, div, cd, fp = 0; >> + unsigned int old_mode, mode, imr, quot, div, cd, fp = 0; >> + unsigned int baud, actual_baud, gclk_rate; >> + int ret; >> >> /* save the current mode register */ >> mode = old_mode = atmel_uart_readl(port, ATMEL_US_MR); >> @@ -2302,6 +2313,46 @@ static void atmel_set_termios(struct uart_port *port, >> cd = min_t(unsigned int, cd, ATMEL_US_CD); >> } >> >> + /* >> + * If there is no Fractional Part, there is a high chance that >> + * we may be able to generate a baudrate closer to the desired one >> + * if we use the GCLK as the clock source driving the baudrate >> + * generator. >> + */ >> + if (!atmel_port->has_frac_baudrate) { >> + if (__clk_is_enabled(atmel_port->gclk)) >> + clk_disable_unprepare(atmel_port->gclk); >> + gclk_rate = clk_round_rate(atmel_port->gclk, 16 * baud); >> + actual_baud = clk_get_rate(atmel_port->clk) / (16 * cd); >> + if (gclk_rate && abs(atmel_error_rate(baud, actual_baud)) > >> + abs(atmel_error_rate(baud, gclk_rate / 16))) { If this condition fails and you previously used GCLK for clock generation you should remove bits ATMEL_US_USCLKS or ATMEL_UA_BRSRCCK from mode variable, to avoid configuring MR with GCLK support and clock not being properly setup. >> + clk_set_rate(atmel_port->gclk, 16 * baud); >> + ret = clk_prepare_enable(atmel_port->gclk); >> + if (ret) >> + goto gclk_fail; >> + >> + if (atmel_port->is_usart) { >> + mode &= ~ATMEL_US_USCLKS; >> + mode |= ATMEL_US_USCLKS_GCLK; >> + } else { >> + mode &= ~ATMEL_UA_BRSRCCK; >> + mode |= ATMEL_UA_BRSRCCK_GCLK; >> + } >> + >> + /* >> + * Set the Clock Divisor for GCLK to 1. >> + * Since we were able to generate the smallest >> + * multiple of the desired baudrate times 16, >> + * then we surely can generate a bigger multiple >> + * with the exact error rate for an equally increased >> + * CD. Thus no need to take into account >> + * a higher value for CD. >> + */ >> + cd = 1; >> + } >> + } >> + >> +gclk_fail: >> quot = cd | fp << ATMEL_US_FP_OFFSET; >> >> if (!(port->iso7816.flags & SER_ISO7816_ENABLED)) >> @@ -2897,6 +2948,12 @@ static int atmel_serial_probe(struct platform_device *pdev) >> if (ret) >> goto err; >> >> + atmel_port->gclk = devm_clk_get_optional(&pdev->dev, "gclk"); >> + if (IS_ERR(atmel_port->gclk)) { >> + ret = PTR_ERR(atmel_port->gclk); >> + goto err_clk_disable_unprepare; >> + } >> + >> ret = atmel_init_port(atmel_port, pdev); >> if (ret) >> goto err_clk_disable_unprepare; > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel