Skip to contentSkip to conversation

tegra2: Use cmd_link_o_target in board Makefiles

PATCH New Stephen Warren 5 participants 16 messages Oct 12, 2011 – Oct 29, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH v6 1/5 tegra2: Use cmd_link_o_target in board Makefiles

v5: New patch

---
 board/nvidia/harmony/Makefile  |    2 +-
 board/nvidia/seaboard/Makefile |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
board/nvidia/harmony/Makefile +1 -1
index ebd8e02..aab185e 100644
@@ -37,7 +37,7 @@ SRCS	:= $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS))
 
 $(LIB):	$(obj).depend $(OBJS)
-	$(AR) $(ARFLAGS) $@ $(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
 
 clean:
 	rm -f $(OBJS)
board/nvidia/seaboard/Makefile +1 -1
index ebd8e02..aab185e 100644
@@ -37,7 +37,7 @@ SRCS	:= $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS))
 
 $(LIB):	$(obj).depend $(OBJS)
-	$(AR) $(ARFLAGS) $@ $(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
 
 clean:
 	rm -f $(OBJS)
Signature · 1 line
1.7.0.4
#1 lore raw

PATCH v6 1/5 tegra2: Use cmd_link_o_target in board Makefiles

Stephen Warren wrote at Wednesday, October 12, 2011 4:53 PM:

Quoted 1 line

[Patch series relating to SD/MMC support on Tegra boards.]

Does this patch series look good?

Since these are my first U-Boot patches, I'm not sure exactly who would pick these up and apply them (I assume the "ARM custodians", who are CC'd) nor what I should expect in terms of when they'd be applied.

Thanks.

Signature · 1 line
nvpublic
#2 lore raw

PATCH v6 1/5 tegra2: Use cmd_link_o_target in board Makefiles

Hi Tom,

Quoted 8 lines · Stephen Warren

Stephen Warren wrote at Wednesday, October 12, 2011 4:53 PM:

Quoted 1 line

[Patch series relating to SD/MMC support on Tegra boards.]

Does this patch series look good?

Since these are my first U-Boot patches, I'm not sure exactly who would pick these up and apply them (I assume the "ARM custodians", who are CC'd) nor what I should expect in terms of when they'd be applied.

This patch set looks good to me, and is the next series that needs to be applied to move Tegra along. I have based my latest series 'tegra2:
Tidy up boot path' on your series.

Albert are you happy to apply Stephen's patch series?

Regards,
Simon

Quoted 7 lines

Thanks.

--
nvpublic

#3 lore raw

PATCH v6 1/5 tegra2: Use cmd_link_o_target in board Makefiles

s/Hi Tom/Hi Stephen/

Quoted 36 lines

-----Original Message-----
From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
Sent: Tuesday, October 18, 2011 11:31 AM
To: Stephen Warren
Cc: albert.u.boot at aribaud.net; afleming at gmail.com; Tom Warren; U-Boot Mailing List; Mike Frysinger
Subject: Re: [PATCH v6 1/5] tegra2: Use cmd_link_o_target in board Makefiles

Hi Tom,

Quoted 8 lines · Stephen Warren

Stephen Warren wrote at Wednesday, October 12, 2011 4:53 PM:

Quoted 1 line

[Patch series relating to SD/MMC support on Tegra boards.]

Does this patch series look good?

Since these are my first U-Boot patches, I'm not sure exactly who would pick these up and apply them (I assume the "ARM custodians", who are CC'd) nor what I should expect in terms of when they'd be applied.

This patch set looks good to me, and is the next series that needs to be applied to move Tegra along. I have based my latest series 'tegra2:
Tidy up boot path' on your series.

Albert are you happy to apply Stephen's patch series?

Regards,
Simon

Quoted 7 lines

Thanks.

--
nvpublic

#4 lore raw

PATCH v6 1/5 tegra2: Use cmd_link_o_target in board Makefiles

Quoted 1 line · Tom Warren

s/Hi Tom/Hi Stephen/

Sorry! And my question was really directed to Albert.

Regards,
Simon

Quoted 38 lines
Quoted 37 lines

-----Original Message-----
From: sjg at google.com [mailto:sjg at google.com] On Behalf Of Simon Glass
Sent: Tuesday, October 18, 2011 11:31 AM
To: Stephen Warren
Cc: albert.u.boot at aribaud.net; afleming at gmail.com; Tom Warren; U-Boot Mailing List; Mike Frysinger
Subject: Re: [PATCH v6 1/5] tegra2: Use cmd_link_o_target in board Makefiles

Hi Tom,

Quoted 8 lines · Stephen Warren

Stephen Warren wrote at Wednesday, October 12, 2011 4:53 PM:

Quoted 1 line

[Patch series relating to SD/MMC support on Tegra boards.]

Does this patch series look good?

Since these are my first U-Boot patches, I'm not sure exactly who would pick these up and apply them (I assume the "ARM custodians", who are CC'd) nor what I should expect in terms of when they'd be applied.

