From patchwork Sat Mar 24 20:07:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 890524 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cogentembedded.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=cogentembedded-com.20150623.gappssmtp.com header.i=@cogentembedded-com.20150623.gappssmtp.com header.b="PK0hpY/x"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 407s061LqVz9s27 for ; Sun, 25 Mar 2018 07:07:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753699AbeCXUHr (ORCPT ); Sat, 24 Mar 2018 16:07:47 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:37968 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753559AbeCXUHp (ORCPT ); Sat, 24 Mar 2018 16:07:45 -0400 Received: by mail-lf0-f66.google.com with SMTP id u3-v6so1955946lff.5 for ; Sat, 24 Mar 2018 13:07:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:references:organization:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=PNVrXQNkf+FztehSAy/xQCqbSGPUl8nKvmfz8/3to6I=; b=PK0hpY/xJhp9ynuySBeohxMdiyS/YHw1y3vnd401T58qHVhZs9KWTJwhVIZvruj/7V zFgduRrI2dcJerqEkORGZc15r0GoQcSBPWEdcPpbhEdlspKsvbyoEJj7UrEyZfJ+w1pX MXHOX9tYF48YDHskvi+BXVyBbsVu/CEjsVF0e05GKQ0sz59XVGj0BhVjkdpNe37HGaVD xj1/8P/5YG8noZjbeqtJvK6BQO56QQhF1c9yBSRx/tCjsSmqKZCY8wbZQ42uhdJcY4XY 9FNOtnY9i5ypG7SFJkddT+jNH/Bg/9IuH5I5S3Ryf5yZNzPSKRHmKzHpzLjDh0QOrzZv a43g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=PNVrXQNkf+FztehSAy/xQCqbSGPUl8nKvmfz8/3to6I=; b=hxl4bFwsXZuWcrmVPREDeMxZwmfUFe1OBLVTiI53Cz5z8NkRSqozMsP5qqTkuBDW9I mteLR2/ETHguYn5nulG5sOIsA7/jvURnLPIj4XiMsns4KIlzoP+y8r1ZQmysoaNtkD1s yVAcBa3buW9G+hT7vX7vaYPhbxhhj4oyvVplkvFpj2DQd8Abtfey5ku0GV3EVeu/239d YZSD9NKB9Tvo4cy6soYsmCikCr9fSdrAS4AJaUFwAx2Jitem4PziZmFWxPFf3srNJm9w zV8kVcyf3E2wWgrp66t5I0fNn/znjsGXcBSveZtcnFvf9tURrhJAIe9NiiZvFMPJitJ8 SBuQ== X-Gm-Message-State: AElRT7E368FmBLQrgkPGIWpY7hoe6u0qlvFbGhCKMZ+LN3R673I6F+bo 53S9nWQ8JDYSlsiCZVkYuHiQtg== X-Google-Smtp-Source: AG47ELuy2/krMuig7r9bKfNixapqEka/9I6T8BqxUR1boQBbY+ZUW0EbD7XJU3nge0q0nrq19BBZDA== X-Received: by 10.46.154.145 with SMTP id p17mr13700268lji.28.1521922063462; Sat, 24 Mar 2018 13:07:43 -0700 (PDT) Received: from wasted.cogentembedded.com ([31.173.80.64]) by smtp.gmail.com with ESMTPSA id o8sm2591292ljj.42.2018.03.24.13.07.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 24 Mar 2018 13:07:42 -0700 (PDT) Subject: [PATCH 1/5] sh_eth: add sh_eth_cpu_data::soft_reset() method From: Sergei Shtylyov To: netdev@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, linux-sh@vger.kernel.org References: Organization: Cogent Embedded Message-ID: Date: Sat, 24 Mar 2018 23:07:41 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-MW Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org sh_eth_reset() performs a software reset which is implemented in a completely different way for the GEther-like controllers vs the other controllers due to a different layout of EDMR (and other factors) -- it therefore makes sense to convert this function to a mandatory sh_eth_cpu_data::soft_reset() method and thus get rid of the runtime controller type check via sh_eth_is_{gether|rz_fast_ether}(). Signed-off-by: Sergei Shtylyov --- drivers/net/ethernet/renesas/sh_eth.c | 135 ++++++++++++++++++++-------------- drivers/net/ethernet/renesas/sh_eth.h | 3 2 files changed, 83 insertions(+), 55 deletions(-) Index: net-next/drivers/net/ethernet/renesas/sh_eth.c =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.c +++ net-next/drivers/net/ethernet/renesas/sh_eth.c @@ -501,6 +501,62 @@ static void sh_eth_chip_reset(struct net mdelay(1); } +static int sh_eth_soft_reset(struct net_device *ndev) +{ + sh_eth_modify(ndev, EDMR, EDMR_SRST_ETHER, EDMR_SRST_ETHER); + mdelay(3); + sh_eth_modify(ndev, EDMR, EDMR_SRST_ETHER, 0); + + return 0; +} + +static int sh_eth_check_soft_reset(struct net_device *ndev) +{ + int cnt; + + for (cnt = 100; cnt > 0; cnt--) { + if (!(sh_eth_read(ndev, EDMR) & EDMR_SRST_GETHER)) + return 0; + mdelay(1); + } + + netdev_err(ndev, "Device reset failed\n"); + return -ETIMEDOUT; +} + +static int sh_eth_soft_reset_gether(struct net_device *ndev) +{ + struct sh_eth_private *mdp = netdev_priv(ndev); + int ret; + + sh_eth_write(ndev, EDSR_ENALL, EDSR); + sh_eth_modify(ndev, EDMR, EDMR_SRST_GETHER, EDMR_SRST_GETHER); + + ret = sh_eth_check_soft_reset(ndev); + if (ret) + return ret; + + /* Table Init */ + sh_eth_write(ndev, 0, TDLAR); + sh_eth_write(ndev, 0, TDFAR); + sh_eth_write(ndev, 0, TDFXR); + sh_eth_write(ndev, 0, TDFFR); + sh_eth_write(ndev, 0, RDLAR); + sh_eth_write(ndev, 0, RDFAR); + sh_eth_write(ndev, 0, RDFXR); + sh_eth_write(ndev, 0, RDFFR); + + /* Reset HW CRC register */ + if (mdp->cd->hw_checksum) + sh_eth_write(ndev, 0, CSMR); + + /* Select MII mode */ + if (mdp->cd->select_mii) + sh_eth_select_mii(ndev); + + return ret; +} + static void sh_eth_set_rate_gether(struct net_device *ndev) { struct sh_eth_private *mdp = netdev_priv(ndev); @@ -521,6 +577,8 @@ static void sh_eth_set_rate_gether(struc #ifdef CONFIG_OF /* R7S72100 */ static struct sh_eth_cpu_data r7s72100_data = { + .soft_reset = sh_eth_soft_reset_gether, + .chip_reset = sh_eth_chip_reset, .set_duplex = sh_eth_set_duplex, @@ -565,6 +623,8 @@ static void sh_eth_chip_reset_r8a7740(st /* R8A7740 */ static struct sh_eth_cpu_data r8a7740_data = { + .soft_reset = sh_eth_soft_reset_gether, + .chip_reset = sh_eth_chip_reset_r8a7740, .set_duplex = sh_eth_set_duplex, .set_rate = sh_eth_set_rate_gether, @@ -620,6 +680,8 @@ static void sh_eth_set_rate_rcar(struct /* R-Car Gen1 */ static struct sh_eth_cpu_data rcar_gen1_data = { + .soft_reset = sh_eth_soft_reset, + .set_duplex = sh_eth_set_duplex, .set_rate = sh_eth_set_rate_rcar, @@ -647,6 +709,8 @@ static struct sh_eth_cpu_data rcar_gen1_ /* R-Car Gen2 and RZ/G1 */ static struct sh_eth_cpu_data rcar_gen2_data = { + .soft_reset = sh_eth_soft_reset, + .set_duplex = sh_eth_set_duplex, .set_rate = sh_eth_set_rate_rcar, @@ -694,6 +758,8 @@ static void sh_eth_set_rate_sh7724(struc /* SH7724 */ static struct sh_eth_cpu_data sh7724_data = { + .soft_reset = sh_eth_soft_reset, + .set_duplex = sh_eth_set_duplex, .set_rate = sh_eth_set_rate_sh7724, @@ -736,6 +802,8 @@ static void sh_eth_set_rate_sh7757(struc /* SH7757 */ static struct sh_eth_cpu_data sh7757_data = { + .soft_reset = sh_eth_soft_reset, + .set_duplex = sh_eth_set_duplex, .set_rate = sh_eth_set_rate_sh7757, @@ -808,6 +876,8 @@ static void sh_eth_set_rate_giga(struct /* SH7757(GETHERC) */ static struct sh_eth_cpu_data sh7757_data_giga = { + .soft_reset = sh_eth_soft_reset_gether, + .chip_reset = sh_eth_chip_reset_giga, .set_duplex = sh_eth_set_duplex, .set_rate = sh_eth_set_rate_giga, @@ -847,6 +917,8 @@ static struct sh_eth_cpu_data sh7757_dat /* SH7734 */ static struct sh_eth_cpu_data sh7734_data = { + .soft_reset = sh_eth_soft_reset_gether, + .chip_reset = sh_eth_chip_reset, .set_duplex = sh_eth_set_duplex, .set_rate = sh_eth_set_rate_gether, @@ -883,6 +955,8 @@ static struct sh_eth_cpu_data sh7734_dat /* SH7763 */ static struct sh_eth_cpu_data sh7763_data = { + .soft_reset = sh_eth_soft_reset_gether, + .chip_reset = sh_eth_chip_reset, .set_duplex = sh_eth_set_duplex, .set_rate = sh_eth_set_rate_gether, @@ -917,6 +991,8 @@ static struct sh_eth_cpu_data sh7763_dat }; static struct sh_eth_cpu_data sh7619_data = { + .soft_reset = sh_eth_soft_reset, + .register_type = SH_ETH_REG_FAST_SH3_SH2, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | @@ -935,6 +1011,8 @@ static struct sh_eth_cpu_data sh7619_dat }; static struct sh_eth_cpu_data sh771x_data = { + .soft_reset = sh_eth_soft_reset, + .register_type = SH_ETH_REG_FAST_SH3_SH2, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | @@ -974,59 +1052,6 @@ static void sh_eth_set_default_cpu_data( cd->trscer_err_mask = DEFAULT_TRSCER_ERR_MASK; } -static int sh_eth_check_reset(struct net_device *ndev) -{ - int cnt; - - for (cnt = 100; cnt > 0; cnt--) { - if (!(sh_eth_read(ndev, EDMR) & EDMR_SRST_GETHER)) - return 0; - mdelay(1); - } - - netdev_err(ndev, "Device reset failed\n"); - return -ETIMEDOUT; -} - -static int sh_eth_reset(struct net_device *ndev) -{ - struct sh_eth_private *mdp = netdev_priv(ndev); - int ret = 0; - - if (sh_eth_is_gether(mdp) || sh_eth_is_rz_fast_ether(mdp)) { - sh_eth_write(ndev, EDSR_ENALL, EDSR); - sh_eth_modify(ndev, EDMR, EDMR_SRST_GETHER, EDMR_SRST_GETHER); - - ret = sh_eth_check_reset(ndev); - if (ret) - return ret; - - /* Table Init */ - sh_eth_write(ndev, 0x0, TDLAR); - sh_eth_write(ndev, 0x0, TDFAR); - sh_eth_write(ndev, 0x0, TDFXR); - sh_eth_write(ndev, 0x0, TDFFR); - sh_eth_write(ndev, 0x0, RDLAR); - sh_eth_write(ndev, 0x0, RDFAR); - sh_eth_write(ndev, 0x0, RDFXR); - sh_eth_write(ndev, 0x0, RDFFR); - - /* Reset HW CRC register */ - if (mdp->cd->hw_checksum) - sh_eth_write(ndev, 0x0, CSMR); - - /* Select MII mode */ - if (mdp->cd->select_mii) - sh_eth_select_mii(ndev); - } else { - sh_eth_modify(ndev, EDMR, EDMR_SRST_ETHER, EDMR_SRST_ETHER); - mdelay(3); - sh_eth_modify(ndev, EDMR, EDMR_SRST_ETHER, 0); - } - - return ret; -} - static void sh_eth_set_receive_align(struct sk_buff *skb) { uintptr_t reserve = (uintptr_t)skb->data & (SH_ETH_RX_ALIGN - 1); @@ -1362,7 +1387,7 @@ static int sh_eth_dev_init(struct net_de int ret; /* Soft Reset */ - ret = sh_eth_reset(ndev); + ret = mdp->cd->soft_reset(ndev); if (ret) return ret; @@ -1463,7 +1488,7 @@ static void sh_eth_dev_exit(struct net_d */ msleep(2); /* max frame time at 10 Mbps < 1250 us */ sh_eth_get_stats(ndev); - sh_eth_reset(ndev); + mdp->cd->soft_reset(ndev); /* Set MAC address again */ update_mac_address(ndev); Index: net-next/drivers/net/ethernet/renesas/sh_eth.h =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.h +++ net-next/drivers/net/ethernet/renesas/sh_eth.h @@ -469,6 +469,9 @@ struct sh_eth_rxdesc { /* This structure is used by each CPU dependency handling. */ struct sh_eth_cpu_data { + /* mandatory functions */ + int (*soft_reset)(struct net_device *ndev); + /* optional functions */ void (*chip_reset)(struct net_device *ndev); void (*set_duplex)(struct net_device *ndev); From patchwork Sat Mar 24 20:08:42 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 890526 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cogentembedded.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=cogentembedded-com.20150623.gappssmtp.com header.i=@cogentembedded-com.20150623.gappssmtp.com header.b="gozOxCx/"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 407s1F2Pypz9s0b for ; Sun, 25 Mar 2018 07:08:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753473AbeCXUIr (ORCPT ); Sat, 24 Mar 2018 16:08:47 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:42021 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753040AbeCXUIp (ORCPT ); Sat, 24 Mar 2018 16:08:45 -0400 Received: by mail-lf0-f66.google.com with SMTP id a22-v6so22860390lfg.9 for ; Sat, 24 Mar 2018 13:08:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:references:organization:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=XPr5ozCAMNiYxTdgLuObdR9WF/TKcGaD4iGam4ICI3c=; b=gozOxCx//B5JLpYevVj/kFEyqr+dI7u/XySoPRVx/eU7v25n8vqpgEJMFk872rC+dI w5ltde7ywUYk+tJRGovZlkW1QePBndcCZi+GQmR88ZnVNXlEodeBykKbfLMZa58Drug2 mdaIQKh4otBCpoGsCVZZG5by9GLYixJmYNk1PqpOiKRZDeewc1SG+BvQBjFb0rJGulDl LawJX4L09KHBU1w0kNgfyyWJQOyfqibTtNEgFnb9Qwyoq1GZt6sP8xbTA5iZX2P5LJOG MSJOlTtAGc/7Hf8WUY/uSU8DU+/yFc+FMyalOHO/wt245aXTBf6qk4sCVDm3lr+UlV4n VbiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=XPr5ozCAMNiYxTdgLuObdR9WF/TKcGaD4iGam4ICI3c=; b=oUcIdoNAL6PJvpon2pAPigG+l0yrtUfW7MXgvRdy0opOgL79uaNE9L0G/KEWQuJf98 b5xG3fzpIVzDLX5mALsSb6Dho78VRP0+fi/GIHGS2bO4XrISp5uUiAXt5ZjFaibIZXfV PLJefHX7BhanzN/FmKjhn4qmlfk8sDvQwatoIgnGAUYyOoPg9Pwg8di9uDFnhlycjZRs z7z1spDmDYplT4/LZalHjLQpsoXIp6rJt/ro0RJ4GnxMFn/YA03w2QJvqLBu0fly+cG5 +TRB05cOlZxddNvTu/Ko/BR2wM12r65TFMGzOPr+7voHOG/KkGqh0oBQOKtQ2KE0rV0k m6eQ== X-Gm-Message-State: AElRT7E0DhBqfdb8t7pkR675rDmt4YaaJhDoJOxHIQY6+5b6aOuOZY7N OggcjGggj2Q7T9Crn11BgiQEfZuDuXg= X-Google-Smtp-Source: AG47ELvcUL+ydLF9O2EvpQDm9gnx7eG9LahmjjGQTiVmBbUCfzCBy4zJiT7mhjjXIurecQrHHiQ5dA== X-Received: by 2002:a19:5c4b:: with SMTP id q72-v6mr24025551lfb.126.1521922123601; Sat, 24 Mar 2018 13:08:43 -0700 (PDT) Received: from wasted.cogentembedded.com ([31.173.80.64]) by smtp.gmail.com with ESMTPSA id d8sm1547555ljg.63.2018.03.24.13.08.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 24 Mar 2018 13:08:42 -0700 (PDT) Subject: [PATCH 2/5] sh_eth: add sh_eth_cpu_data::edtrr_trns value From: Sergei Shtylyov To: netdev@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, linux-sh@vger.kernel.org References: Organization: Cogent Embedded Message-ID: Date: Sat, 24 Mar 2018 23:08:42 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-MW Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org sh_eth_get_edtrr_trns() returns the value to be written to EDTRR in order to start TX DMA -- this value is different between the GEther-like and the other controllers. We can replace this function (and thus get rid of the calls to sh_eth_is_{gether|rz_fast_ether}() by it) with a new field 'edtrr_trns' in the 'struct sh_eth_cpu_data'. Signed-off-by: Sergei Shtylyov --- drivers/net/ethernet/renesas/sh_eth.c | 27 +++++++++++++++------------ drivers/net/ethernet/renesas/sh_eth.h | 1 + 2 files changed, 16 insertions(+), 12 deletions(-) Index: net-next/drivers/net/ethernet/renesas/sh_eth.c =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.c +++ net-next/drivers/net/ethernet/renesas/sh_eth.c @@ -584,6 +584,7 @@ static struct sh_eth_cpu_data r7s72100_d .register_type = SH_ETH_REG_FAST_RZ, + .edtrr_trns = EDTRR_TRNS_GETHER, .ecsr_value = ECSR_ICD, .ecsipr_value = ECSIPR_ICDIP, .eesipr_value = EESIPR_TWB1IP | EESIPR_TWBIP | EESIPR_TC1IP | @@ -631,6 +632,7 @@ static struct sh_eth_cpu_data r8a7740_da .register_type = SH_ETH_REG_GIGABIT, + .edtrr_trns = EDTRR_TRNS_GETHER, .ecsr_value = ECSR_ICD | ECSR_MPD, .ecsipr_value = ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | @@ -687,6 +689,7 @@ static struct sh_eth_cpu_data rcar_gen1_ .register_type = SH_ETH_REG_FAST_RCAR, + .edtrr_trns = EDTRR_TRNS_ETHER, .ecsr_value = ECSR_PSRTO | ECSR_LCHNG | ECSR_ICD, .ecsipr_value = ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | ECSIPR_ICDIP, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ADEIP | EESIPR_ECIIP | @@ -716,6 +719,7 @@ static struct sh_eth_cpu_data rcar_gen2_ .register_type = SH_ETH_REG_FAST_RCAR, + .edtrr_trns = EDTRR_TRNS_ETHER, .ecsr_value = ECSR_PSRTO | ECSR_LCHNG | ECSR_ICD | ECSR_MPD, .ecsipr_value = ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP, @@ -765,6 +769,7 @@ static struct sh_eth_cpu_data sh7724_dat .register_type = SH_ETH_REG_FAST_SH4, + .edtrr_trns = EDTRR_TRNS_ETHER, .ecsr_value = ECSR_PSRTO | ECSR_LCHNG | ECSR_ICD, .ecsipr_value = ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | ECSIPR_ICDIP, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ADEIP | EESIPR_ECIIP | @@ -809,6 +814,7 @@ static struct sh_eth_cpu_data sh7757_dat .register_type = SH_ETH_REG_FAST_SH4, + .edtrr_trns = EDTRR_TRNS_ETHER, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | EESIPR_FTCIP | EESIPR_TDEIP | EESIPR_TFUFIP | EESIPR_FRIP | EESIPR_RDEIP | EESIPR_RFOFIP | @@ -884,6 +890,7 @@ static struct sh_eth_cpu_data sh7757_dat .register_type = SH_ETH_REG_GIGABIT, + .edtrr_trns = EDTRR_TRNS_GETHER, .ecsr_value = ECSR_ICD | ECSR_MPD, .ecsipr_value = ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | @@ -925,6 +932,7 @@ static struct sh_eth_cpu_data sh7734_dat .register_type = SH_ETH_REG_GIGABIT, + .edtrr_trns = EDTRR_TRNS_GETHER, .ecsr_value = ECSR_ICD | ECSR_MPD, .ecsipr_value = ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | @@ -963,6 +971,7 @@ static struct sh_eth_cpu_data sh7763_dat .register_type = SH_ETH_REG_GIGABIT, + .edtrr_trns = EDTRR_TRNS_GETHER, .ecsr_value = ECSR_ICD | ECSR_MPD, .ecsipr_value = ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | @@ -995,6 +1004,7 @@ static struct sh_eth_cpu_data sh7619_dat .register_type = SH_ETH_REG_FAST_SH3_SH2, + .edtrr_trns = EDTRR_TRNS_ETHER, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | EESIPR_FTCIP | EESIPR_TDEIP | EESIPR_TFUFIP | EESIPR_FRIP | EESIPR_RDEIP | EESIPR_RFOFIP | @@ -1015,6 +1025,7 @@ static struct sh_eth_cpu_data sh771x_dat .register_type = SH_ETH_REG_FAST_SH3_SH2, + .edtrr_trns = EDTRR_TRNS_ETHER, .eesipr_value = EESIPR_RFCOFIP | EESIPR_ECIIP | EESIPR_FTCIP | EESIPR_TDEIP | EESIPR_TFUFIP | EESIPR_FRIP | EESIPR_RDEIP | EESIPR_RFOFIP | @@ -1094,14 +1105,6 @@ static void read_mac_address(struct net_ } } -static u32 sh_eth_get_edtrr_trns(struct sh_eth_private *mdp) -{ - if (sh_eth_is_gether(mdp) || sh_eth_is_rz_fast_ether(mdp)) - return EDTRR_TRNS_GETHER; - else - return EDTRR_TRNS_ETHER; -} - struct bb_info { void (*set_gate)(void *addr); struct mdiobb_ctrl ctrl; @@ -1741,9 +1744,9 @@ static void sh_eth_error(struct net_devi sh_eth_tx_free(ndev, true); /* SH7712 BUG */ - if (edtrr ^ sh_eth_get_edtrr_trns(mdp)) { + if (edtrr ^ mdp->cd->edtrr_trns) { /* tx dma start */ - sh_eth_write(ndev, sh_eth_get_edtrr_trns(mdp), EDTRR); + sh_eth_write(ndev, mdp->cd->edtrr_trns, EDTRR); } /* wakeup */ netif_wake_queue(ndev); @@ -2502,8 +2505,8 @@ static int sh_eth_start_xmit(struct sk_b mdp->cur_tx++; - if (!(sh_eth_read(ndev, EDTRR) & sh_eth_get_edtrr_trns(mdp))) - sh_eth_write(ndev, sh_eth_get_edtrr_trns(mdp), EDTRR); + if (!(sh_eth_read(ndev, EDTRR) & mdp->cd->edtrr_trns)) + sh_eth_write(ndev, mdp->cd->edtrr_trns, EDTRR); return NETDEV_TX_OK; } Index: net-next/drivers/net/ethernet/renesas/sh_eth.h =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.h +++ net-next/drivers/net/ethernet/renesas/sh_eth.h @@ -479,6 +479,7 @@ struct sh_eth_cpu_data { /* mandatory initialize value */ int register_type; + u32 edtrr_trns; u32 eesipr_value; /* optional initialize value */ From patchwork Sat Mar 24 20:09:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 890527 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cogentembedded.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=cogentembedded-com.20150623.gappssmtp.com header.i=@cogentembedded-com.20150623.gappssmtp.com header.b="q3Sj36LO"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 407s2g4TG6z9s0b for ; Sun, 25 Mar 2018 07:10:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753483AbeCXUKB (ORCPT ); Sat, 24 Mar 2018 16:10:01 -0400 Received: from mail-lf0-f68.google.com ([209.85.215.68]:34961 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753442AbeCXUJ6 (ORCPT ); Sat, 24 Mar 2018 16:09:58 -0400 Received: by mail-lf0-f68.google.com with SMTP id t132-v6so22889732lfe.2 for ; Sat, 24 Mar 2018 13:09:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:references:organization:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=iyOErqj21h0EbogPX/MLfOh9lH1OBQ2cMUG5w75GuS4=; b=q3Sj36LO0620Em75N7OOgd5oijUkhkz2bRBlfEKVFgfilyyIGcSGvt/HlOMXDAJeKJ Yatr5+Xd0ui8DjHKNdFJgqMHS2YPhE/rBbsoO9kzki/i9IiduQXzYOU6xmlDbjN+bJxN O1cLusguotGMLXIAoelxCVwMjvl0Q+DG4+oh/skxSDDiMZfiwON0H/cPT62A3szIro3w ajtTDZFOBVe9jYajoWJuWPPe81GM9nGreb+Bw2fzs+0CF9FvWa4s1grVN2/WsY4pRzsy mgI+ReIsIG2ygHwWO2+ACZg5y2il83mac6b9ahZr1/G6CAHVRtN38f8+1gETCWohThgp fMHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=iyOErqj21h0EbogPX/MLfOh9lH1OBQ2cMUG5w75GuS4=; b=OHTGgn/cbuI0BDMkL3KRAL3U9606opt3OVhPYq3goTYBInOPPnW2JQ+NJJXi+Vs+fP CZq2rIOjUlUPimSLJQF5ipZvvndUYGO7/kPux7TGLtroIXDh34m9U5NUCc59HkmYEiS5 Q8e40IAzBFOxIbi/lfksz9IqH2nGR5mxrHsJS240jY35evgjERbvepHaEZqIXPZc/eKW WIwJXnzmH/PUXpuZhQJVsHnuKjRcd89YL0YxvikCbK10VD4CxpRbh3xBWQViZ+Swe02O AB/8eSBtJPu8hcZE1A8isqoefDKlzJOTKnYi5lusLw+kI/pPwm064x+uzFS02isMSQsC Latg== X-Gm-Message-State: AElRT7FkELevPciJiCVuwnLB5uQVqFgYcK9HpSSOu/FRHsdJl9NvKuDe LSh8cWqiFe3A8bTgQnCaB1DH4g== X-Google-Smtp-Source: AIpwx489SP/7MIb2IRYRpOysFJbFgjoyuD4QXoOa44ccXC25sunfSGZL2m5c0d0SljTMiu079dgbJg== X-Received: by 10.46.154.70 with SMTP id k6mr1632171ljj.63.1521922196626; Sat, 24 Mar 2018 13:09:56 -0700 (PDT) Received: from wasted.cogentembedded.com ([31.173.80.64]) by smtp.gmail.com with ESMTPSA id i89-v6sm3033654lfk.12.2018.03.24.13.09.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 24 Mar 2018 13:09:55 -0700 (PDT) Subject: [PATCH 3/5] sh_eth: add sh_eth_cpu_data::xdfar_rw flag From: Sergei Shtylyov To: netdev@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, linux-sh@vger.kernel.org References: Organization: Cogent Embedded Message-ID: <84d41287-b2ab-e4f5-5fb4-571820a7118b@cogentembedded.com> Date: Sat, 24 Mar 2018 23:09:55 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-MW Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The GEther-like controllers have writeable RDFAR/TDFAR, on the others they are read-only or just absent (on R-Car). Currently we are calling sh_eth_is_{gether|rz_fast_ether}() in order to check if these registers can be written to, however it would be simpler to check the new 'xdfar_rw' bitfield in the 'struct sh_eth_cpu_data'... Signed-off-by: Sergei Shtylyov --- drivers/net/ethernet/renesas/sh_eth.c | 11 +++++++---- drivers/net/ethernet/renesas/sh_eth.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) Index: net-next/drivers/net/ethernet/renesas/sh_eth.c =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.c +++ net-next/drivers/net/ethernet/renesas/sh_eth.c @@ -611,6 +611,7 @@ static struct sh_eth_cpu_data r7s72100_d .rpadir_value = 2 << 16, .no_trimd = 1, .no_ade = 1, + .xdfar_rw = 1, .hw_checksum = 1, .tsu = 1, }; @@ -659,6 +660,7 @@ static struct sh_eth_cpu_data r8a7740_da .rpadir_value = 2 << 16, .no_trimd = 1, .no_ade = 1, + .xdfar_rw = 1, .hw_checksum = 1, .tsu = 1, .select_mii = 1, @@ -918,6 +920,7 @@ static struct sh_eth_cpu_data sh7757_dat .rpadir_value = 2 << 16, .no_trimd = 1, .no_ade = 1, + .xdfar_rw = 1, .tsu = 1, .dual_port = 1, }; @@ -955,6 +958,7 @@ static struct sh_eth_cpu_data sh7734_dat .hw_swap = 1, .no_trimd = 1, .no_ade = 1, + .xdfar_rw = 1, .tsu = 1, .hw_checksum = 1, .select_mii = 1, @@ -993,6 +997,7 @@ static struct sh_eth_cpu_data sh7763_dat .hw_swap = 1, .no_trimd = 1, .no_ade = 1, + .xdfar_rw = 1, .tsu = 1, .irq_flags = IRQF_SHARED, .magic = 1, @@ -1301,8 +1306,7 @@ static void sh_eth_ring_format(struct ne /* Rx descriptor address set */ if (i == 0) { sh_eth_write(ndev, mdp->rx_desc_dma, RDLAR); - if (sh_eth_is_gether(mdp) || - sh_eth_is_rz_fast_ether(mdp)) + if (mdp->cd->xdfar_rw) sh_eth_write(ndev, mdp->rx_desc_dma, RDFAR); } } @@ -1324,8 +1328,7 @@ static void sh_eth_ring_format(struct ne if (i == 0) { /* Tx descriptor address set */ sh_eth_write(ndev, mdp->tx_desc_dma, TDLAR); - if (sh_eth_is_gether(mdp) || - sh_eth_is_rz_fast_ether(mdp)) + if (mdp->cd->xdfar_rw) sh_eth_write(ndev, mdp->tx_desc_dma, TDFAR); } } Index: net-next/drivers/net/ethernet/renesas/sh_eth.h =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.h +++ net-next/drivers/net/ethernet/renesas/sh_eth.h @@ -508,6 +508,7 @@ struct sh_eth_cpu_data { unsigned rpadir:1; /* E-DMAC have RPADIR */ unsigned no_trimd:1; /* E-DMAC DO NOT have TRIMD */ unsigned no_ade:1; /* E-DMAC DO NOT have ADE bit in EESR */ + unsigned xdfar_rw:1; /* E-DMAC has writeable RDFAR/TDFAR */ unsigned hw_checksum:1; /* E-DMAC has CSMR */ unsigned select_mii:1; /* EtherC have RMII_MII (MII select register) */ unsigned rmiimode:1; /* EtherC has RMIIMODE register */ From patchwork Sat Mar 24 20:11:19 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 890528 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cogentembedded.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=cogentembedded-com.20150623.gappssmtp.com header.i=@cogentembedded-com.20150623.gappssmtp.com header.b="zkiWnr3W"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 407s4H06sqz9s0b for ; Sun, 25 Mar 2018 07:11:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753449AbeCXULY (ORCPT ); Sat, 24 Mar 2018 16:11:24 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:39667 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753040AbeCXULW (ORCPT ); Sat, 24 Mar 2018 16:11:22 -0400 Received: by mail-lf0-f67.google.com with SMTP id p142-v6so22876571lfd.6 for ; Sat, 24 Mar 2018 13:11:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:references:organization:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=QGky3NWgaMnMcY4G+JMJKqCiZmMMzfZMIFmv4dUKRQM=; b=zkiWnr3WydzO0qyuSPmGEjCz/1A9HXZT9rcin5WLzKR7C9VA+nseniJEdnCbcYbwPr xsPpCUByEZRs5x7R5HYT7mtmZ55xW6IiB5wu1IJqb6p5FS9U99Y3ivQe4O+hKb/nJfDx tm8cu7dX4nCf5mS6ZmN7BRWV9TfZSkQwdJfVMhgGqYRfYyNHreLeSSLQPjP4Lyn7iDuF cxRt1Jb3M3Q43mfdYLfgg5EJ/DT8J7mJsifxB2SMbW8nZH5a4qBWYGu+3t9MjzFirtqu tpeeNTs/1YekPTVn2e/Bj2JdRm2yc5lFNDnb1oGxfA+7r2ZGSUohTQlyFm3HqEnTZ+lz 7z7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=QGky3NWgaMnMcY4G+JMJKqCiZmMMzfZMIFmv4dUKRQM=; b=ua+aiNdamtSzMQnSVFzeKysM7w6ekyMjREbdti7uHMtPKI+2rTUUOaJx3IECQjPl1z 4ny6Rioin6afdaTIISBu5sbSwhmB8OXLSpip/maqQbqm2uUxsxbeN2hucmogxYsd0P1h 93ITra0tOoQvIR7sCsVh9c3Bc5/hljyvMgDUUKE1xcZ2eQHFx5uuMfDI6slAIiXfdxoJ CrNAazTjq53NpKEShgtNy7cPhrL97XbgkBz9AypHiLt/xtE0HlaH6cQ5PHM7tK837dLz rAG6zz9jhR0XSHDrNxO2i1P4wEZTPTI5ST44nZRiU2OtKh3UU2BjpJBLKThDvparrSyl tSMg== X-Gm-Message-State: AElRT7FJcq2iSxF5M1yR9yn4g0OMdmjvrz+mOVkZ243JXkuWqovTh5rW IYx6xZmE2AEJW+BFwus081e68A== X-Google-Smtp-Source: AG47ELu13b20Dsl/tqXtqsyac5TE+Vih5FmkuHJAWOd7Jnx/0n+p2yezncGE2h+xPK8honPh1nnX0A== X-Received: by 2002:a19:4e5d:: with SMTP id c90-v6mr21789348lfb.98.1521922280580; Sat, 24 Mar 2018 13:11:20 -0700 (PDT) Received: from wasted.cogentembedded.com ([31.173.80.64]) by smtp.gmail.com with ESMTPSA id 1sm2613831lje.38.2018.03.24.13.11.19 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 24 Mar 2018 13:11:19 -0700 (PDT) Subject: [PATCH 4/5] sh_eth: add sh_eth_cpu_data::no_tx_cntr flag From: Sergei Shtylyov To: netdev@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, linux-sh@vger.kernel.org References: Organization: Cogent Embedded Message-ID: Date: Sat, 24 Mar 2018 23:11:19 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-MW Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org RZ/A1H (R7S72100) Ether controller doesn't seem to have the TX counter registers like TROCR/CDCR/LCCR (or at least they are still undocumented like some TSU registers), so we bail out of sh_eth_get_stats() early in this case. Currently we are calling sh_eth_is_rz_fast_ether() in order to check for this, but it would be simpler to check the new 'no_tx_cntrs' bitfield in the 'struct sh_eth_cpu_data'; then we'd be able to remove sh_eth_is_rz_fast_ether() as there would be no callers left... Signed-off-by: Sergei Shtylyov --- drivers/net/ethernet/renesas/sh_eth.c | 8 ++------ drivers/net/ethernet/renesas/sh_eth.h | 1 + 2 files changed, 3 insertions(+), 6 deletions(-) Index: net-next/drivers/net/ethernet/renesas/sh_eth.c =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.c +++ net-next/drivers/net/ethernet/renesas/sh_eth.c @@ -455,11 +455,6 @@ static bool sh_eth_is_gether(struct sh_e return mdp->reg_offset == sh_eth_offset_gigabit; } -static bool sh_eth_is_rz_fast_ether(struct sh_eth_private *mdp) -{ - return mdp->reg_offset == sh_eth_offset_fast_rz; -} - static void sh_eth_select_mii(struct net_device *ndev) { struct sh_eth_private *mdp = netdev_priv(ndev); @@ -614,6 +609,7 @@ static struct sh_eth_cpu_data r7s72100_d .xdfar_rw = 1, .hw_checksum = 1, .tsu = 1, + .no_tx_cntrs = 1, }; static void sh_eth_chip_reset_r8a7740(struct net_device *ndev) @@ -2534,7 +2530,7 @@ static struct net_device_stats *sh_eth_g { struct sh_eth_private *mdp = netdev_priv(ndev); - if (sh_eth_is_rz_fast_ether(mdp)) + if (mdp->cd->no_tx_cntrs) return &ndev->stats; if (!mdp->is_opened) Index: net-next/drivers/net/ethernet/renesas/sh_eth.h =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.h +++ net-next/drivers/net/ethernet/renesas/sh_eth.h @@ -514,6 +514,7 @@ struct sh_eth_cpu_data { unsigned rmiimode:1; /* EtherC has RMIIMODE register */ unsigned rtrate:1; /* EtherC has RTRATE register */ unsigned magic:1; /* EtherC has ECMR.MPDE and ECSR.MPD */ + unsigned no_tx_cntrs:1; /* EtherC DOES NOT have TX error counters */ unsigned dual_port:1; /* Dual EtherC/E-DMAC */ }; From patchwork Sat Mar 24 20:12:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 890529 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cogentembedded.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=cogentembedded-com.20150623.gappssmtp.com header.i=@cogentembedded-com.20150623.gappssmtp.com header.b="FF1yuNG7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 407s671X5kz9s1l for ; Sun, 25 Mar 2018 07:13:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753340AbeCXUNA (ORCPT ); Sat, 24 Mar 2018 16:13:00 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:43771 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753319AbeCXUM6 (ORCPT ); Sat, 24 Mar 2018 16:12:58 -0400 Received: by mail-lf0-f66.google.com with SMTP id v207-v6so22881051lfa.10 for ; Sat, 24 Mar 2018 13:12:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=subject:from:to:cc:references:organization:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=3DmZ5znltq708J5nQTuD92IGJ+QQFPtICjhWLdAXUQA=; b=FF1yuNG7tBXkcLgOP0eYVX8dTRcngt7rbKnUvf9ePw7JlYTZ0HeNVWkAaxturGvCr6 SQmI9Zhupj7IdisdX+yMOCH5UKtR4LG7CuMxTMcLBKOO+OQiBaKs5n2PtfbDbL5aA6/J 5fbwPtC63Y4FOVT5P0oAj8AQI7FOvxeW1LtGAGxnyChlGaxL2MJEqcwnQdRSIlTpq501 nqldd1Ay9bo1f/1V0IGfVAM9e5lNCbL7sHTO5V6k8/AfIlk61Xq+9jbRZtQxvkCevZlv xSBzcPAuA3QAl2fcspWK657kmKMMOFaJARhCbmw09LDHP6fsm3qMoSbgMC94Qv4UBGwB LKOA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:references:organization :message-id:date:user-agent:mime-version:in-reply-to :content-language:content-transfer-encoding; bh=3DmZ5znltq708J5nQTuD92IGJ+QQFPtICjhWLdAXUQA=; b=cdcz2c0wYMaosTD7bFvqrGtCU8vqbYJkWnYQrQCidFBGJOY1wmMXglIaTU7nuEqxFl dE7b6DgDSUUYyT2EXC8MTDoThK5vRbKQd3SgPP5LOzdTt+tcRSLkZV9POCkuECJYtONT RBxc+/Q5IimLd1biV+vKCy6wQNDRpOcS8g8QWTzUjj5rhN4pSO5Abo53nNQJ2SJoDWOq oWcD+7SekZFD/gIYmjwyivHggR6WMrD8v/KQnvi2L7d8bjNZH3ruRTrSzXU+84t/WEz8 NV9s0Yp9SenOJlavotuv/fBPwBLDrpH/BtABzKejf2sUUuwm9qKYoNzxHqQWjqV+wkdX oCdg== X-Gm-Message-State: AElRT7Ei7LxmzDVvZJCm28DKx+vmbu/5EZb2vgbFoADJpCyabDKgXRj/ pcuqEG+X8Z4R4QG7AxPkDfZHJg== X-Google-Smtp-Source: AG47ELv8beX5cYphmpvf1SN8wRVtKqmsT7ji7ckzR5FmbDWVSFy7/Cm0/VFu9HlKH+EHzzoVEEl+og== X-Received: by 10.46.65.73 with SMTP id o70mr13499427lja.140.1521922376436; Sat, 24 Mar 2018 13:12:56 -0700 (PDT) Received: from wasted.cogentembedded.com ([31.173.80.64]) by smtp.gmail.com with ESMTPSA id 200sm2578085ljf.12.2018.03.24.13.12.55 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 24 Mar 2018 13:12:55 -0700 (PDT) Subject: [PATCH 5/5] sh_eth: add sh_eth_cpu_data::cexcr flag From: Sergei Shtylyov To: netdev@vger.kernel.org Cc: linux-renesas-soc@vger.kernel.org, linux-sh@vger.kernel.org References: Organization: Cogent Embedded Message-ID: <58a630fa-0e76-dea7-bf11-ad872a4de061@cogentembedded.com> Date: Sat, 24 Mar 2018 23:12:54 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Language: en-MW Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org GEther controllers have CERCR/CEECR instead of CNDCR on the others. Currently we are calling sh_eth_is_gether() in order to check for this, however it would be simpler to check the new 'cexcr' bitfield in the 'struct sh_eth_cpu_data'; then we'd be able to remove sh_eth_is_gether() as there would be no callers left... Signed-off-by: Sergei Shtylyov --- drivers/net/ethernet/renesas/sh_eth.c | 11 +++++------ drivers/net/ethernet/renesas/sh_eth.h | 1 + 2 files changed, 6 insertions(+), 6 deletions(-) Index: net-next/drivers/net/ethernet/renesas/sh_eth.c =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.c +++ net-next/drivers/net/ethernet/renesas/sh_eth.c @@ -450,11 +450,6 @@ static u32 sh_eth_tsu_read(struct sh_eth return ioread32(mdp->tsu_addr + mdp->reg_offset[enum_index]); } -static bool sh_eth_is_gether(struct sh_eth_private *mdp) -{ - return mdp->reg_offset == sh_eth_offset_gigabit; -} - static void sh_eth_select_mii(struct net_device *ndev) { struct sh_eth_private *mdp = netdev_priv(ndev); @@ -661,6 +656,7 @@ static struct sh_eth_cpu_data r8a7740_da .tsu = 1, .select_mii = 1, .magic = 1, + .cexcr = 1, }; /* There is CPU dependent code */ @@ -918,6 +914,7 @@ static struct sh_eth_cpu_data sh7757_dat .no_ade = 1, .xdfar_rw = 1, .tsu = 1, + .cexcr = 1, .dual_port = 1, }; @@ -959,6 +956,7 @@ static struct sh_eth_cpu_data sh7734_dat .hw_checksum = 1, .select_mii = 1, .magic = 1, + .cexcr = 1, }; /* SH7763 */ @@ -997,6 +995,7 @@ static struct sh_eth_cpu_data sh7763_dat .tsu = 1, .irq_flags = IRQF_SHARED, .magic = 1, + .cexcr = 1, .dual_port = 1, }; @@ -2540,7 +2539,7 @@ static struct net_device_stats *sh_eth_g sh_eth_update_stat(ndev, &ndev->stats.collisions, CDCR); sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, LCCR); - if (sh_eth_is_gether(mdp)) { + if (mdp->cd->cexcr) { sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, CERCR); sh_eth_update_stat(ndev, &ndev->stats.tx_carrier_errors, Index: net-next/drivers/net/ethernet/renesas/sh_eth.h =================================================================== --- net-next.orig/drivers/net/ethernet/renesas/sh_eth.h +++ net-next/drivers/net/ethernet/renesas/sh_eth.h @@ -515,6 +515,7 @@ struct sh_eth_cpu_data { unsigned rtrate:1; /* EtherC has RTRATE register */ unsigned magic:1; /* EtherC has ECMR.MPDE and ECSR.MPD */ unsigned no_tx_cntrs:1; /* EtherC DOES NOT have TX error counters */ + unsigned cexcr:1; /* EtherC has CERCR/CEECR */ unsigned dual_port:1; /* Dual EtherC/E-DMAC */ };