From patchwork Mon Jan 8 13:45:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amitkumar Karwar X-Patchwork-Id: 856808 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=kernel-team-bounces@lists.ubuntu.com; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="BpHvIWxI"; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3zFcH64rhzz9t2x; Tue, 9 Jan 2018 00:55:30 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1eYXtc-0002uY-NQ; Mon, 08 Jan 2018 13:55:24 +0000 Received: from mail-pf0-f194.google.com ([209.85.192.194]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1eYXta-0002uF-P8 for kernel-team@lists.ubuntu.com; Mon, 08 Jan 2018 13:55:23 +0000 Received: by mail-pf0-f194.google.com with SMTP id 23so3304659pfp.3 for ; Mon, 08 Jan 2018 05:55:22 -0800 (PST) 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=SD+kJLIW1UbCNt0Vi+MLtrani15Pe0JwJ+LPiQh+OlY=; b=BpHvIWxIw/GM7eIVZC+2whYK5vIscUPk4kuN1dqbq4y7tyvLKGAtPx77alOwyX6Ssm dxzLoXmxqL7dZcqX8pidiQNIzoSZpfCSILRAq/IQoai2T3lrJgi9gb/MkBt7Ohp2Kjg3 mtSC1TUMEc05+yvz+TsEmEp3zeJ//71IEwm2OAHCyaLUT2SFSSv8p+uQ7HUgdP0Al4WP v6uYxQgQYpnb5PTjdxynzDlU6fhl8NOUXvp/Lc+dRCj3XO0SVkak2jLdLGUWG+ONyEjY SnSz+TkdzQIStflurIdOGdTfvTAqnqUslyn3NDYio/77J2BPrfqnrm/dwkGW4HpLXqhV 7Hww== 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=SD+kJLIW1UbCNt0Vi+MLtrani15Pe0JwJ+LPiQh+OlY=; b=i67YJoRaRKsNTIdGdNMjytGfnBA1z9pd6HxYctjEEQdVU0wT8aDCfZmTzjPNlRNeyr PSEwgXR9Oolzin6hS8z1W1hIv9Q0M+vByfogEp+KQwvU95IW3Pd5vmu+hxeIREsNviUW txf8O5D3ERMJ0zU4HttmXa9mxam1GGA4Xa/mVGDe2s0BHZF1KzQFXEoEj4dCuJMQBfnm v8iAdTklS0qKNcwbf7fqrBhBtNr3serqC/yhNf+ZKm+a8rqKaVMbFx7DMMZE8eULJEIT Ppe/E3uXh2Yads7vprpS0PdQyVZ17U2JylNoe3TBBcNVkzlXqo4R5oktz4n2OUhexZ2u xgFA== X-Gm-Message-State: AKGB3mKJ4dPjQ93PqN96VQTFps9onB9hsx0LlqdxlpJ49YNVg3w8lZ3j xscnX/D5/2LsP59m8SU3MOb4hKeZ X-Google-Smtp-Source: ACJfBosTitwFMwbF2jDFeNvLvg4K48r3QQVl93dqsgbH0APllvaDz8LjcaiyeFsklL0p6H1meI7Iyw== X-Received: by 10.159.244.151 with SMTP id y23mr12276928plr.204.1515419721115; Mon, 08 Jan 2018 05:55:21 -0800 (PST) Received: from cpu185.redpinesignals.com ([203.196.161.90]) by smtp.gmail.com with ESMTPSA id z123sm24072828pgz.22.2018.01.08.05.55.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 08 Jan 2018 05:55:20 -0800 (PST) From: Amitkumar Karwar To: kernel-team@lists.ubuntu.com Subject: [PATCH 2/4] UBUNTU: SAUCE: Redpine: fix reset card issue Date: Mon, 8 Jan 2018 19:15:45 +0530 Message-Id: <1515419147-20863-2-git-send-email-amitkarwar@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515419147-20863-1-git-send-email-amitkarwar@gmail.com> References: <1515419147-20863-1-git-send-email-amitkarwar@gmail.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.20 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Amitkumar Karwar , Prameela Rani Garnepudi , Prameela Rani Garnepudi MIME-Version: 1.0 Errors-To: kernel-team-bounces@lists.ubuntu.com Sender: "kernel-team" From: Prameela Rani Garnepudi BugLink: https://bugs.launchpad.net/bugs/1736097 BugLink: https://bugs.launchpad.net/bugs/1738169 Sometimes we don't get response for SDIO commands during reset. Additional parameter 'expected response' is added to cmd52readbyte() and cmd52writebyte(). This parameter is false during reset (To avoid waiting for response) and true while disabling or enabling SDIO interrupts. Signed-off-by: Prameela Rani Garnepudi Signed-off-by: Amitkumar Karwar --- ubuntu/rsi/rsi_91x_sdio.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/ubuntu/rsi/rsi_91x_sdio.c b/ubuntu/rsi/rsi_91x_sdio.c index 336f059..a2e25d0 100644 --- a/ubuntu/rsi/rsi_91x_sdio.c +++ b/ubuntu/rsi/rsi_91x_sdio.c @@ -88,7 +88,8 @@ static u32 rsi_sdio_set_cmd52_arg(bool rw, */ static int rsi_cmd52writebyte(struct mmc_card *card, u32 address, - u8 byte) + u8 byte, + bool expect_resp) { struct mmc_command io_cmd; u32 arg; @@ -97,7 +98,9 @@ static int rsi_cmd52writebyte(struct mmc_card *card, arg = rsi_sdio_set_cmd52_arg(1, 0, 0, address, byte); io_cmd.opcode = SD_IO_RW_DIRECT; io_cmd.arg = arg; - io_cmd.flags = /*MMC_RSP_R5 | */MMC_CMD_AC; + io_cmd.flags = MMC_CMD_AC; + if (expect_resp) + io_cmd.flags |= MMC_RSP_R5; return mmc_wait_for_cmd(card->host, &io_cmd, 0); } @@ -112,7 +115,8 @@ static int rsi_cmd52writebyte(struct mmc_card *card, */ static int rsi_cmd52readbyte(struct mmc_card *card, u32 address, - u8 *byte) + u8 *byte, + bool expect_resp) { struct mmc_command io_cmd; u32 arg; @@ -122,7 +126,9 @@ static int rsi_cmd52readbyte(struct mmc_card *card, arg = rsi_sdio_set_cmd52_arg(0, 0, 0, address, 0); io_cmd.opcode = SD_IO_RW_DIRECT; io_cmd.arg = arg; - io_cmd.flags = /*MMC_RSP_R5 | */MMC_CMD_AC; + io_cmd.flags = MMC_CMD_AC; + if (expect_resp) + io_cmd.flags |= MMC_RSP_R5; err = mmc_wait_for_cmd(card->host, &io_cmd, 0); if ((!err) && (byte)) @@ -311,7 +317,7 @@ static void rsi_reset_card(struct sdio_func *pfunction) /* Reset 9110 chip */ err = rsi_cmd52writebyte(pfunction->card, SDIO_CCCR_ABORT, - (1 << 3)); + (1 << 3), true); /* Card will not send any response as it is getting reset immediately * Hence expect a timeout status from host controller @@ -446,14 +452,16 @@ static void rsi_reset_card(struct sdio_func *pfunction) /* Enable high speed */ if (card->host->caps & MMC_CAP_SD_HIGHSPEED) { ven_rsi_dbg(ERR_ZONE, "%s: Set high speed mode\n", __func__); - err = rsi_cmd52readbyte(card, SDIO_CCCR_SPEED, &cmd52_resp); + err = rsi_cmd52readbyte(card, SDIO_CCCR_SPEED, &cmd52_resp, + true); if (err) { ven_rsi_dbg(ERR_ZONE, "%s: CCCR speed reg read failed: %d\n", __func__, err); } else { err = rsi_cmd52writebyte(card, SDIO_CCCR_SPEED, - (cmd52_resp | SDIO_SPEED_EHS)); + (cmd52_resp | SDIO_SPEED_EHS), + true); if (err) { ven_rsi_dbg(ERR_ZONE, "%s: CCR speed regwrite failed %d\n", @@ -482,7 +490,7 @@ static void rsi_reset_card(struct sdio_func *pfunction) err = rsi_cmd52writebyte(card, SDIO_CCCR_IF, (SDIO_BUS_CD_DISABLE | - SDIO_BUS_WIDTH_4BIT)); + SDIO_BUS_WIDTH_4BIT), true); if (err) { ven_rsi_dbg(ERR_ZONE, "%s: Set bus mode failed : %d\n", __func__, err); @@ -1220,7 +1228,7 @@ static int rsi_sdio_disable_interrupts(struct sdio_func *pfunction) ven_rsi_dbg(ERR_ZONE, "\nInterrupts cleared"); sdio_claim_host(pfunction); - ret = rsi_cmd52readbyte(pfunction->card, 0x04, &data); + ret = rsi_cmd52readbyte(pfunction->card, 0x04, &data, false); if (ret < 0) { ven_rsi_dbg(ERR_ZONE, "%s: Failed to read INTR_EN register\n", @@ -1233,7 +1241,7 @@ static int rsi_sdio_disable_interrupts(struct sdio_func *pfunction) /* And bit0 and b1 */ data &= 0xfc; - ret = rsi_cmd52writebyte(pfunction->card, 0x04, data); + ret = rsi_cmd52writebyte(pfunction->card, 0x04, data, false); if (ret < 0) { ven_rsi_dbg(ERR_ZONE, "%s: Failed to Write to INTR_EN register\n", @@ -1241,7 +1249,7 @@ static int rsi_sdio_disable_interrupts(struct sdio_func *pfunction) sdio_release_host(pfunction); return ret; } - ret = rsi_cmd52readbyte(pfunction->card, 0x04, &data); + ret = rsi_cmd52readbyte(pfunction->card, 0x04, &data, false); if (ret < 0) { ven_rsi_dbg(ERR_ZONE, "%s: Failed to read INTR_EN register\n", @@ -1262,7 +1270,7 @@ static int rsi_sdio_enable_interrupts(struct sdio_func *pfunction) int ret; sdio_claim_host(pfunction); - ret = rsi_cmd52readbyte(pfunction->card, 0x04, &data); + ret = rsi_cmd52readbyte(pfunction->card, 0x04, &data, false); if (ret < 0) { ven_rsi_dbg(ERR_ZONE, "%s: Failed to read INTR_EN register\n", __func__); @@ -1274,7 +1282,7 @@ static int rsi_sdio_enable_interrupts(struct sdio_func *pfunction) /* Enable b1 and b0 */ data |= 0x03; - ret = rsi_cmd52writebyte(pfunction->card, 0x04, data); + ret = rsi_cmd52writebyte(pfunction->card, 0x04, data, false); if (ret < 0) { ven_rsi_dbg(ERR_ZONE, "%s: Failed to Write to INTR_EN register\n", @@ -1282,8 +1290,8 @@ static int rsi_sdio_enable_interrupts(struct sdio_func *pfunction) sdio_release_host(pfunction); return ret; } - - ret = rsi_cmd52readbyte(pfunction->card, 0x04, &data); + + ret = rsi_cmd52readbyte(pfunction->card, 0x04, &data, false); if (ret < 0) { ven_rsi_dbg(ERR_ZONE, "%s: Failed to read INTR_EN register\n", __func__);