From mboxrd@z Thu Jan 1 00:00:00 1970 From: Doug Anderson Subject: [PATCH v4 0/3] Fixes for SDIO interrupts for dw_mmc Date: Tue, 2 Dec 2014 12:49:54 -0800 Message-ID: <1417553397-460-1-git-send-email-dianders@chromium.org> Return-path: Received: from mail-ie0-f172.google.com ([209.85.223.172]:61072 "EHLO mail-ie0-f172.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932692AbaLBUuX (ORCPT ); Tue, 2 Dec 2014 15:50:23 -0500 Received: by mail-ie0-f172.google.com with SMTP id tr6so12486718ieb.17 for ; Tue, 02 Dec 2014 12:50:22 -0800 (PST) Sender: linux-mmc-owner@vger.kernel.org List-Id: linux-mmc@vger.kernel.org To: Jaehoon Chung , Seungwon Jeon , Ulf Hansson Cc: Alim Akhtar , Sonny Rao , Andrew Bresticker , Heiko Stuebner , Doug Anderson , linux@arm.linux.org.uk, wsa@the-dreams.de, tony@atomide.com, linux-kernel@vger.kernel.org, s.hauer@pengutronix.de, linux-mmc@vger.kernel.org, chris@printf.net, gsoutade@neotion.com, joe@perches.com, axel.lin@ingics.com, linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org Bing Zhao at Marvell found a problem with dw_mmc where interrupts weren't firing sometimes. He tracked it down to a read-modify-write problem with the INTMASK. These three patches fix the problem. Note: I've picked up a > 1-year old series here to make another attempt at landing it upstream. These patches have been in shipping Chromebooks for the last year. There are essentially no changes from the last v3 other than a rebase. The first patch extends the "init_card()" mechanism of MMC core to actually be called for all card types, not just SDIO. That could be applied any time and should fix at least one longstanding bug (untested). The second patch is a cleanup patch to use init_card() to move things around a bit so we don't need to handle SDIO cards in such a strange place. On earlier versions of this patch Seungwon brought up a few points which I have _not_ addressed. See . Other than talk of cards with out of band interrupts maybe being able to gate their clocks, he wanted to use MMC_QUIRK_BROKEN_CLK_GATING. I didn't do that because of the ordering of init_card() and when the quirks are set. Some users of init_card() like pandora_wl1251_init_card() rely on it being called very early in the process. pandora_wl1251_init_card() hardcodes a vendor and device and thus need to be called super early. On the other hand the code that adds quirks _reads_ the vendor and device. It can't possibly move before init_card(). If folks are willing to take an additional host op of init_card_late() I can certainly go that way, though. The third patch is (I think) reviewed and ready to go assuming the other two land. Changes in v3: - Add fixup to pandora_wl1251_init_card(). Changes in v2: - mmc core change new for this version. - Fixed "|" to "&". - intmask_lock renamed to irq_lock Doug Anderson (3): mmc: core: Support the optional init_card() callback for MMC and SD mmc: dw_mmc: Cleanup disable of low power mode w/ SDIO interrupts mmc: dw_mmc: Protect read-modify-write of INTMASK with a lock arch/arm/mach-omap2/board-omap3pandora.c | 14 +++--- drivers/mmc/core/mmc.c | 6 +++ drivers/mmc/core/sd.c | 7 ++- drivers/mmc/host/dw_mmc.c | 80 +++++++++++++++++++------------- drivers/mmc/host/dw_mmc.h | 1 + include/linux/mmc/dw_mmc.h | 6 +++ 6 files changed, 74 insertions(+), 40 deletions(-) -- 2.2.0.rc0.207.ga3a616c