From patchwork Mon Jan 28 18:56:23 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thomas Petazzoni X-Patchwork-Id: 2057451 X-Patchwork-Delegate: bhelgaas@google.com Return-Path: X-Original-To: patchwork-linux-pci@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 69D193FD1A for ; Mon, 28 Jan 2013 18:57:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753016Ab3A1S5H (ORCPT ); Mon, 28 Jan 2013 13:57:07 -0500 Received: from mail.free-electrons.com ([94.23.35.102]:58278 "EHLO mail.free-electrons.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752281Ab3A1S5D (ORCPT ); Mon, 28 Jan 2013 13:57:03 -0500 Received: by mail.free-electrons.com (Postfix, from userid 106) id C0766669C; Mon, 28 Jan 2013 19:57:04 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on mail.free-electrons.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT shortcircuit=ham autolearn=disabled version=3.3.2 Received: from localhost (humanoidz.org [82.247.183.72]) by mail.free-electrons.com (Postfix) with ESMTPSA id 09F365EEC; Mon, 28 Jan 2013 19:57:04 +0100 (CET) From: Thomas Petazzoni To: Bjorn Helgaas , linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: Jason Cooper , Andrew Lunn , Gregory Clement , Arnd Bergmann , Maen Suleiman , Lior Amsalem , Thierry Reding , Eran Ben-Avi , Nadav Haklai , Shadi Ammouri , Tawfik Bayouk , Stephen Warren , Jason Gunthorpe , Russell King - ARM Linux Subject: [PATCH v2 14/27] arm: plat-orion: refactor the orion_disable_wins() function Date: Mon, 28 Jan 2013 19:56:23 +0100 Message-Id: <1359399397-29729-15-git-send-email-thomas.petazzoni@free-electrons.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1359399397-29729-1-git-send-email-thomas.petazzoni@free-electrons.com> References: <1359399397-29729-1-git-send-email-thomas.petazzoni@free-electrons.com> Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org In the address decoding code, the orion_disable_wins() function is used at boot time to disable all address decoding windows, before configuring only the ones that are needed. This allows to make sure that no configuration is left from the bootloader. As a preparation for the introduction of address decoding window allocation/deallocation function, we refactor this function into an orion_disable_cpu_win() which disables a single window. The orion_config_wins() function is changed to call orion_disable_cpu_win() in a loop, to preserve an identical behavior. Signed-off-by: Thomas Petazzoni --- arch/arm/plat-orion/addr-map.c | 35 +++++++++++++++++------------------ 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/arch/arm/plat-orion/addr-map.c b/arch/arm/plat-orion/addr-map.c index 4dec3db..dd98638 100644 --- a/arch/arm/plat-orion/addr-map.c +++ b/arch/arm/plat-orion/addr-map.c @@ -95,6 +95,19 @@ void __init orion_setup_cpu_win(const struct orion_addr_map_cfg *cfg, } } +static void __init orion_disable_cpu_win(const struct orion_addr_map_cfg *cfg, + const int win) +{ + void __iomem *addr = cfg->win_cfg_base(cfg, win); + + writel(0, addr + WIN_BASE_OFF); + writel(0, addr + WIN_CTRL_OFF); + if (cfg->cpu_win_can_remap(cfg, win)) { + writel(0, addr + WIN_REMAP_LO_OFF); + writel(0, addr + WIN_REMAP_HI_OFF); + } +} + /* * Configure a number of windows. */ @@ -108,36 +121,22 @@ static void __init orion_setup_cpu_wins(const struct orion_addr_map_cfg * cfg, } } -static void __init orion_disable_wins(const struct orion_addr_map_cfg * cfg) -{ - void __iomem *addr; - int i; - - for (i = 0; i < cfg->num_wins; i++) { - addr = cfg->win_cfg_base(cfg, i); - - writel(0, addr + WIN_BASE_OFF); - writel(0, addr + WIN_CTRL_OFF); - if (cfg->cpu_win_can_remap(cfg, i)) { - writel(0, addr + WIN_REMAP_LO_OFF); - writel(0, addr + WIN_REMAP_HI_OFF); - } - } -} - /* * Disable, clear and configure windows. */ void __init orion_config_wins(struct orion_addr_map_cfg * cfg, const struct orion_addr_map_info *info) { + int win; + if (!cfg->cpu_win_can_remap) cfg->cpu_win_can_remap = orion_cpu_win_can_remap; if (!cfg->win_cfg_base) cfg->win_cfg_base = orion_win_cfg_base; - orion_disable_wins(cfg); + for (win = 0; win < cfg->num_wins; win++) + orion_disable_cpu_win(cfg, win); if (info) orion_setup_cpu_wins(cfg, info);