From patchwork Wed Nov 29 15:30:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Linus Walleij X-Patchwork-Id: 842624 X-Patchwork-Delegate: blogic@openwrt.org Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (helo) smtp.helo=arrakis.dune.hu (client-ip=78.24.191.176; helo=arrakis.dune.hu; envelope-from=openwrt-devel-bounces@lists.openwrt.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="S4aC94sf"; dkim-atps=neutral Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3yn4Kr74chz9s74 for ; Thu, 30 Nov 2017 02:32:48 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id F2845B80481; Wed, 29 Nov 2017 16:32:43 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=unavailable autolearn_force=no version=3.4.1 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP; Wed, 29 Nov 2017 16:32:43 +0100 (CET) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 1B726B800C0 for ; Wed, 29 Nov 2017 16:32:42 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 CL_IP_EQ_HELO_IP=-2 (check from: .linaro. - helo: .mail-lf0-f66.google. - helo-domain: .google.) FROM/MX_MATCHES_HELO(DOMAIN)=-2; rate: -7 Received: from mail-lf0-f66.google.com (mail-lf0-f66.google.com [209.85.215.66]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Wed, 29 Nov 2017 16:32:40 +0100 (CET) Received: by mail-lf0-f66.google.com with SMTP id x20so4368045lff.1 for ; Wed, 29 Nov 2017 07:32:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id; bh=7QXwPmraSGm1tKNoYTGM7qpbyKEZVvludufaUhbxqhQ=; b=S4aC94sffPb14wdjj8c6Zs7QZ39Z5MxhsJEKuuS1EKAVE2YbtU0CSFu2VB1Vp+G6IQ +cLEm0qBoQdZU+proKY0gMgMkc9GwSteLeXe4RxdrCmRoVICfJP5Uo/Fb9UqpyE4lUjK 8OcIHv8fTxIxqaJcQOXuanmG0P9YyvMfspHPo= 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; bh=7QXwPmraSGm1tKNoYTGM7qpbyKEZVvludufaUhbxqhQ=; b=BZE3zAPwJS83RtRunO44eKYaDBGGYJ19zO+eC+vPB7IEa+HEzvWZdHqa2RBErExX4n 08RHhnqIPLmAMWz7bDTy6XxAbdWWBXZm509kWT/pUdgEVBVKQqpOJLi3up7GUvIqYdfi /SxoO866tULxYwbBjpIKXAIpD6Fe/QQRzaID4kA7aiNqZjItZ/hM/9mY63gdFRXq4Wgd XAdNaIDjkAPXT1Gozsppws76GOAK0BfPAmihiLaAIKHbUa4ILrhUTsIBgcSGw6WHqIf7 0RnsNxn7vdgJxkHP6j1ggchfLPdeZ8e3TNJqPwf4ZSgSWQJqP8/jTgdg+fm4t1DvuIvH j3/g== X-Gm-Message-State: AJaThX6lIcdg8iW/6Nts+HWZc7BLl2phmhdCgbZT2kolcP8aCXeZDV0k Ta6aPdqFY8o5HeRzkCZkqujDxg== X-Google-Smtp-Source: AGs4zMZVpdawXsUEh2E0GqRa1BfX1GCpTn86miHMxaEnm2jOkE800wCMlBXah2X8JE1ZMA4+YuRCEQ== X-Received: by 10.46.17.18 with SMTP id f18mr1548216lje.167.1511969560047; Wed, 29 Nov 2017 07:32:40 -0800 (PST) Received: from localhost.localdomain (c-567171d5.014-348-6c756e10.cust.bredbandsbolaget.se. [213.113.113.86]) by smtp.gmail.com with ESMTPSA id n36sm331408lfi.78.2017.11.29.07.32.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 29 Nov 2017 07:32:38 -0800 (PST) From: Linus Walleij To: linux-arm-kernel@lists.infradead.org, Hans Ulli Kroll , Florian Fainelli Date: Wed, 29 Nov 2017 16:30:28 +0100 Message-Id: <20171129153028.7313-1-linus.walleij@linaro.org> X-Mailer: git-send-email 2.14.3 Subject: [OpenWrt-Devel] [PATCH] soc: Add SoC driver for Gemini X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Janos Laube , openwrt-devel@lists.openwrt.org, Paulius Zaleckas MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" This adds an SoC driver for the Gemini. Currently there is only one thing not fitting into any other framework, and that is the bus arbitration setting. All Gemini trees seem to be setting this register to exactly the same arbitration so we just add a small code snippet to do this at subsys_init() time before any other drivers kick in. Signed-off-by: Linus Walleij --- drivers/soc/Makefile | 1 + drivers/soc/gemini/Makefile | 2 ++ drivers/soc/gemini/soc-gemini.c | 68 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+) create mode 100644 drivers/soc/gemini/Makefile create mode 100644 drivers/soc/gemini/soc-gemini.c diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile index deecb16e7256..342768df3530 100644 --- a/drivers/soc/Makefile +++ b/drivers/soc/Makefile @@ -9,6 +9,7 @@ obj-y += bcm/ obj-$(CONFIG_ARCH_DOVE) += dove/ obj-$(CONFIG_MACH_DOVE) += dove/ obj-y += fsl/ +obj-$(CONFIG_ARCH_GEMINI) += gemini/ obj-$(CONFIG_ARCH_MXC) += imx/ obj-$(CONFIG_SOC_XWAY) += lantiq/ obj-y += mediatek/ diff --git a/drivers/soc/gemini/Makefile b/drivers/soc/gemini/Makefile new file mode 100644 index 000000000000..8cbd1e45db78 --- /dev/null +++ b/drivers/soc/gemini/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-y += soc-gemini.o diff --git a/drivers/soc/gemini/soc-gemini.c b/drivers/soc/gemini/soc-gemini.c new file mode 100644 index 000000000000..3fac4d1905a8 --- /dev/null +++ b/drivers/soc/gemini/soc-gemini.c @@ -0,0 +1,68 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2017 Linaro Ltd. + * + * Author: Linus Walleij + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2, as + * published by the Free Software Foundation. + * + */ +#include +#include +#include +#include +#include + +#define GLOBAL_WORD_ID 0x00 +#define GEMINI_GLOBAL_ARB1_CTRL 0x2c +#define GEMINI_ARB1_BURST_MASK GENMASK(21, 16) +#define GEMINI_ARB1_BURST_SHIFT 16 +/* These all define the priority on the BUS2 backplane */ +#define GEMINI_ARB1_PRIO_MASK GENMASK(9, 0) +#define GEMINI_ARB1_DMAC_HIGH_PRIO BIT(0) +#define GEMINI_ARB1_IDE_HIGH_PRIO BIT(1) +#define GEMINI_ARB1_RAID_HIGH_PRIO BIT(2) +#define GEMINI_ARB1_SECURITY_HIGH_PRIO BIT(3) +#define GEMINI_ARB1_GMAC0_HIGH_PRIO BIT(4) +#define GEMINI_ARB1_GMAC1_HIGH_PRIO BIT(5) +#define GEMINI_ARB1_USB0_HIGH_PRIO BIT(6) +#define GEMINI_ARB1_USB1_HIGH_PRIO BIT(7) +#define GEMINI_ARB1_PCI_HIGH_PRIO BIT(8) +#define GEMINI_ARB1_TVE_HIGH_PRIO BIT(9) + +#define GEMINI_DEFAULT_BURST_SIZE 0x20 +#define GEMINI_DEFAULT_PRIO (GEMINI_ARB1_GMAC0_HIGH_PRIO | \ + GEMINI_ARB1_GMAC1_HIGH_PRIO) + +static int __init gemini_soc_init(void) +{ + struct gemini_arbitration *arb; + struct regmap *map; + u32 rev; + u32 val; + int ret; + + map = syscon_regmap_lookup_by_compatible("cortina,gemini-syscon"); + if (IS_ERR(map)) + return PTR_ERR(map); + ret = regmap_read(map, GLOBAL_WORD_ID, &rev); + if (ret) + return ret; + + val = (GEMINI_DEFAULT_BURST_SIZE << GEMINI_ARB1_BURST_SHIFT) | + GEMINI_DEFAULT_PRIO; + + /* Set up system arbitration */ + regmap_update_bits(map, + GEMINI_GLOBAL_ARB1_CTRL, + GEMINI_ARB1_BURST_MASK | GEMINI_ARB1_PRIO_MASK, + val); + + pr_info("Gemini SoC %04x revision %02x, set arbitration %08x\n", + rev >> 8, rev & 0xff, val); + + return 0; +} +subsys_initcall(gemini_soc_init);