From 88a43f4cc11699aa109710cd828793bd4bb4c8ec Mon Sep 17 00:00:00 2001 From: Arne Fitzenreiter Date: Sat, 16 Jun 2012 14:58:35 +0200 Subject: [PATCH] kernel3: updated to 2.6.42.20 (aka 3.2.20). kernel3 is used for raspberry pi and pandaboard yet. --- .../kernel/kernel.config.armv5tel-ipfire-rpi | 32 +--- lfs/linux3 | 16 +- .../linux-3.2-bcm2708-sdhci_patches.patch | 138 ++++++++++++++++++ 3 files changed, 150 insertions(+), 36 deletions(-) create mode 100644 src/patches/linux-3.2-bcm2708-sdhci_patches.patch diff --git a/config/kernel/kernel.config.armv5tel-ipfire-rpi b/config/kernel/kernel.config.armv5tel-ipfire-rpi index c5a9062cb2..fa286d9314 100644 --- a/config/kernel/kernel.config.armv5tel-ipfire-rpi +++ b/config/kernel/kernel.config.armv5tel-ipfire-rpi @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 2.6.42.18 Kernel Configuration +# Linux/arm 2.6.42.20 Kernel Configuration # CONFIG_ARM=y CONFIG_SYS_SUPPORTS_APM_EMULATION=y @@ -122,10 +122,9 @@ CONFIG_PERF_USE_VMALLOC=y # CONFIG_PERF_EVENTS is not set # CONFIG_PERF_COUNTERS is not set CONFIG_VM_EVENT_COUNTERS=y -CONFIG_SLUB_DEBUG=y # CONFIG_COMPAT_BRK is not set -# CONFIG_SLAB is not set -CONFIG_SLUB=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set # CONFIG_SLOB is not set # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y @@ -2734,28 +2733,6 @@ CONFIG_USB_CXACRU=m CONFIG_USB_UEAGLEATM=m CONFIG_USB_XUSBATM=m # CONFIG_USB_GADGET is not set -# CONFIG_USB_FUSB300 is not set -# CONFIG_USB_R8A66597 is not set -# CONFIG_USB_M66592 is not set -# CONFIG_USB_NET2272 is not set -# CONFIG_USB_DUMMY_HCD is not set -# CONFIG_USB_ZERO is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_ETH is not set -# CONFIG_USB_G_NCM is not set -# CONFIG_USB_GADGETFS is not set -# CONFIG_USB_FUNCTIONFS is not set -# CONFIG_USB_FILE_STORAGE is not set -# CONFIG_USB_MASS_STORAGE is not set -# CONFIG_USB_G_SERIAL is not set -# CONFIG_USB_MIDI_GADGET is not set -# CONFIG_USB_G_PRINTER is not set -# CONFIG_USB_CDC_COMPOSITE is not set -# CONFIG_USB_G_ACM_MS is not set -# CONFIG_USB_G_MULTI is not set -# CONFIG_USB_G_HID is not set -# CONFIG_USB_G_DBGP is not set -# CONFIG_USB_G_WEBCAM is not set # # OTG and related infrastructure @@ -3205,8 +3182,7 @@ CONFIG_SCHED_DEBUG=y # CONFIG_SCHEDSTATS is not set CONFIG_TIMER_STATS=y # CONFIG_DEBUG_OBJECTS is not set -# CONFIG_SLUB_DEBUG_ON is not set -# CONFIG_SLUB_STATS is not set +# CONFIG_DEBUG_SLAB is not set # CONFIG_DEBUG_KMEMLEAK is not set # CONFIG_DEBUG_RT_MUTEXES is not set # CONFIG_RT_MUTEX_TESTER is not set diff --git a/lfs/linux3 b/lfs/linux3 index e049be0f28..94233dc547 100644 --- a/lfs/linux3 +++ b/lfs/linux3 @@ -24,17 +24,17 @@ include Config -PATCHLEVEL = .19 +PATCHLEVEL = .20 -VER = 2.6.42.19 +VER = 2.6.42.20 -XVERS = 3.2.19 +XVERS = 3.2.20 XVERSION = 2 XPATCHLEVEL = 6 XSUBLEVEL = 42 -XEXTRAVERSION = .19 +XEXTRAVERSION = .20 -RPI_PATCHES = linux-3.2-bootc-5b84c25 +RPI_PATCHES = linux-3.2-bootc-6ab6087 THISAPP = linux-$(VER) DL_FILE = linux-$(XVERS).tar.bz2 @@ -83,9 +83,8 @@ objects =$(DL_FILE) \ $(DL_FILE) = $(URL_IPFIRE)/$(DL_FILE) rpi-patches-$(RPI_PATCHES).patch.xz = $(URL_IPFIRE)/rpi-patches-$(RPI_PATCHES).patch.xz -$(DL_FILE)_MD5 = 64c732cb425eb8787b841d11309bb335 -rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = 0b2fac563b093465f5c6b3d571e57399 - +$(DL_FILE)_MD5 = bd0063a747c3ea0ecdcc85a512d9760a +rpi-patches-$(RPI_PATCHES).patch.xz_MD5 = fd87188cbd0b168a2b335db3d661ece9 install : $(TARGET) @@ -174,6 +173,7 @@ ifeq "$(KCFG)" "-rpi" cd $(DIR_APP) && xzcat $(DIR_DL)/rpi-patches-$(RPI_PATCHES).patch.xz | patch -Np1 cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-bcm2835-alsamixer.patch cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-bcm2835-limit_volume.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/linux-3.2-bcm2708-sdhci_patches.patch endif ifeq "$(HEADERS)" "1" diff --git a/src/patches/linux-3.2-bcm2708-sdhci_patches.patch b/src/patches/linux-3.2-bcm2708-sdhci_patches.patch new file mode 100644 index 0000000000..060e8206fa --- /dev/null +++ b/src/patches/linux-3.2-bcm2708-sdhci_patches.patch @@ -0,0 +1,138 @@ +commit 872a8ff772ded51403bd8a46f80b1bf9706b76cd +Author: Paul Walmsley +Date: Mon Mar 12 10:58:00 2012 -0600 + + mmc: use really long write timeout to deal with crappy cards + + mmc: use really long write timeout to deal with crappy cards + + Several people have noticed that crappy SD cards take much longer to + complete multiple block writes than the 300ms that Linux specifies. + Try to work around this by using a three second write timeout instead. + + This is a generalized version of a patch from Chase Maupin + , whose patch description said: + + * With certain SD cards timeouts like the following have been seen + due to an improper calculation of the dto value: + mmcblk0: error -110 transferring data, sector 4126233, nr 8, + card status 0xc00 + * By removing the dto calculation and setting the timeout value + to the maximum specified by the SD card specification part A2 + section 2.2.15 these timeouts can be avoided. + * This change has been used by beagleboard users as well as the + Texas Instruments SDK without a negative impact. + * There are multiple discussion threads about this but the most + relevant ones are: + * http://talk.maemo.org/showthread.php?p=1000707#post1000707 + * http://www.mail-archive.com/linux-omap@vger.kernel.org/msg42213.html + * Original proposal for this fix was done by Sukumar Ghoral of + Texas Instruments + * Tested using a Texas Instruments AM335x EVM + + Signed-off-by: Paul Walmsley + Tested-by: Tony Lindgren + Signed-off-by: Chris Ball + +diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c +index d637982..a14ddf96 100644 +--- a/drivers/mmc/core/core.c ++++ b/drivers/mmc/core/core.c +@@ -396,10 +396,14 @@ void mmc_set_data_timeout(struct mmc_data *data, const struct mmc_card *card) + + if (data->flags & MMC_DATA_WRITE) + /* +- * The limit is really 250 ms, but that is +- * insufficient for some crappy cards. ++ * The MMC spec "It is strongly recommended ++ * for hosts to implement more than 500ms ++ * timeout value even if the card indicates ++ * the 250ms maximum busy length." Even the ++ * previous value of 300ms is known to be ++ * insufficient for some cards. + */ +- limit_us = 300000; ++ limit_us = 3000000; + else + limit_us = 100000; + +The folowing sdhci fixes rebased from rasperry pi github tree to kernel 3.2 to use +actial firmware that run emmc slot at 50Mhz. +Author: Arne Fitzenreiter + +diff -Naur linux-3.2.20.org/drivers/mmc/host/sdhci-bcm2708.c linux-3.2.20/drivers/mmc/host/sdhci-bcm2708.c +--- linux-3.2.20.org/drivers/mmc/host/sdhci-bcm2708.c 2012-06-12 00:18:23.000000000 +0200 ++++ linux-3.2.20/drivers/mmc/host/sdhci-bcm2708.c 2012-06-14 09:33:42.448194435 +0200 +@@ -328,12 +328,7 @@ + + static unsigned int sdhci_bcm2708_get_max_clock(struct sdhci_host *host) + { +- return 100000000; // this value is in Hz (100MHz/4) +-} +- +-static unsigned int sdhci_bcm2708_get_timeout_clock(struct sdhci_host *host) +-{ +- return 100000; // this value is in kHz (100MHz/4) ++ return BCM2708_EMMC_CLOCK_FREQ; + } + + /*****************************************************************************\ +@@ -1222,12 +1217,7 @@ + #else + #error The BCM2708 SDHCI driver needs CONFIG_MMC_SDHCI_IO_ACCESSORS to be set + #endif +- //.enable_dma = NULL, +- //.set_clock = NULL, + .get_max_clock = sdhci_bcm2708_get_max_clock, +- //.get_min_clock = NULL, +- .get_timeout_clock = sdhci_bcm2708_get_timeout_clock, +- + .enable = sdhci_bcm2708_enable, + .disable = sdhci_bcm2708_disable, + .set_plat_power = sdhci_bcm2708_set_plat_power, +diff -Naur linux-3.2.20.org/drivers/mmc/host/sdhci-bcm2708.c linux-3.2.20/drivers/mmc/host/sdhci-bcm2708.c +--- linux-3.2.20.org/drivers/mmc/host/sdhci-bcm2708.c 2012-06-14 09:33:42.000000000 +0200 ++++ linux-3.2.20/drivers/mmc/host/sdhci-bcm2708.c 2012-06-14 09:47:20.635695042 +0200 +@@ -1277,7 +1277,10 @@ + host->irq = platform_get_irq(pdev, 0); + + host->quirks = SDHCI_QUIRK_BROKEN_CARD_DETECTION | +- SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK; ++ SDHCI_QUIRK_DATA_TIMEOUT_USES_SDCLK | ++ SDHCI_QUIRK_BROKEN_TIMEOUT_VAL | ++ SDHCI_QUIRK_MISSING_CAPS | ++ SDHCI_QUIRK_NO_HISPD_BIT; + #ifdef CONFIG_MMC_SDHCI_BCM2708_DMA + host->flags = SDHCI_USE_PLATDMA; + #endif +diff -Naur linux-3.2.20.org/drivers/mmc/host/sdhci-bcm2708.c linux-3.2.20/drivers/mmc/host/sdhci-bcm2708.c +--- linux-3.2.20.org/drivers/mmc/host/sdhci-bcm2708.c 2012-06-14 10:03:31.000000000 +0200 ++++ linux-3.2.20/drivers/mmc/host/sdhci-bcm2708.c 2012-06-14 10:15:44.909133194 +0200 +@@ -71,6 +71,8 @@ + + #define BCM2708_SDHCI_SLEEP_TIMEOUT 1000 /* msecs */ + ++#define BCM2708_EMMC_CLOCK_FREQ 50000000 ++ + #define POWER_OFF 0 + #define POWER_LAZY_OFF 1 + #define POWER_ON 2 + +With the last revert Chris Boot has removed the UHS block at 3.3V +so it is needed to readd it to use some cards (eg. Verbatim 8GB Class10) +Author: Arne Fitzenreiter + +diff -Naur linux-3.2.20.org/drivers/mmc/host/sdhci.c linux-3.2.20/drivers/mmc/host/sdhci.c +--- linux-3.2.20.org/drivers/mmc/host/sdhci.c 2012-06-12 00:18:24.000000000 +0200 ++++ linux-3.2.20/drivers/mmc/host/sdhci.c 2012-06-14 12:47:25.435538000 +0200 +@@ -2930,6 +2930,10 @@ + if(host->ops->voltage_broken) + ocr_avail |= MMC_VDD_29_30 | MMC_VDD_30_31; + ++ /* No UHS Modes at 3.3V */ ++ mmc->caps &= ~(MMC_CAP_UHS_SDR12 | MMC_CAP_UHS_SDR25 | MMC_CAP_UHS_SDR104 | ++ MMC_CAP_UHS_SDR50 | MMC_CAP_UHS_DDR50 ); ++ + mmc->ocr_avail = ocr_avail; + mmc->ocr_avail_sdio = ocr_avail; + if (host->ocr_avail_sdio) -- 2.39.5