From patchwork Thu Jan 14 21:34:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Nemirovsky X-Patchwork-Id: 1426691 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cortina-access.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CortinaAccess.onmicrosoft.com header.i=@CortinaAccess.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-CortinaAccess-onmicrosoft-com header.b=wMto5KZ+; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (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) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DGyJv1fzvz9sS8 for ; Fri, 15 Jan 2021 08:35:11 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id D1FD9827B5; Thu, 14 Jan 2021 22:35:02 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=cortina-access.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=CortinaAccess.onmicrosoft.com header.i=@CortinaAccess.onmicrosoft.com header.b="wMto5KZ+"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 02404827B5; Thu, 14 Jan 2021 22:35:00 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,MSGID_FROM_MTA_HEADER,SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from APC01-HK2-obe.outbound.protection.outlook.com (mail-hk2apc01on0610.outbound.protection.outlook.com [IPv6:2a01:111:f400:febc::610]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id BC5FD827A5 for ; Thu, 14 Jan 2021 22:34:55 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=cortina-access.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=Alex.Nemirovsky@cortina-access.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NuxvViurJa3pnImHxxFznIVZMAwkXDPpHOcnVPKXTZ69fXFBwdfww0YmtjJiF64/6LkY4LpYcUigiVI2daoPRWn/oyuKrkroyfH4z8ZFcR4YnmU82vJaxlnnQNbwFashStKe0qEHS+ePq8nva1/Lgodubjv+89VNjHmUfQuXaAdJj54oB8xKkfxbre6wiiulN2qEI28Iyh8XA5n12An9cMAD4FNgwv00NJeQHMdPLx8cjEVhNXOjlbqV9R09uRVbxX8b56ZgplHkDJNRSAmyzAM5crL1brsrIR03U+i9CEPnFMeZdrJRf00hK9zZqGqDgSxf4pFpbYqBvUPSo5tqmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nayr9iXuZ6TIefRCF621od5YMt80czhuiJgGCNFLVc0=; b=UYKzx0ncKl9k3gR/AbPxox8svqefC4aV1Brq4CmS0pVfBKKElJ/yK9B7Khs/qH9uywku54HZWRQT8NEj0eXHfvpNXkQmbNXuM5uy8JYWUwimjkbdxrajViJcoqfUL1ZQbtdT27+2Kqc50zjz8JdZpFu/pBlT/qCZ/BryJWX564ARvksAEYgwoIPlFhBt8zsIvZg1p5Lzl94LkswOMxSNQMrCJRNZ+vFWf4txf5geMeUDzBGgp0+eHjOJk4oTgz4xOgv/SxQ8taAN56hxDHuIVZfNBptDWXX0NSBQiZl2r6UchNaZKnqwb4YlcZauDjgF7miOJsNpEladH4uTwPPr6w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cortina-access.com; dmarc=pass action=none header.from=cortina-access.com; dkim=pass header.d=cortina-access.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CortinaAccess.onmicrosoft.com; s=selector2-CortinaAccess-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=nayr9iXuZ6TIefRCF621od5YMt80czhuiJgGCNFLVc0=; b=wMto5KZ+Vxv8B+roQ2gVEvln8psUmxCjEaymZbN+TQq+e76hmusvj7rCrE0twuG6HGxdrSNdAmnxyiO7Oya780wgipT5WsRv/KKvhiGAgVYBTXq1HPe9F8DcY8WTCqwn8JtuT/91vOo00iGnvflLCYm4JykIrp3E/HcyLTOJTb0= Authentication-Results: lists.denx.de; dkim=none (message not signed) header.d=none;lists.denx.de; dmarc=none action=none header.from=cortina-access.com; Received: from PS2PR01MB2504.apcprd01.prod.exchangelabs.com (2603:1096:300:3e::11) by PSAPR01MB3990.apcprd01.prod.exchangelabs.com (2603:1096:301:17::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3763.10; Thu, 14 Jan 2021 21:34:47 +0000 Received: from PS2PR01MB2504.apcprd01.prod.exchangelabs.com ([fe80::a5a3:f135:b16e:7329]) by PS2PR01MB2504.apcprd01.prod.exchangelabs.com ([fe80::a5a3:f135:b16e:7329%7]) with mapi id 15.20.3763.010; Thu, 14 Jan 2021 21:34:47 +0000 From: Alex Nemirovsky To: u-boot@lists.denx.de Cc: Abbie Chang , Alex Nemirovsky , Joe Hershberger , Tom Rini , Aaron Tseng Subject: [PATCH v2 2/3] net: phy: ca_phy: Add driver for CAxxxx SoCs Date: Thu, 14 Jan 2021 13:34:12 -0800 Message-Id: <1610660053-27790-2-git-send-email-alex.nemirovsky@cortina-access.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1610660053-27790-1-git-send-email-alex.nemirovsky@cortina-access.com> References: <1610660053-27790-1-git-send-email-alex.nemirovsky@cortina-access.com> X-Originating-IP: [70.58.207.205] X-ClientProxiedBy: MWHPR11CA0007.namprd11.prod.outlook.com (2603:10b6:301:1::17) To PS2PR01MB2504.apcprd01.prod.exchangelabs.com (2603:1096:300:3e::11) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from smok.hrh.localdomain (70.58.207.205) by MWHPR11CA0007.namprd11.prod.outlook.com (2603:10b6:301:1::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.3763.9 via Frontend Transport; Thu, 14 Jan 2021 21:34:45 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 875ad318-3cb1-41ba-3b34-08d8b8d43790 X-MS-TrafficTypeDiagnostic: PSAPR01MB3990: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-LD-Processed: 0694623c-6669-497c-89c3-3a32a9934313,ExtAddr X-MS-Oob-TLC-OOBClassifiers: OLM:87; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tCRXIcJG7AtPRiFQA23Ec3fQjfKk7AMInDak7FeHMepIUTTQLpGOsTZAHTkn6q3XL/T9vGXjnTnpt89nSH1fBEna6eZOJhhcjx4bRRyOOcMuxwwpCHznNJE+PU9kbT2V2rqjUNstL8AqiRSCmFujOxq3Q8T6RWZKbaIVQ7VzI0fmWNJmlnZ2gD12sJlASX4LuPI6OtC+9kUrZWGeXC5KTe4wuqteTOXLFRdEzHP9YvuUMtZuHfFSqTXzW3zXEGTDE9GDB3hDwSytblk3CgUyUN/a29JALq59KT/QicUOEB6YFW0FhrVNJCqanFmn9kNvwwhx/V4XQ27/0/5C6GJeH3HGPJEx5evqBqEU+TfoeRDVy6Kv2fDGBiKa6EVUXfcZTM/ybiU9OZRBsiGD3tqrHA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PS2PR01MB2504.apcprd01.prod.exchangelabs.com; PTR:; CAT:NONE; SFS:(6029001)(4636009)(366004)(376002)(396003)(39840400004)(136003)(346002)(66556008)(6506007)(107886003)(66476007)(4326008)(66946007)(2906002)(44832011)(2616005)(478600001)(86362001)(6512007)(83380400001)(36756003)(5660300002)(8936002)(6916009)(52116002)(6486002)(6666004)(8676002)(316002)(26005)(956004)(16526019)(54906003)(186003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: OLuPDEqEJZJWJ8oWT0Gvco+qj6tb1B1T4VtEwrRi01VJul1qOaagxOngZeLujRqo9qUCHQ9hq7tq/a5Q0Fz3ddAioxlWd+Pn6vA7DNngkOxM9MaIe+z6jVLvt5MBDscVKZvEotW3E4ZLMcX+hcloZdYr1OYloDrY0yv2gvR+Ei60OjHfPZ/34+K047bgwzBJPlu5a8gqoXtPSieHIQgdKT2PzVZ94+B9i6txvtzNOK0u1uDZOIMSa2XHVGCVJx0BbDFrWJRzFQVivR/f+Rt2FMgARrQkNOmKUmvyFwUn0QJAXh4J2BzhC8/Iq81dqyZ8+ekrJOUKyT///qF7Ca/Xd6CXVob1nwv8yUHImAbzVcqES1NVtf68Kyf3wQV4qwpyEh2cs7RMDshbrhL7iCyZ+BJy/gNsxL9ad7Ew5QKBna4p5kElQtS8WyGzO1rUOJtfozVCN6LxSDXiIvuMAzbfQB7xJ8HnDGF28N0DwBIFHBDYYIm6eYIrbt1ukft10tsZd3RTBpocOEXRBecTP/GptC5z3QMa2Rk++F5UNjfh9ZFzcCW0bi/yF9Hvs9Qen8mX4CCRUxudHkRpJHVaaOX4Y9laoVJ/CIfSKOxem4JWoEWsg/OqpIWfjRlmMCxghF4lJPkfVcQ+9ORiAoTaggJiRBOV1bv1QGt/bF9VqQf8045c1OV3Hcz/hUQiyE0QXoQGPSnRks7jJ8FAxAY/tv26JYnCFTyFJjq5ARYDAcS3GX95ZkgUvLo9U4ydf91W7MVfqNqZ7E3uVkPtvktAruo6OYUc6oqJXGxnB0o7+/U+I+fzt8mWHmLx8HWeuHVDm25SA6IVFs4wskYVFFWr5pWolv9y/hMA6BKWkvy+4x90GY273yl5j9jN8X6kCeiL6+BRftN5eGnJ+lDOQN70qgj43MbrElhd21RyeSadcAG+bNrLYkYvxpUQ4Zm2qXQkG3voMH44eTIWuk4+7GcsI4HffXFShV65YKMPn9sjH4fuRAyszj0kvVJgvRZH5St6i6ll X-OriginatorOrg: CORTINA-ACCESS.COM X-MS-Exchange-CrossTenant-AuthSource: PS2PR01MB2504.apcprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jan 2021 21:34:47.5523 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0694623c-6669-497c-89c3-3a32a9934313 X-MS-Exchange-CrossTenant-Network-Message-Id: 875ad318-3cb1-41ba-3b34-08d8b8d43790 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: AJKSVbttptxrIA8X6jivPPwd6ZLy28uFwk0dlGBauW+jxzznt91rPna4D0fcoiNmeb279qRv3NU2TxWRsoRRM1h8F0+zHnEjlyneG7jtmVQ7fMep3CoMZl5y/qjsnc5o X-MS-Exchange-Transport-CrossTenantHeadersStamped: PSAPR01MB3990 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean From: Abbie Chang Add phy driver support for MACs embedded inside Cortina Access SoCs Signed-off-by: Abbie Chang Signed-off-by: Alex Nemirovsky CC: Joe Hershberger CC: Tom Rini CC: Aaron Tseng Moved out PHY specific code out of Cortina NI Ethernet driver and into a Cortina Access PHY interface driver --- Changes in v2: None MAINTAINERS | 2 + drivers/net/phy/Kconfig | 7 +++ drivers/net/phy/Makefile | 1 + drivers/net/phy/ca_phy.c | 133 +++++++++++++++++++++++++++++++++++++++++++++++ drivers/net/phy/phy.c | 3 ++ include/phy.h | 1 + 6 files changed, 147 insertions(+) create mode 100644 drivers/net/phy/ca_phy.c diff --git a/MAINTAINERS b/MAINTAINERS index 74d6232..f9aab7d 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -200,6 +200,7 @@ F: drivers/i2c/i2c-cortina.c F: drivers/i2c/i2c-cortina.h F: drivers/net/cortina_ni.c F: drivers/net/cortina_ni.h +F: drivers/net/phy/ca_phy.c ARM/CZ.NIC TURRIS MOX SUPPORT M: Marek Behun @@ -810,6 +811,7 @@ F: drivers/i2c/i2c-cortina.c F: drivers/i2c/i2c-cortina.h F: drivers/net/cortina_ni.c F: drivers/net/cortina_ni.h +F: drivers/net/phy/ca_phy.c MIPS MSCC M: Gregory CLEMENT diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 51733dd..d695030 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig @@ -131,6 +131,13 @@ config SYS_CORTINA_FW_IN_SPIFLASH endchoice +config PHY_CORTINA_ACCESS + bool "Cortina Access Ethernet PHYs support" + default y + depends on CORTINA_NI_ENET + help + Cortina Access Ethernet PHYs init process + config PHY_DAVICOM bool "Davicom Ethernet PHYs support" diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile index 6e72233..e967f82 100644 --- a/drivers/net/phy/Makefile +++ b/drivers/net/phy/Makefile @@ -14,6 +14,7 @@ obj-$(CONFIG_PHY_AQUANTIA) += aquantia.o obj-$(CONFIG_PHY_ATHEROS) += atheros.o obj-$(CONFIG_PHY_BROADCOM) += broadcom.o obj-$(CONFIG_PHY_CORTINA) += cortina.o +obj-$(CONFIG_PHY_CORTINA_ACCESS) += ca_phy.o obj-$(CONFIG_PHY_DAVICOM) += davicom.o obj-$(CONFIG_PHY_ET1011C) += et1011c.o obj-$(CONFIG_PHY_LXT) += lxt.o diff --git a/drivers/net/phy/ca_phy.c b/drivers/net/phy/ca_phy.c new file mode 100644 index 0000000..16851a6 --- /dev/null +++ b/drivers/net/phy/ca_phy.c @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Cortina CS4315/CS4340 10G PHY drivers + * + * Copyright 2014 Freescale Semiconductor, Inc. + * Copyright 2018 NXP + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define PHY_ID_RTL8211_EXT 0x001cc910 +#define PHY_ID_RTL8211_INT 0x001cc980 +#define PHY_ID_MASK 0xFFFFFFF0 + +static void __internal_phy_init(struct phy_device *phydev, int reset_phy) +{ + u8 phy_addr; + u16 data; + + /* should initialize 4 GPHYs at once */ + for (phy_addr = 4; phy_addr > 0; phy_addr--) { + phydev->addr = phy_addr; + phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0BC6); + phy_write(phydev, MDIO_DEVAD_NONE, 16, 0x0053); + phy_write(phydev, MDIO_DEVAD_NONE, 18, 0x4003); + phy_write(phydev, MDIO_DEVAD_NONE, 22, 0x7e01); + phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0A42); + phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0A40); + phy_write(phydev, MDIO_DEVAD_NONE, 0, 0x1140); + } + + /* workaround to fix GPHY fail */ + for (phy_addr = 1; phy_addr < 5; phy_addr++) { + /* Clear clock fail interrupt */ + phydev->addr = phy_addr; + phy_write(phydev, MDIO_DEVAD_NONE, 31, 0xB90); + data = phy_read(phydev, MDIO_DEVAD_NONE, 19); + if (data == 0x10) { + phy_write(phydev, MDIO_DEVAD_NONE, 31, 0xB90); + data = phy_read(phydev, MDIO_DEVAD_NONE, 19); + printf("%s: read again.\n", __func__); + } + + printf("%s: phy_addr=%d, read register 19, value=0x%x\n", + __func__, phy_addr, data); + } +} + +static void __external_phy_init(struct phy_device *phydev, int reset_phy) +{ + u16 val; + + /* Disable response PHYAD=0 function of RTL8211 series PHY */ + /* REG31 write 0x0007, set to extension page */ + phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0007); + + /* REG30 write 0x002C, set to extension page 44 */ + phy_write(phydev, MDIO_DEVAD_NONE, 30, 0x002C); + + /* + * REG27 write bit[2] = 0 disable response PHYAD = 0 function. + * we should read REG27 and clear bit[2], and write back + */ + val = phy_read(phydev, MDIO_DEVAD_NONE, 27); + val &= ~(1 << 2); + phy_write(phydev, MDIO_DEVAD_NONE, 27, val); + + /* REG31 write 0X0000, back to page0 */ + phy_write(phydev, MDIO_DEVAD_NONE, 31, 0x0000); +} + +static int rtl8211_external_config(struct phy_device *phydev) +{ + __external_phy_init(phydev, 0); + printf("%s: initialize RTL8211 external done.\n", __func__); + return 0; +} + +static int rtl8211_internal_config(struct phy_device *phydev) +{ + struct phy_device phydev_init; + + memcpy(&phydev_init, phydev, sizeof(struct phy_device)); + /* should initialize 4 GPHYs at once */ + __internal_phy_init(&phydev_init, 0); + printf("%s: initialize RTL8211 internal done.\n", __func__); + return 0; +} + +static int rtl8211_probe(struct phy_device *phydev) +{ + /* disable reset behavior */ + phydev->flags = PHY_FLAG_BROKEN_RESET; + return 0; +} + +/* Support for RTL8211 External PHY */ +struct phy_driver rtl8211_external_driver = { + .name = "Cortina RTL8211 External", + .uid = PHY_ID_RTL8211_EXT, + .mask = PHY_ID_MASK, + .features = PHY_GBIT_FEATURES, + .config = &rtl8211_external_config, + .probe = &rtl8211_probe, + .startup = &genphy_startup, +}; + +/* Support for RTL8211 Internal PHY */ +struct phy_driver rtl8211_internal_driver = { + .name = "Cortina RTL8211 Inrernal", + .uid = PHY_ID_RTL8211_INT, + .mask = PHY_ID_MASK, + .features = PHY_GBIT_FEATURES, + .config = &rtl8211_internal_config, + .probe = &rtl8211_probe, + .startup = &genphy_startup, +}; + +int phy_cortina_access_init(void) +{ + phy_register(&rtl8211_external_driver); + phy_register(&rtl8211_internal_driver); + return 0; +} diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c index 9587e6b..662ea2b 100644 --- a/drivers/net/phy/phy.c +++ b/drivers/net/phy/phy.c @@ -500,6 +500,9 @@ int phy_init(void) #ifdef CONFIG_PHY_CORTINA phy_cortina_init(); #endif +#ifdef CONFIG_PHY_CORTINA_ACCESS + phy_cortina_access_init(); +#endif #ifdef CONFIG_PHY_DAVICOM phy_davicom_init(); #endif diff --git a/include/phy.h b/include/phy.h index cbdb10d..7750efd 100644 --- a/include/phy.h +++ b/include/phy.h @@ -493,6 +493,7 @@ int phy_aquantia_init(void); int phy_atheros_init(void); int phy_broadcom_init(void); int phy_cortina_init(void); +int phy_cortina_access_init(void); int phy_davicom_init(void); int phy_et1011c_init(void); int phy_lxt_init(void);