| #include <common.h> |
| #include <command.h> |
| #include <errno.h> |
| #include <miidev.h> |
| #include "../drivers/net/comcerto/ar8328.h" |
| |
| #define PHY_DEVICE "phy0" |
| |
| static int do_phy(struct command *cmdtp, int argc, char *argv[]) |
| { |
| uint16_t val; |
| int phyaddr; |
| int phyreg; |
| int phydata; |
| struct device_d *dev; |
| struct mii_device *mdev; |
| struct cdev *cdev; |
| cdev = cdev_by_name(PHY_DEVICE); |
| mdev = cdev->priv; |
| |
| if(argc < 2) |
| return COMMAND_ERROR_USAGE; |
| |
| if(!strcmp(argv[1],"stat")) |
| { |
| athrs17_phy_stat(mdev); |
| |
| } |
| else if(!strcmp(argv[1],"init")) |
| { |
| phyaddr = simple_strtoul(argv[2], NULL, 0); |
| athrs17_phy_setup(mdev, phyaddr); |
| } |
| else if(!strcmp(argv[1],"read")) |
| { |
| if(argc != 4) |
| return COMMAND_ERROR_USAGE; |
| |
| phyaddr = simple_strtoul(argv[2], NULL, 0); |
| phyreg = simple_strtoul(argv[3], NULL, 0); |
| |
| val = mdev->read(mdev, phyaddr, phyreg); |
| printf("PHY %d , Addr 0x%x, Val 0x%x\n", phyaddr, phyreg, val); |
| |
| }else if(!strcmp(argv[1],"write")) |
| { |
| if(argc != 5) |
| return COMMAND_ERROR_USAGE; |
| |
| phyaddr = simple_strtoul(argv[2], NULL, 0); |
| phyreg = simple_strtoul(argv[3], NULL, 0); |
| phydata = simple_strtoul(argv[4], NULL, 0); |
| |
| mdev->write(mdev, phyaddr, phyreg, phydata); |
| } |
| |
| return 0; |
| } |
| |
| static const __maybe_unused char cmd_phy_help[] = |
| "Usage:\n" |
| "\n" |
| " phy stat show all the phy status\n" |
| " phy init phyno init the PHYs. For WAN, the PHY no is 4\n" |
| " for LAN, the PHY no to be 0 to set PHY0-3\n" |
| " phy read phyno reg read the PHY register\n" |
| " phy write phyno reg data write the PHY register\n" |
| ; |
| |
| |
| BAREBOX_CMD_START(phy) |
| .cmd = do_phy, |
| .usage = "PHY status, read and write operation", |
| BAREBOX_CMD_HELP(cmd_phy_help) |
| BAREBOX_CMD_END |
| |
| static int do_switch(struct command *cmdtp, int argc, char *argv[]) |
| { |
| unsigned int val; |
| int reg; |
| unsigned int data; |
| struct device_d *dev; |
| struct mii_device *mdev; |
| struct cdev *cdev; |
| cdev = cdev_by_name(PHY_DEVICE); |
| mdev = cdev->priv; |
| |
| if(argc < 2) |
| return COMMAND_ERROR_USAGE; |
| |
| |
| |
| if(!strcmp(argv[1],"init")) |
| { |
| athrs17_init(mdev); |
| } |
| else if(!strcmp(argv[1],"read")) |
| { |
| |
| reg = simple_strtoul(argv[2], NULL, 0); |
| val = athrs17_reg_read(mdev, reg); |
| |
| printf("Addr 0x%x Val 0x%08x\n", reg, val); |
| } |
| else if(!strcmp(argv[1],"write")) |
| { |
| if(argc != 4) |
| return COMMAND_ERROR_USAGE; |
| |
| reg = simple_strtoul(argv[2], NULL, 0); |
| data = simple_strtoul(argv[3], NULL, 0); |
| athrs17_reg_write(mdev, reg, data); |
| } |
| else |
| return COMMAND_ERROR_USAGE; |
| |
| return 0; |
| } |
| |
| static const __maybe_unused char cmd_switch_help[] = |
| "Usage:\n" |
| "\n" |
| " switch init initialize the AR8328 switch\n" |
| " switch read reg read the switch register\n" |
| " switch write reg data write the switch register\n" |
| ; |
| |
| |
| BAREBOX_CMD_START(switch) |
| .cmd = do_switch, |
| .usage = "Atheros AR8328 switch read and write operation", |
| BAREBOX_CMD_HELP(cmd_switch_help) |
| BAREBOX_CMD_END |
| |