Re: [PATCH 1/2] mmc: sdhci-s3c: add default controller configuration
Hi Jaehoon, On 5 September 2011 07:01, Jaehoon Chung jh80.ch...@samsung.com wrote: Hi Thomas. I have some question. This patch looks good. Some names are used S3C_SDHCI_. but some names are used S3C64XX_SDHCI_. Do you know what differ them? I am not sure why there are S3C_SDHCI_xxx and S3C64XX_SDHCI_xxx macros. This patch reused the existing macros from regs-sdhci.h file. It should be possible to rename S3C64XX_SDHCI_xxx to S3C_SDHCI_xxx. Thanks, Thomas. Thanks, Jaehoon Chung [...] -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/2] mmc: sdhci-s3c: add default controller configuration
Dear Mr. Kim, On 5 September 2011 10:46, Kukjin Kim kgene@samsung.com wrote: Thomas Abraham wrote: The default controller configuration which was previously setup by platform helper functions is moved into the driver. Cc: Ben Dooks ben-li...@fluff.org Signed-off-by: Thomas Abraham thomas.abra...@linaro.org --- drivers/mmc/host/sdhci-s3c.c | 28 +--- 1 files changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/mmc/host/sdhci-s3c.c b/drivers/mmc/host/sdhci-s3c.c index 2bd7bf4..d891682 100644 --- a/drivers/mmc/host/sdhci-s3c.c +++ b/drivers/mmc/host/sdhci-s3c.c @@ -203,17 +203,23 @@ static void sdhci_s3c_set_clock(struct sdhci_host *host, unsigned int clock) writel(ctrl, host-ioaddr + S3C_SDHCI_CONTROL2); } - /* reconfigure the hardware for new clock rate */ - - { - struct mmc_ios ios; - - ios.clock = clock; - - if (ourhost-pdata-cfg_card) - (ourhost-pdata-cfg_card)(ourhost-pdev, host- ioaddr, - ios, NULL); - } + /* reprogram default hardware configuration */ + writel(S3C64XX_SDHCI_CONTROL4_DRIVE_9mA, + host-ioaddr + S3C64XX_SDHCI_CONTROL4); Since there are above codes on only S5PC100 and S5PV210, I'm not sure above is needed on other Samsung SoCs. I need to sort out checking. s3c6410, s5p6440, s5p6450 and s5pc110 SoC's include support for clock out pad driver strength. All other SoC's do not use and list the two bits as reserved. I do not know if there is any problem writing to these reserved bits. But I have tested this patch on all the boards that do not support this feature and it did not break anything. + + ctrl = readl(host-ioaddr + S3C_SDHCI_CONTROL2); + ctrl = S3C_SDHCI_CTRL2_SELBASECLK_MASK; ? + ctrl |= (S3C64XX_SDHCI_CTRL2_ENSTAASYNCCLR | + S3C64XX_SDHCI_CTRL2_ENCMDCNFMSK | + S3C_SDHCI_CTRL2_ENFBCLKRX | + S3C_SDHCI_CTRL2_DFCNT_NONE | + S3C_SDHCI_CTRL2_ENCLKOUTHOLD); + writel(ctrl, host-ioaddr + S3C_SDHCI_CONTROL2); + + /* reconfigure the controller for new clock rate */ + ctrl = (S3C_SDHCI_CTRL3_FCSEL1 | S3C_SDHCI_CTRL3_FCSEL0); + if (clock 25 * 100) + ctrl |= (S3C_SDHCI_CTRL3_FCSEL3 | S3C_SDHCI_CTRL3_FCSEL2); + writel(ctrl, host-ioaddr + S3C_SDHCI_CONTROL3); } /** -- Basically, it's good to move common codes and to remove that. But I'm not sure we don't _really_ need to keep SoC specific control function such as cfg_card(). The existing cfg_card callback functions have the same functionality except for setting the clock out drive strength on those SoC's which do not support this feature. If writing to those reserved bits does not cause any issues, then the cfg_card function can be made common to all Samsung SoC's. Since the functionality of cfg_card callback is SoC specific and not board specific, there is another way of doing this. The id_table member could be added to the platform_driver structure in sdhci-s3c driver. Each SoC platform code could set the name of the sdhci device during initialization and there could be SoC specific cfg_card functions included in the sdhci-s3c driver itself. This would be required only if there is a problem by writing to the reserved bits in control4 register. But testing does not show any issues writing to these reserved bits. The main intention of moving the cfg_card function from platform code to driver code is to remove the callback function pointer from the sdhci driver platform data which is very important to get full device tree support for sdhci-s3c driver. Thanks for your review and comments. Regards, Thomas. Thanks. Best regards, Kgene. -- Kukjin Kim kgene@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 2/2] arm: samsung: remove sdhci default configuration setup platform helper
Dear Mr. Kim, On 5 September 2011 10:46, Kukjin Kim kgene@samsung.com wrote: Thomas Abraham wrote: The sdhci platform helper function that sets up the default controller configuration is removed for all Samsung platforms since such default controller configuration can be handled by the driver. Cc: Ben Dooks ben-li...@fluff.org Signed-off-by: Thomas Abraham thomas.abra...@linaro.org --- arch/arm/mach-exynos4/setup-sdhci.c | 47 --- arch/arm/mach-s3c2416/setup-sdhci.c | 37 -- arch/arm/mach-s3c64xx/setup-sdhci.c | 48 --- arch/arm/mach-s5pc100/setup-sdhci.c | 42 arch/arm/mach-s5pv210/setup-sdhci.c | 41 arch/arm/plat-samsung/dev-hsmmc.c | 2 - arch/arm/plat-samsung/dev-hsmmc1.c | 2 - arch/arm/plat-samsung/dev-hsmmc2.c | 2 - arch/arm/plat-samsung/dev-hsmmc3.c | 2 - arch/arm/plat-samsung/include/plat/sdhci.h | 57 10 files changed, 0 insertions(+), 280 deletions(-) [...] Hi Thomas, The arch/arm/plat-samsung/dev-hsmmcX.c files have been changed due to commit 61e62fcb (ARM: SAMSUNG: Consolidate common function to set SDHCI plat data). So if possible please make your patch based on latest my for-next :) Sure. I will base these patches on your for-next, test and resubmit. Thanks, Thomas. If any problems, please let me know. Thanks. Best regards, Kgene. -- Kukjin Kim kgene@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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 6/6] ARM: EXYNOS4: Limit usage of pl330 device instance to non-dt build
Dear Mr. Kim, On 5 September 2011 10:47, Kukjin Kim kgene@samsung.com wrote: -Original Message- From: Thomas Abraham [mailto:thomas.abra...@linaro.org] Sent: Thursday, September 01, 2011 6:05 PM To: devicetree-disc...@lists.ozlabs.org Cc: grant.lik...@secretlab.ca; linux-arm-ker...@lists.infradead.org; linux-samsung- s...@vger.kernel.org; kgene@samsung.com; robherri...@gmail.com; vinod.k...@intel.com; patc...@linaro.org; jassisinghb...@gmail.com; boojin@samsung.com Subject: [PATCH v2 6/6] ARM: EXYNOS4: Limit usage of pl330 device instance to non-dt build The pl330 device instances and associated platform data is required only for non-device-tree builds. With device tree, all of this information is obtained from the device tree. Signed-off-by: Thomas Abraham thomas.abra...@linaro.org --- arch/arm/mach-exynos4/Kconfig | 7 +++ arch/arm/mach-exynos4/Makefile | 3 ++- 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/arch/arm/mach-exynos4/Kconfig b/arch/arm/mach-exynos4/Kconfig index d4d401c..3edbf37 100644 --- a/arch/arm/mach-exynos4/Kconfig +++ b/arch/arm/mach-exynos4/Kconfig @@ -21,6 +21,13 @@ config EXYNOS4_MCT help Use MCT (Multi Core Timer) as kernel timers +config EXYNOS4_DEV_DMA + bool + default y if !OF + help + Compile in amba device definitions for DMA controller if OF + is not enabled. + config EXYNOS4_DEV_AHCI bool help diff --git a/arch/arm/mach-exynos4/Makefile b/arch/arm/mach-exynos4/Makefile index d2bf5bf..a2f33dc 100644 --- a/arch/arm/mach-exynos4/Makefile +++ b/arch/arm/mach-exynos4/Makefile @@ -13,7 +13,8 @@ obj- := # Core support for EXYNOS4 system obj-$(CONFIG_CPU_EXYNOS4210) += cpu.o init.o clock.o irq-combiner.o -obj-$(CONFIG_CPU_EXYNOS4210) += setup-i2c0.o irq-eint.o dma.o pmu.o +obj-$(CONFIG_CPU_EXYNOS4210) += setup-i2c0.o irq-eint.o pmu.o +obj-$(CONFIG_EXYNOS4_DEV_DMA) += dma.o Do we need _really_ EXYNOS4_DEV_DMA here? How about to use like following? +obj-$(!CONFIG_OF) += dma.o Thanks for the suggestion. I will try it and resubmit the patch. Thanks, Thomas. If any problems, let me know. Thanks. Best regards, Kgene. -- Kukjin Kim kgene@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. obj-$(CONFIG_PM) += pm.o sleep.o obj-$(CONFIG_CPU_IDLE) += cpuidle.o -- 1.6.6.rc2 -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 0/6] Add device tree support for PL330 dma controller driver
Dear Mr. Kim, On 5 September 2011 10:47, Kukjin Kim kgene@samsung.com wrote: Vinod Koul wrote: On Fri, 2011-08-26 at 14:10 +0530, Thomas Abraham wrote: This patchset adds device tree support for PL330 driver and uses it to add device tree support for Samsung platforms, specifically Exynos4. The DMA patches looks good to me. Do you want this to go thru slave-dma tree or somewhere else. I will need acks on 3, 5 and 6th patch to carry them. Looks good to me on 3 and 5th patch, I think, 6th patch is needed to update, please refer to my comments on there. Acked-by: Kukjin Kim kgene@samsung.com As you know, Boojin Kim submitted 8th patch last Friday. So would be nice to me if you could rebase Thomas' patch based on her updated patch set and apply all series into your slave-dma.git samsung_dma branch I think it’s easy because v8 changes are small then I will merge it into my -next to prevent useless conflicts. I will test the pl330 device tree patches with Boonjin's pl330 driver update patches and resubmit if there are any changes. Thank you for your ack. Thanks, Thomas. If any problems, please let me know. Thanks. Best regards, Kgene. -- Kukjin Kim kgene@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH] ARM: S5P64X0: Fix mask value for S5P64X0 CPU IDs
Ajay Kumar wrote: The current value for S5P64XX_CPU_MASK does not include the necessary bits, which causes detection failure. Signed-off-by: Ajay Kumar ajaykumar...@samsung.com --- arch/arm/plat-samsung/include/plat/cpu.h |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/arch/arm/plat-samsung/include/plat/cpu.h b/arch/arm/plat- samsung/include/plat/cpu.h index aa1f69b..897d161 100644 --- a/arch/arm/plat-samsung/include/plat/cpu.h +++ b/arch/arm/plat-samsung/include/plat/cpu.h @@ -30,7 +30,7 @@ extern unsigned long samsung_cpu_id; #define S5P6440_CPU_ID 0x5644 #define S5P6450_CPU_ID 0x3645 -#define S5P64XX_CPU_MASK 0x1FF4 +#define S5P64XX_CPU_MASK 0x7FFF #define S5PC100_CPU_ID 0x4310 #define S5PC100_CPU_MASK 0xF000 -- 1.7.2.3 Yes, you're right. But in this case, 0xF000 is better than 0x7FFF. If any problems with above value, please let me know. Will apply, thanks. Best regards, Kgene. -- Kukjin Kim kgene@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc 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] ARM: EXYNOS4: Add support for 8-bit bus width in SDHCI for ORIGEN
Tushar Behera wrote: On Wednesday 31 August 2011 06:31 AM, Kukjin Kim wrote: Tushar Behera wrote: Platform data for SDHCI controller on ORIGEN board is missing the support for 8-bit bus width. The platform data is extended in sync with other EXYNOS4 machines. Signed-off-by: Tushar Beheratushar.beh...@linaro.org --- arch/arm/mach-exynos4/mach-origen.c |8 1 files changed, 8 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-exynos4/mach-origen.c b/arch/arm/mach-exynos4/mach- origen.c index ae18812..6b6cd77 100644 --- a/arch/arm/mach-exynos4/mach-origen.c +++ b/arch/arm/mach-exynos4/mach-origen.c @@ -75,11 +75,19 @@ static struct s3c2410_uartcfg origen_uartcfgs[] __initdata = { static struct s3c_sdhci_platdata origen_hsmmc0_pdata __initdata = { .cd_type= S3C_SDHCI_CD_INTERNAL, .clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL, +#ifdef CONFIG_EXYNOS4_SDHCI_CH0_8BIT + .max_width = 8, + .host_caps = MMC_CAP_8_BIT_DATA, +#endif }; static struct s3c_sdhci_platdata origen_hsmmc2_pdata __initdata = { .cd_type= S3C_SDHCI_CD_INTERNAL, .clk_type = S3C_SDHCI_CLK_DIV_EXTERNAL, +#ifdef CONFIG_EXYNOS4_SDHCI_CH2_8BIT + .max_width = 8, + .host_caps = MMC_CAP_8_BIT_DATA, +#endif }; static struct platform_device *origen_devices[] __initdata = { -- 1.7.4.1 Hi Tushar, I wonder the bus width of SDHCI controller can be changed manually on ORIGEN like SMDK board. Thanks for your review. On ORIGEN board, we have wire connections for HSMMC-0/2/3 between the MMC port and the SoC. Hence ideally we can work with HSMMC2 in both 4-bit and 8-bit mode. However HSMMC0 can only work in 4-bit mode. Also IIRC WLAN would be using HSMMC-3 controller for its operations. So we would have conflict when HSMMC2 is working in 8-bit mode and WLAN is also enabled. Hence it appears better to drop this patch now. OK. Thanks. Best regards, Kgene. -- Kukjin Kim kgene@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH v3] ARM: Samsung: fix watchdog reset issue with clk_get()
Marek Szyprowski wrote: clkdev framework uses global mutex to protect clock tree, so it is not possible to call clk_get() in interrupt context. This patch fixes this issue and makes system reset by watchdog call working again. Signed-off-by: Marek Szyprowski m.szyprow...@samsung.com Signed-off-by: Kyungmin Park kyungmin.p...@samsung.com --- arch/arm/plat-samsung/clock.c | 11 +++ arch/arm/plat-samsung/include/plat/clock.h |3 +++ .../arm/plat-samsung/include/plat/watchdog-reset.h | 10 +++--- 3 files changed, 17 insertions(+), 7 deletions(-) history: v3: - moved initialization to arch_initcall, cleaned the code v2: - added missing '__init' section modifiers diff --git a/arch/arm/plat-samsung/clock.c b/arch/arm/plat-samsung/clock.c index 302c426..3b44519 100644 --- a/arch/arm/plat-samsung/clock.c +++ b/arch/arm/plat-samsung/clock.c @@ -64,6 +64,17 @@ static LIST_HEAD(clocks); */ DEFINE_SPINLOCK(clocks_lock); +/* Global watchdog clock used by arch_wtd_reset() callback */ +struct clk *s3c2410_wdtclk; +static int __init s3c_wdt_reset_init(void) +{ + s3c2410_wdtclk = clk_get(NULL, watchdog); + if (IS_ERR(s3c2410_wdtclk)) + printk(KERN_WARNING %s: warning: cannot get watchdog clock\n, __func__); + return 0; +} +arch_initcall(s3c_wdt_reset_init); + /* enable and disable calls for use with the clk struct */ static int clk_null_enable(struct clk *clk, int enable) diff --git a/arch/arm/plat-samsung/include/plat/clock.h b/arch/arm/plat- samsung/include/plat/clock.h index 87d5b38..8f95700 100644 --- a/arch/arm/plat-samsung/include/plat/clock.h +++ b/arch/arm/plat-samsung/include/plat/clock.h @@ -121,3 +121,6 @@ extern int s3c64xx_sclk_ctrl(struct clk *clk, int enable); extern void s3c_pwmclk_init(void); +/* Global watchdog clock used by arch_wtd_reset() callback */ + +extern struct clk *s3c2410_wdtclk; diff --git a/arch/arm/plat-samsung/include/plat/watchdog-reset.h b/arch/arm/plat- samsung/include/plat/watchdog-reset.h index 54b762a..40dbb2b 100644 --- a/arch/arm/plat-samsung/include/plat/watchdog-reset.h +++ b/arch/arm/plat-samsung/include/plat/watchdog-reset.h @@ -10,6 +10,7 @@ * published by the Free Software Foundation. */ +#include plat/clock.h #include plat/regs-watchdog.h #include mach/map.h @@ -19,17 +20,12 @@ static inline void arch_wdt_reset(void) { - struct clk *wdtclk; - printk(arch_reset: attempting watchdog reset\n); __raw_writel(0, S3C2410_WTCON); /* disable watchdog, to be safe */ - wdtclk = clk_get(NULL, watchdog); - if (!IS_ERR(wdtclk)) { - clk_enable(wdtclk); - } else - printk(KERN_WARNING %s: warning: cannot get watchdog clock\n, __func__); + if (s3c2410_wdtclk) + clk_enable(s3c2410_wdtclk); /* put initial values into count and data */ __raw_writel(0x80, S3C2410_WTCNT); -- 1.7.1.569.g6f426 Looks ok to me, applied. Thanks. Best regards, Kgene. -- Kukjin Kim kgene@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 0/2] mmc: core: Power off notify/handle (eMMC 4.5)
This set of patch add the feature of notify and handling of PowerOff notification for eMMC 4.5 devices Girish K S (2): mmc: core: Add power off notify feature(eMMC 4.5) mmc: core: Add poweroff notify handling feature drivers/mmc/core/core.c | 29 + drivers/mmc/core/mmc.c | 22 -- drivers/mmc/host/sdhci.c | 11 +++ include/linux/mmc/card.h | 30 ++ include/linux/mmc/host.h |6 +- include/linux/mmc/mmc.h |8 +++- 6 files changed, 98 insertions(+), 8 deletions(-) -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 1/2] mmc: core: Add power off notify feature(eMMC 4.5)
This patch adds the support for power off notify feature available in eMMC 4.5 devices. If the the host has support for this feature, then the mmc core will notify it to the device by setting the POWER_OFF_NOTIFICATION byte in the extended csd register with a value 1(POWER_ON). This patch should be applied after Seungwon Jeon's patch for cmd6 timeout. Signed-off-by: Girish K S girish.shivananja...@linaro.org --- drivers/mmc/core/mmc.c | 19 +-- include/linux/mmc/card.h |1 + include/linux/mmc/host.h |1 + include/linux/mmc/mmc.h |8 +++- 4 files changed, 26 insertions(+), 3 deletions(-) diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 68eb368..2f06b37 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -410,10 +410,12 @@ static int mmc_read_ext_csd(struct mmc_card *card, u8 *ext_csd) else card-erased_byte = 0x0; - if (card-ext_csd.rev = 6) + if (card-ext_csd.rev = 6) { card-ext_csd.generic_cmd6_time = 10 * ext_csd[EXT_CSD_GENERIC_CMD6_TIME]; - + card-ext_csd.power_off_longtime = 10 * + ext_csd[EXT_CSD_POWER_OFF_LONG_TIME]; + } out: return err; } @@ -710,6 +712,19 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, } /* +* If the host supports the power_off_notify capability then +* set the notification byte in the ext_csd register of device +*/ + if (host-caps MMC_CAP_POWER_OFF_NOTIFY) { + err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, + EXT_CSD_POWER_OFF_NOTIFICATION, + EXT_CSD_POWER_ON, + card-ext_csd.generic_cmd6_time); + if (err err != -EBADMSG) + goto free_card; + } + + /* * Activate high speed (if supported) */ if ((card-ext_csd.hs_max_dtr != 0) diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index e992fe3..2bf2843 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h @@ -53,6 +53,7 @@ struct mmc_ext_csd { unsigned intpart_time; /* Units: ms */ unsigned intsa_timeout; /* Units: 100ns */ unsigned intgeneric_cmd6_time; /* Units: ms */ + unsigned intpower_off_longtime; /* Units: ms */ unsigned inths_max_dtr; unsigned intsectors; unsigned intcard_type; diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index 1d09562..21c85e1 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h @@ -229,6 +229,7 @@ struct mmc_host { #define MMC_CAP_MAX_CURRENT_600(1 28) /* Host max current limit is 600mA */ #define MMC_CAP_MAX_CURRENT_800(1 29) /* Host max current limit is 800mA */ #define MMC_CAP_CMD23 (1 30) /* CMD23 supported. */ +#define MMC_CAP_POWER_OFF_NOTIFY(1 31)/*NOtify poweroff supported */ mmc_pm_flag_t pm_caps;/* supported pm features */ diff --git a/include/linux/mmc/mmc.h b/include/linux/mmc/mmc.h index e869f00..8e86d77 100644 --- a/include/linux/mmc/mmc.h +++ b/include/linux/mmc/mmc.h @@ -269,7 +269,7 @@ struct _mmc_csd { /* * EXT_CSD fields */ - +#define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */ #define EXT_CSD_PARTITION_ATTRIBUTE156 /* R/W */ #define EXT_CSD_PARTITION_SUPPORT 160 /* RO */ #define EXT_CSD_WR_REL_PARAM 166 /* RO */ @@ -293,6 +293,7 @@ struct _mmc_csd { #define EXT_CSD_SEC_ERASE_MULT 230 /* RO */ #define EXT_CSD_SEC_FEATURE_SUPPORT231 /* RO */ #define EXT_CSD_TRIM_MULT 232 /* RO */ +#define EXT_CSD_POWER_OFF_LONG_TIME247 /*RO*/ #define EXT_CSD_GENERIC_CMD6_TIME 248 /* RO */ /* @@ -329,6 +330,11 @@ struct _mmc_csd { #define EXT_CSD_SEC_BD_BLK_EN BIT(2) #define EXT_CSD_SEC_GB_CL_EN BIT(4) +#define EXT_CSD_NO_POWER_NOTIFICATION 0 +#define EXT_CSD_POWER_ON 1 +#define EXT_CSD_POWER_OFF_SHORT2 +#define EXT_CSD_POWER_OFF_LONG 3 + /* * MMC_SWITCH access modes */ -- 1.7.1 -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 2/2] mmc: core: Add poweroff notify handling feature
This patch adds the handling of the poweroff notify feature during powerdown phase. Signed-off-by: Girish K S girish.shivananja...@linaro.org --- drivers/mmc/core/core.c | 29 + drivers/mmc/core/mmc.c |3 +++ drivers/mmc/host/sdhci.c | 11 +++ include/linux/mmc/card.h | 29 + include/linux/mmc/host.h |7 +-- 5 files changed, 73 insertions(+), 6 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index a65e1ca..37b09d7 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1130,9 +1130,38 @@ static void mmc_power_up(struct mmc_host *host) static void mmc_power_off(struct mmc_host *host) { + struct mmc_card *card = host-card; + unsigned int notify_type; + unsigned int timeout; + int err; + host-ios.clock = 0; host-ios.vdd = 0; + if (mmc_card_mmc(card) mmc_card_powernotify_on(card)) { + + if (host-power_notify_type == MMC_POWEROFF_NOTIFY_SHORT) { + notify_type = EXT_CSD_POWER_OFF_SHORT; + timeout = card-ext_csd.generic_cmd6_time; + mmc_card_set_powernotify_short(card); + } else { + notify_type = EXT_CSD_POWER_OFF_LONG; + timeout = card-ext_csd.power_off_longtime; + mmc_card_set_powernotify_long(card); + } + + err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, + EXT_CSD_POWER_OFF_NOTIFICATION, + notify_type, timeout); + + if (err err != -EBADMSG) + printk(KERN_ERR Device failed to respond + within %d poweroff time. + forcefully powering down + the device\n, timeout); + + mmc_card_set_powernotify_off(card); + } /* * Reset ocr mask to be the highest possible voltage supported for * this mmc host. This value will be used at next power up. diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 2f06b37..b369c6f 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -720,8 +720,11 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, EXT_CSD_POWER_OFF_NOTIFICATION, EXT_CSD_POWER_ON, card-ext_csd.generic_cmd6_time); + if (err err != -EBADMSG) goto free_card; + + mmc_card_set_powernotify_on(card); } /* diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 0e02cc1..a24a31b 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -2566,6 +2566,17 @@ int sdhci_add_host(struct sdhci_host *host) if (caps[1] SDHCI_DRIVER_TYPE_D) mmc-caps |= MMC_CAP_DRIVER_TYPE_D; + if (mmc-caps == MMC_CAP_POWER_OFF_NOTIFY) { + /* +* If Notify capability is enabled and +* platform data is not initialised, set default to +* long power off notify timeout value +*/ + if (mmc-power_notify_type == MMC_POWEROFF_NOTIFY_NONE) + mmc-power_notify_type = MMC_POWEROFF_NOTIFY_LONG; + } else { + mmc-power_notify_type = MMC_POWEROFF_NOTIFY_NONE; + } /* Initial value for re-tuning timer count */ host-tuning_count = (caps[1] SDHCI_RETUNING_TIMER_COUNT_MASK) SDHCI_RETUNING_TIMER_COUNT_SHIFT; diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 2bf2843..d40b7b3 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h @@ -179,7 +179,12 @@ struct mmc_card { #define MMC_STATE_HIGHSPEED_DDR (14) /* card is in high speed mode */ #define MMC_STATE_ULTRAHIGHSPEED (15)/* card is in ultra high speed mode */ #define MMC_CARD_SDXC (16) /* card is SDXC */ - unsigned intquirks; /* card quirks */ + unsigned intpoweroff_notify_state;/*eMMC4.5 notify feature */ +#define MMC_NO_POWER_NITOFICATION 0 +#define MMC_POWERED_ON 1 +#define MMC_POWEROFF_SHORT 2 +#define MMC_POWEROFF_LONG 3 + unsigned intquirks; /* card quirks */ #define MMC_QUIRK_LENIENT_FN0 (10) /* allow SDIO FN0 writes outside of the VS CCCR range */ #define MMC_QUIRK_BLKSZ_FOR_BYTE_MODE (11) /* use func-cur_blksize */ /* for byte mode */ @@ -192,9 +197,9 @@ struct mmc_card { #define MMC_QUIRK_BLK_NO_CMD23 (17) /* Avoid CMD23 for regular multiblock */ unsigned interase_size; /* erase size in sectors */ -
Re: [PATCH 2/2] mmc: core: Add poweroff notify handling feature
Hi Girish, I think it's still incomplete, does power off short function is called at suspend properly? there are some comments below. Thank you, Kyungmin Park On Mon, Sep 5, 2011 at 8:49 PM, Girish K S girish.shivananja...@linaro.org wrote: This patch adds the handling of the poweroff notify feature during powerdown phase. Signed-off-by: Girish K S girish.shivananja...@linaro.org --- drivers/mmc/core/core.c | 29 + drivers/mmc/core/mmc.c | 3 +++ drivers/mmc/host/sdhci.c | 11 +++ include/linux/mmc/card.h | 29 + include/linux/mmc/host.h | 7 +-- 5 files changed, 73 insertions(+), 6 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index a65e1ca..37b09d7 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1130,9 +1130,38 @@ static void mmc_power_up(struct mmc_host *host) static void mmc_power_off(struct mmc_host *host) { + struct mmc_card *card = host-card; + unsigned int notify_type; + unsigned int timeout; + int err; + host-ios.clock = 0; host-ios.vdd = 0; + if (mmc_card_mmc(card) mmc_card_powernotify_on(card)) { + + if (host-power_notify_type == MMC_POWEROFF_NOTIFY_SHORT) { + notify_type = EXT_CSD_POWER_OFF_SHORT; + timeout = card-ext_csd.generic_cmd6_time; + mmc_card_set_powernotify_short(card); + } else { + notify_type = EXT_CSD_POWER_OFF_LONG; + timeout = card-ext_csd.power_off_longtime; + mmc_card_set_powernotify_long(card); + } + + err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, + EXT_CSD_POWER_OFF_NOTIFICATION, + notify_type, timeout); + + if (err err != -EBADMSG) + printk(KERN_ERR Device failed to respond + within %d poweroff time. + forcefully powering down + the device\n, timeout); + + mmc_card_set_powernotify_off(card); + } /* * Reset ocr mask to be the highest possible voltage supported for * this mmc host. This value will be used at next power up. diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 2f06b37..b369c6f 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -720,8 +720,11 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, EXT_CSD_POWER_OFF_NOTIFICATION, EXT_CSD_POWER_ON, card-ext_csd.generic_cmd6_time); + if (err err != -EBADMSG) goto free_card; + + mmc_card_set_powernotify_on(card); } /* diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 0e02cc1..a24a31b 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -2566,6 +2566,17 @@ int sdhci_add_host(struct sdhci_host *host) if (caps[1] SDHCI_DRIVER_TYPE_D) mmc-caps |= MMC_CAP_DRIVER_TYPE_D; + if (mmc-caps == MMC_CAP_POWER_OFF_NOTIFY) { It should be if (mmc-caps MMC_CAP_POWER_OFF_NOTIFY) { + /* + * If Notify capability is enabled and + * platform data is not initialised, set default to + * long power off notify timeout value + */ + if (mmc-power_notify_type == MMC_POWEROFF_NOTIFY_NONE) + mmc-power_notify_type = MMC_POWEROFF_NOTIFY_LONG; + } else { + mmc-power_notify_type = MMC_POWEROFF_NOTIFY_NONE; + } What's the goal of these statements? /* Initial value for re-tuning timer count */ host-tuning_count = (caps[1] SDHCI_RETUNING_TIMER_COUNT_MASK) SDHCI_RETUNING_TIMER_COUNT_SHIFT; diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 2bf2843..d40b7b3 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h @@ -179,7 +179,12 @@ struct mmc_card { #define MMC_STATE_HIGHSPEED_DDR (14) /* card is in high speed mode */ #define MMC_STATE_ULTRAHIGHSPEED (15) /* card is in ultra high speed mode */ #define MMC_CARD_SDXC (16) /* card is SDXC */ - unsigned int quirks; /* card quirks */ + unsigned int poweroff_notify_state;/*eMMC4.5 notify feature */ +#define MMC_NO_POWER_NITOFICATION 0 +#define MMC_POWERED_ON 1 +#define MMC_POWEROFF_SHORT 2 +#define MMC_POWEROFF_LONG 3 + unsigned int quirks; /* card quirks */ Don't modify the meaning-less
RE: [PATCH v4 0/4] Updated s5p-tv platform definitions
Tomasz Stanislawski wrote: Hello, This patch series contains platform definitions for s5p-tv driver rebased onto latest for-next branch (including generic GIC and clockdev changes). Changes since v3: - vpll code was fixed and moved back to mach-dependant code - changed naming from IIC to I2C Changes since v2: - moved vpll code to plat-s5p/clock-vpll.c Changes since v1: - renamed i2c8 to common i2c-hdmiphy - moved common vpll code to plat-s5p/clock.c - added check for pll locking - various minor coding style fixes here and there Best regards Tomasz Stanislawski (4): ARM: Samsung: add i2c hdmiphy controller definitions ARM: S5P: add support for tv device ARM: Exynos4: enable TV support on Universal_C210 board ARM: S5PV210: enable TV support on GONI board arch/arm/mach-exynos4/Kconfig|2 + arch/arm/mach-exynos4/clock.c| 200 +- arch/arm/mach-exynos4/cpu.c |2 + arch/arm/mach-exynos4/include/mach/i2c-hdmiphy.h | 16 ++ arch/arm/mach-exynos4/include/mach/irqs.h|4 + arch/arm/mach-exynos4/include/mach/map.h | 12 ++ arch/arm/mach-exynos4/include/mach/regs-pmu.h|6 + arch/arm/mach-exynos4/mach-universal_c210.c | 74 arch/arm/mach-s5pv210/Kconfig|1 + arch/arm/mach-s5pv210/clock.c| 137 ++- - arch/arm/mach-s5pv210/cpu.c |4 + arch/arm/mach-s5pv210/include/mach/i2c-hdmiphy.h | 16 ++ arch/arm/mach-s5pv210/include/mach/irqs.h|4 +- arch/arm/mach-s5pv210/include/mach/map.h | 13 ++ arch/arm/mach-s5pv210/include/mach/regs-clock.h |3 +- arch/arm/mach-s5pv210/mach-goni.c|9 + arch/arm/plat-s5p/Kconfig| 10 + arch/arm/plat-s5p/Makefile |2 + arch/arm/plat-s5p/dev-i2c-hdmiphy.c | 59 +++ arch/arm/plat-s5p/dev-tv.c | 98 +++ arch/arm/plat-s5p/include/plat/pll.h | 14 ++- arch/arm/plat-samsung/include/plat/devs.h|6 + arch/arm/plat-samsung/include/plat/iic.h |1 + arch/arm/plat-samsung/include/plat/tv-core.h | 44 + 24 files changed, 720 insertions(+), 17 deletions(-) create mode 100644 arch/arm/mach-exynos4/include/mach/i2c-hdmiphy.h create mode 100644 arch/arm/mach-s5pv210/include/mach/i2c-hdmiphy.h create mode 100644 arch/arm/plat-s5p/dev-i2c-hdmiphy.c create mode 100644 arch/arm/plat-s5p/dev-tv.c create mode 100644 arch/arm/plat-samsung/include/plat/tv-core.h -- 1.7.6 Looks ok to me, will apply. Thanks. Best regards, Kgene. -- Kukjin Kim kgene@samsung.com, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd. -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 2/2] mmc: core: Add poweroff notify handling feature
Hi Mr Park, On 5 September 2011 18:03, Kyungmin Park kmp...@infradead.org wrote: Hi Girish, I think it's still incomplete, does power off short function is called at suspend properly? there are some comments below. Thank you, Kyungmin Park On Mon, Sep 5, 2011 at 8:49 PM, Girish K S girish.shivananja...@linaro.org wrote: This patch adds the handling of the poweroff notify feature during powerdown phase. Signed-off-by: Girish K S girish.shivananja...@linaro.org --- drivers/mmc/core/core.c | 29 + drivers/mmc/core/mmc.c | 3 +++ drivers/mmc/host/sdhci.c | 11 +++ include/linux/mmc/card.h | 29 + include/linux/mmc/host.h | 7 +-- 5 files changed, 73 insertions(+), 6 deletions(-) diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c index a65e1ca..37b09d7 100644 --- a/drivers/mmc/core/core.c +++ b/drivers/mmc/core/core.c @@ -1130,9 +1130,38 @@ static void mmc_power_up(struct mmc_host *host) static void mmc_power_off(struct mmc_host *host) { + struct mmc_card *card = host-card; + unsigned int notify_type; + unsigned int timeout; + int err; + host-ios.clock = 0; host-ios.vdd = 0; + if (mmc_card_mmc(card) mmc_card_powernotify_on(card)) { + + if (host-power_notify_type == MMC_POWEROFF_NOTIFY_SHORT) { + notify_type = EXT_CSD_POWER_OFF_SHORT; + timeout = card-ext_csd.generic_cmd6_time; + mmc_card_set_powernotify_short(card); + } else { + notify_type = EXT_CSD_POWER_OFF_LONG; + timeout = card-ext_csd.power_off_longtime; + mmc_card_set_powernotify_long(card); + } + + err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL, + EXT_CSD_POWER_OFF_NOTIFICATION, + notify_type, timeout); + + if (err err != -EBADMSG) + printk(KERN_ERR Device failed to respond + within %d poweroff time. + forcefully powering down + the device\n, timeout); + + mmc_card_set_powernotify_off(card); + } /* * Reset ocr mask to be the highest possible voltage supported for * this mmc host. This value will be used at next power up. diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c index 2f06b37..b369c6f 100644 --- a/drivers/mmc/core/mmc.c +++ b/drivers/mmc/core/mmc.c @@ -720,8 +720,11 @@ static int mmc_init_card(struct mmc_host *host, u32 ocr, EXT_CSD_POWER_OFF_NOTIFICATION, EXT_CSD_POWER_ON, card-ext_csd.generic_cmd6_time); + if (err err != -EBADMSG) goto free_card; + + mmc_card_set_powernotify_on(card); } /* diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c index 0e02cc1..a24a31b 100644 --- a/drivers/mmc/host/sdhci.c +++ b/drivers/mmc/host/sdhci.c @@ -2566,6 +2566,17 @@ int sdhci_add_host(struct sdhci_host *host) if (caps[1] SDHCI_DRIVER_TYPE_D) mmc-caps |= MMC_CAP_DRIVER_TYPE_D; + if (mmc-caps == MMC_CAP_POWER_OFF_NOTIFY) { It should be if (mmc-caps MMC_CAP_POWER_OFF_NOTIFY) { + /* + * If Notify capability is enabled and + * platform data is not initialised, set default to + * long power off notify timeout value + */ + if (mmc-power_notify_type == MMC_POWEROFF_NOTIFY_NONE) + mmc-power_notify_type = MMC_POWEROFF_NOTIFY_LONG; + } else { + mmc-power_notify_type = MMC_POWEROFF_NOTIFY_NONE; + } What's the goal of these statements? the goal of the statement is to set the notification type to a default value. if host doesnt have the capability then notification type is none. If the host supports the capability and the notification type (whether the short or long is not set), then default is long type. /* Initial value for re-tuning timer count */ host-tuning_count = (caps[1] SDHCI_RETUNING_TIMER_COUNT_MASK) SDHCI_RETUNING_TIMER_COUNT_SHIFT; diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h index 2bf2843..d40b7b3 100644 --- a/include/linux/mmc/card.h +++ b/include/linux/mmc/card.h @@ -179,7 +179,12 @@ struct mmc_card { #define MMC_STATE_HIGHSPEED_DDR (14) /* card is in high speed mode */ #define MMC_STATE_ULTRAHIGHSPEED (15) /* card is in ultra high speed mode */ #define MMC_CARD_SDXC (16) /* card is SDXC */ - unsigned int
Re: [PATCH 0/6] Add device tree support for PL330 dma controller driver
On Tue, 2011-08-30 at 17:58 +0530, Thomas Abraham wrote: Hi Vinod, On 29 August 2011 22:59, Vinod Koul vinod.k...@linux.intel.com wrote: On Fri, 2011-08-26 at 14:10 +0530, Thomas Abraham wrote: This patchset adds device tree support for PL330 driver and uses it to add device tree support for Samsung platforms, specifically Exynos4. The DMA patches looks good to me. Do you want this to go thru slave-dma tree or somewhere else. I will need acks on 3, 5 and 6th patch to carry them. There are couple of changes required in patch 4/6 of this series. I will do that and resubmit. Since these patches are based on Boojin's pl330 driver update patches, it would be easier to take the same route which Boojin's patches will take. I will try to get acks' for the patches that you have listed. And I think these might need to be rebased based on Boojin's latest version -- ~Vinod -- To unsubscribe from this list: send the line unsubscribe linux-samsung-soc in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html