ipq: Moved board params structure to qca common

Change-Id: I58ac138f4585a64bf1a89302ec212afe133c2101
Signed-off-by: Gokul Sriram Palanisamy <gokulsri@codeaurora.org>
diff --git a/arch/arm/include/asm/arch-qca-common/qca_common.h b/arch/arm/include/asm/arch-qca-common/qca_common.h
index fd5667e..376fdd9 100644
--- a/arch/arm/include/asm/arch-qca-common/qca_common.h
+++ b/arch/arm/include/asm/arch-qca-common/qca_common.h
@@ -15,6 +15,7 @@
 #define ___QCA_COMMON_H_
 #include <asm/u-boot.h>
 #include <asm/arch-qca-common/smem.h>
+#include <asm/arch-qca-common/gpio.h>
 
 #ifdef CONFIG_ARCH_IPQ5018
 #include <asm/arch-ipq5018/clk.h>
@@ -63,6 +64,23 @@
 	u32 val[2];
 } add_node_t;
 
+typedef struct qca_gpio_config gpio_func_data_t;
+
+typedef struct  {
+	gpio_func_data_t *gpio;
+	unsigned int gpio_count;
+}spi_cfg_t;
+
+typedef struct  {
+	gpio_func_data_t *gpio;
+	unsigned int gpio_count;
+}qpic_nand_cfg_t;
+
+typedef struct {
+	spi_cfg_t spi_nor_cfg;
+	qpic_nand_cfg_t qpic_nand_cfg;
+}board_param_t;
+
 int qca_mmc_init(bd_t *, qca_mmc *);
 
 #if defined(CONFIG_QCA_MMC) && !defined(CONFIG_SDHCI_SUPPORT)
diff --git a/arch/arm/include/asm/arch-qca-common/qpic_nand.h b/arch/arm/include/asm/arch-qca-common/qpic_nand.h
index 5a802c3..b05ee86 100644
--- a/arch/arm/include/asm/arch-qca-common/qpic_nand.h
+++ b/arch/arm/include/asm/arch-qca-common/qpic_nand.h
@@ -697,6 +697,6 @@
 	struct read_stats stats[QPIC_NAND_MAX_CWS_IN_PAGE];
 };
 
-void qpic_nand_init(void);
+void qpic_nand_init(qpic_nand_cfg_t *qpic_nand_cfg);
 
 #endif
diff --git a/board/qca/arm/ipq40xx/ipq40xx.c b/board/qca/arm/ipq40xx/ipq40xx.c
index 5ac247d..247aef2 100644
--- a/board/qca/arm/ipq40xx/ipq40xx.c
+++ b/board/qca/arm/ipq40xx/ipq40xx.c
@@ -158,7 +158,7 @@
 {
 	int gpio_node;
 
-	qpic_nand_init();
+	qpic_nand_init(NULL);
 
 	gpio_node = fdt_path_offset(gd->fdt_blob, "/spi/spi_gpio");
 	if (gpio_node >= 0) {
diff --git a/board/qca/arm/ipq40xx/ipq40xx.h b/board/qca/arm/ipq40xx/ipq40xx.h
index 37ebf01..3a83913 100644
--- a/board/qca/arm/ipq40xx/ipq40xx.h
+++ b/board/qca/arm/ipq40xx/ipq40xx.h
@@ -54,18 +54,6 @@
 } ipq40xx_edma_board_cfg_t;
 
 typedef struct {
-	int gpio;
-	unsigned int func;
-	unsigned int out;
-	unsigned int pull;
-	unsigned int drvstr;
-	unsigned int oe;
-	unsigned int gpio_vm;
-	unsigned int gpio_od_en;
-	unsigned int gpio_pu_res;
-} gpio_func_data_t;
-
-typedef struct {
 	unsigned int uart_dm_base;
 	gpio_func_data_t *dbg_uart_gpio;
 } uart_cfg_t;
diff --git a/board/qca/arm/ipq40xx/ipq40xx_board_param.h b/board/qca/arm/ipq40xx/ipq40xx_board_param.h
index a8c7b04..efaf946 100644
--- a/board/qca/arm/ipq40xx/ipq40xx_board_param.h
+++ b/board/qca/arm/ipq40xx/ipq40xx_board_param.h
@@ -26,9 +26,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 24,
@@ -36,9 +36,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 25,
@@ -46,9 +46,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 26,
@@ -56,9 +56,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 27,
@@ -66,9 +66,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 28,
@@ -76,9 +76,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 29,
@@ -86,9 +86,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 30,
@@ -96,9 +96,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 31,
@@ -106,9 +106,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 32,
@@ -116,9 +116,9 @@
 		.pull = GPIO_NO_PULL,
 		.drvstr = GPIO_10MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
@@ -130,9 +130,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 13,
@@ -140,9 +140,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 14,
@@ -150,9 +150,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 15,
@@ -160,9 +160,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
@@ -173,9 +173,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 53,
@@ -183,9 +183,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 54,
@@ -193,9 +193,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 55,
@@ -203,9 +203,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 56,
@@ -213,9 +213,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 57,
@@ -223,9 +223,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 58,
@@ -233,9 +233,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 59,
@@ -243,9 +243,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 60,
@@ -253,9 +253,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 61,
@@ -263,9 +263,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 62,
@@ -273,9 +273,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 63,
@@ -283,9 +283,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 64,
@@ -293,9 +293,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 65,
@@ -303,9 +303,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 66,
@@ -313,9 +313,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 67,
@@ -323,9 +323,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 68,
@@ -333,9 +333,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 69,
@@ -343,9 +343,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 
 };
