From c535d9e534e4a1a91c406d97d534ec4167c2ac63 Mon Sep 17 00:00:00 2001 From: Tobias Powalowski Date: Tue, 19 Jan 2016 20:27:32 +0000 Subject: [PATCH] fix #47805, #47778 --- 0001-sdhci-revert.patch | 25 +++++++++++++++++++ PKGBUILD | 19 +++++++++++--- ...g-for-drivers-without-probe-callback.patch | 24 ++++++++++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 0001-sdhci-revert.patch create mode 100644 tpmdd-devel-v3-base-platform-fix-binding-for-drivers-without-probe-callback.patch diff --git a/0001-sdhci-revert.patch b/0001-sdhci-revert.patch new file mode 100644 index 0000000..5d4afd6 --- /dev/null +++ b/0001-sdhci-revert.patch @@ -0,0 +1,25 @@ +index 2cadf08..b48565e 100644 +--- a/drivers/mmc/host/sdhci.c ++++ b/drivers/mmc/host/sdhci.c +@@ -1895,9 +1895,9 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode) + tuning_count = host->tuning_count; + + /* +- * The Host Controller needs tuning only in case of SDR104 mode +- * and for SDR50 mode when Use Tuning for SDR50 is set in the +- * Capabilities register. ++ * The Host Controller needs tuning in case of SDR104 and DDR50 ++ * mode, and for SDR50 mode when Use Tuning for SDR50 is set in ++ * the Capabilities register. + * If the Host Controller supports the HS200 mode then the + * tuning function has to be executed. + */ +@@ -1917,6 +1917,7 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode) + break; + + case MMC_TIMING_UHS_SDR104: ++ case MMC_TIMING_UHS_DDR50: + break; + + case MMC_TIMING_UHS_SDR50: +generated by cgit v0.11.2 at 2016-01-01 22:11:38 (GMT) diff --git a/PKGBUILD b/PKGBUILD index 429e435..b57075f 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -5,7 +5,7 @@ pkgbase=linux # Build stock -ARCH kernel #pkgbase=linux-custom # Build kernel with a different name _srcname=linux-4.4 pkgver=4.4 -pkgrel=3 +pkgrel=4 arch=('i686' 'x86_64') url="http://www.kernel.org/" license=('GPL2') @@ -19,14 +19,18 @@ source=("https://www.kernel.org/pub/linux/kernel/v4.x/${_srcname}.tar.xz" 'config' 'config.x86_64' # standard config files for mkinitcpio ramdisk 'linux.preset' - 'change-default-console-loglevel.patch') + 'change-default-console-loglevel.patch' + '0001-sdhci-revert.patch' + 'tpmdd-devel-v3-base-platform-fix-binding-for-drivers-without-probe-callback.patch') sha256sums=('401d7c8fef594999a460d10c72c5a94e9c2e1022f16795ec51746b0d165418b2' 'SKIP' 'd402c67f5a7334ac9e242344055ef4ac63fe43a1d8f1cda82eddd59d7242a63e' 'ddeadf2910deb0803d4d4920c4dc7f07d3fb63bca564073aeb5f6181358f20d7' 'f0d90e756f14533ee67afda280500511a62465b4f76adcc5effa95a40045179c' - '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99') + '1256b241cd477b265a3c2d64bdc19ffe3c9bbcee82ea3994c590c2c76e767d99' + '5313df7cb5b4d005422bd4cd0dae956b2dadba8f3db904275aaf99ac53894375' + 'ab57037ecee0a425c612babdff47c831378bca0bff063a1308599989a350226d') validpgpkeys=( 'ABAF11C65A2970B130ABE3C479BE3E4300411886' # Linus Torvalds '647F28654894E3BD457199BE38DBBDC86092693E' # Greg Kroah-Hartman @@ -43,6 +47,15 @@ prepare() { # add latest fixes from stable queue, if needed # http://git.kernel.org/?p=linux/kernel/git/stable/stable-queue.git + # revert http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=9faac7b95ea4f9e83b7a914084cc81ef1632fd91 + # fixes #47778 sdhci broken on some boards + # https://bugzilla.kernel.org/show_bug.cgi?id=106541 + patch -Rp1 -i "${srcdir}/0001-sdhci-revert.patch" + + # fixes #47805 kernel panics on platform modules + # https://bugzilla.kernel.org/show_bug.cgi?id=110751 + patch -Np1 -i "${srcdir}/tpmdd-devel-v3-base-platform-fix-binding-for-drivers-without-probe-callback.patch" + # set DEFAULT_CONSOLE_LOGLEVEL to 4 (same value as the 'quiet' kernel param) # remove this when a Kconfig knob is made available by upstream # (relevant patch sent upstream: https://lkml.org/lkml/2011/7/26/227) diff --git a/tpmdd-devel-v3-base-platform-fix-binding-for-drivers-without-probe-callback.patch b/tpmdd-devel-v3-base-platform-fix-binding-for-drivers-without-probe-callback.patch new file mode 100644 index 0000000..691ab79 --- /dev/null +++ b/tpmdd-devel-v3-base-platform-fix-binding-for-drivers-without-probe-callback.patch @@ -0,0 +1,24 @@ +diff --git a/drivers/base/platform.c b/drivers/base/platform.c +index 1dd6d3b..176b59f 100644 +--- a/drivers/base/platform.c ++++ b/drivers/base/platform.c +@@ -513,10 +513,15 @@ static int platform_drv_probe(struct device *_dev) + return ret; + + ret = dev_pm_domain_attach(_dev, true); +- if (ret != -EPROBE_DEFER && drv->probe) { +- ret = drv->probe(dev); +- if (ret) +- dev_pm_domain_detach(_dev, true); ++ if (ret != -EPROBE_DEFER) { ++ if (drv->probe) { ++ ret = drv->probe(dev); ++ if (ret) ++ dev_pm_domain_detach(_dev, true); ++ } else { ++ /* don't fail if just dev_pm_domain_attach failed */ ++ ret = 0; ++ } + } + + if (drv->prevent_deferred_probe && ret == -EPROBE_DEFER) {