From patchwork Mon Jan 8 13:54:08 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amitkumar Karwar X-Patchwork-Id: 856815 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="JKiQh44f"; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3zFcSp4kr0z9t3v; Tue, 9 Jan 2018 01:03:53 +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 1eYY1l-0003oI-PC; Mon, 08 Jan 2018 14:03:49 +0000 Received: from mail-pg0-f65.google.com ([74.125.83.65]) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1eYY1j-0003ng-0h for kernel-team@lists.ubuntu.com; Mon, 08 Jan 2018 14:03:47 +0000 Received: by mail-pg0-f65.google.com with SMTP id t67so5570834pgc.5 for ; Mon, 08 Jan 2018 06:03:46 -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=JKiQh44f8AaBCB2Y5fTxqoJ5P4gCIqBsBRuZ5v3CS7r1zV5BjLyJTPIfn29+m7r8Ia gdhbUYJ42Qv3TZmbXOOxHVbsvPN6bQpT7URkkN3L8rIkUUjUeqSBuL7ps2YD1GBGkWrZ 7ruvbcnUTp4oktG9jX+P5rMlkq8k21ylAY9uvwcWPXp61BBl3gEn23BQNikeihmvrnmh 5xkYeTmlEos4fyGc/lhuy4TOz/hlbbAg50PHm6L4GE4n/vBnIBwOXz7UVbzsn1aBEfWz E0PGnxg8UXSfBlVCo9BC4zE90IS6xnvGTKN8JXBVGLzfnwzaeEVQCf0Nl3Qo+zYH07aX XlmA== 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=m72R4uUYE7yKSIv2XExHamWHkh+cDQhEkPTU1pAyAOaaUcbdk5UqsjuKi4Egf7SNeN oWcWXSZXgppcnSh+e1LQbxO3M94R67dKdaggNRXOPSQ4KRFVb2pFzHKjlbkpfBwc4cv2 HyWwnUIweEMfovuplkVPN3dblAz6IX3TQMs3oGULn87Vm4A+VW0ZAQfVO9/MgM23vT77 IxL8mkk4EnY1MklsZyaaNOdM2wvKeQeFsR7yDxuEjiyH0qhW941MbAK5nWSGKB7prlF0 xeMfy7/ebVuBYHDEQu5SnnBKGLQ/vI9IMCPaU97NUVfnFgI/HkNUoRincmqZI0+4JN3t JdwQ== X-Gm-Message-State: AKGB3mIK5JJmOO10It3u9vHzNA1MLPQBBFQM7w1w7LFPtBFPXyOkmddj +kQWehYOZhTUQRvwEth4p1ZbRHVu X-Google-Smtp-Source: ACJfBovt0pz3Kr8E6yHycPmGBo+rxEya/KFLqETXdHkWXHLRgSZ++x7vUVOIEs3VF3hVStXxQBGf7A== X-Received: by 10.98.152.90 with SMTP id q87mr4239524pfd.131.1515420225226; Mon, 08 Jan 2018 06:03:45 -0800 (PST) Received: from cpu185.redpinesignals.com ([203.196.161.90]) by smtp.gmail.com with ESMTPSA id s25sm2947976pfh.4.2018.01.08.06.03.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 08 Jan 2018 06:03:44 -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:24:08 +0530 Message-Id: <1515419650-21101-2-git-send-email-amitkarwar@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1515419650-21101-1-git-send-email-amitkarwar@gmail.com> References: <1515419650-21101-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__);