From patchwork Tue Mar 12 21:01:07 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Goldschmidt X-Patchwork-Id: 1055766 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="rqjuWDRU"; dkim-atps=neutral Received: from lists.denx.de (dione.denx.de [81.169.180.215]) by ozlabs.org (Postfix) with ESMTP id 44JnTT3y6Xz9s9h for ; Wed, 13 Mar 2019 08:01:49 +1100 (AEDT) Received: by lists.denx.de (Postfix, from userid 105) id 39FF7C21F6A; Tue, 12 Mar 2019 21:01:33 +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_NONE, 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 6479EC21E0F; Tue, 12 Mar 2019 21:01:18 +0000 (UTC) Received: by lists.denx.de (Postfix, from userid 105) id 19ABBC21E52; Tue, 12 Mar 2019 21:01:17 +0000 (UTC) Received: from mail-wm1-f67.google.com (mail-wm1-f67.google.com [209.85.128.67]) by lists.denx.de (Postfix) with ESMTPS id BFCBAC21E0F for ; Tue, 12 Mar 2019 21:01:16 +0000 (UTC) Received: by mail-wm1-f67.google.com with SMTP id x7so4197849wmj.0 for ; Tue, 12 Mar 2019 14:01:16 -0700 (PDT) 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; bh=dDa3lreaQTBDbS2lQDnjHGE/xsDv7FxY7s7wH67oISo=; b=rqjuWDRUYkqzz4uWrSJXtcYwjLFw4YWnuBaGUShhFKPsmujbS1ivjKD05CLRzQJJru zYA+wJAK08bsgI+ATyj0fJU2am97A0r/qtxzhF1SQE970iJdRirxY0kh3Hrd5KcxZyav 0T0M9Fdsru1mVskoAoZo53ItrzclQG3OxyepiG+jrMvTw8LSdc7Fbb7iGDTZV6BKtGcL LDDiRCtxe0MZlIufpOvy4B0h6vPDEcEH1lCnkco2gmJ/EioPXk1HpzJqNye+F0LU558g 7WhwhyN62RPu1I3Y9XrtDXs8D21Kwv8v4zqsnLqk2cLgT/W7SIdTYPryvARIamM/ItM9 gh4g== 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; bh=dDa3lreaQTBDbS2lQDnjHGE/xsDv7FxY7s7wH67oISo=; b=U8Mx/Ux7V+4FCfbTc80e63aj/ij54CkFg3NoUDmtJb0fur0H8Jz/Q1FZbO8i/PSacS 292KzsVlBwSMKw1KTmiM1R7NkW09Kpd6IZ7uH1UM23zXZdP3yVVtBhpKFJtsHtT2QvU6 rI9qBq9XTXr+CVcCh96QnFfOEwRvVPMGf65iUyJtxABbhBew1+gD351dxYGDUE67Em8z rZw/Mp4A6hdhRvhZg8m0yhyTURY7StQW8KQSqS9vWyYziXkAPE4Y8AXnUbmFPvg1qeSP kVCGxEoXF8OBokezEGz9kRWEPSMX5H55H8R7D/cpH1TVl8/aU8uu5B3uvmLobxg597zc 7eWg== X-Gm-Message-State: APjAAAUqRDgjazsGpu1AfpqWesbf6qEqGa3T+SWdAxD20H1EjgdKPk2P gu07OzsFCbZrcbMEwWg1DdCq2Z5F X-Google-Smtp-Source: APXvYqwaBycRH065D210d4D/KFStPpWw/W7aEULAK2FVSLLOmnEDRg02kpkmIwBpWG1RAPDtmC1nuA== X-Received: by 2002:a1c:6684:: with SMTP id a126mr3546960wmc.47.1552424476377; Tue, 12 Mar 2019 14:01:16 -0700 (PDT) Received: from ubuntu.home ([2a02:8071:6a3:700:a087:9044:6211:ba43]) by smtp.gmail.com with ESMTPSA id a9sm1623373wmm.10.2019.03.12.14.01.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Mar 2019 14:01:15 -0700 (PDT) From: Simon Goldschmidt To: Marek Vasut Date: Tue, 12 Mar 2019 22:01:07 +0100 Message-Id: <20190312210110.30910-2-simon.k.r.goldschmidt@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190312210110.30910-1-simon.k.r.goldschmidt@gmail.com> References: <20190312210110.30910-1-simon.k.r.goldschmidt@gmail.com> Cc: u-boot@lists.denx.de Subject: [U-Boot] [PATCH 1/4] i2c: designware: fix reset handling on socfpga gen5 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" Using this driver on socfpga gen5 with DM_I2C enabled leads to a data abort as the 'i2c' reset property cannot be found (the gen5 dtsi does not provide reset-names). The actual bug was to check 'if (&priv->reset_ctl)', which is never false. While at it, convert the driver to use 'reset_get_bulk' instead of looking at a specific named reset and also make it release the reset on driver remove before starting the OS. Fixes: 622597dee4f6 ("i2c: designware: add reset ctrl to driver") Signed-off-by: Simon Goldschmidt Reviewed-by: Heiko Schocher --- drivers/i2c/designware_i2c.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/drivers/i2c/designware_i2c.c b/drivers/i2c/designware_i2c.c index 63e40823f1..9ccc2411a6 100644 --- a/drivers/i2c/designware_i2c.c +++ b/drivers/i2c/designware_i2c.c @@ -34,7 +34,7 @@ static struct dw_scl_sda_cfg byt_config = { struct dw_i2c { struct i2c_regs *regs; struct dw_scl_sda_cfg *scl_sda_cfg; - struct reset_ctl reset_ctl; + struct reset_ctl_bulk resets; }; #ifdef CONFIG_SYS_I2C_DW_ENABLE_STATUS_UNSUPPORTED @@ -562,16 +562,22 @@ static int designware_i2c_probe(struct udevice *bus) priv->regs = (struct i2c_regs *)devfdt_get_addr_ptr(bus); } - ret = reset_get_by_name(bus, "i2c", &priv->reset_ctl); + ret = reset_get_bulk(bus, &priv->resets); if (ret) - pr_info("reset_get_by_name() failed: %d\n", ret); - - if (&priv->reset_ctl) - reset_deassert(&priv->reset_ctl); + dev_warn(bus, "Can't get reset: %d\n", ret); + else + reset_deassert_bulk(&priv->resets); return __dw_i2c_init(priv->regs, 0, 0); } +static int designware_i2c_remove(struct udevice *dev) +{ + struct dw_i2c *priv = dev_get_priv(dev); + + return reset_release_bulk(&priv->resets); +} + static int designware_i2c_bind(struct udevice *dev) { static int num_cards; @@ -613,6 +619,8 @@ U_BOOT_DRIVER(i2c_designware) = { .bind = designware_i2c_bind, .probe = designware_i2c_probe, .priv_auto_alloc_size = sizeof(struct dw_i2c), + .remove = designware_i2c_remove, + .flags = DM_FLAG_OS_PREPARE, .ops = &designware_i2c_ops, };