diff --git a/userspace/tools/wrs_port_tx_control.c b/userspace/tools/wrs_port_tx_control.c index 4dc0b820eec32172a9f577b9b058183dfd7df465..aa4cb2c0ba0ae317b591f3b88843addcf2c3be74 100644 --- a/userspace/tools/wrs_port_tx_control.c +++ b/userspace/tools/wrs_port_tx_control.c @@ -15,8 +15,9 @@ static struct EP_WB _ep_wb; /* convert WR switch endpoint register name to an address value */ #define EP_REG(regname) ((uint32_t)((void *)&_ep_wb.regname - (void *)&_ep_wb)) -/* convert port number (x) to an endpoint address, x from 0 to 17 on switch */ -#define IDX_TO_EP(x) (0x30000 + ((x) * 0x400)) +/* convert port number (x) to an endpoint address, x is 1..18 on switch, + * ep is 0..17 */ +#define IDX_TO_EP(x) (0x30000 + (((x) - 1) * 0x400)) /* FIXME: if include of endpoint-mdio.h is fixed this define can go: * #ifndef __WBGEN2_REGDEFS_ENDPOINT-MDIO_WB to @@ -39,7 +40,7 @@ void help(char *prgname) " -h print help\n" "\n" " Port numbers:\n" - " <port_nr> = 0 to 17 (on 18 port switch)\n" + " <port_nr> = 1 to 18 (on 18 port switch)\n" "\n" " Commands <cmd> are:\n" " on - switch TX laser on.\n" @@ -49,38 +50,40 @@ void help(char *prgname) /* * Read a 1000base-X TBI PCS register on a WR switch endpoint - * ep: endpoint number (0 to 17, will be translated to address offset) + * port: endpoint number (1 to 18, will be translated to address offset) * reg: WR endpoint 1000base-X TBI PCS register address to read from */ -uint32_t pcs_read(int ep, uint32_t reg) +uint32_t pcs_read(int port, uint32_t reg) { /* * write the PCS register address to read from to the MDIO control * register on the WR switch endpoint. */ - _fpga_writel(IDX_TO_EP(ep) + EP_REG(MDIO_CR), EP_MDIO_CR_ADDR_W(reg)); + _fpga_writel(IDX_TO_EP(port) + EP_REG(MDIO_CR), + EP_MDIO_CR_ADDR_W(reg)); /* * wait until the control register has processed the address and copied * the data from the address into the control register */ - while (!(_fpga_readl(IDX_TO_EP(ep) + EP_REG(MDIO_ASR)) & + while (!(_fpga_readl(IDX_TO_EP(port) + EP_REG(MDIO_ASR)) & EP_MDIO_ASR_READY)) ; /* read data copied into the control register */ - return EP_MDIO_CR_DATA_R(_fpga_readl(IDX_TO_EP(ep) + EP_REG(MDIO_ASR))); + return EP_MDIO_CR_DATA_R(_fpga_readl(IDX_TO_EP(port) + + EP_REG(MDIO_ASR))); } /* * Write a value to a 1000base-X TBI PCS register on a WR switch endpoint - * ep: endpoint number (0 to 17, will be translated to address offset) + * port: endpoint number (1 to 18, will be translated to address offset) * reg: WR endpoint 1000base-X TBI PCS register address to write to * value: PCS register value to write */ -void pcs_write(int ep, uint32_t reg, uint32_t val) +void pcs_write(int port, uint32_t reg, uint32_t val) { - _fpga_writel(IDX_TO_EP(ep) + EP_REG(MDIO_CR), EP_MDIO_CR_ADDR_W(reg) + _fpga_writel(IDX_TO_EP(port) + EP_REG(MDIO_CR), EP_MDIO_CR_ADDR_W(reg) | EP_MDIO_CR_DATA_W(val) | EP_MDIO_CR_RW); - while (!(_fpga_readl(IDX_TO_EP(ep) + EP_REG(MDIO_ASR)) & + while (!(_fpga_readl(IDX_TO_EP(port) + EP_REG(MDIO_ASR)) & EP_MDIO_ASR_READY)) ; } @@ -166,7 +169,7 @@ int main(int argc, char *argv[]) if (argc > 2) { port_number = atoi(argv[1]); - if (port_number < 0 || port_number > get_nports_from_hal()-1) { + if (port_number < 1 || port_number > get_nports_from_hal()) { printf("Port number out of range\n"); exit(1); }