This patch set looks good to me, and is the next series that needs to be applied to move Tegra along. I have based my latest series 'tegra2:
Tidy up boot path' ?on your series.

Albert are you happy to apply Stephen's patch series?

Regards,
Simon

Quoted 7 lines

Thanks.

--
nvpublic

#5 lore raw

PATCH v6 1/5 tegra2: Use cmd_link_o_target in board Makefiles

Hi Simon,

Le 18/10/2011 22:51, Simon Glass a ?crit :

Quoted 4 lines · Tom Warren
Quoted 1 line

s/Hi Tom/Hi Stephen/

Sorry! And my question was really directed to Albert.

Going up my backlog... for 2/4 and 4/5, as their are touching MMC driver code, I'd like Andy to ack them as the the MMC custodian, then I can apply the whole set (pending the MAINTAINER addition).

Quoted 2 lines

Regards,
Simon

Amicalement,

Signature · 1 line
Albert.
#6 lore raw

PATCH v6 1/5 tegra2: Use cmd_link_o_target in board Makefiles

Quoted 3 lines · Albert ARIBAUD

Going up my backlog... for 2/4 and 4/5, as their are touching MMC driver code, I'd like Andy to ack them as the the MMC custodian, then I can apply the whole set (pending the MAINTAINER addition).

i don't think this particular patch needs that much acknowledgement. but at any rate, this patch is obsolete now as a newer one has already been merged by Wolfgang.
-mike

#7 lore raw

PATCH v6 1/5 tegra2: Use cmd_link_o_target in board Makefiles

Hi,

Quoted 10 lines · Mike Frysinger
Quoted 3 lines · Albert ARIBAUD

Going up my backlog... for 2/4 and 4/5, as their are touching MMC driver code, I'd like Andy to ack them as the the MMC custodian, then I can apply the whole set (pending the MAINTAINER addition).

i don't think this particular patch needs that much acknowledgement. but at any rate, this patch is obsolete now as a newer one has already been merged by Wolfgang.
-mike

Yes this single patch can be dropped now, meaning that Stephen's series is now:

tegra2: Move MMC clock initialization into MMC driver
tegra2: Move board_mmc_init into board files
tegra2: Modify MMC driver to handle power and cd GPIOs
tegra2: Add support for Ventana

Regards,
Simon

#8 lore raw

PATCH v6 2/5 tegra2: Move MMC clock initialization into MMC driver

In reply to Stephen Warren

This centralizes knowledge of MMC clocking into the MMC driver. This also removes clock setup from the board files, which will simplify later changes that modify the Harmony board to support the correct set of MMC controllers.

---
 board/nvidia/common/board.c |   13 +------------
 drivers/mmc/tegra2_mmc.c    |   12 +++++++++---
 2 files changed, 10 insertions(+), 15 deletions(-)
board/nvidia/common/board.c +1 -12
index d13537d..370a259 100644
@@ -102,16 +102,6 @@ static void pin_mux_uart(void)
 
 #ifdef CONFIG_TEGRA2_MMC
 /*
- * Routine: clock_init_mmc
- * Description: init the PLL and clocks for the SDMMC controllers
- */
-static void clock_init_mmc(void)
-{
-	clock_start_periph_pll(PERIPH_ID_SDMMC4, CLOCK_ID_PERIPH, 20000000);
-	clock_start_periph_pll(PERIPH_ID_SDMMC3, CLOCK_ID_PERIPH, 20000000);
-}
-
-/*
  * Routine: pin_mux_mmc
  * Description: setup the pin muxes/tristate values for the SDMMC(s)
  */
