From patchwork Tue Apr 5 13:03:56 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Korsgaard X-Patchwork-Id: 89849 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 14044B6F99 for ; Tue, 5 Apr 2011 23:04:11 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752518Ab1DENEG (ORCPT ); Tue, 5 Apr 2011 09:04:06 -0400 Received: from mail-wy0-f174.google.com ([74.125.82.174]:46814 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751954Ab1DENED (ORCPT ); Tue, 5 Apr 2011 09:04:03 -0400 Received: by wya21 with SMTP id 21so301138wya.19 for ; Tue, 05 Apr 2011 06:04:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:sender:from:to:cc:subject:date:message-id :x-mailer; bh=kSNG9s8hxnz1NsV2X1ZHHnsQFl+G2mD2Kw387IuTQg0=; b=K6jy+2EB/HT6os9CQdDjnTKeiUqdGtgR37ZYKVxqMLnGaYXn8PuuSIOymqCfVwBLPp PUTZOLabSkDUEMH+tz96CTDQQ69aUPU5DewssWmIayfmn3y2m4uJ0Cq9+kZVpuVIGAli sqiT7KdEfM2qCZtPby4WjgYO8yOAVevncdn7o= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer; b=gO/RJwVcn8u+yAF5aSno0SWeQBp4G3yalCr3plfVyJ3ghshbduqdnTA8MX+w1GYMaf 8I9/UUHI9Hi/+SZKji0kLqylrkSoCqM90/Wiup1mc32EU6dns+d4G3EWuPAPUPSbGJaR bNnBu11sg5y5OUQGkKAY3hqW54x2ktPhjTwsM= Received: by 10.216.245.6 with SMTP id n6mr5142598wer.40.1302008641770; Tue, 05 Apr 2011 06:04:01 -0700 (PDT) Received: from macbook.be.48ers.dk (191.207-78-194.adsl-fix.skynet.be [194.78.207.191]) by mx.google.com with ESMTPS id b15sm1572615wer.12.2011.04.05.06.04.00 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 05 Apr 2011 06:04:01 -0700 (PDT) Received: by macbook.be.48ers.dk (Postfix, from userid 1000) id DE505C3AA9; Tue, 5 Apr 2011 15:03:58 +0200 (CEST) From: Peter Korsgaard To: davem@davemloft.net, buytenh@wantstofly.org, netdev@vger.kernel.org Cc: Peter Korsgaard Subject: [PATCH] dsa/mv88e6131: add support for mv88e6085 switch Date: Tue, 5 Apr 2011 15:03:56 +0200 Message-Id: <1302008636-6544-1-git-send-email-jacmet@sunsite.dk> X-Mailer: git-send-email 1.7.2.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The mv88e6085 is identical to the mv88e6095, except that all ports are 10/100 Mb/s, so use the existing setup code except for the cpu/dsa speed selection in _setup_port(). Signed-off-by: Peter Korsgaard Acked-by: Lennert Buytenhek --- net/dsa/mv88e6131.c | 23 +++++++++++++++++++---- net/dsa/mv88e6xxx.h | 2 ++ 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/net/dsa/mv88e6131.c b/net/dsa/mv88e6131.c index bb2b41b..a8e4f8c 100644 --- a/net/dsa/mv88e6131.c +++ b/net/dsa/mv88e6131.c @@ -14,6 +14,13 @@ #include "dsa_priv.h" #include "mv88e6xxx.h" +/* + * Switch product IDs + */ +#define ID_6085 0x04a0 +#define ID_6095 0x0950 +#define ID_6131 0x1060 + static char *mv88e6131_probe(struct mii_bus *bus, int sw_addr) { int ret; @@ -21,9 +28,11 @@ static char *mv88e6131_probe(struct mii_bus *bus, int sw_addr) ret = __mv88e6xxx_reg_read(bus, sw_addr, REG_PORT(0), 0x03); if (ret >= 0) { ret &= 0xfff0; - if (ret == 0x0950) + if (ret == ID_6085) + return "Marvell 88E6085"; + if (ret == ID_6095) return "Marvell 88E6095/88E6095F"; - if (ret == 0x1060) + if (ret == ID_6131) return "Marvell 88E6131"; } @@ -164,6 +173,7 @@ static int mv88e6131_setup_global(struct dsa_switch *ds) static int mv88e6131_setup_port(struct dsa_switch *ds, int p) { + struct mv88e6xxx_priv_state *ps = (void *)(ds + 1); int addr = REG_PORT(p); u16 val; @@ -171,10 +181,13 @@ static int mv88e6131_setup_port(struct dsa_switch *ds, int p) * MAC Forcing register: don't force link, speed, duplex * or flow control state to any particular values on physical * ports, but force the CPU port and all DSA ports to 1000 Mb/s - * full duplex. + * (100 Mb/s on 6085) full duplex. */ if (dsa_is_cpu_port(ds, p) || ds->dsa_port_mask & (1 << p)) - REG_WRITE(addr, 0x01, 0x003e); + if (ps->id == ID_6085) + REG_WRITE(addr, 0x01, 0x003d); /* 100 Mb/s */ + else + REG_WRITE(addr, 0x01, 0x003e); /* 1000 Mb/s */ else REG_WRITE(addr, 0x01, 0x0003); @@ -286,6 +299,8 @@ static int mv88e6131_setup(struct dsa_switch *ds) mv88e6xxx_ppu_state_init(ds); mutex_init(&ps->stats_mutex); + ps->id = REG_READ(REG_PORT(0), 0x03) & 0xfff0; + ret = mv88e6131_switch_reset(ds); if (ret < 0) return ret; diff --git a/net/dsa/mv88e6xxx.h b/net/dsa/mv88e6xxx.h index eb0e0aa..61156ca2 100644 --- a/net/dsa/mv88e6xxx.h +++ b/net/dsa/mv88e6xxx.h @@ -39,6 +39,8 @@ struct mv88e6xxx_priv_state { * Hold this mutex over snapshot + dump sequences. */ struct mutex stats_mutex; + + int id; /* switch product id */ }; struct mv88e6xxx_hw_stat {