[U-Boot] [PATCH 1/3] arm:mmc:goni/exynos: Fix wrong mmc base register devices offset.

On s5pc1xx mmc devices offset is multiply of 0x100000, wrong value was 0x10000. Register offset always points to mmc 0 before this change.
Add macro definition of mmc dev register offset to s5pc1xx and exynos mmc.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com --- arch/arm/include/asm/arch-exynos/mmc.h | 6 +++++- arch/arm/include/asm/arch-s5pc1xx/mmc.h | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/arch-exynos/mmc.h b/arch/arm/include/asm/arch-exynos/mmc.h index 96610b8..98312d1 100644 --- a/arch/arm/include/asm/arch-exynos/mmc.h +++ b/arch/arm/include/asm/arch-exynos/mmc.h @@ -8,6 +8,8 @@ #ifndef __ASM_ARCH_MMC_H_ #define __ASM_ARCH_MMC_H_
+#define S5P_MMC_DEV_OFFSET 0x10000 + #define SDHCI_CONTROL2 0x80 #define SDHCI_CONTROL3 0x84 #define SDHCI_CONTROL4 0x8C @@ -55,7 +57,9 @@ int s5p_sdhci_init(u32 regbase, int index, int bus_width);
static inline unsigned int s5p_mmc_init(int index, int bus_width) { - unsigned int base = samsung_get_base_mmc() + (0x10000 * index); + unsigned int base = samsung_get_base_mmc() + + (S5P_MMC_DEV_OFFSET * index); + return s5p_sdhci_init(base, index, bus_width); } #endif diff --git a/arch/arm/include/asm/arch-s5pc1xx/mmc.h b/arch/arm/include/asm/arch-s5pc1xx/mmc.h index 96610b8..55ff10b 100644 --- a/arch/arm/include/asm/arch-s5pc1xx/mmc.h +++ b/arch/arm/include/asm/arch-s5pc1xx/mmc.h @@ -8,6 +8,8 @@ #ifndef __ASM_ARCH_MMC_H_ #define __ASM_ARCH_MMC_H_
+#define S5P_MMC_DEV_OFFSET 0x100000 + #define SDHCI_CONTROL2 0x80 #define SDHCI_CONTROL3 0x84 #define SDHCI_CONTROL4 0x8C @@ -55,7 +57,9 @@ int s5p_sdhci_init(u32 regbase, int index, int bus_width);
static inline unsigned int s5p_mmc_init(int index, int bus_width) { - unsigned int base = samsung_get_base_mmc() + (0x10000 * index); + unsigned int base = samsung_get_base_mmc() + + (S5P_MMC_DEV_OFFSET * index); + return s5p_sdhci_init(base, index, bus_width); } #endif

This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2".
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com --- board/samsung/goni/goni.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index c05801d..3b236b4 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -69,6 +69,7 @@ int checkboard(void) int board_mmc_init(bd_t *bis) { int i; + int ret;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1); @@ -91,7 +92,36 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4); + ret = s5p_mmc_init(0, 4); + if (ret) { + puts("MMC: Failed to init MMC:0.\n"); + return ret; + } + + /* + * SD card (T_FLASH) detect and init + * T_FLASH_DETECT: EINT28: GPH3[4] input mode + */ + s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT); + s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP); + + if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) { + for (i = 0; i < 7; i++) { + if (i == 2) + continue; + /* GPG2[0:6] special function 2 */ + s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2); + /* GPG2[0:6] pull disable */ + s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE); + /* GPG2[0:6] drv 4x */ + s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X); + } + if (s5p_mmc_init(2, 4)) + puts("MMC: Failed to init SD card (MMC:2).\n"); + } + + /* SD card init is optional so print information when it fails only */ + return ret; } #endif

Hello Minkyu,
This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2".
Could you review this patch, please?
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
board/samsung/goni/goni.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index c05801d..3b236b4 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -69,6 +69,7 @@ int checkboard(void) int board_mmc_init(bd_t *bis) { int i;
int ret;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1);
@@ -91,7 +92,36 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4);
- ret = s5p_mmc_init(0, 4);
- if (ret) {
puts("MMC: Failed to init MMC:0.\n");
return ret;
- }
- /*
* SD card (T_FLASH) detect and init
* T_FLASH_DETECT: EINT28: GPH3[4] input mode
*/
- s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT);
- s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP);
- if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) {
for (i = 0; i < 7; i++) {
if (i == 2)
continue;
/* GPG2[0:6] special function 2 */
s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2);
/* GPG2[0:6] pull disable */
s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE);
/* GPG2[0:6] drv 4x */
s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X);
}
if (s5p_mmc_init(2, 4))
puts("MMC: Failed to init SD card (MMC:2).\n");
- }
- /* SD card init is optional so print information when it fails only */
- return ret; } #endif