@@ -157,8 +147,7 @@ int board_init(void)
 int board_mmc_init(bd_t *bd)
 {
 	debug("board_mmc_init called\n");
-	/* Enable clocks, muxes, etc. for SDMMC controllers */
-	clock_init_mmc();
+	/* Enable muxes, etc. for SDMMC controllers */
 	pin_mux_mmc();
 	gpio_config_mmc();
 
drivers/mmc/tegra2_mmc.c +9 -3
index 9e741f2..78b1190 100644
@@ -435,14 +435,22 @@ static int mmc_core_init(struct mmc *mmc)
 
 static int tegra2_mmc_initialize(int dev_index, int bus_width)
 {
+	struct mmc_host *host;
 	struct mmc *mmc;
 
 	debug(" mmc_initialize called\n");
 
+	host = &mmc_host[dev_index];
+
+	host->clock = 0;
+	tegra2_get_setup(host, dev_index);
+
+	clock_start_periph_pll(host->mmc_id, CLOCK_ID_PERIPH, 20000000);
+
 	mmc = &mmc_dev[dev_index];
 
 	sprintf(mmc->name, "Tegra2 SD/MMC");
-	mmc->priv = &mmc_host[dev_index];
+	mmc->priv = host;
 	mmc->send_cmd = mmc_send_cmd;
 	mmc->set_ios = mmc_set_ios;
 	mmc->init = mmc_core_init;
@@ -465,8 +473,6 @@ static int tegra2_mmc_initialize(int dev_index, int bus_width)
 	mmc->f_min = 375000;
 	mmc->f_max = 48000000;
 
-	mmc_host[dev_index].clock = 0;
-	tegra2_get_setup(&mmc_host[dev_index], dev_index);
 	mmc_register(mmc);
 
 	return 0;
Signature · 1 line
1.7.0.4
#9 lore raw

PATCH v6 2/5 tegra2: Move MMC clock initialization into MMC driver

Stephen Warren wrote at Wednesday, October 12, 2011 4:53 PM:

Quoted 3 lines

This centralizes knowledge of MMC clocking into the MMC driver. This also removes clock setup from the board files, which will simplify later changes that modify the Harmony board to support the correct set of MMC controllers.

Andy,

This patch touches an MMC driver. If you consider it OK, could you please Ack it so that Albert can apply the series to the ARM branch.

Thanks very much.

Quoted 78 lines
---
 board/nvidia/common/board.c |   13 +------------
 drivers/mmc/tegra2_mmc.c    |   12 +++++++++---
 2 files changed, 10 insertions(+), 15 deletions(-)
board/nvidia/common/board.c +1 -12
index d13537d..370a259 100644
@@ -102,16 +102,6 @@ static void pin_mux_uart(void)
 
 #ifdef CONFIG_TEGRA2_MMC
 /*
- * Routine: clock_init_mmc
- * Description: init the PLL and clocks for the SDMMC controllers
- */
-static void clock_init_mmc(void)
-{
-	clock_start_periph_pll(PERIPH_ID_SDMMC4, CLOCK_ID_PERIPH, 20000000);
-	clock_start_periph_pll(PERIPH_ID_SDMMC3, CLOCK_ID_PERIPH, 20000000);
-}
-
-/*
  * Routine: pin_mux_mmc
  * Description: setup the pin muxes/tristate values for the SDMMC(s)
  */
@@ -157,8 +147,7 @@ int board_init(void)
 int board_mmc_init(bd_t *bd)
 {
 	debug("board_mmc_init called\n");
-	/* Enable clocks, muxes, etc. for SDMMC controllers */
-	clock_init_mmc();
+	/* Enable muxes, etc. for SDMMC controllers */
 	pin_mux_mmc();
 	gpio_config_mmc();
 
drivers/mmc/tegra2_mmc.c +9 -4
index 9e741f2..78b1190 100644
@@ -435,14 +435,22 @@ static int mmc_core_init(struct mmc *mmc)
 
 static int tegra2_mmc_initialize(int dev_index, int bus_width)
 {
+	struct mmc_host *host;
 	struct mmc *mmc;
 
 	debug(" mmc_initialize called\n");
 
+	host = &mmc_host[dev_index];
+
+	host->clock = 0;
+	tegra2_get_setup(host, dev_index);
+
+	clock_start_periph_pll(host->mmc_id, CLOCK_ID_PERIPH, 20000000);
+
 	mmc = &mmc_dev[dev_index];
 
 	sprintf(mmc->name, "Tegra2 SD/MMC");
-	mmc->priv = &mmc_host[dev_index];
+	mmc->priv = host;
 	mmc->send_cmd = mmc_send_cmd;
 	mmc->set_ios = mmc_set_ios;
 	mmc->init = mmc_core_init;
@@ -465,8 +473,6 @@ static int tegra2_mmc_initialize(int dev_index, int bus_width)
 	mmc->f_min = 375000;
 	mmc->f_max = 48000000;
 
-	mmc_host[dev_index].clock = 0;
-	tegra2_get_setup(&mmc_host[dev_index], dev_index);
 	mmc_register(mmc);
 
 	return 0;
--

1.7.0.4

Signature · 1 line
nvpublic
#10 lore raw

PATCH v6 3/5 tegra2: Move board_mmc_init into board files

In reply to Stephen Warren

For Seaboard, this is mostly a cut/paste of board_mmc_init() and pin_mux_mmc() into seaboard.c; pin_mux_mmc() was modified to add some missing pinmux_tristate_disable calls for the GPIOs.

For Harmony, those functions were modified to configure SDMMC2 (index 2) instead of SDMMC3 (index 1), since that's what is present on the board.

However, harmony.c is still missing the required GPIO setup, so neither port is likely to function correctly yet. This will be fixed in the next change.

v4: Include board.h to prototype tegra2_mmc_init().

---
 board/nvidia/common/board.c      |   52 -----------------------------------
 board/nvidia/harmony/harmony.c   |   56 ++++++++++++++++++++++++++++++++++++++
 board/nvidia/seaboard/seaboard.c |   53 +++++++++++++++++++++++++++++++++++
 3 files changed, 109 insertions(+), 52 deletions(-)
board/nvidia/common/board.c +0 -52
index 370a259..0f12de2 100644
@@ -33,10 +33,6 @@
 #include <asm/arch/uart.h>
 #include "board.h"
 
-#ifdef CONFIG_TEGRA2_MMC
-#include <mmc.h>
-#endif
-
 DECLARE_GLOBAL_DATA_PTR;
 
 const struct tegra2_sysinfo sysinfo = {
@@ -100,33 +96,6 @@ static void pin_mux_uart(void)
 #endif	/* CONFIG_TEGRA2_ENABLE_UARTD */
 }
 
-#ifdef CONFIG_TEGRA2_MMC
-/*
- * Routine: pin_mux_mmc
- * Description: setup the pin muxes/tristate values for the SDMMC(s)
- */
-static void pin_mux_mmc(void)
-{
-	/* SDMMC4: config 3, x8 on 2nd set of pins */
-	pinmux_set_func(PINGRP_ATB, PMUX_FUNC_SDIO4);
-	pinmux_set_func(PINGRP_GMA, PMUX_FUNC_SDIO4);
-	pinmux_set_func(PINGRP_GME, PMUX_FUNC_SDIO4);
-
-	pinmux_tristate_disable(PINGRP_ATB);
-	pinmux_tristate_disable(PINGRP_GMA);
-	pinmux_tristate_disable(PINGRP_GME);
-
-	/* SDMMC3: SDIO3_CLK, SDIO3_CMD, SDIO3_DAT[3:0] */
-	pinmux_set_func(PINGRP_SDB, PMUX_FUNC_SDIO3);
-	pinmux_set_func(PINGRP_SDC, PMUX_FUNC_SDIO3);
-	pinmux_set_func(PINGRP_SDD, PMUX_FUNC_SDIO3);
-
-	pinmux_tristate_disable(PINGRP_SDC);
-	pinmux_tristate_disable(PINGRP_SDD);
-	pinmux_tristate_disable(PINGRP_SDB);
-}
-#endif
-
 /*
  * Routine: board_init
  * Description: Early hardware init.
@@ -142,27 +111,6 @@ int board_init(void)
 	return 0;
 }
 
-#ifdef CONFIG_TEGRA2_MMC
-/* this is a weak define that we are overriding */
-int board_mmc_init(bd_t *bd)
-{
-	debug("board_mmc_init called\n");
-	/* Enable muxes, etc. for SDMMC controllers */
-	pin_mux_mmc();
-	gpio_config_mmc();
-
-	debug("board_mmc_init: init eMMC\n");
-	/* init dev 0, eMMC chip, with 4-bit bus */
-	tegra2_mmc_init(0, 4);
-
-	debug("board_mmc_init: init SD slot\n");
-	/* init dev 1, SD slot, with 4-bit bus */
-	tegra2_mmc_init(1, 4);
-
-	return 0;
-}
-#endif
-
 #ifdef CONFIG_BOARD_EARLY_INIT_F
 int board_early_init_f(void)
 {
board/nvidia/harmony/harmony.c +56 -0

77 lines not on this page · raw message

board/nvidia/seaboard/seaboard.c +53 -0

75 lines not on this page · raw message

Signature · 1 line
1.7.0.4
#11 lore raw

PATCH v6 4/5 tegra2: Modify MMC driver to handle power and cd GPIOs

In reply to Stephen Warren

Pass the GPIO numbers for power and card detect to tegra2_mmc_init(), and modify that function to perform all required GPIO initialization. This removes the need for board files to perform these operations.

Move board_mmc_getcd() into tegra2_mmc.c now that the driver knows which GPIOs to use.

Update affected call-sites in seaboard.c and harmony.c. Note that this change should make all SD ports work on Harmony, since the required GPIO setup is now being performed.

v4: Fix prototype of tegra2_mmc_init() in board.h to match driver change.
Remove prototype of gpio_config_mmc() from board.h

---
 board/nvidia/common/board.h      |    3 +-
 board/nvidia/harmony/harmony.c   |   27 ++---------------------
 board/nvidia/seaboard/seaboard.c |   33 +----------------------------
 drivers/mmc/tegra2_mmc.c         |   42 ++++++++++++++++++++++++++++++++-----
 drivers/mmc/tegra2_mmc.h         |    4 ++-
 5 files changed, 45 insertions(+), 64 deletions(-)
board/nvidia/common/board.h +1 -2
index 344e702..35acbca 100644
@@ -26,7 +26,6 @@
 
 void tegra2_start(void);
 void gpio_config_uart(void);
-void gpio_config_mmc(void);
-int tegra2_mmc_init(int dev_index, int bus_width);
+int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio);
 
 #endif	/* BOARD_H */
board/nvidia/harmony/harmony.c +3 -24
index f2c3867..3cbe820 100644
@@ -25,6 +25,7 @@
 #include <asm/io.h>
 #include <asm/arch/tegra2.h>
 #include <asm/arch/pinmux.h>
+#include <asm/gpio.h>
 #ifdef CONFIG_TEGRA2_MMC
 #include <mmc.h>
 #endif
@@ -72,15 +73,6 @@ static void pin_mux_mmc(void)
 	pinmux_tristate_disable(PINGRP_ATC);
 }
 
-/*
- * Routine: gpio_config_mmc
- * Description: Set GPIOs for SD card
- */
-void gpio_config_mmc(void)
-{
-	/* Not implemented for now */
-}
-
 /* this is a weak define that we are overriding */
 int board_mmc_init(bd_t *bd)
 {
@@ -88,29 +80,16 @@ int board_mmc_init(bd_t *bd)
 
 	/* Enable muxes, etc. for SDMMC controllers */
 	pin_mux_mmc();
-	gpio_config_mmc();
 
 	debug("board_mmc_init: init SD slot J26\n");
 	/* init dev 0, SD slot J26, with 4-bit bus */
 	/* The board has an 8-bit bus, but 8-bit doesn't work yet */
-	tegra2_mmc_init(0, 4);
+	tegra2_mmc_init(0, 4, GPIO_PI6, GPIO_PH2);
 
 	debug("board_mmc_init: init SD slot J5\n");
 	/* init dev 2, SD slot J5, with 4-bit bus */
-	tegra2_mmc_init(2, 4);
+	tegra2_mmc_init(2, 4, GPIO_PT3, GPIO_PI5);
 
 	return 0;
 }
-
-/* this is a weak define that we are overriding */
-int board_mmc_getcd(u8 *cd, struct mmc *mmc)
-{
-	debug("board_mmc_getcd called\n");
-	/*
-	 * Hard-code CD presence for now. Need to add GPIO inputs
-	 * for Harmony
-	 */
-	*cd = 1;
-	return 0;
-}
 #endif
board/nvidia/seaboard/seaboard.c +2 -31
index 22a0e69..356d616 100644
@@ -87,19 +87,6 @@ static void pin_mux_mmc(void)
 	pinmux_tristate_disable(PINGRP_ATC);
 }
 
-/*
- * Routine: gpio_config_mmc
- * Description: Set GPIOs for SDMMC3 SDIO slot.
- */
-void gpio_config_mmc(void)
-{
-	/* Set EN_VDDIO_SD (GPIO I6) */
-	gpio_direction_output(GPIO_PI6, 1);
-
-	/* Config pin as GPI for Card Detect (GPIO I5) */
-	gpio_direction_input(GPIO_PI5);
-}
-
 /* this is a weak define that we are overriding */
 int board_mmc_init(bd_t *bd)
 {
@@ -107,31 +94,15 @@ int board_mmc_init(bd_t *bd)
 
 	/* Enable muxes, etc. for SDMMC controllers */
 	pin_mux_mmc();
-	gpio_config_mmc();
 
 	debug("board_mmc_init: init eMMC\n");
 	/* init dev 0, eMMC chip, with 4-bit bus */
 	/* The board has an 8-bit bus, but 8-bit doesn't work yet */
-	tegra2_mmc_init(0, 4);
+	tegra2_mmc_init(0, 4, -1, -1);
 
 	debug("board_mmc_init: init SD slot\n");
 	/* init dev 1, SD slot, with 4-bit bus */
-	tegra2_mmc_init(1, 4);
-
-	return 0;
-}
-
-/* this is a weak define that we are overriding */
-int board_mmc_getcd(u8 *cd, struct mmc *mmc)
-{
-	debug("board_mmc_getcd called\n");
-	*cd = 1;			/* Assume card is inserted, or eMMC */
-
-	if (IS_SD(mmc)) {
-		/* Seaboard SDMMC3 = SDIO3_CD = GPIO_PI5 */
-		if (gpio_get_value(GPIO_PI5))
-			*cd = 0;
-	}
+	tegra2_mmc_init(1, 4, GPIO_PI6, GPIO_PI5);
 
 	return 0;
 }
drivers/mmc/tegra2_mmc.c +36 -6

71 lines not on this page · raw message

drivers/mmc/tegra2_mmc.h +3 -1
index 28698e0..72f587b 100644
@@ -74,9 +74,11 @@ struct mmc_host {
 	unsigned int clock;	/* Current clock (MHz) */
 	unsigned int base;	/* Base address, SDMMC1/2/3/4 */
 	enum periph_id mmc_id;	/* Peripheral ID: PERIPH_ID_... */
+	int pwr_gpio;		/* Power GPIO */
+	int cd_gpio;		/* Change Detect GPIO */
 };
 
-int tegra2_mmc_init(int dev_index, int bus_width);
+int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio);
 
 #endif	/* __ASSEMBLY__ */
 #endif	/* __TEGRA2_MMC_H_ */
Signature · 1 line
1.7.0.4
#12 lore raw

PATCH v6 4/5 tegra2: Modify MMC driver to handle power and cd GPIOs

Stephen Warren wrote at Wednesday, October 12, 2011 4:53 PM:

Quoted 6 lines

Pass the GPIO numbers for power and card detect to tegra2_mmc_init(), and modify that function to perform all required GPIO initialization. This removes the need for board files to perform these operations.

Move board_mmc_getcd() into tegra2_mmc.c now that the driver knows which GPIOs to use.

Andy,

This patch touches an MMC driver. If you consider it OK, could you please Ack it so that Albert can apply the series to the ARM branch.

Thanks very much.

Quoted 245 lines

Update affected call-sites in seaboard.c and harmony.c. Note that this change should make all SD ports work on Harmony, since the required GPIO setup is now being performed.

v4: Fix prototype of tegra2_mmc_init() in board.h to match driver change.
Remove prototype of gpio_config_mmc() from board.h

---
 board/nvidia/common/board.h      |    3 +-
 board/nvidia/harmony/harmony.c   |   27 ++---------------------
 board/nvidia/seaboard/seaboard.c |   33 +----------------------------
 drivers/mmc/tegra2_mmc.c         |   42 ++++++++++++++++++++++++++++++++-----
 drivers/mmc/tegra2_mmc.h         |    4 ++-
 5 files changed, 45 insertions(+), 64 deletions(-)
board/nvidia/common/board.h +1 -2
index 344e702..35acbca 100644
@@ -26,7 +26,6 @@
 
 void tegra2_start(void);
 void gpio_config_uart(void);
-void gpio_config_mmc(void);
-int tegra2_mmc_init(int dev_index, int bus_width);
+int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio);
 
 #endif	/* BOARD_H */
