kernel: generic: update to 3.8-rc6

Signed-off-by: Jonas Gorski <jogo@openwrt.org>

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@35478 3c298f89-4303-0410-b956-a3cf2f4a3e73
master
Jonas Gorski 2013-02-04 10:19:28 +00:00
parent 6381f75bd6
commit d37d39b0e8
25 changed files with 200 additions and 286 deletions

View File

@ -1,6 +1,6 @@
--- a/drivers/mtd/devices/m25p80.c --- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c
@@ -651,6 +651,10 @@ @@ -642,6 +642,10 @@ static const struct spi_device_id m25p_i
/* Everspin */ /* Everspin */
{ "mr25h256", CAT25_INFO( 32 * 1024, 1, 256, 2) }, { "mr25h256", CAT25_INFO( 32 * 1024, 1, 256, 2) },

View File

@ -16,7 +16,7 @@
}; };
#define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags) \ #define INFO(_jedec_id, _ext_id, _sector_size, _n_sectors, _flags) \
@@ -665,6 +667,10 @@ static const struct spi_device_id m25p_i @@ -669,6 +671,10 @@ static const struct spi_device_id m25p_i
{ "n25q128a13", INFO(0x20ba18, 0, 64 * 1024, 256, 0) }, { "n25q128a13", INFO(0x20ba18, 0, 64 * 1024, 256, 0) },
{ "n25q256a", INFO(0x20ba19, 0, 64 * 1024, 512, SECT_4K) }, { "n25q256a", INFO(0x20ba19, 0, 64 * 1024, 512, SECT_4K) },
@ -27,7 +27,7 @@
/* Spansion -- single (large) sector size only, at least /* Spansion -- single (large) sector size only, at least
* for the chips listed here (without boot sectors). * for the chips listed here (without boot sectors).
*/ */
@@ -909,6 +915,9 @@ static int m25p_probe(struct spi_device @@ -913,6 +919,9 @@ static int m25p_probe(struct spi_device
if (info->flags & SECT_4K) { if (info->flags & SECT_4K) {
flash->erase_opcode = OPCODE_BE_4K; flash->erase_opcode = OPCODE_BE_4K;
flash->mtd.erasesize = 4096; flash->mtd.erasesize = 4096;

View File

@ -1,6 +1,6 @@
--- a/drivers/mtd/devices/m25p80.c --- a/drivers/mtd/devices/m25p80.c
+++ b/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c
@@ -750,6 +750,7 @@ static const struct spi_device_id m25p_i @@ -754,6 +754,7 @@ static const struct spi_device_id m25p_i
{ "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) }, { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) },
{ "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) }, { "w25q80", INFO(0xef5014, 0, 64 * 1024, 16, SECT_4K) },
{ "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) }, { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16, SECT_4K) },

View File

@ -30,7 +30,7 @@
/****************************************************************************/ /****************************************************************************/
struct m25p { struct m25p {
@@ -913,7 +919,7 @@ static int m25p_probe(struct spi_device @@ -917,7 +923,7 @@ static int m25p_probe(struct spi_device
flash->mtd._write = m25p80_write; flash->mtd._write = m25p80_write;
/* prefer "small sector" erase if possible */ /* prefer "small sector" erase if possible */

View File

@ -1,6 +1,6 @@
--- a/net/netfilter/nf_conntrack_standalone.c --- a/net/netfilter/nf_conntrack_standalone.c
+++ b/net/netfilter/nf_conntrack_standalone.c +++ b/net/netfilter/nf_conntrack_standalone.c
@@ -261,10 +261,34 @@ static int ct_open(struct inode *inode, @@ -267,10 +267,34 @@ static int ct_open(struct inode *inode,
sizeof(struct ct_iter_state)); sizeof(struct ct_iter_state));
} }
@ -35,7 +35,7 @@
.llseek = seq_lseek, .llseek = seq_lseek,
.release = seq_release_net, .release = seq_release_net,
}; };
@@ -366,7 +390,7 @@ static int nf_conntrack_standalone_init_ @@ -372,7 +396,7 @@ static int nf_conntrack_standalone_init_
{ {
struct proc_dir_entry *pde; struct proc_dir_entry *pde;

View File

@ -76,10 +76,11 @@
counters = alloc_counters(table); counters = alloc_counters(table);
if (IS_ERR(counters)) if (IS_ERR(counters))
@@ -961,6 +990,14 @@ copy_entries_to_user(unsigned int total_ @@ -960,6 +989,14 @@ copy_entries_to_user(unsigned int total_
ret = -EFAULT;
goto free_counters; goto free_counters;
} }
+
+ flags = e->ip.flags & IPT_F_MASK; + flags = e->ip.flags & IPT_F_MASK;
+ if (copy_to_user(userptr + off + if (copy_to_user(userptr + off
+ + offsetof(struct ipt_entry, ip.flags), + + offsetof(struct ipt_entry, ip.flags),
@ -87,7 +88,6 @@
+ ret = -EFAULT; + ret = -EFAULT;
+ goto free_counters; + goto free_counters;
+ } + }
+
for (i = sizeof(struct ipt_entry); for (i = sizeof(struct ipt_entry);
i < e->target_offset; i < e->target_offset;
i += m->u.match_size) {

View File

@ -13,7 +13,7 @@ FEATURES:=targz usb jffs2 pci pcie gpio
CFLAGS:=-Os -pipe -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp CFLAGS:=-Os -pipe -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp
MAINTAINER:=Florian Fainelli <florian@openwrt.org> MAINTAINER:=Florian Fainelli <florian@openwrt.org>
LINUX_VERSION:=3.8-rc4 LINUX_VERSION:=3.8-rc6
include $(INCLUDE_DIR)/target.mk include $(INCLUDE_DIR)/target.mk

View File

@ -1,166 +0,0 @@
The Armada XP GPIO controller has two ways of notifying interrupts:
using global interrupts or using per-CPU interrupts. In an attempt to
use the best available features, the 'marvell,armadaxp-gpio'
compatible string selects a variant of the gpio-mvebu driver that
makes use of the per-CPU interrupts.
Unfortunately, this doesn't work properly in a SMP context, because we
fall into cases where the GPIO interrupt is enabled on CPU X at the
GPIO controller level, but on CPU Y at the interrupt controller
level. It is not yet clear how to fix that easily.
So for 3.8, our approach is to switch to global interrupts for GPIOs,
so that we do not fall into this per-CPU interrupts problem.
This patch therefore fixes GPIO interrupts on Armada XP
platforms. Without this patch, GPIO interrupts simply do not work
reliably, because their proper operation depends on which CPU the code
requesting the interrupt is running.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
---
This is 3.8-rc material.
---
arch/arm/boot/dts/armada-xp-mv78230.dtsi | 14 ++++++--------
arch/arm/boot/dts/armada-xp-mv78260.dtsi | 21 +++++++++------------
arch/arm/boot/dts/armada-xp-mv78460.dtsi | 21 +++++++++------------
3 files changed, 24 insertions(+), 32 deletions(-)
--- a/arch/arm/boot/dts/armada-xp-mv78230.dtsi
+++ b/arch/arm/boot/dts/armada-xp-mv78230.dtsi
@@ -50,27 +50,25 @@
};
gpio0: gpio@d0018100 {
- compatible = "marvell,armadaxp-gpio";
- reg = <0xd0018100 0x40>,
- <0xd0018800 0x30>;
+ compatible = "marvell,orion-gpio";
+ reg = <0xd0018100 0x40>;
ngpios = <32>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupts-cells = <2>;
- interrupts = <16>, <17>, <18>, <19>;
+ interrupts = <82>, <83>, <84>, <85>;
};
gpio1: gpio@d0018140 {
- compatible = "marvell,armadaxp-gpio";
- reg = <0xd0018140 0x40>,
- <0xd0018840 0x30>;
+ compatible = "marvell,orion-gpio";
+ reg = <0xd0018140 0x40>;
ngpios = <17>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupts-cells = <2>;
- interrupts = <20>, <21>, <22>;
+ interrupts = <87>, <88>, <89>;
};
};
};
--- a/arch/arm/boot/dts/armada-xp-mv78260.dtsi
+++ b/arch/arm/boot/dts/armada-xp-mv78260.dtsi
@@ -51,39 +51,36 @@
};
gpio0: gpio@d0018100 {
- compatible = "marvell,armadaxp-gpio";
- reg = <0xd0018100 0x40>,
- <0xd0018800 0x30>;
+ compatible = "marvell,orion-gpio";
+ reg = <0xd0018100 0x40>;
ngpios = <32>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupts-cells = <2>;
- interrupts = <16>, <17>, <18>, <19>;
+ interrupts = <82>, <83>, <84>, <85>;
};
gpio1: gpio@d0018140 {
- compatible = "marvell,armadaxp-gpio";
- reg = <0xd0018140 0x40>,
- <0xd0018840 0x30>;
+ compatible = "marvell,orion-gpio";
+ reg = <0xd0018140 0x40>;
ngpios = <32>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupts-cells = <2>;
- interrupts = <20>, <21>, <22>, <23>;
+ interrupts = <87>, <88>, <89>, <90>;
};
gpio2: gpio@d0018180 {
- compatible = "marvell,armadaxp-gpio";
- reg = <0xd0018180 0x40>,
- <0xd0018870 0x30>;
+ compatible = "marvell,orion-gpio";
+ reg = <0xd0018180 0x40>;
ngpios = <3>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupts-cells = <2>;
- interrupts = <24>;
+ interrupts = <91>;
};
ethernet@d0034000 {
--- a/arch/arm/boot/dts/armada-xp-mv78460.dtsi
+++ b/arch/arm/boot/dts/armada-xp-mv78460.dtsi
@@ -66,39 +66,36 @@
};
gpio0: gpio@d0018100 {
- compatible = "marvell,armadaxp-gpio";
- reg = <0xd0018100 0x40>,
- <0xd0018800 0x30>;
+ compatible = "marvell,orion-gpio";
+ reg = <0xd0018100 0x40>;
ngpios = <32>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupts-cells = <2>;
- interrupts = <16>, <17>, <18>, <19>;
+ interrupts = <82>, <83>, <84>, <85>;
};
gpio1: gpio@d0018140 {
- compatible = "marvell,armadaxp-gpio";
- reg = <0xd0018140 0x40>,
- <0xd0018840 0x30>;
+ compatible = "marvell,orion-gpio";
+ reg = <0xd0018140 0x40>;
ngpios = <32>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupts-cells = <2>;
- interrupts = <20>, <21>, <22>, <23>;
+ interrupts = <87>, <88>, <89>, <90>;
};
gpio2: gpio@d0018180 {
- compatible = "marvell,armadaxp-gpio";
- reg = <0xd0018180 0x40>,
- <0xd0018870 0x30>;
+ compatible = "marvell,orion-gpio";
+ reg = <0xd0018180 0x40>;
ngpios = <3>;
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupts-cells = <2>;
- interrupts = <24>;
+ interrupts = <91>;
};
ethernet@d0034000 {

View File

@ -1,3 +1,20 @@
From patchwork Wed Jan 16 13:13:57 2013
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [2/5] mmc: mvsdio: use slot-gpio infrastructure for write protect gpio
Date: Wed, 16 Jan 2013 13:13:57 -0000
From: Andrew Lunn <andrew@lunn.ch>
X-Patchwork-Id: 1987931
Message-Id: <1358342040-7130-3-git-send-email-andrew@lunn.ch>
To: Jason Cooper <jason@lakedaemon.net>
Cc: linux ARM <linux-arm-kernel@lists.infradead.org>,
linux-mmc@vger.kernel.org, linux@arm.linux.org.uk,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Andrew Lunn <andrew@lunn.ch>
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
The MMC core subsystem provides in drivers/mmc/core/slot-gpio.c a nice The MMC core subsystem provides in drivers/mmc/core/slot-gpio.c a nice
set of helper functions to simplify the management of the write set of helper functions to simplify the management of the write
protect GPIO in MMC host drivers. This patch migrates the mvsdio protect GPIO in MMC host drivers. This patch migrates the mvsdio
@ -6,9 +23,14 @@ simpler, and therefore ease the process of adding a Device Tree
binding for this driver. binding for this driver.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Stefan Peter <s.peter@mpl.ch>
Tested-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
--- ---
drivers/mmc/host/mvsdio.c | 34 +++++----------------------------- drivers/mmc/host/mvsdio.c | 30 +++++-------------------------
1 file changed, 5 insertions(+), 29 deletions(-) 1 file changed, 5 insertions(+), 25 deletions(-)
--- a/drivers/mmc/host/mvsdio.c --- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c +++ b/drivers/mmc/host/mvsdio.c
@ -20,15 +42,15 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
#include <asm/sizes.h> #include <asm/sizes.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
@@ -54,7 +55,6 @@ struct mvsd_host { @@ -52,7 +53,6 @@ struct mvsd_host {
int irq; struct device *dev;
struct clk *clk; struct clk *clk;
int gpio_card_detect; int gpio_card_detect;
- int gpio_write_protect; - int gpio_write_protect;
}; };
#define mvsd_write(offs, val) writel(val, iobase + (offs)) #define mvsd_write(offs, val) writel(val, iobase + (offs))
@@ -566,20 +566,6 @@ static void mvsd_enable_sdio_irq(struct @@ -564,20 +564,6 @@ static void mvsd_enable_sdio_irq(struct
spin_unlock_irqrestore(&host->lock, flags); spin_unlock_irqrestore(&host->lock, flags);
} }
@ -49,7 +71,7 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
static void mvsd_power_up(struct mvsd_host *host) static void mvsd_power_up(struct mvsd_host *host)
{ {
void __iomem *iobase = host->base; void __iomem *iobase = host->base;
@@ -676,7 +662,7 @@ static void mvsd_set_ios(struct mmc_host @@ -674,7 +660,7 @@ static void mvsd_set_ios(struct mmc_host
static const struct mmc_host_ops mvsd_ops = { static const struct mmc_host_ops mvsd_ops = {
.request = mvsd_request, .request = mvsd_request,
@ -58,15 +80,15 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
.set_ios = mvsd_set_ios, .set_ios = mvsd_set_ios,
.enable_sdio_irq = mvsd_enable_sdio_irq, .enable_sdio_irq = mvsd_enable_sdio_irq,
}; };
@@ -798,15 +784,7 @@ static int __init mvsd_probe(struct plat @@ -793,15 +779,7 @@ static int __init mvsd_probe(struct plat
if (!host->gpio_card_detect) if (!host->gpio_card_detect)
mmc->caps |= MMC_CAP_NEEDS_POLL; mmc->caps |= MMC_CAP_NEEDS_POLL;
- if (mvsd_data->gpio_write_protect) { - if (mvsd_data->gpio_write_protect) {
- ret = gpio_request(mvsd_data->gpio_write_protect, - ret = devm_gpio_request_one(&pdev->dev,
- DRIVER_NAME " wp"); - mvsd_data->gpio_write_protect,
- GPIOF_IN, DRIVER_NAME " wp");
- if (ret == 0) { - if (ret == 0) {
- gpio_direction_input(mvsd_data->gpio_write_protect);
- host->gpio_write_protect = - host->gpio_write_protect =
- mvsd_data->gpio_write_protect; - mvsd_data->gpio_write_protect;
- } - }
@ -75,23 +97,19 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
setup_timer(&host->timer, mvsd_timeout_timer, (unsigned long)host); setup_timer(&host->timer, mvsd_timeout_timer, (unsigned long)host);
platform_set_drvdata(pdev, mmc); platform_set_drvdata(pdev, mmc);
@@ -831,8 +809,7 @@ out: @@ -820,6 +798,7 @@ static int __init mvsd_probe(struct plat
free_irq(gpio_to_irq(host->gpio_card_detect), host);
gpio_free(host->gpio_card_detect); out:
} if (mmc) {
- if (host->gpio_write_protect) + mmc_gpio_free_ro(mmc);
- gpio_free(host->gpio_write_protect); if (!IS_ERR(host->clk))
clk_disable_unprepare(host->clk);
mmc_free_host(mmc);
@@ -834,6 +813,7 @@ static int __exit mvsd_remove(struct pla
struct mvsd_host *host = mmc_priv(mmc);
+ mmc_gpio_free_ro(mmc); + mmc_gpio_free_ro(mmc);
if (host->base)
iounmap(host->base);
}
@@ -861,8 +838,7 @@ static int __exit mvsd_remove(struct pla
}
mmc_remove_host(mmc); mmc_remove_host(mmc);
free_irq(host->irq, host);
- if (host->gpio_write_protect)
- gpio_free(host->gpio_write_protect);
+ mmc_gpio_free_ro(mmc);
del_timer_sync(&host->timer); del_timer_sync(&host->timer);
mvsd_power_down(host); mvsd_power_down(host);
iounmap(host->base);

View File

@ -1,3 +1,20 @@
From patchwork Wed Jan 16 13:13:58 2013
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [3/5] mmc: mvsdio: use slot-gpio for card detect gpio
Date: Wed, 16 Jan 2013 13:13:58 -0000
From: Andrew Lunn <andrew@lunn.ch>
X-Patchwork-Id: 1987941
Message-Id: <1358342040-7130-4-git-send-email-andrew@lunn.ch>
To: Jason Cooper <jason@lakedaemon.net>
Cc: linux ARM <linux-arm-kernel@lists.infradead.org>,
linux-mmc@vger.kernel.org, linux@arm.linux.org.uk,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Andrew Lunn <andrew@lunn.ch>
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
The MMC core subsystem provides in drivers/mmc/core/slot-gpio.c a nice The MMC core subsystem provides in drivers/mmc/core/slot-gpio.c a nice
set of helper functions to simplify the management of the card detect set of helper functions to simplify the management of the card detect
GPIO in MMC host drivers. This patch migrates the mvsdio driver to GPIO in MMC host drivers. This patch migrates the mvsdio driver to
@ -6,21 +23,26 @@ therefore ease the process of adding a Device Tree binding for this
driver. driver.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Stefan Peter <s.peter@mpl.ch>
Tested-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
--- ---
drivers/mmc/host/mvsdio.c | 44 +++++++++----------------------------------- drivers/mmc/host/mvsdio.c | 39 +++++++++------------------------------
1 file changed, 9 insertions(+), 35 deletions(-) 1 file changed, 9 insertions(+), 30 deletions(-)
--- a/drivers/mmc/host/mvsdio.c --- a/drivers/mmc/host/mvsdio.c
+++ b/drivers/mmc/host/mvsdio.c +++ b/drivers/mmc/host/mvsdio.c
@@ -54,7 +54,6 @@ struct mvsd_host { @@ -52,7 +52,6 @@ struct mvsd_host {
struct resource *res; struct mmc_host *mmc;
int irq; struct device *dev;
struct clk *clk; struct clk *clk;
- int gpio_card_detect; - int gpio_card_detect;
}; };
#define mvsd_write(offs, val) writel(val, iobase + (offs)) #define mvsd_write(offs, val) writel(val, iobase + (offs))
@@ -540,13 +539,6 @@ static void mvsd_timeout_timer(unsigned @@ -538,13 +537,6 @@ static void mvsd_timeout_timer(unsigned
mmc_request_done(host->mmc, mrq); mmc_request_done(host->mmc, mrq);
} }
@ -34,24 +56,27 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
static void mvsd_enable_sdio_irq(struct mmc_host *mmc, int enable) static void mvsd_enable_sdio_irq(struct mmc_host *mmc, int enable)
{ {
struct mvsd_host *host = mmc_priv(mmc); struct mvsd_host *host = mmc_priv(mmc);
@@ -765,23 +757,11 @@ static int __init mvsd_probe(struct plat @@ -757,26 +749,11 @@ static int __init mvsd_probe(struct plat
if (!IS_ERR(host->clk))
clk_prepare_enable(host->clk); clk_prepare_enable(host->clk);
}
- if (mvsd_data->gpio_card_detect) { - if (mvsd_data->gpio_card_detect) {
- ret = gpio_request(mvsd_data->gpio_card_detect, - ret = devm_gpio_request_one(&pdev->dev,
- DRIVER_NAME " cd"); - mvsd_data->gpio_card_detect,
- GPIOF_IN, DRIVER_NAME " cd");
- if (ret == 0) { - if (ret == 0) {
- gpio_direction_input(mvsd_data->gpio_card_detect);
- irq = gpio_to_irq(mvsd_data->gpio_card_detect); - irq = gpio_to_irq(mvsd_data->gpio_card_detect);
- ret = request_irq(irq, mvsd_card_detect_irq, - ret = devm_request_irq(&pdev->dev, irq,
- IRQ_TYPE_EDGE_RISING | IRQ_TYPE_EDGE_FALLING, - mvsd_card_detect_irq,
- IRQ_TYPE_EDGE_RISING |
- IRQ_TYPE_EDGE_FALLING,
- DRIVER_NAME " cd", host); - DRIVER_NAME " cd", host);
- if (ret == 0) - if (ret == 0)
- host->gpio_card_detect = - host->gpio_card_detect =
- mvsd_data->gpio_card_detect; - mvsd_data->gpio_card_detect;
- else - else
- gpio_free(mvsd_data->gpio_card_detect); - devm_gpio_free(&pdev->dev,
- mvsd_data->gpio_card_detect);
- } - }
- } - }
- if (!host->gpio_card_detect) - if (!host->gpio_card_detect)
@ -63,7 +88,7 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
mmc->caps |= MMC_CAP_NEEDS_POLL; mmc->caps |= MMC_CAP_NEEDS_POLL;
mmc_gpio_request_ro(mmc, mvsd_data->gpio_write_protect); mmc_gpio_request_ro(mmc, mvsd_data->gpio_write_protect);
@@ -794,9 +774,9 @@ static int __init mvsd_probe(struct plat @@ -789,15 +766,16 @@ static int __init mvsd_probe(struct plat
pr_notice("%s: %s driver initialized, ", pr_notice("%s: %s driver initialized, ",
mmc_hostname(mmc), DRIVER_NAME); mmc_hostname(mmc), DRIVER_NAME);
@ -75,27 +100,18 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
else else
printk("lacking card detect (fall back to polling)\n"); printk("lacking card detect (fall back to polling)\n");
return 0; return 0;
@@ -805,10 +785,7 @@ out:
if (host) { out:
if (host->irq) if (mmc) {
free_irq(host->irq, host);
- if (host->gpio_card_detect) {
- free_irq(gpio_to_irq(host->gpio_card_detect), host);
- gpio_free(host->gpio_card_detect);
- }
+ mmc_gpio_free_cd(mmc); + mmc_gpio_free_cd(mmc);
mmc_gpio_free_ro(mmc); mmc_gpio_free_ro(mmc);
if (host->base) if (!IS_ERR(host->clk))
iounmap(host->base); clk_disable_unprepare(host->clk);
@@ -832,10 +809,7 @@ static int __exit mvsd_remove(struct pla @@ -813,6 +791,7 @@ static int __exit mvsd_remove(struct pla
if (mmc) {
struct mvsd_host *host = mmc_priv(mmc); struct mvsd_host *host = mmc_priv(mmc);
- if (host->gpio_card_detect) {
- free_irq(gpio_to_irq(host->gpio_card_detect), host);
- gpio_free(host->gpio_card_detect);
- }
+ mmc_gpio_free_cd(mmc); + mmc_gpio_free_cd(mmc);
mmc_remove_host(mmc);
free_irq(host->irq, host);
mmc_gpio_free_ro(mmc); mmc_gpio_free_ro(mmc);
mmc_remove_host(mmc);
del_timer_sync(&host->timer);

View File

@ -1,3 +1,20 @@
From patchwork Wed Jan 16 13:13:59 2013
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [4/5] mmc: mvsdio: implement a Device Tree binding
Date: Wed, 16 Jan 2013 13:13:59 -0000
From: Andrew Lunn <andrew@lunn.ch>
X-Patchwork-Id: 1987921
Message-Id: <1358342040-7130-5-git-send-email-andrew@lunn.ch>
To: Jason Cooper <jason@lakedaemon.net>
Cc: linux ARM <linux-arm-kernel@lists.infradead.org>,
linux-mmc@vger.kernel.org, linux@arm.linux.org.uk,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Andrew Lunn <andrew@lunn.ch>
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This patch adds a simple Device Tree binding for the mvsdio driver, as This patch adds a simple Device Tree binding for the mvsdio driver, as
well as the necessary documentation for it. Compatibility with non-DT well as the necessary documentation for it. Compatibility with non-DT
platforms is preserved, by keeping the platform_data based platforms is preserved, by keeping the platform_data based
@ -11,10 +28,15 @@ reference is not mandatory, but the clock frequency must be passed in
the "clock" field of the mvsdio_platform_data structure. the "clock" field of the mvsdio_platform_data structure.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Stefan Peter <s.peter@mpl.ch>
Tested-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
--- ---
.../devicetree/bindings/mmc/orion-sdio.txt | 17 ++++++ .../devicetree/bindings/mmc/orion-sdio.txt | 17 ++++++
drivers/mmc/host/mvsdio.c | 60 +++++++++++++++----- drivers/mmc/host/mvsdio.c | 62 +++++++++++++++-----
2 files changed, 62 insertions(+), 15 deletions(-) 2 files changed, 64 insertions(+), 15 deletions(-)
create mode 100644 Documentation/devicetree/bindings/mmc/orion-sdio.txt create mode 100644 Documentation/devicetree/bindings/mmc/orion-sdio.txt
--- /dev/null --- /dev/null
@ -48,7 +70,7 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
#include <linux/mmc/host.h> #include <linux/mmc/host.h>
#include <linux/mmc/slot-gpio.h> #include <linux/mmc/slot-gpio.h>
@@ -683,17 +685,17 @@ mv_conf_mbus_windows(struct mvsd_host *h @@ -681,17 +683,17 @@ mv_conf_mbus_windows(struct mvsd_host *h
static int __init mvsd_probe(struct platform_device *pdev) static int __init mvsd_probe(struct platform_device *pdev)
{ {
@ -68,19 +90,20 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+ if (!r || irq < 0) + if (!r || irq < 0)
return -ENXIO; return -ENXIO;
r = request_mem_region(r->start, SZ_1K, DRIVER_NAME); mmc = mmc_alloc_host(sizeof(struct mvsd_host), &pdev->dev);
@@ -710,7 +712,35 @@ static int __init mvsd_probe(struct plat @@ -703,8 +705,37 @@ static int __init mvsd_probe(struct plat
host = mmc_priv(mmc);
host->mmc = mmc; host->mmc = mmc;
host->dev = &pdev->dev; host->dev = &pdev->dev;
host->res = r;
- host->base_clock = mvsd_data->clock / 2; - host->base_clock = mvsd_data->clock / 2;
- host->clk = ERR_PTR(-EINVAL);
+ +
+ /* Some non-DT platforms do not pass a clock, and the clock + /* Some non-DT platforms do not pass a clock, and the clock
+ frequency is passed through platform_data. On DT platforms, + frequency is passed through platform_data. On DT platforms,
+ a clock must always be passed, even if there is no gatable + a clock must always be passed, even if there is no gatable
+ clock associated to the SDIO interface (it can simply be a + clock associated to the SDIO interface (it can simply be a
+ fixed rate clock). */ + fixed rate clock). */
+ host->clk = clk_get(&pdev->dev, NULL); + host->clk = devm_clk_get(&pdev->dev, NULL);
+ if (!IS_ERR(host->clk)) + if (!IS_ERR(host->clk))
+ clk_prepare_enable(host->clk); + clk_prepare_enable(host->clk);
+ +
@ -97,8 +120,10 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+ } else { + } else {
+ const struct mvsdio_platform_data *mvsd_data; + const struct mvsdio_platform_data *mvsd_data;
+ mvsd_data = pdev->dev.platform_data; + mvsd_data = pdev->dev.platform_data;
+ if (!mvsd_data) + if (!mvsd_data) {
+ return -ENXIO; + ret = -ENXIO;
+ goto out;
+ }
+ host->base_clock = mvsd_data->clock / 2; + host->base_clock = mvsd_data->clock / 2;
+ gpio_card_detect = mvsd_data->gpio_card_detect; + gpio_card_detect = mvsd_data->gpio_card_detect;
+ gpio_write_protect = mvsd_data->gpio_write_protect; + gpio_write_protect = mvsd_data->gpio_write_protect;
@ -106,16 +131,15 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
mmc->ops = &mvsd_ops; mmc->ops = &mvsd_ops;
@@ -750,21 +780,14 @@ static int __init mvsd_probe(struct plat @@ -743,20 +774,14 @@ static int __init mvsd_probe(struct plat
} else goto out;
host->irq = irq; }
- /* Not all platforms can gate the clock, so it is not - /* Not all platforms can gate the clock, so it is not
- an error if the clock does not exists. */ - an error if the clock does not exists. */
- host->clk = clk_get(&pdev->dev, NULL); - host->clk = devm_clk_get(&pdev->dev, NULL);
- if (!IS_ERR(host->clk)) { - if (!IS_ERR(host->clk))
- clk_prepare_enable(host->clk); - clk_prepare_enable(host->clk);
- }
- -
- if (gpio_is_valid(mvsd_data->gpio_card_detect)) { - if (gpio_is_valid(mvsd_data->gpio_card_detect)) {
- ret = mmc_gpio_request_cd(mmc, mvsd_data->gpio_card_detect); - ret = mmc_gpio_request_cd(mmc, mvsd_data->gpio_card_detect);
@ -131,7 +155,7 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
setup_timer(&host->timer, mvsd_timeout_timer, (unsigned long)host); setup_timer(&host->timer, mvsd_timeout_timer, (unsigned long)host);
platform_set_drvdata(pdev, mmc); platform_set_drvdata(pdev, mmc);
@@ -776,7 +799,7 @@ static int __init mvsd_probe(struct plat @@ -768,7 +793,7 @@ static int __init mvsd_probe(struct plat
mmc_hostname(mmc), DRIVER_NAME); mmc_hostname(mmc), DRIVER_NAME);
if (!(mmc->caps & MMC_CAP_NEEDS_POLL)) if (!(mmc->caps & MMC_CAP_NEEDS_POLL))
printk("using GPIO %d for card detection\n", printk("using GPIO %d for card detection\n",
@ -140,7 +164,7 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
else else
printk("lacking card detect (fall back to polling)\n"); printk("lacking card detect (fall back to polling)\n");
return 0; return 0;
@@ -855,12 +878,19 @@ static int mvsd_resume(struct platform_d @@ -832,12 +857,19 @@ static int mvsd_resume(struct platform_d
#define mvsd_resume NULL #define mvsd_resume NULL
#endif #endif

View File

@ -1,3 +1,20 @@
From patchwork Wed Jan 16 13:14:00 2013
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Subject: [5/5] mmc: mvsdio: add pinctrl integration
Date: Wed, 16 Jan 2013 13:14:00 -0000
From: Andrew Lunn <andrew@lunn.ch>
X-Patchwork-Id: 1987901
Message-Id: <1358342040-7130-6-git-send-email-andrew@lunn.ch>
To: Jason Cooper <jason@lakedaemon.net>
Cc: linux ARM <linux-arm-kernel@lists.infradead.org>,
linux-mmc@vger.kernel.org, linux@arm.linux.org.uk,
Thomas Petazzoni <thomas.petazzoni@free-electrons.com>,
Andrew Lunn <andrew@lunn.ch>
From: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
On many Marvell SoCs, the pins used for the SDIO interface are part of On many Marvell SoCs, the pins used for the SDIO interface are part of
the MPP pins, that are muxable pins. In order to get the muxing of the MPP pins, that are muxable pins. In order to get the muxing of
those pins correct, this commit integrates the mvsdio driver with the those pins correct, this commit integrates the mvsdio driver with the
@ -9,6 +26,11 @@ platforms have yet been fully converted to using the pinctrl
infrastructure. infrastructure.
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Tested-by: Stefan Peter <s.peter@mpl.ch>
Tested-by: Florian Fainelli <florian@openwrt.org>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
--- ---
drivers/mmc/host/mvsdio.c | 6 ++++++ drivers/mmc/host/mvsdio.c | 6 ++++++
1 file changed, 6 insertions(+) 1 file changed, 6 insertions(+)
@ -23,7 +45,7 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
#include <asm/sizes.h> #include <asm/sizes.h>
#include <asm/unaligned.h> #include <asm/unaligned.h>
@@ -692,6 +693,7 @@ static int __init mvsd_probe(struct plat @@ -690,6 +691,7 @@ static int __init mvsd_probe(struct plat
struct resource *r; struct resource *r;
int ret, irq; int ret, irq;
int gpio_card_detect, gpio_write_protect; int gpio_card_detect, gpio_write_protect;
@ -31,9 +53,9 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
r = platform_get_resource(pdev, IORESOURCE_MEM, 0); r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
irq = platform_get_irq(pdev, 0); irq = platform_get_irq(pdev, 0);
@@ -713,6 +715,10 @@ static int __init mvsd_probe(struct plat @@ -706,6 +708,10 @@ static int __init mvsd_probe(struct plat
host->mmc = mmc;
host->dev = &pdev->dev; host->dev = &pdev->dev;
host->res = r;
+ pinctrl = devm_pinctrl_get_select_default(&pdev->dev); + pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
+ if (IS_ERR(pinctrl)) + if (IS_ERR(pinctrl))

View File

@ -158,7 +158,7 @@ Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
+ +
--- a/arch/arm/mach-mvebu/Makefile --- a/arch/arm/mach-mvebu/Makefile
+++ b/arch/arm/mach-mvebu/Makefile +++ b/arch/arm/mach-mvebu/Makefile
@@ -5,3 +5,4 @@ obj-y += system-controller.o @@ -7,3 +7,4 @@ obj-y += system-controller.o
obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o irq-armada-370-xp.o addr-map.o coherency.o coherency_ll.o pmsu.o obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o irq-armada-370-xp.o addr-map.o coherency.o coherency_ll.o pmsu.o
obj-$(CONFIG_SMP) += platsmp.o headsmp.o obj-$(CONFIG_SMP) += platsmp.o headsmp.o
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o