From patchwork Mon Feb 25 08:15:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1047622 X-Patchwork-Delegate: uboot@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=wdc.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=wdc.com header.i=@wdc.com header.b="RzXxowUH"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="iBJRrwWk"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 447FH100x0z9s9T for ; Mon, 25 Feb 2019 19:19:40 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 915E0C21D56; Mon, 25 Feb 2019 08:19:33 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=BAD_ENC_HEADER, KHOP_BIG_TO_CC, RCVD_IN_DNSWL_LOW, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 82489C21E34; Mon, 25 Feb 2019 08:15:20 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id E14AEC21E12; Mon, 25 Feb 2019 08:15:18 +0000 (UTC) Received: from esa6.hgst.iphmx.com (esa6.hgst.iphmx.com [216.71.154.45]) by lists.denx.de (Postfix) with ESMTPS id B70F1C21DD4 for ; Mon, 25 Feb 2019 08:15:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1551082507; x=1582618507; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=jki6yc4Dgywc+/2UFctRcM6KIGbue7NLrZzh+PGks1I=; b=RzXxowUHRzy1awSpYdE0Is06d5B4na9emeiYDo5VEbApAap1ezv4SXxI WqxEApKUi4e56rLlEEzEcL7cqjUOTg7LNbTv++1JtcbpTP8uyj72at7nZ HdtArpnXMu1asNL98Gu5UB0o44HE1X6HZVJn8SK1v5O+XGjp1cSeZcgkA ok45MOeaqppP+KpWmPcJecLYhUCQcPCHPDgYQQZOwrZMcE9mk7B5xd2ni rj9cShAhON6/iLYIcy57hS+878Lm+STzSPDTfGRDpXkAeigXDKTEaXAj2 EFIKFWHe0FrhSmiSjCdOyxyHO22GthqrUP9RuM4cbbVjfaRuZofBQw9xo Q==; X-IronPort-AV: E=Sophos;i="5.58,410,1544457600"; d="scan'208";a="103840184" Received: from mail-sn1nam04lp2051.outbound.protection.outlook.com (HELO NAM04-SN1-obe.outbound.protection.outlook.com) ([104.47.44.51]) by ob1.hgst.iphmx.com with ESMTP; 25 Feb 2019 16:15:03 +0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sharedspace.onmicrosoft.com; s=selector1-wdc-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=FqeSzEs6ykL19UgS2gTj9tz1EZqeYicmQtYCOl+rl+Y=; b=iBJRrwWk9CW3UCQkDivbv3BJegYuoO+WST4pZiDb1FS4ZR0F9FQOjYoB05R2x/ZexHkgTCLq875cVvFQBcp1JwCqOl5AfbCKcC6IFVQy8HUk42Y6vKZvOuMQvcHzRRzR9EJtfv119NKvmFvG/JyyADUUMkFXEWQ78J4uaQQxRpE= Received: from MN2PR04MB6061.namprd04.prod.outlook.com (20.178.246.15) by MN2PR04MB5789.namprd04.prod.outlook.com (20.179.20.159) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1643.15; Mon, 25 Feb 2019 08:15:02 +0000 Received: from MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::d197:7b59:7e0d:e819]) by MN2PR04MB6061.namprd04.prod.outlook.com ([fe80::d197:7b59:7e0d:e819%3]) with mapi id 15.20.1643.019; Mon, 25 Feb 2019 08:15:02 +0000 From: Anup Patel To: Rick Chen , Bin Meng , Joe Hershberger , Michal Simek , Michal Simek , Lukas Auer , Masahiro Yamada , Simon Glass Thread-Topic: [PATCH v10 10/15] drivers: serial_sifive: Fix baud rate calculation Thread-Index: AQHUzOI0vIJAZO31cEm8GUS4BcUy+A== Date: Mon, 25 Feb 2019 08:15:02 +0000 Message-ID: <20190225081334.23256-11-anup.patel@wdc.com> References: <20190225081334.23256-1-anup.patel@wdc.com> In-Reply-To: <20190225081334.23256-1-anup.patel@wdc.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: TYAPR01CA0069.jpnprd01.prod.outlook.com (2603:1096:404:2b::33) To MN2PR04MB6061.namprd04.prod.outlook.com (2603:10b6:208:d8::15) x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [129.253.179.161] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 03325ab2-ea7c-448d-bc79-08d69af95705 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(5600110)(711020)(4605104)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:MN2PR04MB5789; x-ms-traffictypediagnostic: MN2PR04MB5789: wdcipoutbound: EOP-TRUE x-microsoft-exchange-diagnostics: =?iso-8859-1?Q?1; MN2PR04MB5789; 23:qB9FemTQUUIb5mIuWWpjV+Pl8wrpIAWz5gu7iCA?= =?iso-8859-1?q?uLaneDklFIHI97/w/iglQTI6d?= =?iso-8859-1?q?evYJ69bD/nngMRHO02HZFGF3TnEjIteiqdypoigQ9b9jmLxiOD3?= =?iso-8859-1?q?IfjTOgs4cRd4waWVOQn/uYN1c+BVGfNi7ACGk4PoaCDJC2+g2cM?= =?iso-8859-1?q?/Ehc0l6xC0Y4JG8+PwG5BoILsYijvHydOQnErqU0FA+OdZOwXPj?= =?iso-8859-1?q?VIlCx+Zgr92SsefeiIMfuJm9GX1i35wvXJ1O/AtCj0N/X75hpJQ?= =?iso-8859-1?q?YyGn5OLsJaCbxOQJA/sqFqevhfmSg5Wf0DTFfHO/nL66o3VBCpV?= =?iso-8859-1?q?7kuTENuYlyHw0jKBvcBoNSGr8LEhJDiu+XdU1MtgaGzUhhSaZoo?= =?iso-8859-1?q?r1mAbYLZpy6EZRnRtiz9CyY/kFYY8olUmgtf+NhjROs8pU6sxc0?= =?iso-8859-1?q?rEIAgJzNzALTEP070VGMuuh1xdECWVmqiacAIxQQOKYBeKa/Z9N?= =?iso-8859-1?q?9Rm2xiheOEQSh1ZEiZISbMaXtJXsT7ETdGFzBPwSHmbitVRk28R?= =?iso-8859-1?q?ZLqc0W9/UId47DeZ71WY0y0RjD3P4T0C0aQu4RNXSA3FgBMY32g?= =?iso-8859-1?q?3duHoiXIgtFIp7KyTKUJjtpjges2I2cOju9QvWbTCqP8F7LRZBt?= =?iso-8859-1?q?pH2zr3JGwhOHq7HA8XDAJzaZL5o49jqdpNtt1PTemu9+x9eFGQ9?= =?iso-8859-1?q?26SkaOcyChLMNpiuQ/XaGwXXU/7yw+u87g/j9L7aLYqddGREfBp?= =?iso-8859-1?q?SZfs1M7T47N7iNJxXvQvvTT0XbZ0boys9FlH/bBO2G0NNrrsVPu?= =?iso-8859-1?q?QxkbM+FaYARNY8SuvSNG46Wb9gjjiNfgCxLWP6kgQ2ATMPdtYsa?= =?iso-8859-1?q?a8QEX9Gwtv7SLrrSXA2OrzmxzMMTiWsszkO+jK2c/6tafV6XWyB?= =?iso-8859-1?q?kucw/PAkg4yoytvXooCZJbpaUfTntKLIeCHRV1d+bR1Opc97noA?= =?iso-8859-1?q?31S1g6rUzI8vtoN1LlhHdToCt65Gk/ba463pMRygl29z/6ixXdB?= =?iso-8859-1?q?3vUAPDGP0fvOsFSwdcezr3urkRCHnircb3fZgUL+vEge+EBWjsB?= =?iso-8859-1?q?RCRvrCRVs9hXi5gPTX+Ana/5uL0H5v1BKZRqx37PG2zIAVdStzW?= =?iso-8859-1?q?AOLAjQ99IMyWehLXgXwjS7BIy46gu8U3w4Onuu2Q1uJgZ9G1C9+?= =?iso-8859-1?q?ApjZMhe4Zw4Almx1Sab0qCEWLVH2MYaSnqmp/lPE5UJy6G4b86S?= =?iso-8859-1?q?cpqU+jFE/fS8Z8CX+pKAC9HPrWN5VovzgjrvbDyRZZfQ7k0ViHS?= =?iso-8859-1?q?OdXxor9FWgjwVnBB1uSX85exO+ZoSDEDlNBy+wea3TtofuzVUgz?= =?iso-8859-1?q?alZ7MQShr+Lj0Z11ESr2EuG52Vx3dfLUa2g=3D?= x-microsoft-antispam-prvs: x-forefront-prvs: 095972DF2F x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(376002)(346002)(396003)(366004)(39860400002)(136003)(189003)(199004)(66066001)(6512007)(186003)(53936002)(7736002)(305945005)(44832011)(478600001)(106356001)(26005)(486006)(2616005)(476003)(105586002)(7416002)(5660300002)(14454004)(6506007)(386003)(72206003)(8676002)(86362001)(54906003)(110136005)(81156014)(71190400001)(316002)(102836004)(6346003)(71200400001)(81166006)(1076003)(36756003)(25786009)(99286004)(97736004)(52116002)(50226002)(76176011)(2906002)(8936002)(11346002)(6486002)(6436002)(4326008)(68736007)(446003)(14444005)(256004)(6116002)(3846002); DIR:OUT; SFP:1102; SCL:1; SRVR:MN2PR04MB5789; H:MN2PR04MB6061.namprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; authentication-results: spf=none (sender IP is ) smtp.mailfrom=Anup.Patel@wdc.com; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: 9xkpTdDgz2X9WI8tNJnfNcYSEGTITChR3w6Y9RPykAXGCx2HZJDkZ+LIiYPPQ20rfBuEMr/uNIH/nuGffkZAx8RKEp665hpGcJ3Mo0peq0KKLDHuiKcpo0bKgAFMggi/fwxJPS1mWWhnBwDC1jDVi++li9UB2LxqvP1l4wV66MA/kaxo3gy3usLaj9Gg+phUk/1D+qXQP6EfFYyJBhprj80hDlhIRb8Qb9H5CKT8cT1lvexOEp3+0JhYjg5912ZgOfDnTEY4E5+NFcnxYtagwv8koWe816xCoxpZSDXpZ3Dwur/weVeRgAbKpgi4UH5CawLvLaTA1sEdfHBrv8FI9n2ylKHtKsVBovOwz5LkVmve93FVW5s7HWjC0Bhzw7mMq142NTSbjx2tniYOVX2sMXeUQVeI4qqlCqKaz+Fr+D8= MIME-Version: 1.0 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 03325ab2-ea7c-448d-bc79-08d69af95705 X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Feb 2019 08:14:56.9438 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-id: b61c8803-16f3-4c35-9b17-6f65f441df86 X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR04MB5789 Cc: Palmer Dabbelt , Alexander Graf , U-Boot Mailing List Subject: [U-Boot] [PATCH v10 10/15] drivers: serial_sifive: Fix baud rate calculation X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Atish Patra Compute the baud rate multipler with more precision. Signed-off-by: Atish Patra Signed-off-by: Anup Patel Reviewed-by: Alexander Graf Reviewed-by: Lukas Auer --- drivers/serial/serial_sifive.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/serial/serial_sifive.c b/drivers/serial/serial_sifive.c index 341728a690..ea4d35d48c 100644 --- a/drivers/serial/serial_sifive.c +++ b/drivers/serial/serial_sifive.c @@ -33,16 +33,40 @@ struct uart_sifive { }; struct sifive_uart_platdata { - unsigned int clock; + unsigned long clock; int saved_input_char; struct uart_sifive *regs; }; +/** + * Find minimum divisor divides in_freq to max_target_hz; + * Based on uart driver n SiFive FSBL. + * + * f_baud = f_in / (div + 1) => div = (f_in / f_baud) - 1 + * The nearest integer solution requires rounding up as to not exceed + * max_target_hz. + * div = ceil(f_in / f_baud) - 1 + * = floor((f_in - 1 + f_baud) / f_baud) - 1 + * This should not overflow as long as (f_in - 1 + f_baud) does not exceed + * 2^32 - 1, which is unlikely since we represent frequencies in kHz. + */ +static inline unsigned int uart_min_clk_divisor(unsigned long in_freq, + unsigned long max_target_hz) +{ + unsigned long quotient = + (in_freq + max_target_hz - 1) / (max_target_hz); + /* Avoid underflow */ + if (quotient == 0) + return 0; + else + return quotient - 1; +} + /* Set up the baud rate in gd struct */ static void _sifive_serial_setbrg(struct uart_sifive *regs, unsigned long clock, unsigned long baud) { - writel((u32)((clock / baud) - 1), ®s->div); + writel((uart_min_clk_divisor(clock, baud)), ®s->div); } static void _sifive_serial_init(struct uart_sifive *regs)