From patchwork Wed Jun 21 23:20:14 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Berger X-Patchwork-Id: 779206 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3wtLLK0phyz9s7M for ; Thu, 22 Jun 2017 09:20:57 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="c6DLZJeW"; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752392AbdFUXUn (ORCPT ); Wed, 21 Jun 2017 19:20:43 -0400 Received: from mail-qt0-f193.google.com ([209.85.216.193]:36131 "EHLO mail-qt0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752424AbdFUXUl (ORCPT ); Wed, 21 Jun 2017 19:20:41 -0400 Received: by mail-qt0-f193.google.com with SMTP id s33so28243qtg.3; Wed, 21 Jun 2017 16:20:41 -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=4JPQLT2RyL+TYg99nNS+cAcyl8YBXlnAVnZpDaZAtc4=; b=c6DLZJeWIf5u8mYHVfO33ZWIi02wSnKrweIsgz6Q//VGp/sLsuYj3x2b8jag97MYMH 66g30nUWgeWmq2/DfhQAyCQ8CkP1UGVq3AKtlKTRxjTmKTkG4HBjqrlVFWt6yjvB0cf3 6fjW8ftHpbMhN9Xs5GWI4kz19K878wLVBq1a7MA9roPdOG4VsBuFmcNALqx5qRAJmZDp LIL0aHNB0D7t9z+kR/F45F8gEzEHZcxFSOaDI6HJ59Ia6p6gqLfNKj4b8BnFyKfXj4ZI lm9HsKeA2j5Nt6f58qeamgQTVkbyZagCxVgY4dSMpQIe3LAJlEtGmd4YwdXKup4lYrzM o0Cw== 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=4JPQLT2RyL+TYg99nNS+cAcyl8YBXlnAVnZpDaZAtc4=; b=ZH9ZH60vYgBk6Jqeb45vTRmii4d4b8BSHWVP51AYh6m4A70JzWGXv6jCuycGQ77LH+ eRCsgMBtaKCXFw8E66WSy9dVTkclss+R9ztneW26+7pgZElDPagIklPlA9Qpj0R5xntq B9gBGILB/5c+y4BpBYp32KDNfcKPhheV3BKzHeQSjj2XSjWgQ0jhKpvcqbvoYNtZUQ/8 mMryxxSx2iymAnbd6RKL+1HroWbepEEphEQB/btbRu1Fpyk1wMeEFdTHC0kv0Pe8aoZc 3ha7my1HVdWy8nEvxDEW4YUePf+pplBZCfFSO567fR0eScj/tzQsQPNBjrUMYBKDJeRN o/vg== X-Gm-Message-State: AKS2vOwKmFLU+upZ+EiqiOzJUdePE5O4D35BQKwgYebp27db42HNVBnj j3XXbqTM5tQE7Q== X-Received: by 10.237.33.78 with SMTP id 72mr40339683qtc.99.1498087240361; Wed, 21 Jun 2017 16:20:40 -0700 (PDT) Received: from stb-bld-02.irv.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id p36sm2411921qtf.21.2017.06.21.16.20.39 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Jun 2017 16:20:39 -0700 (PDT) From: Doug Berger To: tj@kernel.org Cc: linux-ide@vger.kernel.org, linux-kernel@vger.kernel.org, Doug Berger Subject: [PATCH 3/3] ata: ahci_brcm: Avoid writing to read-only registers Date: Wed, 21 Jun 2017 16:20:14 -0700 Message-Id: <20170621232014.27790-4-opendmb@gmail.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170621232014.27790-1-opendmb@gmail.com> References: <20170621232014.27790-1-opendmb@gmail.com> Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org This commit makes use of the AHCI_HFLAG_YES_ALPM flag to prevent the driver from writing to the read-only Host Capability register. It also sets the AHCI_HFLAG_NO_WRITE_TO_RO flag to prevent the AHCI library from writing to read-only registers. Signed-off-by: Doug Berger --- drivers/ata/ahci_brcm.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/ata/ahci_brcm.c b/drivers/ata/ahci_brcm.c index 6f8a7341fa08..5936d1679bf3 100644 --- a/drivers/ata/ahci_brcm.c +++ b/drivers/ata/ahci_brcm.c @@ -39,7 +39,6 @@ #define PIODATA_ENDIAN_SHIFT 6 #define ENDIAN_SWAP_NONE 0 #define ENDIAN_SWAP_FULL 2 - #define OVERRIDE_HWINIT BIT(16) #define SATA_TOP_CTRL_TP_CTRL 0x8 #define SATA_TOP_CTRL_PHY_CTRL 0xc #define SATA_TOP_CTRL_PHY_CTRL_1 0x0 @@ -126,17 +125,13 @@ static inline void brcm_sata_writereg(u32 val, void __iomem *addr) static void brcm_sata_alpm_init(struct ahci_host_priv *hpriv) { struct brcm_ahci_priv *priv = hpriv->plat_data; - u32 bus_ctrl, port_ctrl, host_caps; + u32 port_ctrl, host_caps; int i; /* Enable support for ALPM */ - bus_ctrl = brcm_sata_readreg(priv->top_ctrl + - SATA_TOP_CTRL_BUS_CTRL); - brcm_sata_writereg(bus_ctrl | OVERRIDE_HWINIT, - priv->top_ctrl + SATA_TOP_CTRL_BUS_CTRL); host_caps = readl(hpriv->mmio + HOST_CAP); - writel(host_caps | HOST_CAP_ALPM, hpriv->mmio); - brcm_sata_writereg(bus_ctrl, priv->top_ctrl + SATA_TOP_CTRL_BUS_CTRL); + if (!(host_caps & HOST_CAP_ALPM)) + hpriv->flags |= AHCI_HFLAG_YES_ALPM; /* * Adjust timeout to allow PLL sufficient time to lock while waking @@ -360,6 +355,7 @@ static int brcm_ahci_probe(struct platform_device *pdev) if (priv->quirks & BRCM_AHCI_QUIRK_NO_NCQ) hpriv->flags |= AHCI_HFLAG_NO_NCQ; + hpriv->flags |= AHCI_HFLAG_NO_WRITE_TO_RO; ret = ahci_platform_init_host(pdev, hpriv, &ahci_brcm_port_info, &ahci_platform_sht);