From patchwork Thu Jan 30 20:34:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alex Nemirovsky X-Patchwork-Id: 1231592 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cortina-access.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CortinaAccess.onmicrosoft.com header.i=@CortinaAccess.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-CortinaAccess-onmicrosoft-com header.b=jO1IJHLS; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 487sZC2Zqnz9sPK for ; Fri, 31 Jan 2020 07:36:03 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 98D2E81B5F; Thu, 30 Jan 2020 21:35:33 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=cortina-access.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=CortinaAccess.onmicrosoft.com header.i=@CortinaAccess.onmicrosoft.com header.b="jO1IJHLS"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 733EF81B42; Thu, 30 Jan 2020 21:35:24 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: * X-Spam-Status: No, score=1.0 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, FORGED_SPF_HELO,MSGID_FROM_MTA_HEADER,SPF_HELO_PASS,URIBL_BLOCKED autolearn=no autolearn_force=no version=3.4.2 Received: from APC01-PU1-obe.outbound.protection.outlook.com (mail-pu1apc01on0620.outbound.protection.outlook.com [IPv6:2a01:111:f400:febe::620]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 063D88182B for ; Thu, 30 Jan 2020 21:35:20 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=none (p=none dis=none) header.from=cortina-access.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=Alex.Nemirovsky@cortina-access.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=d0bvSeE3PrEXNolaUcKLxWp1QKEsjO5ccFa/2A0hyXgMPE/QfSq5GZ8ECDRX8ydTdDvuba57an05Svpd/4QpD7oWMUifrXAJIZTvLDLfSzNWggjg4XHgCqbXYtsobpiXBhUNF2/3f1Npf+8E7TS0Z7FJcKdbQdxUZkGqT4HtweDlG7kypB6oBNpzq4zOdK2B5Ai3P5DpnbPBBT3szOwTh1c5yhPCcQKe3/0vN3Y9OilmQUvk9rojtU3hXce1XLzRD9T6fw4KyRDCZTw8/i8f8N9loZvoyaaXlTvt71j9swl7ErXFb4y4wKB5RsFMZRDUfILDe3/JTGv0xRt6abhm3A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uJ9XAExMjRSAlGF62XmRxXt+Dbyld187JIzCaMZMo6w=; b=Z3xb60vOnyZsy1TLrLO0cALz0iNIWGa1LWK6ChVR6QaFwiGueU706IYO7vhONNGlRkaHM5s3i7cQ7BYH+348Z4OJCJaLkOxDnlsw/o9O6E98BXkQoABT7jGyUU1JSy8R35OMRs4FjCX2KoBoSmaRyhS5QHziJ3/S8jDKj8Lz0Wv8gUjCbLx467YRtUX3G3o29hEsI8QG7i5oCcCHEniKeJXcyP5riFTCrTgYLvhBHPDlH35X+wkmEcTw81IbmEKl8Mj/USqhnNGtRhO9X73swNbXrX9hiutanf2LNN5Or0HeXtvoBqTPmpEU50nJVT06oEBPSGGs2lvNAQ4pODsZ8w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=cortina-access.com; dmarc=pass action=none header.from=cortina-access.com; dkim=pass header.d=cortina-access.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CortinaAccess.onmicrosoft.com; s=selector2-CortinaAccess-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=uJ9XAExMjRSAlGF62XmRxXt+Dbyld187JIzCaMZMo6w=; b=jO1IJHLSQqDcBE3JLbdXIR/uvwPLKzEzpaAFdv1ezWP8Dpt4vIe/HldmPWFkIlAVnR4zN1zGUJ367OSsR60PoXNj6pk4toKpRLIp3j5fe7jrYFBv4rTsIutEQXIevtfIIc/Id7UvyDhTSW41Mu17lZH2FdRUFbbzUiy0NZ2PfVs= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Alex.Nemirovsky@cortina-access.com; Received: from TY2PR0101MB2445.apcprd01.prod.exchangelabs.com (20.177.47.144) by TY2PR0101MB2896.apcprd01.prod.exchangelabs.com (20.177.151.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2665.24; Thu, 30 Jan 2020 20:35:13 +0000 Received: from TY2PR0101MB2445.apcprd01.prod.exchangelabs.com ([fe80::80e5:96f9:1120:f31c]) by TY2PR0101MB2445.apcprd01.prod.exchangelabs.com ([fe80::80e5:96f9:1120:f31c%7]) with mapi id 15.20.2686.028; Thu, 30 Jan 2020 20:35:13 +0000 From: Alex Nemirovsky To: u-boot@lists.denx.de Subject: [PATCH v4 3/6] gpio: cortina_gpio: add DM_GPIO driver for CAxxxx SoCs Date: Thu, 30 Jan 2020 12:34:56 -0800 Message-Id: <1580416499-29820-4-git-send-email-alex.nemirovsky@cortina-access.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1580416499-29820-1-git-send-email-alex.nemirovsky@cortina-access.com> References: <1580416499-29820-1-git-send-email-alex.nemirovsky@cortina-access.com> X-ClientProxiedBy: CO1PR15CA0062.namprd15.prod.outlook.com (2603:10b6:101:1f::30) To TY2PR0101MB2445.apcprd01.prod.exchangelabs.com (2603:1096:404:68::16) MIME-Version: 1.0 Received: from smok.hrh.localdomain (70.58.207.205) by CO1PR15CA0062.namprd15.prod.outlook.com (2603:10b6:101:1f::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.20.2665.22 via Frontend Transport; Thu, 30 Jan 2020 20:35:11 +0000 X-Mailer: git-send-email 2.7.4 X-Originating-IP: [70.58.207.205] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9cb2f3cb-8157-4ba2-1e73-08d7a5c3e7de X-MS-TrafficTypeDiagnostic: TY2PR0101MB2896:|TY2PR0101MB2896:|TY2PR0101MB2896:|TY2PR0101MB2896: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-LD-Processed: 0694623c-6669-497c-89c3-3a32a9934313,ExtAddr X-MS-Oob-TLC-OOBClassifiers: OLM:5516; X-Forefront-PRVS: 02981BE340 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6029001)(396003)(39830400003)(366004)(346002)(376002)(136003)(189003)(199004)(4326008)(16526019)(107886003)(6486002)(508600001)(66556008)(316002)(66476007)(186003)(6666004)(5660300002)(26005)(66946007)(52116002)(44832011)(36756003)(6512007)(2906002)(6916009)(956004)(81166006)(81156014)(8936002)(2616005)(8676002)(86362001)(6506007)(54906003); DIR:OUT; SFP:1101; SCL:1; SRVR:TY2PR0101MB2896; H:TY2PR0101MB2445.apcprd01.prod.exchangelabs.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:0; Received-SPF: None (protection.outlook.com: cortina-access.com does not designate permitted sender hosts) X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: hi7C0L/1+ojQOeo6HOmQHID92iBm4qJfZN2mEH1wZ2laxxbos/3jxTs+3OuLYw0I3QkO3InkCXjbJRwkPEgHZFObEXUiUgXaIErCBloYqfagaRpuCEkYel9xsx5LVdIfO2tbUQyLpNAPnNjWf/1R2Dg3qlQ+cVU83MxYtOhxqOvWbRkkKhs4z8mVUR2zQE4/JTg4ZzSTx3W/0GGK3+AuW4hIq4NPi0hNYOuqtCOvpXkpoTDTj7ACf0EBZnfoIX9526zQqDsAa15rasuKKAfE0brcVW9ya9mdGL8fwly8CHLzRdQRn0F+5gHHOXKXMHX+XEU0rFHg9MdHkPTdqyWUpxQm8sMRS+TxbDHvh6K8Q5kTCWoRNJqeqq/7wchXz3hTZg+0ktjUQFQM54xH12FMTGBnxqOSQzlfOFsCoGUaoMYQMKzE+M0AnZrMb8CXAFFb X-MS-Exchange-AntiSpam-MessageData: elXZofp/ihEgHelwHEeJmF8yfqtdwPH0aylrnzdKTKTv7ErUzjamA+6LUlTwvafW8QgM/VObPmGLAga7G2Eb27l5Yix4ZCIWeBPk1hYvwWdQ6xXMzXHIYCHPMQRN3wRYO6bSMSr6KuQgL/7KK3m+iQ== X-OriginatorOrg: CORTINA-ACCESS.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 9cb2f3cb-8157-4ba2-1e73-08d7a5c3e7de X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Jan 2020 20:35:12.5862 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0694623c-6669-497c-89c3-3a32a9934313 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: VL+VdtqSw3jYjh20EB+MLfGfwBuY9idd6HtgVobG3dGyU9tqh3hNPvfag40i2inSPzt5zVIirkqxg4ZXL7/SjcuP/mhh2A3mf5ECNLaT0vNDJycpUizEkMNDKAF32CtZ X-MS-Exchange-Transport-CrossTenantHeadersStamped: TY2PR0101MB2896 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.26 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Jason Li , Alex Nemirovsky Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.101.4 at phobos.denx.de X-Virus-Status: Clean From: Jason Li DM_GPIO based GPIO controller driver for CAxxxx SoCs. This driver support multiple CPU architectures and Cortina Access SoC platforms. Reviewed-by: Daniel Schwierzeck Signed-off-by: Jason Li Signed-off-by: Alex Nemirovsky --- Changes in v4: None Changes in v3: None Changes in v2: - Rename driver in DT namespace for consistency between all CA drivers. - Remove blank line after SPDX identifier - Remove Authorship as it is already recorded within Git and is redundant - Replace printf() as debug() drivers/gpio/Kconfig | 8 ++++ drivers/gpio/Makefile | 1 + drivers/gpio/cortina_gpio.c | 111 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+) create mode 100644 drivers/gpio/cortina_gpio.c diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 1de6f52..8a7aa5a 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -59,6 +59,14 @@ config BCM6345_GPIO help This driver supports the GPIO banks on BCM6345 SoCs. +config CORTINA_GPIO + bool "Cortina-Access GPIO driver" + depends on DM_GPIO && CORTINA_PLATFORM + help + Enable support for the GPIO controller in Cortina CAxxxx SoCs. + This driver supports all CPU ISA variants supported by Cortina + Access CAxxxx SoCs. + config DWAPB_GPIO bool "DWAPB GPIO driver" depends on DM && DM_GPIO diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 449046b..ceae612 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -17,6 +17,7 @@ endif obj-$(CONFIG_AT91_GPIO) += at91_gpio.o obj-$(CONFIG_ATMEL_PIO4) += atmel_pio4.o obj-$(CONFIG_BCM6345_GPIO) += bcm6345_gpio.o +obj-$(CONFIG_CORTINA_GPIO) += cortina_gpio.o obj-$(CONFIG_INTEL_GPIO) += intel_gpio.o obj-$(CONFIG_INTEL_ICH6_GPIO) += intel_ich6_gpio.o obj-$(CONFIG_INTEL_BROADWELL_GPIO) += intel_broadwell_gpio.o diff --git a/drivers/gpio/cortina_gpio.c b/drivers/gpio/cortina_gpio.c new file mode 100644 index 0000000..e2374ce --- /dev/null +++ b/drivers/gpio/cortina_gpio.c @@ -0,0 +1,111 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2020 Cortina-Access + * + * GPIO Driver for Cortina Access CAxxxx Line of SoCs + */ + +#include +#include +#include +#include +#include +#include + +/* GPIO Register Map */ +#define CORTINA_GPIO_CFG 0x00 +#define CORTINA_GPIO_OUT 0x04 +#define CORTINA_GPIO_IN 0x08 +#define CORTINA_GPIO_LVL 0x0C +#define CORTINA_GPIO_EDGE 0x10 +#define CORTINA_GPIO_BOTHEDGE 0x14 +#define CORTINA_GPIO_IE 0x18 +#define CORTINA_GPIO_INT 0x1C +#define CORTINA_GPIO_STAT 0x20 + +struct cortina_gpio_bank { + void __iomem *base; +}; + +#ifdef CONFIG_DM_GPIO +static int ca_gpio_direction_input(struct udevice *dev, unsigned int offset) +{ + struct cortina_gpio_bank *priv = dev_get_priv(dev); + + setbits_32(priv->base, BIT(offset)); + return 0; +} + +static int +ca_gpio_direction_output(struct udevice *dev, unsigned int offset, int value) +{ + struct cortina_gpio_bank *priv = dev_get_priv(dev); + + clrbits_32(priv->base, BIT(offset)); + return 0; +} + +static int ca_gpio_get_value(struct udevice *dev, unsigned int offset) +{ + struct cortina_gpio_bank *priv = dev_get_priv(dev); + + return readl(priv->base + CORTINA_GPIO_IN) & BIT(offset); +} + +static int ca_gpio_set_value(struct udevice *dev, unsigned int offset, + int value) +{ + struct cortina_gpio_bank *priv = dev_get_priv(dev); + + setbits_32(priv->base + CORTINA_GPIO_OUT, BIT(offset)); + return 0; +} + +static int ca_gpio_get_function(struct udevice *dev, unsigned int offset) +{ + struct cortina_gpio_bank *priv = dev_get_priv(dev); + + if (readl(priv->base) & BIT(offset)) + return GPIOF_INPUT; + else + return GPIOF_OUTPUT; +} + +static const struct dm_gpio_ops gpio_cortina_ops = { + .direction_input = ca_gpio_direction_input, + .direction_output = ca_gpio_direction_output, + .get_value = ca_gpio_get_value, + .set_value = ca_gpio_set_value, + .get_function = ca_gpio_get_function, +}; + +static int ca_gpio_probe(struct udevice *dev) +{ + struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev); + struct cortina_gpio_bank *priv = dev_get_priv(dev); + + priv->base = dev_remap_addr_index(dev, 0); + if (!priv->base) + return -EINVAL; + + uc_priv->gpio_count = dev_read_u32_default(dev, "ngpios", 32); + uc_priv->bank_name = dev->name; + + debug("Done Cortina GPIO init\n"); + return 0; +} + +static const struct udevice_id ca_gpio_ids[] = { + {.compatible = "cortina,ca-gpio"}, + {} +}; + +U_BOOT_DRIVER(cortina_gpio) = { + .name = "cortina-gpio", + .id = UCLASS_GPIO, + .ops = &gpio_cortina_ops, + .probe = ca_gpio_probe, + .priv_auto_alloc_size = sizeof(struct cortina_gpio_bank), + .of_match = ca_gpio_ids, +}; +#endif /* CONFIG_DM_GPIO */