mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 18:35:42 +01:00 
			
		
		
		
	cmd: mdio: Switch to generic helpers when accessing the registers
Switch to use the generic helpers to access the MMD registers so that we can used the same command also for C45 PHYs, C22 PHYs with direct and indirect access and PHYs implementing a custom way to access the registers. Signed-off-by: Carlo Caione <ccaione@baylibre.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
		
				
					committed by
					
						 Joe Hershberger
						Joe Hershberger
					
				
			
			
				
	
			
			
			
						parent
						
							4c29dc1863
						
					
				
				
					commit
					e55047ec51
				
			
							
								
								
									
										27
									
								
								cmd/mdio.c
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								cmd/mdio.c
									
									
									
									
									
								
							| @@ -39,21 +39,24 @@ static int extract_range(char *input, int *plo, int *phi) | ||||
| 	return 0; | ||||
| } | ||||
|  | ||||
| static int mdio_write_ranges(struct phy_device *phydev, struct mii_dev *bus, | ||||
| static int mdio_write_ranges(struct mii_dev *bus, | ||||
| 			     int addrlo, | ||||
| 			     int addrhi, int devadlo, int devadhi, | ||||
| 			     int reglo, int reghi, unsigned short data, | ||||
| 			     int extended) | ||||
| { | ||||
| 	struct phy_device *phydev; | ||||
| 	int addr, devad, reg; | ||||
| 	int err = 0; | ||||
|  | ||||
| 	for (addr = addrlo; addr <= addrhi; addr++) { | ||||
| 		phydev = bus->phymap[addr]; | ||||
|  | ||||
| 		for (devad = devadlo; devad <= devadhi; devad++) { | ||||
| 			for (reg = reglo; reg <= reghi; reg++) { | ||||
| 				if (!extended) | ||||
| 					err = bus->write(bus, addr, devad, | ||||
| 							 reg, data); | ||||
| 					err = phy_write_mmd(phydev, devad, | ||||
| 							    reg, data); | ||||
| 				else | ||||
| 					err = phydev->drv->writeext(phydev, | ||||
| 							addr, devad, reg, data); | ||||
| @@ -68,15 +71,17 @@ err_out: | ||||
| 	return err; | ||||
| } | ||||
|  | ||||
| static int mdio_read_ranges(struct phy_device *phydev, struct mii_dev *bus, | ||||
| static int mdio_read_ranges(struct mii_dev *bus, | ||||
| 			    int addrlo, | ||||
| 			    int addrhi, int devadlo, int devadhi, | ||||
| 			    int reglo, int reghi, int extended) | ||||
| { | ||||
| 	int addr, devad, reg; | ||||
| 	struct phy_device *phydev; | ||||
|  | ||||
| 	printf("Reading from bus %s\n", bus->name); | ||||
| 	for (addr = addrlo; addr <= addrhi; addr++) { | ||||
| 		phydev = bus->phymap[addr]; | ||||
| 		printf("PHY at address %x:\n", addr); | ||||
|  | ||||
| 		for (devad = devadlo; devad <= devadhi; devad++) { | ||||
| @@ -84,7 +89,7 @@ static int mdio_read_ranges(struct phy_device *phydev, struct mii_dev *bus, | ||||
| 				int val; | ||||
|  | ||||
| 				if (!extended) | ||||
| 					val = bus->read(bus, addr, devad, reg); | ||||
| 					val = phy_read_mmd(phydev, devad, reg); | ||||
| 				else | ||||
| 					val = phydev->drv->readext(phydev, addr, | ||||
| 						devad, reg); | ||||
| @@ -222,14 +227,14 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | ||||
| 				bus = phydev->bus; | ||||
| 				extended = 1; | ||||
| 			} else { | ||||
| 				return -1; | ||||
| 				return CMD_RET_FAILURE; | ||||
| 			} | ||||
|  | ||||
| 			if (!phydev->drv || | ||||
| 			    (!phydev->drv->writeext && (op[0] == 'w')) || | ||||
| 			    (!phydev->drv->readext && (op[0] == 'r'))) { | ||||
| 				puts("PHY does not have extended functions\n"); | ||||
| 				return -1; | ||||
| 				return CMD_RET_FAILURE; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| @@ -242,13 +247,13 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | ||||
| 		if (pos > 1) | ||||
| 			if (extract_reg_range(argv[pos--], &devadlo, &devadhi, | ||||
| 					      ®lo, ®hi)) | ||||
| 				return -1; | ||||
| 				return CMD_RET_FAILURE; | ||||
|  | ||||
| 	default: | ||||
| 		if (pos > 1) | ||||
| 			if (extract_phy_range(&argv[2], pos - 1, &bus, | ||||
| 					      &phydev, &addrlo, &addrhi)) | ||||
| 				return -1; | ||||
| 				return CMD_RET_FAILURE; | ||||
|  | ||||
| 		break; | ||||
| 	} | ||||
| @@ -264,12 +269,12 @@ static int do_mdio(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | ||||
|  | ||||
| 	switch (op[0]) { | ||||
| 	case 'w': | ||||
| 		mdio_write_ranges(phydev, bus, addrlo, addrhi, devadlo, devadhi, | ||||
| 		mdio_write_ranges(bus, addrlo, addrhi, devadlo, devadhi, | ||||
| 				  reglo, reghi, data, extended); | ||||
| 		break; | ||||
|  | ||||
| 	case 'r': | ||||
| 		mdio_read_ranges(phydev, bus, addrlo, addrhi, devadlo, devadhi, | ||||
| 		mdio_read_ranges(bus, addrlo, addrhi, devadlo, devadhi, | ||||
| 				 reglo, reghi, extended); | ||||
| 		break; | ||||
| 	} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user