From f9fa94c83c48797a66d5c6a615f592a762bd5f39 Mon Sep 17 00:00:00 2001 From: Lennert Buytenhek Date: Wed, 23 Nov 2005 12:49:55 +0100 Subject: [PATCH] --- yaml --- r: 15773 b: refs/heads/master c: c6e429bdd6f0142558896e29c21a526c1ffdd1f3 h: refs/heads/master i: 15771: c9f6784d41a2f8a640889e303b812ec288b352ed v: v3 --- [refs] | 2 +- trunk/drivers/net/ixp2000/pm3386.c | 32 +++++++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 76e3b7d32f54..14a38d4375f1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: df86550602f320d28fdaeb577c25f9821525bfa0 +refs/heads/master: c6e429bdd6f0142558896e29c21a526c1ffdd1f3 diff --git a/trunk/drivers/net/ixp2000/pm3386.c b/trunk/drivers/net/ixp2000/pm3386.c index ec70b1d553e3..5c7ab7564053 100644 --- a/trunk/drivers/net/ixp2000/pm3386.c +++ b/trunk/drivers/net/ixp2000/pm3386.c @@ -89,7 +89,37 @@ static void pm3386_port_reg_write(int port, int _reg, int spacing, u16 value) void pm3386_reset(void) { - /* @@@ Implement me. */ + u8 mac[3][6]; + + /* Save programmed MAC addresses. */ + pm3386_get_mac(0, mac[0]); + pm3386_get_mac(1, mac[1]); + pm3386_get_mac(2, mac[2]); + + /* Assert analog and digital reset. */ + pm3386_reg_write(0, 0x002, 0x0060); + pm3386_reg_write(1, 0x002, 0x0060); + mdelay(1); + + /* Deassert analog reset. */ + pm3386_reg_write(0, 0x002, 0x0062); + pm3386_reg_write(1, 0x002, 0x0062); + mdelay(10); + + /* Deassert digital reset. */ + pm3386_reg_write(0, 0x002, 0x0063); + pm3386_reg_write(1, 0x002, 0x0063); + mdelay(10); + + /* Restore programmed MAC addresses. */ + pm3386_set_mac(0, mac[0]); + pm3386_set_mac(1, mac[1]); + pm3386_set_mac(2, mac[2]); + + /* Disable carrier on all ports. */ + pm3386_set_carrier(0, 0); + pm3386_set_carrier(1, 0); + pm3386_set_carrier(2, 0); } static u16 swaph(u16 x)