From patchwork Mon Jul 30 12:34:05 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 950860 X-Patchwork-Delegate: monstr@monstr.eu 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=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=monstr-eu.20150623.gappssmtp.com header.i=@monstr-eu.20150623.gappssmtp.com header.b="D3Sk09C4"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 41fJsn3HpZz9ryl for ; Mon, 30 Jul 2018 22:34:21 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 241EAC21FE5; Mon, 30 Jul 2018 12:34:18 +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=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 574F0C21F76; Mon, 30 Jul 2018 12:34:16 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id CA149C21F76; Mon, 30 Jul 2018 12:34:14 +0000 (UTC) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by lists.denx.de (Postfix) with ESMTPS id BC596C21F5B for ; Mon, 30 Jul 2018 12:34:13 +0000 (UTC) Received: by mail-wm0-f66.google.com with SMTP id o11-v6so12913532wmh.2 for ; Mon, 30 Jul 2018 05:34:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id; bh=U5wPLGqFx92Ac4z2tZBeP/01U6I/p0McQZcXjdaU65I=; b=D3Sk09C4LdM2p6ymop8cHHeuEe4Ler/zm1Uej8cBnL+yd2EfBoxN+DDeXweAm71tvB dgkAN3MQm1gS3iGIyyGFvTlsrKiWlqn1tturELwtC1GSVnVrjyeuHzpUSS/fqmc31wAJ aFTF81j5LfWO+ixgdfe8+/6PqP6/hY2KgL7iXX32WyVgdHiZD5PZecKIAPLR0fDWKA6r f+0pdAJqSlOpThgn0QMd/Wqx3jpOfsAxjfcyS76DMOKD9ybDW9N5CaqDZyPKzQ6s5Afb F5rj5dAMAHnpqZqF3bMEIqOG268yYgrRvgEFH+LTwfZfV4xs2oNNkVCSvoWpQn3/IWjb KzkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; bh=U5wPLGqFx92Ac4z2tZBeP/01U6I/p0McQZcXjdaU65I=; b=gry7avri5zEwfyaUAqIfJm3rp/sEW+QpW2FUoSshqizJO0Sbr5TF1VuKA5Unif6i+U W7IoEZB5SydhmeMDpQHAXPXV9W3/VmngAoxohEZrSqGH/8YGtlVbriFMtrpo6/SllMJY K/G8bDDcisCrB2vagjArRCXAZawPwskCrcB90fYjSX6Ln6tGKvDdH+q0Gv3S05L/0ig0 +eK1QI6+Sl/UMdfP6jDHzw14Nd3/ZnILItF174/CrU4bumwzkUnoqS1MxfEw0I6pyArd 7mM7oP2UURgZbjmDEcUxMffGB91i2fX2abvK9mu2pkikiamF3dNX1CHnxiLtQFeQyB1H B/8g== X-Gm-Message-State: AOUpUlEBQsXCXk6bjjg5NSEGQdkUhnzbpyjOTNE4gkmpbkR7QAtETx/V 9AJnSK4KJ4tOB/sp+un0/Kl0/UpYYJJo9Q== X-Google-Smtp-Source: AAOMgpdbo+I2DZB83PCZHxVGm1ujXunZDYFo4XJkmhyayYFO3Kult/msON805QshxrYI9LOGhIiQTA== X-Received: by 2002:a1c:20cb:: with SMTP id g194-v6mr15685516wmg.102.1532954053089; Mon, 30 Jul 2018 05:34:13 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id a6-v6sm703258wmf.22.2018.07.30.05.34.12 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 30 Jul 2018 05:34:12 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de, stefan@herbrechtsmeier.net Date: Mon, 30 Jul 2018 14:34:05 +0200 Message-Id: X-Mailer: git-send-email 1.9.1 Subject: [U-Boot] [PATCH 1/4] gpio: xilinx: Find out bank before use in xilinx_gpio_get_function() 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: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Call xilinx_gpio_get_bank_pin() before use. Reported-by: Stefan Herbrechtsmeier Signed-off-by: Michal Simek Reviewed-by: Stefan Herbrechtsmeier --- drivers/gpio/xilinx_gpio.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpio/xilinx_gpio.c b/drivers/gpio/xilinx_gpio.c index 48b52c985a55..8ce08d80f491 100644 --- a/drivers/gpio/xilinx_gpio.c +++ b/drivers/gpio/xilinx_gpio.c @@ -435,6 +435,10 @@ static int xilinx_gpio_get_function(struct udevice *dev, unsigned offset) int val, ret; u32 bank, pin; + ret = xilinx_gpio_get_bank_pin(offset, &bank, &pin, dev); + if (ret) + return ret; + /* Check if all pins are inputs */ if (platdata->bank_input[bank]) return GPIOF_INPUT; @@ -443,10 +447,6 @@ static int xilinx_gpio_get_function(struct udevice *dev, unsigned offset) if (platdata->bank_output[bank]) return GPIOF_OUTPUT; - ret = xilinx_gpio_get_bank_pin(offset, &bank, &pin, dev); - if (ret) - return ret; - /* FIXME test on dual */ val = readl(&platdata->regs->gpiodir + bank * 2); val = !(val & (1 << pin)); From patchwork Mon Jul 30 12:34:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 950862 X-Patchwork-Delegate: monstr@monstr.eu 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=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=monstr-eu.20150623.gappssmtp.com header.i=@monstr-eu.20150623.gappssmtp.com header.b="hg28Mfmh"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 41fJts1QZyz9ryl for ; Mon, 30 Jul 2018 22:35:17 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id E6351C22008; Mon, 30 Jul 2018 12:34:38 +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=RCVD_IN_MSPIKE_H2, 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 0BC45C21FF4; Mon, 30 Jul 2018 12:34:19 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id BB5E2C21F76; Mon, 30 Jul 2018 12:34:15 +0000 (UTC) Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by lists.denx.de (Postfix) with ESMTPS id 5BC8FC21F5B for ; Mon, 30 Jul 2018 12:34:15 +0000 (UTC) Received: by mail-wr1-f66.google.com with SMTP id e7-v6so12693363wrs.9 for ; Mon, 30 Jul 2018 05:34:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=d1s9ElOySdFVpjf6yve11bf5kMOlvuN8TCjW5X1NBtQ=; b=hg28Mfmh2KnhnQuzT47QZUewzWIM3EXo9+m8fvvtKCUo1StTi814Sf5NiSehvunmmf 50iBQAIdfmuqitnKbaKUn+Uhrq/rgaQpStaQlIB8e/KnpHVHn7X0HcEUo72ImuuT4yYA FbfgjX/84kYLq8sxsnItDN+Lm70y8Vk9KruuKYds97gVKeky6w8GyZYEdTTX/gu/yDqe 8T1ryFrKdjbZlkcGpy9t3/jaTeWzjxNSjJBwO8YbQ0GMTpJgwrPXAQHY/GthMlswUFO8 kmMEWJCzM5haQdEX9fIngrXsaKsxG0JHM12kcJDY5w7Fi570nsA42N9hK6ZifLhwU46o f/kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:in-reply-to:references; bh=d1s9ElOySdFVpjf6yve11bf5kMOlvuN8TCjW5X1NBtQ=; b=nSGZ6JPT3/Rc4izwtk4vBByUo6UldKGVWB0jHsa7uHe/9KNtyWBCm3y5nS05o/YRXg uIyzxItAVOp1mDZuJsSvgh12B/qPckc5ni24+hsYKQd+pou/wXuJlIcVY+1ciTB43FlM 6D0/6VqB6UqpJxivNnxNCgCacGB89z8CXFveM1ielrC9dSe9W4VixFws7J0yXPiJg1hL GNbvsAWSPEthW3/3h6sm0AN4OfWHvNNUGLuibPGChpMATzn5e1zVKjT7xtYxjeoyDsuq /CghTkdon2qBnn98XioNRCJW1WM0pvfcCw87KRO2p/UodsP/AJZ61MVVWDPL13L+183w wEmQ== X-Gm-Message-State: AOUpUlH+/Az5PCgqyzy/nSgExD7PAs9nB1uufCqj8ug6lbmIZOKBfWX9 5hhoSwSFmQaSQi5TsSXtPyzeW4menLHERQ== X-Google-Smtp-Source: AAOMgpe7BItt7bxiflvWjBCM/ugM+bCQv+AsC0Wo40kwlfb/2TyK2NMRa2dHRorXzSOU9MH21oIDzg== X-Received: by 2002:a5d:4410:: with SMTP id z16-v6mr17911130wrq.272.1532954054586; Mon, 30 Jul 2018 05:34:14 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id e12-v6sm13352745wrt.29.2018.07.30.05.34.13 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 30 Jul 2018 05:34:14 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de, stefan@herbrechtsmeier.net Date: Mon, 30 Jul 2018 14:34:06 +0200 Message-Id: <4ee24bc45da430f64ec222220118c78452f9f6ca.1532954043.git.michal.simek@xilinx.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: References: In-Reply-To: References: Subject: [U-Boot] [PATCH 2/4] gpio: xilinx: Remove !DM driver 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: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" There is no user for !DM driver that's why remove it. Signed-off-by: Michal Simek --- drivers/gpio/xilinx_gpio.c | 338 +-------------------------------------------- 1 file changed, 2 insertions(+), 336 deletions(-) diff --git a/drivers/gpio/xilinx_gpio.c b/drivers/gpio/xilinx_gpio.c index 8ce08d80f491..776a147cc8d7 100644 --- a/drivers/gpio/xilinx_gpio.c +++ b/drivers/gpio/xilinx_gpio.c @@ -10,13 +10,9 @@ #include #include #include +#include -static LIST_HEAD(gpio_list); - -enum gpio_direction { - GPIO_DIRECTION_OUT = 0, - GPIO_DIRECTION_IN = 1, -}; +#define XILINX_GPIO_MAX_BANK 2 /* Gpio simple map */ struct gpio_regs { @@ -24,335 +20,6 @@ struct gpio_regs { u32 gpiodir; }; -#if !defined(CONFIG_DM_GPIO) - -#define GPIO_NAME_SIZE 10 - -struct gpio_names { - char name[GPIO_NAME_SIZE]; -}; - -/* Initialized, rxbd_current, rx_first_buf must be 0 after init */ -struct xilinx_gpio_priv { - struct gpio_regs *regs; - u32 gpio_min; - u32 gpio_max; - u32 gpiodata_store; - char name[GPIO_NAME_SIZE]; - struct list_head list; - struct gpio_names *gpio_name; -}; - -/* Store number of allocated gpio pins */ -static u32 xilinx_gpio_max; - -/* Get associated gpio controller */ -static struct xilinx_gpio_priv *gpio_get_controller(unsigned gpio) -{ - struct list_head *entry; - struct xilinx_gpio_priv *priv = NULL; - - list_for_each(entry, &gpio_list) { - priv = list_entry(entry, struct xilinx_gpio_priv, list); - if (gpio >= priv->gpio_min && gpio <= priv->gpio_max) { - debug("%s: reg: %x, min-max: %d-%d\n", __func__, - (u32)priv->regs, priv->gpio_min, priv->gpio_max); - return priv; - } - } - puts("!!!Can't get gpio controller!!!\n"); - return NULL; -} - -/* Get gpio pin name if used/setup */ -static char *get_name(unsigned gpio) -{ - u32 gpio_priv; - struct xilinx_gpio_priv *priv; - - debug("%s\n", __func__); - - priv = gpio_get_controller(gpio); - if (priv) { - gpio_priv = gpio - priv->gpio_min; - - return *priv->gpio_name[gpio_priv].name ? - priv->gpio_name[gpio_priv].name : "UNKNOWN"; - } - return "UNKNOWN"; -} - -/* Get output value */ -static int gpio_get_output_value(unsigned gpio) -{ - u32 val, gpio_priv; - struct xilinx_gpio_priv *priv = gpio_get_controller(gpio); - - if (priv) { - gpio_priv = gpio - priv->gpio_min; - val = !!(priv->gpiodata_store & (1 << gpio_priv)); - debug("%s: reg: %x, gpio_no: %d, dir: %d\n", __func__, - (u32)priv->regs, gpio_priv, val); - - return val; - } - return -1; -} - -/* Get input value */ -static int gpio_get_input_value(unsigned gpio) -{ - u32 val, gpio_priv; - struct gpio_regs *regs; - struct xilinx_gpio_priv *priv = gpio_get_controller(gpio); - - if (priv) { - regs = priv->regs; - gpio_priv = gpio - priv->gpio_min; - val = readl(®s->gpiodata); - val = !!(val & (1 << gpio_priv)); - debug("%s: reg: %x, gpio_no: %d, dir: %d\n", __func__, - (u32)priv->regs, gpio_priv, val); - - return val; - } - return -1; -} - -/* Set gpio direction */ -static int gpio_set_direction(unsigned gpio, enum gpio_direction direction) -{ - u32 val, gpio_priv; - struct gpio_regs *regs; - struct xilinx_gpio_priv *priv = gpio_get_controller(gpio); - - if (priv) { - regs = priv->regs; - val = readl(®s->gpiodir); - - gpio_priv = gpio - priv->gpio_min; - if (direction == GPIO_DIRECTION_OUT) - val &= ~(1 << gpio_priv); - else - val |= 1 << gpio_priv; - - writel(val, ®s->gpiodir); - debug("%s: reg: %x, gpio_no: %d, dir: %d\n", __func__, - (u32)priv->regs, gpio_priv, val); - - return 0; - } - - return -1; -} - -/* Get gpio direction */ -static int gpio_get_direction(unsigned gpio) -{ - u32 val, gpio_priv; - struct gpio_regs *regs; - struct xilinx_gpio_priv *priv = gpio_get_controller(gpio); - - if (priv) { - regs = priv->regs; - gpio_priv = gpio - priv->gpio_min; - val = readl(®s->gpiodir); - val = !!(val & (1 << gpio_priv)); - debug("%s: reg: %x, gpio_no: %d, dir: %d\n", __func__, - (u32)priv->regs, gpio_priv, val); - - return val; - } - - return -1; -} - -/* - * Get input value - * for example gpio setup to output only can't get input value - * which is breaking gpio toggle command - */ -int gpio_get_value(unsigned gpio) -{ - u32 val; - - if (gpio_get_direction(gpio) == GPIO_DIRECTION_OUT) - val = gpio_get_output_value(gpio); - else - val = gpio_get_input_value(gpio); - - return val; -} - -/* Set output value */ -static int gpio_set_output_value(unsigned gpio, int value) -{ - u32 val, gpio_priv; - struct gpio_regs *regs; - struct xilinx_gpio_priv *priv = gpio_get_controller(gpio); - - if (priv) { - regs = priv->regs; - gpio_priv = gpio - priv->gpio_min; - val = priv->gpiodata_store; - if (value) - val |= 1 << gpio_priv; - else - val &= ~(1 << gpio_priv); - - writel(val, ®s->gpiodata); - debug("%s: reg: %x, gpio_no: %d, output_val: %d\n", __func__, - (u32)priv->regs, gpio_priv, val); - priv->gpiodata_store = val; - - return 0; - } - - return -1; -} - -int gpio_set_value(unsigned gpio, int value) -{ - if (gpio_get_direction(gpio) == GPIO_DIRECTION_OUT) - return gpio_set_output_value(gpio, value); - - return -1; -} - -/* Set GPIO as input */ -int gpio_direction_input(unsigned gpio) -{ - debug("%s\n", __func__); - return gpio_set_direction(gpio, GPIO_DIRECTION_IN); -} - -/* Setup GPIO as output and set output value */ -int gpio_direction_output(unsigned gpio, int value) -{ - int ret = gpio_set_direction(gpio, GPIO_DIRECTION_OUT); - - debug("%s\n", __func__); - - if (ret < 0) - return ret; - - return gpio_set_output_value(gpio, value); -} - -/* Show gpio status */ -void gpio_info(void) -{ - unsigned gpio; - - struct list_head *entry; - struct xilinx_gpio_priv *priv = NULL; - - list_for_each(entry, &gpio_list) { - priv = list_entry(entry, struct xilinx_gpio_priv, list); - printf("\n%s: %s/%x (%d-%d)\n", __func__, priv->name, - (u32)priv->regs, priv->gpio_min, priv->gpio_max); - - for (gpio = priv->gpio_min; gpio <= priv->gpio_max; gpio++) { - printf("GPIO_%d:\t%s is an ", gpio, get_name(gpio)); - if (gpio_get_direction(gpio) == GPIO_DIRECTION_OUT) - printf("OUTPUT value = %d\n", - gpio_get_output_value(gpio)); - else - printf("INPUT value = %d\n", - gpio_get_input_value(gpio)); - } - } -} - -int gpio_request(unsigned gpio, const char *label) -{ - u32 gpio_priv; - struct xilinx_gpio_priv *priv; - - if (gpio >= xilinx_gpio_max) - return -EINVAL; - - priv = gpio_get_controller(gpio); - if (priv) { - gpio_priv = gpio - priv->gpio_min; - - if (label != NULL) { - strncpy(priv->gpio_name[gpio_priv].name, label, - GPIO_NAME_SIZE); - priv->gpio_name[gpio_priv].name[GPIO_NAME_SIZE - 1] = - '\0'; - } - return 0; - } - - return -1; -} - -int gpio_free(unsigned gpio) -{ - u32 gpio_priv; - struct xilinx_gpio_priv *priv; - - if (gpio >= xilinx_gpio_max) - return -EINVAL; - - priv = gpio_get_controller(gpio); - if (priv) { - gpio_priv = gpio - priv->gpio_min; - priv->gpio_name[gpio_priv].name[0] = '\0'; - - /* Do nothing here */ - return 0; - } - - return -1; -} - -int gpio_alloc(u32 baseaddr, const char *name, u32 gpio_no) -{ - struct xilinx_gpio_priv *priv; - - priv = calloc(1, sizeof(struct xilinx_gpio_priv)); - - /* Setup gpio name */ - if (name != NULL) { - strncpy(priv->name, name, GPIO_NAME_SIZE); - priv->name[GPIO_NAME_SIZE - 1] = '\0'; - } - priv->regs = (struct gpio_regs *)baseaddr; - - priv->gpio_min = xilinx_gpio_max; - xilinx_gpio_max = priv->gpio_min + gpio_no; - priv->gpio_max = xilinx_gpio_max - 1; - - priv->gpio_name = calloc(gpio_no, sizeof(struct gpio_names)); - - INIT_LIST_HEAD(&priv->list); - list_add_tail(&priv->list, &gpio_list); - - printf("%s: Add %s (%d-%d)\n", __func__, name, - priv->gpio_min, priv->gpio_max); - - /* Return the first gpio allocated for this device */ - return priv->gpio_min; -} - -/* Dual channel gpio is one IP with two independent channels */ -int gpio_alloc_dual(u32 baseaddr, const char *name, u32 gpio_no0, u32 gpio_no1) -{ - int ret; - - ret = gpio_alloc(baseaddr, name, gpio_no0); - gpio_alloc(baseaddr + 8, strcat((char *)name, "_1"), gpio_no1); - - /* Return the first gpio allocated for this device */ - return ret; -} -#else -#include - -#define XILINX_GPIO_MAX_BANK 2 - struct xilinx_gpio_platdata { struct gpio_regs *regs; int bank_max[XILINX_GPIO_MAX_BANK]; @@ -607,4 +274,3 @@ U_BOOT_DRIVER(xilinx_gpio) = { .probe = xilinx_gpio_probe, .platdata_auto_alloc_size = sizeof(struct xilinx_gpio_platdata), }; -#endif From patchwork Mon Jul 30 12:34:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 950863 X-Patchwork-Delegate: monstr@monstr.eu 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=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=monstr-eu.20150623.gappssmtp.com header.i=@monstr-eu.20150623.gappssmtp.com header.b="YBC6fUnt"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 41fJw10pG5z9s0R for ; Mon, 30 Jul 2018 22:36:17 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id CC69FC22020; Mon, 30 Jul 2018 12:35:05 +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=RCVD_IN_MSPIKE_H2, 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 BBECAC22004; Mon, 30 Jul 2018 12:34:26 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id D49F0C21FBB; Mon, 30 Jul 2018 12:34:21 +0000 (UTC) Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by lists.denx.de (Postfix) with ESMTPS id 9C423C21FB9 for ; Mon, 30 Jul 2018 12:34:16 +0000 (UTC) Received: by mail-wr1-f67.google.com with SMTP id h15-v6so12694201wrs.7 for ; Mon, 30 Jul 2018 05:34:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=sF0Q/FhKUQVcZaAey6NrdCLL3jP7wWKCGfRfrvIkGlE=; b=YBC6fUntAl8/S4uaKmhrqP7beKKpcFJLvfrQCUG7c0I57IeTN5vbLy0PtTOGBiw5ct +woy4+AZaPX8yCUX5EpzuKGaPDdLKiJotCjYDOsNqkaS9q6lLCDDW789zUPFPOx0RyOX GRHtW8pKifhcnomta5fX+Vgoqf2Cv4OR5b2IX35F4lZuMVFT2XtSA+DQ5sufgNYunsNg v04DVlFxiebobIrXHDWKVkEA5h4zv46BRf4tbN+lelaa57Ad8Wy+PJTGyEc9xvjP4l8v aAtgZ3boFYOrxMEVr0pQYeSRzUIjVGNB+3zC3zISLy3TP5e+VIqYPp2Qa2mC3fTSp3o7 bvKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:in-reply-to:references; bh=sF0Q/FhKUQVcZaAey6NrdCLL3jP7wWKCGfRfrvIkGlE=; b=je+IcUs3e4vUA/vLe1dVNVtj51jpmoBVF9Hn3ikNSvXud6wcovJKXrqSyUI+JMF/Gn /KbIIrA4V83gsr4NU/VDlpLK73Jtoht67yhIZ7iPAkaQzp1Txb72oCIgDDxCsB5ZWrrA ED1xjhMW7pN04cmyNNMn8FQ4CZFWxLS09jdHBbXN6cQ/jFisCwK+eRkxYa904pBBfED7 YJ8FuK5N4RjcpHWkTdcJ0m5LL7orT4gCetnRtgFJWyWyquLLUfY3x24VYmdkN46nbmVt Itz4rs3DwgMR3dHXMrVwG1VkwsKgersyIfwSezbXT0E7DC/jxGF+14JvCfaDrTRqzy+g 1qxA== X-Gm-Message-State: AOUpUlGRwWF460xc7gB9PohTOeVuoFshiOB1Q3HMWEr4qJMTOZVfeLKE U7k+bWNrkUYJ6WfKyAgOFx0lF+RryPhSQg== X-Google-Smtp-Source: AAOMgpeioa6xnIC7PiGbJhiweIiWqDMukVxV8dGiP9iVwzKS0dYHcWNTL1SKTJ63hy+crYWo3SfWxw== X-Received: by 2002:a5d:648a:: with SMTP id r10-v6mr11796490wru.109.1532954056021; Mon, 30 Jul 2018 05:34:16 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id b11-v6sm19829052wma.34.2018.07.30.05.34.15 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 30 Jul 2018 05:34:15 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de, stefan@herbrechtsmeier.net Date: Mon, 30 Jul 2018 14:34:07 +0200 Message-Id: <0a76e524a79cfd177361be0f6e9a2b8903812c4b.1532954043.git.michal.simek@xilinx.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: References: In-Reply-To: References: Subject: [U-Boot] [PATCH 3/4] gpio: xilinx: Set value before changing direction 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: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" Set a value before changing gpio direction. This will ensure that the old value is not propagated when direction has changed but new value is not written yet. Reported-by: Stefan Herbrechtsmeier Signed-off-by: Michal Simek Reviewed-by: Stefan Herbrechtsmeier --- drivers/gpio/xilinx_gpio.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/xilinx_gpio.c b/drivers/gpio/xilinx_gpio.c index 776a147cc8d7..1e5f3da8d7e8 100644 --- a/drivers/gpio/xilinx_gpio.c +++ b/drivers/gpio/xilinx_gpio.c @@ -139,14 +139,14 @@ static int xilinx_gpio_direction_output(struct udevice *dev, unsigned offset, if (platdata->bank_input[bank]) return -EINVAL; + xilinx_gpio_set_value(dev, offset, value); + if (!platdata->bank_output[bank]) { val = readl(&platdata->regs->gpiodir + bank * 2); val = val & ~(1 << pin); writel(val, &platdata->regs->gpiodir + bank * 2); } - xilinx_gpio_set_value(dev, offset, value); - return 0; } From patchwork Mon Jul 30 12:34:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 950864 X-Patchwork-Delegate: monstr@monstr.eu 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=none (p=none dis=none) header.from=xilinx.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=monstr-eu.20150623.gappssmtp.com header.i=@monstr-eu.20150623.gappssmtp.com header.b="WGBYngID"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 41fJw16Ktqz9ryl for ; Mon, 30 Jul 2018 22:36:17 +1000 (AEST) Received: by lists.denx.de (Postfix, from userid 105) id 747FBC2201D; Mon, 30 Jul 2018 12:35:24 +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=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 A292AC21FE5; Mon, 30 Jul 2018 12:34:32 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 48701C21F5B; Mon, 30 Jul 2018 12:34:22 +0000 (UTC) Received: from mail-wm0-f66.google.com (mail-wm0-f66.google.com [74.125.82.66]) by lists.denx.de (Postfix) with ESMTPS id 0B3E6C21FE4 for ; Mon, 30 Jul 2018 12:34:18 +0000 (UTC) Received: by mail-wm0-f66.google.com with SMTP id t25-v6so13538025wmi.3 for ; Mon, 30 Jul 2018 05:34:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=dCE0yV/ejnAEtKAbIdMq+xqnbn8QfRisRadx/Cl49B0=; b=WGBYngIDiLHbnvICpijHlCZTuTAAlqyKapxpF4YU2B8B8d0c14MtBYlegjjgS3Cc0j dqYsYP8N2j9GAz9nFtRz7jObf6FSuAD05yRFK/x63Yv3G5YdH2KtAnbUuPHRgh71hvm/ xBnRUDpvy7D7eHv3+lmQ6H3OAfKPjC/veC1idwAkNGEt/zAWWZOalpZYAeZUFlcWOkwV O3nF6JqvL3dBMAC0u4tXtea6ZYkXcGOS0b2ge2ASf0M1MK31V87YT36D2rQus7WnFIOP JdCYwCv28hPLvNwBy+HIdqItjW3avq+U+xmN4vOEYWOW9WHQGmxveD9J9rcHXxUJx99W wohw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:in-reply-to:references; bh=dCE0yV/ejnAEtKAbIdMq+xqnbn8QfRisRadx/Cl49B0=; b=aVILslUNimOy6191fYXVRAT9TkWSLxfG4fDY3d+WhcIA3UN+GyMCHotWFQehBJ/CPf d5SPnQtjOlYrezFvS7hgZ8Sk/ToUg90RE4e3afMBN3AlGQGvjvfGcIXF5K8zxvsFoL26 JWx7YSzRk5gsJdCD12gtubxwgm4yj6gdNt8Hl4L7xlQ6UB1hEIsnFhgB8mtMmHoY65WF ZIympE6InRllLO+2BdbBGWib1UdIH8mxACVUej7U1Rjj6Ib++bdwWgG5iF5q/6XuVVnf gkw7QNXmArzqCpUxNSIIoT9p3eOcTbSPhbG0d8ssLL130F83EYhBHNBEh3EntyeH/n2z IYVQ== X-Gm-Message-State: AOUpUlGf4i/iUnH8mmDZ1mhtR5v20bCSchf73KobYvObvLeNLJNbFtX6 HlCPCOe9hgyp7tcwmWmE2j5rHPnWdE39XA== X-Google-Smtp-Source: AAOMgpfOVNHj881kZkysyWMf6ew0FaHEaxHNghZWkQbaPTCcwkTPVxErbt6cibNYaiQEoDbo8fqz1g== X-Received: by 2002:a1c:5b88:: with SMTP id p130-v6mr15419008wmb.69.1532954057504; Mon, 30 Jul 2018 05:34:17 -0700 (PDT) Received: from localhost (nat-35.starnet.cz. [178.255.168.35]) by smtp.gmail.com with ESMTPSA id g10-v6sm10843399wru.43.2018.07.30.05.34.16 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 30 Jul 2018 05:34:16 -0700 (PDT) From: Michal Simek To: u-boot@lists.denx.de, stefan@herbrechtsmeier.net Date: Mon, 30 Jul 2018 14:34:08 +0200 Message-Id: <16b84e0e2f53dde6d4fd2f678bba68a03c63c7c6.1532954043.git.michal.simek@xilinx.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: References: In-Reply-To: References: Subject: [U-Boot] [PATCH 4/4] gpio: xilinx: Simplify logic in xilinx_gpio_set_value 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: , MIME-Version: 1.0 Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" There is no reason to do read/write for if/else separately. Reported-by: Stefan Herbrechtsmeier Signed-off-by: Michal Simek Reviewed-by: Stefan Herbrechtsmeier --- drivers/gpio/xilinx_gpio.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/gpio/xilinx_gpio.c b/drivers/gpio/xilinx_gpio.c index 1e5f3da8d7e8..cccfa7561739 100644 --- a/drivers/gpio/xilinx_gpio.c +++ b/drivers/gpio/xilinx_gpio.c @@ -61,18 +61,17 @@ static int xilinx_gpio_set_value(struct udevice *dev, unsigned offset, if (ret) return ret; + val = readl(&platdata->regs->gpiodata + bank * 2); + debug("%s: regs: %lx, value: %x, gpio: %x, bank %x, pin %x\n", __func__, (ulong)platdata->regs, value, offset, bank, pin); - if (value) { - val = readl(&platdata->regs->gpiodata + bank * 2); + if (value) val = val | (1 << pin); - writel(val, &platdata->regs->gpiodata + bank * 2); - } else { - val = readl(&platdata->regs->gpiodata + bank * 2); + else val = val & ~(1 << pin); - writel(val, &platdata->regs->gpiodata + bank * 2); - } + + writel(val, &platdata->regs->gpiodata + bank * 2); return val; };