board/nvidia/harmony/harmony.c +3 -24
index f2c3867..3cbe820 100644
@@ -25,6 +25,7 @@
 #include <asm/io.h>
 #include <asm/arch/tegra2.h>
 #include <asm/arch/pinmux.h>
+#include <asm/gpio.h>
 #ifdef CONFIG_TEGRA2_MMC
 #include <mmc.h>
 #endif
@@ -72,15 +73,6 @@ static void pin_mux_mmc(void)
 	pinmux_tristate_disable(PINGRP_ATC);
 }
 
-/*
- * Routine: gpio_config_mmc
- * Description: Set GPIOs for SD card
- */
-void gpio_config_mmc(void)
-{
-	/* Not implemented for now */
-}
-
 /* this is a weak define that we are overriding */
 int board_mmc_init(bd_t *bd)
 {
@@ -88,29 +80,16 @@ int board_mmc_init(bd_t *bd)
 
 	/* Enable muxes, etc. for SDMMC controllers */
 	pin_mux_mmc();
-	gpio_config_mmc();
 
 	debug("board_mmc_init: init SD slot J26\n");
 	/* init dev 0, SD slot J26, with 4-bit bus */
 	/* The board has an 8-bit bus, but 8-bit doesn't work yet */
-	tegra2_mmc_init(0, 4);
+	tegra2_mmc_init(0, 4, GPIO_PI6, GPIO_PH2);
 
 	debug("board_mmc_init: init SD slot J5\n");
 	/* init dev 2, SD slot J5, with 4-bit bus */
-	tegra2_mmc_init(2, 4);
+	tegra2_mmc_init(2, 4, GPIO_PT3, GPIO_PI5);
 
 	return 0;
 }
