From patchwork Fri Oct 10 08:45:03 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yoshihiro Kaneko X-Patchwork-Id: 5064131 Return-Path: X-Original-To: patchwork-linux-sh@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 43C6AC11AC for ; Fri, 10 Oct 2014 08:45:34 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6F93420260 for ; Fri, 10 Oct 2014 08:45:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7DB8B200F3 for ; Fri, 10 Oct 2014 08:45:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751916AbaJJIp3 (ORCPT ); Fri, 10 Oct 2014 04:45:29 -0400 Received: from mail-pa0-f51.google.com ([209.85.220.51]:45848 "EHLO mail-pa0-f51.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752521AbaJJIp0 (ORCPT ); Fri, 10 Oct 2014 04:45:26 -0400 Received: by mail-pa0-f51.google.com with SMTP id lj1so1356131pab.10 for ; Fri, 10 Oct 2014 01:45:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=JGqlv4t8IqDaptpyKLyODsDWyW6tuYpAyk8SuRgj89o=; b=MHHDUKUZbNDE/xLufatU/e+9FXxxQfR8NZy5K0HzqCjePwPklV1WaI89XexWLzP4f9 76Sttwg/sFBncI1L9FcQfVp7iohQh5Ynh0FjSbPKiPddtz11qkucqjtfwUN03/tjXr2l 2bzzauh50KCJ3qbs6mZVR1+y9h9/ijW8Pwla2kbz5+uG6jc5e8P4uu0zB6FzzxFGMakA CQHJDI9wbkHl70GNJcNdNM6XcyvUyVbOy3jnqe7dU/XVkx2WHsTaS7Y3WrBWKqbnzXzM tMeakmnH7kD+LYCgxPVeA/+v2xEt3co+DCk1pan3mQFCjdZNRy5zL4lvbgcQ+6QrJvqU oBKQ== X-Received: by 10.68.108.226 with SMTP id hn2mr3661338pbb.29.1412930726392; Fri, 10 Oct 2014 01:45:26 -0700 (PDT) Received: from localhost.localdomain (p5095-ipngn6701marunouchi.tokyo.ocn.ne.jp. [153.174.4.95]) by mx.google.com with ESMTPSA id nd6sm2750723pbc.28.2014.10.10.01.45.24 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 10 Oct 2014 01:45:25 -0700 (PDT) From: Yoshihiro Kaneko To: linux-ide@vger.kernel.org Cc: Tejun Heo , Simon Horman , Magnus Damm , linux-sh@vger.kernel.org Subject: [PATCH] ata: sata_rcar: Add DIPM mode disabling workaround Date: Fri, 10 Oct 2014 17:45:03 +0900 Message-Id: <1412930703-24976-1-git-send-email-ykaneko0929@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: linux-sh-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, 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: Koji Matsuoka This workaround must be applied to R8A7790(H2) ES1 Signed-off-by: Koji Matsuoka Signed-off-by: Yoshihiro Kaneko --- This patch is against for-next branch of Tejun's libata repo. drivers/ata/sata_rcar.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/ata/sata_rcar.c b/drivers/ata/sata_rcar.c index 61eb6d7..0ba5974 100644 --- a/drivers/ata/sata_rcar.c +++ b/drivers/ata/sata_rcar.c @@ -143,6 +143,11 @@ #define RCAR_GEN2_PHY_CTL5_DC BIT(1) /* DC connection */ #define RCAR_GEN2_PHY_CTL5_TR BIT(2) /* Termination Resistor */ +/* Product Register */ +#define PRODUCT_REGISTER 0xFF000044 +#define PRODUCT_CUT_MASK 0x00007FF0 +#define PRODUCT_H2_BIT (0x45 << 8) + enum sata_rcar_type { RCAR_GEN1_SATA, RCAR_GEN2_SATA, @@ -751,18 +756,30 @@ done: return IRQ_RETVAL(handled); } -static void sata_rcar_setup_port(struct ata_host *host) +static int sata_rcar_setup_port(struct ata_host *host) { struct ata_port *ap = host->ports[0]; struct ata_ioports *ioaddr = &ap->ioaddr; struct sata_rcar_priv *priv = host->private_data; void __iomem *base = priv->base; + void __iomem *product_reg; ap->ops = &sata_rcar_port_ops; ap->pio_mask = ATA_PIO4; ap->udma_mask = ATA_UDMA6; ap->flags |= ATA_FLAG_SATA; + product_reg = ioremap_nocache(PRODUCT_REGISTER, 0x04); + if (!product_reg) { + dev_warn(host->dev, "ioremap fail\n"); + return -ENOMEM; + } + /* Add the workaround of DIPM mode disabling in R-Car H2 ES1.x.*/ + if ((readl(product_reg) & PRODUCT_CUT_MASK) == PRODUCT_H2_BIT) + ap->flags |= ATA_FLAG_NO_DIPM; + + iounmap(product_reg); + ioaddr->cmd_addr = base + SDATA_REG; ioaddr->ctl_addr = base + SSDEVCON_REG; ioaddr->scr_addr = base + SCRSSTS_REG; @@ -778,6 +795,8 @@ static void sata_rcar_setup_port(struct ata_host *host) ioaddr->device_addr = ioaddr->cmd_addr + (ATA_REG_DEVICE << 2); ioaddr->status_addr = ioaddr->cmd_addr + (ATA_REG_STATUS << 2); ioaddr->command_addr = ioaddr->cmd_addr + (ATA_REG_CMD << 2); + + return 0; } static void sata_rcar_init_controller(struct ata_host *host) @@ -902,7 +921,9 @@ static int sata_rcar_probe(struct platform_device *pdev) } /* setup port */ - sata_rcar_setup_port(host); + ret = sata_rcar_setup_port(host); + if (ret) + goto cleanup; /* initialize host controller */ sata_rcar_init_controller(host);