From patchwork Mon Dec 17 08:35:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chris Packham X-Patchwork-Id: 1014350 X-Patchwork-Delegate: sr@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.denx.de (client-ip=81.169.180.215; helo=lists.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="N0vajLIt"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 43JF1X4V9lz9sDN for ; Mon, 17 Dec 2018 19:38:56 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 272BFC21E29; Mon, 17 Dec 2018 08:37:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on lists.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.0 required=5.0 tests=FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.0 Received: from lists.denx.de (localhost [IPv6:::1]) by lists.denx.de (Postfix) with ESMTP id 79874C22037; Mon, 17 Dec 2018 08:36:43 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id ADE4BC21DD4; Mon, 17 Dec 2018 08:36:15 +0000 (UTC) Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) by lists.denx.de (Postfix) with ESMTPS id C5EF4C21E74 for ; Mon, 17 Dec 2018 08:36:11 +0000 (UTC) Received: by mail-pl1-f195.google.com with SMTP id t13so5770577ply.13 for ; Mon, 17 Dec 2018 00:36:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dnD7cq/x+7TEs+6QjOl0Y2QYFLWHjVYykIKyD+LuOqo=; b=N0vajLItis9WM5oejrDVgmHiPPkNVRBv5y7Ds9B5zC6D6aLnW7BnMUh0FYS/vwxLt1 VTa2225ZJLhcprMrMJBvoiTQbpQHRuhIMw2qMxOaRCCh9BIDLtD17F3TYOMaOwF9Ckuu uQO69HcSqgqyUAYaOjT8ywSUd5vQ83qmyZF/fMzszixZ6kydGSxYnrf37Cwh0UMOhHof 88E8ca/3nGVpAKApQbkPJN7O9wChis5Okh4KMjEKayvdsUQWm6aIHR47+KYRlsldZ05b jDaJ3zLTMDJl+gH04KPNI19LNyKx/3AJzCCwo1xz24nhQMVpcrzgTU5TaSH2Rw3fXUmP 88AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dnD7cq/x+7TEs+6QjOl0Y2QYFLWHjVYykIKyD+LuOqo=; b=qn7VtX+z5wXpArjHc8vFrenQIym3wb6cxc2UH3pO9iAmYPVqXH796tfs3JJFy4d9/7 lAek46f/Oj9jz0hiIx2jWRQ93bqsHvviAx7WyDnemIiGT6Q/YSWnRqesSQtPZXFEVJWS BT/NIo8MxNKx/Qwe54ORy+aKv9U99kFz650fKMp22JU6XZK9FaSmICf5j7+hHfUSY/le Evw9zugjnWzsl8KRA01y6PXAK0BRwp1xwqP1EqgexiBEUD/295nG+pqTBjxTQw11Ufz3 rOzUEGUbNleFQ55HuPnRpVoCP9S9xDjSD2xzt+k3c2dpCFphV1invb4zWI5oz0YR4ax5 iJbA== X-Gm-Message-State: AA+aEWZllFvJPMf28WFXKbleq+iCzQB6LCj3lznEJepkJR8mJzthaxFf G7UOzlkhzZspf/APBhnpsccjGdh8SLY= X-Google-Smtp-Source: AFSGD/WDLlYnzedWxftkMqtoYWCtfDxG9cOh1FMwrCY/vnJSXYm30c5eJQryDFunt6sN1SQbqf3kQw== X-Received: by 2002:a17:902:7791:: with SMTP id o17mr11698618pll.60.1545035770129; Mon, 17 Dec 2018 00:36:10 -0800 (PST) Received: from chrisp-dl.ws.atlnz.lc ([2001:df5:b000:22:3a2c:4aff:fe70:2b02]) by smtp.gmail.com with ESMTPSA id o4sm20469787pgs.12.2018.12.17.00.36.05 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 17 Dec 2018 00:36:09 -0800 (PST) From: Chris Packham To: u-boot@lists.denx.de Date: Mon, 17 Dec 2018 21:35:27 +1300 Message-Id: <20181217083529.19030-6-judge.packham@gmail.com> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181217083529.19030-1-judge.packham@gmail.com> References: <20181217083529.19030-1-judge.packham@gmail.com> MIME-Version: 1.0 Cc: Stefan Roese , Luka Perkov , Prafulla Wadaskar , Chris Packham , Tom Rini Subject: [U-Boot] [RFC PATCH v1 5/7] ARM: kirkwood: switch to using mvebu mbus X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.18 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" The mvebu mbus code already had most of the support required for kirkwood. The only difference is that unlike the other mvebu targets kirkwood doesn't have a bridge control block so the code related to managing that needs to be compiled out. Signed-off-by: Chris Packham --- arch/arm/mach-kirkwood/cpu.c | 33 ++++++++++++++++++++--- arch/arm/mach-kirkwood/include/mach/cpu.h | 11 ++++++++ arch/arm/mach-mvebu/Makefile | 1 + arch/arm/mach-mvebu/mbus.c | 6 +++++ 4 files changed, 48 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-kirkwood/cpu.c b/arch/arm/mach-kirkwood/cpu.c index 95dd07f840ca..009b49287b7f 100644 --- a/arch/arm/mach-kirkwood/cpu.c +++ b/arch/arm/mach-kirkwood/cpu.c @@ -110,6 +110,32 @@ int kw_config_adr_windows(void) return 0; } +static struct mbus_win windows[] = { + /* Window 0: PCIE MEM address space */ + { KW_DEFADR_PCI_MEM, 1024 * 1024 * 256, + KWCPU_TARGET_PCIE, KWCPU_ATTR_PCIE_MEM }, + + /* Window 1: PCIE IO address space */ + { KW_DEFADR_PCI_IO, 1024 * 64, + KWCPU_TARGET_PCIE, KWCPU_ATTR_PCIE_IO }, + + /* Window 2: NAND Flash address space */ + { KW_DEFADR_NANDF, 1024 * 1024 * 128, + KWCPU_TARGET_MEMORY, KWCPU_ATTR_NANDFLASH }, + + /* Window 3: SPI Flash address space */ + { KW_DEFADR_SPIF, 1024 * 1024 * 128, + KWCPU_TARGET_MEMORY, KWCPU_ATTR_SPIFLASH }, + + /* Window 4: BOOT Memory address space */ + { KW_DEFADR_BOOTROM, 1024 * 1024 * 128, + KWCPU_TARGET_MEMORY, KWCPU_ATTR_BOOTROM }, + + /* Window 5: Security SRAM address space */ + { KW_DEFADR_SASRAM, 1024 * 64, + KWCPU_TARGET_SASRAM, KWCPU_ATTR_SASRAM }, +}; + /* * SYSRSTn Duration Counter Support * @@ -221,15 +247,13 @@ int arch_cpu_init(void) struct kwcpu_registers *cpureg = (struct kwcpu_registers *)KW_CPU_REG_BASE; - /* Linux expects` the internal registers to be at 0xf1000000 */ + /* Linux expects the internal registers to be at 0xf1000000 */ writel(KW_REGS_PHY_BASE, KW_OFFSET_REG); /* Enable and invalidate L2 cache in write through mode */ writel(readl(&cpureg->l2_cfg) | 0x18, &cpureg->l2_cfg); invalidate_l2_cache(); - kw_config_adr_windows(); - #ifdef CONFIG_KIRKWOOD_RGMII_PAD_1V8 /* * Configures the I/O voltage of the pads connected to Egigabit @@ -296,6 +320,9 @@ int arch_misc_init(void) temp = get_cr(); set_cr(temp & ~CR_V); + /* Configure mbus windows */ + mvebu_mbus_probe(windows, ARRAY_SIZE(windows)); + /* checks and execute resset to factory event */ kw_sysrst_check(); diff --git a/arch/arm/mach-kirkwood/include/mach/cpu.h b/arch/arm/mach-kirkwood/include/mach/cpu.h index c35cace844ae..3d6b15568a8a 100644 --- a/arch/arm/mach-kirkwood/include/mach/cpu.h +++ b/arch/arm/mach-kirkwood/include/mach/cpu.h @@ -68,6 +68,13 @@ enum kwcpu_attrib { #define KW_DEFADR_SPIF 0xE8000000 #define KW_DEFADR_BOOTROM 0xF8000000 +struct mbus_win { + u32 base; + u32 size; + u8 target; + u8 attr; +}; + /* * read feroceon/sheeva core extra feature register * using co-proc instruction @@ -134,6 +141,9 @@ struct kwgpio_registers { u32 irq_level; }; +/* Needed for dynamic (board-specific) mbus configuration */ +extern struct mvebu_mbus_state mbus_state; + /* * functions */ @@ -141,6 +151,7 @@ unsigned int mvebu_sdram_bar(enum memory_bank bank); unsigned int mvebu_sdram_bs(enum memory_bank bank); void mvebu_sdram_size_adjust(enum memory_bank bank); int kw_config_adr_windows(void); +int mvebu_mbus_probe(struct mbus_win windows[], int count); void mvebu_config_gpio(unsigned int gpp0_oe_val, unsigned int gpp1_oe_val, unsigned int gpp0_oe, unsigned int gpp1_oe); int kw_config_mpp(unsigned int mpp0_7, unsigned int mpp8_15, diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile index ee2eca913484..c0274a6f09aa 100644 --- a/arch/arm/mach-mvebu/Makefile +++ b/arch/arm/mach-mvebu/Makefile @@ -14,6 +14,7 @@ ifdef CONFIG_KIRKWOOD obj-y = dram.o obj-y += gpio.o +obj-y += mbus.o obj-y += timer.o else # CONFIG_KIRKWOOD diff --git a/arch/arm/mach-mvebu/mbus.c b/arch/arm/mach-mvebu/mbus.c index df4c5cb2d718..9b2c57348266 100644 --- a/arch/arm/mach-mvebu/mbus.c +++ b/arch/arm/mach-mvebu/mbus.c @@ -405,6 +405,7 @@ int mvebu_mbus_del_window(phys_addr_t base, size_t size) return 0; } +#ifndef CONFIG_KIRKWOOD static void mvebu_mbus_get_lowest_base(struct mvebu_mbus_state *mbus, phys_addr_t *base) { @@ -428,7 +429,9 @@ static void mvebu_mbus_get_lowest_base(struct mvebu_mbus_state *mbus, *base = wbase; } } +#endif +#ifndef CONFIG_KIRKWOOD static void mvebu_config_mbus_bridge(struct mvebu_mbus_state *mbus) { phys_addr_t base; @@ -451,6 +454,7 @@ static void mvebu_config_mbus_bridge(struct mvebu_mbus_state *mbus) val = (size / (64 << 10)) - 1; writel((val << 16) | 0x1, MBUS_BRIDGE_WIN_CTRL_REG); } +#endif int mbus_dt_setup_win(struct mvebu_mbus_state *mbus, u32 base, u32 size, u8 target, u8 attr) @@ -471,12 +475,14 @@ int mbus_dt_setup_win(struct mvebu_mbus_state *mbus, return -ENOMEM; } +#ifndef CONFIG_KIRKWOOD /* * Re-configure the mbus bridge registers each time this function * is called. Since it may get called from the board code in * later boot stages as well. */ mvebu_config_mbus_bridge(mbus); +#endif return 0; }