From patchwork Tue Jul 23 03:15:47 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peng Fan X-Patchwork-Id: 1135384 X-Patchwork-Delegate: lukma@denx.de 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=nxp.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=nxp.com header.i=@nxp.com header.b="dDzLZXQM"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 45t3cZ1gRcz9s3Z for ; Tue, 23 Jul 2019 13:19:42 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id C67FBC21DED; Tue, 23 Jul 2019 03:17:55 +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.0 required=5.0 tests=SPF_HELO_PASS, 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 45005C21DFB; Tue, 23 Jul 2019 03:17:10 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 91F5FC21D72; Tue, 23 Jul 2019 03:15:51 +0000 (UTC) Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40089.outbound.protection.outlook.com [40.107.4.89]) by lists.denx.de (Postfix) with ESMTPS id 2BE61C21D56 for ; Tue, 23 Jul 2019 03:15:48 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BRhZtNHEuY9bdB8HdWrg+JyRL3CFZYN41xdD6BQ9SSXLJXfp/jVHy+c6Ua033bDXpneackApOduaRdtRrfk/LpJyLAX1i5wgTwmVbramdyIQqFvJpOkYIX6pg0NHgUUEYcMBqwhm+/27nTIwgLYyZVOMK9/q7iPznM6riferh+6sWMEx04o7Y7D7UbTr+1Lo3fYQUKsqqMzQoL1uJ5oj9rz/aShMhDgUb2j8JdvCczpMSU/0gpuwT+mBbXxCCe5yTJ/a6XPdy/Hk/UlUJUIb46pSehr5SuWLJZXCGVkIp4Xyficg+5Z6lKHqsL05aVbMc6OgGBbO/D19fR9wbOwg6Q== 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-SenderADCheck; bh=vtGSCj9j+1e0q9J01wzg51rGN4/q6137/jSRIIm+cXE=; b=F8eVUWcX/KmFXi2oc1iTpLfQD7xtq5REdbQea3RyFVfTOi+XR+FYtejOC5eDulZKs8AqJ+s9Ewk5vIcah6mu+qyZJuIE229MTlrMR5NIhNyWe+SAbZveD/3kQIRacbyQYImcUNlMGwlcMfDknFx+dgzRNceeMSCt3IuS93QW+rB1ak+s7/HUUM5shK/gmD0f1ayFyLgxZoJCt4dCSFyN5XavJhr57w7XseBeHydvZgIgT3mra/m6ibO2hp+Gajknh2sZOUMKe39kc4vzsnlAfYxPpqVCYjNz1pMTV5mgoX7AnqNt2LwMSODSLsSlIDRBCVfFC2vSrM5vg9UlYVR7wg== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vtGSCj9j+1e0q9J01wzg51rGN4/q6137/jSRIIm+cXE=; b=dDzLZXQMd4ydFtRf0yGSc5VtlohiRIWQyTbgzHLjQOLwZKfeQ2UfyI9AW0mJDmGdS7pFAcEosNPjm3pA/uHkj0PSJ49ZxABLoNli8NmLl1Po0UcnJZkyHNV1yOPeaYwJEcU3pFKezLzpLNgDFmiA9PD4ky81/VcsTgSx9blgNgg= Received: from AM0PR04MB4481.eurprd04.prod.outlook.com (52.135.147.15) by AM0PR04MB4996.eurprd04.prod.outlook.com (20.177.40.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2115.10; Tue, 23 Jul 2019 03:15:47 +0000 Received: from AM0PR04MB4481.eurprd04.prod.outlook.com ([fe80::2023:c0e5:8a63:2e47]) by AM0PR04MB4481.eurprd04.prod.outlook.com ([fe80::2023:c0e5:8a63:2e47%5]) with mapi id 15.20.2094.011; Tue, 23 Jul 2019 03:15:47 +0000 From: Peng Fan To: "lukma@denx.de" , "sjg@chromium.org" Thread-Topic: [PATCH 14/16] clk: sandbox: add composite clk Thread-Index: AQHVQQTrr3sVENV14EqDvL/lRJ/XFw== Date: Tue, 23 Jul 2019 03:15:47 +0000 Message-ID: <20190723033031.12404-14-peng.fan@nxp.com> References: <20190723033031.12404-1-peng.fan@nxp.com> In-Reply-To: <20190723033031.12404-1-peng.fan@nxp.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-mailer: git-send-email 2.16.4 x-clientproxiedby: HK0PR04CA0006.apcprd04.prod.outlook.com (2603:1096:203:36::18) To AM0PR04MB4481.eurprd04.prod.outlook.com (2603:10a6:208:70::15) authentication-results: spf=none (sender IP is ) smtp.mailfrom=peng.fan@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [119.31.174.71] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e30db27c-58c9-46d2-fc70-08d70f1c0e5c x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020); SRVR:AM0PR04MB4996; x-ms-traffictypediagnostic: AM0PR04MB4996: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:113; x-forefront-prvs: 0107098B6C x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(136003)(346002)(396003)(376002)(39860400002)(189003)(199004)(71200400001)(71190400001)(2501003)(50226002)(256004)(8676002)(6116002)(3846002)(64756008)(76176011)(14454004)(316002)(86362001)(478600001)(5660300002)(6436002)(6486002)(68736007)(26005)(99286004)(446003)(11346002)(25786009)(305945005)(7736002)(1076003)(386003)(110136005)(102836004)(53936002)(52116002)(6506007)(66066001)(44832011)(54906003)(4326008)(476003)(8936002)(66946007)(2616005)(66446008)(66556008)(66476007)(2906002)(81156014)(81166006)(36756003)(6512007)(486006)(186003); DIR:OUT; SFP:1101; SCL:1; SRVR:AM0PR04MB4996; H:AM0PR04MB4481.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: mZTxnRm+PBDm7QJ3A3yMDATdS9Nb0RYPj7ytPRY3Gmdl++YJokbjhdX+u8yJtdxOTtj5QgF0drx5p6T0Sbgy/fuEpJ5NlzCGnz/dSPBfH26MUWEhKeMdHWH/H/VeB9iwmRCg99eXgqeXQ/cyGlj30qh5bsxEzAm1Bw6H6t7OtN3XcJgwnCCOBeCVwtdJyd/4dFQWWdQAbyx0TV9x41dKoo2Z6nW9YFYGAZ3V8UtnduKOlcq6M4NJN4N9ZocVHWYa8AEsErcs13EtTYcch1xcZ8Vs6oBxRQRlPaU4Ytne+xE+VVSKucSGFY1i5XaCz25cU/hDwVPTFtM5U8BcKfwFybbTLahJMbD+NWIpahMYh50ErpDZowxv5xgsa0WTepK/M3DaII+zv4Z25is8BDWb86CGimS9OfM26NWWRHC74vo= MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: e30db27c-58c9-46d2-fc70-08d70f1c0e5c X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Jul 2019 03:15:47.2099 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: peng.fan@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR04MB4996 Cc: "u-boot@lists.denx.de" , dl-uboot-imx Subject: [U-Boot] [PATCH 14/16] clk: sandbox: add composite clk 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" Add composite clk to sandbox driver Signed-off-by: Peng Fan --- drivers/clk/clk_sandbox_ccf.c | 80 +++++++++++++++++++++++++++++++++++++++++++ include/sandbox-clk.h | 1 + 2 files changed, 81 insertions(+) diff --git a/drivers/clk/clk_sandbox_ccf.c b/drivers/clk/clk_sandbox_ccf.c index edeb0f2cf3..e126f18d8e 100644 --- a/drivers/clk/clk_sandbox_ccf.c +++ b/drivers/clk/clk_sandbox_ccf.c @@ -130,6 +130,80 @@ U_BOOT_DRIVER(sandbox_clk_gate2) = { .ops = &clk_gate2_ops, }; +static unsigned long sandbox_clk_composite_divider_recalc_rate(struct clk *clk) +{ + struct clk_divider *divider = (struct clk_divider *)to_clk_divider(clk); + struct clk_composite *composite = (struct clk_composite *)clk->data; + ulong parent_rate = clk_get_parent_rate(&composite->clk); + unsigned int val; + + val = divider->io_divider_val; + val >>= divider->shift; + val &= clk_div_mask(divider->width); + + return divider_recalc_rate(clk, parent_rate, val, divider->table, + divider->flags, divider->width); +} + +static const struct clk_ops sandbox_clk_composite_divider_ops = { + .get_rate = sandbox_clk_composite_divider_recalc_rate, +}; + +struct clk *sandbox_clk_composite(const char *name, + const char * const *parent_names, + int num_parents, void __iomem *reg, + unsigned long flags) +{ + struct clk *clk = ERR_PTR(-ENOMEM); + struct clk_divider *div = NULL; + struct clk_gate *gate = NULL; + struct clk_mux *mux = NULL; + + mux = kzalloc(sizeof(*mux), GFP_KERNEL); + if (!mux) + goto fail; + + mux->reg = reg; + mux->shift = 24; + mux->mask = 0x7; + mux->num_parents = num_parents; + mux->flags = flags; + mux->parent_names = parent_names; + + div = kzalloc(sizeof(*div), GFP_KERNEL); + if (!div) + goto fail; + + div->reg = reg; + div->shift = 16; + div->width = 3; + div->flags = CLK_DIVIDER_ROUND_CLOSEST | flags; + + gate = kzalloc(sizeof(*gate), GFP_KERNEL); + if (!gate) + goto fail; + + gate->reg = reg; + gate->bit_idx = 28; + gate->flags = flags; + + clk = clk_register_composite(NULL, name, + parent_names, num_parents, + &mux->clk, &clk_mux_ops, &div->clk, + &sandbox_clk_composite_divider_ops, + &gate->clk, &clk_gate_ops, flags); + if (IS_ERR(clk)) + goto fail; + + return clk; + +fail: + kfree(gate); + kfree(div); + kfree(mux); + return ERR_CAST(clk); +} + /* --- Sandbox Gate --- */ /* The CCF core driver itself */ static const struct udevice_id sandbox_clk_ccf_test_ids[] = { @@ -138,6 +212,7 @@ static const struct udevice_id sandbox_clk_ccf_test_ids[] = { }; static const char *const usdhc_sels[] = { "pll3_60m", "pll3_80m", }; +static const char *const i2c_sels[] = { "pll3_60m", "pll3_80m", }; static int sandbox_clk_ccf_probe(struct udevice *dev) { @@ -174,6 +249,11 @@ static int sandbox_clk_ccf_probe(struct udevice *dev) sandbox_clk_mux("usdhc2_sel", ®, 17, 1, usdhc_sels, ARRAY_SIZE(usdhc_sels))); + reg = BIT(28) | BIT(24) | BIT(16); + clk_dm(SANDBOX_CLK_I2C, + sandbox_clk_composite("i2c", i2c_sels, ARRAY_SIZE(i2c_sels), + ®, 0)); + return 0; } diff --git a/include/sandbox-clk.h b/include/sandbox-clk.h index 37c9838f76..f449de1364 100644 --- a/include/sandbox-clk.h +++ b/include/sandbox-clk.h @@ -19,6 +19,7 @@ enum { SANDBOX_CLK_ECSPI1, SANDBOX_CLK_USDHC1_SEL, SANDBOX_CLK_USDHC2_SEL, + SANDBOX_CLK_I2C, }; enum sandbox_pllv3_type {