From patchwork Sat Feb 24 19:41:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Shtylyov X-Patchwork-Id: 877451 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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="ztJ8z83z"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zpdlB0ZyVz9sW8 for ; Sun, 25 Feb 2018 06:41:57 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751424AbeBXTlv (ORCPT ); Sat, 24 Feb 2018 14:41:51 -0500 Received: from mail-lf0-f68.google.com ([209.85.215.68]:43921 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751378AbeBXTlu (ORCPT ); Sat, 24 Feb 2018 14:41:50 -0500 Received: by mail-lf0-f68.google.com with SMTP id q69so16908142lfi.10 for ; Sat, 24 Feb 2018 11:41:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cogentembedded-com.20150623.gappssmtp.com; s=20150623; h=from:subject:to:cc:organization:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=ey+ugf6XlKdm1NHEQUEsHUEbcFJp5dDu3ycfGH6ZTkg=; b=ztJ8z83zPtpoCbaUUcjbAyW602GQ3PIx+YjwfwKNRs4+btNaNeEgfMQjuEUk/nDiTX 4WsA7VPug91+v/W4jw+QcHcow8PV1eu8Zf55j515wvTlBwmrI2jhDb8bBe4tYE/SK7wc ZFTC6C0YPTEFRQyBdOMjsmpg6tcn1YCxbaVTtNAPtTHMkwMzRJv+FqRIu1v10qy36jEE QWhD2y2tcrEybxy6jHZSMHUmAdTZSjM4OHuJucmFYJjp1xYcRyGlbwlvfI7UNwygPV29 olNBdLJP7yQ81cLF5sut2qAIUKMr4TvL01zPi0bY20QCMWv9svKgMZn3cRwTcUGwBovs WOgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:organization:message-id:date :user-agent:mime-version:content-language:content-transfer-encoding; bh=ey+ugf6XlKdm1NHEQUEsHUEbcFJp5dDu3ycfGH6ZTkg=; b=BR93BSo8pO8iukE+KPFURr6mbo5VaW9n5EVSN/l33aHMWkLkrzmbN/5wt4VE7xIRwS fWJp+2o1tw1wD3yEm0yKD/Uqj/dcJaAJyytoAcOOijTeQdNWKONH0fWmhP4kgwXWRwub OYIb8/1p4Ggd1FJCnE1F98xaZDhB4iWX8pLtL0cnJ1bDc01SFkEIhA5FmMq0wgZFEiKl XNes7d0VUmwJUoKGG3+Kvgn/zUhoJ9X2OwEEhoiZ2GN3hyJH/p6mMh15DWkcJSLs39Hh wFdkbLvJxTmuXV6QQzA0Zim+cQx5WB22FUoyo3WKVAfCVXI0vu0DUWEdIJ3g6n3mJ6p2 ckuQ== X-Gm-Message-State: APf1xPC5y6PAJbQoawb2NLo6u5gn8GEAl0pbz/o36uRaZ3qt4hA5tvFQ Tp87DYDb/FmADemIKvPQKyC+68LQi6Y= X-Google-Smtp-Source: AG47ELs0bMZGpbsju2lCAcT10OrqXFw7eNkblahRlY1ukqumGrQBl85a8tZI/7OUDT5eJj3QRectWA== X-Received: by 10.25.76.9 with SMTP id z9mr4020638lfa.141.1519501308418; Sat, 24 Feb 2018 11:41:48 -0800 (PST) Received: from wasted.cogentembedded.com ([31.173.87.160]) by smtp.gmail.com with ESMTPSA id z6sm1109247ljc.23.2018.02.24.11.41.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sat, 24 Feb 2018 11:41:47 -0800 (PST) From: Sergei Shtylyov Subject: [PATCH net-next] sh_eth: fix TSU init on SH7734/R8A7740 To: "netdev@vger.kernel.org" Cc: linux-renesas-soc@vger.kernel.org Organization: Cogent Embedded Message-ID: <9fc53eac-5513-00be-2430-ceb4b6f57e9b@cogentembedded.com> Date: Sat, 24 Feb 2018 22:41:45 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 Content-Language: en-MW Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org It appears that the single port Ether controllers having TSU (like SH7734/ R8A7740) need the same kind of treating in sh_eth_tsu_init() as R7S72100 currently has -- they also don't have the TSU registers related e.g. to passing the frames between ports. Add the 'sh_eth_cpu_data::dual_port' flag and use it as a new criterion for taking a "short path" in the TSU init sequence in order to avoid writing to the non-existant registers... Fixes: f0e81fecd4f8 ("net: sh_eth: Add support SH7734") Fixes: 73a0d907301e ("net: sh_eth: add support R8A7740") Signed-off-by: Sergei Shtylyov Tested-by: Geert Uytterhoeven --- David, I'm submitting this patch against the 'net-next.git' repo since nothing seems to explode when writing to the non-existing TSU registers. Whether to apply this to 'net.git' instead is up to you... drivers/net/ethernet/renesas/sh_eth.c | 6 +++++- drivers/net/ethernet/renesas/sh_eth.h | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) 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 @@ -752,6 +752,7 @@ static struct sh_eth_cpu_data sh7757_dat .rpadir = 1, .rpadir_value = 2 << 16, .rtrate = 1, + .dual_port = 1, }; #define SH_GIGA_ETH_BASE 0xfee00000UL @@ -830,6 +831,7 @@ static struct sh_eth_cpu_data sh7757_dat .no_trimd = 1, .no_ade = 1, .tsu = 1, + .dual_port = 1, }; /* SH7734 */ @@ -900,6 +902,7 @@ static struct sh_eth_cpu_data sh7763_dat .tsu = 1, .irq_flags = IRQF_SHARED, .magic = 1, + .dual_port = 1, }; static struct sh_eth_cpu_data sh7619_data = { @@ -932,6 +935,7 @@ static struct sh_eth_cpu_data sh771x_dat EESIPR_RRFIP | EESIPR_RTLFIP | EESIPR_RTSFIP | EESIPR_PREIP | EESIPR_CERFIP, .tsu = 1, + .dual_port = 1, }; static void sh_eth_set_default_cpu_data(struct sh_eth_cpu_data *cd) @@ -2915,7 +2919,7 @@ static int sh_eth_vlan_rx_kill_vid(struc /* SuperH's TSU register init function */ static void sh_eth_tsu_init(struct sh_eth_private *mdp) { - if (sh_eth_is_rz_fast_ether(mdp)) { + if (!mdp->cd->dual_port) { sh_eth_tsu_write(mdp, 0, TSU_TEN); /* Disable all CAM entry */ sh_eth_tsu_write(mdp, TSU_FWSLC_POSTENU | TSU_FWSLC_POSTENL, TSU_FWSLC); /* Enable POST registers */ 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 @@ -509,6 +509,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 dual_port:1; /* Dual EtherC/E-DMAC */ }; struct sh_eth_private {