Skip to content

Commit

Permalink
fsl_pq_mdio: Use proper address translation
Browse files Browse the repository at this point in the history
Currently the driver just read "reg" property for constructing MDIO
bus IDs, but this won't work when we'll start using "ranges = <>" in
the device tree, so this will pop up:

Freescale PowerQUICC MII Bus: probed
sysfs: duplicate filename 'mdio@520' can not be created
------------[ cut here ]------------
Badness at c00cb6b8 [verbose debug info unavailable]
NIP: c00cb6b8 LR: c00cb6b8 CTR: c001271c
REGS: cf82fc10 TRAP: 0700   Not tainted  (2.6.29-rc7-03702-g7ccd10f)
MSR: 00029032 <EE,ME,CE,IR,DR>  CR: 42044022  XER: 20000000
TASK = cf81fbd0[1] 'swapper' THREAD: cf82e000
GPR00: c00cb6b8 cf82fcc0 cf81fbd0 0000003b 00000e42 ffffffff 00004000 00000e42
GPR08: c03cb0fc c03bfbdc 00000e42 c03cac50 22044022 1006a2bc 0ffcb000 00000000
GPR16: 0ffc04b0 0ffc5a40 00000000 0ffc79a8 0f7863a8 00000004 00000000 00000000
GPR24: c033a6a8 d1014520 cf85e840 cf82fd08 cf87cf2c cf82fcd8 cf85dea8 ffffffef
NIP [c00cb6b8] sysfs_add_one+0x4c/0x54
LR [c00cb6b8] sysfs_add_one+0x4c/0x54
Call Trace:
[cf82fcc0] [c00cb6b8] sysfs_add_one+0x4c/0x54 (unreliable)
[cf82fcd0] [c00cbc18] create_dir+0x58/0xc0
[cf82fd00] [c00cbcc0] sysfs_create_dir+0x40/0x70
[cf82fd20] [c0159388] create_dir+0x28/0x78
[cf82fd30] [c0159824] kobject_add_internal+0x98/0x13c
[cf82fd50] [c0159e98] kobject_add+0x60/0x98
[cf82fd80] [c018a480] device_add+0x98/0x2ac
[cf82fda0] [c01a2380] mdiobus_register+0xbc/0x1c0
[cf82fdc0] [c019f31c] fsl_pq_mdio_probe+0x284/0x2a0
[cf82fe00] [c0223814] of_platform_device_probe+0x5c/0x84
...

This patch fixes the issue by translating the "reg" property to a full
address, and thus avoids the duplicate names.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Acked-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Anton Vorontsov authored and David S. Miller committed Mar 23, 2009
1 parent 3e303dc commit 18f2738
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions drivers/net/fsl_pq_mdio.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,11 +194,15 @@ static int *create_irq_map(struct device_node *np)

void fsl_pq_mdio_bus_name(char *name, struct device_node *np)
{
const u32 *reg;
const u32 *addr;
u64 taddr = OF_BAD_ADDR;

reg = of_get_property(np, "reg", NULL);
addr = of_get_address(np, 0, NULL, NULL);
if (addr)
taddr = of_translate_address(np, addr);

snprintf(name, MII_BUS_ID_SIZE, "%s@%x", np->name, reg ? *reg : 0);
snprintf(name, MII_BUS_ID_SIZE, "%s@%llx", np->name,
(unsigned long long)taddr);
}

/* Scan the bus in reverse, looking for an empty spot */
Expand Down

0 comments on commit 18f2738

Please sign in to comment.