From patchwork Tue Feb 5 13:05:28 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anup Patel X-Patchwork-Id: 1036735 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="Cr0Wm6qg"; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sharedspace.onmicrosoft.com header.i=@sharedspace.onmicrosoft.com header.b="PrwMXyyn"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 43v4gd3YX4z9s4V for ; Wed, 6 Feb 2019 00:10:21 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 1BAD4C21F8E; Tue, 5 Feb 2019 13:07:31 +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.6 required=5.0 tests=KHOP_BIG_TO_CC, RCVD_IN_SORBS_WEB, T_DKIM_INVALID autolearn=no autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 27531C21F00; Tue, 5 Feb 2019 13:06:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 06E43C21F51; Tue, 5 Feb 2019 13:05:37 +0000 (UTC) Received: from esa5.hgst.iphmx.com (esa5.hgst.iphmx.com [216.71.153.144]) by lists.denx.de (Postfix) with ESMTPS id 02BC6C21F02 for ; Tue, 5 Feb 2019 13:05:32 +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=1549371933; x=1580907933; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=jki6yc4Dgywc+/2UFctRcM6KIGbue7NLrZzh+PGks1I=; b=Cr0Wm6qgpeqoEC3ucw6uzWhJN49iW0xhM9YtfvxsF6xa8NL5xWhHe4Lc ubrm7us0dT7MDqayxdttkSgXMjhmhSfJUiNLyFZiEJpfAEL1HlyzKPVUZ VWjU0nhw94vuZVakuQ/gdK5ehvuWAbwRmjwg2O77oUfGe0+wmOS6ejxHl ur5DOcoRQKrO/IAr0iAnzPZZ2X11QzsbAnN2sRdGQ0eK1g1sk7hQLX0zX kH5zj0aF5UfMYZ/WycmbVOqhH3Sqfi2p4Y/8KCjDVG6bBjFMGXPtBrZGk F0zqjP3E6Krlx9PUNrsjZvv9EIYs5iPAAttBg9m4rBrZEXPVrBzLNeZIz g==; X-IronPort-AV: E=Sophos;i="5.56,564,1539619200"; d="scan'208";a="101827073" Received: from mail-co1nam04lp2056.outbound.protection.outlook.com (HELO NAM04-CO1-obe.outbound.protection.outlook.com) ([104.47.45.56]) by ob1.hgst.iphmx.com with ESMTP; 05 Feb 2019 21:05:31 +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=PrwMXyynHcpQWAQu/iThEoyqL0gMH1wtjnMgumsD20sdNV4eYjAXuJit/HUZu78ImpDZ+pxYiQLz54staBxBRhN/++1ULd1qWjvV7+59DyGnoLXyDq+lg/Qye1sSJpfAXA5G658fKXcwDIyzLbsq8Bb0PPGlaYs9pKsZgkZa7sg= Received: from BYAPR04MB5303.namprd04.prod.outlook.com (20.178.49.148) by BYAPR04MB6229.namprd04.prod.outlook.com (20.178.235.87) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1601.17; Tue, 5 Feb 2019 13:05:29 +0000 Received: from BYAPR04MB5303.namprd04.prod.outlook.com ([fe80::add1:92cc:65d7:5d94]) by BYAPR04MB5303.namprd04.prod.outlook.com ([fe80::add1:92cc:65d7:5d94%2]) with mapi id 15.20.1580.019; Tue, 5 Feb 2019 13:05:29 +0000 From: Anup Patel To: Rick Chen , Bin Meng , Joe Hershberger , Michal Simek , Michal Simek , Lukas Auer , Masahiro Yamada , Simon Glass Thread-Topic: [PATCH v5 11/15] drivers: serial_sifive: Fix baud rate calculation Thread-Index: AQHUvVN32LnuDG7+z0C7hrbS3dRO7w== Date: Tue, 5 Feb 2019 13:05:28 +0000 Message-ID: <20190205130346.77175-12-anup.patel@wdc.com> References: <20190205130346.77175-1-anup.patel@wdc.com> In-Reply-To: <20190205130346.77175-1-anup.patel@wdc.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MAXPR0101CA0071.INDPRD01.PROD.OUTLOOK.COM (2603:1096:a00:e::33) To BYAPR04MB5303.namprd04.prod.outlook.com (2603:10b6:a03:c8::20) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Anup.Patel@wdc.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [49.207.55.104] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; BYAPR04MB6229; 6:cuaHkIvLzUs3pyYMN5WRS1nM9/4XfO8pDd/TtWqTbheOsTqrNejN2aHf4YEHfjTGWHXMFMrl+VxRCfLUCDTDm9grwdyLkRdlIxiFlN5CcmyZ+Bmopkmx9ju6oi53iz5F4xeuB5O8s+ph5uDbaYIZm/tbyrn0wtWUG6ZVhefyYufXwxsgXtbKRESlVUpGPJ7c8dB9xqBYzJFectTh4HLNvcH4ELoA008aWP0KPeNEXt7A3rCnm3bjuUHDruTvtar8jWmVnPA2vrMxvI6EHgDl5ZhZYKiZQNEWisrVxqa0FnG2hWh7tiWi3nVAAapGD+JTRIkwH2RffHTLScpo6fENeCczacw5R31BY7qkKgoE7DgApXV2uNjJGU0n7Yy3Gv4XcQ/00e7abNpF5nswJ4qtAMd9m7/P7XWWO/CpCoOyz7fR6UEI67+tEqNGixLEiUJI5a08hW14wJUabfckSWLNpg==; 5:UN7Tv9dOp1QVK8Y3E40s++odtPqXmk0r9S84UHb805O7ym3+kot3SHZopk3pgy0P4pPt03r5Oa7MzF1Byf+ezu0HExIrQbiM7slPRI0VK5iGpw11CaOaqspVdMjSSk/lGj02SZzelKDKXjCv7ywMoBs9gbLCeVer7ev9IqIMIQuZhcO5dU65zQP8z42+6rj9vrXaGLaC7jnvV4WB3d7TtA==; 7:JIZURkVhrgmwO86t1cipOSMvVon2671M0bCGpP9I7oQhPrNv8t2OFc8xanaQ7gtDfKMPdbJ7RsplhLcevougaUjkO1pqLbp1O4Sg09zPw+lW7VXmQqyOtO5gq3j0Gw6PRAPAH581urFi63Hhfc7ong== x-ms-office365-filtering-correlation-id: 40c20865-c377-4bf0-ce5e-08d68b6a9a08 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(7168020)(4627221)(201703031133081)(201702281549075)(8990200)(5600110)(711020)(4605077)(4618075)(2017052603328)(7153060)(7193020); SRVR:BYAPR04MB6229; x-ms-traffictypediagnostic: BYAPR04MB6229: wdcipoutbound: EOP-TRUE x-microsoft-antispam-prvs: x-forefront-prvs: 0939529DE2 x-forefront-antispam-report: SFV:NSPM; SFS:(10019020)(396003)(366004)(39860400002)(376002)(346002)(136003)(189003)(199004)(4326008)(72206003)(6512007)(54906003)(110136005)(53936002)(68736007)(7416002)(25786009)(316002)(14454004)(305945005)(36756003)(478600001)(66066001)(7736002)(1076003)(6486002)(71200400001)(71190400001)(476003)(14444005)(81156014)(86362001)(81166006)(106356001)(2616005)(44832011)(256004)(486006)(8936002)(8676002)(386003)(6506007)(6116002)(3846002)(2906002)(52116002)(99286004)(55236004)(446003)(97736004)(6436002)(105586002)(186003)(102836004)(50226002)(76176011)(11346002)(26005); DIR:OUT; SFP:1102; SCL:1; SRVR:BYAPR04MB6229; H:BYAPR04MB5303.namprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: aBkD9BK7HwJjshU0ISX3D/Ue/yp46WpaUY4o7eMjuE8jCmnoGxTiT23ivx8B2zrCpGxrP9dD4uZBcz6fRjZ24SpICH2mozG/H21TsIzB5MXedpoTDm7vcaQwwI5myHSH0lbO6+Zp6paT2cRbLscwtM6nFT0QTHIv6bnglD6NsD+Kw6oFMbu8JT23fces1pbZ1OZ9bEuo4D9O3Av0ZZVAgWIxlhAzEWrk+Up4VD/mwN0vs/f/7yfcR0dQFXiivcpr4pUXYKGAYMXFDk8NzPwC2qb9vV2CXiOrsN1D17U0N8KqkCsUr4riuMynFCJX07My1XbARbFu5thQPa5gq0e1I8ePk5CAMGieQwiwNr9y1M59m1NH85aS1vHFRIcytcOLM3hc1g99jTJwF2QoWnjyMzPrsLerjmwhzAIqG6Rn6zo= MIME-Version: 1.0 X-OriginatorOrg: wdc.com X-MS-Exchange-CrossTenant-Network-Message-Id: 40c20865-c377-4bf0-ce5e-08d68b6a9a08 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Feb 2019 13:05:24.9340 (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: BYAPR04MB6229 Cc: Palmer Dabbelt , U-Boot Mailing List , Alexander Graf , Christoph Hellwig Subject: [U-Boot] [PATCH v5 11/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)