-
-/* this is a weak define that we are overriding */
-int board_mmc_getcd(u8 *cd, struct mmc *mmc)
-{
-	debug("board_mmc_getcd called\n");
-	/*
-	 * Hard-code CD presence for now. Need to add GPIO inputs
-	 * for Harmony
-	 */
-	*cd = 1;
-	return 0;
-}
 #endif
board/nvidia/seaboard/seaboard.c +2 -31
index 22a0e69..356d616 100644
@@ -87,19 +87,6 @@ static void pin_mux_mmc(void)
 	pinmux_tristate_disable(PINGRP_ATC);
 }
 
-/*
- * Routine: gpio_config_mmc
- * Description: Set GPIOs for SDMMC3 SDIO slot.
- */
-void gpio_config_mmc(void)
-{
-	/* Set EN_VDDIO_SD (GPIO I6) */
-	gpio_direction_output(GPIO_PI6, 1);
-
-	/* Config pin as GPI for Card Detect (GPIO I5) */
-	gpio_direction_input(GPIO_PI5);
-}
-
 /* this is a weak define that we are overriding */
 int board_mmc_init(bd_t *bd)
 {
@@ -107,31 +94,15 @@ int board_mmc_init(bd_t *bd)
 
 	/* Enable muxes, etc. for SDMMC controllers */
 	pin_mux_mmc();
-	gpio_config_mmc();
 
 	debug("board_mmc_init: init eMMC\n");
 	/* init dev 0, eMMC chip, with 4-bit bus */
 	/* The board has an 8-bit bus, but 8-bit doesn't work yet */
-	tegra2_mmc_init(0, 4);
+	tegra2_mmc_init(0, 4, -1, -1);
 
 	debug("board_mmc_init: init SD slot\n");
 	/* init dev 1, SD slot, with 4-bit bus */
-	tegra2_mmc_init(1, 4);
-
-	return 0;
-}
-
-/* this is a weak define that we are overriding */
-int board_mmc_getcd(u8 *cd, struct mmc *mmc)
-{
-	debug("board_mmc_getcd called\n");
-	*cd = 1;			/* Assume card is inserted, or eMMC */
-
-	if (IS_SD(mmc)) {
-		/* Seaboard SDMMC3 = SDIO3_CD = GPIO_PI5 */
-		if (gpio_get_value(GPIO_PI5))
-			*cd = 0;
-	}
+	tegra2_mmc_init(1, 4, GPIO_PI6, GPIO_PI5);
 
 	return 0;
 }