@@ -357,9 +357,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 23,
@@ -367,9 +367,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 24,
@@ -377,9 +377,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 25,
@@ -387,9 +387,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 26,
@@ -397,9 +397,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 27,
@@ -407,9 +407,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 28,
@@ -417,9 +417,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 29,
@@ -427,9 +427,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 30,
@@ -437,9 +437,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 31,
@@ -447,9 +447,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 32,
@@ -457,9 +457,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 	{
 		.gpio = 33,
@@ -467,9 +467,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_16MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_DISABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES0
+		.vm = GPIO_VM_DISABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES0
 	},
 };
 
@@ -480,9 +480,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 7,
@@ -490,9 +490,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 47,
@@ -500,9 +500,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_ENABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
@@ -513,9 +513,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 7,
@@ -523,9 +523,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 67,
@@ -533,9 +533,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_ENABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
@@ -546,9 +546,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 7,
@@ -556,9 +556,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 19,
@@ -566,9 +566,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_ENABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
@@ -579,9 +579,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 7,
@@ -589,9 +589,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 41,
@@ -599,9 +599,9 @@
 		.pull = GPIO_PULL_DOWN,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_ENABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
@@ -612,9 +612,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 7,
@@ -622,9 +622,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
@@ -635,9 +635,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 53,
@@ -645,9 +645,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 59,
@@ -655,9 +655,9 @@
 		.pull = GPIO_NO_PULL,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_ENABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
@@ -668,9 +668,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 53,
@@ -678,9 +678,9 @@
 		.pull = GPIO_PULL_UP,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_DISABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 	{
 		.gpio = 62,
@@ -688,9 +688,9 @@
 		.pull = GPIO_NO_PULL,
 		.drvstr = GPIO_2MA,
 		.oe = GPIO_OE_ENABLE,
-		.gpio_vm = GPIO_VM_ENABLE,
-		.gpio_od_en = GPIO_OD_DISABLE,
-		.gpio_pu_res = GPIO_PULL_RES2
+		.vm = GPIO_VM_ENABLE,
+		.od_en = GPIO_OD_DISABLE,
+		.pu_res = GPIO_PULL_RES2
 	},
 };
 
