[U-Boot] [PATCH 2/5] smc911x: use dev->name in printfs
Mike Rapoport
mike.rapoport at gmail.com
Thu Nov 12 10:13:48 CET 2009
Hi Mike,
On Thu, Nov 12, 2009 at 12:50 AM, Mike Frysinger <vapier at gentoo.org> wrote:
>
> here's my [compile] tested change as the board i have with this part isnt
> readily accessible atm ...
> -mike
I've tested your changes, MAC register dumps works Ok. I needed to
make some changes to make it work, see the comments below.
> diff --git a/examples/standalone/smc911x_eeprom.c
> b/examples/standalone/smc911x_eeprom.c
> index bf22f0a..f2a6304 100644
> --- a/examples/standalone/smc911x_eeprom.c
> +++ b/examples/standalone/smc911x_eeprom.c
> @@ -17,8 +17,8 @@
> #include <common.h>
> #include <exports.h>
>
> -#ifdef CONFIG_DRIVER_SMC911X
> -
> +/* the smc911x.h gets base addr through eth_device' iobase */
> +struct eth_device { const char *name; unsigned long iobase; };
Needed to add 'void *priv' needed for smc911x_detect_chip, otherwise
it does not compile with the latest U-Boot.
> #include "../drivers/net/smc911x.h"
>
> /**
> @@ -55,32 +55,32 @@ static void usage(void)
> * Registers 0x00 - 0x50 are FIFOs. The 0x50+ are the control registers
> * and they're all 32bits long. 0xB8+ are reserved, so don't bother.
> */
> -static void dump_regs(void)
> +static void dump_regs(struct eth_device *dev)
> {
> u8 i, j = 0;
> for (i = 0x50; i < 0xB8; i += sizeof(u32))
> printf("%02x: 0x%08x %c", i,
> - smc911x_reg_read(CONFIG_DRIVER_SMC911X_BASE + i),
> + smc911x_reg_read(dev, i),
> (j++ % 2 ? '\n' : ' '));
> }
>
> /**
> * do_eeprom_cmd - handle eeprom communication
> */
> -static int do_eeprom_cmd(int cmd, u8 reg)
> +static int do_eeprom_cmd(struct eth_device *dev, int cmd, u8 reg)
> {
> - if (smc911x_reg_read(E2P_CMD) & E2P_CMD_EPC_BUSY) {
> + if (smc911x_reg_read(dev, E2P_CMD) & E2P_CMD_EPC_BUSY) {
> printf("eeprom_cmd: busy at start (E2P_CMD = 0x%08x)\n",
> - smc911x_reg_read(E2P_CMD));
> + smc911x_reg_read(dev, E2P_CMD));
> return -1;
> }
>
> - smc911x_reg_write(E2P_CMD, E2P_CMD_EPC_BUSY | cmd | reg);
> + smc911x_reg_write(dev, E2P_CMD, E2P_CMD_EPC_BUSY | cmd | reg);
>
> - while (smc911x_reg_read(E2P_CMD) & E2P_CMD_EPC_BUSY)
> + while (smc911x_reg_read(dev, E2P_CMD) & E2P_CMD_EPC_BUSY)
> if (smsc_ctrlc()) {
> printf("eeprom_cmd: timeout (E2P_CMD = 0x%08x)\n",
> - smc911x_reg_read(E2P_CMD));
> + smc911x_reg_read(dev, E2P_CMD));
> return -1;
> }
>
> @@ -90,37 +90,37 @@ static int do_eeprom_cmd(int cmd, u8 reg)
> /**
> * read_eeprom_reg - read specified register in EEPROM
> */
> -static u8 read_eeprom_reg(u8 reg)
> +static u8 read_eeprom_reg(struct eth_device *dev, u8 reg)
> {
> - int ret = do_eeprom_cmd(E2P_CMD_EPC_CMD_READ, reg);
> - return (ret ? : smc911x_reg_read(E2P_DATA));
> + int ret = do_eeprom_cmd(dev, E2P_CMD_EPC_CMD_READ, reg);
> + return (ret ? : smc911x_reg_read(dev, E2P_DATA));
> }
>
> /**
> * write_eeprom_reg - write specified value into specified register in EEPROM
> */
> -static int write_eeprom_reg(u8 value, u8 reg)
> +static int write_eeprom_reg(struct eth_device *dev, u8 value, u8 reg)
> {
> int ret;
>
> /* enable erasing/writing */
> - ret = do_eeprom_cmd(E2P_CMD_EPC_CMD_EWEN, reg);
> + ret = do_eeprom_cmd(dev, E2P_CMD_EPC_CMD_EWEN, reg);
> if (ret)
> goto done;
>
> /* erase the eeprom reg */
> - ret = do_eeprom_cmd(E2P_CMD_EPC_CMD_ERASE, reg);
> + ret = do_eeprom_cmd(dev, E2P_CMD_EPC_CMD_ERASE, reg);
> if (ret)
> goto done;
>
> /* write the eeprom reg */
> - smc911x_reg_write(E2P_DATA, value);
> - ret = do_eeprom_cmd(E2P_CMD_EPC_CMD_WRITE, reg);
> + smc911x_reg_write(dev, E2P_DATA, value);
> + ret = do_eeprom_cmd(dev, E2P_CMD_EPC_CMD_WRITE, reg);
> if (ret)
> goto done;
>
> /* disable erasing/writing */
> - ret = do_eeprom_cmd(E2P_CMD_EPC_CMD_EWDS, reg);
> + ret = do_eeprom_cmd(dev, E2P_CMD_EPC_CMD_EWDS, reg);
>
> done:
> return ret;
> @@ -139,7 +139,7 @@ static char *skip_space(char *buf)
> /**
> * write_stuff - handle writing of MAC registers / eeprom
> */
> -static void write_stuff(char *line)
> +static void write_stuff(struct eth_device *dev, char *line)
> {
> char dest;
> char *endp;
> @@ -182,39 +182,39 @@ static void write_stuff(char *line)
> /* Finally, execute the command */
> if (dest == 'E') {
> printf("Writing EEPROM register %02x with %02x\n", reg, value);
> - write_eeprom_reg(value, reg);
> + write_eeprom_reg(dev, value, reg);
> } else {
> printf("Writing MAC register %02x with %08x\n", reg, value);
> - smc911x_reg_write(CONFIG_DRIVER_SMC911X_BASE + reg, value);
> + smc911x_reg_write(dev, reg, value);
> }
> }
>
> /**
> * copy_from_eeprom - copy MAC address in eeprom to address registers
> */
> -static void copy_from_eeprom(void)
> +static void copy_from_eeprom(struct eth_device *dev)
> {
> ulong addrl =
> - read_eeprom_reg(0x01) |
> - read_eeprom_reg(0x02) << 8 |
> - read_eeprom_reg(0x03) << 16 |
> - read_eeprom_reg(0x04) << 24;
> + read_eeprom_reg(dev, 0x01) |
> + read_eeprom_reg(dev, 0x02) << 8 |
> + read_eeprom_reg(dev, 0x03) << 16 |
> + read_eeprom_reg(dev, 0x04) << 24;
> ulong addrh =
> - read_eeprom_reg(0x05) |
> - read_eeprom_reg(0x06) << 8;
> - smc911x_set_mac_csr(ADDRL, addrl);
> - smc911x_set_mac_csr(ADDRH, addrh);
> + read_eeprom_reg(dev, 0x05) |
> + read_eeprom_reg(dev, 0x06) << 8;
> + smc911x_set_mac_csr(dev, ADDRL, addrl);
> + smc911x_set_mac_csr(dev, ADDRH, addrh);
> puts("EEPROM contents copied to MAC\n");
> }
>
> /**
> * print_macaddr - print MAC address registers and MAC address in eeprom
> */
> -static void print_macaddr(void)
> +static void print_macaddr(struct eth_device *dev)
> {
> puts("Current MAC Address in MAC: ");
> - ulong addrl = smc911x_get_mac_csr(ADDRL);
> - ulong addrh = smc911x_get_mac_csr(ADDRH);
> + ulong addrl = smc911x_get_mac_csr(dev, ADDRL);
> + ulong addrh = smc911x_get_mac_csr(dev, ADDRH);
> printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
> (u8)(addrl), (u8)(addrl >> 8), (u8)(addrl >> 16),
> (u8)(addrl >> 24), (u8)(addrh), (u8)(addrh >> 8));
> @@ -222,41 +222,42 @@ static void print_macaddr(void)
> puts("Current MAC Address in EEPROM: ");
> int i;
> for (i = 1; i < 6; ++i)
> - printf("%02x:", read_eeprom_reg(i));
> - printf("%02x\n", read_eeprom_reg(i));
> + printf("%02x:", read_eeprom_reg(dev, i));
> + printf("%02x\n", read_eeprom_reg(dev, i));
> }
>
> /**
> * dump_eeprom - dump the whole content of the EEPROM
> */
> -static void dump_eeprom(void)
> +static void dump_eeprom(struct eth_device *dev)
> {
> int i;
> puts("EEPROM:\n");
> for (i = 0; i < 7; ++i)
> - printf("%02x: 0x%02x\n", i, read_eeprom_reg(i));
> + printf("%02x: 0x%02x\n", i, read_eeprom_reg(dev, i));
> }
>
> /**
> * smc911x_init - get the MAC/EEPROM up and ready for use
> */
> -static int smc911x_init(void)
> +static int smc911x_init(struct eth_device *dev)
> {
> /* See if there is anything there */
> - if (!smc911x_detect_chip())
> + if (!smc911x_detect_chip(dev))
Should be if (smc911x_detect_chip(dev)) since smc911x_detect_chip
returns 0 on success.
> return 1;
>
> - smc911x_reset();
> + smc911x_reset(dev);
>
> /* Make sure we set EEDIO/EECLK to the EEPROM */
> - if (smc911x_reg_read(GPIO_CFG) & GPIO_CFG_EEPR_EN) {
> - while (smc911x_reg_read(E2P_CMD) & E2P_CMD_EPC_BUSY)
> + if (smc911x_reg_read(dev, GPIO_CFG) & GPIO_CFG_EEPR_EN) {
> + while (smc911x_reg_read(dev, E2P_CMD) & E2P_CMD_EPC_BUSY)
> if (smsc_ctrlc()) {
> printf("init: timeout (E2P_CMD = 0x%08x)\n",
> - smc911x_reg_read(E2P_CMD));
> + smc911x_reg_read(dev, E2P_CMD));
> return 1;
> }
> - smc911x_reg_write(GPIO_CFG, smc911x_reg_read(GPIO_CFG) &
> ~GPIO_CFG_EEPR_EN);
> + smc911x_reg_write(dev, GPIO_CFG,
> + smc911x_reg_read(dev, GPIO_CFG) & ~GPIO_CFG_EEPR_EN);
> }
>
> return 0;
> @@ -317,6 +318,11 @@ static char *getline(void)
> */
> int smc911x_eeprom(int argc, char *argv[])
> {
> + struct eth_device dev = {
> + .name = __func__,
> + .iobase = CONFIG_SMC911X_BASE,
> + };
> +
This requires memset on arches that use C version (e.g. ARM). For my
testing I've just copied the memset from lib_generic/string.c, but
obviously it's not the correct solution.
> /* Print the ABI version */
> app_startup(argv);
> if (XF_VERSION != get_version()) {
> @@ -328,7 +334,7 @@ int smc911x_eeprom(int argc, char *argv[])
>
> /* Initialize the MAC/EEPROM somewhat */
> puts("\n");
> - if (smc911x_init())
> + if (smc911x_init(&dev))
> return 1;
>
> /* Dump helpful usage information */
> @@ -360,11 +366,11 @@ int smc911x_eeprom(int argc, char *argv[])
>
> /* Now parse the command */
> switch (line[0]) {
> - case 'W': write_stuff(line); break;
> - case 'D': dump_eeprom(); break;
> - case 'M': dump_regs(); break;
> - case 'C': copy_from_eeprom(); break;
> - case 'P': print_macaddr(); break;
> + case 'W': write_stuff(&dev, line); break;
> + case 'D': dump_eeprom(&dev); break;
> + case 'M': dump_regs(&dev); break;
> + case 'C': copy_from_eeprom(&dev); break;
> + case 'P': print_macaddr(&dev); break;
> unknown_cmd:
> default: puts("ERROR: Unknown command!\n\n");
> case '?':
> @@ -373,11 +379,3 @@ int smc911x_eeprom(int argc, char *argv[])
> }
> }
> }
> -
> -#else
> -int smc911x_eeprom(int argc, char *argv[])
> -{
> - puts("Not supported for this board\n");
> - return 1;
> -}
> -#endif
>
--
Sincerely Yours,
Mike.
More information about the U-Boot
mailing list