Received: by 10.213.65.68 with SMTP id h4csp456163imn; Tue, 13 Mar 2018 09:37:03 -0700 (PDT) X-Google-Smtp-Source: AG47ELuky+TXJ9UdF6FGGZLIEAT9TvNJEpX2zLospg3kBzTV5AuByfbZdHSJBytCCWxXwsBm9h47 X-Received: by 2002:a17:902:48c8:: with SMTP id u8-v6mr1127975plh.306.1520959023651; Tue, 13 Mar 2018 09:37:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520959023; cv=none; d=google.com; s=arc-20160816; b=uns6UUPCstn1QWqU/RhxsNZ2vyLZUN2aSASqTZUOzLgGgh7sPTr32qKm4SrqFXt2na uFAlrI+Xh+uQg4bBF6jSRuVg3h83729wBNTecXjcEKQIuyZ0+ZxEJhrZM8aVrDQCDrdv IsHJEGY/ub2WmH5yzAQADqCHtepxg3LPkyUGtizavKL4JubWKW3JTOYvUN2dfiOU/QOs vNNrRlkbAUGaJ+R2048Pu052zAdauYBEFoUSNr0K1i9RYa0KXJeL6K3VueZ4pb0abSJw q3mqfZokVAbs3BEEJ6aH+GMiOgTWMDqyOWRbACPpbtBSQiCrh/oRf661XjaOPnXQc93d v0Vg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=IZjm9ZvlMNDitbfRXF9AN+FaCPY+76+Myf18C9kchKQ=; b=oLpyvxHJUec+/kzuBQXFpzRKDgiENPNb4NDa7yvIYxNC5VuHNcRMgWb1poFD9jCabR rMz3RzrMjLF6tMALG3kV+Onl6ByVQRO2CXxeS8O3B5/kZ1PMGpoJ4ncAKZiBTuUbXcjn B56jeUt7UNRTMwN7Q1euhsQQZ7xfnKnIJ4HgH2uCECI5iTiDhmFcow2ydUhiQi1J+zcn 5eWZKje/LC/JoTzeXWIVBvwd3T3Knlzy+1FkpuptzelkI/cckchOF7y2KQKKur7oMqpE wlmTug6EUmF4YZNm3tqMlHeDv1SRhtunttFFyBpsL8KI+xFJ1V+KPC/ZlP3hkomIkInR 7ZQQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id a23si349744pfn.161.2018.03.13.09.36.49; Tue, 13 Mar 2018 09:37:03 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933659AbeCMQf1 (ORCPT + 99 others); Tue, 13 Mar 2018 12:35:27 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:59181 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S933517AbeCMQe5 (ORCPT ); Tue, 13 Mar 2018 12:34:57 -0400 Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx08-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w2DGY5Jm028955; Tue, 13 Mar 2018 17:34:31 +0100 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2gpc6wa0bj-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Tue, 13 Mar 2018 17:34:31 +0100 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 053D05D; Tue, 13 Mar 2018 16:34:28 +0000 (GMT) Received: from Webmail-eu.st.com (sfhdag4node2.st.com [10.75.127.11]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 9DFA9A634; Tue, 13 Mar 2018 16:34:27 +0000 (GMT) Received: from localhost (10.75.127.45) by SFHDAG4NODE2.st.com (10.75.127.11) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Tue, 13 Mar 2018 17:34:27 +0100 From: To: Philipp Zabel , Rob Herring , Mark Rutland , Maxime Coquelin , Alexandre Torgue , CC: , , , , Loic PALLARDY , benjamin GAIGNARD , Michael Turquette , , Gabriel Fernandez Subject: [PATCH 2/2] reset: simple: Enable stm32mp1 reset driver Date: Tue, 13 Mar 2018 17:34:19 +0100 Message-ID: <1520958859-27911-3-git-send-email-gabriel.fernandez@st.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1520958859-27911-1-git-send-email-gabriel.fernandez@st.com> References: <1520958859-27911-1-git-send-email-gabriel.fernandez@st.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.75.127.45] X-ClientProxiedBy: SFHDAG6NODE2.st.com (10.75.127.17) To SFHDAG4NODE2.st.com (10.75.127.11) X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-03-13_07:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Gabriel Fernandez The stm32mp1 reset driver is quite similar to simple reset driver. The difference is that stm32mp1 has a reset SET register and a reset CLEAR register. Writing '0' on reset SET register has no effect Writing '1' on reset SET register activates the reset of the corresponding peripheral Writing '0' on reset CLEAR register has no effect Writing '1' on reset CLEAR register releases the reset of the corresponding peripheral Signed-off-by: Gabriel Fernandez --- drivers/reset/reset-simple.c | 27 +++++++++++++++++++++------ drivers/reset/reset-simple.h | 1 + 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/drivers/reset/reset-simple.c b/drivers/reset/reset-simple.c index f7ce891..57ecb49 100644 --- a/drivers/reset/reset-simple.c +++ b/drivers/reset/reset-simple.c @@ -41,15 +41,23 @@ static int reset_simple_update(struct reset_controller_dev *rcdev, int offset = id % (reg_width * BITS_PER_BYTE); unsigned long flags; u32 reg; + void __iomem *addr; spin_lock_irqsave(&data->lock, flags); - reg = readl(data->membase + (bank * reg_width)); - if (assert ^ data->active_low) - reg |= BIT(offset); - else - reg &= ~BIT(offset); - writel(reg, data->membase + (bank * reg_width)); + addr = data->membase + (bank * reg_width); + if (data->clr_offset) { + reg = BIT(offset); + if (!assert) + addr += data->clr_offset; + } else { + reg = readl(addr); + if (assert ^ data->active_low) + reg |= BIT(offset); + else + reg &= ~BIT(offset); + } + writel(reg, addr); spin_unlock_irqrestore(&data->lock, flags); @@ -103,6 +111,7 @@ struct reset_simple_devdata { u32 nr_resets; bool active_low; bool status_active_low; + u32 clr_offset; }; #define SOCFPGA_NR_BANKS 8 @@ -118,9 +127,14 @@ struct reset_simple_devdata { .status_active_low = true, }; +struct reset_simple_devdata reset_stm32mp1 = { + .clr_offset = 0x4, +}; + static const struct of_device_id reset_simple_dt_ids[] = { { .compatible = "altr,rst-mgr", .data = &reset_simple_socfpga }, { .compatible = "st,stm32-rcc", }, + { .compatible = "st,stm32mp1-rcc", .data = &reset_stm32mp1}, { .compatible = "allwinner,sun6i-a31-clock-reset", .data = &reset_simple_active_low }, { .compatible = "zte,zx296718-reset", @@ -163,6 +177,7 @@ static int reset_simple_probe(struct platform_device *pdev) data->rcdev.nr_resets = devdata->nr_resets; data->active_low = devdata->active_low; data->status_active_low = devdata->status_active_low; + data->clr_offset = devdata->clr_offset; } if (of_device_is_compatible(dev->of_node, "altr,rst-mgr") && diff --git a/drivers/reset/reset-simple.h b/drivers/reset/reset-simple.h index 8a49602..0bbdd34 100644 --- a/drivers/reset/reset-simple.h +++ b/drivers/reset/reset-simple.h @@ -38,6 +38,7 @@ struct reset_simple_data { struct reset_controller_dev rcdev; bool active_low; bool status_active_low; + u32 clr_offset; }; extern const struct reset_control_ops reset_simple_ops; -- 1.9.1