diff --git a/board/qca/arm/ipq5018/ipq5018.c b/board/qca/arm/ipq5018/ipq5018.c
index 5e1222c..6890543 100644
--- a/board/qca/arm/ipq5018/ipq5018.c
+++ b/board/qca/arm/ipq5018/ipq5018.c
@@ -510,7 +510,7 @@
 
 void board_nand_init(void)
 {
-	qpic_nand_init();
+	qpic_nand_init(NULL);
 
 #ifdef CONFIG_QCA_SPI
 	int gpio_node;
diff --git a/board/qca/arm/ipq6018/ipq6018.c b/board/qca/arm/ipq6018/ipq6018.c
index 559a9ba..bfbcf07 100644
--- a/board/qca/arm/ipq6018/ipq6018.c
+++ b/board/qca/arm/ipq6018/ipq6018.c
@@ -371,7 +371,7 @@
 	int gpio_node;
 #endif
 
-	qpic_nand_init();
+	qpic_nand_init(NULL);
 
 #ifdef CONFIG_QCA_SPI
 	spi_clock_init();
diff --git a/board/qca/arm/ipq807x/ipq807x.c b/board/qca/arm/ipq807x/ipq807x.c
index b447b12..9c77d86 100644
--- a/board/qca/arm/ipq807x/ipq807x.c
+++ b/board/qca/arm/ipq807x/ipq807x.c
@@ -289,7 +289,7 @@
 	},
 };
 
-board_ipq807x_param_t gboard_param = {
+board_param_t gboard_param = {
 	.spi_nor_cfg = {
 		.gpio = spi_nor_gpio,
 		.gpio_count = ARRAY_SIZE(spi_nor_gpio),
@@ -762,10 +762,7 @@
 	int i;
 #endif
 
-	for (i = 0; i < gboard_param.qpic_nand_cfg.gpio_count; i++)
-		gpio_tlmm_config(&gboard_param.qpic_nand_cfg.gpio[i]);
-
-	qpic_nand_init();
+	qpic_nand_init(&gboard_param.qpic_nand_cfg);
 
 #ifdef CONFIG_QCA_SPI
 	gpio_node = fdt_path_offset(gd->fdt_blob, "/spi/spi_gpio");
diff --git a/board/qca/arm/ipq807x/ipq807x.h b/board/qca/arm/ipq807x/ipq807x.h
index 9ac86cd..b0d3685 100644
--- a/board/qca/arm/ipq807x/ipq807x.h
+++ b/board/qca/arm/ipq807x/ipq807x.h
@@ -306,23 +306,6 @@
 extern const char *del_node[];
 extern const add_node_t add_fdt_node[];
 
-typedef struct qca_gpio_config gpio_func_data_t;
-
-typedef struct  {
-	gpio_func_data_t *gpio;
-	unsigned int gpio_count;
-}spi_cfg_t;
-
-typedef struct  {
-	gpio_func_data_t *gpio;
-	unsigned int gpio_count;
-}qpic_nand_cfg_t;
-
-typedef struct {
-	spi_cfg_t spi_nor_cfg;
-	qpic_nand_cfg_t qpic_nand_cfg;
-}board_ipq807x_param_t;
-
 void reset_crashdump(void);
 #ifdef CONFIG_PCI_IPQ
 void board_pci_init(int id);
diff --git a/drivers/mtd/nand/qpic_nand.c b/drivers/mtd/nand/qpic_nand.c
index 0a36d58..dc1eb49 100644
--- a/drivers/mtd/nand/qpic_nand.c
+++ b/drivers/mtd/nand/qpic_nand.c
@@ -3144,7 +3144,7 @@
 
 static struct nand_chip nand_chip[CONFIG_SYS_MAX_NAND_DEVICE];
 
-void qpic_nand_init(void)
+void qpic_nand_init(qpic_nand_cfg_t *qpic_nand_cfg)
 {
 	struct mtd_info *mtd;
 	const struct udevice_id *of_match = qpic_ver_ids;
@@ -3155,6 +3155,7 @@
 	unsigned char *buf;
 	struct qpic_nand_init_config config;
 	fdt_addr_t nand_base;
+	int i;
 
 	while (of_match->compatible) {
 		ret = fdt_node_offset_by_compatible(gd->fdt_blob, 0,
@@ -3188,8 +3189,13 @@
 
 	if (ret >= 0) {
 		qca_gpio_init(ret);
+	} else if (qpic_nand_cfg) {
+		printf("Could not find nand_gpio in dts, using defaults\n");
+		for (i = 0; i < qpic_nand_cfg->gpio_count; i++)
+			gpio_tlmm_config(&qpic_nand_cfg->gpio[i]);
 	} else {
-		printf("Could not find subnode nand_gpio\n");
+		printf("Could not find nand_gpio in dts, no defaults defined\n");
+		return;
 	}
 
 #ifdef CONFIG_QPIC_SERIAL