Re: [PATCH 0/4] mmc: add a cap and a quirk
On 07/02/12 14:48, Adrian Hunter wrote: Hi Here are patches for Medfield to allow the use of high-capacity erase size and to allow the SDIO host controller to be off when the card is kept on during suspend - replacing the earlier patch mmc: sdhci: always reset all during resume Adrian Hunter (4): mmc: core: add high-capacity erase size capability flag mmc: sdhci-pci: select HC erase size for Medfield eMMC mmc: sdhci: add quirk for keeping card power during suspend mmc: sdhci-pci: add SDHCI_QUIRK2_HOST_OFF_CARD_ON for Medfield SDIO drivers/mmc/core/mmc.c |3 ++- drivers/mmc/host/sdhci-pci.c |8 +++- drivers/mmc/host/sdhci.c | 13 +++-- include/linux/mmc/host.h |1 + include/linux/mmc/sdhci.h|2 ++ 5 files changed, 23 insertions(+), 4 deletions(-) Chris can you take these? MMC_CAP2_HC_ERASE_SZ needs to move to bit9 but otherwise they apply. -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v1 0/5] dt: add basic imx28 support
This patch series adds basic imx28 dt support including fec, mmc and dma. Tested on mx28evk. TODO: Convert the remaining devices to support dt. mxs-auart, mxs-gpio, i2c, flexcan, saif, rtc, pwm, fb. Dong Aisheng (5): ARM: imx28: add basic dt support mmc: mxs-mmc: add dt probe support ARM: imx28evk: add mmc dt support dma: mxs-dma: add dt probe support ARM: mxs: add mxs dma dt support Documentation/devicetree/bindings/arm/fsl.txt |4 + .../devicetree/bindings/dma/fsl-mxs-dma.txt| 17 +++ .../devicetree/bindings/mmc/fsl-mxs-mmc.txt| 23 arch/arm/boot/dts/imx28-evk.dts| 45 +++ arch/arm/boot/dts/imx28.dtsi | 131 arch/arm/mach-mxs/Kconfig |9 ++ arch/arm/mach-mxs/Makefile |1 + arch/arm/mach-mxs/devices-mx23.h |2 + arch/arm/mach-mxs/devices-mx28.h |2 + arch/arm/mach-mxs/devices/platform-dma.c |3 +- arch/arm/mach-mxs/imx28-dt.c | 71 +++ arch/arm/mach-mxs/include/mach/devices-common.h|3 + arch/arm/mach-mxs/mach-apx4devkit.c|1 + arch/arm/mach-mxs/mach-m28evk.c|1 + arch/arm/mach-mxs/mach-mx23evk.c |1 + arch/arm/mach-mxs/mach-mx28evk.c |1 + arch/arm/mach-mxs/mach-stmp378x_devb.c |1 + arch/arm/mach-mxs/mach-tx28.c |1 + drivers/dma/mxs-dma.c | 44 +-- drivers/mmc/host/mxs-mmc.c | 82 - 20 files changed, 424 insertions(+), 19 deletions(-) create mode 100644 Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt create mode 100644 Documentation/devicetree/bindings/mmc/fsl-mxs-mmc.txt create mode 100644 arch/arm/boot/dts/imx28-evk.dts create mode 100644 arch/arm/boot/dts/imx28.dtsi create mode 100644 arch/arm/mach-mxs/imx28-dt.c -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v1 2/5] mmc: mxs-mmc: add dt probe support
From: Dong Aisheng dong.aish...@linaro.org Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- The patch is still using a private way for dma part binding since the common dma binding is still under discussion. http://www.spinics.net/lists/linux-omap/msg65528.html Will update to use common dma binding when it hits mainline. --- .../devicetree/bindings/mmc/fsl-mxs-mmc.txt| 23 ++ drivers/mmc/host/mxs-mmc.c | 82 +++- 2 files changed, 102 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/mmc/fsl-mxs-mmc.txt b/Documentation/devicetree/bindings/mmc/fsl-mxs-mmc.txt new file mode 100644 index 000..adc1142 --- /dev/null +++ b/Documentation/devicetree/bindings/mmc/fsl-mxs-mmc.txt @@ -0,0 +1,23 @@ +* FREESCALE MXS MMC peripheral + +Required properties: +- compatible : Should be fsl,chip-mmc +- reg : Should contain registers location and length +- interrupts : Should contain interrupt. + The format is irq_err irq_dma. +- dma_channel: Should contain the dma channel it uses + +Optional properties: +- wp-gpios : Specify GPIOs for write protection +- slot-4bit: Specify 4 bit mode support +- slot-8bit: Specify 8 bit and 4 bit mode support + +Examples: +mmc1: ssp@8001 { + compatible = fsl,imx28-mmc; + reg = 0x8001 2000; + /* irq_err irq_dma */ + interrupts = 96 82; + dma_channel = 0; + slot-8bit; +}; diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c index 382c835..6cf2d17 100644 --- a/drivers/mmc/host/mxs-mmc.c +++ b/drivers/mmc/host/mxs-mmc.c @@ -38,6 +38,10 @@ #include linux/gpio.h #include linux/regulator/consumer.h #include linux/module.h +#include linux/of.h +#include linux/of_device.h +#include linux/of_gpio.h +#include linux/slab.h #include mach/mxs.h #include mach/common.h @@ -673,17 +677,79 @@ static bool mxs_mmc_dma_filter(struct dma_chan *chan, void *param) return true; } +#ifdef CONFIG_OF +static struct resource * __devinit mxs_mmc_get_of_dmares( + struct platform_device *pdev) +{ + struct device_node *np = pdev-dev.of_node; + struct resource *dmares; + int ret; + + if (!np) + return NULL; + + dmares = kzalloc(sizeof(*dmares), GFP_KERNEL); + dmares-flags = IORESOURCE_DMA; + ret = of_property_read_u32(np, dma_channel, dmares-start); + if (ret) { + dev_err(pdev-dev, unable to get dmares from dt\n); + return NULL; + } + dmares-end = dmares-start; + + return dmares; +} + +static int __devinit mxs_mmc_get_of_property(struct platform_device *pdev, + struct mxs_mmc_platform_data **ppdata) +{ + struct device_node *np = pdev-dev.of_node; + struct mxs_mmc_platform_data *pdata = *ppdata; + + if (!np) + return -ENODEV; + + pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); + + if (of_get_property(np, slot-8bit, NULL)) + pdata-flags |= SLOTF_8_BIT_CAPABLE; + + if (of_get_property(np, slot-4bit, NULL)) + pdata-flags |= SLOTF_4_BIT_CAPABLE; + + pdata-wp_gpio = of_get_named_gpio(np, wp-gpios, 0); + + dev_dbg(pdev-dev, wp-gpios %d flags %d\n, pdata-wp_gpio, + pdata-flags); + + return 0; +} +#else +static struct resource * __devinit mxs_mmc_get_of_dmares( + struct platform_device *pdev) +{ + return NULL; +} +static inline int mxs_mmc_get_of_property(struct platform_device *pdev, + struct mxs_mmc_platform_data *pdata) +{ + return -ENODEV; +} +#endif + static int mxs_mmc_probe(struct platform_device *pdev) { struct mxs_mmc_host *host; struct mmc_host *mmc; struct resource *iores, *dmares, *r; - struct mxs_mmc_platform_data *pdata; + struct mxs_mmc_platform_data *pdata = NULL; int ret = 0, irq_err, irq_dma; dma_cap_mask_t mask; iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); - dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); + dmares = mxs_mmc_get_of_dmares(pdev); + if (dmares == NULL) + dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); irq_err = platform_get_irq(pdev, 0); irq_dma = platform_get_irq(pdev, 1); if (!iores || !dmares || irq_err 0 || irq_dma 0) @@ -740,7 +806,9 @@ static int mxs_mmc_probe(struct platform_device *pdev) mmc-caps = MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SDIO_IRQ | MMC_CAP_NEEDS_POLL; - pdata = mmc_dev(host-mmc)-platform_data; + mxs_mmc_get_of_property(pdev, pdata); + if (pdata == NULL) + pdata = mmc_dev(host-mmc)-platform_data; if (pdata) { if (pdata-flags SLOTF_8_BIT_CAPABLE) mmc-caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA;
[PATCH v1 1/5] ARM: imx28: add basic dt support
From: Dong Aisheng dong.aish...@linaro.org This patch includes basic dt support which can boot via nfs rootfs. Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- Documentation/devicetree/bindings/arm/fsl.txt |4 + arch/arm/boot/dts/imx28-evk.dts | 31 + arch/arm/boot/dts/imx28.dtsi | 88 + arch/arm/mach-mxs/Kconfig |9 +++ arch/arm/mach-mxs/Makefile|1 + arch/arm/mach-mxs/imx28-dt.c | 67 +++ 6 files changed, 200 insertions(+), 0 deletions(-) diff --git a/Documentation/devicetree/bindings/arm/fsl.txt b/Documentation/devicetree/bindings/arm/fsl.txt index 54bddda..9f21faf 100644 --- a/Documentation/devicetree/bindings/arm/fsl.txt +++ b/Documentation/devicetree/bindings/arm/fsl.txt @@ -1,6 +1,10 @@ Freescale i.MX Platforms Device Tree Bindings --- +i.MX28 Evaluation Kit +Required root node properties: +- compatible = fsl,imx28-evk, fsl,imx28; + i.MX51 Babbage Board Required root node properties: - compatible = fsl,imx51-babbage, fsl,imx51; diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts new file mode 100644 index 000..9758dc4 --- /dev/null +++ b/arch/arm/boot/dts/imx28-evk.dts @@ -0,0 +1,31 @@ +/* + * Copyright 2012 Freescale Semiconductor, Inc. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; +/include/ imx28.dtsi + +/ { + model = Freescale i.MX28 Evaluation Kit; + compatible = fsl,imx28-evk, fsl,imx28; + + memory { + device_type = memory; + reg = 0x4000 0x0800; + }; + + ahb@8008 { + fec@800f { + phy-mode = rmii; + local-mac-address = [00 04 9F 01 7D 5B]; + status = okay; + }; + }; +}; diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi new file mode 100644 index 000..acf0dab --- /dev/null +++ b/arch/arm/boot/dts/imx28.dtsi @@ -0,0 +1,88 @@ +/* + * Copyright 2012 Freescale Semiconductor, Inc. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/include/ skeleton.dtsi + +/ { + #address-cells = 1; + #size-cells = 1; + interrupt-parent = icoll; + + aliases { + serial0 = uart1; + }; + + cpus { + cpu@0 { + compatible = arm,arm926ejs; + }; + }; + + apb@8000 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8000 0x8; + ranges; + + apbh@8000 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8000 0x3c900; + ranges; + + icoll: interrupt-controller@8000 { + compatible = fsl,imx28-icoll; + interrupt-controller; + #interrupt-cells = 1; + reg = 0x8000 0x2000; + }; + }; + + apbx@8004 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8004 0x4; + ranges; + + uart1: uart@80074000 { + compatible = arm,pl011, arm,primecell; + reg = 0x80074000 0x2000; + interrupts = 47; + }; + }; + }; + + ahb@8008 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8008 0x8; + ranges; + + fec@800f { + compatible = fsl,imx28-fec; + reg = 0x800f 0x4000; + interrupts = 101; + status = disabled; + }; + + fec@800f4000 { + compatible = fsl,imx28-fec; + reg = 0x800f4000 0x4000; + interrupts = 102; +
[PATCH v1 3/5] ARM: imx28evk: add mmc dt support
From: Dong Aisheng dong.aish...@linaro.org Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- arch/arm/boot/dts/imx28-evk.dts | 14 ++ arch/arm/boot/dts/imx28.dtsi| 33 + arch/arm/mach-mxs/imx28-dt.c|2 ++ 3 files changed, 49 insertions(+), 0 deletions(-) diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts index 9758dc4..61350ab 100644 --- a/arch/arm/boot/dts/imx28-evk.dts +++ b/arch/arm/boot/dts/imx28-evk.dts @@ -21,6 +21,20 @@ reg = 0x4000 0x0800; }; +apb@8000 { +apbh@8000 { + mmc1: ssp@8001 { + slot-8bit; + status = okay; + }; + + mmc2: ssp@80012000 { + slot-8bit; + status = okay; + }; + }; + }; + ahb@8008 { fec@800f { phy-mode = rmii; diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi index acf0dab..71c7bfb 100644 --- a/arch/arm/boot/dts/imx28.dtsi +++ b/arch/arm/boot/dts/imx28.dtsi @@ -46,6 +46,39 @@ #interrupt-cells = 1; reg = 0x8000 0x2000; }; + + ssp@8001 { + compatible = fsl,imx28-mmc; + reg = 0x8001 2000; + /* irq_err irq_dma */ + interrupts = 96 82; + dma_channel = 0; + status = disabled; + }; + + ssp@80012000 { + compatible = fsl,imx28-mmc; + reg = 0x80012000 2000; + interrupts = 97 83; + dma_channel = 1; + status = disabled; + }; + + ssp@80014000 { + compatible = fsl,imx28-mmc; + reg = 0x80014000 2000; + interrupts = 98 84; + dma_channel = 2; + status = disabled; + }; + + ssp@80016000 { + compatible = fsl,imx28-mmc; + reg = 0x80016000 2000; + interrupts = 99 85; + dma_channel = 3; + status = disabled; + }; }; apbx@8004 { diff --git a/arch/arm/mach-mxs/imx28-dt.c b/arch/arm/mach-mxs/imx28-dt.c index 78d1129..429b88e 100644 --- a/arch/arm/mach-mxs/imx28-dt.c +++ b/arch/arm/mach-mxs/imx28-dt.c @@ -23,6 +23,8 @@ static const struct of_dev_auxdata imx28_auxdata_lookup[] __initconst = { OF_DEV_AUXDATA(arm,pl011, MX28_DUART_BASE_ADDR, duart, NULL), OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC0_BASE_ADDR, imx28-fec.0, NULL), OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC1_BASE_ADDR, imx28-fec.1, NULL), + OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP0_BASE_ADDR, mxs-mmc.0, NULL), + OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP1_BASE_ADDR, mxs-mmc.1, NULL), { /* sentinel */ } }; -- 1.7.0.4 -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v1 4/5] dma: mxs-dma: add dt probe support
From: Dong Aisheng dong.aish...@linaro.org Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- .../devicetree/bindings/dma/fsl-mxs-dma.txt| 17 drivers/dma/mxs-dma.c | 44 +-- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt new file mode 100644 index 000..cfa1730 --- /dev/null +++ b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt @@ -0,0 +1,17 @@ +* Freescale MXS DMA + +Required properties: +- compatible : Should be fsl,mxs-dma-apbh or fsl,mxs-dma-apbx +- reg : Should contain registers location and length + +Examples: + +dma-apbh@80004000 { + compatible = fsl,mxs-dma-apbh; + reg = 0x80004000 2000; +}; + +dma-apbx@80024000 { + compatible = fsl,mxs-dma-apbx; + reg = 0x80024000 2000; +}; diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c index b06cd4c..45e8d46 100644 --- a/drivers/dma/mxs-dma.c +++ b/drivers/dma/mxs-dma.c @@ -22,6 +22,9 @@ #include linux/platform_device.h #include linux/dmaengine.h #include linux/delay.h +#include linux/module.h +#include linux/of.h +#include linux/of_device.h #include asm/irq.h #include mach/mxs.h @@ -130,6 +133,25 @@ struct mxs_dma_engine { struct mxs_dma_chan mxs_chans[MXS_DMA_CHANNELS]; }; +static struct platform_device_id mxs_dma_type[] = { + { + .name = mxs-dma-apbh, + .driver_data = MXS_DMA_APBH, + }, { + .name = mxs-dma-apbx, + .driver_data = MXS_DMA_APBX, + }, { + /* end of list */ + } +}; + +static const struct of_device_id mxs_dma_dt_ids[] = { + { .compatible = fsl,mxs-dma-apbh, .data = mxs_dma_type[0], }, + { .compatible = fsl,mxs-dma-apbx, .data = mxs_dma_type[1], }, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, mxs_dma_dt_ids); + static void mxs_dma_reset_chan(struct mxs_dma_chan *mxs_chan) { struct mxs_dma_engine *mxs_dma = mxs_chan-mxs_dma; @@ -587,8 +609,8 @@ err_out: static int __init mxs_dma_probe(struct platform_device *pdev) { - const struct platform_device_id *id_entry = - platform_get_device_id(pdev); + const struct platform_device_id *id_entry; + const struct of_device_id *of_id; struct mxs_dma_engine *mxs_dma; struct resource *iores; int ret, i; @@ -597,6 +619,11 @@ static int __init mxs_dma_probe(struct platform_device *pdev) if (!mxs_dma) return -ENOMEM; + of_id = of_match_device(mxs_dma_dt_ids, pdev-dev); + if (of_id) + id_entry = of_id-data; + else + id_entry = platform_get_device_id(pdev); mxs_dma-dev_id = id_entry-driver_data; iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); @@ -679,21 +706,10 @@ err_request_region: return ret; } -static struct platform_device_id mxs_dma_type[] = { - { - .name = mxs-dma-apbh, - .driver_data = MXS_DMA_APBH, - }, { - .name = mxs-dma-apbx, - .driver_data = MXS_DMA_APBX, - }, { - /* end of list */ - } -}; - static struct platform_driver mxs_dma_driver = { .driver = { .name = mxs-dma, + .of_match_table = mxs_dma_dt_ids, }, .id_table = mxs_dma_type, }; -- 1.7.0.4 -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v1 5/5] ARM: mxs: add mxs dma dt support
From: Dong Aisheng dong.aish...@linaro.org Originally the dma device will be added by default via arch_initcall(mxs_add_mxs_dma); Now change to call it explicitly in board file to avoid conflict with device tree support. Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- arch/arm/boot/dts/imx28.dtsi| 12 +++- arch/arm/mach-mxs/devices-mx23.h|2 ++ arch/arm/mach-mxs/devices-mx28.h|2 ++ arch/arm/mach-mxs/devices/platform-dma.c|3 +-- arch/arm/mach-mxs/imx28-dt.c|2 ++ arch/arm/mach-mxs/include/mach/devices-common.h |3 +++ arch/arm/mach-mxs/mach-apx4devkit.c |1 + arch/arm/mach-mxs/mach-m28evk.c |1 + arch/arm/mach-mxs/mach-mx23evk.c|1 + arch/arm/mach-mxs/mach-mx28evk.c|1 + arch/arm/mach-mxs/mach-stmp378x_devb.c |1 + arch/arm/mach-mxs/mach-tx28.c |1 + 12 files changed, 27 insertions(+), 3 deletions(-) diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi index 71c7bfb..f0322e9 100644 --- a/arch/arm/boot/dts/imx28.dtsi +++ b/arch/arm/boot/dts/imx28.dtsi @@ -47,6 +47,11 @@ reg = 0x8000 0x2000; }; + dma-apbh@80004000 { + compatible = fsl,mxs-dma-apbh; + reg = 0x80004000 2000; + }; + ssp@8001 { compatible = fsl,imx28-mmc; reg = 0x8001 2000; @@ -79,7 +84,12 @@ dma_channel = 3; status = disabled; }; - }; + + dma-apbx@80024000 { + compatible = fsl,mxs-dma-apbx; + reg = 0x80024000 2000; + }; +}; apbx@8004 { compatible = simple-bus; diff --git a/arch/arm/mach-mxs/devices-mx23.h b/arch/arm/mach-mxs/devices-mx23.h index 3fa651d..721c91a 100644 --- a/arch/arm/mach-mxs/devices-mx23.h +++ b/arch/arm/mach-mxs/devices-mx23.h @@ -31,3 +31,5 @@ struct platform_device *__init mx23_add_mxsfb( const struct mxsfb_platform_data *pdata); struct platform_device *__init mx23_add_rtc_stmp3xxx(void); + +#define mx23_add_dma() mxs_add_mxs_dma() diff --git a/arch/arm/mach-mxs/devices-mx28.h b/arch/arm/mach-mxs/devices-mx28.h index 4f50094..c0cfd4e 100644 --- a/arch/arm/mach-mxs/devices-mx28.h +++ b/arch/arm/mach-mxs/devices-mx28.h @@ -51,3 +51,5 @@ extern const struct mxs_saif_data mx28_saif_data[] __initconst; mxs_add_saif(mx28_saif_data[id], pdata) struct platform_device *__init mx28_add_rtc_stmp3xxx(void); + +#define mx28_add_dma() mxs_add_mxs_dma() diff --git a/arch/arm/mach-mxs/devices/platform-dma.c b/arch/arm/mach-mxs/devices/platform-dma.c index 6a0202b..57f851e 100644 --- a/arch/arm/mach-mxs/devices/platform-dma.c +++ b/arch/arm/mach-mxs/devices/platform-dma.c @@ -30,7 +30,7 @@ static struct platform_device *__init mxs_add_dma(const char *devid, DMA_BIT_MASK(32)); } -static int __init mxs_add_mxs_dma(void) +int __init mxs_add_mxs_dma(void) { char *apbh = mxs-dma-apbh; char *apbx = mxs-dma-apbx; @@ -47,4 +47,3 @@ static int __init mxs_add_mxs_dma(void) return 0; } -arch_initcall(mxs_add_mxs_dma); diff --git a/arch/arm/mach-mxs/imx28-dt.c b/arch/arm/mach-mxs/imx28-dt.c index 429b88e..1c4d317 100644 --- a/arch/arm/mach-mxs/imx28-dt.c +++ b/arch/arm/mach-mxs/imx28-dt.c @@ -25,6 +25,8 @@ static const struct of_dev_auxdata imx28_auxdata_lookup[] __initconst = { OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC1_BASE_ADDR, imx28-fec.1, NULL), OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP0_BASE_ADDR, mxs-mmc.0, NULL), OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP1_BASE_ADDR, mxs-mmc.1, NULL), + OF_DEV_AUXDATA(fsl,mxs-dma-apbh, MX28_APBH_DMA_BASE_ADDR, mxs-dma-apbh, NULL), + OF_DEV_AUXDATA(fsl,mxs-dma-apbx, MX28_APBX_DMA_BASE_ADDR, mxs-dma-apbx, NULL), { /* sentinel */ } }; diff --git a/arch/arm/mach-mxs/include/mach/devices-common.h b/arch/arm/mach-mxs/include/mach/devices-common.h index dc369c1..87939a2 100644 --- a/arch/arm/mach-mxs/include/mach/devices-common.h +++ b/arch/arm/mach-mxs/include/mach/devices-common.h @@ -106,3 +106,6 @@ struct mxs_saif_data { struct platform_device *__init mxs_add_saif( const struct mxs_saif_data *data, const struct mxs_saif_platform_data *pdata); + +/* dma */ +int __init mxs_add_mxs_dma(void); diff --git a/arch/arm/mach-mxs/mach-apx4devkit.c b/arch/arm/mach-mxs/mach-apx4devkit.c index 48a7fab..92f47e9 100644 --- a/arch/arm/mach-mxs/mach-apx4devkit.c +++
Re: [PATCH 0/4] mmc: add a cap and a quirk
Hi Adrian, On Tue, Mar 13 2012, Adrian Hunter wrote: On 07/02/12 14:48, Adrian Hunter wrote: Hi Here are patches for Medfield to allow the use of high-capacity erase size and to allow the SDIO host controller to be off when the card is kept on during suspend - replacing the earlier patch mmc: sdhci: always reset all during resume Adrian Hunter (4): mmc: core: add high-capacity erase size capability flag mmc: sdhci-pci: select HC erase size for Medfield eMMC mmc: sdhci: add quirk for keeping card power during suspend mmc: sdhci-pci: add SDHCI_QUIRK2_HOST_OFF_CARD_ON for Medfield SDIO drivers/mmc/core/mmc.c |3 ++- drivers/mmc/host/sdhci-pci.c |8 +++- drivers/mmc/host/sdhci.c | 13 +++-- include/linux/mmc/host.h |1 + include/linux/mmc/sdhci.h|2 ++ 5 files changed, 23 insertions(+), 4 deletions(-) Chris can you take these? MMC_CAP2_HC_ERASE_SZ needs to move to bit9 but otherwise they apply. Thanks for the reminder, moved MMC_CAP2_HC_ERASE_SZ to bit9 and pushed to mmc-next for 3.4. - Chris. -- Chris Ball c...@laptop.org http://printf.net/ One Laptop Per Child -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [MX25][MMC] mmc esdhc failure in 3.3-rc5
I'd recommend: git log v2.6.39.. drivers/mmc/host/sdhci-esdhc-imx.c I have been staring at those commits, however with very little domain knowledge it's a shot in the dark. Have you tried copying sdhci-esdhc-imx.c from 2.6.39 to the current kernel (might need some build fixes)? If that doesn't work, there might be something wrong in the sdhci-driver itself, and not the esdhc-extension. I have now, and it results in a bigger mess than I believe is worth pursuing for. Therefore, I will create a stashing tree next to linux.git with our device specific changes (minimal setup for the PCB to boot up) that should theoretically apply to any kernel tree between 2.6.x and 3.3-rcX to subsequently bisect the biest. Thanks for your help and best regards -- Joan C. Abelaira -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v1 1/5] ARM: imx28: add basic dt support
On 03/13/2012 03:47 AM, Dong Aisheng wrote: From: Dong Aisheng dong.aish...@linaro.org This patch includes basic dt support which can boot via nfs rootfs. Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- Documentation/devicetree/bindings/arm/fsl.txt |4 + arch/arm/boot/dts/imx28-evk.dts | 31 + arch/arm/boot/dts/imx28.dtsi | 88 + arch/arm/mach-mxs/Kconfig |9 +++ arch/arm/mach-mxs/Makefile|1 + arch/arm/mach-mxs/imx28-dt.c | 67 +++ 6 files changed, 200 insertions(+), 0 deletions(-) diff --git a/Documentation/devicetree/bindings/arm/fsl.txt b/Documentation/devicetree/bindings/arm/fsl.txt index 54bddda..9f21faf 100644 --- a/Documentation/devicetree/bindings/arm/fsl.txt +++ b/Documentation/devicetree/bindings/arm/fsl.txt @@ -1,6 +1,10 @@ Freescale i.MX Platforms Device Tree Bindings --- +i.MX28 Evaluation Kit +Required root node properties: +- compatible = fsl,imx28-evk, fsl,imx28; + i.MX51 Babbage Board Required root node properties: - compatible = fsl,imx51-babbage, fsl,imx51; diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts new file mode 100644 index 000..9758dc4 --- /dev/null +++ b/arch/arm/boot/dts/imx28-evk.dts @@ -0,0 +1,31 @@ +/* + * Copyright 2012 Freescale Semiconductor, Inc. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; +/include/ imx28.dtsi + +/ { + model = Freescale i.MX28 Evaluation Kit; + compatible = fsl,imx28-evk, fsl,imx28; + + memory { + device_type = memory; + reg = 0x4000 0x0800; + }; + + ahb@8008 { + fec@800f { Use generic names: ethernet@800f + phy-mode = rmii; + local-mac-address = [00 04 9F 01 7D 5B]; + status = okay; + }; + }; +}; diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi new file mode 100644 index 000..acf0dab --- /dev/null +++ b/arch/arm/boot/dts/imx28.dtsi @@ -0,0 +1,88 @@ +/* + * Copyright 2012 Freescale Semiconductor, Inc. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/include/ skeleton.dtsi + +/ { + #address-cells = 1; + #size-cells = 1; + interrupt-parent = icoll; + + aliases { + serial0 = uart1; + }; + + cpus { + cpu@0 { + compatible = arm,arm926ejs; + }; + }; + + apb@8000 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8000 0x8; + ranges; + + apbh@8000 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8000 0x3c900; + ranges; + + icoll: interrupt-controller@8000 { + compatible = fsl,imx28-icoll; + interrupt-controller; + #interrupt-cells = 1; + reg = 0x8000 0x2000; + }; + }; + + apbx@8004 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8004 0x4; + ranges; + + uart1: uart@80074000 { Use generic names: uart1: serial@... + compatible = arm,pl011, arm,primecell; + reg = 0x80074000 0x2000; This is really only 0x1000 in length. + interrupts = 47; + }; + }; + }; + + ahb@8008 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8008 0x8; + ranges; + + fec@800f { + compatible = fsl,imx28-fec; + reg = 0x800f 0x4000; This too IIRC. + interrupts = 101; + status = disabled; +
Re: [PATCH v1 3/5] ARM: imx28evk: add mmc dt support
On 03/13/2012 03:47 AM, Dong Aisheng wrote: From: Dong Aisheng dong.aish...@linaro.org Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- arch/arm/boot/dts/imx28-evk.dts | 14 ++ arch/arm/boot/dts/imx28.dtsi| 33 + arch/arm/mach-mxs/imx28-dt.c|2 ++ 3 files changed, 49 insertions(+), 0 deletions(-) snip diff --git a/arch/arm/mach-mxs/imx28-dt.c b/arch/arm/mach-mxs/imx28-dt.c index 78d1129..429b88e 100644 --- a/arch/arm/mach-mxs/imx28-dt.c +++ b/arch/arm/mach-mxs/imx28-dt.c @@ -23,6 +23,8 @@ static const struct of_dev_auxdata imx28_auxdata_lookup[] __initconst = { OF_DEV_AUXDATA(arm,pl011, MX28_DUART_BASE_ADDR, duart, NULL), OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC0_BASE_ADDR, imx28-fec.0, NULL), OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC1_BASE_ADDR, imx28-fec.1, NULL), + OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP0_BASE_ADDR, mxs-mmc.0, NULL), + OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP1_BASE_ADDR, mxs-mmc.1, NULL), Why is this needed? { /* sentinel */ } }; -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v1 1/5] ARM: imx28: add basic dt support
On 03/13/2012 09:35 AM, Rob Herring wrote: + ahb@8008 { + fec@800f { Use generic names: ethernet@800f Generic is good, but consistency is better, IMHO. grepping existing dts files in 3.2.9 finds 6 instances of fec@ and 0 instances of ethernet@ + uart1: uart@80074000 { Use generic names: uart1: serial@... Same comment here, but unfortunately there is already inconsistency in existing files... 25 instances of serial@ and 35 instances of uart@ -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v2 0/4] omap hsmmc device tree support
On Mon, Mar 12, 2012 at 8:32 PM, Rajendra Nayak rna...@ti.com wrote: The series adds device tree support for OMAP hsmmc driver. Changes in V2: -1- Minor fixes based on comments from Grant. -2- Added a seperate compatible for omap3. -3- Added a new binding ti,needs-special-reset to handle some mmc modules which need special softreset sequence. -4- Updated board dts files with status = disable; for unused mmc modules. Rob, I retained your ack on patch 1 despite the additional binding that I added to handle the special softreset sequence. Let me know if you have any issues with it. Chris. Patch 1 and Patch 2 apply cleanly on mmc-next and can be taken in from the mmc tree after relevent acks from DT folks. Patch 3 and Patch 4 which update dts files, I plan to push via linux-omap/Tony's tree. Hi Rajendra, Tested this series on omap4sdp, so feel free to add Tested-by: Balaji T K balaj...@ti.com The series is tested on omap4sdp (both external and emmc), omap4panda amd omap3beagle boards. Things to do: -1- Card detect isn't functional and needs twl4030 gpio to be DT converted. -2- pbias cell programming is missing and needs an OMAP control module driver. Rajendra Nayak (4): mmc: omap_hsmmc: Convert hsmmc driver to use device tree mmc: omap_hsmmc: Avoid a regulator voltage change with dt arm/dts: OMAP4: Add mmc controller nodes and board data arm/dts: OMAP3: Add mmc controller nodes and board data .../devicetree/bindings/mmc/ti-omap-hsmmc.txt | 33 +++ arch/arm/boot/dts/omap3-beagle.dts | 14 +++ arch/arm/boot/dts/omap3.dtsi | 16 arch/arm/boot/dts/omap4-panda.dts | 22 + arch/arm/boot/dts/omap4-sdp.dts | 24 ++ arch/arm/boot/dts/omap4.dtsi | 31 +++ drivers/mmc/host/omap_hsmmc.c | 88 +++- 7 files changed, 227 insertions(+), 1 deletions(-) create mode 100644 Documentation/devicetree/bindings/mmc/ti-omap-hsmmc.txt -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v1 3/5] ARM: imx28evk: add mmc dt support
On Tue, Mar 13, 2012 at 09:39:30AM -0500, Rob Herring wrote: On 03/13/2012 03:47 AM, Dong Aisheng wrote: From: Dong Aisheng dong.aish...@linaro.org Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- arch/arm/boot/dts/imx28-evk.dts | 14 ++ arch/arm/boot/dts/imx28.dtsi| 33 + arch/arm/mach-mxs/imx28-dt.c|2 ++ 3 files changed, 49 insertions(+), 0 deletions(-) snip diff --git a/arch/arm/mach-mxs/imx28-dt.c b/arch/arm/mach-mxs/imx28-dt.c index 78d1129..429b88e 100644 --- a/arch/arm/mach-mxs/imx28-dt.c +++ b/arch/arm/mach-mxs/imx28-dt.c @@ -23,6 +23,8 @@ static const struct of_dev_auxdata imx28_auxdata_lookup[] __initconst = { OF_DEV_AUXDATA(arm,pl011, MX28_DUART_BASE_ADDR, duart, NULL), OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC0_BASE_ADDR, imx28-fec.0, NULL), OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC1_BASE_ADDR, imx28-fec.1, NULL), + OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP0_BASE_ADDR, mxs-mmc.0, NULL), + OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP1_BASE_ADDR, mxs-mmc.1, NULL), Why is this needed? These are needed for the drivers which have still the mxs-mmc.* names to find their clocks. Alternatively we could also add the appropriate clocks to the clock file. Don't know if that's better though. Sascha -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0| Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917- | -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/3] mmc: sdhci-pci: Add MSI support
Signed-off-by: Alexander Stein alexander.st...@systec-electronic.com --- drivers/mmc/host/sdhci-pci.c |6 ++ 1 files changed, 6 insertions(+), 0 deletions(-) diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index 7165e6a..9382f27 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c @@ -1379,6 +1379,8 @@ static int __devinit sdhci_pci_probe(struct pci_dev *pdev, slots = chip-num_slots;/* Quirk may have changed this */ + pci_enable_msi(pdev); + for (i = 0; i slots; i++) { slot = sdhci_pci_probe_slot(pdev, chip, first_bar, i); if (IS_ERR(slot)) { @@ -1397,6 +1399,8 @@ static int __devinit sdhci_pci_probe(struct pci_dev *pdev, return 0; free: + pci_disable_msi(pdev); + pci_set_drvdata(pdev, NULL); kfree(chip); @@ -1419,6 +1423,8 @@ static void __devexit sdhci_pci_remove(struct pci_dev *pdev) for (i = 0; i chip-num_slots; i++) sdhci_pci_remove_slot(chip-slots[i]); + pci_disable_msi(pdev); + pci_set_drvdata(pdev, NULL); kfree(chip); } -- 1.7.3.4 -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 3/3] mmc: sdhci-pci: allow 8-bit bus width for Intel PCH
Signed-off-by: Alexander Stein alexander.st...@systec-electronic.com --- drivers/mmc/host/sdhci-pci.c | 27 +++ include/linux/pci_ids.h |2 ++ 2 files changed, 29 insertions(+), 0 deletions(-) diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index 9382f27..0218cb2 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c @@ -172,6 +172,12 @@ static int mrst_hc_probe(struct sdhci_pci_chip *chip) return 0; } +static int pch_hc_probe_slot(struct sdhci_pci_slot *slot) +{ + slot-host-mmc-caps |= MMC_CAP_8_BIT_DATA; + return 0; +} + #ifdef CONFIG_PM_RUNTIME static irqreturn_t sdhci_pci_sd_cd(int irq, void *dev_id) @@ -281,6 +287,11 @@ static const struct sdhci_pci_fixes sdhci_intel_mfd_emmc = { .probe_slot = mfd_emmc_probe_slot, }; +static const struct sdhci_pci_fixes sdhci_intel_pch_sdio = { + .quirks = SDHCI_QUIRK_BROKEN_ADMA, + .probe_slot = pch_hc_probe_slot, +}; + /* O2Micro extra registers */ #define O2_SD_LOCK_WP 0xD3 #define O2_SD_MULTI_VCC3V 0xEE @@ -817,6 +828,22 @@ static const struct pci_device_id pci_ids[] __devinitdata = { }, { + .vendor = PCI_VENDOR_ID_INTEL, + .device = PCI_DEVICE_ID_INTEL_PCH_SDIO0, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data= (kernel_ulong_t)sdhci_intel_pch_sdio, + }, + + { + .vendor = PCI_VENDOR_ID_INTEL, + .device = PCI_DEVICE_ID_INTEL_PCH_SDIO1, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data= (kernel_ulong_t)sdhci_intel_pch_sdio, + }, + + { .vendor = PCI_VENDOR_ID_O2, .device = PCI_DEVICE_ID_O2_8120, .subvendor = PCI_ANY_ID, diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 31d77af..28cd019 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2800,6 +2800,8 @@ #define PCI_DEVICE_ID_INTEL_82454NX 0x84cb #define PCI_DEVICE_ID_INTEL_84460GX0x84ea #define PCI_DEVICE_ID_INTEL_IXP4XX 0x8500 +#define PCI_DEVICE_ID_INTEL_PCH_SDIO0 0x8809 +#define PCI_DEVICE_ID_INTEL_PCH_SDIO1 0x880a #define PCI_DEVICE_ID_INTEL_IXP28000x9004 #define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 -- 1.7.3.4 -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2/3] mmc: sdhci: check interrupt flags in ISR again
When using MSI it is possible that a new MSI is sent while an earlier MSI is currently handled. In this case SDHCI_INT_STATUS only contains SDHCI_INT_RESPONSE and the ISR would not be called again. But at the end of the ISR SDHCI_INT_DATA_END is now also pending which would be ignored. Fix this by rereading the interrupt flags in the ISR until no interrupt we care is pending. Signed-off-by: Alexander Stein alexander.st...@systec-electronic.com --- drivers/mmc/host/sdhci.c | 10 ++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 8d66706..654ab32 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -2268,6 +2268,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) irqreturn_t result; struct sdhci_host *host = dev_id; u32 intmask; + u32 intmask_unhandled; int cardint = 0; spin_lock(host-lock); @@ -2286,6 +2287,7 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) goto out; } +again: DBG(*** %s got interrupt: 0x%08x\n, mmc_hostname(host-mmc), intmask); @@ -2336,6 +2338,14 @@ static irqreturn_t sdhci_irq(int irq, void *dev_id) sdhci_writel(host, SDHCI_INT_BUS_POWER, SDHCI_INT_STATUS); } + intmask_unhandled = intmask; + + intmask = sdhci_readl(host, SDHCI_INT_STATUS); + + /* Do interrupt handling again if we got new flags */ + if (intmask ~intmask_unhandled) + goto again; + intmask = ~SDHCI_INT_BUS_POWER; if (intmask SDHCI_INT_CARD_INT) -- 1.7.3.4 -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v1 1/5] ARM: imx28: add basic dt support
On Tue, 13 Mar 2012 16:47:04 +0800, Dong Aisheng b29...@freescale.com wrote: From: Dong Aisheng dong.aish...@linaro.org This patch includes basic dt support which can boot via nfs rootfs. Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- Documentation/devicetree/bindings/arm/fsl.txt |4 + arch/arm/boot/dts/imx28-evk.dts | 31 + arch/arm/boot/dts/imx28.dtsi | 88 + arch/arm/mach-mxs/Kconfig |9 +++ arch/arm/mach-mxs/Makefile|1 + arch/arm/mach-mxs/imx28-dt.c | 67 +++ 6 files changed, 200 insertions(+), 0 deletions(-) diff --git a/Documentation/devicetree/bindings/arm/fsl.txt b/Documentation/devicetree/bindings/arm/fsl.txt index 54bddda..9f21faf 100644 --- a/Documentation/devicetree/bindings/arm/fsl.txt +++ b/Documentation/devicetree/bindings/arm/fsl.txt @@ -1,6 +1,10 @@ Freescale i.MX Platforms Device Tree Bindings --- +i.MX28 Evaluation Kit +Required root node properties: +- compatible = fsl,imx28-evk, fsl,imx28; + i.MX51 Babbage Board Required root node properties: - compatible = fsl,imx51-babbage, fsl,imx51; diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts new file mode 100644 index 000..9758dc4 --- /dev/null +++ b/arch/arm/boot/dts/imx28-evk.dts @@ -0,0 +1,31 @@ +/* + * Copyright 2012 Freescale Semiconductor, Inc. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; +/include/ imx28.dtsi + +/ { + model = Freescale i.MX28 Evaluation Kit; + compatible = fsl,imx28-evk, fsl,imx28; + + memory { + device_type = memory; + reg = 0x4000 0x0800; + }; + + ahb@8008 { + fec@800f { + phy-mode = rmii; + local-mac-address = [00 04 9F 01 7D 5B]; Generally a bad idea to put a specific mac address into the device tree. Better to fill it with zeros. Otherwise all the dev boards will end up using the same value. + status = okay; + }; + }; +}; diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi new file mode 100644 index 000..acf0dab --- /dev/null +++ b/arch/arm/boot/dts/imx28.dtsi @@ -0,0 +1,88 @@ +/* + * Copyright 2012 Freescale Semiconductor, Inc. + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/include/ skeleton.dtsi + +/ { + #address-cells = 1; + #size-cells = 1; + interrupt-parent = icoll; + + aliases { + serial0 = uart1; + }; + + cpus { + cpu@0 { + compatible = arm,arm926ejs; + }; + }; + + apb@8000 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8000 0x8; + ranges; + + apbh@8000 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8000 0x3c900; + ranges; + + icoll: interrupt-controller@8000 { + compatible = fsl,imx28-icoll; + interrupt-controller; + #interrupt-cells = 1; + reg = 0x8000 0x2000; + }; + }; + + apbx@8004 { + compatible = simple-bus; + #address-cells = 1; + #size-cells = 1; + reg = 0x8004 0x4; + ranges; + + uart1: uart@80074000 { + compatible = arm,pl011, arm,primecell; + reg = 0x80074000 0x2000; + interrupts = 47; + }; + }; What is the purpose of the apbh and apbx busses? Will more device nodes get added to them later, or does each only contain a single device? g. -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/3] mmc: sdhci-pci: allow 8-bit bus width for Intel PCH
On Tue, Mar 13, 2012 at 06:16:42PM +0100, Alexander Stein wrote: --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2800,6 +2800,8 @@ #define PCI_DEVICE_ID_INTEL_82454NX 0x84cb #define PCI_DEVICE_ID_INTEL_84460GX 0x84ea #define PCI_DEVICE_ID_INTEL_IXP4XX 0x8500 +#define PCI_DEVICE_ID_INTEL_PCH_SDIO00x8809 +#define PCI_DEVICE_ID_INTEL_PCH_SDIO10x880a #define PCI_DEVICE_ID_INTEL_IXP2800 0x9004 #define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 Did you read the comment at the top of this file before adding your new device ids? If not, please do so, and redo your patch. thanks, greg k-h -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v1 1/5] ARM: imx28: add basic dt support
On Tue, 13 Mar 2012 09:59:39 -0500, Zach Sadecki zsade...@itwatchdogs.com wrote: On 03/13/2012 09:35 AM, Rob Herring wrote: + ahb@8008 { + fec@800f { Use generic names: ethernet@800f Generic is good, but consistency is better, IMHO. grepping existing dts files in 3.2.9 finds 6 instances of fec@ and 0 instances of ethernet@ + uart1: uart@80074000 { Use generic names: uart1: serial@... Same comment here, but unfortunately there is already inconsistency in existing files... 25 instances of serial@ and 35 instances of uart@ No, Rob is correct. The generic names recommended practice is well established and documented. Expand your grep search to include arch/powerpc/bot/dts/*. See section 2.2.2 of ePAPR[1] [1]https://www.power.org/resources/downloads/Power_ePAPR_APPROVED_v1.1.pdf -- Grant Likely, B.Sc, P.Eng. Secret Lab Technologies,Ltd. -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v1 2/5] mmc: mxs-mmc: add dt probe support
On Tue, 13 Mar 2012 16:47:05 +0800, Dong Aisheng b29...@freescale.com wrote: From: Dong Aisheng dong.aish...@linaro.org Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- The patch is still using a private way for dma part binding since the common dma binding is still under discussion. http://www.spinics.net/lists/linux-omap/msg65528.html Will update to use common dma binding when it hits mainline. --- .../devicetree/bindings/mmc/fsl-mxs-mmc.txt| 23 ++ drivers/mmc/host/mxs-mmc.c | 82 +++- 2 files changed, 102 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/mmc/fsl-mxs-mmc.txt b/Documentation/devicetree/bindings/mmc/fsl-mxs-mmc.txt new file mode 100644 index 000..adc1142 --- /dev/null +++ b/Documentation/devicetree/bindings/mmc/fsl-mxs-mmc.txt @@ -0,0 +1,23 @@ +* FREESCALE MXS MMC peripheral + +Required properties: +- compatible : Should be fsl,chip-mmc +- reg : Should contain registers location and length +- interrupts : Should contain interrupt. + The format is irq_err irq_dma. +- dma_channel: Should contain the dma channel it uses Don't use '_' in property names. The is a generic dma binding being drafted that uses a phandle to the dma controller and the ability to encode channel numbers. You may want to take a look at it. + +Optional properties: +- wp-gpios : Specify GPIOs for write protection +- slot-4bit: Specify 4 bit mode support +- slot-8bit: Specify 8 bit and 4 bit mode support + +Examples: +mmc1: ssp@8001 { + compatible = fsl,imx28-mmc; + reg = 0x8001 2000; + /* irq_err irq_dma */ + interrupts = 96 82; + dma_channel = 0; + slot-8bit; +}; diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c index 382c835..6cf2d17 100644 --- a/drivers/mmc/host/mxs-mmc.c +++ b/drivers/mmc/host/mxs-mmc.c @@ -38,6 +38,10 @@ #include linux/gpio.h #include linux/regulator/consumer.h #include linux/module.h +#include linux/of.h +#include linux/of_device.h +#include linux/of_gpio.h +#include linux/slab.h #include mach/mxs.h #include mach/common.h @@ -673,17 +677,79 @@ static bool mxs_mmc_dma_filter(struct dma_chan *chan, void *param) return true; } +#ifdef CONFIG_OF +static struct resource * __devinit mxs_mmc_get_of_dmares( + struct platform_device *pdev) +{ + struct device_node *np = pdev-dev.of_node; + struct resource *dmares; + int ret; + + if (!np) + return NULL; + + dmares = kzalloc(sizeof(*dmares), GFP_KERNEL); devm_kzalloc() + dmares-flags = IORESOURCE_DMA; + ret = of_property_read_u32(np, dma_channel, dmares-start); + if (ret) { + dev_err(pdev-dev, unable to get dmares from dt\n); + return NULL; + } + dmares-end = dmares-start; + + return dmares; +} + +static int __devinit mxs_mmc_get_of_property(struct platform_device *pdev, + struct mxs_mmc_platform_data **ppdata) +{ + struct device_node *np = pdev-dev.of_node; + struct mxs_mmc_platform_data *pdata = *ppdata; + + if (!np) + return -ENODEV; + + pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); Ditto Fix up those comments and you can add my: Acked-by: Grant Likely grant.lik...@secretlab.ca + + if (of_get_property(np, slot-8bit, NULL)) + pdata-flags |= SLOTF_8_BIT_CAPABLE; + + if (of_get_property(np, slot-4bit, NULL)) + pdata-flags |= SLOTF_4_BIT_CAPABLE; + + pdata-wp_gpio = of_get_named_gpio(np, wp-gpios, 0); + + dev_dbg(pdev-dev, wp-gpios %d flags %d\n, pdata-wp_gpio, + pdata-flags); + + return 0; +} +#else +static struct resource * __devinit mxs_mmc_get_of_dmares( + struct platform_device *pdev) +{ + return NULL; +} +static inline int mxs_mmc_get_of_property(struct platform_device *pdev, + struct mxs_mmc_platform_data *pdata) +{ + return -ENODEV; +} +#endif + static int mxs_mmc_probe(struct platform_device *pdev) { struct mxs_mmc_host *host; struct mmc_host *mmc; struct resource *iores, *dmares, *r; - struct mxs_mmc_platform_data *pdata; + struct mxs_mmc_platform_data *pdata = NULL; int ret = 0, irq_err, irq_dma; dma_cap_mask_t mask; iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); - dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); + dmares = mxs_mmc_get_of_dmares(pdev); + if (dmares == NULL) + dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); irq_err = platform_get_irq(pdev, 0); irq_dma = platform_get_irq(pdev, 1); if (!iores || !dmares || irq_err 0 || irq_dma 0) @@ -740,7 +806,9 @@ static int mxs_mmc_probe(struct platform_device *pdev) mmc-caps =
Re: [PATCH v1 3/5] ARM: imx28evk: add mmc dt support
On 03/13/2012 11:52 AM, Sascha Hauer wrote: On Tue, Mar 13, 2012 at 09:39:30AM -0500, Rob Herring wrote: On 03/13/2012 03:47 AM, Dong Aisheng wrote: From: Dong Aisheng dong.aish...@linaro.org Signed-off-by: Dong Aisheng dong.aish...@linaro.org --- arch/arm/boot/dts/imx28-evk.dts | 14 ++ arch/arm/boot/dts/imx28.dtsi| 33 + arch/arm/mach-mxs/imx28-dt.c|2 ++ 3 files changed, 49 insertions(+), 0 deletions(-) snip diff --git a/arch/arm/mach-mxs/imx28-dt.c b/arch/arm/mach-mxs/imx28-dt.c index 78d1129..429b88e 100644 --- a/arch/arm/mach-mxs/imx28-dt.c +++ b/arch/arm/mach-mxs/imx28-dt.c @@ -23,6 +23,8 @@ static const struct of_dev_auxdata imx28_auxdata_lookup[] __initconst = { OF_DEV_AUXDATA(arm,pl011, MX28_DUART_BASE_ADDR, duart, NULL), OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC0_BASE_ADDR, imx28-fec.0, NULL), OF_DEV_AUXDATA(fsl,imx28-fec, MX28_ENET_MAC1_BASE_ADDR, imx28-fec.1, NULL), + OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP0_BASE_ADDR, mxs-mmc.0, NULL), + OF_DEV_AUXDATA(fsl,imx28-mmc, MX28_SSP1_BASE_ADDR, mxs-mmc.1, NULL), Why is this needed? These are needed for the drivers which have still the mxs-mmc.* names to find their clocks. Alternatively we could also add the appropriate clocks to the clock file. Don't know if that's better though. Ah, yes I should have known that... If clk lookup is all that's needed, I'd suggest adding the necessary clk lookups either here or in the clock code. Not much difference, but at least it removes the use of *_BASE_ADDR defines. Rob -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 3/3] mmc: sdhci-pci: allow 8-bit bus width for Intel PCH
Hi Alexander As a matter of interest, do you mean that current MMC of eg20t on Linux doesn't support 8-bit access? thanks, -- ROHM Co., Ltd. tomoya On Wed, Mar 14, 2012 at 2:16 AM, Alexander Stein alexander.st...@systec-electronic.com wrote: Signed-off-by: Alexander Stein alexander.st...@systec-electronic.com --- drivers/mmc/host/sdhci-pci.c | 27 +++ include/linux/pci_ids.h | 2 ++ 2 files changed, 29 insertions(+), 0 deletions(-) diff --git a/drivers/mmc/host/sdhci-pci.c b/drivers/mmc/host/sdhci-pci.c index 9382f27..0218cb2 100644 --- a/drivers/mmc/host/sdhci-pci.c +++ b/drivers/mmc/host/sdhci-pci.c @@ -172,6 +172,12 @@ static int mrst_hc_probe(struct sdhci_pci_chip *chip) return 0; } +static int pch_hc_probe_slot(struct sdhci_pci_slot *slot) +{ + slot-host-mmc-caps |= MMC_CAP_8_BIT_DATA; + return 0; +} + #ifdef CONFIG_PM_RUNTIME static irqreturn_t sdhci_pci_sd_cd(int irq, void *dev_id) @@ -281,6 +287,11 @@ static const struct sdhci_pci_fixes sdhci_intel_mfd_emmc = { .probe_slot = mfd_emmc_probe_slot, }; +static const struct sdhci_pci_fixes sdhci_intel_pch_sdio = { + .quirks = SDHCI_QUIRK_BROKEN_ADMA, + .probe_slot = pch_hc_probe_slot, +}; + /* O2Micro extra registers */ #define O2_SD_LOCK_WP 0xD3 #define O2_SD_MULTI_VCC3V 0xEE @@ -817,6 +828,22 @@ static const struct pci_device_id pci_ids[] __devinitdata = { }, { + .vendor = PCI_VENDOR_ID_INTEL, + .device = PCI_DEVICE_ID_INTEL_PCH_SDIO0, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = (kernel_ulong_t)sdhci_intel_pch_sdio, + }, + + { + .vendor = PCI_VENDOR_ID_INTEL, + .device = PCI_DEVICE_ID_INTEL_PCH_SDIO1, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = (kernel_ulong_t)sdhci_intel_pch_sdio, + }, + + { .vendor = PCI_VENDOR_ID_O2, .device = PCI_DEVICE_ID_O2_8120, .subvendor = PCI_ANY_ID, diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index 31d77af..28cd019 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h @@ -2800,6 +2800,8 @@ #define PCI_DEVICE_ID_INTEL_82454NX 0x84cb #define PCI_DEVICE_ID_INTEL_84460GX 0x84ea #define PCI_DEVICE_ID_INTEL_IXP4XX 0x8500 +#define PCI_DEVICE_ID_INTEL_PCH_SDIO0 0x8809 +#define PCI_DEVICE_ID_INTEL_PCH_SDIO1 0x880a #define PCI_DEVICE_ID_INTEL_IXP2800 0x9004 #define PCI_DEVICE_ID_INTEL_S21152BB 0xb152 -- 1.7.3.4 -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v1 1/5] ARM: imx28: add basic dt support
On Tue, Mar 13, 2012 at 11:28:07AM -0600, Grant Likely wrote: On Tue, 13 Mar 2012 09:59:39 -0500, Zach Sadecki zsade...@itwatchdogs.com wrote: On 03/13/2012 09:35 AM, Rob Herring wrote: + ahb@8008 { + fec@800f { Use generic names: ethernet@800f Generic is good, but consistency is better, IMHO. grepping existing dts files in 3.2.9 finds 6 instances of fec@ and 0 instances of ethernet@ +uart1: uart@80074000 { Use generic names: uart1: serial@... Same comment here, but unfortunately there is already inconsistency in existing files... 25 instances of serial@ and 35 instances of uart@ No, Rob is correct. The generic names recommended practice is well established and documented. Expand your grep search to include arch/powerpc/bot/dts/*. See section 2.2.2 of ePAPR[1] [1]https://www.power.org/resources/downloads/Power_ePAPR_APPROVED_v1.1.pdf I will probably need to patch imx5 and imx6 dts files with the inconsistency fixed. -- Regards, Shawn -- To unsubscribe from this list: send the line unsubscribe linux-mmc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html