On 08/28/2013 04:39 PM, Przemyslaw Marczak wrote:
Hello Minkyu,
This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2".
Could you review this patch, please?
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
board/samsung/goni/goni.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index c05801d..3b236b4 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -69,6 +69,7 @@ int checkboard(void) int board_mmc_init(bd_t *bis) { int i;
int ret;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1);
@@ -91,7 +92,36 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4);
- ret = s5p_mmc_init(0, 4);
- if (ret) {
puts("MMC: Failed to init MMC:0.\n");
return ret;
- }
When eMMC init is failed, immediately return? I think that even if eMMC init is failed, there is worth that try to init SD-card.
Best Regards, Jaehoon Chung
- /*
* SD card (T_FLASH) detect and init
* T_FLASH_DETECT: EINT28: GPH3[4] input mode
*/
- s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT);
- s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP);
- if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) {
for (i = 0; i < 7; i++) {
if (i == 2)
continue;
/* GPG2[0:6] special function 2 */
s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2);
/* GPG2[0:6] pull disable */
s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE);
/* GPG2[0:6] drv 4x */
s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X);
}
if (s5p_mmc_init(2, 4))
puts("MMC: Failed to init SD card (MMC:2).\n");
- }
- /* SD card init is optional so print information when it fails only */
- return ret; } #endif

On 08/28/2013 10:41 AM, Jaehoon Chung wrote:
When eMMC init is failed, immediately return? I think that even if eMMC init is failed, there is worth that try to init SD-card.
Best Regards, Jaehoon Chung
Hi Jaehoon, You're right, I will change this. Regards

This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2".
Changes in V2: - Init SD card even if eMMC init fail.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com --- board/samsung/goni/goni.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index c05801d..2bb2507 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -69,6 +69,7 @@ int checkboard(void) int board_mmc_init(bd_t *bis) { int i; + int ret;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1); @@ -91,7 +92,35 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4); + ret = s5p_mmc_init(0, 4); + if (ret) { + puts("MMC: Failed to init MMC:0.\n"); + } + + /* + * SD card (T_FLASH) detect and init + * T_FLASH_DETECT: EINT28: GPH3[4] input mode + */ + s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT); + s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP); + + if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) { + for (i = 0; i < 7; i++) { + if (i == 2) + continue; + /* GPG2[0:6] special function 2 */ + s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2); + /* GPG2[0:6] pull disable */ + s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE); + /* GPG2[0:6] drv 4x */ + s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X); + } + if (s5p_mmc_init(2, 4)) + puts("MMC: Failed to init SD card (MMC:2).\n"); + } + + /* SD card init is optional so print information when it fails only */ + return ret; } #endif

Hi Przemyslaw,
On 08/28/2013 11:36 PM, Przemyslaw Marczak wrote:
This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2".
Changes in V2:
- Init SD card even if eMMC init fail.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
board/samsung/goni/goni.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/board/samsung/goni/goni.c b/board/samsung/goni/goni.c index c05801d..2bb2507 100644 --- a/board/samsung/goni/goni.c +++ b/board/samsung/goni/goni.c @@ -69,6 +69,7 @@ int checkboard(void) int board_mmc_init(bd_t *bis) { int i;
int ret;
/* MASSMEMORY_EN: XMSMDATA7: GPJ2[7] output high */ s5p_gpio_direction_output(&s5pc110_gpio->j2, 7, 1);
@@ -91,7 +92,35 @@ int board_mmc_init(bd_t *bis) s5p_gpio_set_drv(&s5pc110_gpio->g0, i, GPIO_DRV_4X); }
- return s5p_mmc_init(0, 4);
- ret = s5p_mmc_init(0, 4);
- if (ret) {
puts("MMC: Failed to init MMC:0.\n");
- }
Can remove the bracket. Then looks good to me.
Acked-by: Jaehoon Chung jh80.chung@samsung.com
Best Regards, Jaehoon Chung
- /*
* SD card (T_FLASH) detect and init
* T_FLASH_DETECT: EINT28: GPH3[4] input mode
*/
- s5p_gpio_cfg_pin(&s5pc110_gpio->h3, 4, GPIO_INPUT);
- s5p_gpio_set_pull(&s5pc110_gpio->h3, 4, GPIO_PULL_UP);
- if (!s5p_gpio_get_value(&s5pc110_gpio->h3, 4)) {
for (i = 0; i < 7; i++) {
if (i == 2)
continue;
/* GPG2[0:6] special function 2 */
s5p_gpio_cfg_pin(&s5pc110_gpio->g2, i, 0x2);
/* GPG2[0:6] pull disable */
s5p_gpio_set_pull(&s5pc110_gpio->g2, i, GPIO_PULL_NONE);
/* GPG2[0:6] drv 4x */
s5p_gpio_set_drv(&s5pc110_gpio->g2, i, GPIO_DRV_4X);
}
if (s5p_mmc_init(2, 4))
puts("MMC: Failed to init SD card (MMC:2).\n");
- }
- /* SD card init is optional so print information when it fails only */
- return ret;
} #endif

