diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-11-02 13:15:52 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-11-02 13:15:52 -0500 |
| commit | 391e572cd1a63aee9c8d4c2d5e3dada91d86bc43 (patch) | |
| tree | b89d924e644a7e66cd2b63d978607c6d0d3e7285 /arch | |
| parent | 4ac96572f1f6abe44b5e02e80fdfb5a990129613 (diff) | |
| parent | 48dcc33e5e11de0f76b65b113988dbc930d17395 (diff) | |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (33 commits)
af_unix: netns: fix problem of return value
IRDA: remove double inclusion of module.h
udp: multicast packets need to check namespace
net: add documentation for skb recycling
key: fix setkey(8) policy set breakage
bpa10x: free sk_buff with kfree_skb
xfrm: do not leak ESRCH to user space
net: Really remove all of LOOPBACK_TSO code.
netfilter: nf_conntrack_proto_gre: switch to register_pernet_gen_subsys()
netns: add register_pernet_gen_subsys/unregister_pernet_gen_subsys
net: delete excess kernel-doc notation
pppoe: Fix socket leak.
gianfar: Don't reset TBI<->SerDes link if it's already up
gianfar: Fix race in TBI/SerDes configuration
at91_ether: request/free GPIO for PHY interrupt
amd8111e: fix dma_free_coherent context
atl1: fix vlan tag regression
SMC91x: delete unused local variable "lp"
myri10ge: fix stop/go mmio ordering
bonding: fix panic when taking bond interface down before removing module
...
Diffstat (limited to 'arch')
| -rw-r--r-- | arch/powerpc/sysdev/fsl_soc.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index 01b884b25696..26ecb96f9731 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c | |||
| @@ -223,6 +223,8 @@ static int gfar_mdio_of_init_one(struct device_node *np) | |||
| 223 | if (ret) | 223 | if (ret) |
| 224 | return ret; | 224 | return ret; |
| 225 | 225 | ||
| 226 | /* The gianfar device will try to use the same ID created below to find | ||
| 227 | * this bus, to coordinate register access (since they share). */ | ||
| 226 | mdio_dev = platform_device_register_simple("fsl-gianfar_mdio", | 228 | mdio_dev = platform_device_register_simple("fsl-gianfar_mdio", |
| 227 | res.start&0xfffff, &res, 1); | 229 | res.start&0xfffff, &res, 1); |
| 228 | if (IS_ERR(mdio_dev)) | 230 | if (IS_ERR(mdio_dev)) |
| @@ -394,6 +396,30 @@ static int __init gfar_of_init(void) | |||
| 394 | of_node_put(mdio); | 396 | of_node_put(mdio); |
| 395 | } | 397 | } |
| 396 | 398 | ||
| 399 | /* Get MDIO bus controlled by this eTSEC, if any. Normally only | ||
| 400 | * eTSEC 1 will control an MDIO bus, not necessarily the same | ||
| 401 | * bus that its PHY is on ('mdio' above), so we can't just use | ||
| 402 | * that. What we do is look for a gianfar mdio device that has | ||
| 403 | * overlapping registers with this device. That's really the | ||
| 404 | * whole point, to find the device sharing our registers to | ||
| 405 | * coordinate access with it. | ||
| 406 | */ | ||
| 407 | for_each_compatible_node(mdio, NULL, "fsl,gianfar-mdio") { | ||
| 408 | if (of_address_to_resource(mdio, 0, &res)) | ||
| 409 | continue; | ||
| 410 | |||
| 411 | if (res.start >= r[0].start && res.end <= r[0].end) { | ||
| 412 | /* Get the ID the mdio bus platform device was | ||
| 413 | * registered with. gfar_data.bus_id is | ||
| 414 | * different because it's for finding a PHY, | ||
| 415 | * while this is for finding a MII bus. | ||
| 416 | */ | ||
| 417 | gfar_data.mdio_bus = res.start&0xfffff; | ||
| 418 | of_node_put(mdio); | ||
| 419 | break; | ||
| 420 | } | ||
| 421 | } | ||
| 422 | |||
| 397 | ret = | 423 | ret = |
| 398 | platform_device_add_data(gfar_dev, &gfar_data, | 424 | platform_device_add_data(gfar_dev, &gfar_data, |
| 399 | sizeof(struct | 425 | sizeof(struct |
