From patchwork Mon Nov 2 10:57:32 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 538962 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 1917C14031C for ; Mon, 2 Nov 2015 21:58:31 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=baylibre_com.20150623.gappssmtp.com header.i=@baylibre_com.20150623.gappssmtp.com header.b=lm1axkib; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753733AbbKBK5t (ORCPT ); Mon, 2 Nov 2015 05:57:49 -0500 Received: from mail-wm0-f43.google.com ([74.125.82.43]:36882 "EHLO mail-wm0-f43.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753714AbbKBK5p (ORCPT ); Mon, 2 Nov 2015 05:57:45 -0500 Received: by wmff134 with SMTP id f134so56931667wmf.0 for ; Mon, 02 Nov 2015 02:57:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre_com.20150623.gappssmtp.com; s=20150623; h=from:subject:to:cc:organization:message-id:date:user-agent :mime-version:content-type:content-transfer-encoding; bh=ZYMkItPQ/opIyuRFWoHfK0gbw4pY301BlXnpmWmVg+Y=; b=lm1axkibJASvVDtNxBAHR06TrYb0XAFoU7YkcRXIaxTYWHu9nLN6q8Jz2j/c8/7Ora ODdIiRT/s2XFU51Fpn/rqE5yARkOeWi6YuI642PvXF2KwUcYl8o60veTV67MpXMiFKBD zwxiWUtMoE2CWudlKSAxH9jGfHvjhV0FjpmNUPQqdqtdJn72TNsevT0WZZfu+HRHGg/4 MFWBvl5rxb7r9YSdUKw6WDyFXSYdWE/JcJ019+SECmp1ytmBIn0Xo4+y+/M2P5Sx1zKc +p9NYJciDTt+aDbarDykdjOOYQ5gWzdG9hXVWDoBo33enYbxrxKkVzhrYK0j2cS2w0+D 4NYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:subject:to:cc:organization:message-id:date :user-agent:mime-version:content-type:content-transfer-encoding; bh=ZYMkItPQ/opIyuRFWoHfK0gbw4pY301BlXnpmWmVg+Y=; b=fTcU2v9fA28mXy5ArrsFE8IjfJcYS/UZT9ksVUn37f9WC/3nvGnKMXNfF4BREXMAis 1blZ4NkbZmVfYojROnWSH3JFwzHK4LZJWCJaiIUpV5eullrLGHTbPHSFQ4VNMuobNsRH LsfO+XZedCE21JM1F1UX81rhS8gzs7fx+alJDgRXeTK5CMAfG/CbkiR8ufGp3f7Ift/T Jdgt5HuvAZLGu8Z8bDkj8x56XvKXVio++XXDnx03DaTuGEaIw2c7FlSPIOzPTeQa5JJy Se+RAGTBNxfVatn9jCEi9lZfUlKj5YlUUoxHsNxEpdPR9QW2Omm2+lhF5xwx15t/gaIe WDBQ== X-Gm-Message-State: ALoCoQnBiGqbB8IhfHayUSjAN4RiI0NjvPTnE2iayX1eSy2wblDOoWVeQDVzwD7ROGjk9RI2rigG X-Received: by 10.28.141.136 with SMTP id p130mr13400813wmd.56.1446461863454; Mon, 02 Nov 2015 02:57:43 -0800 (PST) Received: from [192.168.2.52] (cag06-6-78-235-100-105.fbx.proxad.net. [78.235.100.105]) by smtp.gmail.com with ESMTPSA id bf8sm21687173wjc.22.2015.11.02.02.57.41 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 02 Nov 2015 02:57:42 -0800 (PST) From: Neil Armstrong Subject: [RFC PATCH net-next 6/6] net: dsa: mv88e6060: replace magic values with register defines To: netdev@vger.kernel.org Cc: linux-kernel@vger.kernel.org, "David S. Miller" , Florian Fainelli , Andrew Lunn , Guenter Roeck , Neil Armstrong , Vivien Didelot Organization: Baylibre Message-ID: <5637419C.8060206@baylibre.com> Date: Mon, 2 Nov 2015 11:57:32 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org To align with the mv88e6xxx code, use the register defines to access all the register addresses and bit fields. Signed-off-by: Neil Armstrong --- drivers/net/dsa/mv88e6060.c | 64 ++++++++++++++++++++++++++------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/drivers/net/dsa/mv88e6060.c b/drivers/net/dsa/mv88e6060.c index 1ccfd7a..6b5353e 100644 --- a/drivers/net/dsa/mv88e6060.c +++ b/drivers/net/dsa/mv88e6060.c @@ -15,9 +15,7 @@ #include #include #include - -#define REG_PORT(p) (8 + (p)) -#define REG_GLOBAL 0x0f +#include "mv88e6060.h" static int reg_read(struct dsa_switch *ds, int addr, int reg) { @@ -67,13 +65,14 @@ static char *mv88e6060_probe(struct device *host_dev, int sw_addr) if (bus == NULL) return NULL; - ret = mdiobus_read(bus, sw_addr + REG_PORT(0), 0x03); + ret = mdiobus_read(bus, sw_addr + REG_PORT(0), PORT_SWITCH_ID); if (ret >= 0) { - if (ret == 0x0600) + if (ret == PORT_SWITCH_ID_6060) return "Marvell 88E6060 (A0)"; - if (ret == 0x0601 || ret == 0x0602) + if (ret == PORT_SWITCH_ID_6060_R1 || + ret == PORT_SWITCH_ID_6060_R2) return "Marvell 88E6060 (B0)"; - if ((ret & 0xfff0) == 0x0600) + if ((ret & PORT_SWITCH_ID_6060_MASK) == PORT_SWITCH_ID_6060) return "Marvell 88E6060"; } @@ -87,22 +86,26 @@ static int mv88e6060_switch_reset(struct dsa_switch *ds) unsigned long timeout; /* Set all ports to the disabled state. */ - for (i = 0; i < 6; i++) { - ret = REG_READ(REG_PORT(i), 0x04); - REG_WRITE(REG_PORT(i), 0x04, ret & 0xfffc); + for (i = 0; i < MV88E6060_PORTS; i++) { + ret = REG_READ(REG_PORT(i), PORT_CONTROL); + REG_WRITE(REG_PORT(i), PORT_CONTROL, + ret & ~PORT_CONTROL_STATE_MASK); } /* Wait for transmit queues to drain. */ usleep_range(2000, 4000); /* Reset the switch. */ - REG_WRITE(REG_GLOBAL, 0x0a, 0xa130); + REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL, + GLOBAL_ATU_CONTROL_SWRESET | + GLOBAL_ATU_CONTROL_ATUSIZE_1024 | + GLOBAL_ATU_CONTROL_ATE_AGE_5MIN); /* Wait up to one second for reset to complete. */ timeout = jiffies + 1 * HZ; while (time_before(jiffies, timeout)) { - ret = REG_READ(REG_GLOBAL, 0x00); - if ((ret & 0x800) != 0x0000) + ret = REG_READ(REG_GLOBAL, GLOBAL_STATUS); + if ((ret & GLOBAL_STATUS_INIT_READY)) break; usleep_range(1000, 2000); @@ -119,13 +122,15 @@ static int mv88e6060_setup_global(struct dsa_switch *ds) * set the maximum frame size to 1536 bytes, and mask all * interrupt sources. */ - REG_WRITE(REG_GLOBAL, 0x04, 0x400); + REG_WRITE(REG_GLOBAL, GLOBAL_CONTROL, GLOBAL_CONTROL_MAX_FRAME_1536); /* Enable automatic address learning, set the address * database size to 1024 entries, and set the default aging * time to 5 minutes. */ - REG_WRITE(REG_GLOBAL, 0x0a, 0x2130); + REG_WRITE(REG_GLOBAL, GLOBAL_ATU_CONTROL, + GLOBAL_ATU_CONTROL_ATUSIZE_1024 | + GLOBAL_ATU_CONTROL_ATE_AGE_5MIN); return 0; } @@ -139,25 +144,30 @@ static int mv88e6060_setup_port(struct dsa_switch *ds, int p) * state to Forwarding. Additionally, if this is the CPU * port, enable Ingress and Egress Trailer tagging mode. */ - REG_WRITE(addr, 0x04, dsa_is_cpu_port(ds, p) ? 0x4103 : 0x0003); + REG_WRITE(addr, PORT_CONTROL, + dsa_is_cpu_port(ds, p) ? + PORT_CONTROL_TRAILER | + PORT_CONTROL_INGRESS_MODE | + PORT_CONTROL_STATE_FORWARDING : + PORT_CONTROL_STATE_FORWARDING); /* Port based VLAN map: give each port its own address * database, allow the CPU port to talk to each of the 'real' * ports, and allow each of the 'real' ports to only talk to * the CPU port. */ - REG_WRITE(addr, 0x06, - ((p & 0xf) << 12) | - (dsa_is_cpu_port(ds, p) ? - ds->phys_port_mask : - (1 << ds->dst->cpu_port))); + REG_WRITE(addr, PORT_VLAN_MAP, + ((p & 0xf) << PORT_VLAN_MAP_DBNUM_SHIFT) | + (dsa_is_cpu_port(ds, p) ? + ds->phys_port_mask : + BIT(ds->dst->cpu_port))); /* Port Association Vector: when learning source addresses * of packets, add the address to the address database using * a port bitmap that has only the bit for this port set and * the other bits clear. */ - REG_WRITE(addr, 0x0b, 1 << p); + REG_WRITE(addr, PORT_ASSOC_VECTOR, BIT(p)); return 0; } @@ -177,7 +187,7 @@ static int mv88e6060_setup(struct dsa_switch *ds) if (ret < 0) return ret; - for (i = 0; i < 6; i++) { + for (i = 0; i < MV88E6060_PORTS; i++) { ret = mv88e6060_setup_port(ds, i); if (ret < 0) return ret; @@ -189,16 +199,16 @@ static int mv88e6060_setup(struct dsa_switch *ds) static int mv88e6060_set_addr(struct dsa_switch *ds, u8 *addr) { /* Use the same MAC Address as FD Pause frames for all ports */ - REG_WRITE(REG_GLOBAL, 0x01, (addr[0] << 9) | addr[1]); - REG_WRITE(REG_GLOBAL, 0x02, (addr[2] << 8) | addr[3]); - REG_WRITE(REG_GLOBAL, 0x03, (addr[4] << 8) | addr[5]); + REG_WRITE(REG_GLOBAL, GLOBAL_MAC_01, (addr[0] << 9) | addr[1]); + REG_WRITE(REG_GLOBAL, GLOBAL_MAC_23, (addr[2] << 8) | addr[3]); + REG_WRITE(REG_GLOBAL, GLOBAL_MAC_45, (addr[4] << 8) | addr[5]); return 0; } static int mv88e6060_port_to_phy_addr(int port) { - if (port >= 0 && port <= 5) + if (port >= 0 && port < MV88E6060_PORTS) return port; return -1; }