mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	New revision of Methode eDPU boards uses Marvell 88E6361 switch, so lets backport it from kernel 6.5. Since 5.15 doesnt have phylink_get_caps I had to modify the backport to use the old mv88e6393x_phylink_validate instead. I had to fixup one more instance of port_max_speed_mode as well that is not present in 6.5. Signed-off-by: Robert Marko <robert.marko@sartura.hr>
		
			
				
	
	
		
			70 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 07120894b24cc3cf2318925baeaaf0893e3312e4 Mon Sep 17 00:00:00 2001
 | 
						|
From: =?UTF-8?q?Alexis=20Lothor=C3=A9?= <alexis.lothore@bootlin.com>
 | 
						|
Date: Mon, 29 May 2023 10:02:43 +0200
 | 
						|
Subject: [PATCH 895/898] net: dsa: mv88e6xxx: add field to specify internal
 | 
						|
 phys layout
 | 
						|
MIME-Version: 1.0
 | 
						|
Content-Type: text/plain; charset=UTF-8
 | 
						|
Content-Transfer-Encoding: 8bit
 | 
						|
 | 
						|
mv88e6xxx currently assumes that switch equipped with internal phys have
 | 
						|
those phys mapped contiguously starting from port 0 (see
 | 
						|
mv88e6xxx_phy_is_internal). However, some switches have internal PHYs but
 | 
						|
NOT starting from port 0. For example 88e6393X, 88E6193X and 88E6191X have
 | 
						|
integrated PHYs available on ports 1 to 8
 | 
						|
To properly support this offset, add a new field to allow specifying an
 | 
						|
internal PHYs layout. If field is not set, default layout is assumed (start
 | 
						|
at port 0)
 | 
						|
 | 
						|
Signed-off-by: Alexis Lothoré <alexis.lothore@bootlin.com>
 | 
						|
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
 | 
						|
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 | 
						|
---
 | 
						|
 drivers/net/dsa/mv88e6xxx/chip.c    | 4 +++-
 | 
						|
 drivers/net/dsa/mv88e6xxx/chip.h    | 5 +++++
 | 
						|
 drivers/net/dsa/mv88e6xxx/global2.c | 5 ++++-
 | 
						|
 3 files changed, 12 insertions(+), 2 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
 | 
						|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
 | 
						|
@@ -461,7 +461,9 @@ restore_link:
 | 
						|
 
 | 
						|
 static int mv88e6xxx_phy_is_internal(struct mv88e6xxx_chip *chip, int port)
 | 
						|
 {
 | 
						|
-	return port < chip->info->num_internal_phys;
 | 
						|
+	return port >= chip->info->internal_phys_offset &&
 | 
						|
+		port < chip->info->num_internal_phys +
 | 
						|
+			chip->info->internal_phys_offset;
 | 
						|
 }
 | 
						|
 
 | 
						|
 static int mv88e6xxx_port_ppu_updates(struct mv88e6xxx_chip *chip, int port)
 | 
						|
--- a/drivers/net/dsa/mv88e6xxx/chip.h
 | 
						|
+++ b/drivers/net/dsa/mv88e6xxx/chip.h
 | 
						|
@@ -165,6 +165,11 @@ struct mv88e6xxx_info {
 | 
						|
 
 | 
						|
 	/* Supports PTP */
 | 
						|
 	bool ptp_support;
 | 
						|
+
 | 
						|
+	/* Internal PHY start index. 0 means that internal PHYs range starts at
 | 
						|
+	 * port 0, 1 means internal PHYs range starts at port 1, etc
 | 
						|
+	 */
 | 
						|
+	unsigned int internal_phys_offset;
 | 
						|
 };
 | 
						|
 
 | 
						|
 struct mv88e6xxx_atu_entry {
 | 
						|
--- a/drivers/net/dsa/mv88e6xxx/global2.c
 | 
						|
+++ b/drivers/net/dsa/mv88e6xxx/global2.c
 | 
						|
@@ -1185,8 +1185,11 @@ int mv88e6xxx_g2_irq_mdio_setup(struct m
 | 
						|
 				struct mii_bus *bus)
 | 
						|
 {
 | 
						|
 	int phy, irq, err, err_phy;
 | 
						|
+	int phy_start = chip->info->internal_phys_offset;
 | 
						|
+	int phy_end = chip->info->internal_phys_offset +
 | 
						|
+		      chip->info->num_internal_phys;
 | 
						|
 
 | 
						|
-	for (phy = 0; phy < chip->info->num_internal_phys; phy++) {
 | 
						|
+	for (phy = phy_start; phy < phy_end; phy++) {
 | 
						|
 		irq = irq_find_mapping(chip->g2_irq.domain, phy);
 | 
						|
 		if (irq < 0) {
 | 
						|
 			err = irq;
 |