drivers/mmc/tegra2_mmc.c +36 -6
index 78b1190..3de9c5d 100644
@@ -21,6 +21,7 @@
 
 #include <common.h>
 #include <mmc.h>
+#include <asm/gpio.h>
 #include <asm/io.h>
 #include <asm/arch/clk_rst.h>
 #include <asm/arch/clock.h>
@@ -433,20 +434,37 @@ static int mmc_core_init(struct mmc *mmc)
 	return 0;
 }
 
-static int tegra2_mmc_initialize(int dev_index, int bus_width)
+int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio)
 {
 	struct mmc_host *host;
+	char gpusage[12]; /* "SD/MMCn PWR" or "SD/MMCn CD" */
 	struct mmc *mmc;
 
-	debug(" mmc_initialize called\n");
+	debug(" tegra2_mmc_init: index %d, bus width %d "
+		"pwr_gpio %d cd_gpio %d\n",
+		dev_index, bus_width, pwr_gpio, cd_gpio);
 
 	host = &mmc_host[dev_index];
 
 	host->clock = 0;
+	host->pwr_gpio = pwr_gpio;
+	host->cd_gpio = cd_gpio;
 	tegra2_get_setup(host, dev_index);
 
 	clock_start_periph_pll(host->mmc_id, CLOCK_ID_PERIPH, 20000000);
 
+	if (host->pwr_gpio >= 0) {
+		sprintf(gpusage, "SD/MMC%d PWR", dev_index);
+		gpio_request(host->pwr_gpio, gpusage);
+		gpio_direction_output(host->pwr_gpio, 1);
+	}
+
+	if (host->cd_gpio >= 0) {
+		sprintf(gpusage, "SD/MMC%d CD", dev_index);
+		gpio_request(host->cd_gpio, gpusage);
+		gpio_direction_input(host->cd_gpio);
+	}
+
 	mmc = &mmc_dev[dev_index];
 
 	sprintf(mmc->name, "Tegra2 SD/MMC");
@@ -478,9 +496,21 @@ static int tegra2_mmc_initialize(int dev_index, int bus_width)
 	return 0;
 }
 
