From: Greg KH <gregkh@linuxfoundation.org>
To: FUJITA Tomonori <fujita.tomonori@gmail.com>
Cc: netdev@vger.kernel.org, andrew@lunn.ch,
rust-for-linux@vger.kernel.org, tmgross@umich.edu
Subject: Re: [PATCH net-next v1 4/4] net: phy: add Applied Micro QT2025 PHY driver
Date: Mon, 15 Apr 2024 13:15:08 +0200 [thread overview]
Message-ID: <2024041549-voicing-legged-3341@gregkh> (raw)
In-Reply-To: <20240415104701.4772-5-fujita.tomonori@gmail.com>
On Mon, Apr 15, 2024 at 07:47:01PM +0900, FUJITA Tomonori wrote:
> This driver supports Applied Micro Circuits Corporation QT2025 PHY,
> based on a driver for Tehuti Networks TN40xx chips.
>
> The original driver for TN40xx chips supports multiple PHY hardware
> (AMCC QT2025, TI TLK10232, Aqrate AQR105, and Marvell 88X3120,
> 88X3310, and MV88E2010). This driver is extracted from the original
> driver and modified to a PHY driver in Rust.
>
> This has been tested with Edimax EN-9320SFP+ 10G network adapter.
>
> Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com>
> ---
> MAINTAINERS | 7 ++++
> drivers/net/phy/Kconfig | 6 ++++
> drivers/net/phy/Makefile | 1 +
> drivers/net/phy/qt2025.rs | 75 +++++++++++++++++++++++++++++++++++++++
> rust/uapi/uapi_helper.h | 1 +
> 5 files changed, 90 insertions(+)
> create mode 100644 drivers/net/phy/qt2025.rs
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 5ba3fe6ac09c..f2d86e221ba3 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -1540,6 +1540,13 @@ F: Documentation/admin-guide/perf/xgene-pmu.rst
> F: Documentation/devicetree/bindings/perf/apm-xgene-pmu.txt
> F: drivers/perf/xgene_pmu.c
>
> +APPLIED MICRO QT2025 PHY DRIVER
> +M: FUJITA Tomonori <fujita.tomonori@gmail.com>
> +L: netdev@vger.kernel.org
> +L: rust-for-linux@vger.kernel.org
> +S: Maintained
> +F: drivers/net/phy/qt2025.rs
> +
> APTINA CAMERA SENSOR PLL
> M: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> L: linux-media@vger.kernel.org
> diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
> index 3ad04170aa4e..8293c3d14229 100644
> --- a/drivers/net/phy/Kconfig
> +++ b/drivers/net/phy/Kconfig
> @@ -110,6 +110,12 @@ config ADIN1100_PHY
> Currently supports the:
> - ADIN1100 - Robust,Industrial, Low Power 10BASE-T1L Ethernet PHY
>
> +config AMCC_QT2025_PHY
> + tristate "AMCC QT2025 PHY"
> + depends on RUST_PHYLIB_ABSTRACTIONS
> + help
> + Adds support for the Applied Micro Circuits Corporation QT2025 PHY.
> +
> source "drivers/net/phy/aquantia/Kconfig"
>
> config AX88796B_PHY
> diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
> index 1d8be374915f..75d0b07a392a 100644
> --- a/drivers/net/phy/Makefile
> +++ b/drivers/net/phy/Makefile
> @@ -36,6 +36,7 @@ obj-$(CONFIG_ADIN_PHY) += adin.o
> obj-$(CONFIG_ADIN1100_PHY) += adin1100.o
> obj-$(CONFIG_AIR_EN8811H_PHY) += air_en8811h.o
> obj-$(CONFIG_AMD_PHY) += amd.o
> +obj-$(CONFIG_AMCC_QT2025_PHY) += qt2025.o
> obj-$(CONFIG_AQUANTIA_PHY) += aquantia/
> ifdef CONFIG_AX88796B_RUST_PHY
> obj-$(CONFIG_AX88796B_PHY) += ax88796b_rust.o
> diff --git a/drivers/net/phy/qt2025.rs b/drivers/net/phy/qt2025.rs
> new file mode 100644
> index 000000000000..e42b77753717
> --- /dev/null
> +++ b/drivers/net/phy/qt2025.rs
> @@ -0,0 +1,75 @@
> +// SPDX-License-Identifier: GPL-2.0
> +// Copyright (C) Tehuti Networks Ltd.
> +// Copyright (C) 2024 FUJITA Tomonori <fujita.tomonori@gmail.com>
> +
> +//! Applied Micro Circuits Corporation QT2025 PHY driver
> +use kernel::c_str;
> +use kernel::net::phy::{self, DeviceId, Driver, Firmware};
> +use kernel::prelude::*;
> +use kernel::uapi;
> +
> +kernel::module_phy_driver! {
> + drivers: [PhyQT2025],
> + device_table: [
> + DeviceId::new_with_driver::<PhyQT2025>(),
> + ],
> + name: "qt2025_phy",
> + author: "FUJITA Tomonori <fujita.tomonori@gmail.com>",
> + description: "AMCC QT2025 PHY driver",
> + license: "GPL",
> +}
What about support for MODULE_FIRMWARE() so it will be properly loaded
into the initramfs of systems now that you are needing it for this
driver? To ignore that is going to cause problems :(
> +
> +const MDIO_MMD_PMAPMD: u8 = uapi::MDIO_MMD_PMAPMD as u8;
> +const MDIO_MMD_PCS: u8 = uapi::MDIO_MMD_PCS as u8;
> +const MDIO_MMD_PHYXS: u8 = uapi::MDIO_MMD_PHYXS as u8;
> +
> +struct PhyQT2025;
> +
> +#[vtable]
> +impl Driver for PhyQT2025 {
> + const NAME: &'static CStr = c_str!("QT2025 10Gpbs SFP+");
> + const PHY_DEVICE_ID: phy::DeviceId = phy::DeviceId::new_with_exact_mask(0x0043A400);
> +
> + fn config_init(dev: &mut phy::Device) -> Result<()> {
> + let fw = Firmware::new(c_str!("qt2025-2.0.3.3.fw"), dev)?;
> +
> + let phy_id = dev.c45_read(MDIO_MMD_PMAPMD, 0xd001)?;
> + if (phy_id >> 8) & 0xff != 0xb3 {
> + return Ok(());
> + }
> +
> + dev.c45_write(MDIO_MMD_PMAPMD, 0xC300, 0x0000)?;
> + dev.c45_write(MDIO_MMD_PMAPMD, 0xC302, 0x4)?;
> + dev.c45_write(MDIO_MMD_PMAPMD, 0xC319, 0x0038)?;
> +
> + dev.c45_write(MDIO_MMD_PMAPMD, 0xC31A, 0x0098)?;
> + dev.c45_write(MDIO_MMD_PCS, 0x0026, 0x0E00)?;
> +
> + dev.c45_write(MDIO_MMD_PCS, 0x0027, 0x0893)?;
> +
> + dev.c45_write(MDIO_MMD_PCS, 0x0028, 0xA528)?;
> + dev.c45_write(MDIO_MMD_PCS, 0x0029, 0x03)?;
> + dev.c45_write(MDIO_MMD_PMAPMD, 0xC30A, 0x06E1)?;
> + dev.c45_write(MDIO_MMD_PMAPMD, 0xC300, 0x0002)?;
> + dev.c45_write(MDIO_MMD_PCS, 0xE854, 0x00C0)?;
> +
> + let mut j = 0x8000;
> + let mut a = MDIO_MMD_PCS;
> + for (i, val) in fw.data().iter().enumerate() {
So you are treating the firmware image as able to be iterated over here?
> + if i == 0x4000 {
What does 0x4000 mean here?
> + a = MDIO_MMD_PHYXS;
> + j = 0x8000;
What does 0x8000 mean here?
> + }
> + dev.c45_write(a, j, (*val).into())?;
> +
> + j += 1;
> + }
> + dev.c45_write(MDIO_MMD_PCS, 0xe854, 0x0040)?;
Lots of magic values in this driver, is that intentional?
thanks,
greg k-h
next prev parent reply other threads:[~2024-04-15 11:15 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-15 10:46 [PATCH net-next v1 0/4] net: phy: add Applied Micro QT2025 PHY driver FUJITA Tomonori
2024-04-15 10:46 ` [PATCH net-next v1 1/4] rust: net::phy support config_init driver callback FUJITA Tomonori
2024-04-15 10:46 ` [PATCH net-next v1 2/4] rust: net::phy support C45 helpers FUJITA Tomonori
2024-04-15 14:20 ` Andrew Lunn
2024-04-16 11:40 ` FUJITA Tomonori
2024-04-16 12:38 ` Andrew Lunn
2024-04-16 13:21 ` FUJITA Tomonori
2024-04-16 22:07 ` Benno Lossin
2024-04-16 22:30 ` Andrew Lunn
2024-04-17 8:20 ` Benno Lossin
2024-04-17 13:34 ` Andrew Lunn
2024-04-18 12:47 ` Benno Lossin
2024-04-18 14:32 ` Andrew Lunn
2024-04-18 13:15 ` FUJITA Tomonori
2024-04-16 3:25 ` Trevor Gross
2024-05-27 2:00 ` FUJITA Tomonori
2024-04-15 10:47 ` [PATCH net-next v1 3/4] rust: net::phy support Firmware API FUJITA Tomonori
2024-04-15 11:10 ` Greg KH
2024-04-18 12:51 ` FUJITA Tomonori
2024-04-18 13:05 ` Greg KH
2024-04-18 13:07 ` Greg KH
2024-04-18 13:35 ` FUJITA Tomonori
2024-04-15 13:30 ` Andrew Lunn
2024-04-15 15:45 ` Danilo Krummrich
2024-04-18 13:10 ` FUJITA Tomonori
2024-04-15 10:47 ` [PATCH net-next v1 4/4] net: phy: add Applied Micro QT2025 PHY driver FUJITA Tomonori
2024-04-15 11:15 ` Greg KH [this message]
2024-04-18 13:00 ` FUJITA Tomonori
2024-04-18 13:10 ` Greg KH
2024-04-18 13:22 ` FUJITA Tomonori
2024-04-18 14:42 ` Andrew Lunn
2024-04-15 13:48 ` Andrew Lunn
2024-04-15 16:53 ` Andrew Lunn
2024-04-16 4:34 ` Trevor Gross
2024-04-16 6:58 ` Benno Lossin
2024-04-16 11:16 ` FUJITA Tomonori
2024-04-16 12:08 ` Andrew Lunn
2024-05-24 1:50 ` FUJITA Tomonori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2024041549-voicing-legged-3341@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=andrew@lunn.ch \
--cc=fujita.tomonori@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).