Skip to content

Commit

Permalink
ARM: kirkwood: fix to retain gbe MAC addresses for DT kernels
Browse files Browse the repository at this point in the history
The ethernet controller used on kirkwood looses its MAC address
register contents when the corresponding clock is gated. As soon as
mv643xx_eth is built as module, the clock gets gated and when loading
the module, the MAC address is gone.

Proper DT support for the mv643xx_eth driver is expected soon, so we add
a workaround to always enable ge0/ge1 clocks on kirkwood. This workaround
is also already used on non-DT kirkwood kernels.

Reported-by: Simon Baatz <[email protected]>
Signed-off-by: Sebastian Hesselbarth <[email protected]>
Tested-by: Simon Baatz <[email protected]>
Cc: <[email protected]>
Signed-off-by: Jason Cooper <[email protected]>
  • Loading branch information
shesselba authored and Jason Cooper committed Mar 8, 2013
1 parent 93fff4c commit 7bf5b40
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions arch/arm/mach-kirkwood/board-dt.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,16 +41,12 @@ static void __init kirkwood_legacy_clk_init(void)

struct device_node *np = of_find_compatible_node(
NULL, NULL, "marvell,kirkwood-gating-clock");

struct of_phandle_args clkspec;
struct clk *clk;

clkspec.np = np;
clkspec.args_count = 1;

clkspec.args[0] = CGC_BIT_GE0;
orion_clkdev_add(NULL, "mv643xx_eth_port.0",
of_clk_get_from_provider(&clkspec));

clkspec.args[0] = CGC_BIT_PEX0;
orion_clkdev_add("0", "pcie",
of_clk_get_from_provider(&clkspec));
Expand All @@ -59,9 +55,24 @@ static void __init kirkwood_legacy_clk_init(void)
orion_clkdev_add("1", "pcie",
of_clk_get_from_provider(&clkspec));

clkspec.args[0] = CGC_BIT_GE1;
orion_clkdev_add(NULL, "mv643xx_eth_port.1",
clkspec.args[0] = CGC_BIT_SDIO;
orion_clkdev_add(NULL, "mvsdio",
of_clk_get_from_provider(&clkspec));

/*
* The ethernet interfaces forget the MAC address assigned by
* u-boot if the clocks are turned off. Until proper DT support
* is available we always enable them for now.
*/
clkspec.args[0] = CGC_BIT_GE0;
clk = of_clk_get_from_provider(&clkspec);
orion_clkdev_add(NULL, "mv643xx_eth_port.0", clk);
clk_prepare_enable(clk);

clkspec.args[0] = CGC_BIT_GE1;
clk = of_clk_get_from_provider(&clkspec);
orion_clkdev_add(NULL, "mv643xx_eth_port.1", clk);
clk_prepare_enable(clk);
}

static void __init kirkwood_of_clk_init(void)
Expand Down

0 comments on commit 7bf5b40

Please sign in to comment.