Dear Przemyslaw Marczak,
On 28/08/13 23:36, Przemyslaw Marczak wrote:
This change allow to use sd card on Goni the same like mmc 0. SD card is mmc dev 1, so it can be used like this: "fatls mmc 1:2".
Changes in V2:
- Init SD card even if eMMC init fail.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
board/samsung/goni/goni.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-)
Your v1 patchset is made by 3 patches. But this patch is only one patch.
Do you want to separate patchset? Then please send each patches again. or not, please send whole patchset.
Thanks, Minkyu Kang.

On 08/30/2013 04:16 AM, Minkyu Kang wrote:
Dear Przemyslaw Marczak, ... Your v1 patchset is made by 3 patches. But this patch is only one patch.
Do you want to separate patchset? Then please send each patches again. or not, please send whole patchset.
Thanks, Minkyu Kang.
Hello Minkyu Kang, I send patchset by mistake and each patch will be send again soon.
Thank you

This change allows using every mmc device instance with ums, like eMMC or SD cards.
Example: ums <device_number> for mmc devices.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Marek Vasut marek.vasut@gmail.com --- common/cmd_usb_mass_storage.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c index 33a4715..4181d3a 100644 --- a/common/cmd_usb_mass_storage.c +++ b/common/cmd_usb_mass_storage.c @@ -14,6 +14,7 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { + struct mmc *mmc = NULL; char *ep; unsigned int dev_num = 0, offset = 0, part_size = 0; int rc; @@ -28,8 +29,10 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
dev_num = (int)simple_strtoul(argv[1], &ep, 16);
- if (dev_num) { - puts("\nSet eMMC device to 0! - e.g. ums 0\n"); + mmc = find_mmc_device(dev_num); + + if (!mmc) { + printf("\neMMC device: %d not found! Try ums 0.\n", dev_num); goto fail; }

Hello Marek,
This change allows using every mmc device instance with ums, like eMMC or SD cards.
Example: ums <device_number> for mmc devices.
Could you review this patch, please?
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Marek Vasut marek.vasut@gmail.com
common/cmd_usb_mass_storage.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c index 33a4715..4181d3a 100644 --- a/common/cmd_usb_mass_storage.c +++ b/common/cmd_usb_mass_storage.c @@ -14,6 +14,7 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
- struct mmc *mmc = NULL; char *ep; unsigned int dev_num = 0, offset = 0, part_size = 0; int rc;
@@ -28,8 +29,10 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
dev_num = (int)simple_strtoul(argv[1], &ep, 16);
- if (dev_num) {
puts("\nSet eMMC device to 0! - e.g. ums 0\n");
- mmc = find_mmc_device(dev_num);
- if (!mmc) {
goto fail; }printf("\neMMC device: %d not found! Try ums 0.\n", dev_num);

Dear Przemyslaw Marczak,
This change allows using every mmc device instance with ums, like eMMC or SD cards.
Example: ums <device_number> for mmc devices.
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Marek Vasut marek.vasut@gmail.com
common/cmd_usb_mass_storage.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/common/cmd_usb_mass_storage.c b/common/cmd_usb_mass_storage.c index 33a4715..4181d3a 100644 --- a/common/cmd_usb_mass_storage.c +++ b/common/cmd_usb_mass_storage.c @@ -14,6 +14,7 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) {
- struct mmc *mmc = NULL; char *ep; unsigned int dev_num = 0, offset = 0, part_size = 0; int rc;
@@ -28,8 +29,10 @@ int do_usb_mass_storage(cmd_tbl_t *cmdtp, int flag,
dev_num = (int)simple_strtoul(argv[1], &ep, 16);
- if (dev_num) {
puts("\nSet eMMC device to 0! - e.g. ums 0\n");
- mmc = find_mmc_device(dev_num);
- if (!mmc) {
goto fail; }printf("\neMMC device: %d not found! Try ums 0.\n", dev_num);
You still use dev_num further in the code, why not convert the whole thing to use *mmc ?
Best regards, Marek Vasut

On 08/28/2013 10:44 AM, Marek Vasut wrote:
You still use dev_num further in the code, why not convert the whole thing to use *mmc ?
Best regards, Marek Vasut.
Hello, I don't know exactly what do you mean. I suppose that putting "mmc device number" as a parameter is easy to maintain at command code and also intuitive to use at prompt. Do you prefer set mmc dev number by command "mmc dev <num>" ? Should we depends one command on another? If yes, then what about e.g. fat or ext command set?
Thank you.

Dear Przemyslaw Marczak,
On 08/28/2013 10:44 AM, Marek Vasut wrote:
You still use dev_num further in the code, why not convert the whole thing to use *mmc ?
Best regards, Marek Vasut.
Hello, I don't know exactly what do you mean. I suppose that putting "mmc device number" as a parameter is easy to maintain at command code and also intuitive to use at prompt. Do you prefer set mmc dev number by command "mmc dev <num>" ? Should we depends one command on another? If yes, then what about e.g. fat or ext command set?
What I mean is ... for example, you pass dev_num to board_ums_init() . See the trats board, find_mmc_device() is called again in there. Why not just pass the *mmc directly?
Best regards, Marek Vasut

On 08/28/2013 01:03 PM, Marek Vasut wrote:
Dear Przemyslaw Marczak,
On 08/28/2013 10:44 AM, Marek Vasut wrote:
You still use dev_num further in the code, why not convert the whole thing to use *mmc ?
Best regards, Marek Vasut.
Hello, I don't know exactly what do you mean. I suppose that putting "mmc device number" as a parameter is easy to maintain at command code and also intuitive to use at prompt. Do you prefer set mmc dev number by command "mmc dev <num>" ? Should we depends one command on another? If yes, then what about e.g. fat or ext command set?
What I mean is ... for example, you pass dev_num to board_ums_init() . See the trats board, find_mmc_device() is called again in there. Why not just pass the *mmc directly?
Best regards, Marek Vasut.
Oh, now I see. You are absolutely right, it was just code duplication. I will change it and resend patch. Thank you,

Dear Przemyslaw Marczak,
On 08/28/2013 01:03 PM, Marek Vasut wrote:
Dear Przemyslaw Marczak,
On 08/28/2013 10:44 AM, Marek Vasut wrote:
You still use dev_num further in the code, why not convert the whole thing to use *mmc ?
Best regards, Marek Vasut.
Hello, I don't know exactly what do you mean. I suppose that putting "mmc device number" as a parameter is easy to maintain at command code and also intuitive to use at prompt. Do you prefer set mmc dev number by command "mmc dev <num>" ? Should we depends one command on another? If yes, then what about e.g. fat or ext command set?
What I mean is ... for example, you pass dev_num to board_ums_init() . See the trats board, find_mmc_device() is called again in there. Why not just pass the *mmc directly?
Best regards, Marek Vasut.
Oh, now I see. You are absolutely right, it was just code duplication. I will change it and resend patch.
Try and see if *mmc can not be passed all around instead of the dev_num too.
Best regards, Marek Vasut

Hi Minkyu,
On s5pc1xx mmc devices offset is multiply of 0x100000, wrong value was 0x10000. Register offset always points to mmc 0 before this change.
Add macro definition of mmc dev register offset to s5pc1xx and exynos mmc.
Could you review this patch, please?
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
arch/arm/include/asm/arch-exynos/mmc.h | 6 +++++- arch/arm/include/asm/arch-s5pc1xx/mmc.h | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/arch-exynos/mmc.h b/arch/arm/include/asm/arch-exynos/mmc.h index 96610b8..98312d1 100644 --- a/arch/arm/include/asm/arch-exynos/mmc.h +++ b/arch/arm/include/asm/arch-exynos/mmc.h @@ -8,6 +8,8 @@ #ifndef __ASM_ARCH_MMC_H_ #define __ASM_ARCH_MMC_H_
+#define S5P_MMC_DEV_OFFSET 0x10000
- #define SDHCI_CONTROL2 0x80 #define SDHCI_CONTROL3 0x84 #define SDHCI_CONTROL4 0x8C
@@ -55,7 +57,9 @@ int s5p_sdhci_init(u32 regbase, int index, int bus_width);
static inline unsigned int s5p_mmc_init(int index, int bus_width) {
- unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
- unsigned int base = samsung_get_base_mmc() +
(S5P_MMC_DEV_OFFSET * index);
- return s5p_sdhci_init(base, index, bus_width); } #endif
diff --git a/arch/arm/include/asm/arch-s5pc1xx/mmc.h b/arch/arm/include/asm/arch-s5pc1xx/mmc.h index 96610b8..55ff10b 100644 --- a/arch/arm/include/asm/arch-s5pc1xx/mmc.h +++ b/arch/arm/include/asm/arch-s5pc1xx/mmc.h @@ -8,6 +8,8 @@ #ifndef __ASM_ARCH_MMC_H_ #define __ASM_ARCH_MMC_H_
+#define S5P_MMC_DEV_OFFSET 0x100000
- #define SDHCI_CONTROL2 0x80 #define SDHCI_CONTROL3 0x84 #define SDHCI_CONTROL4 0x8C
@@ -55,7 +57,9 @@ int s5p_sdhci_init(u32 regbase, int index, int bus_width);
static inline unsigned int s5p_mmc_init(int index, int bus_width) {
- unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
- unsigned int base = samsung_get_base_mmc() +
(S5P_MMC_DEV_OFFSET * index);
- return s5p_sdhci_init(base, index, bus_width); } #endif

Looks good to me.
Acked-by: Jaehoon Chung jh80.chung@samsung.com
On 08/28/2013 04:11 PM, Przemyslaw Marczak wrote:
Hi Minkyu,
On s5pc1xx mmc devices offset is multiply of 0x100000, wrong value was 0x10000. Register offset always points to mmc 0 before this change.
Add macro definition of mmc dev register offset to s5pc1xx and exynos mmc.
Could you review this patch, please?
Signed-off-by: Przemyslaw Marczak p.marczak@samsung.com Signed-off-by: Kyungmin Park kyungmin.park@samsung.com CC: Minkyu Kang mk7.kang@samsung.com
arch/arm/include/asm/arch-exynos/mmc.h | 6 +++++- arch/arm/include/asm/arch-s5pc1xx/mmc.h | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/arm/include/asm/arch-exynos/mmc.h b/arch/arm/include/asm/arch-exynos/mmc.h index 96610b8..98312d1 100644 --- a/arch/arm/include/asm/arch-exynos/mmc.h +++ b/arch/arm/include/asm/arch-exynos/mmc.h @@ -8,6 +8,8 @@ #ifndef __ASM_ARCH_MMC_H_ #define __ASM_ARCH_MMC_H_
+#define S5P_MMC_DEV_OFFSET 0x10000
- #define SDHCI_CONTROL2 0x80 #define SDHCI_CONTROL3 0x84 #define SDHCI_CONTROL4 0x8C
@@ -55,7 +57,9 @@ int s5p_sdhci_init(u32 regbase, int index, int bus_width);
static inline unsigned int s5p_mmc_init(int index, int bus_width) {
- unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
- unsigned int base = samsung_get_base_mmc() +
(S5P_MMC_DEV_OFFSET * index);
} #endifreturn s5p_sdhci_init(base, index, bus_width);
diff --git a/arch/arm/include/asm/arch-s5pc1xx/mmc.h b/arch/arm/include/asm/arch-s5pc1xx/mmc.h index 96610b8..55ff10b 100644 --- a/arch/arm/include/asm/arch-s5pc1xx/mmc.h +++ b/arch/arm/include/asm/arch-s5pc1xx/mmc.h @@ -8,6 +8,8 @@ #ifndef __ASM_ARCH_MMC_H_ #define __ASM_ARCH_MMC_H_
+#define S5P_MMC_DEV_OFFSET 0x100000
- #define SDHCI_CONTROL2 0x80 #define SDHCI_CONTROL3 0x84 #define SDHCI_CONTROL4 0x8C
@@ -55,7 +57,9 @@ int s5p_sdhci_init(u32 regbase, int index, int bus_width);
static inline unsigned int s5p_mmc_init(int index, int bus_width) {
- unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
- unsigned int base = samsung_get_base_mmc() +
(S5P_MMC_DEV_OFFSET * index);
} #endifreturn s5p_sdhci_init(base, index, bus_width);
participants (4)
-
Jaehoon Chung
-
Marek Vasut
-
Minkyu Kang
-
Przemyslaw Marczak