Message ID | 20231117130421.79261-3-shengyang.chen@starfivetech.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9910:0:b0:403:3b70:6f57 with SMTP id i16csp510395vqn; Fri, 17 Nov 2023 05:04:43 -0800 (PST) X-Google-Smtp-Source: AGHT+IE/sYSvhaXm77FD45vn1kU0bT8yXQM1kzFx0gM8BUCII0tDxgxmRH7+3lOSSBCxs60mtVnA X-Received: by 2002:a9d:4802:0:b0:6bf:1e78:cc52 with SMTP id c2-20020a9d4802000000b006bf1e78cc52mr11489555otf.25.1700226283095; Fri, 17 Nov 2023 05:04:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700226283; cv=none; d=google.com; s=arc-20160816; b=WpfLXwHMRJgfDaXRywaBfuupsvmtYdWwTC14xqLXW1Afkz3Jet08f++Ll9iecxVsgr 0wea7SQSTf3YxGieEjwg3Ay82hRR343wCA9nHSva1KuX2MZFdK6g1i5l6y58mwLmSD9d YOBq8tEa7/rkLT8EAvZ8r8FIAprjusF3305X/HrTehkMk/BbBBuMjrm3GPklsSh7gNrW K/5X20zOvInhVvmMtAFJQ6uP3sEwKhW0hl9nAchqm1nJ7gzZJyFj+P+cpXt7CcRxzpPl nNaSXkcUEreChCPjdPlnsZHqxVIyPNauWsdzGm7kZ5tw6e+dqlj9eQCLSHA4wlBDEhsu e70A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=+vVSJXbGIEF4vr5/LMZPQ0mF7kdiA1BoZWPwNYw9crU=; fh=BV8Hujwb2jkbQApqxKYAYslg6CAkxz1JokgInyskOW8=; b=zb+3hqvhTMAqTZfgLWJG8b6Qyzsi8Ml92nYxIfQvQ/3QLjiEoOOy1gNmRDXV0WUNt7 Y/ZpPYzeATc4MV4SMqg2Fb0bUEJgYkP4msRb87pe4HBgriqpB4zFqketH43AspWkm3T7 AEYH4JrR8o0WlGoLS+3D3vLP+qRH0JeZqyW87zI+ORzdJxH5bVUjLpYUmlN87LPmDIhb ZauwHBs9XN5doXVg9MxWEaTBNG9Od/hfa0I8dIRtdrfJ5coCbGcaWS0jRTBpP3G9kuPp o1tzJQTfSWrqa/cz8xZUxywutEVkGEOpOZthkDpX9IwuB9o+MxtIEcVn+OeLWxQ0yumP /XYg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id s7-20020a056830438700b006d309d2185bsi609045otv.180.2023.11.17.05.04.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Nov 2023 05:04:43 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id BC897829BC71; Fri, 17 Nov 2023 05:04:41 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345899AbjKQNEj (ORCPT <rfc822;jaysivo@gmail.com> + 30 others); Fri, 17 Nov 2023 08:04:39 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54554 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230379AbjKQNEf (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Fri, 17 Nov 2023 08:04:35 -0500 Received: from ex01.ufhost.com (ex01.ufhost.com [61.152.239.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A1BADD52; Fri, 17 Nov 2023 05:04:27 -0800 (PST) Received: from EXMBX166.cuchost.com (unknown [175.102.18.54]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client CN "EXMBX166", Issuer "EXMBX166" (not verified)) by ex01.ufhost.com (Postfix) with ESMTP id E572E24E26B; Fri, 17 Nov 2023 21:04:24 +0800 (CST) Received: from EXMBX171.cuchost.com (172.16.6.91) by EXMBX166.cuchost.com (172.16.6.76) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Fri, 17 Nov 2023 21:04:24 +0800 Received: from yang-virtual-machine.localdomain (183.27.97.246) by EXMBX171.cuchost.com (172.16.6.91) with Microsoft SMTP Server (TLS) id 15.0.1497.42; Fri, 17 Nov 2023 21:04:24 +0800 From: Shengyang Chen <shengyang.chen@starfivetech.com> To: <devicetree@vger.kernel.org>, <linux-phy@lists.infradead.org> CC: <vkoul@kernel.org>, <kishon@kernel.org>, <robh+dt@kernel.org>, <krzysztof.kozlowski+dt@linaro.org>, <conor+dt@kernel.org>, <p.zabel@pengutronix.de>, <minda.chen@starfivetech.com>, <changhuang.liang@starfivetech.com>, <rogerq@kernel.org>, <geert+renesas@glider.be>, <keith.zhao@starfivetech.com>, <shengyang.chen@starfivetech.com>, <linux-kernel@vger.kernel.org> Subject: [PATCH v1 2/2] phy: starfive: Add mipi dphy tx support Date: Fri, 17 Nov 2023 21:04:21 +0800 Message-ID: <20231117130421.79261-3-shengyang.chen@starfivetech.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20231117130421.79261-1-shengyang.chen@starfivetech.com> References: <20231117130421.79261-1-shengyang.chen@starfivetech.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [183.27.97.246] X-ClientProxiedBy: EXCAS066.cuchost.com (172.16.6.26) To EXMBX171.cuchost.com (172.16.6.91) X-YovoleRuleAgent: yovoleflag X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Fri, 17 Nov 2023 05:04:41 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1782816475158069797 X-GMAIL-MSGID: 1782816475158069797 |
Series |
Add JH7110 MIPI DPHY TX support
|
|
Commit Message
Shengyang Chen
Nov. 17, 2023, 1:04 p.m. UTC
Add mipi dphy tx support for the StarFive JH7110 SoC.
It is used to transfer DSI data.
Signed-off-by: Shengyang Chen <shengyang.chen@starfivetech.com>
---
MAINTAINERS | 7 +
drivers/phy/starfive/Kconfig | 10 +
drivers/phy/starfive/Makefile | 1 +
drivers/phy/starfive/phy-jh7110-dphy-tx.c | 542 ++++++++++++++++++++++
4 files changed, 560 insertions(+)
create mode 100644 drivers/phy/starfive/phy-jh7110-dphy-tx.c
Comments
On 17-11-23, 21:04, Shengyang Chen wrote: > Add mipi dphy tx support for the StarFive JH7110 SoC. > It is used to transfer DSI data. How different is this from RX driver? Cant the support be added in the TX driver with a new compatible? > > Signed-off-by: Shengyang Chen <shengyang.chen@starfivetech.com> > --- > MAINTAINERS | 7 + > drivers/phy/starfive/Kconfig | 10 + > drivers/phy/starfive/Makefile | 1 + > drivers/phy/starfive/phy-jh7110-dphy-tx.c | 542 ++++++++++++++++++++++ > 4 files changed, 560 insertions(+) > create mode 100644 drivers/phy/starfive/phy-jh7110-dphy-tx.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index cfb533ec89e8..255c577afa49 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -20677,6 +20677,13 @@ S: Supported > F: Documentation/devicetree/bindings/phy/starfive,jh7110-dphy-rx.yaml > F: drivers/phy/starfive/phy-jh7110-dphy-rx.c > > +STARFIVE JH7110 DPHY TX DRIVER > +M: Keith Zhao <keith.zhao@starfivetech.com> > +M: Shengyang Chen <shengyang.chen@starfivetech.com> > +S: Supported > +F: Documentation/devicetree/bindings/phy/starfive,jh7110-dphy-tx.yaml > +F: drivers/phy/starfive/phy-jh7110-dphy-tx.c > + > STARFIVE JH7110 MMC/SD/SDIO DRIVER > M: William Qiu <william.qiu@starfivetech.com> > S: Supported > diff --git a/drivers/phy/starfive/Kconfig b/drivers/phy/starfive/Kconfig > index 9508e2143011..d0cdd7cb4a13 100644 > --- a/drivers/phy/starfive/Kconfig > +++ b/drivers/phy/starfive/Kconfig > @@ -15,6 +15,16 @@ config PHY_STARFIVE_JH7110_DPHY_RX > system. If M is selected, the module will be called > phy-jh7110-dphy-rx.ko. > > +config PHY_STARFIVE_JH7110_DPHY_TX > + tristate "StarFive JH7110 D-PHY TX Support" > + depends on HAS_IOMEM > + select GENERIC_PHY > + select GENERIC_PHY_MIPI_DPHY > + help > + Choose this option if you have a StarFive D-PHY TX in your > + system. If M is selected, the module will be called > + phy-jh7110-dphy-tx.ko. > + > config PHY_STARFIVE_JH7110_PCIE > tristate "Starfive JH7110 PCIE 2.0/USB 3.0 PHY support" > depends on HAS_IOMEM > diff --git a/drivers/phy/starfive/Makefile b/drivers/phy/starfive/Makefile > index b391018b7c47..eedc4a6fec15 100644 > --- a/drivers/phy/starfive/Makefile > +++ b/drivers/phy/starfive/Makefile > @@ -1,4 +1,5 @@ > # SPDX-License-Identifier: GPL-2.0 > obj-$(CONFIG_PHY_STARFIVE_JH7110_DPHY_RX) += phy-jh7110-dphy-rx.o > +obj-$(CONFIG_PHY_STARFIVE_JH7110_DPHY_TX) += phy-jh7110-dphy-tx.o > obj-$(CONFIG_PHY_STARFIVE_JH7110_PCIE) += phy-jh7110-pcie.o > obj-$(CONFIG_PHY_STARFIVE_JH7110_USB) += phy-jh7110-usb.o > diff --git a/drivers/phy/starfive/phy-jh7110-dphy-tx.c b/drivers/phy/starfive/phy-jh7110-dphy-tx.c > new file mode 100644 > index 000000000000..69aa172563e4 > --- /dev/null > +++ b/drivers/phy/starfive/phy-jh7110-dphy-tx.c > @@ -0,0 +1,542 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * DPHY TX driver for the StarFive JH7110 SoC > + * > + * Copyright (C) 2023 StarFive Technology Co., Ltd. > + * Author: Keith Zhao <keith.zhao@starfivetech.com> > + * Author: Shengyang Chen <shengyang.chen@starfivetech.com> > + */ > + > +#include <linux/clk.h> > +#include <linux/io.h> > +#include <linux/mfd/syscon.h> > +#include <linux/module.h> > +#include <linux/of.h> > +#include <linux/of_device.h> > +#include <linux/phy/phy.h> > +#include <linux/phy/phy-mipi-dphy.h> > +#include <linux/platform_device.h> > +#include <linux/pm_runtime.h> > +#include <linux/regulator/consumer.h> > +#include <linux/reset.h> > + > +#define STF_DPHY_APBIFSAIF_SYSCFG(x) (x) > + > +#define STF_DPHY_AON_POWER_READY_N_SHIFT 0x0U > +#define STF_DPHY_AON_POWER_READY_N_MASK BIT(0) > +#define STF_DPHY_CFG_L0_SWAP_SEL_SHIFT 0xCU > +#define STF_DPHY_CFG_L0_SWAP_SEL_MASK GENMASK(14, 12) > +#define STF_DPHY_CFG_L1_SWAP_SEL_SHIFT 0xFU > +#define STF_DPHY_CFG_L1_SWAP_SEL_MASK GENMASK(17, 15) > +#define STF_DPHY_CFG_L2_SWAP_SEL_SHIFT 0x12U > +#define STF_DPHY_CFG_L2_SWAP_SEL_MASK GENMASK(20, 18) > +#define STF_DPHY_CFG_L3_SWAP_SEL_SHIFT 0x15U > +#define STF_DPHY_CFG_L3_SWAP_SEL_MASK GENMASK(23, 21) > +#define STF_DPHY_CFG_L4_SWAP_SEL_SHIFT 0x18U > +#define STF_DPHY_CFG_L4_SWAP_SEL_MASK GENMASK(26, 24) > +#define STF_DPHY_RGS_CDTX_PLL_UNLOCK_SHIFT 0x12U > +#define STF_DPHY_RGS_CDTX_PLL_UNLOCK_MASK BIT(18) > +#define STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT 0x13U > +#define STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK GENMASK(23, 19) > +#define STF_DPHY_RG_CDTX_L0P_HSTX_RES_SHIFT 0x18U > +#define STF_DPHY_RG_CDTX_L0P_HSTX_RES_MASK GENMASK(28, 24) > + > +#define STF_DPHY_RG_CDTX_L1P_HSTX_RES_SHIFT 0x5U > +#define STF_DPHY_RG_CDTX_L1P_HSTX_RES_MASK GENMASK(9, 5) > +#define STF_DPHY_RG_CDTX_L2N_HSTX_RES_SHIFT 0xAU > +#define STF_DPHY_RG_CDTX_L2N_HSTX_RES_MASK GENMASK(14, 10) > +#define STF_DPHY_RG_CDTX_L2P_HSTX_RES_SHIFT 0xFU > +#define STF_DPHY_RG_CDTX_L2P_HSTX_RES_MASK GENMASK(19, 15) > +#define STF_DPHY_RG_CDTX_L3N_HSTX_RES_SHIFT 0x14U > +#define STF_DPHY_RG_CDTX_L3N_HSTX_RES_MASK GENMASK(24, 20) > +#define STF_DPHY_RG_CDTX_L3P_HSTX_RES_SHIFT 0x19U > +#define STF_DPHY_RG_CDTX_L3P_HSTX_RES_MASK GENMASK(29, 25) > + > +#define STF_DPHY_RG_CDTX_L4N_HSTX_RES_SHIFT 0x0U > +#define STF_DPHY_RG_CDTX_L4N_HSTX_RES_MASK GENMASK(4, 0) > +#define STF_DPHY_RG_CDTX_L4P_HSTX_RES_SHIFT 0x5U > +#define STF_DPHY_RG_CDTX_L4P_HSTX_RES_MASK GENMASK(9, 5) > +#define STF_DPHY_RG_CDTX_PLL_FBK_FRA_SHIFT 0x0U > +#define STF_DPHY_RG_CDTX_PLL_FBK_FRA_MASK GENMASK(23, 0) > + > +#define STF_DPHY_RG_CDTX_PLL_FBK_INT_SHIFT 0x0U > +#define STF_DPHY_RG_CDTX_PLL_FBK_INT_MASK GENMASK(8, 0) > +#define STF_DPHY_RG_CDTX_PLL_FM_EN_SHIFT 0x9U > +#define STF_DPHY_RG_CDTX_PLL_FM_EN_MASK BIT(9) > +#define STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_SHIFT 0xAU > +#define STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_MASK BIT(10) > +#define STF_DPHY_RG_CDTX_PLL_PRE_DIV_SHIFT 0xBU > +#define STF_DPHY_RG_CDTX_PLL_PRE_DIV_MASK GENMASK(12, 11) > + > +#define STF_DPHY_RG_CDTX_PLL_SSC_EN_SHIFT 0x12U > +#define STF_DPHY_RG_CDTX_PLL_SSC_EN_MASK 0x40000U > + > +#define STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_SHIFT 0x0U > +#define STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_MASK GENMASK(7, 0) > +#define STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_SHIFT 0x8U > +#define STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_MASK GENMASK(15, 8) > +#define STF_DPHY_RG_CLANE_HS_PRE_TIME_SHIFT 0x10U > +#define STF_DPHY_RG_CLANE_HS_PRE_TIME_MASK GENMASK(23, 16) > +#define STF_DPHY_RG_CLANE_HS_TRAIL_TIME_SHIFT 0x18U > +#define STF_DPHY_RG_CLANE_HS_TRAIL_TIME_MASK GENMASK(31, 24) > + > +#define STF_DPHY_RG_CLANE_HS_ZERO_TIME_SHIFT 0x0U > +#define STF_DPHY_RG_CLANE_HS_ZERO_TIME_MASK GENMASK(7, 0) > +#define STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT 0x8U > +#define STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK GENMASK(15, 8) > +#define STF_DPHY_RG_DLANE_HS_TRAIL_TIME_SHIFT 0x10U > +#define STF_DPHY_RG_DLANE_HS_TRAIL_TIME_MASK GENMASK(23, 16) > +#define STF_DPHY_RG_DLANE_HS_ZERO_TIME_SHIFT 0x18U > +#define STF_DPHY_RG_DLANE_HS_ZERO_TIME_MASK GENMASK(31, 24) > + > +#define STF_DPHY_RG_EXTD_CYCLE_SEL_SHIFT 0x0U > +#define STF_DPHY_RG_EXTD_CYCLE_SEL_MASK GENMASK(2, 0) > +#define STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_SHIFT 0x0U > +#define STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_MASK GENMASK(31, 0) > + > +#define STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_SHIFT 0x1U > +#define STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_MASK GENMASK(2, 1) > +#define STF_DPHY_SCFG_PPI_C_READY_SEL_SHIFT 0x3U > +#define STF_DPHY_SCFG_PPI_C_READY_SEL_MASK GENMASK(4, 3) > + > +#define STF_DPHY_REFCLK_IN_SEL_SHIFT 0x1AU > +#define STF_DPHY_REFCLK_IN_SEL_MASK GENMASK(28, 26) > +#define STF_DPHY_RESETB_SHIFT 0x1DU > +#define STF_DPHY_RESETB_MASK BIT(29) > + > +#define STF_DPHY_REFCLK_12M 1 > +#define STF_DPHY_BITRATE_ALIGN 10000000 > + > +#define STF_MAP_LANES_NUM 5 > + > +struct m31_dphy_config { > + int ref_clk; > + unsigned long bitrate; > + u32 pll_prev_div; > + u32 pll_fbk_int; > + u32 pll_fbk_fra; > + u32 extd_cycle_sel; > + u32 dlane_hs_pre_time; > + u32 dlane_hs_zero_time; > + u32 dlane_hs_trail_time; > + u32 clane_hs_pre_time; > + u32 clane_hs_zero_time; > + u32 clane_hs_trail_time; > + u32 clane_hs_clk_pre_time; > + u32 clane_hs_clk_post_time; > +}; > + > +static const struct m31_dphy_config m31_dphy_configs[] = { > + {12000000, 490000000, 0x0, 0xa3, 0x55 << 16 | 0x55 << 8 | 0x55, > + 0x2, 0xc, 0x1d, 0x14, 0x8, 0x42, 0x12, 0x3, 0x28}, > + {12000000, 680000000, 0x0, 0x71, 0x55 << 16 | 0x55 << 8 | 0x55, > + 0x1, 0x8, 0x13, 0xe, 0x5, 0x2e, 0xd, 0x1, 0x16}, > + {12000000, 750000000, 0x0, 0x7d, 0x0 << 16 | 0x0 << 8 | 0x0, > + 0x1, 0x8, 0x16, 0xf, 0x6, 0x32, 0xe, 0x1, 0x17}, > + {12000000, 900000000, 0x0, 0x96, 0x0 << 16 | 0x0 << 8 | 0x0, > + 0x1, 0xa, 0x19, 0x12, 0x8, 0x3c, 0x10, 0x1, 0x19}, > +}; > + > +struct stf_dphy_info { > + /** > + * @maps: > + * > + * Physical lanes and logic lanes mapping table. > + * > + * The default order is: > + * [data lane 0, data lane 1, data lane 2, date lane 3, clk lane] > + */ > + u8 maps[STF_MAP_LANES_NUM]; > +}; > + > +struct stf_dphy { > + struct device *dev; > + void __iomem *topsys; > + struct clk *txesc_clk; > + struct reset_control *sys_rst; > + struct reset_control *txbytehs_rst; > + > + struct phy_configure_opts_mipi_dphy config; > + > + struct regulator *mipitx_1p8; > + struct regulator *mipitx_0p9; > + > + struct phy *phy; > + const struct stf_dphy_info *info; > +}; > + > +static inline u32 stf_dphy_get_reg(void *io_addr, u32 addr, u32 shift, u32 mask) > +{ > + u32 tmp; > + > + tmp = readl(io_addr); > + tmp = (tmp & mask) >> shift; > + return tmp; > +} > + > +static inline void stf_dphy_set_reg(void *io_addr, u32 addr, u32 data, u32 shift, u32 mask) > +{ > + u32 tmp; > + > + tmp = readl(io_addr + addr); > + tmp &= ~mask; > + tmp |= (data << shift) & mask; > + writel(tmp, (io_addr + addr)); > +} > + > +static int is_pll_locked(struct stf_dphy *dphy) > +{ > + int tmp = stf_dphy_get_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), > + STF_DPHY_RGS_CDTX_PLL_UNLOCK_SHIFT, > + STF_DPHY_RGS_CDTX_PLL_UNLOCK_MASK); > + return !tmp; > +} > + > +static void stf_dphy_hw_reset(struct stf_dphy *dphy, int assert) > +{ > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(100), > + !assert, STF_DPHY_RESETB_SHIFT, STF_DPHY_RESETB_MASK); > + > + if (!assert) { > + /*the lock-in time of pll of M31 is 20us-50ms*/ > + while ((!is_pll_locked(dphy)) && msecs_to_jiffies(50)) > + ; > + dev_err(dphy->dev, "MIPI dphy-tx # PLL Locked\n"); > + } > +} > + > +static int stf_dphy_configure(struct phy *phy, union phy_configure_opts *opts) > +{ > + struct stf_dphy *dphy; > + u32 bitrate; > + unsigned long alignment; > + int i; > + const struct m31_dphy_config *p; > + const u32 STF_DPHY_AON_POWER_READY_N_active = 0; > + const struct stf_dphy_info *info; > + > + dphy = phy_get_drvdata(phy); > + info = dphy->info; > + bitrate = opts->mipi_dphy.hs_clk_rate; > + > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 0x10, > + STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, > + STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, > + STF_DPHY_RG_CDTX_L2N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L2N_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, > + STF_DPHY_RG_CDTX_L3N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L3N_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(16), 0x10, > + STF_DPHY_RG_CDTX_L4N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L4N_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 0x10, > + STF_DPHY_RG_CDTX_L0P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0P_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, > + STF_DPHY_RG_CDTX_L1P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L1P_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, > + STF_DPHY_RG_CDTX_L2P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L2P_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, > + STF_DPHY_RG_CDTX_L3P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L3P_HSTX_RES_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(16), 0x10, > + STF_DPHY_RG_CDTX_L4P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L4P_HSTX_RES_MASK); > + > + alignment = STF_DPHY_BITRATE_ALIGN; > + if (bitrate % alignment) > + bitrate += alignment - (bitrate % alignment); > + > + p = m31_dphy_configs; > + for (i = 0; i < ARRAY_SIZE(m31_dphy_configs); i++, p++) { > + if (p->bitrate == bitrate) { > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(100), > + STF_DPHY_REFCLK_12M, STF_DPHY_REFCLK_IN_SEL_SHIFT, > + STF_DPHY_REFCLK_IN_SEL_MASK); > + > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), > + STF_DPHY_AON_POWER_READY_N_active, > + STF_DPHY_AON_POWER_READY_N_SHIFT, > + STF_DPHY_AON_POWER_READY_N_MASK); > + > + /*Lane setting*/ > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[0], > + STF_DPHY_CFG_L0_SWAP_SEL_SHIFT, > + STF_DPHY_CFG_L0_SWAP_SEL_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[1], > + STF_DPHY_CFG_L1_SWAP_SEL_SHIFT, > + STF_DPHY_CFG_L1_SWAP_SEL_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[2], > + STF_DPHY_CFG_L2_SWAP_SEL_SHIFT, > + STF_DPHY_CFG_L2_SWAP_SEL_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[3], > + STF_DPHY_CFG_L3_SWAP_SEL_SHIFT, > + STF_DPHY_CFG_L3_SWAP_SEL_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[4], > + STF_DPHY_CFG_L4_SWAP_SEL_SHIFT, > + STF_DPHY_CFG_L4_SWAP_SEL_MASK); > + /*PLL setting*/ > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(28), 0x0, > + STF_DPHY_RG_CDTX_PLL_SSC_EN_SHIFT, > + STF_DPHY_RG_CDTX_PLL_SSC_EN_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 0x1, > + STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_SHIFT, > + STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 0x1, > + STF_DPHY_RG_CDTX_PLL_FM_EN_SHIFT, > + STF_DPHY_RG_CDTX_PLL_FM_EN_MASK); > + > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), > + p->pll_prev_div, STF_DPHY_RG_CDTX_PLL_PRE_DIV_SHIFT, > + STF_DPHY_RG_CDTX_PLL_PRE_DIV_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), > + p->pll_fbk_int, STF_DPHY_RG_CDTX_PLL_FBK_INT_SHIFT, > + STF_DPHY_RG_CDTX_PLL_FBK_INT_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(20), > + p->pll_fbk_fra, STF_DPHY_RG_CDTX_PLL_FBK_FRA_SHIFT, > + STF_DPHY_RG_CDTX_PLL_FBK_FRA_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(40), > + p->extd_cycle_sel, STF_DPHY_RG_EXTD_CYCLE_SEL_SHIFT, > + STF_DPHY_RG_EXTD_CYCLE_SEL_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), > + p->dlane_hs_pre_time, > + STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT, > + STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), > + p->dlane_hs_pre_time, > + STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT, > + STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), > + p->dlane_hs_zero_time, > + STF_DPHY_RG_DLANE_HS_ZERO_TIME_SHIFT, > + STF_DPHY_RG_DLANE_HS_ZERO_TIME_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), > + p->dlane_hs_trail_time, > + STF_DPHY_RG_DLANE_HS_TRAIL_TIME_SHIFT, > + STF_DPHY_RG_DLANE_HS_TRAIL_TIME_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), > + p->clane_hs_pre_time, > + STF_DPHY_RG_CLANE_HS_PRE_TIME_SHIFT, > + STF_DPHY_RG_CLANE_HS_PRE_TIME_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), > + p->clane_hs_zero_time, > + STF_DPHY_RG_CLANE_HS_ZERO_TIME_SHIFT, > + STF_DPHY_RG_CLANE_HS_ZERO_TIME_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), > + p->clane_hs_trail_time, > + STF_DPHY_RG_CLANE_HS_TRAIL_TIME_SHIFT, > + STF_DPHY_RG_CLANE_HS_TRAIL_TIME_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), > + p->clane_hs_clk_pre_time, > + STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_SHIFT, > + STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), > + p->clane_hs_clk_post_time, > + STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_SHIFT, > + STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_MASK); > + > + break; > + } > + } > + > + return 0; > +} > + > +static int stf_dphy_init(struct phy *phy) > +{ > + struct stf_dphy *dphy = phy_get_drvdata(phy); > + int ret; > + > + stf_dphy_hw_reset(dphy, 0); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(48), 0, > + STF_DPHY_SCFG_PPI_C_READY_SEL_SHIFT, STF_DPHY_SCFG_PPI_C_READY_SEL_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(48), 0, > + STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_SHIFT, > + STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_MASK); > + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(44), 0x30, > + STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_SHIFT, > + STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_MASK); > + > + ret = clk_prepare_enable(dphy->txesc_clk); > + if (ret) { > + dev_err(dphy->dev, "Failed to prepare/enable txesc_clk\n"); > + return ret; > + } > + > + ret = reset_control_deassert(dphy->sys_rst); > + if (ret) { > + dev_err(dphy->dev, "Failed to deassert sys_rst\n"); > + return ret; > + } > + > + ret = reset_control_deassert(dphy->txbytehs_rst); > + if (ret < 0) { > + dev_err(dphy->dev, "Failed to deassert txbytehs_rst\n"); > + return ret; > + } > + > + return 0; > +} > + > +static int stf_dphy_exit(struct phy *phy) > +{ > + struct stf_dphy *dphy = phy_get_drvdata(phy); > + int ret; > + > + ret = reset_control_assert(dphy->txbytehs_rst); > + if (ret < 0) { > + dev_err(dphy->dev, "Failed to assert txbytehs_rst\n"); > + return ret; > + } > + > + ret = reset_control_assert(dphy->sys_rst); > + if (ret) { > + dev_err(dphy->dev, "Failed to assert sys_rst\n"); > + return ret; > + } > + > + clk_disable_unprepare(dphy->txesc_clk); > + > + stf_dphy_hw_reset(dphy, 1); > + > + return 0; > +} > + > +static int stf_dphy_power_on(struct phy *phy) > +{ > + struct stf_dphy *dphy = phy_get_drvdata(phy); > + int ret; > + > + ret = pm_runtime_resume_and_get(dphy->dev); > + if (ret < 0) > + return ret; > + > + ret = regulator_enable(dphy->mipitx_0p9); > + if (ret) { > + dev_err(dphy->dev, "Cannot enable mipitx_0p9 regulator\n"); > + return ret; > + } > + > + return 0; > +} > + > +static int stf_dphy_validate(struct phy *phy, enum phy_mode mode, int submode, > + union phy_configure_opts *opts) > +{ > + if (mode != PHY_MODE_MIPI_DPHY) > + return -EINVAL; > + > + return 0; > +} > + > +static int stf_dphy_power_off(struct phy *phy) > +{ > + struct stf_dphy *dphy = phy_get_drvdata(phy); > + > + regulator_disable(dphy->mipitx_0p9); > + > + pm_runtime_put_sync(dphy->dev); > + > + return 0; > +} > + > +static const struct phy_ops stf_dphy_ops = { > + .power_on = stf_dphy_power_on, > + .power_off = stf_dphy_power_off, > + .init = stf_dphy_init, > + .exit = stf_dphy_exit, > + .configure = stf_dphy_configure, > + .validate = stf_dphy_validate, > + .owner = THIS_MODULE, > +}; > + > +static int stf_dphy_probe(struct platform_device *pdev) > +{ > + struct phy_provider *phy_provider; > + struct stf_dphy *dphy; > + int ret; > + > + dphy = devm_kzalloc(&pdev->dev, sizeof(*dphy), GFP_KERNEL); > + if (!dphy) > + return -ENOMEM; > + > + dphy->info = of_device_get_match_data(&pdev->dev); > + > + dphy->dev = &pdev->dev; > + dev_set_drvdata(&pdev->dev, dphy); > + > + dphy->topsys = devm_platform_ioremap_resource(pdev, 0); > + if (IS_ERR(dphy->topsys)) { > + ret = PTR_ERR(dphy->topsys); > + return ret; > + } > + > + pm_runtime_enable(&pdev->dev); > + > + dphy->mipitx_0p9 = devm_regulator_get(&pdev->dev, "mipi_0p9"); > + if (IS_ERR(dphy->mipitx_0p9)) { > + ret = PTR_ERR(dphy->mipitx_0p9); > + return ret; > + } > + > + dphy->txesc_clk = devm_clk_get(&pdev->dev, "dphy_txesc"); > + if (IS_ERR(dphy->txesc_clk)) { > + ret = PTR_ERR(dphy->txesc_clk); > + dev_err(&pdev->dev, "txesc_clk get error\n"); > + return ret; > + } > + > + dphy->sys_rst = reset_control_get_exclusive(&pdev->dev, "dphy_sys"); > + if (IS_ERR(dphy->sys_rst)) { > + ret = PTR_ERR(dphy->sys_rst); > + dev_err(&pdev->dev, "sys_rst get error\n"); > + return ret; > + } > + > + dphy->txbytehs_rst = reset_control_get_exclusive(&pdev->dev, "dsi_txbytehs"); > + if (IS_ERR(dphy->txbytehs_rst)) { > + dev_err(&pdev->dev, "Failed to get txbytehs_rst\n"); > + return PTR_ERR(dphy->txbytehs_rst); > + } > + > + dphy->phy = devm_phy_create(&pdev->dev, NULL, &stf_dphy_ops); > + if (IS_ERR(dphy->phy)) { > + ret = PTR_ERR(dphy->phy); > + dev_err(&pdev->dev, "Failed to create phy\n"); > + return ret; > + } > + phy_set_drvdata(dphy->phy, dphy); > + > + phy_provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); > + if (IS_ERR(phy_provider)) { > + ret = PTR_ERR(phy_provider); > + dev_err(&pdev->dev, "Failed to create phy\n"); > + return ret; > + } > + > + return PTR_ERR_OR_ZERO(phy_provider); > +} > + > +static const struct stf_dphy_info starfive_dphy_info = { > + .maps = {0, 1, 2, 3, 4}, > +}; > + > +static const struct of_device_id stf_dphy_dt_ids[] = { > + { > + .compatible = "starfive,jh7110-dphy-tx", > + .data = &starfive_dphy_info, > + }, > + { /* sentinel */ }, > +}; > +MODULE_DEVICE_TABLE(of, stf_dphy_dt_ids); > + > +static struct platform_driver stf_dphy_driver = { > + .driver = { > + .name = "starfive-dphy-tx", > + .of_match_table = stf_dphy_dt_ids, > + }, > + .probe = stf_dphy_probe, > +}; > +module_platform_driver(stf_dphy_driver); > + > +MODULE_AUTHOR("Keith Zhao <keith.zhao@starfivetech.com>"); > +MODULE_AUTHOR("Shengyang Chen <shengyang.chen@starfivetech.com>"); > +MODULE_DESCRIPTION("StarFive JH7110 DPHY TX driver"); > +MODULE_LICENSE("GPL"); > -- > 2.17.1
On Fr, 2023-11-17 at 21:04 +0800, Shengyang Chen wrote: > Add mipi dphy tx support for the StarFive JH7110 SoC. > It is used to transfer DSI data. > > Signed-off-by: Shengyang Chen <shengyang.chen@starfivetech.com> > --- [...] > diff --git a/drivers/phy/starfive/phy-jh7110-dphy-tx.c b/drivers/phy/starfive/phy-jh7110-dphy-tx.c > new file mode 100644 > index 000000000000..69aa172563e4 > --- /dev/null > +++ b/drivers/phy/starfive/phy-jh7110-dphy-tx.c > @@ -0,0 +1,542 @@ [...] > +static int stf_dphy_probe(struct platform_device *pdev) > +{ [...] > + dphy->topsys = devm_platform_ioremap_resource(pdev, 0); > + if (IS_ERR(dphy->topsys)) { > + ret = PTR_ERR(dphy->topsys); > + return ret; This could be shortened to: return PTR_ERR(dphy->topsys); > + } > + > + pm_runtime_enable(&pdev->dev); > + > + dphy->mipitx_0p9 = devm_regulator_get(&pdev->dev, "mipi_0p9"); > + if (IS_ERR(dphy->mipitx_0p9)) { > + ret = PTR_ERR(dphy->mipitx_0p9); > + return ret; Same as above. > + } > + > + dphy->txesc_clk = devm_clk_get(&pdev->dev, "dphy_txesc"); > + if (IS_ERR(dphy->txesc_clk)) { > + ret = PTR_ERR(dphy->txesc_clk); > + dev_err(&pdev->dev, "txesc_clk get error\n"); > + return ret; Consider using dev_err_probe(): return dev_err_probe(&pdev->dev, PTR_ERR(dphy->txesc_clk), "txesc_clk get error\n"); And the same for the error paths below. > + } > + > + dphy->sys_rst = reset_control_get_exclusive(&pdev->dev, "dphy_sys"); Why not devm_reset_control_get_exclusive()? > + if (IS_ERR(dphy->sys_rst)) { > + ret = PTR_ERR(dphy->sys_rst); > + dev_err(&pdev->dev, "sys_rst get error\n"); > + return ret; > + } > + > + dphy->txbytehs_rst = reset_control_get_exclusive(&pdev->dev, "dsi_txbytehs"); Same as above. > + if (IS_ERR(dphy->txbytehs_rst)) { > + dev_err(&pdev->dev, "Failed to get txbytehs_rst\n"); > + return PTR_ERR(dphy->txbytehs_rst); > + } > + > + dphy->phy = devm_phy_create(&pdev->dev, NULL, &stf_dphy_ops); > + if (IS_ERR(dphy->phy)) { > + ret = PTR_ERR(dphy->phy); > + dev_err(&pdev->dev, "Failed to create phy\n"); > + return ret; > + } > + phy_set_drvdata(dphy->phy, dphy); > + > + phy_provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); > + if (IS_ERR(phy_provider)) { > + ret = PTR_ERR(phy_provider); > + dev_err(&pdev->dev, "Failed to create phy\n"); > + return ret; > + } > + > + return PTR_ERR_OR_ZERO(phy_provider); This can not be reached in the error case, so just: return 0; should suffice. regards Philipp
Hi Shengyang, kernel test robot noticed the following build warnings: [auto build test WARNING on robh/for-next] [also build test WARNING on linus/master v6.7-rc3 next-20231130] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Shengyang-Chen/dt-bindings-phy-Add-starfive-jh7110-dphy-tx/20231117-210751 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next patch link: https://lore.kernel.org/r/20231117130421.79261-3-shengyang.chen%40starfivetech.com patch subject: [PATCH v1 2/2] phy: starfive: Add mipi dphy tx support config: mips-randconfig-r112-20231121 (https://download.01.org/0day-ci/archive/20231201/202312010157.hZtZNEHE-lkp@intel.com/config) compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a) reproduce: (https://download.01.org/0day-ci/archive/20231201/202312010157.hZtZNEHE-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312010157.hZtZNEHE-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) drivers/phy/starfive/phy-jh7110-dphy-tx.c:226:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: got void [noderef] __iomem *topsys >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void *io_addr @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:21: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:21: sparse: got void *io_addr >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * vim +172 drivers/phy/starfive/phy-jh7110-dphy-tx.c 167 168 static inline u32 stf_dphy_get_reg(void *io_addr, u32 addr, u32 shift, u32 mask) 169 { 170 u32 tmp; 171 > 172 tmp = readl(io_addr); 173 tmp = (tmp & mask) >> shift; 174 return tmp; 175 } 176 177 static inline void stf_dphy_set_reg(void *io_addr, u32 addr, u32 data, u32 shift, u32 mask) 178 { 179 u32 tmp; 180 > 181 tmp = readl(io_addr + addr); 182 tmp &= ~mask; 183 tmp |= (data << shift) & mask; > 184 writel(tmp, (io_addr + addr)); 185 } 186
Hi Shengyang, kernel test robot noticed the following build warnings: [auto build test WARNING on robh/for-next] [also build test WARNING on linus/master v6.7-rc3 next-20231130] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Shengyang-Chen/dt-bindings-phy-Add-starfive-jh7110-dphy-tx/20231117-210751 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next patch link: https://lore.kernel.org/r/20231117130421.79261-3-shengyang.chen%40starfivetech.com patch subject: [PATCH v1 2/2] phy: starfive: Add mipi dphy tx support config: csky-randconfig-r111-20231118 (https://download.01.org/0day-ci/archive/20231201/202312010130.u41enWR4-lkp@intel.com/config) compiler: csky-linux-gcc (GCC) 13.2.0 reproduce: (https://download.01.org/0day-ci/archive/20231201/202312010130.u41enWR4-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312010130.u41enWR4-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:189:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:189:40: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:189:40: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:197:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:197:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:197:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:222:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:222:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:222:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:224:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:224:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:224:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:226:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:226:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:226:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: got void [noderef] __iomem *topsys >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void *io_addr @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:15: sparse: got void *io_addr >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * vim +189 drivers/phy/starfive/phy-jh7110-dphy-tx.c 167 168 static inline u32 stf_dphy_get_reg(void *io_addr, u32 addr, u32 shift, u32 mask) 169 { 170 u32 tmp; 171 > 172 tmp = readl(io_addr); 173 tmp = (tmp & mask) >> shift; 174 return tmp; 175 } 176 177 static inline void stf_dphy_set_reg(void *io_addr, u32 addr, u32 data, u32 shift, u32 mask) 178 { 179 u32 tmp; 180 > 181 tmp = readl(io_addr + addr); 182 tmp &= ~mask; 183 tmp |= (data << shift) & mask; > 184 writel(tmp, (io_addr + addr)); 185 } 186 187 static int is_pll_locked(struct stf_dphy *dphy) 188 { > 189 int tmp = stf_dphy_get_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 190 STF_DPHY_RGS_CDTX_PLL_UNLOCK_SHIFT, 191 STF_DPHY_RGS_CDTX_PLL_UNLOCK_MASK); 192 return !tmp; 193 } 194 195 static void stf_dphy_hw_reset(struct stf_dphy *dphy, int assert) 196 { 197 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(100), 198 !assert, STF_DPHY_RESETB_SHIFT, STF_DPHY_RESETB_MASK); 199 200 if (!assert) { 201 /*the lock-in time of pll of M31 is 20us-50ms*/ 202 while ((!is_pll_locked(dphy)) && msecs_to_jiffies(50)) 203 ; 204 dev_err(dphy->dev, "MIPI dphy-tx # PLL Locked\n"); 205 } 206 } 207 208 static int stf_dphy_configure(struct phy *phy, union phy_configure_opts *opts) 209 { 210 struct stf_dphy *dphy; 211 u32 bitrate; 212 unsigned long alignment; 213 int i; 214 const struct m31_dphy_config *p; 215 const u32 STF_DPHY_AON_POWER_READY_N_active = 0; 216 const struct stf_dphy_info *info; 217 218 dphy = phy_get_drvdata(phy); 219 info = dphy->info; 220 bitrate = opts->mipi_dphy.hs_clk_rate; 221 222 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 0x10, 223 STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK); 224 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, 225 STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK); 226 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, 227 STF_DPHY_RG_CDTX_L2N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L2N_HSTX_RES_MASK); 228 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, 229 STF_DPHY_RG_CDTX_L3N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L3N_HSTX_RES_MASK); 230 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(16), 0x10, 231 STF_DPHY_RG_CDTX_L4N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L4N_HSTX_RES_MASK); 232 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 0x10, 233 STF_DPHY_RG_CDTX_L0P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0P_HSTX_RES_MASK); 234 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, 235 STF_DPHY_RG_CDTX_L1P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L1P_HSTX_RES_MASK); 236 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, 237 STF_DPHY_RG_CDTX_L2P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L2P_HSTX_RES_MASK); 238 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, 239 STF_DPHY_RG_CDTX_L3P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L3P_HSTX_RES_MASK); 240 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(16), 0x10, 241 STF_DPHY_RG_CDTX_L4P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L4P_HSTX_RES_MASK); 242 243 alignment = STF_DPHY_BITRATE_ALIGN; 244 if (bitrate % alignment) 245 bitrate += alignment - (bitrate % alignment); 246 247 p = m31_dphy_configs; 248 for (i = 0; i < ARRAY_SIZE(m31_dphy_configs); i++, p++) { 249 if (p->bitrate == bitrate) { 250 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(100), 251 STF_DPHY_REFCLK_12M, STF_DPHY_REFCLK_IN_SEL_SHIFT, 252 STF_DPHY_REFCLK_IN_SEL_MASK); 253 254 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), 255 STF_DPHY_AON_POWER_READY_N_active, 256 STF_DPHY_AON_POWER_READY_N_SHIFT, 257 STF_DPHY_AON_POWER_READY_N_MASK); 258 259 /*Lane setting*/ 260 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[0], 261 STF_DPHY_CFG_L0_SWAP_SEL_SHIFT, 262 STF_DPHY_CFG_L0_SWAP_SEL_MASK); 263 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[1], 264 STF_DPHY_CFG_L1_SWAP_SEL_SHIFT, 265 STF_DPHY_CFG_L1_SWAP_SEL_MASK); 266 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[2], 267 STF_DPHY_CFG_L2_SWAP_SEL_SHIFT, 268 STF_DPHY_CFG_L2_SWAP_SEL_MASK); 269 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[3], 270 STF_DPHY_CFG_L3_SWAP_SEL_SHIFT, 271 STF_DPHY_CFG_L3_SWAP_SEL_MASK); 272 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[4], 273 STF_DPHY_CFG_L4_SWAP_SEL_SHIFT, 274 STF_DPHY_CFG_L4_SWAP_SEL_MASK); 275 /*PLL setting*/ 276 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(28), 0x0, 277 STF_DPHY_RG_CDTX_PLL_SSC_EN_SHIFT, 278 STF_DPHY_RG_CDTX_PLL_SSC_EN_MASK); 279 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 0x1, 280 STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_SHIFT, 281 STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_MASK); 282 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 0x1, 283 STF_DPHY_RG_CDTX_PLL_FM_EN_SHIFT, 284 STF_DPHY_RG_CDTX_PLL_FM_EN_MASK); 285 286 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 287 p->pll_prev_div, STF_DPHY_RG_CDTX_PLL_PRE_DIV_SHIFT, 288 STF_DPHY_RG_CDTX_PLL_PRE_DIV_MASK); 289 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 290 p->pll_fbk_int, STF_DPHY_RG_CDTX_PLL_FBK_INT_SHIFT, 291 STF_DPHY_RG_CDTX_PLL_FBK_INT_MASK); 292 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(20), 293 p->pll_fbk_fra, STF_DPHY_RG_CDTX_PLL_FBK_FRA_SHIFT, 294 STF_DPHY_RG_CDTX_PLL_FBK_FRA_MASK); 295 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(40), 296 p->extd_cycle_sel, STF_DPHY_RG_EXTD_CYCLE_SEL_SHIFT, 297 STF_DPHY_RG_EXTD_CYCLE_SEL_MASK); 298 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), 299 p->dlane_hs_pre_time, 300 STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT, 301 STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK); 302 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), 303 p->dlane_hs_pre_time, 304 STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT, 305 STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK); 306 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), 307 p->dlane_hs_zero_time, 308 STF_DPHY_RG_DLANE_HS_ZERO_TIME_SHIFT, 309 STF_DPHY_RG_DLANE_HS_ZERO_TIME_MASK); 310 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), 311 p->dlane_hs_trail_time, 312 STF_DPHY_RG_DLANE_HS_TRAIL_TIME_SHIFT, 313 STF_DPHY_RG_DLANE_HS_TRAIL_TIME_MASK); 314 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), 315 p->clane_hs_pre_time, 316 STF_DPHY_RG_CLANE_HS_PRE_TIME_SHIFT, 317 STF_DPHY_RG_CLANE_HS_PRE_TIME_MASK); 318 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), 319 p->clane_hs_zero_time, 320 STF_DPHY_RG_CLANE_HS_ZERO_TIME_SHIFT, 321 STF_DPHY_RG_CLANE_HS_ZERO_TIME_MASK); 322 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), 323 p->clane_hs_trail_time, 324 STF_DPHY_RG_CLANE_HS_TRAIL_TIME_SHIFT, 325 STF_DPHY_RG_CLANE_HS_TRAIL_TIME_MASK); 326 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), 327 p->clane_hs_clk_pre_time, 328 STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_SHIFT, 329 STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_MASK); 330 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), 331 p->clane_hs_clk_post_time, 332 STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_SHIFT, 333 STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_MASK); 334 335 break; 336 } 337 } 338 339 return 0; 340 } 341 342 static int stf_dphy_init(struct phy *phy) 343 { 344 struct stf_dphy *dphy = phy_get_drvdata(phy); 345 int ret; 346 347 stf_dphy_hw_reset(dphy, 0); > 348 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(48), 0, 349 STF_DPHY_SCFG_PPI_C_READY_SEL_SHIFT, STF_DPHY_SCFG_PPI_C_READY_SEL_MASK); > 350 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(48), 0, 351 STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_SHIFT, 352 STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_MASK); > 353 stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(44), 0x30, 354 STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_SHIFT, 355 STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_MASK); 356 357 ret = clk_prepare_enable(dphy->txesc_clk); 358 if (ret) { 359 dev_err(dphy->dev, "Failed to prepare/enable txesc_clk\n"); 360 return ret; 361 } 362 363 ret = reset_control_deassert(dphy->sys_rst); 364 if (ret) { 365 dev_err(dphy->dev, "Failed to deassert sys_rst\n"); 366 return ret; 367 } 368 369 ret = reset_control_deassert(dphy->txbytehs_rst); 370 if (ret < 0) { 371 dev_err(dphy->dev, "Failed to deassert txbytehs_rst\n"); 372 return ret; 373 } 374 375 return 0; 376 } 377
Hi Vinod, Thanks for comment. On 2023/11/27 20:55, Vinod Koul wrote: > On 17-11-23, 21:04, Shengyang Chen wrote: >> Add mipi dphy tx support for the StarFive JH7110 SoC. >> It is used to transfer DSI data. > > How different is this from RX driver? Cant the support be added in the > TX driver with a new compatible? > They are different hardware and they play different role in system. As I know, 'RX' means receive and 'TX' means transport. Here, 'RX' is to receive CSI data while 'TX' is to transfer DSI data. In the system: The RX driver is a module to receive data from CSI interface like camera sensor, then transfer data to CSI driver. The TX driver is a module to receive data from DSI driver and transfer data to DSI interface like mipi screen. CSI driver will go find its PHY RX and DSI driver will go find its PHY TX during system registering or probing. For example: the whole data stream can be like camera sensor--->PHY RX--->CSI--->ddr--->display controller--->DSI--->PHY TX--->mipi screen So maybe it cannot be supported by adding the tx driver with a new compatible. It may need a separate driver. I will discribe it in more detail in next patch version if it's necessarily. >> >> Signed-off-by: Shengyang Chen <shengyang.chen@starfivetech.com> >> --- >> MAINTAINERS | 7 + >> drivers/phy/starfive/Kconfig | 10 + >> drivers/phy/starfive/Makefile | 1 + >> drivers/phy/starfive/phy-jh7110-dphy-tx.c | 542 ++++++++++++++++++++++ >> 4 files changed, 560 insertions(+) >> create mode 100644 drivers/phy/starfive/phy-jh7110-dphy-tx.c >> >> diff --git a/MAINTAINERS b/MAINTAINERS >> index cfb533ec89e8..255c577afa49 100644 >> --- a/MAINTAINERS >> +++ b/MAINTAINERS >> @@ -20677,6 +20677,13 @@ S: Supported >> F: Documentation/devicetree/bindings/phy/starfive,jh7110-dphy-rx.yaml >> F: drivers/phy/starfive/phy-jh7110-dphy-rx.c >> >> +STARFIVE JH7110 DPHY TX DRIVER >> +M: Keith Zhao <keith.zhao@starfivetech.com> >> +M: Shengyang Chen <shengyang.chen@starfivetech.com> >> +S: Supported >> +F: Documentation/devicetree/bindings/phy/starfive,jh7110-dphy-tx.yaml >> +F: drivers/phy/starfive/phy-jh7110-dphy-tx.c >> + >> STARFIVE JH7110 MMC/SD/SDIO DRIVER >> M: William Qiu <william.qiu@starfivetech.com> >> S: Supported >> diff --git a/drivers/phy/starfive/Kconfig b/drivers/phy/starfive/Kconfig >> index 9508e2143011..d0cdd7cb4a13 100644 >> --- a/drivers/phy/starfive/Kconfig >> +++ b/drivers/phy/starfive/Kconfig >> @@ -15,6 +15,16 @@ config PHY_STARFIVE_JH7110_DPHY_RX >> system. If M is selected, the module will be called >> phy-jh7110-dphy-rx.ko. >> >> +config PHY_STARFIVE_JH7110_DPHY_TX >> + tristate "StarFive JH7110 D-PHY TX Support" >> + depends on HAS_IOMEM >> + select GENERIC_PHY >> + select GENERIC_PHY_MIPI_DPHY >> + help >> + Choose this option if you have a StarFive D-PHY TX in your >> + system. If M is selected, the module will be called >> + phy-jh7110-dphy-tx.ko. >> + >> config PHY_STARFIVE_JH7110_PCIE >> tristate "Starfive JH7110 PCIE 2.0/USB 3.0 PHY support" >> depends on HAS_IOMEM >> diff --git a/drivers/phy/starfive/Makefile b/drivers/phy/starfive/Makefile >> index b391018b7c47..eedc4a6fec15 100644 >> --- a/drivers/phy/starfive/Makefile >> +++ b/drivers/phy/starfive/Makefile >> @@ -1,4 +1,5 @@ >> # SPDX-License-Identifier: GPL-2.0 >> obj-$(CONFIG_PHY_STARFIVE_JH7110_DPHY_RX) += phy-jh7110-dphy-rx.o >> +obj-$(CONFIG_PHY_STARFIVE_JH7110_DPHY_TX) += phy-jh7110-dphy-tx.o >> obj-$(CONFIG_PHY_STARFIVE_JH7110_PCIE) += phy-jh7110-pcie.o >> obj-$(CONFIG_PHY_STARFIVE_JH7110_USB) += phy-jh7110-usb.o >> diff --git a/drivers/phy/starfive/phy-jh7110-dphy-tx.c b/drivers/phy/starfive/phy-jh7110-dphy-tx.c >> new file mode 100644 >> index 000000000000..69aa172563e4 >> --- /dev/null >> +++ b/drivers/phy/starfive/phy-jh7110-dphy-tx.c >> @@ -0,0 +1,542 @@ >> +// SPDX-License-Identifier: GPL-2.0+ >> +/* >> + * DPHY TX driver for the StarFive JH7110 SoC >> + * >> + * Copyright (C) 2023 StarFive Technology Co., Ltd. >> + * Author: Keith Zhao <keith.zhao@starfivetech.com> >> + * Author: Shengyang Chen <shengyang.chen@starfivetech.com> >> + */ >> + >> +#include <linux/clk.h> >> +#include <linux/io.h> >> +#include <linux/mfd/syscon.h> >> +#include <linux/module.h> >> +#include <linux/of.h> >> +#include <linux/of_device.h> >> +#include <linux/phy/phy.h> >> +#include <linux/phy/phy-mipi-dphy.h> >> +#include <linux/platform_device.h> >> +#include <linux/pm_runtime.h> >> +#include <linux/regulator/consumer.h> >> +#include <linux/reset.h> >> + >> +#define STF_DPHY_APBIFSAIF_SYSCFG(x) (x) >> + >> +#define STF_DPHY_AON_POWER_READY_N_SHIFT 0x0U >> +#define STF_DPHY_AON_POWER_READY_N_MASK BIT(0) >> +#define STF_DPHY_CFG_L0_SWAP_SEL_SHIFT 0xCU >> +#define STF_DPHY_CFG_L0_SWAP_SEL_MASK GENMASK(14, 12) >> +#define STF_DPHY_CFG_L1_SWAP_SEL_SHIFT 0xFU >> +#define STF_DPHY_CFG_L1_SWAP_SEL_MASK GENMASK(17, 15) >> +#define STF_DPHY_CFG_L2_SWAP_SEL_SHIFT 0x12U >> +#define STF_DPHY_CFG_L2_SWAP_SEL_MASK GENMASK(20, 18) >> +#define STF_DPHY_CFG_L3_SWAP_SEL_SHIFT 0x15U >> +#define STF_DPHY_CFG_L3_SWAP_SEL_MASK GENMASK(23, 21) >> +#define STF_DPHY_CFG_L4_SWAP_SEL_SHIFT 0x18U >> +#define STF_DPHY_CFG_L4_SWAP_SEL_MASK GENMASK(26, 24) >> +#define STF_DPHY_RGS_CDTX_PLL_UNLOCK_SHIFT 0x12U >> +#define STF_DPHY_RGS_CDTX_PLL_UNLOCK_MASK BIT(18) >> +#define STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT 0x13U >> +#define STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK GENMASK(23, 19) >> +#define STF_DPHY_RG_CDTX_L0P_HSTX_RES_SHIFT 0x18U >> +#define STF_DPHY_RG_CDTX_L0P_HSTX_RES_MASK GENMASK(28, 24) >> + >> +#define STF_DPHY_RG_CDTX_L1P_HSTX_RES_SHIFT 0x5U >> +#define STF_DPHY_RG_CDTX_L1P_HSTX_RES_MASK GENMASK(9, 5) >> +#define STF_DPHY_RG_CDTX_L2N_HSTX_RES_SHIFT 0xAU >> +#define STF_DPHY_RG_CDTX_L2N_HSTX_RES_MASK GENMASK(14, 10) >> +#define STF_DPHY_RG_CDTX_L2P_HSTX_RES_SHIFT 0xFU >> +#define STF_DPHY_RG_CDTX_L2P_HSTX_RES_MASK GENMASK(19, 15) >> +#define STF_DPHY_RG_CDTX_L3N_HSTX_RES_SHIFT 0x14U >> +#define STF_DPHY_RG_CDTX_L3N_HSTX_RES_MASK GENMASK(24, 20) >> +#define STF_DPHY_RG_CDTX_L3P_HSTX_RES_SHIFT 0x19U >> +#define STF_DPHY_RG_CDTX_L3P_HSTX_RES_MASK GENMASK(29, 25) >> + >> +#define STF_DPHY_RG_CDTX_L4N_HSTX_RES_SHIFT 0x0U >> +#define STF_DPHY_RG_CDTX_L4N_HSTX_RES_MASK GENMASK(4, 0) >> +#define STF_DPHY_RG_CDTX_L4P_HSTX_RES_SHIFT 0x5U >> +#define STF_DPHY_RG_CDTX_L4P_HSTX_RES_MASK GENMASK(9, 5) >> +#define STF_DPHY_RG_CDTX_PLL_FBK_FRA_SHIFT 0x0U >> +#define STF_DPHY_RG_CDTX_PLL_FBK_FRA_MASK GENMASK(23, 0) >> + >> +#define STF_DPHY_RG_CDTX_PLL_FBK_INT_SHIFT 0x0U >> +#define STF_DPHY_RG_CDTX_PLL_FBK_INT_MASK GENMASK(8, 0) >> +#define STF_DPHY_RG_CDTX_PLL_FM_EN_SHIFT 0x9U >> +#define STF_DPHY_RG_CDTX_PLL_FM_EN_MASK BIT(9) >> +#define STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_SHIFT 0xAU >> +#define STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_MASK BIT(10) >> +#define STF_DPHY_RG_CDTX_PLL_PRE_DIV_SHIFT 0xBU >> +#define STF_DPHY_RG_CDTX_PLL_PRE_DIV_MASK GENMASK(12, 11) >> + >> +#define STF_DPHY_RG_CDTX_PLL_SSC_EN_SHIFT 0x12U >> +#define STF_DPHY_RG_CDTX_PLL_SSC_EN_MASK 0x40000U >> + >> +#define STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_SHIFT 0x0U >> +#define STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_MASK GENMASK(7, 0) >> +#define STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_SHIFT 0x8U >> +#define STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_MASK GENMASK(15, 8) >> +#define STF_DPHY_RG_CLANE_HS_PRE_TIME_SHIFT 0x10U >> +#define STF_DPHY_RG_CLANE_HS_PRE_TIME_MASK GENMASK(23, 16) >> +#define STF_DPHY_RG_CLANE_HS_TRAIL_TIME_SHIFT 0x18U >> +#define STF_DPHY_RG_CLANE_HS_TRAIL_TIME_MASK GENMASK(31, 24) >> + >> +#define STF_DPHY_RG_CLANE_HS_ZERO_TIME_SHIFT 0x0U >> +#define STF_DPHY_RG_CLANE_HS_ZERO_TIME_MASK GENMASK(7, 0) >> +#define STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT 0x8U >> +#define STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK GENMASK(15, 8) >> +#define STF_DPHY_RG_DLANE_HS_TRAIL_TIME_SHIFT 0x10U >> +#define STF_DPHY_RG_DLANE_HS_TRAIL_TIME_MASK GENMASK(23, 16) >> +#define STF_DPHY_RG_DLANE_HS_ZERO_TIME_SHIFT 0x18U >> +#define STF_DPHY_RG_DLANE_HS_ZERO_TIME_MASK GENMASK(31, 24) >> + >> +#define STF_DPHY_RG_EXTD_CYCLE_SEL_SHIFT 0x0U >> +#define STF_DPHY_RG_EXTD_CYCLE_SEL_MASK GENMASK(2, 0) >> +#define STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_SHIFT 0x0U >> +#define STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_MASK GENMASK(31, 0) >> + >> +#define STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_SHIFT 0x1U >> +#define STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_MASK GENMASK(2, 1) >> +#define STF_DPHY_SCFG_PPI_C_READY_SEL_SHIFT 0x3U >> +#define STF_DPHY_SCFG_PPI_C_READY_SEL_MASK GENMASK(4, 3) >> + >> +#define STF_DPHY_REFCLK_IN_SEL_SHIFT 0x1AU >> +#define STF_DPHY_REFCLK_IN_SEL_MASK GENMASK(28, 26) >> +#define STF_DPHY_RESETB_SHIFT 0x1DU >> +#define STF_DPHY_RESETB_MASK BIT(29) >> + >> +#define STF_DPHY_REFCLK_12M 1 >> +#define STF_DPHY_BITRATE_ALIGN 10000000 >> + >> +#define STF_MAP_LANES_NUM 5 >> + >> +struct m31_dphy_config { >> + int ref_clk; >> + unsigned long bitrate; >> + u32 pll_prev_div; >> + u32 pll_fbk_int; >> + u32 pll_fbk_fra; >> + u32 extd_cycle_sel; >> + u32 dlane_hs_pre_time; >> + u32 dlane_hs_zero_time; >> + u32 dlane_hs_trail_time; >> + u32 clane_hs_pre_time; >> + u32 clane_hs_zero_time; >> + u32 clane_hs_trail_time; >> + u32 clane_hs_clk_pre_time; >> + u32 clane_hs_clk_post_time; >> +}; >> + >> +static const struct m31_dphy_config m31_dphy_configs[] = { >> + {12000000, 490000000, 0x0, 0xa3, 0x55 << 16 | 0x55 << 8 | 0x55, >> + 0x2, 0xc, 0x1d, 0x14, 0x8, 0x42, 0x12, 0x3, 0x28}, >> + {12000000, 680000000, 0x0, 0x71, 0x55 << 16 | 0x55 << 8 | 0x55, >> + 0x1, 0x8, 0x13, 0xe, 0x5, 0x2e, 0xd, 0x1, 0x16}, >> + {12000000, 750000000, 0x0, 0x7d, 0x0 << 16 | 0x0 << 8 | 0x0, >> + 0x1, 0x8, 0x16, 0xf, 0x6, 0x32, 0xe, 0x1, 0x17}, >> + {12000000, 900000000, 0x0, 0x96, 0x0 << 16 | 0x0 << 8 | 0x0, >> + 0x1, 0xa, 0x19, 0x12, 0x8, 0x3c, 0x10, 0x1, 0x19}, >> +}; >> + >> +struct stf_dphy_info { >> + /** >> + * @maps: >> + * >> + * Physical lanes and logic lanes mapping table. >> + * >> + * The default order is: >> + * [data lane 0, data lane 1, data lane 2, date lane 3, clk lane] >> + */ >> + u8 maps[STF_MAP_LANES_NUM]; >> +}; >> + >> +struct stf_dphy { >> + struct device *dev; >> + void __iomem *topsys; >> + struct clk *txesc_clk; >> + struct reset_control *sys_rst; >> + struct reset_control *txbytehs_rst; >> + >> + struct phy_configure_opts_mipi_dphy config; >> + >> + struct regulator *mipitx_1p8; >> + struct regulator *mipitx_0p9; >> + >> + struct phy *phy; >> + const struct stf_dphy_info *info; >> +}; >> + >> +static inline u32 stf_dphy_get_reg(void *io_addr, u32 addr, u32 shift, u32 mask) >> +{ >> + u32 tmp; >> + >> + tmp = readl(io_addr); >> + tmp = (tmp & mask) >> shift; >> + return tmp; >> +} >> + >> +static inline void stf_dphy_set_reg(void *io_addr, u32 addr, u32 data, u32 shift, u32 mask) >> +{ >> + u32 tmp; >> + >> + tmp = readl(io_addr + addr); >> + tmp &= ~mask; >> + tmp |= (data << shift) & mask; >> + writel(tmp, (io_addr + addr)); >> +} >> + >> +static int is_pll_locked(struct stf_dphy *dphy) >> +{ >> + int tmp = stf_dphy_get_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), >> + STF_DPHY_RGS_CDTX_PLL_UNLOCK_SHIFT, >> + STF_DPHY_RGS_CDTX_PLL_UNLOCK_MASK); >> + return !tmp; >> +} >> + >> +static void stf_dphy_hw_reset(struct stf_dphy *dphy, int assert) >> +{ >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(100), >> + !assert, STF_DPHY_RESETB_SHIFT, STF_DPHY_RESETB_MASK); >> + >> + if (!assert) { >> + /*the lock-in time of pll of M31 is 20us-50ms*/ >> + while ((!is_pll_locked(dphy)) && msecs_to_jiffies(50)) >> + ; >> + dev_err(dphy->dev, "MIPI dphy-tx # PLL Locked\n"); >> + } >> +} >> + >> +static int stf_dphy_configure(struct phy *phy, union phy_configure_opts *opts) >> +{ >> + struct stf_dphy *dphy; >> + u32 bitrate; >> + unsigned long alignment; >> + int i; >> + const struct m31_dphy_config *p; >> + const u32 STF_DPHY_AON_POWER_READY_N_active = 0; >> + const struct stf_dphy_info *info; >> + >> + dphy = phy_get_drvdata(phy); >> + info = dphy->info; >> + bitrate = opts->mipi_dphy.hs_clk_rate; >> + >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 0x10, >> + STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, >> + STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, >> + STF_DPHY_RG_CDTX_L2N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L2N_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, >> + STF_DPHY_RG_CDTX_L3N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L3N_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(16), 0x10, >> + STF_DPHY_RG_CDTX_L4N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L4N_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 0x10, >> + STF_DPHY_RG_CDTX_L0P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0P_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, >> + STF_DPHY_RG_CDTX_L1P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L1P_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, >> + STF_DPHY_RG_CDTX_L2P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L2P_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, >> + STF_DPHY_RG_CDTX_L3P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L3P_HSTX_RES_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(16), 0x10, >> + STF_DPHY_RG_CDTX_L4P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L4P_HSTX_RES_MASK); >> + >> + alignment = STF_DPHY_BITRATE_ALIGN; >> + if (bitrate % alignment) >> + bitrate += alignment - (bitrate % alignment); >> + >> + p = m31_dphy_configs; >> + for (i = 0; i < ARRAY_SIZE(m31_dphy_configs); i++, p++) { >> + if (p->bitrate == bitrate) { >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(100), >> + STF_DPHY_REFCLK_12M, STF_DPHY_REFCLK_IN_SEL_SHIFT, >> + STF_DPHY_REFCLK_IN_SEL_MASK); >> + >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), >> + STF_DPHY_AON_POWER_READY_N_active, >> + STF_DPHY_AON_POWER_READY_N_SHIFT, >> + STF_DPHY_AON_POWER_READY_N_MASK); >> + >> + /*Lane setting*/ >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[0], >> + STF_DPHY_CFG_L0_SWAP_SEL_SHIFT, >> + STF_DPHY_CFG_L0_SWAP_SEL_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[1], >> + STF_DPHY_CFG_L1_SWAP_SEL_SHIFT, >> + STF_DPHY_CFG_L1_SWAP_SEL_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[2], >> + STF_DPHY_CFG_L2_SWAP_SEL_SHIFT, >> + STF_DPHY_CFG_L2_SWAP_SEL_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[3], >> + STF_DPHY_CFG_L3_SWAP_SEL_SHIFT, >> + STF_DPHY_CFG_L3_SWAP_SEL_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[4], >> + STF_DPHY_CFG_L4_SWAP_SEL_SHIFT, >> + STF_DPHY_CFG_L4_SWAP_SEL_MASK); >> + /*PLL setting*/ >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(28), 0x0, >> + STF_DPHY_RG_CDTX_PLL_SSC_EN_SHIFT, >> + STF_DPHY_RG_CDTX_PLL_SSC_EN_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 0x1, >> + STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_SHIFT, >> + STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 0x1, >> + STF_DPHY_RG_CDTX_PLL_FM_EN_SHIFT, >> + STF_DPHY_RG_CDTX_PLL_FM_EN_MASK); >> + >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), >> + p->pll_prev_div, STF_DPHY_RG_CDTX_PLL_PRE_DIV_SHIFT, >> + STF_DPHY_RG_CDTX_PLL_PRE_DIV_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), >> + p->pll_fbk_int, STF_DPHY_RG_CDTX_PLL_FBK_INT_SHIFT, >> + STF_DPHY_RG_CDTX_PLL_FBK_INT_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(20), >> + p->pll_fbk_fra, STF_DPHY_RG_CDTX_PLL_FBK_FRA_SHIFT, >> + STF_DPHY_RG_CDTX_PLL_FBK_FRA_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(40), >> + p->extd_cycle_sel, STF_DPHY_RG_EXTD_CYCLE_SEL_SHIFT, >> + STF_DPHY_RG_EXTD_CYCLE_SEL_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), >> + p->dlane_hs_pre_time, >> + STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT, >> + STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), >> + p->dlane_hs_pre_time, >> + STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT, >> + STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), >> + p->dlane_hs_zero_time, >> + STF_DPHY_RG_DLANE_HS_ZERO_TIME_SHIFT, >> + STF_DPHY_RG_DLANE_HS_ZERO_TIME_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), >> + p->dlane_hs_trail_time, >> + STF_DPHY_RG_DLANE_HS_TRAIL_TIME_SHIFT, >> + STF_DPHY_RG_DLANE_HS_TRAIL_TIME_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), >> + p->clane_hs_pre_time, >> + STF_DPHY_RG_CLANE_HS_PRE_TIME_SHIFT, >> + STF_DPHY_RG_CLANE_HS_PRE_TIME_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), >> + p->clane_hs_zero_time, >> + STF_DPHY_RG_CLANE_HS_ZERO_TIME_SHIFT, >> + STF_DPHY_RG_CLANE_HS_ZERO_TIME_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), >> + p->clane_hs_trail_time, >> + STF_DPHY_RG_CLANE_HS_TRAIL_TIME_SHIFT, >> + STF_DPHY_RG_CLANE_HS_TRAIL_TIME_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), >> + p->clane_hs_clk_pre_time, >> + STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_SHIFT, >> + STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), >> + p->clane_hs_clk_post_time, >> + STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_SHIFT, >> + STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_MASK); >> + >> + break; >> + } >> + } >> + >> + return 0; >> +} >> + >> +static int stf_dphy_init(struct phy *phy) >> +{ >> + struct stf_dphy *dphy = phy_get_drvdata(phy); >> + int ret; >> + >> + stf_dphy_hw_reset(dphy, 0); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(48), 0, >> + STF_DPHY_SCFG_PPI_C_READY_SEL_SHIFT, STF_DPHY_SCFG_PPI_C_READY_SEL_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(48), 0, >> + STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_SHIFT, >> + STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_MASK); >> + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(44), 0x30, >> + STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_SHIFT, >> + STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_MASK); >> + >> + ret = clk_prepare_enable(dphy->txesc_clk); >> + if (ret) { >> + dev_err(dphy->dev, "Failed to prepare/enable txesc_clk\n"); >> + return ret; >> + } >> + >> + ret = reset_control_deassert(dphy->sys_rst); >> + if (ret) { >> + dev_err(dphy->dev, "Failed to deassert sys_rst\n"); >> + return ret; >> + } >> + >> + ret = reset_control_deassert(dphy->txbytehs_rst); >> + if (ret < 0) { >> + dev_err(dphy->dev, "Failed to deassert txbytehs_rst\n"); >> + return ret; >> + } >> + >> + return 0; >> +} >> + >> +static int stf_dphy_exit(struct phy *phy) >> +{ >> + struct stf_dphy *dphy = phy_get_drvdata(phy); >> + int ret; >> + >> + ret = reset_control_assert(dphy->txbytehs_rst); >> + if (ret < 0) { >> + dev_err(dphy->dev, "Failed to assert txbytehs_rst\n"); >> + return ret; >> + } >> + >> + ret = reset_control_assert(dphy->sys_rst); >> + if (ret) { >> + dev_err(dphy->dev, "Failed to assert sys_rst\n"); >> + return ret; >> + } >> + >> + clk_disable_unprepare(dphy->txesc_clk); >> + >> + stf_dphy_hw_reset(dphy, 1); >> + >> + return 0; >> +} >> + >> +static int stf_dphy_power_on(struct phy *phy) >> +{ >> + struct stf_dphy *dphy = phy_get_drvdata(phy); >> + int ret; >> + >> + ret = pm_runtime_resume_and_get(dphy->dev); >> + if (ret < 0) >> + return ret; >> + >> + ret = regulator_enable(dphy->mipitx_0p9); >> + if (ret) { >> + dev_err(dphy->dev, "Cannot enable mipitx_0p9 regulator\n"); >> + return ret; >> + } >> + >> + return 0; >> +} >> + >> +static int stf_dphy_validate(struct phy *phy, enum phy_mode mode, int submode, >> + union phy_configure_opts *opts) >> +{ >> + if (mode != PHY_MODE_MIPI_DPHY) >> + return -EINVAL; >> + >> + return 0; >> +} >> + >> +static int stf_dphy_power_off(struct phy *phy) >> +{ >> + struct stf_dphy *dphy = phy_get_drvdata(phy); >> + >> + regulator_disable(dphy->mipitx_0p9); >> + >> + pm_runtime_put_sync(dphy->dev); >> + >> + return 0; >> +} >> + >> +static const struct phy_ops stf_dphy_ops = { >> + .power_on = stf_dphy_power_on, >> + .power_off = stf_dphy_power_off, >> + .init = stf_dphy_init, >> + .exit = stf_dphy_exit, >> + .configure = stf_dphy_configure, >> + .validate = stf_dphy_validate, >> + .owner = THIS_MODULE, >> +}; >> + >> +static int stf_dphy_probe(struct platform_device *pdev) >> +{ >> + struct phy_provider *phy_provider; >> + struct stf_dphy *dphy; >> + int ret; >> + >> + dphy = devm_kzalloc(&pdev->dev, sizeof(*dphy), GFP_KERNEL); >> + if (!dphy) >> + return -ENOMEM; >> + >> + dphy->info = of_device_get_match_data(&pdev->dev); >> + >> + dphy->dev = &pdev->dev; >> + dev_set_drvdata(&pdev->dev, dphy); >> + >> + dphy->topsys = devm_platform_ioremap_resource(pdev, 0); >> + if (IS_ERR(dphy->topsys)) { >> + ret = PTR_ERR(dphy->topsys); >> + return ret; >> + } >> + >> + pm_runtime_enable(&pdev->dev); >> + >> + dphy->mipitx_0p9 = devm_regulator_get(&pdev->dev, "mipi_0p9"); >> + if (IS_ERR(dphy->mipitx_0p9)) { >> + ret = PTR_ERR(dphy->mipitx_0p9); >> + return ret; >> + } >> + >> + dphy->txesc_clk = devm_clk_get(&pdev->dev, "dphy_txesc"); >> + if (IS_ERR(dphy->txesc_clk)) { >> + ret = PTR_ERR(dphy->txesc_clk); >> + dev_err(&pdev->dev, "txesc_clk get error\n"); >> + return ret; >> + } >> + >> + dphy->sys_rst = reset_control_get_exclusive(&pdev->dev, "dphy_sys"); >> + if (IS_ERR(dphy->sys_rst)) { >> + ret = PTR_ERR(dphy->sys_rst); >> + dev_err(&pdev->dev, "sys_rst get error\n"); >> + return ret; >> + } >> + >> + dphy->txbytehs_rst = reset_control_get_exclusive(&pdev->dev, "dsi_txbytehs"); >> + if (IS_ERR(dphy->txbytehs_rst)) { >> + dev_err(&pdev->dev, "Failed to get txbytehs_rst\n"); >> + return PTR_ERR(dphy->txbytehs_rst); >> + } >> + >> + dphy->phy = devm_phy_create(&pdev->dev, NULL, &stf_dphy_ops); >> + if (IS_ERR(dphy->phy)) { >> + ret = PTR_ERR(dphy->phy); >> + dev_err(&pdev->dev, "Failed to create phy\n"); >> + return ret; >> + } >> + phy_set_drvdata(dphy->phy, dphy); >> + >> + phy_provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); >> + if (IS_ERR(phy_provider)) { >> + ret = PTR_ERR(phy_provider); >> + dev_err(&pdev->dev, "Failed to create phy\n"); >> + return ret; >> + } >> + >> + return PTR_ERR_OR_ZERO(phy_provider); >> +} >> + >> +static const struct stf_dphy_info starfive_dphy_info = { >> + .maps = {0, 1, 2, 3, 4}, >> +}; >> + >> +static const struct of_device_id stf_dphy_dt_ids[] = { >> + { >> + .compatible = "starfive,jh7110-dphy-tx", >> + .data = &starfive_dphy_info, >> + }, >> + { /* sentinel */ }, >> +}; >> +MODULE_DEVICE_TABLE(of, stf_dphy_dt_ids); >> + >> +static struct platform_driver stf_dphy_driver = { >> + .driver = { >> + .name = "starfive-dphy-tx", >> + .of_match_table = stf_dphy_dt_ids, >> + }, >> + .probe = stf_dphy_probe, >> +}; >> +module_platform_driver(stf_dphy_driver); >> + >> +MODULE_AUTHOR("Keith Zhao <keith.zhao@starfivetech.com>"); >> +MODULE_AUTHOR("Shengyang Chen <shengyang.chen@starfivetech.com>"); >> +MODULE_DESCRIPTION("StarFive JH7110 DPHY TX driver"); >> +MODULE_LICENSE("GPL"); >> -- >> 2.17.1 > thanks. Best Regards, Shengyang
Hi Philipp, Thanks for review and comment. On 2023/11/27 21:17, Philipp Zabel wrote: > On Fr, 2023-11-17 at 21:04 +0800, Shengyang Chen wrote: >> Add mipi dphy tx support for the StarFive JH7110 SoC. >> It is used to transfer DSI data. >> >> Signed-off-by: Shengyang Chen <shengyang.chen@starfivetech.com> >> --- > [...] >> diff --git a/drivers/phy/starfive/phy-jh7110-dphy-tx.c b/drivers/phy/starfive/phy-jh7110-dphy-tx.c >> new file mode 100644 >> index 000000000000..69aa172563e4 >> --- /dev/null >> +++ b/drivers/phy/starfive/phy-jh7110-dphy-tx.c >> @@ -0,0 +1,542 @@ > [...] >> +static int stf_dphy_probe(struct platform_device *pdev) >> +{ > [...] >> + dphy->topsys = devm_platform_ioremap_resource(pdev, 0); >> + if (IS_ERR(dphy->topsys)) { >> + ret = PTR_ERR(dphy->topsys); >> + return ret; > > This could be shortened to: > > return PTR_ERR(dphy->topsys); > ok, will shortened to "return PTR_ERR(dphy->topsys);" >> + } >> + >> + pm_runtime_enable(&pdev->dev); >> + >> + dphy->mipitx_0p9 = devm_regulator_get(&pdev->dev, "mipi_0p9"); >> + if (IS_ERR(dphy->mipitx_0p9)) { >> + ret = PTR_ERR(dphy->mipitx_0p9); >> + return ret; > > Same as above. > ok, will fix it. >> + } >> + >> + dphy->txesc_clk = devm_clk_get(&pdev->dev, "dphy_txesc"); >> + if (IS_ERR(dphy->txesc_clk)) { >> + ret = PTR_ERR(dphy->txesc_clk); >> + dev_err(&pdev->dev, "txesc_clk get error\n"); >> + return ret; > > Consider using dev_err_probe(): > > return dev_err_probe(&pdev->dev, PTR_ERR(dphy->txesc_clk), > "txesc_clk get error\n"); > > And the same for the error paths below. > ok, it will be tried and verified. It will be used if no problem. >> + } >> + >> + dphy->sys_rst = reset_control_get_exclusive(&pdev->dev, "dphy_sys"); > > Why not devm_reset_control_get_exclusive()? > ok, it will be tried and verified. It will be used if no problem. >> + if (IS_ERR(dphy->sys_rst)) { >> + ret = PTR_ERR(dphy->sys_rst); >> + dev_err(&pdev->dev, "sys_rst get error\n"); >> + return ret; >> + } >> + >> + dphy->txbytehs_rst = reset_control_get_exclusive(&pdev->dev, "dsi_txbytehs"); > > Same as above. > ok, I'll follow up on this. >> + if (IS_ERR(dphy->txbytehs_rst)) { >> + dev_err(&pdev->dev, "Failed to get txbytehs_rst\n"); >> + return PTR_ERR(dphy->txbytehs_rst); >> + } >> + >> + dphy->phy = devm_phy_create(&pdev->dev, NULL, &stf_dphy_ops); >> + if (IS_ERR(dphy->phy)) { >> + ret = PTR_ERR(dphy->phy); >> + dev_err(&pdev->dev, "Failed to create phy\n"); >> + return ret; >> + } >> + phy_set_drvdata(dphy->phy, dphy); >> + >> + phy_provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); >> + if (IS_ERR(phy_provider)) { >> + ret = PTR_ERR(phy_provider); >> + dev_err(&pdev->dev, "Failed to create phy\n"); >> + return ret; >> + } >> + >> + return PTR_ERR_OR_ZERO(phy_provider); > > This can not be reached in the error case, so just: > > return 0; > > should suffice. > ok, will fix it. > > regards > Philipp thanks a lot. Best Regards, Shengyang
Hi kernel test robot, On 2023/12/1 1:30, kernel test robot wrote: > Hi Shengyang, > > kernel test robot noticed the following build warnings: > > [auto build test WARNING on robh/for-next] > [also build test WARNING on linus/master v6.7-rc3 next-20231130] > [If your patch is applied to the wrong git tree, kindly drop us a note. > And when submitting patch, we suggest to use '--base' as documented in > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > url: https://github.com/intel-lab-lkp/linux/commits/Shengyang-Chen/dt-bindings-phy-Add-starfive-jh7110-dphy-tx/20231117-210751 > base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next > patch link: https://lore.kernel.org/r/20231117130421.79261-3-shengyang.chen%40starfivetech.com > patch subject: [PATCH v1 2/2] phy: starfive: Add mipi dphy tx support > config: mips-randconfig-r112-20231121 (https://download.01.org/0day-ci/archive/20231201/202312010157.hZtZNEHE-lkp@intel.com/config) > compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a) > reproduce: (https://download.01.org/0day-ci/archive/20231201/202312010157.hZtZNEHE-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202312010157.hZtZNEHE-lkp@intel.com/ > > sparse warnings: (new ones prefixed by >>) > drivers/phy/starfive/phy-jh7110-dphy-tx.c:226:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: got void [noderef] __iomem *topsys > drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: expected void *io_addr > drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: got void [noderef] __iomem *topsys >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:21: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void *io_addr @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:21: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:21: sparse: got void *io_addr >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: expected void const volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:29: sparse: got void * >>> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got void * @@ > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: expected void volatile [noderef] __iomem *mem > drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:30: sparse: got void * > > vim +172 drivers/phy/starfive/phy-jh7110-dphy-tx.c > > 167 > 168 static inline u32 stf_dphy_get_reg(void *io_addr, u32 addr, u32 shift, u32 mask) > 169 { > 170 u32 tmp; > 171 > > 172 tmp = readl(io_addr); > 173 tmp = (tmp & mask) >> shift; > 174 return tmp; > 175 } > 176 > 177 static inline void stf_dphy_set_reg(void *io_addr, u32 addr, u32 data, u32 shift, u32 mask) > 178 { > 179 u32 tmp; > 180 > > 181 tmp = readl(io_addr + addr); > 182 tmp &= ~mask; > 183 tmp |= (data << shift) & mask; > > 184 writel(tmp, (io_addr + addr)); > 185 } > 186 > The warning will be followed up. thanks. Best Regards, Shengyang
Hi Shengyang, kernel test robot noticed the following build warnings: [auto build test WARNING on robh/for-next] [also build test WARNING on linus/master v6.7-rc4 next-20231204] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Shengyang-Chen/dt-bindings-phy-Add-starfive-jh7110-dphy-tx/20231117-210751 base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next patch link: https://lore.kernel.org/r/20231117130421.79261-3-shengyang.chen%40starfivetech.com patch subject: [PATCH v1 2/2] phy: starfive: Add mipi dphy tx support config: csky-randconfig-r111-20231118 (https://download.01.org/0day-ci/archive/20231204/202312042315.nozUINhO-lkp@intel.com/config) compiler: csky-linux-gcc (GCC) 13.2.0 reproduce: (https://download.01.org/0day-ci/archive/20231204/202312042315.nozUINhO-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312042315.nozUINhO-lkp@intel.com/ sparse warnings: (new ones prefixed by >>) >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:189:40: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:189:40: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:189:40: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:197:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:197:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:197:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:222:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:222:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:222:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:224:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:224:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:224:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:226:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:226:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:226:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:228:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:230:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:232:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:234:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:236:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:238:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:240:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:250:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:254:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:260:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:263:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:266:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:269:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:272:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:276:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:279:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:282:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:286:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:289:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:292:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:295:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:298:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:302:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:306:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:310:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:314:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:318:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:322:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:326:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:330:46: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:348:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:350:30: sparse: got void [noderef] __iomem *topsys drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void *io_addr @@ got void [noderef] __iomem *topsys @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: expected void *io_addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:353:30: sparse: got void [noderef] __iomem *topsys >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void *io_addr @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:172:15: sparse: got void *io_addr >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: expected void const volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:181:15: sparse: got void * >> drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got void * @@ drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: expected void volatile [noderef] __iomem *addr drivers/phy/starfive/phy-jh7110-dphy-tx.c:184:9: sparse: got void * vim +189 drivers/phy/starfive/phy-jh7110-dphy-tx.c 167 168 static inline u32 stf_dphy_get_reg(void *io_addr, u32 addr, u32 shift, u32 mask) 169 { 170 u32 tmp; 171 > 172 tmp = readl(io_addr); 173 tmp = (tmp & mask) >> shift; 174 return tmp; 175 } 176 177 static inline void stf_dphy_set_reg(void *io_addr, u32 addr, u32 data, u32 shift, u32 mask) 178 { 179 u32 tmp; 180 > 181 tmp = readl(io_addr + addr); 182 tmp &= ~mask; 183 tmp |= (data << shift) & mask; > 184 writel(tmp, (io_addr + addr)); 185 } 186 187 static int is_pll_locked(struct stf_dphy *dphy) 188 { > 189 int tmp = stf_dphy_get_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 190 STF_DPHY_RGS_CDTX_PLL_UNLOCK_SHIFT, 191 STF_DPHY_RGS_CDTX_PLL_UNLOCK_MASK); 192 return !tmp; 193 } 194
diff --git a/MAINTAINERS b/MAINTAINERS index cfb533ec89e8..255c577afa49 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -20677,6 +20677,13 @@ S: Supported F: Documentation/devicetree/bindings/phy/starfive,jh7110-dphy-rx.yaml F: drivers/phy/starfive/phy-jh7110-dphy-rx.c +STARFIVE JH7110 DPHY TX DRIVER +M: Keith Zhao <keith.zhao@starfivetech.com> +M: Shengyang Chen <shengyang.chen@starfivetech.com> +S: Supported +F: Documentation/devicetree/bindings/phy/starfive,jh7110-dphy-tx.yaml +F: drivers/phy/starfive/phy-jh7110-dphy-tx.c + STARFIVE JH7110 MMC/SD/SDIO DRIVER M: William Qiu <william.qiu@starfivetech.com> S: Supported diff --git a/drivers/phy/starfive/Kconfig b/drivers/phy/starfive/Kconfig index 9508e2143011..d0cdd7cb4a13 100644 --- a/drivers/phy/starfive/Kconfig +++ b/drivers/phy/starfive/Kconfig @@ -15,6 +15,16 @@ config PHY_STARFIVE_JH7110_DPHY_RX system. If M is selected, the module will be called phy-jh7110-dphy-rx.ko. +config PHY_STARFIVE_JH7110_DPHY_TX + tristate "StarFive JH7110 D-PHY TX Support" + depends on HAS_IOMEM + select GENERIC_PHY + select GENERIC_PHY_MIPI_DPHY + help + Choose this option if you have a StarFive D-PHY TX in your + system. If M is selected, the module will be called + phy-jh7110-dphy-tx.ko. + config PHY_STARFIVE_JH7110_PCIE tristate "Starfive JH7110 PCIE 2.0/USB 3.0 PHY support" depends on HAS_IOMEM diff --git a/drivers/phy/starfive/Makefile b/drivers/phy/starfive/Makefile index b391018b7c47..eedc4a6fec15 100644 --- a/drivers/phy/starfive/Makefile +++ b/drivers/phy/starfive/Makefile @@ -1,4 +1,5 @@ # SPDX-License-Identifier: GPL-2.0 obj-$(CONFIG_PHY_STARFIVE_JH7110_DPHY_RX) += phy-jh7110-dphy-rx.o +obj-$(CONFIG_PHY_STARFIVE_JH7110_DPHY_TX) += phy-jh7110-dphy-tx.o obj-$(CONFIG_PHY_STARFIVE_JH7110_PCIE) += phy-jh7110-pcie.o obj-$(CONFIG_PHY_STARFIVE_JH7110_USB) += phy-jh7110-usb.o diff --git a/drivers/phy/starfive/phy-jh7110-dphy-tx.c b/drivers/phy/starfive/phy-jh7110-dphy-tx.c new file mode 100644 index 000000000000..69aa172563e4 --- /dev/null +++ b/drivers/phy/starfive/phy-jh7110-dphy-tx.c @@ -0,0 +1,542 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * DPHY TX driver for the StarFive JH7110 SoC + * + * Copyright (C) 2023 StarFive Technology Co., Ltd. + * Author: Keith Zhao <keith.zhao@starfivetech.com> + * Author: Shengyang Chen <shengyang.chen@starfivetech.com> + */ + +#include <linux/clk.h> +#include <linux/io.h> +#include <linux/mfd/syscon.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/phy/phy.h> +#include <linux/phy/phy-mipi-dphy.h> +#include <linux/platform_device.h> +#include <linux/pm_runtime.h> +#include <linux/regulator/consumer.h> +#include <linux/reset.h> + +#define STF_DPHY_APBIFSAIF_SYSCFG(x) (x) + +#define STF_DPHY_AON_POWER_READY_N_SHIFT 0x0U +#define STF_DPHY_AON_POWER_READY_N_MASK BIT(0) +#define STF_DPHY_CFG_L0_SWAP_SEL_SHIFT 0xCU +#define STF_DPHY_CFG_L0_SWAP_SEL_MASK GENMASK(14, 12) +#define STF_DPHY_CFG_L1_SWAP_SEL_SHIFT 0xFU +#define STF_DPHY_CFG_L1_SWAP_SEL_MASK GENMASK(17, 15) +#define STF_DPHY_CFG_L2_SWAP_SEL_SHIFT 0x12U +#define STF_DPHY_CFG_L2_SWAP_SEL_MASK GENMASK(20, 18) +#define STF_DPHY_CFG_L3_SWAP_SEL_SHIFT 0x15U +#define STF_DPHY_CFG_L3_SWAP_SEL_MASK GENMASK(23, 21) +#define STF_DPHY_CFG_L4_SWAP_SEL_SHIFT 0x18U +#define STF_DPHY_CFG_L4_SWAP_SEL_MASK GENMASK(26, 24) +#define STF_DPHY_RGS_CDTX_PLL_UNLOCK_SHIFT 0x12U +#define STF_DPHY_RGS_CDTX_PLL_UNLOCK_MASK BIT(18) +#define STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT 0x13U +#define STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK GENMASK(23, 19) +#define STF_DPHY_RG_CDTX_L0P_HSTX_RES_SHIFT 0x18U +#define STF_DPHY_RG_CDTX_L0P_HSTX_RES_MASK GENMASK(28, 24) + +#define STF_DPHY_RG_CDTX_L1P_HSTX_RES_SHIFT 0x5U +#define STF_DPHY_RG_CDTX_L1P_HSTX_RES_MASK GENMASK(9, 5) +#define STF_DPHY_RG_CDTX_L2N_HSTX_RES_SHIFT 0xAU +#define STF_DPHY_RG_CDTX_L2N_HSTX_RES_MASK GENMASK(14, 10) +#define STF_DPHY_RG_CDTX_L2P_HSTX_RES_SHIFT 0xFU +#define STF_DPHY_RG_CDTX_L2P_HSTX_RES_MASK GENMASK(19, 15) +#define STF_DPHY_RG_CDTX_L3N_HSTX_RES_SHIFT 0x14U +#define STF_DPHY_RG_CDTX_L3N_HSTX_RES_MASK GENMASK(24, 20) +#define STF_DPHY_RG_CDTX_L3P_HSTX_RES_SHIFT 0x19U +#define STF_DPHY_RG_CDTX_L3P_HSTX_RES_MASK GENMASK(29, 25) + +#define STF_DPHY_RG_CDTX_L4N_HSTX_RES_SHIFT 0x0U +#define STF_DPHY_RG_CDTX_L4N_HSTX_RES_MASK GENMASK(4, 0) +#define STF_DPHY_RG_CDTX_L4P_HSTX_RES_SHIFT 0x5U +#define STF_DPHY_RG_CDTX_L4P_HSTX_RES_MASK GENMASK(9, 5) +#define STF_DPHY_RG_CDTX_PLL_FBK_FRA_SHIFT 0x0U +#define STF_DPHY_RG_CDTX_PLL_FBK_FRA_MASK GENMASK(23, 0) + +#define STF_DPHY_RG_CDTX_PLL_FBK_INT_SHIFT 0x0U +#define STF_DPHY_RG_CDTX_PLL_FBK_INT_MASK GENMASK(8, 0) +#define STF_DPHY_RG_CDTX_PLL_FM_EN_SHIFT 0x9U +#define STF_DPHY_RG_CDTX_PLL_FM_EN_MASK BIT(9) +#define STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_SHIFT 0xAU +#define STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_MASK BIT(10) +#define STF_DPHY_RG_CDTX_PLL_PRE_DIV_SHIFT 0xBU +#define STF_DPHY_RG_CDTX_PLL_PRE_DIV_MASK GENMASK(12, 11) + +#define STF_DPHY_RG_CDTX_PLL_SSC_EN_SHIFT 0x12U +#define STF_DPHY_RG_CDTX_PLL_SSC_EN_MASK 0x40000U + +#define STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_SHIFT 0x0U +#define STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_MASK GENMASK(7, 0) +#define STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_SHIFT 0x8U +#define STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_MASK GENMASK(15, 8) +#define STF_DPHY_RG_CLANE_HS_PRE_TIME_SHIFT 0x10U +#define STF_DPHY_RG_CLANE_HS_PRE_TIME_MASK GENMASK(23, 16) +#define STF_DPHY_RG_CLANE_HS_TRAIL_TIME_SHIFT 0x18U +#define STF_DPHY_RG_CLANE_HS_TRAIL_TIME_MASK GENMASK(31, 24) + +#define STF_DPHY_RG_CLANE_HS_ZERO_TIME_SHIFT 0x0U +#define STF_DPHY_RG_CLANE_HS_ZERO_TIME_MASK GENMASK(7, 0) +#define STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT 0x8U +#define STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK GENMASK(15, 8) +#define STF_DPHY_RG_DLANE_HS_TRAIL_TIME_SHIFT 0x10U +#define STF_DPHY_RG_DLANE_HS_TRAIL_TIME_MASK GENMASK(23, 16) +#define STF_DPHY_RG_DLANE_HS_ZERO_TIME_SHIFT 0x18U +#define STF_DPHY_RG_DLANE_HS_ZERO_TIME_MASK GENMASK(31, 24) + +#define STF_DPHY_RG_EXTD_CYCLE_SEL_SHIFT 0x0U +#define STF_DPHY_RG_EXTD_CYCLE_SEL_MASK GENMASK(2, 0) +#define STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_SHIFT 0x0U +#define STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_MASK GENMASK(31, 0) + +#define STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_SHIFT 0x1U +#define STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_MASK GENMASK(2, 1) +#define STF_DPHY_SCFG_PPI_C_READY_SEL_SHIFT 0x3U +#define STF_DPHY_SCFG_PPI_C_READY_SEL_MASK GENMASK(4, 3) + +#define STF_DPHY_REFCLK_IN_SEL_SHIFT 0x1AU +#define STF_DPHY_REFCLK_IN_SEL_MASK GENMASK(28, 26) +#define STF_DPHY_RESETB_SHIFT 0x1DU +#define STF_DPHY_RESETB_MASK BIT(29) + +#define STF_DPHY_REFCLK_12M 1 +#define STF_DPHY_BITRATE_ALIGN 10000000 + +#define STF_MAP_LANES_NUM 5 + +struct m31_dphy_config { + int ref_clk; + unsigned long bitrate; + u32 pll_prev_div; + u32 pll_fbk_int; + u32 pll_fbk_fra; + u32 extd_cycle_sel; + u32 dlane_hs_pre_time; + u32 dlane_hs_zero_time; + u32 dlane_hs_trail_time; + u32 clane_hs_pre_time; + u32 clane_hs_zero_time; + u32 clane_hs_trail_time; + u32 clane_hs_clk_pre_time; + u32 clane_hs_clk_post_time; +}; + +static const struct m31_dphy_config m31_dphy_configs[] = { + {12000000, 490000000, 0x0, 0xa3, 0x55 << 16 | 0x55 << 8 | 0x55, + 0x2, 0xc, 0x1d, 0x14, 0x8, 0x42, 0x12, 0x3, 0x28}, + {12000000, 680000000, 0x0, 0x71, 0x55 << 16 | 0x55 << 8 | 0x55, + 0x1, 0x8, 0x13, 0xe, 0x5, 0x2e, 0xd, 0x1, 0x16}, + {12000000, 750000000, 0x0, 0x7d, 0x0 << 16 | 0x0 << 8 | 0x0, + 0x1, 0x8, 0x16, 0xf, 0x6, 0x32, 0xe, 0x1, 0x17}, + {12000000, 900000000, 0x0, 0x96, 0x0 << 16 | 0x0 << 8 | 0x0, + 0x1, 0xa, 0x19, 0x12, 0x8, 0x3c, 0x10, 0x1, 0x19}, +}; + +struct stf_dphy_info { + /** + * @maps: + * + * Physical lanes and logic lanes mapping table. + * + * The default order is: + * [data lane 0, data lane 1, data lane 2, date lane 3, clk lane] + */ + u8 maps[STF_MAP_LANES_NUM]; +}; + +struct stf_dphy { + struct device *dev; + void __iomem *topsys; + struct clk *txesc_clk; + struct reset_control *sys_rst; + struct reset_control *txbytehs_rst; + + struct phy_configure_opts_mipi_dphy config; + + struct regulator *mipitx_1p8; + struct regulator *mipitx_0p9; + + struct phy *phy; + const struct stf_dphy_info *info; +}; + +static inline u32 stf_dphy_get_reg(void *io_addr, u32 addr, u32 shift, u32 mask) +{ + u32 tmp; + + tmp = readl(io_addr); + tmp = (tmp & mask) >> shift; + return tmp; +} + +static inline void stf_dphy_set_reg(void *io_addr, u32 addr, u32 data, u32 shift, u32 mask) +{ + u32 tmp; + + tmp = readl(io_addr + addr); + tmp &= ~mask; + tmp |= (data << shift) & mask; + writel(tmp, (io_addr + addr)); +} + +static int is_pll_locked(struct stf_dphy *dphy) +{ + int tmp = stf_dphy_get_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), + STF_DPHY_RGS_CDTX_PLL_UNLOCK_SHIFT, + STF_DPHY_RGS_CDTX_PLL_UNLOCK_MASK); + return !tmp; +} + +static void stf_dphy_hw_reset(struct stf_dphy *dphy, int assert) +{ + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(100), + !assert, STF_DPHY_RESETB_SHIFT, STF_DPHY_RESETB_MASK); + + if (!assert) { + /*the lock-in time of pll of M31 is 20us-50ms*/ + while ((!is_pll_locked(dphy)) && msecs_to_jiffies(50)) + ; + dev_err(dphy->dev, "MIPI dphy-tx # PLL Locked\n"); + } +} + +static int stf_dphy_configure(struct phy *phy, union phy_configure_opts *opts) +{ + struct stf_dphy *dphy; + u32 bitrate; + unsigned long alignment; + int i; + const struct m31_dphy_config *p; + const u32 STF_DPHY_AON_POWER_READY_N_active = 0; + const struct stf_dphy_info *info; + + dphy = phy_get_drvdata(phy); + info = dphy->info; + bitrate = opts->mipi_dphy.hs_clk_rate; + + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 0x10, + STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, + STF_DPHY_RG_CDTX_L0N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0N_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, + STF_DPHY_RG_CDTX_L2N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L2N_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, + STF_DPHY_RG_CDTX_L3N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L3N_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(16), 0x10, + STF_DPHY_RG_CDTX_L4N_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L4N_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(8), 0x10, + STF_DPHY_RG_CDTX_L0P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L0P_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, + STF_DPHY_RG_CDTX_L1P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L1P_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, + STF_DPHY_RG_CDTX_L2P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L2P_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(12), 0x10, + STF_DPHY_RG_CDTX_L3P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L3P_HSTX_RES_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(16), 0x10, + STF_DPHY_RG_CDTX_L4P_HSTX_RES_SHIFT, STF_DPHY_RG_CDTX_L4P_HSTX_RES_MASK); + + alignment = STF_DPHY_BITRATE_ALIGN; + if (bitrate % alignment) + bitrate += alignment - (bitrate % alignment); + + p = m31_dphy_configs; + for (i = 0; i < ARRAY_SIZE(m31_dphy_configs); i++, p++) { + if (p->bitrate == bitrate) { + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(100), + STF_DPHY_REFCLK_12M, STF_DPHY_REFCLK_IN_SEL_SHIFT, + STF_DPHY_REFCLK_IN_SEL_MASK); + + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), + STF_DPHY_AON_POWER_READY_N_active, + STF_DPHY_AON_POWER_READY_N_SHIFT, + STF_DPHY_AON_POWER_READY_N_MASK); + + /*Lane setting*/ + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[0], + STF_DPHY_CFG_L0_SWAP_SEL_SHIFT, + STF_DPHY_CFG_L0_SWAP_SEL_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[1], + STF_DPHY_CFG_L1_SWAP_SEL_SHIFT, + STF_DPHY_CFG_L1_SWAP_SEL_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[2], + STF_DPHY_CFG_L2_SWAP_SEL_SHIFT, + STF_DPHY_CFG_L2_SWAP_SEL_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[3], + STF_DPHY_CFG_L3_SWAP_SEL_SHIFT, + STF_DPHY_CFG_L3_SWAP_SEL_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(0), info->maps[4], + STF_DPHY_CFG_L4_SWAP_SEL_SHIFT, + STF_DPHY_CFG_L4_SWAP_SEL_MASK); + /*PLL setting*/ + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(28), 0x0, + STF_DPHY_RG_CDTX_PLL_SSC_EN_SHIFT, + STF_DPHY_RG_CDTX_PLL_SSC_EN_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 0x1, + STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_SHIFT, + STF_DPHY_RG_CDTX_PLL_LDO_STB_X2_EN_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), 0x1, + STF_DPHY_RG_CDTX_PLL_FM_EN_SHIFT, + STF_DPHY_RG_CDTX_PLL_FM_EN_MASK); + + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), + p->pll_prev_div, STF_DPHY_RG_CDTX_PLL_PRE_DIV_SHIFT, + STF_DPHY_RG_CDTX_PLL_PRE_DIV_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(24), + p->pll_fbk_int, STF_DPHY_RG_CDTX_PLL_FBK_INT_SHIFT, + STF_DPHY_RG_CDTX_PLL_FBK_INT_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(20), + p->pll_fbk_fra, STF_DPHY_RG_CDTX_PLL_FBK_FRA_SHIFT, + STF_DPHY_RG_CDTX_PLL_FBK_FRA_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(40), + p->extd_cycle_sel, STF_DPHY_RG_EXTD_CYCLE_SEL_SHIFT, + STF_DPHY_RG_EXTD_CYCLE_SEL_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), + p->dlane_hs_pre_time, + STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT, + STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), + p->dlane_hs_pre_time, + STF_DPHY_RG_DLANE_HS_PRE_TIME_SHIFT, + STF_DPHY_RG_DLANE_HS_PRE_TIME_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), + p->dlane_hs_zero_time, + STF_DPHY_RG_DLANE_HS_ZERO_TIME_SHIFT, + STF_DPHY_RG_DLANE_HS_ZERO_TIME_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), + p->dlane_hs_trail_time, + STF_DPHY_RG_DLANE_HS_TRAIL_TIME_SHIFT, + STF_DPHY_RG_DLANE_HS_TRAIL_TIME_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), + p->clane_hs_pre_time, + STF_DPHY_RG_CLANE_HS_PRE_TIME_SHIFT, + STF_DPHY_RG_CLANE_HS_PRE_TIME_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(36), + p->clane_hs_zero_time, + STF_DPHY_RG_CLANE_HS_ZERO_TIME_SHIFT, + STF_DPHY_RG_CLANE_HS_ZERO_TIME_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), + p->clane_hs_trail_time, + STF_DPHY_RG_CLANE_HS_TRAIL_TIME_SHIFT, + STF_DPHY_RG_CLANE_HS_TRAIL_TIME_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), + p->clane_hs_clk_pre_time, + STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_SHIFT, + STF_DPHY_RG_CLANE_HS_CLK_PRE_TIME_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(32), + p->clane_hs_clk_post_time, + STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_SHIFT, + STF_DPHY_RG_CLANE_HS_CLK_POST_TIME_MASK); + + break; + } + } + + return 0; +} + +static int stf_dphy_init(struct phy *phy) +{ + struct stf_dphy *dphy = phy_get_drvdata(phy); + int ret; + + stf_dphy_hw_reset(dphy, 0); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(48), 0, + STF_DPHY_SCFG_PPI_C_READY_SEL_SHIFT, STF_DPHY_SCFG_PPI_C_READY_SEL_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(48), 0, + STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_SHIFT, + STF_DPHY_SCFG_DSI_TXREADY_ESC_SEL_MASK); + stf_dphy_set_reg(dphy->topsys, STF_DPHY_APBIFSAIF_SYSCFG(44), 0x30, + STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_SHIFT, + STF_DPHY_SCFG_C_HS_PRE_ZERO_TIME_MASK); + + ret = clk_prepare_enable(dphy->txesc_clk); + if (ret) { + dev_err(dphy->dev, "Failed to prepare/enable txesc_clk\n"); + return ret; + } + + ret = reset_control_deassert(dphy->sys_rst); + if (ret) { + dev_err(dphy->dev, "Failed to deassert sys_rst\n"); + return ret; + } + + ret = reset_control_deassert(dphy->txbytehs_rst); + if (ret < 0) { + dev_err(dphy->dev, "Failed to deassert txbytehs_rst\n"); + return ret; + } + + return 0; +} + +static int stf_dphy_exit(struct phy *phy) +{ + struct stf_dphy *dphy = phy_get_drvdata(phy); + int ret; + + ret = reset_control_assert(dphy->txbytehs_rst); + if (ret < 0) { + dev_err(dphy->dev, "Failed to assert txbytehs_rst\n"); + return ret; + } + + ret = reset_control_assert(dphy->sys_rst); + if (ret) { + dev_err(dphy->dev, "Failed to assert sys_rst\n"); + return ret; + } + + clk_disable_unprepare(dphy->txesc_clk); + + stf_dphy_hw_reset(dphy, 1); + + return 0; +} + +static int stf_dphy_power_on(struct phy *phy) +{ + struct stf_dphy *dphy = phy_get_drvdata(phy); + int ret; + + ret = pm_runtime_resume_and_get(dphy->dev); + if (ret < 0) + return ret; + + ret = regulator_enable(dphy->mipitx_0p9); + if (ret) { + dev_err(dphy->dev, "Cannot enable mipitx_0p9 regulator\n"); + return ret; + } + + return 0; +} + +static int stf_dphy_validate(struct phy *phy, enum phy_mode mode, int submode, + union phy_configure_opts *opts) +{ + if (mode != PHY_MODE_MIPI_DPHY) + return -EINVAL; + + return 0; +} + +static int stf_dphy_power_off(struct phy *phy) +{ + struct stf_dphy *dphy = phy_get_drvdata(phy); + + regulator_disable(dphy->mipitx_0p9); + + pm_runtime_put_sync(dphy->dev); + + return 0; +} + +static const struct phy_ops stf_dphy_ops = { + .power_on = stf_dphy_power_on, + .power_off = stf_dphy_power_off, + .init = stf_dphy_init, + .exit = stf_dphy_exit, + .configure = stf_dphy_configure, + .validate = stf_dphy_validate, + .owner = THIS_MODULE, +}; + +static int stf_dphy_probe(struct platform_device *pdev) +{ + struct phy_provider *phy_provider; + struct stf_dphy *dphy; + int ret; + + dphy = devm_kzalloc(&pdev->dev, sizeof(*dphy), GFP_KERNEL); + if (!dphy) + return -ENOMEM; + + dphy->info = of_device_get_match_data(&pdev->dev); + + dphy->dev = &pdev->dev; + dev_set_drvdata(&pdev->dev, dphy); + + dphy->topsys = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(dphy->topsys)) { + ret = PTR_ERR(dphy->topsys); + return ret; + } + + pm_runtime_enable(&pdev->dev); + + dphy->mipitx_0p9 = devm_regulator_get(&pdev->dev, "mipi_0p9"); + if (IS_ERR(dphy->mipitx_0p9)) { + ret = PTR_ERR(dphy->mipitx_0p9); + return ret; + } + + dphy->txesc_clk = devm_clk_get(&pdev->dev, "dphy_txesc"); + if (IS_ERR(dphy->txesc_clk)) { + ret = PTR_ERR(dphy->txesc_clk); + dev_err(&pdev->dev, "txesc_clk get error\n"); + return ret; + } + + dphy->sys_rst = reset_control_get_exclusive(&pdev->dev, "dphy_sys"); + if (IS_ERR(dphy->sys_rst)) { + ret = PTR_ERR(dphy->sys_rst); + dev_err(&pdev->dev, "sys_rst get error\n"); + return ret; + } + + dphy->txbytehs_rst = reset_control_get_exclusive(&pdev->dev, "dsi_txbytehs"); + if (IS_ERR(dphy->txbytehs_rst)) { + dev_err(&pdev->dev, "Failed to get txbytehs_rst\n"); + return PTR_ERR(dphy->txbytehs_rst); + } + + dphy->phy = devm_phy_create(&pdev->dev, NULL, &stf_dphy_ops); + if (IS_ERR(dphy->phy)) { + ret = PTR_ERR(dphy->phy); + dev_err(&pdev->dev, "Failed to create phy\n"); + return ret; + } + phy_set_drvdata(dphy->phy, dphy); + + phy_provider = devm_of_phy_provider_register(&pdev->dev, of_phy_simple_xlate); + if (IS_ERR(phy_provider)) { + ret = PTR_ERR(phy_provider); + dev_err(&pdev->dev, "Failed to create phy\n"); + return ret; + } + + return PTR_ERR_OR_ZERO(phy_provider); +} + +static const struct stf_dphy_info starfive_dphy_info = { + .maps = {0, 1, 2, 3, 4}, +}; + +static const struct of_device_id stf_dphy_dt_ids[] = { + { + .compatible = "starfive,jh7110-dphy-tx", + .data = &starfive_dphy_info, + }, + { /* sentinel */ }, +}; +MODULE_DEVICE_TABLE(of, stf_dphy_dt_ids); + +static struct platform_driver stf_dphy_driver = { + .driver = { + .name = "starfive-dphy-tx", + .of_match_table = stf_dphy_dt_ids, + }, + .probe = stf_dphy_probe, +}; +module_platform_driver(stf_dphy_driver); + +MODULE_AUTHOR("Keith Zhao <keith.zhao@starfivetech.com>"); +MODULE_AUTHOR("Shengyang Chen <shengyang.chen@starfivetech.com>"); +MODULE_DESCRIPTION("StarFive JH7110 DPHY TX driver"); +MODULE_LICENSE("GPL");