From patchwork Tue Aug 2 19:31:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michael Weiser X-Patchwork-Id: 9260273 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A7EEA6077C for ; Tue, 2 Aug 2016 19:40:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 97F8428487 for ; Tue, 2 Aug 2016 19:40:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8CF8C284F4; Tue, 2 Aug 2016 19:40:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00,FREEMAIL_FROM, RCVD_IN_DNSWL_MED autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 8811C28487 for ; Tue, 2 Aug 2016 19:40:45 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUfWp-0001CP-5o; Tue, 02 Aug 2016 19:39:03 +0000 Received: from heinz.dinsnail.net ([85.214.155.104]) by bombadil.infradead.org with esmtps (Exim 4.85_2 #1 (Red Hat Linux)) id 1bUfWg-0000vv-7D for linux-arm-kernel@lists.infradead.org; Tue, 02 Aug 2016 19:38:55 +0000 Received: from heinz.dinsnail.net (localhost [127.0.0.1]) by heinz.dinsnail.net (8.14.9/8.14.9) with ESMTP id u72Ja1Dr005327; Tue, 2 Aug 2016 21:36:01 +0200 Received: from eldalonde.UUCP (uucp@localhost) by heinz.dinsnail.net (8.14.9/8.14.9/Submit) with bsmtp id u72Ja18G005326; Tue, 2 Aug 2016 21:36:01 +0200 Received: from rivendell.weiser.dinsnail.net (rivendell.weiser.dinsnail.net [192.168.1.8]) by eldalonde.weiser.dinsnail.net (8.14.9/8.14.8) with ESMTP id u72JVWUe014590; Tue, 2 Aug 2016 21:31:32 +0200 Received: (from michael@localhost) by rivendell.weiser.dinsnail.net (8.14.9/8.14.3/Submit) id u72JVWEl001638; Tue, 2 Aug 2016 21:31:32 +0200 From: Michael Weiser To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 1/5] mmc: sunxi-mmc: change idma descriptor to __le32 Date: Tue, 2 Aug 2016 21:31:11 +0200 Message-Id: <20160802193115.850-2-michael.weiser@gmx.de> X-Mailer: git-send-email 2.9.2 In-Reply-To: <20160802193115.850-1-michael.weiser@gmx.de> References: <20160802193115.850-1-michael.weiser@gmx.de> X-dinsnail.net-MailScanner-ID: u72Ja1Dr005327 X-MailScanner: Found to be clean X-MailScanner-From: michael@rivendell.weiser.dinsnail.net X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160802_123854_706152_E027CCEF X-CRM114-Status: GOOD ( 11.51 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-mmc@vger.kernel.org, Ulf Hansson , Michael Weiser , Chen-Yu Tsai MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP The sunxi-mmc driver does not take into account the processor may be big endian when writing the DMA descriptors. This causes cards not to be detected when running a big-endian kernel. Change the descriptors for IDMA to use __le32 and ensure they are suitably swapped before writing. Tested successfully on the Cubieboard2. Signed-off-by: Michael Weiser Acked-by: Maxime Ripard Cc: Ulf Hansson Cc: Chen-Yu Tsai Cc: linux-mmc@vger.kernel.org --- drivers/mmc/host/sunxi-mmc.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c index 2ee4c21..1e6df8a 100644 --- a/drivers/mmc/host/sunxi-mmc.c +++ b/drivers/mmc/host/sunxi-mmc.c @@ -223,10 +223,10 @@ struct sunxi_mmc_clk_delay { }; struct sunxi_idma_des { - u32 config; - u32 buf_size; - u32 buf_addr_ptr1; - u32 buf_addr_ptr2; + __le32 config; + __le32 buf_size; + __le32 buf_addr_ptr1; + __le32 buf_addr_ptr2; }; struct sunxi_mmc_host { @@ -325,22 +325,25 @@ static void sunxi_mmc_init_idma_des(struct sunxi_mmc_host *host, int i, max_len = (1 << host->idma_des_size_bits); for (i = 0; i < data->sg_len; i++) { - pdes[i].config = SDXC_IDMAC_DES0_CH | SDXC_IDMAC_DES0_OWN | - SDXC_IDMAC_DES0_DIC; + pdes[i].config = cpu_to_le32(SDXC_IDMAC_DES0_CH | + SDXC_IDMAC_DES0_OWN | + SDXC_IDMAC_DES0_DIC); if (data->sg[i].length == max_len) pdes[i].buf_size = 0; /* 0 == max_len */ else - pdes[i].buf_size = data->sg[i].length; + pdes[i].buf_size = cpu_to_le32(data->sg[i].length); next_desc += sizeof(struct sunxi_idma_des); - pdes[i].buf_addr_ptr1 = sg_dma_address(&data->sg[i]); - pdes[i].buf_addr_ptr2 = (u32)next_desc; + pdes[i].buf_addr_ptr1 = + cpu_to_le32(sg_dma_address(&data->sg[i])); + pdes[i].buf_addr_ptr2 = cpu_to_le32((u32)next_desc); } - pdes[0].config |= SDXC_IDMAC_DES0_FD; - pdes[i - 1].config |= SDXC_IDMAC_DES0_LD | SDXC_IDMAC_DES0_ER; - pdes[i - 1].config &= ~SDXC_IDMAC_DES0_DIC; + pdes[0].config |= cpu_to_le32(SDXC_IDMAC_DES0_FD); + pdes[i - 1].config |= cpu_to_le32(SDXC_IDMAC_DES0_LD | + SDXC_IDMAC_DES0_ER); + pdes[i - 1].config &= cpu_to_le32(~SDXC_IDMAC_DES0_DIC); pdes[i - 1].buf_addr_ptr2 = 0; /*