From patchwork Tue Oct 27 16:35:53 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Neil Armstrong X-Patchwork-Id: 536731 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 12D4B14030E for ; Wed, 28 Oct 2015 03:37:03 +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=kjwTQr+a; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965053AbbJ0QgE (ORCPT ); Tue, 27 Oct 2015 12:36:04 -0400 Received: from mail-wi0-f173.google.com ([209.85.212.173]:33143 "EHLO mail-wi0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S965047AbbJ0Qf5 (ORCPT ); Tue, 27 Oct 2015 12:35:57 -0400 Received: by wijp11 with SMTP id p11so222394761wij.0 for ; Tue, 27 Oct 2015 09:35:56 -0700 (PDT) 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=AQP6M4shn9DdHN//tXg5t/U3XF5mi0kfq27UrZ7zUxo=; b=kjwTQr+azEHE29D3YTwdLa5pPcVOJjvO5TSZdypE2fq7nwek1ODeRo8AhqZ/9PPUUS CqkPDWSsABPxbgrF8dunOhCCvr4mWL/1sLuqYuIvHHyIzWryFHXwlITdOV1ag8lXL9kJ p2zSdf6sL5BfzFJzo7pFnBBZZ0GufbqCPVo2WnjgK3iEjtPXYwBii4GVcR+6ldzBex+x W6OS9cy97hg0ahAbzDv0rehxwK3jxjVIvWLxWoCxfqSa+yCc6x7dLevHi/2X1kxaX9Cb g34Rtk7Ek6H83MCywboaAfD619nZqRu1AA+mDCYCzmKw4Wtao9a3/LOCdtEKhoxzaUC6 KeuA== 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=AQP6M4shn9DdHN//tXg5t/U3XF5mi0kfq27UrZ7zUxo=; b=D3eZ6SlmFOKXLF6Z9bTwaj8MYNWbbkZdHoi6NM9NQ5Ov2zpdVSCUUcXN7LhY0vqQed 0X6K+cuRhgxaKoci1nuGXXrd27zAox9IbLLsDJuKbS8Y9I37MswLVU9gNBIzx1KIwnBu 1/t0lG8AQ9MyQUSXoO90AK+rxIowXoHcZTZ6Wbu5dLOm0UUiDcB+n/EHMZUqO2vsDZwI lbKF5erkZFED0mZqA6B85spOVjb6Q9IABp/SjldmFzAP9c/qXayQK15148Mq+bPfBanR kuNtzlRceXaybaV4eH9gpG8vqvDYSBrWINQZ2nE1m0LX/tZAMQftLh78G0I6E4QWZnqL Xreg== X-Gm-Message-State: ALoCoQmItjNd+0YgE1Y+8p9VR/UHTrLNUHIB6/7wovcKD3P1Vmq80tsOG9mZzQ74wCw32duofpuS X-Received: by 10.194.249.35 with SMTP id yr3mr32825244wjc.17.1445963756016; Tue, 27 Oct 2015 09:35:56 -0700 (PDT) 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 it4sm45705172wjb.0.2015.10.27.09.35.54 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 27 Oct 2015 09:35:55 -0700 (PDT) From: Neil Armstrong Subject: [RFC PATCH 1/3] net: dsa: bcm_sf2: cleanup resources in remove callback To: "David S. Miller" Cc: Andrew Lunn , Florian Fainelli , Guenter Roeck , vivien.didelot@savoirfairelinux.com, Fabian Frederick , Pavel Nakonechny , Joe Perches , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Organization: Baylibre Message-ID: <562FA7E9.5080005@baylibre.com> Date: Tue, 27 Oct 2015 17:35:53 +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 Implement a remove callback allowing the switch driver to cleanup resources it used: interrupts and remapped register ranges. Signed-off-by: Florian Fainelli Signed-off-by: Neil Armstrong --- drivers/net/dsa/bcm_sf2.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/net/dsa/bcm_sf2.c b/drivers/net/dsa/bcm_sf2.c index 6f946fe..e0be318 100644 --- a/drivers/net/dsa/bcm_sf2.c +++ b/drivers/net/dsa/bcm_sf2.c @@ -1054,6 +1054,25 @@ out_unmap: return ret; } +static void bcm_sf2_sw_remove(struct dsa_switch *ds) +{ + struct bcm_sf2_priv *priv = ds_to_priv(ds); + void __iomem **base; + unsigned int i; + + /* Disable all interrupts and free them */ + bcm_sf2_intr_disable(priv); + + free_irq(priv->irq0, priv); + free_irq(priv->irq1, priv); + + base = &priv->core; + for (i = 0; i < BCM_SF2_REGS_NUM; i++) { + iounmap(*base); + base++; + } +} + static int bcm_sf2_sw_set_addr(struct dsa_switch *ds, u8 *addr) { return 0; @@ -1367,6 +1386,7 @@ static struct dsa_switch_driver bcm_sf2_switch_driver = { .tag_protocol = DSA_TAG_PROTO_BRCM, .priv_size = sizeof(struct bcm_sf2_priv), .probe = bcm_sf2_sw_probe, + .remove = bcm_sf2_sw_remove, .setup = bcm_sf2_sw_setup, .set_addr = bcm_sf2_sw_set_addr, .get_phy_flags = bcm_sf2_sw_get_phy_flags,