diff mbox series

[U-Boot,2/3] ARM: imx6: configure ddrcode pins in spl DHCOM i.MX6 PDK

Message ID 1530775428-19269-2-git-send-email-lzenz@dh-electronics.de
State Accepted
Commit 659ca2dd08cc669a259c8205c8b4ac63b06911e6
Delegated to: Stefano Babic
Headers show
Series [U-Boot,1/3] Revert "ARM: imx6: Disable DDR DRAM calibration DHCOM i.MX6 PDK" | expand

Commit Message

Ludwig Zenz July 5, 2018, 7:23 a.m. UTC
From: Ludwig Zenz <lzenz@dh-electronics.de>

Preperation for conditional DDR3 initialization based on GPIO codes.

Signed-off-by: Ludwig Zenz <lzenz@dh-electronics.de>
---
 board/dhelectronics/dh_imx6/dh_imx6_spl.c | 40 +++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

Comments

Stefano Babic July 23, 2018, 9:31 a.m. UTC | #1
On 05/07/2018 09:23, lzenz@dh-electronics.de wrote:
> From: Ludwig Zenz <lzenz@dh-electronics.de>
> 
> Preperation for conditional DDR3 initialization based on GPIO codes.
> 
> Signed-off-by: Ludwig Zenz <lzenz@dh-electronics.de>
> ---
>  board/dhelectronics/dh_imx6/dh_imx6_spl.c | 40 +++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/board/dhelectronics/dh_imx6/dh_imx6_spl.c b/board/dhelectronics/dh_imx6/dh_imx6_spl.c
> index beda389..eafb86d 100644
> --- a/board/dhelectronics/dh_imx6/dh_imx6_spl.c
> +++ b/board/dhelectronics/dh_imx6/dh_imx6_spl.c
> @@ -208,6 +208,45 @@ static void setup_iomux_boardid(void)
>  	SETUP_IOMUX_PADS(hwcode_pads);
>  }
>  
> +/* DDR Code */
> +static iomux_v3_cfg_t const ddrcode_pads[] = {
> +	IOMUX_PADS(PAD_EIM_A16__GPIO2_IO22	| MUX_PAD_CTRL(GPIO_PAD_CTRL)),
> +	IOMUX_PADS(PAD_EIM_A17__GPIO2_IO21	| MUX_PAD_CTRL(GPIO_PAD_CTRL)),
> +};
> +
> +static void setup_iomux_ddrcode(void)
> +{
> +	/* ddr code pins */
> +	SETUP_IOMUX_PADS(ddrcode_pads);
> +}
> +
> +enum dhcom_ddr3_code {
> +	DH_DDR3_SIZE_256MIB = 0x00,
> +	DH_DDR3_SIZE_512MIB = 0x01,
> +	DH_DDR3_SIZE_1GIB   = 0x02,
> +	DH_DDR3_SIZE_2GIB   = 0x03
> +};
> +
> +#define DDR3_CODE_BIT_0   IMX_GPIO_NR(2, 22)
> +#define DDR3_CODE_BIT_1   IMX_GPIO_NR(2, 21)
> +
> +enum dhcom_ddr3_code dhcom_get_ddr3_code(void)
> +{
> +	enum dhcom_ddr3_code ddr3_code;
> +
> +	gpio_request(DDR3_CODE_BIT_0, "DDR3_CODE_BIT_0");
> +	gpio_request(DDR3_CODE_BIT_1, "DDR3_CODE_BIT_1");
> +
> +	gpio_direction_input(DDR3_CODE_BIT_0);
> +	gpio_direction_input(DDR3_CODE_BIT_1);
> +
> +	/* 256MB = 0b00; 512MB = 0b01; 1GB = 0b10; 2GB = 0b11 */
> +	ddr3_code = (!!gpio_get_value(DDR3_CODE_BIT_1) << 1)
> +	     | (!!gpio_get_value(DDR3_CODE_BIT_0));
> +
> +	return ddr3_code;
> +}
> +
>  /* GPIO */
>  static iomux_v3_cfg_t const gpio_pads[] = {
>  	IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02	| MUX_PAD_CTRL(GPIO_PAD_CTRL)),
> @@ -365,6 +404,7 @@ void board_init_f(ulong dummy)
>  	timer_init();
>  
>  	setup_iomux_boardid();
> +	setup_iomux_ddrcode();
>  	setup_iomux_gpio();
>  	setup_iomux_enet();
>  	setup_iomux_sd();
> 
Applied to u-boot-imx, thanks !

Best regards,
Stefano Babic
diff mbox series

Patch

diff --git a/board/dhelectronics/dh_imx6/dh_imx6_spl.c b/board/dhelectronics/dh_imx6/dh_imx6_spl.c
index beda389..eafb86d 100644
--- a/board/dhelectronics/dh_imx6/dh_imx6_spl.c
+++ b/board/dhelectronics/dh_imx6/dh_imx6_spl.c
@@ -208,6 +208,45 @@  static void setup_iomux_boardid(void)
 	SETUP_IOMUX_PADS(hwcode_pads);
 }
 
+/* DDR Code */
+static iomux_v3_cfg_t const ddrcode_pads[] = {
+	IOMUX_PADS(PAD_EIM_A16__GPIO2_IO22	| MUX_PAD_CTRL(GPIO_PAD_CTRL)),
+	IOMUX_PADS(PAD_EIM_A17__GPIO2_IO21	| MUX_PAD_CTRL(GPIO_PAD_CTRL)),
+};
+
+static void setup_iomux_ddrcode(void)
+{
+	/* ddr code pins */
+	SETUP_IOMUX_PADS(ddrcode_pads);
+}
+
+enum dhcom_ddr3_code {
+	DH_DDR3_SIZE_256MIB = 0x00,
+	DH_DDR3_SIZE_512MIB = 0x01,
+	DH_DDR3_SIZE_1GIB   = 0x02,
+	DH_DDR3_SIZE_2GIB   = 0x03
+};
+
+#define DDR3_CODE_BIT_0   IMX_GPIO_NR(2, 22)
+#define DDR3_CODE_BIT_1   IMX_GPIO_NR(2, 21)
+
+enum dhcom_ddr3_code dhcom_get_ddr3_code(void)
+{
+	enum dhcom_ddr3_code ddr3_code;
+
+	gpio_request(DDR3_CODE_BIT_0, "DDR3_CODE_BIT_0");
+	gpio_request(DDR3_CODE_BIT_1, "DDR3_CODE_BIT_1");
+
+	gpio_direction_input(DDR3_CODE_BIT_0);
+	gpio_direction_input(DDR3_CODE_BIT_1);
+
+	/* 256MB = 0b00; 512MB = 0b01; 1GB = 0b10; 2GB = 0b11 */
+	ddr3_code = (!!gpio_get_value(DDR3_CODE_BIT_1) << 1)
+	     | (!!gpio_get_value(DDR3_CODE_BIT_0));
+
+	return ddr3_code;
+}
+
 /* GPIO */
 static iomux_v3_cfg_t const gpio_pads[] = {
 	IOMUX_PADS(PAD_GPIO_2__GPIO1_IO02	| MUX_PAD_CTRL(GPIO_PAD_CTRL)),
@@ -365,6 +404,7 @@  void board_init_f(ulong dummy)
 	timer_init();
 
 	setup_iomux_boardid();
+	setup_iomux_ddrcode();
 	setup_iomux_gpio();
 	setup_iomux_enet();
 	setup_iomux_sd();