-int tegra2_mmc_init(int dev_index, int bus_width)
+/* this is a weak define that we are overriding */
+int board_mmc_getcd(u8 *cd, struct mmc *mmc)
 {
-	debug(" tegra2_mmc_init: index %d, bus width %d\n",
-		dev_index, bus_width);
-	return tegra2_mmc_initialize(dev_index, bus_width);
+	struct mmc_host *host = (struct mmc_host *)mmc->priv;
+
+	debug("board_mmc_getcd called\n");
+
+	*cd = 1; /* Assume card is inserted, or eMMC */
+
+	if (IS_SD(mmc)) {
+		if (host->cd_gpio >= 0) {
+			if (gpio_get_value(host->cd_gpio))
+				*cd = 0;
+		}
+	}
+
+	return 0;
 }
drivers/mmc/tegra2_mmc.h +3 -2
index 28698e0..72f587b 100644
@@ -74,9 +74,11 @@ struct mmc_host {
 	unsigned int clock;	/* Current clock (MHz) */
 	unsigned int base;	/* Base address, SDMMC1/2/3/4 */
 	enum periph_id mmc_id;	/* Peripheral ID: PERIPH_ID_... */
+	int pwr_gpio;		/* Power GPIO */
+	int cd_gpio;		/* Change Detect GPIO */
 };
 
-int tegra2_mmc_init(int dev_index, int bus_width);
+int tegra2_mmc_init(int dev_index, int bus_width, int pwr_gpio, int cd_gpio);
 
 #endif	/* __ASSEMBLY__ */
 #endif	/* __TEGRA2_MMC_H_ */
--

1.7.0.4

Signature · 1 line
nvpublic
#13 lore raw

