From nobody Fri Apr 7 02:55:18 2023 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Pt2zV3V9Vz440yQ; Fri, 7 Apr 2023 02:55:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Pt2zV2s1dz4KJL; Fri, 7 Apr 2023 02:55:18 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1680836118; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WWA9vCcSxK9RgS/Lnwf/D/8zoFlV4yAwTKg/wIzh25c=; b=ZTNBdDCmq9AwFaN/l83WrBWlUPCIC5XqoJNXfUUm/KL9sOyX9kOH9l4YR9J6NqC2c6BMco D4erLUSoGZB4yE9cB7zud8DPo0JZxdEoBvyngGP2TFPdWdtZmVKMS6nU9dCBjxVhw6Y0il ffY/LkHvMP7n86Desyvdc6BGWoOBaB9c1YxG7QHXv72jYeXqJPTlSVU8xWzsQ5vSFnimKP NZPwgf+ibojMJzxxlcREwFOkiPW5cFN+wPexpY5Yj5xYKrsUBTei+fUBsw36S7CGHq+wxU 3GdmLTUWnzFZRy6RtugIcbS+uNTzwDt2qw66Tgxb26auO1iBUQcZmEO1h7MAlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1680836118; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=WWA9vCcSxK9RgS/Lnwf/D/8zoFlV4yAwTKg/wIzh25c=; b=g8LCniVlNTiFxGxH2HNYVtQi+10zYECSAZ19J40J2gyvVC2s6HVe39R8irMzX0AeG79G/h +wiVwtHYx2mFk9xzFwxXE/1jsxRAd++P02m2X+GYLzB7fH4CYDuht2Yq4m5Ja022PBDnvO gCPm8ZKoB8fTXkGSBSIaFhn69K2MrriS2PfcWyfZsu7Khj51V71dE7F6I4izD33MjHfjEJ m3stV0Pr7RGmm/I77GBjULVsFr0GJAsUJ5Fy9dKnX5PNuDwXXw3gLObNIq6y83T+H1giPn i2/P636mhqohtX6+eNUAM7rtFnLsDfQKDziUH+5wfY3tTeqbrAEOmvu5xD8wog== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1680836118; a=rsa-sha256; cv=none; b=xwKBvjoeVIjStmwOqXJrPwgA4SOrTK7Sb4isa77H+8SBRZ18dmbIyglsC8cpUcyRFLmcPP AUNJSu/ASpNAOgZb9bvW9/GOYAC7SdiHZ2uXeDbT4BZQ2tWTiW1YqM4ZmnBK0gDT1Iy15v R39FV7lfi+6u+xQso6Oxn7dU53Hl47KXiu4fK4Sggk6ZneeLUfErSE2x9VP1aDQDI33KQG JYRaZoRuw7Jy9ssqFG8n5y+G293iSiqoR/c95Ot2Y6rkUFvVAuZtprmAAkakNmzhK0MTbG S5CehcvUwK5DP4J9vI60tNOmeWf0O+rzcdSgryALzMQ9uTwf0iyGXf0BKeKJDA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Pt2zV1WQXzTjQ; Fri, 7 Apr 2023 02:55:18 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 3372tI4m078532; Fri, 7 Apr 2023 02:55:18 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 3372tIg6078531; Fri, 7 Apr 2023 02:55:18 GMT (envelope-from git) Date: Fri, 7 Apr 2023 02:55:18 GMT Message-Id: <202304070255.3372tIg6078531@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ganbold Tsagaankhuu Subject: git: 4720afaffe7e - main - Improve RK3568 pcie phy handling codes a bit. List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ganbold X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4720afaffe7e17e44ee0f8f3ab66da2fd2b0d5da Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by ganbold: URL: https://cgit.FreeBSD.org/src/commit/?id=4720afaffe7e17e44ee0f8f3ab66da2fd2b0d5da commit 4720afaffe7e17e44ee0f8f3ab66da2fd2b0d5da Author: Ganbold Tsagaankhuu AuthorDate: 2023-04-07 02:54:13 +0000 Commit: Ganbold Tsagaankhuu CommitDate: 2023-04-07 02:54:13 +0000 Improve RK3568 pcie phy handling codes a bit. Move phy bifurcation code to a separate function that can be called during the attach phase. Also initialize both pcie lanes accordingly. --- sys/arm64/rockchip/rk3568_pciephy.c | 87 +++++++++++++++++++++++-------------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/sys/arm64/rockchip/rk3568_pciephy.c b/sys/arm64/rockchip/rk3568_pciephy.c index 5320f30e31bd..d56675521841 100644 --- a/sys/arm64/rockchip/rk3568_pciephy.c +++ b/sys/arm64/rockchip/rk3568_pciephy.c @@ -56,9 +56,12 @@ #define GRF_PCIE30PHY_CON4 0x10 #define GRF_PCIE30PHY_CON5 0x14 #define GRF_PCIE30PHY_CON6 0x18 +#define GRF_BIFURCATION_LANE_1 0 +#define GRF_BIFURCATION_LANE_2 1 #define GRF_PCIE30PHY_WR_EN (0xf << 16) #define GRF_PCIE30PHY_CON9 0x24 -#define GRF_PCIE30PHY_DA_OCM ((1 << 15) | (1 << (15 + 16))) +#define GRF_PCIE30PHY_DA_OCM_MASK (1 << (15 + 16)) +#define GRF_PCIE30PHY_DA_OCM ((1 << 15) | GRF_PCIE30PHY_DA_OCM_MASK) #define GRF_PCIE30PHY_STATUS0 0x80 #define SRAM_INIT_DONE (1 << 14) @@ -80,46 +83,42 @@ struct rk3568_pciephy_softc { }; +static void +rk3568_pciephy_bifurcate(device_t dev, int control, uint32_t lane) +{ + struct rk3568_pciephy_softc *sc = device_get_softc(dev); + + switch (lane) { + case 0: + SYSCON_WRITE_4(sc->phy_grf, control, GRF_PCIE30PHY_WR_EN); + return; + case 1: + SYSCON_WRITE_4(sc->phy_grf, control, + GRF_PCIE30PHY_WR_EN | GRF_BIFURCATION_LANE_1); + break; + case 2: + SYSCON_WRITE_4(sc->phy_grf, control, + GRF_PCIE30PHY_WR_EN | GRF_BIFURCATION_LANE_2); + break; + default: + device_printf(dev, "Illegal lane %d\n", lane); + return; + } + if (bootverbose) + device_printf(dev, "lane %d @ pcie3x%d\n", lane, + (control == GRF_PCIE30PHY_CON5) ? 1 : 2); +} + /* PHY class and methods */ static int rk3568_pciephy_enable(struct phynode *phynode, bool enable) { device_t dev = phynode_get_device(phynode); struct rk3568_pciephy_softc *sc = device_get_softc(dev); - uint32_t data_lanes[2] = { 0, 0 }; int count; if (enable) { - /* Deassert PCIe PMA output clamp mode */ - SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON9, - GRF_PCIE30PHY_DA_OCM); - - /* Set bifurcation according to DT entry */ - if (OF_hasprop(sc->node, "data-lanes")) { - OF_getencprop(sc->node, "data-lanes", data_lanes, - sizeof(data_lanes)); - if (data_lanes[0] > 0) { - SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON5, - GRF_PCIE30PHY_WR_EN | (data_lanes[0] - 1)); - device_printf(dev, "pcie3x1 1 lane\n"); - } - if (data_lanes[1] > 0) { - SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON6, - GRF_PCIE30PHY_WR_EN | (data_lanes[1] - 1)); - device_printf(dev, "pcie3x2 1 lane\n"); - } - if (data_lanes[0] > 1 || data_lanes[1] > 1) - SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON1, - GRF_PCIE30PHY_DA_OCM); - - } else { - SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON5, - GRF_PCIE30PHY_WR_EN); - SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON6, - GRF_PCIE30PHY_WR_EN); - device_printf(dev, "pcie3 2 lanes\n"); - } - + /* Pull PHY out of reset */ hwreset_deassert(sc->phy_reset); /* Poll for SRAM loaded and ready */ @@ -165,6 +164,7 @@ rk3568_pciephy_attach(device_t dev) struct rk3568_pciephy_softc *sc = device_get_softc(dev); struct phynode_init_def phy_init; struct phynode *phynode; + uint32_t data_lanes[2] = { 0, 0 }; int rid = 0; sc->dev = dev; @@ -212,6 +212,29 @@ rk3568_pciephy_attach(device_t dev) /* Set RC/EP mode not implemented yet (RC mode only) */ + /* Set bifurcation according to "data-lanes" entry */ + if (OF_hasprop(sc->node, "data-lanes")) { + OF_getencprop(sc->node, "data-lanes", data_lanes, + sizeof(data_lanes)); + } + else + if (bootverbose) + device_printf(dev, "lane 1 & 2 @pcie3x2\n"); + + /* Deassert PCIe PMA output clamp mode */ + SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON9, GRF_PCIE30PHY_DA_OCM); + + /* Configure PHY HW accordingly */ + rk3568_pciephy_bifurcate(dev, GRF_PCIE30PHY_CON5, data_lanes[0]); + rk3568_pciephy_bifurcate(dev, GRF_PCIE30PHY_CON6, data_lanes[1]); + + if (data_lanes[0] || data_lanes[1]) + SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON1, + GRF_PCIE30PHY_DA_OCM); + else + SYSCON_WRITE_4(sc->phy_grf, GRF_PCIE30PHY_CON1, + GRF_PCIE30PHY_DA_OCM_MASK); + bzero(&phy_init, sizeof(phy_init)); phy_init.id = PHY_NONE; phy_init.ofw_node = sc->node;