From patchwork Sat Jan 4 09:14:35 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 3433311 Return-Path: X-Original-To: patchwork-linux-arm@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 689D69F295 for ; Sat, 4 Jan 2014 09:15:47 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A1AB32011D for ; Sat, 4 Jan 2014 09:15:46 +0000 (UTC) Received: from casper.infradead.org (casper.infradead.org [85.118.1.10]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7EFC3200FF for ; Sat, 4 Jan 2014 09:15:45 +0000 (UTC) Received: from merlin.infradead.org ([2001:4978:20e::2]) by casper.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VzNKG-0001NT-JQ; Sat, 04 Jan 2014 09:15:24 +0000 Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VzNKD-0007XW-Vj; Sat, 04 Jan 2014 09:15:21 +0000 Received: from mx1.redhat.com ([209.132.183.28]) by merlin.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1VzNK9-0007WI-Vy for linux-arm-kernel@lists.infradead.org; Sat, 04 Jan 2014 09:15:19 +0000 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s049EqBG029982 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sat, 4 Jan 2014 04:14:52 -0500 Received: from localhost.localdomain.com (vpn1-5-91.ams2.redhat.com [10.36.5.91]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id s049El9S012296; Sat, 4 Jan 2014 04:14:50 -0500 From: Hans de Goede To: Tejun Heo Subject: [PATCH v2 1/4] libahci: Add a pre ahci_start_engine hook Date: Sat, 4 Jan 2014 10:14:35 +0100 Message-Id: <1388826878-5602-2-git-send-email-hdegoede@redhat.com> In-Reply-To: <1388826878-5602-1-git-send-email-hdegoede@redhat.com> References: <1388826878-5602-1-git-send-email-hdegoede@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20140104_041518_227229_EE51FE9B X-CRM114-Status: GOOD ( 14.07 ) X-Spam-Score: -7.5 (-------) Cc: Oliver Schinagl , devicetree@vger.kernel.org, Hans de Goede , Oliver Schinagl , linux-ide@vger.kernel.org, linux-sunxi@googlegroups.com, Maxime Ripard , linux-arm-kernel@lists.infradead.org X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Oliver Schinagl Allwinner A10 and A20 ARM SoCs have an AHCI sata controller which need a special register to be poked before starting the DMA engine. This register gets reset on an ahci_stop_engine call, so there is no other place then ahci_start_engine where this poking can be done. This commit adds a pre ahci_start_engine hook for use by the Allwinner AHCI driver (and potentially other drivers in the future). Signed-off-by: Hans de Goede --- drivers/ata/ahci.h | 2 ++ drivers/ata/libahci.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 2289efd..1bba479 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -323,6 +323,8 @@ struct ahci_host_priv { u32 em_msg_type; /* EM message type */ struct clk *clk; /* Only for platforms supporting clk */ void *plat_data; /* Other platform data */ + /* Optional pre ahci_start_engine hook */ + void (*pre_start_engine)(struct ata_port *ap); }; extern int ahci_ignore_sss; diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c index c482f8c..780e9df 100644 --- a/drivers/ata/libahci.c +++ b/drivers/ata/libahci.c @@ -568,8 +568,12 @@ static int ahci_scr_write(struct ata_link *link, unsigned int sc_reg, u32 val) void ahci_start_engine(struct ata_port *ap) { void __iomem *port_mmio = ahci_port_base(ap); + struct ahci_host_priv *hpriv = ap->host->private_data; u32 tmp; + if (hpriv->pre_start_engine) + hpriv->pre_start_engine(ap); + /* start DMA */ tmp = readl(port_mmio + PORT_CMD); tmp |= PORT_CMD_START;