PATCH v6 5/5 tegra2: Add support for Ventana

In reply to Stephen Warren

Ventana is a board which is very similar to Seaboard. Support it by re-using board/nvidia/seaboard/seaboard.c with minor run-time conditionals.

v5: Makefile: Use cmd_link_o_target, remove unused clean/distclean targets.
v6: Make gpio_config_uart_seaboard() static.

---
 board/nvidia/seaboard/seaboard.c |   11 ++++++-
 board/nvidia/ventana/Makefile    |   49 +++++++++++++++++++++++++++++++++
 boards.cfg                       |    1 +
 include/configs/ventana.h        |   55 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 114 insertions(+), 2 deletions(-)
 create mode 100644 board/nvidia/ventana/Makefile
 create mode 100644 include/configs/ventana.h
board/nvidia/seaboard/seaboard.c +9 -2
index 356d616..aa77f12 100644
@@ -32,10 +32,10 @@
 #include "../common/board.h"
 
 /*
- * Routine: gpio_config_uart
+ * Routine: gpio_config_uart_seaboard
  * Description: Force GPIO_PI3 low on Seaboard so UART4 works.
  */
-void gpio_config_uart(void)
+static void gpio_config_uart_seaboard(void)
 {
 	int gp = GPIO_PI3;
 	struct gpio_ctlr *gpio = (struct gpio_ctlr *)NV_PA_GPIO_BASE;
@@ -56,6 +56,13 @@ void gpio_config_uart(void)
 	writel(val, &bank->gpio_dir_out[GPIO_PORT(gp)]);
 }
 
+void gpio_config_uart(void)
+{
+	if (machine_is_ventana())
+		return;
+	gpio_config_uart_seaboard();
+}
+
 #ifdef CONFIG_TEGRA2_MMC
 /*
  * Routine: pin_mux_mmc
board/nvidia/ventana/Makefile new file +49 -0

49 lines not on this page · raw message

boards.cfg +1 -0
index 65482ac..9211c0a 100644
@@ -192,6 +192,7 @@ s5pc210_universal            arm         armv7       universal_c210      samsung
 smdkv310		     arm	 armv7	     smdkv310		 samsung	s5pc2xx
 harmony                      arm         armv7       harmony             nvidia         tegra2
 seaboard                     arm         armv7       seaboard            nvidia         tegra2
+ventana                      arm         armv7       ventana             nvidia         tegra2
 u8500_href                   arm         armv7       u8500               st-ericsson    u8500
 actux1_4_16                  arm         ixp         actux1              -              -           actux1:FLASH2X2
 actux1_8_16                  arm         ixp         actux1              -              -           actux1:FLASH1X8
include/configs/ventana.h new file +55 -0

55 lines not on this page · raw message

Signature · 1 line
1.7.0.4
#14 lore raw

PATCH v6 5/5 tegra2: Add support for Ventana

Quoted 7 lines · Stephen Warren

Ventana is a board which is very similar to Seaboard. Support it by re-using board/nvidia/seaboard/seaboard.c with minor run-time conditionals.

v5: Makefile: Use cmd_link_o_target, remove unused clean/distclean targets.
v6: Make gpio_config_uart_seaboard() static.

Quoted 9 lines

---

?board/nvidia/seaboard/seaboard.c | ? 11 ++++++-
?board/nvidia/ventana/Makefile ? ?| ? 49 +++++++++++++++++++++++++++++++++
?boards.cfg ? ? ? ? ? ? ? ? ? ? ? | ? ?1 +
?include/configs/ventana.h ? ? ? ?| ? 55 ++++++++++++++++++++++++++++++++++++++

?4 files changed, 114 insertions(+), 2 deletions(-) ?create mode 100644 board/nvidia/ventana/Makefile ?create mode 100644 include/configs/ventana.h

#15 lore raw

PATCH v6 5/5 tegra2: Add support for Ventana

Hi Stephen,

Le 13/10/2011 01:05, Simon Glass a ?crit :

Quoted 19 lines · Stephen Warren
Quoted 7 lines

Ventana is a board which is very similar to Seaboard. Support it by re-using board/nvidia/seaboard/seaboard.c with minor run-time conditionals.

v5: Makefile: Use cmd_link_o_target, remove unused clean/distclean targets.
v6: Make gpio_config_uart_seaboard() static.

Quoted 8 lines
---
  board/nvidia/seaboard/seaboard.c |   11 ++++++-
  board/nvidia/ventana/Makefile    |   49 +++++++++++++++++++++++++++++++++
  boards.cfg                       |    1 +
  include/configs/ventana.h        |   55 ++++++++++++++++++++++++++++++++++++++
  4 files changed, 114 insertions(+), 2 deletions(-)

create mode 100644 board/nvidia/ventana/Makefile create mode 100644 include/configs/ventana.h

Please add an entry for this board in MAINTAINERS.

Amicalement,

Signature · 1 line
Albert.