mmc_of_parse() adaptations, DT support for Sheevaplugs
Subsystems (10)
v3 cover mmc_of_parse() adaptations, DT support for Sheevaplugs
Hi,
V3 changes:
- Patch 01/10: Added EPROBE_DEFER case to mmc_of_parse()
- Added Acked-By to (unmodified) patches 02 and 03.
V2 changes:
- Converted mvsdio to use mmc_of_parse()
- Adapted DTS files using mvsdio accordingly
- Changed mmc_of_parse() to return errors to the caller
While adding DT support for the Sheevaplugs by Globalscale Technologies (Kirkwood), it turned out that the DT binding of mvsdio lacked features to properly support the hardware (active high/low of CD and WP pins could not be described in DT).
This is standard functionality provided by the mmc_of_parse() helper function. However, mmc_of_parse() may allocate GPIO lines. If the allocation fails, it outputs an error, but does not return an error to its caller. Therefore, a proposal to handle errors in mmc_of_parse() is made.
The patch set is structured as follows:
1 Adapt mmc_of_parse() to return errors
2-6 Handle errors in current drivers using mmc_of_parse() (compile tested
only)
7-8 Convert mvsdio and respective dts files to mmc_of_parse() (tested on
kirkwood)
9 Add dts files for (eSATA) Sheevaplug
10 Add DT support for (eSATA) Sheevaplug
I could only test on an eSATA Sheevaplug. I found patches with different LEDs for the Sheevaplug. Thus, I would highly appreciate if someone with the hardware could give this a spin on a non-eSATA version. Some additional testing of the change detect and write protect behaviour for mvsdio can't hurt either. I hope that there aren't board revisions with different CD/WP pins out there.
Simon Baatz (10):
mmc: return mmc_of_parse() errors to caller
mmc: sh_mmcif: handle mmc_of_parse() errors during probe
mmc: tmio-mmc: handle mmc_of_parse() errors during probe
mmc: mxcmmc: handle mmc_of_parse() errors during probe
mmc: sdhci-pxav3: handle mmc_of_parse() errors during probe
mmc: tegra: handle mmc_of_parse() errors during probe
ARM: mvebu: Use standard MMC binding for all users of mvsdio
mmc: mvsdio: use standard MMC device-tree binding parser
mmc_of_parse()
ARM: Kirkwood: Add dts files for Sheevaplug and eSATA Sheevaplug
ARM: Kirkwood: add DT support for Sheevaplug and Sheevaplug eSATA
arch/arm/boot/dts/Makefile | 2 + arch/arm/boot/dts/armada-370-db.dts | 1 + arch/arm/boot/dts/armada-370-mirabox.dts | 1 + arch/arm/boot/dts/armada-370-rd.dts | 1 + arch/arm/boot/dts/armada-370-xp.dtsi | 4 + arch/arm/boot/dts/armada-xp-db.dts | 1 + arch/arm/boot/dts/kirkwood-dreamplug.dts | 1 + .../arm/boot/dts/kirkwood-guruplug-server-plus.dts | 2 + arch/arm/boot/dts/kirkwood-mplcec4.dts | 2 +- arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi | 97 ++++++++++++++++++++ arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts | 40 ++++++++ arch/arm/boot/dts/kirkwood-sheevaplug.dts | 45 +++++++++ arch/arm/boot/dts/kirkwood-topkick.dts | 1 + arch/arm/boot/dts/kirkwood.dtsi | 4 + arch/arm/mach-kirkwood/Kconfig | 7 ++ arch/arm/mach-kirkwood/Makefile | 1 + arch/arm/mach-kirkwood/board-dt.c | 4 + arch/arm/mach-kirkwood/board-sheevaplug.c | 27 ++++++ arch/arm/mach-kirkwood/common.h | 5 + drivers/mmc/core/host.c | 30 +++++- drivers/mmc/host/mvsdio.c | 73 ++++++++------- drivers/mmc/host/mxcmmc.c | 4 +- drivers/mmc/host/sdhci-pxav3.c | 7 +- drivers/mmc/host/sdhci-tegra.c | 9 +- drivers/mmc/host/sh_mmcif.c | 7 +- drivers/mmc/host/tmio_mmc_pio.c | 4 +- include/linux/mmc/host.h | 2 +- 27 files changed, 334 insertions(+), 48 deletions(-) create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug.dts create mode 100644 arch/arm/mach-kirkwood/board-sheevaplug.c
Signature · 1 line
1.7.9.5
PATCH v3 1/10 mmc: return mmc_of_parse() errors to caller
In addition to just logging errors encountered during DT parsing or allocating GPIO slots for CD/WP, mmc_of_parse() now returns with an error.
In particular, this is needed if the GPIO allocation may return EPROBE_DEFER.
---
changes in V3:
- Handle EPROBE_DEFER case
drivers/mmc/core/host.c | 30 +++++++++++++++++++++++++----- include/linux/mmc/host.h | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-)
drivers/mmc/core/host.c +25 -5
@@ -306,7 +306,7 @@ static inline void mmc_host_clk_sysfs_init(struct mmc_host *host)* parse the properties and set respective generic mmc-host flags and * parameters. */ -void mmc_of_parse (struct mmc_host *host) +int mmc_of_parse (struct mmc_host *host) {struct device_node *np;u32 bus_width;
@@ -315,7 +315,7 @@ void mmc_of_parse(struct mmc_host *host)int len, ret, gpio;if (!host->parent || !host->parent->of_node) -return ; +return 0 ; np = host->parent->of_node;
@@ -338,6 +338,7 @@ void mmc_of_parse(struct mmc_host *host)default :dev_err (host->parent,"Invalid \"bus-width\" value %ud!\n" , bus_width); +return -EINVAL ; }/* f_max is obtained from the optional "max-frequency" property */
@@ -367,18 +368,22 @@ void mmc_of_parse(struct mmc_host *host) host->caps |=MMC_CAP_NEEDS_POLL ; gpio =of_get_named_gpio_flags (np,"cd-gpios" ,0 , &flags); +if (gpio == -EPROBE_DEFER ) +return gpio;if (gpio_is_valid (gpio)) {if (!(flags &OF_GPIO_ACTIVE_LOW )) gpio_inv_cd = true; ret =mmc_gpio_request_cd (host, gpio); -if (ret <0 ) +if (ret <0 ) {dev_err (host->parent,"Failed to request CD GPIO #%d: %d!\n" , gpio, ret); -else +return ret; + }else {dev_info (host->parent,"Got CD GPIO #%d.\n" , gpio); + } }if (explicit_inv_cd ^ gpio_inv_cd)
@@ -389,14 +394,23 @@ void mmc_of_parse(struct mmc_host *host) explicit_inv_wp =of_property_read_bool (np,"wp-inverted" ); gpio =of_get_named_gpio_flags (np,"wp-gpios" ,0 , &flags); +if (gpio == -EPROBE_DEFER ) { + ret = -EPROBE_DEFER ; + goto out; + }if (gpio_is_valid (gpio)) {if (!(flags &OF_GPIO_ACTIVE_LOW )) gpio_inv_wp = true; ret =mmc_gpio_request_ro (host, gpio); -if (ret <0 ) +if (ret <0 ) {dev_err (host->parent,"Failed to request WP GPIO: %d!\n" , ret); + goto out; + }else { +dev_info (host->parent,"Got WP GPIO #%d.\n" , + gpio); + } }if (explicit_inv_wp ^ gpio_inv_wp) host->caps2 |=MMC_CAP2_RO_ACTIVE_HIGH ;
@@ -413,6 +427,12 @@ void mmc_of_parse(struct mmc_host *host) host->pm_caps |=MMC_PM_KEEP_POWER ;if (of_find_property (np,"enable-sdio-wakeup" , &len)) host->pm_caps |=MMC_PM_WAKE_SDIO_IRQ ; + +return 0 ; + +out: +mmc_gpio_free_cd (host); +return ret; }EXPORT_SYMBOL (mmc_of_parse);
include/linux/mmc/host.h +1 -1
@@ -369,7 +369,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *);int mmc_add_host (struct mmc_host *);void mmc_remove_host (struct mmc_host *);void mmc_free_host (struct mmc_host *); -void mmc_of_parse (struct mmc_host *host); +int mmc_of_parse (struct mmc_host *host);static inline void *mmc_priv (struct mmc_host *host) {
Signature · 1 line
1.7.9.5
PATCH v3 1/10 mmc: return mmc_of_parse() errors to caller
Quoted 125 lines · Simon Baatz
In addition to just logging errors encountered during DT parsing or allocating GPIO slots for CD/WP,
mmc_of_parse()now returns with an error.In particular, this is needed if the GPIO allocation may return
EPROBE_DEFER.Signed-off-by Simon Baatz <[email protected]>---
changes in V3:
- HandleEPROBE_DEFERcasedrivers/mmc/core/host.c | 30 +++++++++++++++++++++++++----- include/linux/mmc/host.h | 2 +- 2 files changed, 26 insertions(+), 6 deletions(-)drivers/mmc/core/host.c +25
-5@@ -306,7 +306,7 @@ static inline void mmc_host_clk_sysfs_init(struct mmc_host *host)* parse the properties and set respective generic mmc-host flags and * parameters. */ -void mmc_of_parse (struct mmc_host *host) +int mmc_of_parse (struct mmc_host *host) {struct device_node *np;u32 bus_width;@@ -315,7 +315,7 @@ void mmc_of_parse(struct mmc_host *host)int len, ret, gpio;if (!host->parent || !host->parent->of_node) -return ; +return 0 ; np = host->parent->of_node;@@ -338,6 +338,7 @@ void mmc_of_parse(struct mmc_host *host)default :dev_err (host->parent,"Invalid \"bus-width\" value %ud!\n" , bus_width); +return -EINVAL ; }/* f_max is obtained from the optional "max-frequency" property */ @@ -367,18 +368,22 @@ void mmc_of_parse(struct mmc_host *host) host->caps |=MMC_CAP_NEEDS_POLL ; gpio =of_get_named_gpio_flags (np,"cd-gpios" ,0 , &flags); +if (gpio == -EPROBE_DEFER ) +return gpio;if (gpio_is_valid (gpio)) {if (!(flags &OF_GPIO_ACTIVE_LOW )) gpio_inv_cd = true; ret =mmc_gpio_request_cd (host, gpio); -if (ret <0 ) +if (ret <0 ) {dev_err (host->parent,"Failed to request CD GPIO #%d: %d!\n" , gpio, ret); -else +return ret; + }else {dev_info (host->parent,"Got CD GPIO #%d.\n" , gpio); + } }if (explicit_inv_cd ^ gpio_inv_cd)@@ -389,14 +394,23 @@ void mmc_of_parse(struct mmc_host *host) explicit_inv_wp =of_property_read_bool (np,"wp-inverted" ); gpio =of_get_named_gpio_flags (np,"wp-gpios" ,0 , &flags); +if (gpio == -EPROBE_DEFER ) { + ret = -EPROBE_DEFER ; + goto out; + }if (gpio_is_valid (gpio)) {if (!(flags &OF_GPIO_ACTIVE_LOW )) gpio_inv_wp = true; ret =mmc_gpio_request_ro (host, gpio); -if (ret <0 ) +if (ret <0 ) {dev_err (host->parent,"Failed to request WP GPIO: %d!\n" , ret); + goto out; + }else { +dev_info (host->parent,"Got WP GPIO #%d.\n" , + gpio); + } }if (explicit_inv_wp ^ gpio_inv_wp) host->caps2 |=MMC_CAP2_RO_ACTIVE_HIGH ;@@ -413,6 +427,12 @@ void mmc_of_parse(struct mmc_host *host) host->pm_caps |=MMC_PM_KEEP_POWER ;if (of_find_property (np,"enable-sdio-wakeup" , &len)) host->pm_caps |=MMC_PM_WAKE_SDIO_IRQ ; + +return 0 ; + +out: +mmc_gpio_free_cd (host); +return ret; }EXPORT_SYMBOL (mmc_of_parse);include/linux/mmc/host.h +1
-2@@ -369,7 +369,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *);int mmc_add_host (struct mmc_host *);void mmc_remove_host (struct mmc_host *);void mmc_free_host (struct mmc_host *); -void mmc_of_parse (struct mmc_host *host); +int mmc_of_parse (struct mmc_host *host);static inline void *mmc_priv (struct mmc_host *host) { --1.7.9.5
Quoted 4 lines
--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v3 2/10 mmc: sh_mmcif: handle mmc_of_parse() errors during probe
In reply to Simon Baatz--- drivers/mmc/host/sh_mmcif.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
drivers/mmc/host/sh_mmcif.c +6 -1
@@ -1369,7 +1369,11 @@ static int sh_mmcif_probe(struct platform_device *pdev) ret = -ENOMEM ; goto ealloch; } -mmc_of_parse (mmc); + + ret =mmc_of_parse (mmc); +if (ret <0 ) + goto eofparse; + host =mmc_priv (mmc); host->mmc = mmc; host->addr = reg;
@@ -1464,6 +1468,7 @@ eclkupdate:clk_put (host->hclk); eclkget:pm_runtime_disable (&pdev->dev); +eofparse:mmc_free_host (mmc); ealloch:iounmap (reg);
Signature · 1 line
1.7.9.5
PATCH v3 3/10 mmc: tmio-mmc: handle mmc_of_parse() errors during probe
In reply to Simon Baatz--- drivers/mmc/host/tmio_mmc_pio.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/mmc/host/tmio_mmc_pio.c +3 -1
@@ -988,7 +988,9 @@ int tmio_mmc_host_probe(struct tmio_mmc_host **host,if (!mmc)return -ENOMEM ; -mmc_of_parse (mmc); + ret =mmc_of_parse (mmc); +if (ret <0 ) + goto host_free; pdata->dev = &pdev->dev; _host =mmc_priv (mmc);
Signature · 1 line
1.7.9.5
PATCH v3 4/10 mmc: mxcmmc: handle mmc_of_parse() errors during probe
In reply to Simon Baatz--- drivers/mmc/host/mxcmmc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/mmc/host/mxcmmc.c +3 -1
@@ -1067,7 +1067,9 @@ static int mxcmci_probe(struct platform_device *pdev) goto out_release_mem; } -mmc_of_parse (mmc); + ret =mmc_of_parse (mmc); +if (ret) + goto out_free; mmc->ops = &mxcmci_ops;/* For devicetree parsing, the bus width is read from devicetree */
Signature · 1 line
1.7.9.5
PATCH v3 5/10 mmc: sdhci-pxav3: handle mmc_of_parse() errors during probe
In reply to Simon Baatz--- drivers/mmc/host/sdhci-pxav3.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
drivers/mmc/host/sdhci-pxav3.c +5 -2
@@ -252,7 +252,9 @@ static int sdhci_pxav3_probe(struct platform_device *pdev) match =of_match_device (of_match_ptr (sdhci_pxav3_of_match), &pdev->dev);if (match) { -mmc_of_parse (host->mmc); + ret =mmc_of_parse (host->mmc); +if (ret) + goto err_of_parse;sdhci_get_of_property (pdev); pdata =pxav3_get_mmc_pdata (dev); }else if (pdata) {
@@ -313,10 +315,11 @@ static int sdhci_pxav3_probe(struct platform_device *pdev)return 0 ; +err_of_parse: +err_cd_req: err_add_host:clk_disable_unprepare (clk);clk_put (clk); -err_cd_req: err_clk_get:sdhci_pltfm_free (pdev);kfree (pxa);
Signature · 1 line
1.7.9.5
PATCH v3 6/10 mmc: tegra: handle mmc_of_parse() errors during probe
In reply to Simon Baatz--- drivers/mmc/host/sdhci-tegra.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
drivers/mmc/host/sdhci-tegra.c +6 -3
@@ -205,7 +205,7 @@ static const struct of_device_id sdhci_tegra_dt_match[] = { };MODULE_DEVICE_TABLE (of, sdhci_tegra_dt_match); -static void sdhci_tegra_parse_dt (struct device *dev) +static int sdhci_tegra_parse_dt (struct device *dev) {struct device_node *np = dev->of_node;struct sdhci_host *host =dev_get_drvdata (dev);
@@ -213,7 +213,7 @@ static void sdhci_tegra_parse_dt(struct device *dev)struct sdhci_tegra *tegra_host = pltfm_host->priv; tegra_host->power_gpio =of_get_named_gpio (np,"power-gpios" ,0 ); -mmc_of_parse (host->mmc); +return mmc_of_parse (host->mmc); }static int sdhci_tegra_probe (struct platform_device *pdev)
@@ -245,7 +245,9 @@ static int sdhci_tegra_probe(struct platform_device *pdev) tegra_host->soc_data = soc_data; pltfm_host->priv = tegra_host; -sdhci_tegra_parse_dt (&pdev->dev); + rc =sdhci_tegra_parse_dt (&pdev->dev); +if (rc) + goto err_parse_dt;if (gpio_is_valid (tegra_host->power_gpio)) { rc =gpio_request (tegra_host->power_gpio,"sdhci_power" );
@@ -278,6 +280,7 @@ err_add_host: err_clk_get:if (gpio_is_valid (tegra_host->power_gpio))gpio_free (tegra_host->power_gpio); +err_parse_dt: err_power_req: err_alloc_tegra_host:sdhci_pltfm_free (pdev);
Signature · 1 line
1.7.9.5
PATCH v3 7/10 ARM: mvebu: Use standard MMC binding for all users of mvsdio
In reply to Simon BaatzIn order to prepare the switch to the standard MMC device tree parser for mvsdio, adapt all current uses of mvsdio in the dts files to the standard format.
--- arch/arm/boot/dts/armada-370-db.dts | 1 + arch/arm/boot/dts/armada-370-mirabox.dts | 1 + arch/arm/boot/dts/armada-370-rd.dts | 1 + arch/arm/boot/dts/armada-370-xp.dtsi | 4 ++++ arch/arm/boot/dts/armada-xp-db.dts | 1 + arch/arm/boot/dts/kirkwood-dreamplug.dts | 1 + .../arm/boot/dts/kirkwood-guruplug-server-plus.dts | 2 ++ arch/arm/boot/dts/kirkwood-mplcec4.dts | 2 +- arch/arm/boot/dts/kirkwood-topkick.dts | 1 + arch/arm/boot/dts/kirkwood.dtsi | 4 ++++ 10 files changed, 17 insertions(+), 1 deletion(-)
arch/arm/boot/dts/armada-370-db.dts +1 -0
@@ -74,6 +74,7 @@ */ status = "disabled"; /* No CD or WP GPIOs */ + broken-cd; }; usb at 50000 {
arch/arm/boot/dts/armada-370-mirabox.dts +1 -0
@@ -99,6 +99,7 @@ * No CD or WP GPIOs: SDIO interface used for * Wifi/Bluetooth chip */ + broken-cd; }; usb at 50000 {
arch/arm/boot/dts/armada-370-rd.dts +1 -0
@@ -64,6 +64,7 @@ pinctrl-names = "default"; status = "okay"; /* No CD or WP GPIOs */ + broken-cd; }; usb at 50000 {
arch/arm/boot/dts/armada-370-xp.dtsi +4 -0
@@ -142,6 +142,10 @@ reg = <0xd4000 0x200>; interrupts = <54>; clocks = <&gateclk 17>; + bus-width = <4>; + cap-sdio-irq; + cap-sd-highspeed; + cap-mmc-highspeed; status = "disabled"; };
arch/arm/boot/dts/armada-xp-db.dts +1 -0
@@ -97,6 +97,7 @@ pinctrl-names = "default"; status = "okay"; /* No CD or WP GPIOs */ + broken-cd; }; usb at 50000 {
arch/arm/boot/dts/kirkwood-dreamplug.dts +1 -0
@@ -79,6 +79,7 @@ pinctrl-names = "default"; status = "okay"; /* No CD or WP GPIOs */ + broken-cd; }; };
arch/arm/boot/dts/kirkwood-guruplug-server-plus.dts +2 -0
@@ -72,6 +72,8 @@ mvsdio at 90000 { status = "okay"; + /* No CD or WP GPIOs */ + broken-cd; }; };
arch/arm/boot/dts/kirkwood-mplcec4.dts +1 -1
@@ -136,7 +136,7 @@ pinctrl-0 = <&pmx_sdio &pmx_sdio_cd>; pinctrl-names = "default"; status = "okay"; - cd-gpios = <&gpio1 15 0>; + cd-gpios = <&gpio1 15 1>; /* No WP GPIO */ }; };
arch/arm/boot/dts/kirkwood-topkick.dts +1 -0
@@ -154,6 +154,7 @@ pinctrl-names = "default"; status = "okay"; /* No CD or WP GPIOs */ + broken-cd; }; };
arch/arm/boot/dts/kirkwood.dtsi +4 -0
@@ -200,6 +200,10 @@ reg = <0x90000 0x200>; interrupts = <28>; clocks = <&gate_clk 4>; + bus-width = <4>; + cap-sdio-irq; + cap-sd-highspeed; + cap-mmc-highspeed; status = "disabled"; }; };
Signature · 1 line
1.7.9.5
PATCH v3 8/10 mmc: mvsdio: use standard MMC device-tree binding parser mmc_of_parse()
In reply to Simon BaatzInstead of parsing the DT binding on our own, use the standard parser mmc_of_parse(), introduced by commit 6c56e7a.
--- drivers/mmc/host/mvsdio.c | 73 +++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 33 deletions(-)
drivers/mmc/host/mvsdio.c +40 -33
@@ -35,7 +35,7 @@#define DRIVER_NAME "mvsdio" -static int maxfreq =MVSD_CLOCKRATE_MAX ; +static int maxfreq;static int nodma;struct mvsd_host {
@@ -685,7 +685,6 @@ static int __init mvsd_probe(struct platform_device *pdev)const struct mbus_dram_target_info *dram;struct resource *r;int ret, irq; -int gpio_card_detect, gpio_write_protect;struct pinctrl *pinctrl; r =platform_get_resource (pdev,IORESOURCE_MEM ,0 );
@@ -718,6 +717,20 @@ static int __init mvsd_probe(struct platform_device *pdev)if (!IS_ERR (host->clk))clk_prepare_enable (host->clk); + mmc->ops = &mvsd_ops; + + mmc->ocr_avail =MMC_VDD_32_33 |MMC_VDD_33_34 ; + + mmc->f_min =DIV_ROUND_UP (host->base_clock,MVSD_BASE_DIV_MAX ); + mmc->f_max =MVSD_CLOCKRATE_MAX ; + + mmc->max_blk_size =2048 ; + mmc->max_blk_count =65535 ; + + mmc->max_segs =1 ; + mmc->max_seg_size = mmc->max_blk_size * mmc->max_blk_count; + mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; +if (np) {if (IS_ERR (host->clk)) {dev_err (&pdev->dev,"DT platforms must have a clock associated\n" );
@@ -726,35 +739,38 @@ static int __init mvsd_probe(struct platform_device *pdev) } host->base_clock =clk_get_rate (host->clk) /2 ; - gpio_card_detect =of_get_named_gpio (np,"cd-gpios" ,0 ); - gpio_write_protect =of_get_named_gpio (np,"wp-gpios" ,0 ); + ret =mmc_of_parse (mmc); +if (ret <0 ) + goto out; }else {const struct mvsdio_platform_data *mvsd_data; + mvsd_data = pdev->dev.platform_data;if (!mvsd_data) { ret = -ENXIO ; goto out; } + mmc->caps =MMC_CAP_4_BIT_DATA |MMC_CAP_SDIO_IRQ | +MMC_CAP_SD_HIGHSPEED |MMC_CAP_MMC_HIGHSPEED ; host->base_clock = mvsd_data->clock /2 ; - gpio_card_detect = mvsd_data->gpio_card_detect ? : -EINVAL ; - gpio_write_protect = mvsd_data->gpio_write_protect ? : -EINVAL ; - } - - mmc->ops = &mvsd_ops; - - mmc->ocr_avail =MMC_VDD_32_33 |MMC_VDD_33_34 ; - mmc->caps =MMC_CAP_4_BIT_DATA |MMC_CAP_SDIO_IRQ | -MMC_CAP_SD_HIGHSPEED |MMC_CAP_MMC_HIGHSPEED ; - - mmc->f_min =DIV_ROUND_UP (host->base_clock,MVSD_BASE_DIV_MAX ); - mmc->f_max = maxfreq; +/* GPIO 0 regarded as invalid for backward compatibility */ +if (mvsd_data->gpio_card_detect && +gpio_is_valid (mvsd_data->gpio_card_detect)) { + ret =mmc_gpio_request_cd (mmc, + mvsd_data->gpio_card_detect); +if (ret) + goto out; + }else { + mmc->caps |=MMC_CAP_NEEDS_POLL ; + } - mmc->max_blk_size =2048 ; - mmc->max_blk_count =65535 ; +if (mvsd_data->gpio_write_protect && +gpio_is_valid (mvsd_data->gpio_write_protect)) +mmc_gpio_request_ro (mmc, mvsd_data->gpio_write_protect); + } - mmc->max_segs =1 ; - mmc->max_seg_size = mmc->max_blk_size * mmc->max_blk_count; - mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count; +if (maxfreq) + mmc->f_max = maxfreq;spin_lock_init (&host->lock);
@@ -777,15 +793,6 @@ static int __init mvsd_probe(struct platform_device *pdev) goto out; } -if (gpio_is_valid (gpio_card_detect)) { - ret =mmc_gpio_request_cd (mmc, gpio_card_detect); -if (ret) - goto out; - }else - mmc->caps |=MMC_CAP_NEEDS_POLL ; - -mmc_gpio_request_ro (mmc, gpio_write_protect); -setup_timer (&host->timer, mvsd_timeout_timer, (unsigned long )host);platform_set_drvdata (pdev, mmc); ret =mmc_add_host (mmc);
@@ -793,10 +800,10 @@ static int __init mvsd_probe(struct platform_device *pdev) goto out;if (!(mmc->caps &MMC_CAP_NEEDS_POLL )) -dev_notice (&pdev->dev,"using GPIO %d for card detection\n" , - gpio_card_detect); +dev_notice (&pdev->dev,"using GPIO for card detection\n" );else -dev_notice (&pdev->dev,"lacking card detect (fall back to polling)\n" ); +dev_notice (&pdev->dev, +"lacking card detect (fall back to polling)\n" );return 0 ; out:
Signature · 1 line
1.7.9.5
PATCH v3 9/10 ARM: Kirkwood: Add dts files for Sheevaplug and eSATA Sheevaplug
In reply to Simon Baatz--- arch/arm/boot/dts/Makefile | 2 + arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi | 97 +++++++++++++++++++++ arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts | 40 +++++++++ arch/arm/boot/dts/kirkwood-sheevaplug.dts | 45 ++++++++++ 4 files changed, 184 insertions(+) create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug.dts
arch/arm/boot/dts/Makefile +2 -0
@@ -84,6 +84,8 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \ kirkwood-ns2max.dtb \ kirkwood-ns2mini.dtb \ kirkwood-nsa310.dtb \ + kirkwood-sheevaplug.dtb \ + kirkwood-sheevaplug-esata.dtb \ kirkwood-topkick.dtb \ kirkwood-ts219-6281.dtb \ kirkwood-ts219-6282.dtb \
arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi new file +97 -0
97 lines not on this page · raw message
arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts new file +40 -0
@@ -0,0 +1,40 @@ +/* + * kirkwood-sheevaplug-esata.dts - Device tree file for eSATA Sheevaplug + * + * Copyright (C) 2013 Simon Baatz <[email protected]> + * + * Licensed under GPLv2 + */ + +/dts-v1/; + +/include/ "kirkwood-sheevaplug-common.dtsi" + +/ { + model = "Globalscale Technologies eSATA SheevaPlug"; + compatible = "globalscale,sheevaplug-esata-rev13", "globalscale,sheevaplug-esata", "globalscale,sheevaplug", "marvell,kirkwood-88f6281", "marvell,kirkwood"; + + ocp at f1000000 { + pinctrl: pinctrl at 10000 { + + pinctrl-0 = < &pmx_nand &pmx_uart0 + &pmx_usb_power_enable + &pmx_led_blue>; + pinctrl-names = "default"; + + }; + + sata at 80000 { + status = "okay"; + nr-ports = <2>; + }; + + mvsdio at 90000 { + pinctrl-0 = <&pmx_sdio &pmx_sdio_cd &pmx_sdio_wp>; + pinctrl-names = "default"; + status = "okay"; + cd-gpios = <&gpio1 12 1>; + wp-gpios = <&gpio1 15 0>; + }; + }; +};
arch/arm/boot/dts/kirkwood-sheevaplug.dts new file +45 -0
45 lines not on this page · raw message
Signature · 1 line
1.7.9.5
PATCH v3 9/10 ARM: Kirkwood: Add dts files for Sheevaplug and eSATA Sheevaplug
Quoted 227 lines · Simon Baatz
Signed-off-by Simon Baatz <[email protected]>--- arch/arm/boot/dts/Makefile | 2 + arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi | 97 +++++++++++++++++++++ arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts | 40 +++++++++ arch/arm/boot/dts/kirkwood-sheevaplug.dts | 45 ++++++++++ 4 files changed, 184 insertions(+) create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts create mode 100644 arch/arm/boot/dts/kirkwood-sheevaplug.dtsarch/arm/boot/dts/Makefile +2
-0@@ -84,6 +84,8 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-cloudbox.dtb \ kirkwood-ns2max.dtb \ kirkwood-ns2mini.dtb \ kirkwood-nsa310.dtb \ + kirkwood-sheevaplug.dtb \ + kirkwood-sheevaplug-esata.dtb \ kirkwood-topkick.dtb \ kirkwood-ts219-6281.dtb \ kirkwood-ts219-6282.dtb \arch/arm/boot/dts/kirkwood-sheevaplug-common.dtsi new file +97
-0@@ -0,0 +1,97 @@ +/* + * kirkwood-sheevaplug-common.dts - Common parts for Sheevaplugs + * + * Copyright (C) 2013 Simon Baatz <[email protected]> + * + * Licensed under GPLv2 + */ + +/include/ "kirkwood.dtsi" +/include/ "kirkwood-6281.dtsi" + +/ { + memory { + device_type = "memory"; + reg = <0x00000000 0x20000000>; + }; + + chosen { + bootargs = "console=ttyS0,115200n8 earlyprintk"; + }; + + ocp at f1000000 { + pinctrl: pinctrl at 10000 { + + pmx_usb_power_enable: pmx-usb-power-enable { + marvell,pins = "mpp29"; + marvell,function = "gpio"; + }; + pmx_led_red: pmx-led-red { + marvell,pins = "mpp46"; + marvell,function = "gpio"; + }; + pmx_led_blue: pmx-led-blue { + marvell,pins = "mpp49"; + marvell,function = "gpio"; + }; + pmx_sdio_cd: pmx-sdio-cd { + marvell,pins = "mpp44"; + marvell,function = "gpio"; + }; + pmx_sdio_wp: pmx-sdio-wp { + marvell,pins = "mpp47"; + marvell,function = "gpio"; + }; + }; + serial at 12000 { + status = "okay"; + }; + + nand at 3000000 { + status = "okay"; + + partition at 0 { + label = "u-boot"; + reg = <0x0000000 0x100000>; + }; + + partition at 100000 { + label = "uImage"; + reg = <0x0100000 0x400000>; + }; + + partition at 500000 { + label = "root"; + reg = <0x0500000 0x1fb00000>; + }; + }; + }; + + regulators { + compatible = "simple-bus"; + #address-cells = <1>; + #size-cells = <0>; + + usb_power: regulator at 1 { + compatible = "regulator-fixed"; + reg = <1>; + regulator-name = "USB Power"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + enable-active-high; + regulator-always-on; + regulator-boot-on; + gpio = <&gpio0 29 0>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + health { + label = "sheevaplug:blue:health"; + gpios = <&gpio1 17 1>; + linux,default-trigger = "default-on"; + }; + }; +};arch/arm/boot/dts/kirkwood-sheevaplug-esata.dts new file +40
-0@@ -0,0 +1,40 @@ +/* + * kirkwood-sheevaplug-esata.dts - Device tree file for eSATA Sheevaplug + * + * Copyright (C) 2013 Simon Baatz <[email protected]> + * + * Licensed under GPLv2 + */ + +/dts-v1/; + +/include/ "kirkwood-sheevaplug-common.dtsi" + +/ { + model = "Globalscale Technologies eSATA SheevaPlug"; + compatible = "globalscale,sheevaplug-esata-rev13", "globalscale,sheevaplug-esata", "globalscale,sheevaplug", "marvell,kirkwood-88f6281", "marvell,kirkwood"; + + ocp at f1000000 { + pinctrl: pinctrl at 10000 { + + pinctrl-0 = < &pmx_nand &pmx_uart0 + &pmx_usb_power_enable + &pmx_led_blue>; + pinctrl-names = "default"; + + }; + + sata at 80000 { + status = "okay"; + nr-ports = <2>; + }; + + mvsdio at 90000 { + pinctrl-0 = <&pmx_sdio &pmx_sdio_cd &pmx_sdio_wp>; + pinctrl-names = "default"; + status = "okay"; + cd-gpios = <&gpio1 12 1>; + wp-gpios = <&gpio1 15 0>; + }; + }; +};arch/arm/boot/dts/kirkwood-sheevaplug.dts new file +45
-0@@ -0,0 +1,45 @@ +/* + * kirkwood-sheevaplug-esata.dts - Device tree file for Sheevaplug + * + * Copyright (C) 2013 Simon Baatz <[email protected]> + * + * Licensed under GPLv2 + */ + +/dts-v1/; + +/include/ "kirkwood-sheevaplug-common.dtsi" + +/ { + model = "Globalscale Technologies SheevaPlug"; + compatible = "globalscale,sheevaplug", "marvell,kirkwood-88f6281", "marvell,kirkwood"; + + ocp at f1000000 { + pinctrl: pinctrl at 10000 { + + pinctrl-0 = < &pmx_nand &pmx_uart0 + &pmx_usb_power_enable + &pmx_led_red + &pmx_led_blue>; + pinctrl-names = "default"; + + }; + + mvsdio at 90000 { + pinctrl-0 = <&pmx_sdio>; + pinctrl-names = "default"; + status = "okay"; + /* No CD or WP GPIOs */ + broken-cd; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + + misc { + label = "sheevaplug:red:misc"; + gpios = <&gpio1 14 1>; + }; + }; +};Signature · 1 line
1.7.9.5
Hi Simon
Looks good
PATCH v3 10/10 ARM: Kirkwood: add DT support for Sheevaplug and Sheevaplug eSATA
In reply to Simon Baatz--- arch/arm/mach-kirkwood/Kconfig | 7 +++++++ arch/arm/mach-kirkwood/Makefile | 1 + arch/arm/mach-kirkwood/board-dt.c | 4 ++++ arch/arm/mach-kirkwood/board-sheevaplug.c | 27 +++++++++++++++++++++++++++ arch/arm/mach-kirkwood/common.h | 5 +++++ 5 files changed, 44 insertions(+) create mode 100644 arch/arm/mach-kirkwood/board-sheevaplug.c
arch/arm/mach-kirkwood/Kconfig +7 -0
@@ -296,6 +296,13 @@ config MACH_READYNAS_DT Say 'Y' here if you want your kernel to support the NETGEAR ReadyNAS Duo v2 using Fattened Device Tree. +config MACH_SHEEVAPLUG_DT + bool "Marvell (eSATA) SheevaPlug (Flattened Device Tree)" + select ARCH_KIRKWOOD_DT + help + Say 'Y' here if you want your kernel to support the + Marvell (eSATA) SheevaPlug (Flattened Device Tree). + config MACH_TOPKICK_DT bool "USI Topkick (Flattened Device Tree)" select ARCH_KIRKWOOD_DT
arch/arm/mach-kirkwood/Makefile +1 -0
@@ -40,5 +40,6 @@ obj-$(CONFIG_MACH_NETSPACE_V2_DT) += board-ns2.o obj-$(CONFIG_MACH_NSA310_DT) += board-nsa310.o obj-$(CONFIG_MACH_OPENBLOCKS_A6_DT) += board-openblocks_a6.o obj-$(CONFIG_MACH_READYNAS_DT) += board-readynas.o +obj-$(CONFIG_MACH_SHEEVAPLUG_DT) += board-sheevaplug.o obj-$(CONFIG_MACH_TOPKICK_DT) += board-usi_topkick.o obj-$(CONFIG_MACH_TS219_DT) += board-ts219.o tsx1x-common.o
arch/arm/mach-kirkwood/board-dt.c +4 -0
@@ -112,6 +112,9 @@ static void __init kirkwood_dt_init(void)if (of_machine_is_compatible ("globalscale,guruplug" ))guruplug_dt_init (); +if (of_machine_is_compatible ("globalscale,sheevaplug" )) +sheevaplug_dt_init (); +if (of_machine_is_compatible ("dlink,dns-kirkwood" ))dnskw_init ();
@@ -165,6 +168,7 @@ static void __init kirkwood_dt_init(void)static const char *const kirkwood_dt_board_compat[] = {"globalscale,dreamplug" ,"globalscale,guruplug" , +"globalscale,sheevaplug" ,"dlink,dns-320" ,"dlink,dns-325" ,"iom,iconnect" ,
arch/arm/mach-kirkwood/board-sheevaplug.c new file +27 -0
@@ -0,0 +1,27 @@ +/* +* arch/arm/mach-kirkwood/board-sheevaplug.c +* +* Marvell Sheevaplug Reference Board Init for drivers not converted to +* flattened device tree yet. +* +* This file is licensed under the terms of the GNU General Public +* License version 2. This program is licensed "as is" without any +* warranty of any kind, whether express or implied. +*/ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/mv643xx_eth.h> +#include "common.h" + +static struct mv643xx_eth_platform_data sheevaplug_ge00_data = { + .phy_addr =MV643XX_ETH_PHY_ADDR (0 ), +}; + +void __init sheevaplug_dt_init (void ) +{ +/* +* Basic setup. Needs to be called early. +*/ +kirkwood_ge00_init (&sheevaplug_ge00_data); +}
arch/arm/mach-kirkwood/common.h +5 -0
@@ -65,6 +65,11 @@ void guruplug_dt_init(void);#else static inline void guruplug_dt_init (void ) {};#endif +#ifdef CONFIG_MACH_SHEEVAPLUG_DT +void sheevaplug_dt_init (void ); +#else +static inline void sheevaplug_dt_init (void ) {}; +#endif #ifdef CONFIG_MACH_TS219_DT void qnap_dt_ts219_init (void );#else
Signature · 1 line
1.7.9.5
PATCH v3 10/10 ARM: Kirkwood: add DT support for Sheevaplug and Sheevaplug eSATA
Quoted 113 lines · Simon Baatz
Signed-off-by Simon Baatz <[email protected]>--- arch/arm/mach-kirkwood/Kconfig | 7 +++++++ arch/arm/mach-kirkwood/Makefile | 1 + arch/arm/mach-kirkwood/board-dt.c | 4 ++++ arch/arm/mach-kirkwood/board-sheevaplug.c | 27 +++++++++++++++++++++++++++ arch/arm/mach-kirkwood/common.h | 5 +++++ 5 files changed, 44 insertions(+) create mode 100644 arch/arm/mach-kirkwood/board-sheevaplug.carch/arm/mach-kirkwood/Kconfig +7
-0@@ -296,6 +296,13 @@ config MACH_READYNAS_DT Say 'Y' here if you want your kernel to support the NETGEAR ReadyNAS Duo v2 using Fattened Device Tree. +config MACH_SHEEVAPLUG_DT + bool "Marvell (eSATA) SheevaPlug (Flattened Device Tree)" + select ARCH_KIRKWOOD_DT + help + Say 'Y' here if you want your kernel to support the + Marvell (eSATA) SheevaPlug (Flattened Device Tree). + config MACH_TOPKICK_DT bool "USI Topkick (Flattened Device Tree)" select ARCH_KIRKWOOD_DTarch/arm/mach-kirkwood/Makefile +1
-0@@ -40,5 +40,6 @@ obj-$(CONFIG_MACH_NETSPACE_V2_DT) += board-ns2.o obj-$(CONFIG_MACH_NSA310_DT) += board-nsa310.o obj-$(CONFIG_MACH_OPENBLOCKS_A6_DT) += board-openblocks_a6.o obj-$(CONFIG_MACH_READYNAS_DT) += board-readynas.o +obj-$(CONFIG_MACH_SHEEVAPLUG_DT) += board-sheevaplug.o obj-$(CONFIG_MACH_TOPKICK_DT) += board-usi_topkick.o obj-$(CONFIG_MACH_TS219_DT) += board-ts219.o tsx1x-common.oarch/arm/mach-kirkwood/board-dt.c +4
-0@@ -112,6 +112,9 @@ static void __init kirkwood_dt_init(void)if (of_machine_is_compatible ("globalscale,guruplug" ))guruplug_dt_init (); +if (of_machine_is_compatible ("globalscale,sheevaplug" )) +sheevaplug_dt_init (); +if (of_machine_is_compatible ("dlink,dns-kirkwood" ))dnskw_init ();@@ -165,6 +168,7 @@ static void __init kirkwood_dt_init(void)static const char *const kirkwood_dt_board_compat[] = {"globalscale,dreamplug" ,"globalscale,guruplug" , +"globalscale,sheevaplug" ,"dlink,dns-320" ,"dlink,dns-325" ,"iom,iconnect" ,arch/arm/mach-kirkwood/board-sheevaplug.c new file +27
-0@@ -0,0 +1,27 @@ +/* +* arch/arm/mach-kirkwood/board-sheevaplug.c +* +* Marvell Sheevaplug Reference Board Init for drivers not converted to +* flattened device tree yet. +* +* This file is licensed under the terms of the GNU General Public +* License version 2. This program is licensed "as is" without any +* warranty of any kind, whether express or implied. +*/ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/mv643xx_eth.h> +#include "common.h" + +static struct mv643xx_eth_platform_data sheevaplug_ge00_data = { + .phy_addr =MV643XX_ETH_PHY_ADDR (0 ), +}; + +void __init sheevaplug_dt_init (void ) +{ +/* +* Basic setup. Needs to be called early. +*/ +kirkwood_ge00_init (&sheevaplug_ge00_data); +}arch/arm/mach-kirkwood/common.h +5
-0@@ -65,6 +65,11 @@ void guruplug_dt_init(void);#else static inline void guruplug_dt_init (void ) {};#endif +#ifdef CONFIG_MACH_SHEEVAPLUG_DT +void sheevaplug_dt_init (void ); +#else +static inline void sheevaplug_dt_init (void ) {}; +#endif #ifdef CONFIG_MACH_TS219_DT void qnap_dt_ts219_init (void );#else Signature · 1 line
1.7.9.5
v3 cover mmc_of_parse() adaptations, DT support for Sheevaplugs
In reply to Simon BaatzQuoted 23 lines · Simon Baatz
Hi,
V3 changes:
- Patch 01/10: AddedEPROBE_DEFERcase tommc_of_parse()
- Added Acked-By to (unmodified) patches 02 and 03.V2 changes:
- Converted mvsdio to usemmc_of_parse()
- Adapted DTS files using mvsdio accordingly
- Changedmmc_of_parse()to return errors to the callerWhile adding DT support for the Sheevaplugs by Globalscale Technologies (Kirkwood), it turned out that the DT binding of mvsdio lacked features to properly support the hardware (active high/low of CD and WP pins could not be described in DT).
This is standard functionality provided by the
mmc_of_parse()helper function. However,mmc_of_parse()may allocate GPIO lines. If the allocation fails, it outputs an error, but does not return an error to its caller. Therefore, a proposal to handle errors inmmc_of_parse()is made.The patch set is structured as follows:
Quoted 7 lines
1 Adapt
mmc_of_parse()to return errors
2-6 Handle errors in current drivers usingmmc_of_parse()(compile tested
only)
7-8 Convert mvsdio and respective dts files tommc_of_parse()(tested on
kirkwood)
9 Add dts files for (eSATA) Sheevaplug
10 Add DT support for (eSATA) Sheevaplug
Patches 7, 9, and 10 already pulled into mvebu/dt. You can drop those from this series if you need to do another revision.
Quoted 4 lines
I could only test on an eSATA Sheevaplug. I found patches with different LEDs for the Sheevaplug. Thus, I would highly appreciate if someone with the hardware could give this a spin on a non-eSATA version.
I happen to have one. Unfortunately, it is currently my primary email server, dhcp, dns, file server, and a few other irreplaceable things. :( I *really* need to upgrade/reconfigure ...
thx,
Jason.
v3 cover mmc_of_parse() adaptations, DT support for Sheevaplugs
Hi Jason,
Quoted 32 lines · Jason Cooper
Quoted 23 lines · Simon Baatz
Hi,
V3 changes:
- Patch 01/10: AddedEPROBE_DEFERcase tommc_of_parse()
- Added Acked-By to (unmodified) patches 02 and 03.V2 changes:
- Converted mvsdio to usemmc_of_parse()
- Adapted DTS files using mvsdio accordingly
- Changedmmc_of_parse()to return errors to the callerWhile adding DT support for the Sheevaplugs by Globalscale Technologies (Kirkwood), it turned out that the DT binding of mvsdio lacked features to properly support the hardware (active high/low of CD and WP pins could not be described in DT).
This is standard functionality provided by the
mmc_of_parse()helper function. However,mmc_of_parse()may allocate GPIO lines. If the allocation fails, it outputs an error, but does not return an error to its caller. Therefore, a proposal to handle errors inmmc_of_parse()is made.The patch set is structured as follows:
Quoted 7 lines
1 Adapt
mmc_of_parse()to return errors
2-6 Handle errors in current drivers usingmmc_of_parse()(compile tested
only)
7-8 Convert mvsdio and respective dts files tommc_of_parse()(tested on
kirkwood)
9 Add dts files for (eSATA) Sheevaplug
10 Add DT support for (eSATA) Sheevaplug
Quoted 2 lines
Patches 7, 9, and 10 already pulled into mvebu/dt. You can drop those from this series if you need to do another revision.
If you don't mind too much, as this crosses two trees, I would prefer to keep the series "self-contained" if people want to test. Additionally, I have two Acked-bys for 9 and 10 from Andrew that are not part of the patches yet.
Quoted 8 lines
Quoted 4 lines
I could only test on an eSATA Sheevaplug. I found patches with different LEDs for the Sheevaplug. Thus, I would highly appreciate if someone with the hardware could give this a spin on a non-eSATA version.
I happen to have one. Unfortunately, it is currently my primary email server, dhcp, dns, file server, and a few other irreplaceable things. :( I *really* need to upgrade/reconfigure ...
Even without reinstalling, can you please have a look if your "plug:green:health" LED is really green (mine is blue)? And if your kernel already has a "plug:red:misc" LED could you verify whether it is really there? Do you happen to know which board revision you have?
Thanks,
Simon
v3 cover mmc_of_parse() adaptations, DT support for Sheevaplugs
Quoted 35 lines · Simon Baatz
Hi Jason,
Quoted 32 lines · Jason Cooper
Quoted 30 lines · Simon Baatz
Hi,
V3 changes:
- Patch 01/10: AddedEPROBE_DEFERcase tommc_of_parse()
- Added Acked-By to (unmodified) patches 02 and 03.V2 changes:
- Converted mvsdio to usemmc_of_parse()
- Adapted DTS files using mvsdio accordingly
- Changedmmc_of_parse()to return errors to the callerWhile adding DT support for the Sheevaplugs by Globalscale Technologies (Kirkwood), it turned out that the DT binding of mvsdio lacked features to properly support the hardware (active high/low of CD and WP pins could not be described in DT).
This is standard functionality provided by the
mmc_of_parse()helper function. However,mmc_of_parse()may allocate GPIO lines. If the allocation fails, it outputs an error, but does not return an error to its caller. Therefore, a proposal to handle errors inmmc_of_parse()is made.The patch set is structured as follows:
1 Adapt
mmc_of_parse()to return errors
2-6 Handle errors in current drivers usingmmc_of_parse()(compile tested
only)
7-8 Convert mvsdio and respective dts files tommc_of_parse()(tested on
kirkwood)
9 Add dts files for (eSATA) Sheevaplug
10 Add DT support for (eSATA) Sheevaplug
Quoted 5 lines
Quoted 2 lines
Patches 7, 9, and 10 already pulled into mvebu/dt. You can drop those from this series if you need to do another revision.
If you don't mind too much, as this crosses two trees, I would prefer to keep the series "self-contained" if people want to test.
That's fine, you can host the series in a single branch for folks to pull and test. From our side, 7, 9 and 10 need to go through arm-soc, and the rest need to go through -mmc. There is _no_ build or merge dependency between the two.
Quoted 2 lines
Additionally, I have two Acked-bys for 9 and 10 from Andrew that are not part of the patches yet.
Yes, I saw those after I sent the PR. I sent that a little too fast. I'm developing a new system and still working out the kinks. Sorry about that.
Quoted 8 lines
Quoted 8 lines
Quoted 4 lines
I could only test on an eSATA Sheevaplug. I found patches with different LEDs for the Sheevaplug. Thus, I would highly appreciate if someone with the hardware could give this a spin on a non-eSATA version.
I happen to have one. Unfortunately, it is currently my primary email server, dhcp, dns, file server, and a few other irreplaceable things. :( I *really* need to upgrade/reconfigure ...
FYI:
$ uname -r 2.6.30.2
Yikes. I'm so embarrassed. :( However,
$ uptime 07:16:42 up 251 days, 0 min,...
before that was over 400 days, then I had an ups failure.
Quoted 5 lines
Even without reinstalling, can you please have a look if your "plug:green:health" LED is really green (mine is blue)? And if your kernel already has a "plug:red:misc" LED could you verify whether it is really there? Do you happen to know which board revision you have?
I have one directory under /sys/class/leds, plug:green:health. It controls a *blue* led. There is also a green led, not enumerated. I'm sure the results would be better with a more recent kernel...
thx,
Jason.