Skip to contentSkip to conversation

QE IO: Add initial data to pin configuration + read/write functions

PATCH New David Saada 4 participants 6 messages Mar 30, 2008 – Jul 16, 2008

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 QE IO: Add initial data to pin configuration + read/write functions

On the MPC83xx & MPC85xx architectures that have QE, add initial data to the pin configuration table (qe_iop_conf_tab). This is relevant for GPIO pins defined as output. One can setup a value of -1 to leave the value unchanged. QE initialization tables in all relevant boards were also replaced. In addition, add IO pin read & write functions.
This patch also includes commands for reading and writing parallel I/O ports (pario command).

 b/common/cmd_pario.c                      |   85 +++++++++
 board/freescale/mpc8323erdb/mpc8323erdb.c |   74 +++----
 board/freescale/mpc832xemds/mpc832xemds.c |   74 +++----
 board/freescale/mpc8360emds/mpc8360emds.c |  110 +++++------
 board/freescale/mpc8360erdk/mpc8360erdk.c |  280
+++++++++++++++---------------
 board/freescale/mpc8568mds/mpc8568mds.c   |  106 +++++------
 common/Makefile                           |    1 
 cpu/mpc83xx/cpu_init.c                    |    7 
 cpu/mpc83xx/qe_io.c                       |   59 +++++-
 cpu/mpc85xx/cpu_init.c                    |    7 
 cpu/mpc85xx/qe_io.c                       |   58 +++++-
 include/ioports.h                         |    8 
 12 files changed, 526 insertions(+), 343 deletions(-)
include/ioports.h +8 -0
@@ -60,6 +60,14 @@ typedef struct {
 	int		dir;
 	int		open_drain;
 	int		assign;
+	int		data;
 } qe_iop_conf_t;
 
 #define QE_IOP_TAB_END	(-1)
+
+void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign, 
+					 int data);
+void qe_read_iopin(u8 port, u8 pin, int *data);
+void qe_write_iopin(u8 port, u8 pin, int data);
+
+
cpu/mpc85xx/cpu_init.c +3 -4
@@ -39,15 +39,13 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef CONFIG_QE
 extern qe_iop_conf_t qe_iop_conf_tab[];
-extern void qe_config_iopin(u8 port, u8 pin, int dir,
-				int open_drain, int assign);
 extern void qe_init(uint qe_base);
 extern void qe_reset(void);
 
 static void config_qe_ioports(void)
 {
 	u8      port, pin;
-	int     dir, open_drain, assign;
+	int     dir, open_drain, assign, data;
 	int     i;
 
 	for (i = 0; qe_iop_conf_tab[i].assign != QE_IOP_TAB_END; i++) {
@@ -56,7 +54,8 @@ static void config_qe_ioports(void)
 		dir		= qe_iop_conf_tab[i].dir;
 		open_drain	= qe_iop_conf_tab[i].open_drain;
 		assign		= qe_iop_conf_tab[i].assign;
-		qe_config_iopin(port, pin, dir, open_drain, assign);
+		data		= qe_iop_conf_tab[i].data;
+		qe_config_iopin(port, pin, dir, open_drain, assign, data);
 	}
 }
 #endif
cpu/mpc85xx/qe_io.c +51 -7

80 lines not on this page · raw message

cpu/mpc83xx/cpu_init.c +3 -4
@@ -28,15 +28,13 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef CONFIG_QE
 extern qe_iop_conf_t qe_iop_conf_tab[];
-extern void qe_config_iopin(u8 port, u8 pin, int dir,
-			 int open_drain, int assign);
 extern void qe_init(uint qe_base);
 extern void qe_reset(void);
 
 static void config_qe_ioports(void)
 {
 	u8	port, pin;
-	int	dir, open_drain, assign;
+	int	dir, open_drain, assign, data;
 	int	i;
 
 	for (i = 0; qe_iop_conf_tab[i].assign != QE_IOP_TAB_END; i++) {
@@ -45,7 +43,8 @@ static void config_qe_ioports(void)
 		dir		= qe_iop_conf_tab[i].dir;
 		open_drain	= qe_iop_conf_tab[i].open_drain;
 		assign		= qe_iop_conf_tab[i].assign;
-		qe_config_iopin(port, pin, dir, open_drain, assign);
+		data		= qe_iop_conf_tab[i].data;
+		qe_config_iopin(port, pin, dir, open_drain, assign, data);
 	}
 }
 #endif
cpu/mpc83xx/qe_io.c +53 -6

80 lines not on this page · raw message

--- a/board/freescale/mpc8323erdb/mpc8323erdb.c 2008-03-28
01:49:12.000000000 +0200
+++ b/board/freescale/mpc8323erdb/mpc8323erdb.c 2008-03-30
15:54:25.959133000 +0300
@@ -23,47 +23,47 @@

const qe_iop_conf_t qe_iop_conf_tab[] = {
/* UCC3 */

-	{1,  0, 1, 0, 1}, /* TxD0 */
-	{1,  1, 1, 0, 1}, /* TxD1 */
-	{1,  2, 1, 0, 1}, /* TxD2 */
-	{1,  3, 1, 0, 1}, /* TxD3 */
-	{1,  9, 1, 0, 1}, /* TxER */
-	{1, 12, 1, 0, 1}, /* TxEN */
-	{3, 24, 2, 0, 1}, /* TxCLK->CLK10 */
-
-	{1,  4, 2, 0, 1}, /* RxD0 */
-	{1,  5, 2, 0, 1}, /* RxD1 */
-	{1,  6, 2, 0, 1}, /* RxD2 */
-	{1,  7, 2, 0, 1}, /* RxD3 */
-	{1,  8, 2, 0, 1}, /* RxER */

- {1, 10, 2, 0, 1}, /* RxDV */
- {0, 13, 2, 0, 1}, /* RxCLK->CLK9 */
- {1, 11, 2, 0, 1}, /* COL */
- {1, 13, 2, 0, 1}, /* CRS */

+	{1,  0, 1, 0, 1, -1}, /* TxD0 */
+	{1,  1, 1, 0, 1, -1}, /* TxD1 */
+	{1,  2, 1, 0, 1, -1}, /* TxD2 */
+	{1,  3, 1, 0, 1, -1}, /* TxD3 */
+	{1,  9, 1, 0, 1, -1}, /* TxER */
+	{1, 12, 1, 0, 1, -1}, /* TxEN */
+	{3, 24, 2, 0, 1, -1}, /* TxCLK->CLK10 */
+
+	{1,  4, 2, 0, 1, -1}, /* RxD0 */
+	{1,  5, 2, 0, 1, -1}, /* RxD1 */
+	{1,  6, 2, 0, 1, -1}, /* RxD2 */
+	{1,  7, 2, 0, 1, -1}, /* RxD3 */
+	{1,  8, 2, 0, 1, -1}, /* RxER */

+ {1, 10, 2, 0, 1, -1}, /* RxDV */
+ {0, 13, 2, 0, 1, -1}, /* RxCLK->CLK9 */
+ {1, 11, 2, 0, 1, -1}, /* COL */
+ {1, 13, 2, 0, 1, -1}, /* CRS */

/* UCC2 */
- {0, 18, 1, 0, 1}, /* TxD0 */
- {0, 19, 1, 0, 1}, /* TxD1 */
- {0, 20, 1, 0, 1}, /* TxD2 */
- {0, 21, 1, 0, 1}, /* TxD3 */
- {0, 27, 1, 0, 1}, /* TxER */
- {0, 30, 1, 0, 1}, /* TxEN */
- {3, 23, 2, 0, 1}, /* TxCLK->CLK3 */
-
- {0, 22, 2, 0, 1}, /* RxD0 */
- {0, 23, 2, 0, 1}, /* RxD1 */
- {0, 24, 2, 0, 1}, /* RxD2 */
- {0, 25, 2, 0, 1}, /* RxD3 */
- {0, 26, 1, 0, 1}, /* RxER */
- {0, 28, 2, 0, 1}, /* Rx_DV */
- {3, 21, 2, 0, 1}, /* RxCLK->CLK16 */
- {0, 29, 2, 0, 1}, /* COL */
- {0, 31, 2, 0, 1}, /* CRS */
+ {0, 18, 1, 0, 1, -1}, /* TxD0 */
+ {0, 19, 1, 0, 1, -1}, /* TxD1 */
+ {0, 20, 1, 0, 1, -1}, /* TxD2 */
+ {0, 21, 1, 0, 1, -1}, /* TxD3 */
+ {0, 27, 1, 0, 1, -1}, /* TxER */
+ {0, 30, 1, 0, 1, -1}, /* TxEN */
+ {3, 23, 2, 0, 1, -1}, /* TxCLK->CLK3 */
+
+ {0, 22, 2, 0, 1, -1}, /* RxD0 */
+ {0, 23, 2, 0, 1, -1}, /* RxD1 */
+ {0, 24, 2, 0, 1, -1}, /* RxD2 */
+ {0, 25, 2, 0, 1, -1}, /* RxD3 */
+ {0, 26, 1, 0, 1, -1}, /* RxER */
+ {0, 28, 2, 0, 1, -1}, /* Rx_DV */
+ {3, 21, 2, 0, 1, -1}, /* RxCLK->CLK16 */
+ {0, 29, 2, 0, 1, -1}, /* COL */
+ {0, 31, 2, 0, 1, -1}, /* CRS */

-	{3,  4, 3, 0, 2}, /* MDIO */
-	{3,  5, 1, 0, 2}, /* MDC */
+	{3,  4, 3, 0, 2, -1}, /* MDIO */
+	{3,  5, 1, 0, 2, -1}, /* MDC */

- {0, 0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+ {0, 0, 0, 0, QE_IOP_TAB_END, -1}, /* END of table */
};

int board_early_init_f(void)
--- a/board/freescale/mpc832xemds/mpc832xemds.c 2008-03-28
01:49:12.000000000 +0200
+++ b/board/freescale/mpc832xemds/mpc832xemds.c 2008-03-30
15:57:01.040395000 +0300
@@ -31,47 +31,47 @@

const qe_iop_conf_t qe_iop_conf_tab[] = {
/* ETH3 */

-	{1,  0, 1, 0, 1}, /* TxD0 */
-	{1,  1, 1, 0, 1}, /* TxD1 */
-	{1,  2, 1, 0, 1}, /* TxD2 */
-	{1,  3, 1, 0, 1}, /* TxD3 */
-	{1,  9, 1, 0, 1}, /* TxER */
-	{1, 12, 1, 0, 1}, /* TxEN */
-	{3, 24, 2, 0, 1}, /* TxCLK->CLK10 */
-
-	{1,  4, 2, 0, 1}, /* RxD0 */
-	{1,  5, 2, 0, 1}, /* RxD1 */
-	{1,  6, 2, 0, 1}, /* RxD2 */
-	{1,  7, 2, 0, 1}, /* RxD3 */
-	{1,  8, 2, 0, 1}, /* RxER */

- {1, 10, 2, 0, 1}, /* RxDV */
- {0, 13, 2, 0, 1}, /* RxCLK->CLK9 */
- {1, 11, 2, 0, 1}, /* COL */
- {1, 13, 2, 0, 1}, /* CRS */

+	{1,  0, 1, 0, 1, -1}, /* TxD0 */
+	{1,  1, 1, 0, 1, -1}, /* TxD1 */
+	{1,  2, 1, 0, 1, -1}, /* TxD2 */
+	{1,  3, 1, 0, 1, -1}, /* TxD3 */
+	{1,  9, 1, 0, 1, -1}, /* TxER */
+	{1, 12, 1, 0, 1, -1}, /* TxEN */
+	{3, 24, 2, 0, 1, -1}, /* TxCLK->CLK10 */
+
+	{1,  4, 2, 0, 1, -1}, /* RxD0 */
+	{1,  5, 2, 0, 1, -1}, /* RxD1 */
+	{1,  6, 2, 0, 1, -1}, /* RxD2 */
+	{1,  7, 2, 0, 1, -1}, /* RxD3 */
+	{1,  8, 2, 0, 1, -1}, /* RxER */

+ {1, 10, 2, 0, 1, -1}, /* RxDV */
+ {0, 13, 2, 0, 1, -1}, /* RxCLK->CLK9 */
+ {1, 11, 2, 0, 1, -1}, /* COL */
+ {1, 13, 2, 0, 1, -1}, /* CRS */

/* ETH4 */
- {1, 18, 1, 0, 1}, /* TxD0 */
- {1, 19, 1, 0, 1}, /* TxD1 */
- {1, 20, 1, 0, 1}, /* TxD2 */
- {1, 21, 1, 0, 1}, /* TxD3 */
- {1, 27, 1, 0, 1}, /* TxER */
- {1, 30, 1, 0, 1}, /* TxEN */
- {3, 6, 2, 0, 1}, /* TxCLK->CLK8 */
-
- {1, 22, 2, 0, 1}, /* RxD0 */
- {1, 23, 2, 0, 1}, /* RxD1 */
- {1, 24, 2, 0, 1}, /* RxD2 */
- {1, 25, 2, 0, 1}, /* RxD3 */
- {1, 26, 1, 0, 1}, /* RxER */
- {1, 28, 2, 0, 1}, /* Rx_DV */
- {3, 31, 2, 0, 1}, /* RxCLK->CLK7 */
- {1, 29, 2, 0, 1}, /* COL */
- {1, 31, 2, 0, 1}, /* CRS */
+ {1, 18, 1, 0, 1, -1}, /* TxD0 */
+ {1, 19, 1, 0, 1, -1}, /* TxD1 */
+ {1, 20, 1, 0, 1, -1}, /* TxD2 */
+ {1, 21, 1, 0, 1, -1}, /* TxD3 */
+ {1, 27, 1, 0, 1, -1}, /* TxER */
+ {1, 30, 1, 0, 1, -1}, /* TxEN */
+ {3, 6, 2, 0, 1, -1}, /* TxCLK->CLK8 */
+
+ {1, 22, 2, 0, 1, -1}, /* RxD0 */
+ {1, 23, 2, 0, 1, -1}, /* RxD1 */
+ {1, 24, 2, 0, 1, -1}, /* RxD2 */
+ {1, 25, 2, 0, 1, -1}, /* RxD3 */
+ {1, 26, 1, 0, 1, -1}, /* RxER */
+ {1, 28, 2, 0, 1, -1}, /* Rx_DV */
+ {3, 31, 2, 0, 1, -1}, /* RxCLK->CLK7 */
+ {1, 29, 2, 0, 1, -1}, /* COL */
+ {1, 31, 2, 0, 1, -1}, /* CRS */

-	{3,  4, 3, 0, 2}, /* MDIO */
-	{3,  5, 1, 0, 2}, /* MDC */
+	{3,  4, 3, 0, 2, -1}, /* MDIO */
+	{3,  5, 1, 0, 2, -1}, /* MDC */

- {0, 0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+ {0, 0, 0, 0, QE_IOP_TAB_END, -1}, /* END of table */
};

int board_early_init_f(void)
--- a/board/freescale/mpc8360emds/mpc8360emds.c 2008-03-28
01:49:12.000000000 +0200
+++ b/board/freescale/mpc8360emds/mpc8360emds.c 2008-03-30
15:57:20.682650000 +0300
@@ -30,63 +30,63 @@

const qe_iop_conf_t qe_iop_conf_tab[] = {
/* GETH1 */

-	{0,  3, 1, 0, 1}, /* TxD0 */
-	{0,  4, 1, 0, 1}, /* TxD1 */
-	{0,  5, 1, 0, 1}, /* TxD2 */
-	{0,  6, 1, 0, 1}, /* TxD3 */
-	{1,  6, 1, 0, 3}, /* TxD4 */
-	{1,  7, 1, 0, 1}, /* TxD5 */
-	{1,  9, 1, 0, 2}, /* TxD6 */

- {1, 10, 1, 0, 2}, /* TxD7 */
- {0, 9, 2, 0, 1}, /* RxD0 */
- {0, 10, 2, 0, 1}, /* RxD1 */
- {0, 11, 2, 0, 1}, /* RxD2 */
- {0, 12, 2, 0, 1}, /* RxD3 */
- {0, 13, 2, 0, 1}, /* RxD4 */

-	{1,  1, 2, 0, 2}, /* RxD5 */
-	{1,  0, 2, 0, 2}, /* RxD6 */
-	{1,  4, 2, 0, 2}, /* RxD7 */
-	{0,  7, 1, 0, 1}, /* TX_EN */
-	{0,  8, 1, 0, 1}, /* TX_ER */
-	{0, 15, 2, 0, 1}, /* RX_DV */
-	{0, 16, 2, 0, 1}, /* RX_ER */
-	{0,  0, 2, 0, 1}, /* RX_CLK */
-	{2,  9, 1, 0, 3}, /* GTX_CLK - CLK10 */
-	{2,  8, 2, 0, 1}, /* GTX125 - CLK9 */
+	{0,  3, 1, 0, 1, -1}, /* TxD0 */
+	{0,  4, 1, 0, 1, -1}, /* TxD1 */
+	{0,  5, 1, 0, 1, -1}, /* TxD2 */
+	{0,  6, 1, 0, 1, -1}, /* TxD3 */
+	{1,  6, 1, 0, 3, -1}, /* TxD4 */
+	{1,  7, 1, 0, 1, -1}, /* TxD5 */
+	{1,  9, 1, 0, 2, -1}, /* TxD6 */

+ {1, 10, 1, 0, 2, -1}, /* TxD7 */
+ {0, 9, 2, 0, 1, -1}, /* RxD0 */
+ {0, 10, 2, 0, 1, -1}, /* RxD1 */
+ {0, 11, 2, 0, 1, -1}, /* RxD2 */
+ {0, 12, 2, 0, 1, -1}, /* RxD3 */
+ {0, 13, 2, 0, 1, -1}, /* RxD4 */

+	{1,  1, 2, 0, 2, -1}, /* RxD5 */
+	{1,  0, 2, 0, 2, -1}, /* RxD6 */
+	{1,  4, 2, 0, 2, -1}, /* RxD7 */
+	{0,  7, 1, 0, 1, -1}, /* TX_EN */
+	{0,  8, 1, 0, 1, -1}, /* TX_ER */
+	{0, 15, 2, 0, 1, -1}, /* RX_DV */
+	{0, 16, 2, 0, 1, -1}, /* RX_ER */
+	{0,  0, 2, 0, 1, -1}, /* RX_CLK */
+	{2,  9, 1, 0, 3, -1}, /* GTX_CLK - CLK10 */
+	{2,  8, 2, 0, 1, -1}, /* GTX125 - CLK9 */

/* GETH2 */
- {0, 17, 1, 0, 1}, /* TxD0 */
- {0, 18, 1, 0, 1}, /* TxD1 */
- {0, 19, 1, 0, 1}, /* TxD2 */
- {0, 20, 1, 0, 1}, /* TxD3 */

-	{1,  2, 1, 0, 1}, /* TxD4 */
-	{1,  3, 1, 0, 2}, /* TxD5 */
-	{1,  5, 1, 0, 3}, /* TxD6 */
-	{1,  8, 1, 0, 3}, /* TxD7 */

- {0, 23, 2, 0, 1}, /* RxD0 */
- {0, 24, 2, 0, 1}, /* RxD1 */
- {0, 25, 2, 0, 1}, /* RxD2 */
- {0, 26, 2, 0, 1}, /* RxD3 */
- {0, 27, 2, 0, 1}, /* RxD4 */
- {1, 12, 2, 0, 2}, /* RxD5 */
- {1, 13, 2, 0, 3}, /* RxD6 */
- {1, 11, 2, 0, 2}, /* RxD7 */
- {0, 21, 1, 0, 1}, /* TX_EN */
- {0, 22, 1, 0, 1}, /* TX_ER */
- {0, 29, 2, 0, 1}, /* RX_DV */
- {0, 30, 2, 0, 1}, /* RX_ER */
- {0, 31, 2, 0, 1}, /* RX_CLK */
- {2, 2, 1, 0, 2}, /* GTX_CLK = CLK10 */
- {2, 3, 2, 0, 1}, /* GTX125 - CLK4 */
-
- {0, 1, 3, 0, 2}, /* MDIO */
- {0, 2, 1, 0, 1}, /* MDC */
-

-	{5,  0, 1, 0, 2}, /* UART2_SOUT */
-	{5,  1, 2, 0, 3}, /* UART2_CTS */
-	{5,  2, 1, 0, 1}, /* UART2_RTS */
-	{5,  3, 2, 0, 2}, /* UART2_SIN */

+ {0, 17, 1, 0, 1, -1}, /* TxD0 */
+ {0, 18, 1, 0, 1, -1}, /* TxD1 */
+ {0, 19, 1, 0, 1, -1}, /* TxD2 */
+ {0, 20, 1, 0, 1, -1}, /* TxD3 */

+	{1,  2, 1, 0, 1, -1}, /* TxD4 */
+	{1,  3, 1, 0, 2, -1}, /* TxD5 */
+	{1,  5, 1, 0, 3, -1}, /* TxD6 */
+	{1,  8, 1, 0, 3, -1}, /* TxD7 */

+ {0, 23, 2, 0, 1, -1}, /* RxD0 */
+ {0, 24, 2, 0, 1, -1}, /* RxD1 */
+ {0, 25, 2, 0, 1, -1}, /* RxD2 */
+ {0, 26, 2, 0, 1, -1}, /* RxD3 */
+ {0, 27, 2, 0, 1, -1}, /* RxD4 */
+ {1, 12, 2, 0, 2, -1}, /* RxD5 */
+ {1, 13, 2, 0, 3, -1}, /* RxD6 */
+ {1, 11, 2, 0, 2, -1}, /* RxD7 */
+ {0, 21, 1, 0, 1, -1}, /* TX_EN */
+ {0, 22, 1, 0, 1, -1}, /* TX_ER */
+ {0, 29, 2, 0, 1, -1}, /* RX_DV */
+ {0, 30, 2, 0, 1, -1}, /* RX_ER */
+ {0, 31, 2, 0, 1, -1}, /* RX_CLK */
+ {2, 2, 1, 0, 2, -1}, /* GTX_CLK = CLK10 */
+ {2, 3, 2, 0, 1, -1}, /* GTX125 - CLK4 */
+
+ {0, 1, 3, 0, 2, -1}, /* MDIO */
+ {0, 2, 1, 0, 1, -1}, /* MDC */
+

+	{5,  0, 1, 0, 2, -1}, /* UART2_SOUT */
+	{5,  1, 2, 0, 3, -1}, /* UART2_CTS */
+	{5,  2, 1, 0, 1, -1}, /* UART2_RTS */
+	{5,  3, 2, 0, 2, -1}, /* UART2_SIN */

- {0, 0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+ {0, 0, 0, 0, QE_IOP_TAB_END, -1}, /* END of table */
};

int board_early_init_f(void)
--- a/board/freescale/mpc8360erdk/mpc8360erdk.c 2008-03-28
01:49:12.000000000 +0200
+++ b/board/freescale/mpc8360erdk/mpc8360erdk.c 2008-03-30
15:57:40.425878000 +0300
@@ -26,165 +26,165 @@

const qe_iop_conf_t qe_iop_conf_tab[] = {
/* MDIO */

-	{0,  1, 3, 0, 2}, /* MDIO */
-	{0,  2, 1, 0, 1}, /* MDC */
+	{0,  1, 3, 0, 2, -1}, /* MDIO */
+	{0,  2, 1, 0, 1, -1}, /* MDC */

/* UCC1 - UEC (Gigabit) */

-	{0,  3, 1, 0, 1}, /* TxD0 */
-	{0,  4, 1, 0, 1}, /* TxD1 */
-	{0,  5, 1, 0, 1}, /* TxD2 */
-	{0,  6, 1, 0, 1}, /* TxD3 */
-	{0,  9, 2, 0, 1}, /* RxD0 */

- {0, 10, 2, 0, 1}, /* RxD1 */
- {0, 11, 2, 0, 1}, /* RxD2 */
- {0, 12, 2, 0, 1}, /* RxD3 */
- {0, 7, 1, 0, 1}, /* TX_EN */
- {0, 8, 1, 0, 1}, /* TX_ER */
- {0, 15, 2, 0, 1}, /* RX_DV */

-	{0,  0, 2, 0, 1}, /* RX_CLK */
-	{2,  9, 1, 0, 3}, /* GTX_CLK - CLK10 */
-	{2,  8, 2, 0, 1}, /* GTX125 - CLK9 */
+	{0,  3, 1, 0, 1, -1}, /* TxD0 */
+	{0,  4, 1, 0, 1, -1}, /* TxD1 */
+	{0,  5, 1, 0, 1, -1}, /* TxD2 */
+	{0,  6, 1, 0, 1, -1}, /* TxD3 */
+	{0,  9, 2, 0, 1, -1}, /* RxD0 */

+ {0, 10, 2, 0, 1, -1}, /* RxD1 */
+ {0, 11, 2, 0, 1, -1}, /* RxD2 */
+ {0, 12, 2, 0, 1, -1}, /* RxD3 */
+ {0, 7, 1, 0, 1, -1}, /* TX_EN */
+ {0, 8, 1, 0, 1, -1}, /* TX_ER */
+ {0, 15, 2, 0, 1, -1}, /* RX_DV */

+	{0,  0, 2, 0, 1, -1}, /* RX_CLK */
+	{2,  9, 1, 0, 3, -1}, /* GTX_CLK - CLK10 */
+	{2,  8, 2, 0, 1, -1}, /* GTX125 - CLK9 */

/* UCC2 - UEC (Gigabit) */
- {0, 17, 1, 0, 1}, /* TxD0 */
- {0, 18, 1, 0, 1}, /* TxD1 */
- {0, 19, 1, 0, 1}, /* TxD2 */
- {0, 20, 1, 0, 1}, /* TxD3 */
- {0, 23, 2, 0, 1}, /* RxD0 */
- {0, 24, 2, 0, 1}, /* RxD1 */
- {0, 25, 2, 0, 1}, /* RxD2 */
- {0, 26, 2, 0, 1}, /* RxD3 */
- {0, 21, 1, 0, 1}, /* TX_EN */
- {0, 22, 1, 0, 1}, /* TX_ER */
- {0, 29, 2, 0, 1}, /* RX_DV */
- {0, 31, 2, 0, 1}, /* RX_CLK */
- {2, 2, 1, 0, 2}, /* GTX_CLK - CLK10 */
- {2, 3, 2, 0, 1}, /* GTX125 - CLK4 */
+ {0, 17, 1, 0, 1, -1}, /* TxD0 */
+ {0, 18, 1, 0, 1, -1}, /* TxD1 */
+ {0, 19, 1, 0, 1, -1}, /* TxD2 */
+ {0, 20, 1, 0, 1, -1}, /* TxD3 */
+ {0, 23, 2, 0, 1, -1}, /* RxD0 */
+ {0, 24, 2, 0, 1, -1}, /* RxD1 */
+ {0, 25, 2, 0, 1, -1}, /* RxD2 */
+ {0, 26, 2, 0, 1, -1}, /* RxD3 */
+ {0, 21, 1, 0, 1, -1}, /* TX_EN */
+ {0, 22, 1, 0, 1, -1}, /* TX_ER */
+ {0, 29, 2, 0, 1, -1}, /* RX_DV */
+ {0, 31, 2, 0, 1, -1}, /* RX_CLK */
+ {2, 2, 1, 0, 2, -1}, /* GTX_CLK - CLK10 */
+ {2, 3, 2, 0, 1, -1}, /* GTX125 - CLK4 */

/* UCC7 - UEC */

-	{4,  0, 1, 0, 1}, /* TxD0 */
-	{4,  1, 1, 0, 1}, /* TxD1 */
-	{4,  2, 1, 0, 1}, /* TxD2 */
-	{4,  3, 1, 0, 1}, /* TxD3 */
-	{4,  6, 2, 0, 1}, /* RxD0 */
-	{4,  7, 2, 0, 1}, /* RxD1 */
-	{4,  8, 2, 0, 1}, /* RxD2 */
-	{4,  9, 2, 0, 1}, /* RxD3 */
-	{4,  4, 1, 0, 1}, /* TX_EN */
-	{4,  5, 1, 0, 1}, /* TX_ER */

- {4, 12, 2, 0, 1}, /* RX_DV */
- {4, 13, 2, 0, 1}, /* RX_ER */
- {4, 10, 2, 0, 1}, /* COL */
- {4, 11, 2, 0, 1}, /* CRS */
- {2, 18, 2, 0, 1}, /* TX_CLK - CLK19 */
- {2, 19, 2, 0, 1}, /* RX_CLK - CLK20 */

+	{4,  0, 1, 0, 1, -1}, /* TxD0 */
+	{4,  1, 1, 0, 1, -1}, /* TxD1 */
+	{4,  2, 1, 0, 1, -1}, /* TxD2 */
+	{4,  3, 1, 0, 1, -1}, /* TxD3 */
+	{4,  6, 2, 0, 1, -1}, /* RxD0 */
+	{4,  7, 2, 0, 1, -1}, /* RxD1 */
+	{4,  8, 2, 0, 1, -1}, /* RxD2 */
+	{4,  9, 2, 0, 1, -1}, /* RxD3 */
+	{4,  4, 1, 0, 1, -1}, /* TX_EN */
+	{4,  5, 1, 0, 1, -1}, /* TX_ER */

+ {4, 12, 2, 0, 1, -1}, /* RX_DV */
+ {4, 13, 2, 0, 1, -1}, /* RX_ER */
+ {4, 10, 2, 0, 1, -1}, /* COL */
+ {4, 11, 2, 0, 1, -1}, /* CRS */
+ {2, 18, 2, 0, 1, -1}, /* TX_CLK - CLK19 */
+ {2, 19, 2, 0, 1, -1}, /* RX_CLK - CLK20 */

/* UCC4 - UEC */
- {1, 14, 1, 0, 1}, /* TxD0 */
- {1, 15, 1, 0, 1}, /* TxD1 */
- {1, 16, 1, 0, 1}, /* TxD2 */
- {1, 17, 1, 0, 1}, /* TxD3 */
- {1, 20, 2, 0, 1}, /* RxD0 */
- {1, 21, 2, 0, 1}, /* RxD1 */
- {1, 22, 2, 0, 1}, /* RxD2 */
- {1, 23, 2, 0, 1}, /* RxD3 */
- {1, 18, 1, 0, 1}, /* TX_EN */
- {1, 19, 1, 0, 2}, /* TX_ER */
- {1, 26, 2, 0, 1}, /* RX_DV */
- {1, 27, 2, 0, 1}, /* RX_ER */
- {1, 24, 2, 0, 1}, /* COL */
- {1, 25, 2, 0, 1}, /* CRS */
- {2, 6, 2, 0, 1}, /* TX_CLK - CLK7 */
- {2, 7, 2, 0, 1}, /* RX_CLK - CLK8 */
+ {1, 14, 1, 0, 1, -1}, /* TxD0 */
+ {1, 15, 1, 0, 1, -1}, /* TxD1 */
+ {1, 16, 1, 0, 1, -1}, /* TxD2 */
+ {1, 17, 1, 0, 1, -1}, /* TxD3 */
+ {1, 20, 2, 0, 1, -1}, /* RxD0 */
+ {1, 21, 2, 0, 1, -1}, /* RxD1 */
+ {1, 22, 2, 0, 1, -1}, /* RxD2 */
+ {1, 23, 2, 0, 1, -1}, /* RxD3 */
+ {1, 18, 1, 0, 1, -1}, /* TX_EN */
+ {1, 19, 1, 0, 2, -1}, /* TX_ER */
+ {1, 26, 2, 0, 1, -1}, /* RX_DV */
+ {1, 27, 2, 0, 1, -1}, /* RX_ER */
+ {1, 24, 2, 0, 1, -1}, /* COL */
+ {1, 25, 2, 0, 1, -1}, /* CRS */
+ {2, 6, 2, 0, 1, -1}, /* TX_CLK - CLK7 */
+ {2, 7, 2, 0, 1, -1}, /* RX_CLK - CLK8 */

/* PCI1 */

-	{5,  4, 2, 0, 3}, /* PCI_M66EN */
-	{5,  5, 1, 0, 3}, /* PCI_INTA */
-	{5,  6, 1, 0, 3}, /* PCI_RSTO */
-	{5,  7, 3, 0, 3}, /* PCI_C_BE0 */
-	{5,  8, 3, 0, 3}, /* PCI_C_BE1 */
-	{5,  9, 3, 0, 3}, /* PCI_C_BE2 */

- {5, 10, 3, 0, 3}, /* PCI_C_BE3 */
- {5, 11, 3, 0, 3}, /* PCI_PAR */
- {5, 12, 3, 0, 3}, /* PCI_FRAME */
- {5, 13, 3, 0, 3}, /* PCI_TRDY */
- {5, 14, 3, 0, 3}, /* PCI_IRDY */
- {5, 15, 3, 0, 3}, /* PCI_STOP */
- {5, 16, 3, 0, 3}, /* PCI_DEVSEL */
- {5, 17, 0, 0, 0}, /* PCI_IDSEL */
- {5, 18, 3, 0, 3}, /* PCI_SERR */
- {5, 19, 3, 0, 3}, /* PCI_PERR */
- {5, 20, 3, 0, 3}, /* PCI_REQ0 */
- {5, 21, 2, 0, 3}, /* PCI_REQ1 */
- {5, 22, 2, 0, 3}, /* PCI_GNT2 */
- {5, 23, 3, 0, 3}, /* PCI_GNT0 */
- {5, 24, 1, 0, 3}, /* PCI_GNT1 */
- {5, 25, 1, 0, 3}, /* PCI_GNT2 */
- {5, 26, 0, 0, 0}, /* PCI_CLK0 */
- {5, 27, 0, 0, 0}, /* PCI_CLK1 */
- {5, 28, 0, 0, 0}, /* PCI_CLK2 */
- {5, 29, 0, 0, 3}, /* PCI_SYNC_OUT */

-	{6,  0, 3, 0, 3}, /* PCI_AD0 */
-	{6,  1, 3, 0, 3}, /* PCI_AD1 */
-	{6,  2, 3, 0, 3}, /* PCI_AD2 */
-	{6,  3, 3, 0, 3}, /* PCI_AD3 */
-	{6,  4, 3, 0, 3}, /* PCI_AD4 */
-	{6,  5, 3, 0, 3}, /* PCI_AD5 */
-	{6,  6, 3, 0, 3}, /* PCI_AD6 */
-	{6,  7, 3, 0, 3}, /* PCI_AD7 */
-	{6,  8, 3, 0, 3}, /* PCI_AD8 */
-	{6,  9, 3, 0, 3}, /* PCI_AD9 */

- {6, 10, 3, 0, 3}, /* PCI_AD10 */
- {6, 11, 3, 0, 3}, /* PCI_AD11 */
- {6, 12, 3, 0, 3}, /* PCI_AD12 */
- {6, 13, 3, 0, 3}, /* PCI_AD13 */
- {6, 14, 3, 0, 3}, /* PCI_AD14 */
- {6, 15, 3, 0, 3}, /* PCI_AD15 */
- {6, 16, 3, 0, 3}, /* PCI_AD16 */
- {6, 17, 3, 0, 3}, /* PCI_AD17 */
- {6, 18, 3, 0, 3}, /* PCI_AD18 */
- {6, 19, 3, 0, 3}, /* PCI_AD19 */
- {6, 20, 3, 0, 3}, /* PCI_AD20 */
- {6, 21, 3, 0, 3}, /* PCI_AD21 */
- {6, 22, 3, 0, 3}, /* PCI_AD22 */
- {6, 23, 3, 0, 3}, /* PCI_AD23 */
- {6, 24, 3, 0, 3}, /* PCI_AD24 */
- {6, 25, 3, 0, 3}, /* PCI_AD25 */
- {6, 26, 3, 0, 3}, /* PCI_AD26 */
- {6, 27, 3, 0, 3}, /* PCI_AD27 */
- {6, 28, 3, 0, 3}, /* PCI_AD28 */
- {6, 29, 3, 0, 3}, /* PCI_AD29 */
- {6, 30, 3, 0, 3}, /* PCI_AD30 */
- {6, 31, 3, 0, 3}, /* PCI_AD31 */

+	{5,  4, 2, 0, 3, -1}, /* PCI_M66EN */
+	{5,  5, 1, 0, 3, -1}, /* PCI_INTA */
+	{5,  6, 1, 0, 3, -1}, /* PCI_RSTO */
+	{5,  7, 3, 0, 3, -1}, /* PCI_C_BE0 */
+	{5,  8, 3, 0, 3, -1}, /* PCI_C_BE1 */
+	{5,  9, 3, 0, 3, -1}, /* PCI_C_BE2 */

+ {5, 10, 3, 0, 3, -1}, /* PCI_C_BE3 */
+ {5, 11, 3, 0, 3, -1}, /* PCI_PAR */
+ {5, 12, 3, 0, 3, -1}, /* PCI_FRAME */
+ {5, 13, 3, 0, 3, -1}, /* PCI_TRDY */
+ {5, 14, 3, 0, 3, -1}, /* PCI_IRDY */
+ {5, 15, 3, 0, 3, -1}, /* PCI_STOP */
+ {5, 16, 3, 0, 3, -1}, /* PCI_DEVSEL */
+ {5, 17, 0, 0, 0, -1}, /* PCI_IDSEL */
+ {5, 18, 3, 0, 3, -1}, /* PCI_SERR */
+ {5, 19, 3, 0, 3, -1}, /* PCI_PERR */
+ {5, 20, 3, 0, 3, -1}, /* PCI_REQ0 */
+ {5, 21, 2, 0, 3, -1}, /* PCI_REQ1 */
+ {5, 22, 2, 0, 3, -1}, /* PCI_GNT2 */
+ {5, 23, 3, 0, 3, -1}, /* PCI_GNT0 */
+ {5, 24, 1, 0, 3, -1}, /* PCI_GNT1 */
+ {5, 25, 1, 0, 3, -1}, /* PCI_GNT2 */
+ {5, 26, 0, 0, 0, -1}, /* PCI_CLK0 */
+ {5, 27, 0, 0, 0, -1}, /* PCI_CLK1 */
+ {5, 28, 0, 0, 0, -1}, /* PCI_CLK2 */
+ {5, 29, 0, 0, 3, -1}, /* PCI_SYNC_OUT */

+	{6,  0, 3, 0, 3, -1}, /* PCI_AD0 */
+	{6,  1, 3, 0, 3, -1}, /* PCI_AD1 */
+	{6,  2, 3, 0, 3, -1}, /* PCI_AD2 */
+	{6,  3, 3, 0, 3, -1}, /* PCI_AD3 */
+	{6,  4, 3, 0, 3, -1}, /* PCI_AD4 */
+	{6,  5, 3, 0, 3, -1}, /* PCI_AD5 */
+	{6,  6, 3, 0, 3, -1}, /* PCI_AD6 */
+	{6,  7, 3, 0, 3, -1}, /* PCI_AD7 */
+	{6,  8, 3, 0, 3, -1}, /* PCI_AD8 */
+	{6,  9, 3, 0, 3, -1}, /* PCI_AD9 */

+ {6, 10, 3, 0, 3, -1}, /* PCI_AD10 */
+ {6, 11, 3, 0, 3, -1}, /* PCI_AD11 */
+ {6, 12, 3, 0, 3, -1}, /* PCI_AD12 */
+ {6, 13, 3, 0, 3, -1}, /* PCI_AD13 */
+ {6, 14, 3, 0, 3, -1}, /* PCI_AD14 */
+ {6, 15, 3, 0, 3, -1}, /* PCI_AD15 */
+ {6, 16, 3, 0, 3, -1}, /* PCI_AD16 */
+ {6, 17, 3, 0, 3, -1}, /* PCI_AD17 */
+ {6, 18, 3, 0, 3, -1}, /* PCI_AD18 */
+ {6, 19, 3, 0, 3, -1}, /* PCI_AD19 */
+ {6, 20, 3, 0, 3, -1}, /* PCI_AD20 */
+ {6, 21, 3, 0, 3, -1}, /* PCI_AD21 */
+ {6, 22, 3, 0, 3, -1}, /* PCI_AD22 */
+ {6, 23, 3, 0, 3, -1}, /* PCI_AD23 */
+ {6, 24, 3, 0, 3, -1}, /* PCI_AD24 */
+ {6, 25, 3, 0, 3, -1}, /* PCI_AD25 */
+ {6, 26, 3, 0, 3, -1}, /* PCI_AD26 */
+ {6, 27, 3, 0, 3, -1}, /* PCI_AD27 */
+ {6, 28, 3, 0, 3, -1}, /* PCI_AD28 */
+ {6, 29, 3, 0, 3, -1}, /* PCI_AD29 */
+ {6, 30, 3, 0, 3, -1}, /* PCI_AD30 */
+ {6, 31, 3, 0, 3, -1}, /* PCI_AD31 */

/* NAND */
- {4, 18, 2, 0, 0}, /* NAND_RYnBY */
+ {4, 18, 2, 0, 0, -1}, /* NAND_RYnBY */

/* DUART - UART2 */

-	{5,  0, 1, 0, 2}, /* UART2_SOUT */
-	{5,  2, 1, 0, 1}, /* UART2_RTS */
-	{5,  3, 2, 0, 2}, /* UART2_SIN */
-	{5,  1, 2, 0, 3}, /* UART2_CTS */
+	{5,  0, 1, 0, 2, -1}, /* UART2_SOUT */
+	{5,  2, 1, 0, 1, -1}, /* UART2_RTS */
+	{5,  3, 2, 0, 2, -1}, /* UART2_SIN */
+	{5,  1, 2, 0, 3, -1}, /* UART2_CTS */

/* UCC5 - UART3 */

-	{3,  0, 1, 0, 1}, /* UART3_TX */
-	{3,  4, 1, 0, 1}, /* UART3_RTS */
-	{3,  6, 2, 0, 1}, /* UART3_RX */
-	{3, 12, 2, 0, 0}, /* UART3_CTS */
-	{3, 13, 2, 0, 0}, /* UCC5_CD */
+	{3,  0, 1, 0, 1, -1}, /* UART3_TX */
+	{3,  4, 1, 0, 1, -1}, /* UART3_RTS */
+	{3,  6, 2, 0, 1, -1}, /* UART3_RX */

+ {3, 12, 2, 0, 0, -1}, /* UART3_CTS */
+ {3, 13, 2, 0, 0, -1}, /* UCC5_CD */

/* UCC6 - UART4 */
- {3, 14, 1, 0, 1}, /* UART4_TX */
- {3, 18, 1, 0, 1}, /* UART4_RTS */
- {3, 20, 2, 0, 1}, /* UART4_RX */
- {3, 26, 2, 0, 0}, /* UART4_CTS */
- {3, 27, 2, 0, 0}, /* UCC6_CD */
+ {3, 14, 1, 0, 1, -1}, /* UART4_TX */
+ {3, 18, 1, 0, 1, -1}, /* UART4_RTS */
+ {3, 20, 2, 0, 1, -1}, /* UART4_RX */
+ {3, 26, 2, 0, 0, -1}, /* UART4_CTS */
+ {3, 27, 2, 0, 0, -1}, /* UCC6_CD */

/* Fujitsu MB86277 (MINT) graphics controller */
- {0, 30, 1, 0, 0}, /* nSRESET_GRAPHICS */
- {1, 5, 1, 0, 0}, /* nXRST_GRAPHICS */
- {1, 7, 1, 0, 0}, /* LVDS_BKLT_CTR */
- {2, 16, 1, 0, 0}, /* LVDS_BKLT_EN */
+ {0, 30, 1, 0, 0, -1}, /* nSRESET_GRAPHICS */
+ {1, 5, 1, 0, 0, -1}, /* nXRST_GRAPHICS */
+ {1, 7, 1, 0, 0, -1}, /* LVDS_BKLT_CTR */
+ {2, 16, 1, 0, 0, -1}, /* LVDS_BKLT_EN */

/* AD7843 ADC/Touchscreen controller */ {4, 14, 1, 0, 0}, /* SPI_nCS0 */
@@ -204,7 +204,7 @@ const qe_iop_conf_t qe_iop_conf_tab[] =
{4, 21, 1, 0, 0}, /* SUSPND */

/* END of table */
- {0, 0, 0, 0, QE_IOP_TAB_END},
+ {0, 0, 0, 0, QE_IOP_TAB_END, -1},
};

int board_early_init_f(void)
--- a/board/freescale/mpc8568mds/mpc8568mds.c 2008-03-28 01:49:12.000000000
+0200
+++ b/board/freescale/mpc8568mds/mpc8568mds.c 2008-03-30 15:57:57.592361000
+0300
@@ -37,64 +37,64 @@

const qe_iop_conf_t qe_iop_conf_tab[] = {
/* GETH1 */
- {4, 10, 1, 0, 2}, /* TxD0 */

-	{4,  9, 1, 0, 2}, /* TxD1 */
-	{4,  8, 1, 0, 2}, /* TxD2 */
-	{4,  7, 1, 0, 2}, /* TxD3 */

- {4, 23, 1, 0, 2}, /* TxD4 */
- {4, 22, 1, 0, 2}, /* TxD5 */
- {4, 21, 1, 0, 2}, /* TxD6 */
- {4, 20, 1, 0, 2}, /* TxD7 */
- {4, 15, 2, 0, 2}, /* RxD0 */
- {4, 14, 2, 0, 2}, /* RxD1 */
- {4, 13, 2, 0, 2}, /* RxD2 */
- {4, 12, 2, 0, 2}, /* RxD3 */
- {4, 29, 2, 0, 2}, /* RxD4 */
- {4, 28, 2, 0, 2}, /* RxD5 */
- {4, 27, 2, 0, 2}, /* RxD6 */
- {4, 26, 2, 0, 2}, /* RxD7 */
- {4, 11, 1, 0, 2}, /* TX_EN */
- {4, 24, 1, 0, 2}, /* TX_ER */
- {4, 16, 2, 0, 2}, /* RX_DV */
- {4, 30, 2, 0, 2}, /* RX_ER */
- {4, 17, 2, 0, 2}, /* RX_CLK */
- {4, 19, 1, 0, 2}, /* GTX_CLK */
- {1, 31, 2, 0, 3}, /* GTX125 */
+ {4, 10, 1, 0, 2, -1}, /* TxD0 */

+	{4,  9, 1, 0, 2, -1}, /* TxD1 */
+	{4,  8, 1, 0, 2, -1}, /* TxD2 */
+	{4,  7, 1, 0, 2, -1}, /* TxD3 */

+ {4, 23, 1, 0, 2, -1}, /* TxD4 */
+ {4, 22, 1, 0, 2, -1}, /* TxD5 */
+ {4, 21, 1, 0, 2, -1}, /* TxD6 */
+ {4, 20, 1, 0, 2, -1}, /* TxD7 */
+ {4, 15, 2, 0, 2, -1}, /* RxD0 */
+ {4, 14, 2, 0, 2, -1}, /* RxD1 */
+ {4, 13, 2, 0, 2, -1}, /* RxD2 */
+ {4, 12, 2, 0, 2, -1}, /* RxD3 */
+ {4, 29, 2, 0, 2, -1}, /* RxD4 */
+ {4, 28, 2, 0, 2, -1}, /* RxD5 */
+ {4, 27, 2, 0, 2, -1}, /* RxD6 */
+ {4, 26, 2, 0, 2, -1}, /* RxD7 */
+ {4, 11, 1, 0, 2, -1}, /* TX_EN */
+ {4, 24, 1, 0, 2, -1}, /* TX_ER */
+ {4, 16, 2, 0, 2, -1}, /* RX_DV */
+ {4, 30, 2, 0, 2, -1}, /* RX_ER */
+ {4, 17, 2, 0, 2, -1}, /* RX_CLK */
+ {4, 19, 1, 0, 2, -1}, /* GTX_CLK */
+ {1, 31, 2, 0, 3, -1}, /* GTX125 */

/* GETH2 */
- {5, 10, 1, 0, 2}, /* TxD0 */

-	{5,  9, 1, 0, 2}, /* TxD1 */
-	{5,  8, 1, 0, 2}, /* TxD2 */
-	{5,  7, 1, 0, 2}, /* TxD3 */

- {5, 23, 1, 0, 2}, /* TxD4 */
- {5, 22, 1, 0, 2}, /* TxD5 */
- {5, 21, 1, 0, 2}, /* TxD6 */
- {5, 20, 1, 0, 2}, /* TxD7 */
- {5, 15, 2, 0, 2}, /* RxD0 */
- {5, 14, 2, 0, 2}, /* RxD1 */
- {5, 13, 2, 0, 2}, /* RxD2 */
- {5, 12, 2, 0, 2}, /* RxD3 */
- {5, 29, 2, 0, 2}, /* RxD4 */
- {5, 28, 2, 0, 2}, /* RxD5 */
- {5, 27, 2, 0, 3}, /* RxD6 */
- {5, 26, 2, 0, 2}, /* RxD7 */
- {5, 11, 1, 0, 2}, /* TX_EN */
- {5, 24, 1, 0, 2}, /* TX_ER */
- {5, 16, 2, 0, 2}, /* RX_DV */
- {5, 30, 2, 0, 2}, /* RX_ER */
- {5, 17, 2, 0, 2}, /* RX_CLK */
- {5, 19, 1, 0, 2}, /* GTX_CLK */
- {1, 31, 2, 0, 3}, /* GTX125 */
- {4, 6, 3, 0, 2}, /* MDIO */
- {4, 5, 1, 0, 2}, /* MDC */
+ {5, 10, 1, 0, 2, -1}, /* TxD0 */

+	{5,  9, 1, 0, 2, -1}, /* TxD1 */
+	{5,  8, 1, 0, 2, -1}, /* TxD2 */
+	{5,  7, 1, 0, 2, -1}, /* TxD3 */

+ {5, 23, 1, 0, 2, -1}, /* TxD4 */
+ {5, 22, 1, 0, 2, -1}, /* TxD5 */
+ {5, 21, 1, 0, 2, -1}, /* TxD6 */
+ {5, 20, 1, 0, 2, -1}, /* TxD7 */
+ {5, 15, 2, 0, 2, -1}, /* RxD0 */
+ {5, 14, 2, 0, 2, -1}, /* RxD1 */
+ {5, 13, 2, 0, 2, -1}, /* RxD2 */
+ {5, 12, 2, 0, 2, -1}, /* RxD3 */
+ {5, 29, 2, 0, 2, -1}, /* RxD4 */
+ {5, 28, 2, 0, 2, -1}, /* RxD5 */
+ {5, 27, 2, 0, 3, -1}, /* RxD6 */
+ {5, 26, 2, 0, 2, -1}, /* RxD7 */
+ {5, 11, 1, 0, 2, -1}, /* TX_EN */
+ {5, 24, 1, 0, 2, -1}, /* TX_ER */
+ {5, 16, 2, 0, 2, -1}, /* RX_DV */
+ {5, 30, 2, 0, 2, -1}, /* RX_ER */
+ {5, 17, 2, 0, 2, -1}, /* RX_CLK */
+ {5, 19, 1, 0, 2, -1}, /* GTX_CLK */
+ {1, 31, 2, 0, 3, -1}, /* GTX125 */
+ {4, 6, 3, 0, 2, -1}, /* MDIO */
+ {4, 5, 1, 0, 2, -1}, /* MDC */

/* UART1 */
- {2, 0, 1, 0, 2}, /* UART_SOUT1 */
- {2, 1, 1, 0, 2}, /* UART_RTS1 */
- {2, 2, 2, 0, 2}, /* UART_CTS1 */
- {2, 3, 2, 0, 2}, /* UART_SIN1 */
+ {2, 0, 1, 0, 2, -1}, /* UART_SOUT1 */
+ {2, 1, 1, 0, 2, -1}, /* UART_RTS1 */
+ {2, 2, 2, 0, 2, -1}, /* UART_CTS1 */
+ {2, 3, 2, 0, 2, -1}, /* UART_SIN1 */

- {0, 0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+ {0, 0, 0, 0, QE_IOP_TAB_END, -1}, /* END of table */
};

common/Makefile +1 -0
@@ -81,6 +81,7 @@ COBJS-$(CONFIG_CMD_NET) += cmd_net.o
 COBJS-y += cmd_nvedit.o
 COBJS-y += cmd_onenand.o
 COBJS-$(CONFIG_CMD_OTP) += cmd_otp.o
+COBJS-$(CONFIG_CMD_PARIO) += cmd_pario.o
 ifdef CONFIG_PCI
 COBJS-$(CONFIG_CMD_PCI) += cmd_pci.o
 endif

0a1,85

common/cmd_pario.c new file +82 -0

82 lines not on this page · raw message

(0-31)\n"
+ "pario write <port> <pin> <data> - write to port <port> (0-5) pin <pin>
(0-31)\n"
+);
+

Signature · 2 lines
View this message in context: http://www.nabble.com/-PATCH--resubmit--QE-IO%3A-Add-initial-data-to-pin-configuration-%2B-read-write-functions-tp16381440p16381440.html
Sent from the Uboot - Users mailing list archive at Nabble.com.
#1 lore raw

PATCH 1/1 QE IO: Add initial data to pin configuration + read/write functions

Quoted 1,003 lines · In message <[email protected]> you wrote:

On the MPC83xx & MPC85xx architectures that have QE, add initial data to the pin configuration table (qe_iop_conf_tab). This is relevant for GPIO pins defined as output. One can setup a value of -1 to leave the value unchanged. QE initialization tables in all relevant boards were also replaced. In addition, add IO pin read & write functions.
This patch also includes commands for reading and writing parallel I/O ports (pario command).

 b/common/cmd_pario.c                      |   85 +++++++++
 board/freescale/mpc8323erdb/mpc8323erdb.c |   74 +++----
 board/freescale/mpc832xemds/mpc832xemds.c |   74 +++----
 board/freescale/mpc8360emds/mpc8360emds.c |  110 +++++------
 board/freescale/mpc8360erdk/mpc8360erdk.c |  280
+++++++++++++++---------------
 board/freescale/mpc8568mds/mpc8568mds.c   |  106 +++++------
 common/Makefile                           |    1 
 cpu/mpc83xx/cpu_init.c                    |    7 
 cpu/mpc83xx/qe_io.c                       |   59 +++++-
 cpu/mpc85xx/cpu_init.c                    |    7 
 cpu/mpc85xx/qe_io.c                       |   58 +++++-
 include/ioports.h                         |    8 
 12 files changed, 526 insertions(+), 343 deletions(-)
include/ioports.h +8 -0
@@ -60,6 +60,14 @@ typedef struct {
 	int		dir;
 	int		open_drain;
 	int		assign;
+	int		data;
 } qe_iop_conf_t;
 
 #define QE_IOP_TAB_END	(-1)
+
+void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign, 
+					 int data);
+void qe_read_iopin(u8 port, u8 pin, int *data);
+void qe_write_iopin(u8 port, u8 pin, int data);
+
+
cpu/mpc85xx/cpu_init.c +3 -4
@@ -39,15 +39,13 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef CONFIG_QE
 extern qe_iop_conf_t qe_iop_conf_tab[];
-extern void qe_config_iopin(u8 port, u8 pin, int dir,
-				int open_drain, int assign);
 extern void qe_init(uint qe_base);
 extern void qe_reset(void);
 
 static void config_qe_ioports(void)
 {
 	u8      port, pin;
-	int     dir, open_drain, assign;
+	int     dir, open_drain, assign, data;
 	int     i;
 
 	for (i = 0; qe_iop_conf_tab[i].assign != QE_IOP_TAB_END; i++) {
@@ -56,7 +54,8 @@ static void config_qe_ioports(void)
 		dir		= qe_iop_conf_tab[i].dir;
 		open_drain	= qe_iop_conf_tab[i].open_drain;
 		assign		= qe_iop_conf_tab[i].assign;
-		qe_config_iopin(port, pin, dir, open_drain, assign);
+		data		= qe_iop_conf_tab[i].data;
+		qe_config_iopin(port, pin, dir, open_drain, assign, data);
 	}
 }
 #endif
cpu/mpc85xx/qe_io.c +51 -7
@@ -27,16 +27,30 @@
 
 #if defined(CONFIG_QE)
 #define	NUM_OF_PINS	32
-void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign)
+void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign, 
+					 int data)
 {
 	u32			pin_2bit_mask;
 	u32			pin_2bit_dir;
 	u32			pin_2bit_assign;
 	u32			pin_1bit_mask;
 	u32			tmp_val;
-	volatile ccsr_gur_t 	*gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
-	volatile par_io_t	*par_io = (volatile par_io_t *)
-						&(gur->qe_par_io);
+	ccsr_gur_t 	*gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+	par_io_t	*par_io = (par_io_t *) &(gur->qe_par_io);
+
+	/* Calculate pin location for 1bit mask */
+	pin_1bit_mask = (u32)(1 << (NUM_OF_PINS - (pin+1)));
+
+	/* Setup the data */
+	if ((data != -1) &&		/* Don't leave unchanged */ 
+		(assign == 0) && 	/* GPIO */
+		(dir & 1)) { 		/* Has output */
+		tmp_val = in_be32(&par_io[port].cpdat);
+		if (data)
+			out_be32(&par_io[port].cpdat, pin_1bit_mask | tmp_val);
+		else
+			out_be32(&par_io[port].cpdat, ~pin_1bit_mask & tmp_val);
+	}
 
 	/* Caculate pin location and 2bit mask and dir */
 	pin_2bit_mask = (u32)(0x3 << (NUM_OF_PINS-(pin%(NUM_OF_PINS/2)+1)*2));
@@ -55,9 +69,6 @@ void qe_config_iopin(u8 port, u8 pin, in
 		out_be32(&par_io[port].cpdir1, pin_2bit_dir | tmp_val);
 	}
 
-	/* Calculate pin location for 1bit mask */
-	pin_1bit_mask = (u32)(1 << (NUM_OF_PINS - (pin+1)));
-
 	/* Setup the open drain */
 	tmp_val = in_be32(&par_io[port].cpodr);
 	if (open_drain)
@@ -82,4 +93,37 @@ void qe_config_iopin(u8 port, u8 pin, in
 	}
 }
 
+void qe_read_iopin(u8 port, u8 pin, int *data)
+{
+	u32			pin_1bit_mask;
+	u32			tmp_val;
+	ccsr_gur_t 	*gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+	par_io_t	*par_io = (par_io_t *) &(gur->qe_par_io);
+
+	/* Calculate pin location for 1bit mask */
+	pin_1bit_mask = (u32)(1 << (NUM_OF_PINS - (pin+1)));
+
+	/* Read the data */
+	tmp_val = in_be32(&par_io[port].cpdat);
+	*data = (tmp_val >> (NUM_OF_PINS - (pin+1))) & 0x1;
+}
+
+void qe_write_iopin(u8 port, u8 pin, int data)
+{
+	u32			pin_1bit_mask;
+	u32			tmp_val;
+	ccsr_gur_t 	*gur = (void *)(CFG_MPC85xx_GUTS_ADDR);
+	par_io_t	*par_io = (par_io_t *) &(gur->qe_par_io);
+
+	/* Calculate pin location for 1bit mask */
+	pin_1bit_mask = (u32)(1 << (NUM_OF_PINS - (pin+1)));
+
+	/* Write the data */
+	tmp_val = in_be32(&par_io[port].cpdat);
+	if (data)
+		out_be32(&par_io[port].cpdat, pin_1bit_mask | tmp_val);
+	else
+		out_be32(&par_io[port].cpdat, ~pin_1bit_mask & tmp_val);
+}
+
 #endif /* CONFIG_QE */
cpu/mpc83xx/cpu_init.c +3 -4
@@ -28,15 +28,13 @@ DECLARE_GLOBAL_DATA_PTR;
 
 #ifdef CONFIG_QE
 extern qe_iop_conf_t qe_iop_conf_tab[];
-extern void qe_config_iopin(u8 port, u8 pin, int dir,
-			 int open_drain, int assign);
 extern void qe_init(uint qe_base);
 extern void qe_reset(void);
 
 static void config_qe_ioports(void)
 {
 	u8	port, pin;
-	int	dir, open_drain, assign;
+	int	dir, open_drain, assign, data;
 	int	i;
 
 	for (i = 0; qe_iop_conf_tab[i].assign != QE_IOP_TAB_END; i++) {
@@ -45,7 +43,8 @@ static void config_qe_ioports(void)
 		dir		= qe_iop_conf_tab[i].dir;
 		open_drain	= qe_iop_conf_tab[i].open_drain;
 		assign		= qe_iop_conf_tab[i].assign;
-		qe_config_iopin(port, pin, dir, open_drain, assign);
+		data		= qe_iop_conf_tab[i].data;
+		qe_config_iopin(port, pin, dir, open_drain, assign, data);
 	}
 }
 #endif
cpu/mpc83xx/qe_io.c +53 -7
@@ -26,15 +26,30 @@
 #include "asm/immap_83xx.h"
 
 #define	NUM_OF_PINS	32
-void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign)
+void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign, 
+					 int data)
 {
 	u32			pin_2bit_mask;
 	u32			pin_2bit_dir;
 	u32			pin_2bit_assign;
 	u32			pin_1bit_mask;
 	u32			tmp_val;
-	volatile immap_t	*im = (volatile immap_t *)CFG_IMMR;
-	volatile qepio83xx_t	*par_io = (volatile qepio83xx_t *)&im->qepio;
+	immap_t	*im = (immap_t *)CFG_IMMR;
+	qepio83xx_t	*par_io = (qepio83xx_t *)&im->qepio;
+
+	/* Calculate pin location for 1bit mask */
+	pin_1bit_mask = (u32)(1 << (NUM_OF_PINS - (pin+1)));
+
+	/* Setup the data */
+	if ((data != -1) &&		/* Don't leave unchanged */ 
+		(assign == 0) && 	/* GPIO */
+		(dir & 1)) { 		/* Has output */
+		tmp_val = in_be32(&par_io->ioport[port].pdat);
+		if (data)
+			out_be32(&par_io->ioport[port].pdat, pin_1bit_mask | tmp_val);
+		else
+			out_be32(&par_io->ioport[port].pdat, ~pin_1bit_mask & tmp_val);
+	}
 
 	/* Caculate pin location and 2bit mask and dir */
 	pin_2bit_mask = (u32)(0x3 << (NUM_OF_PINS-(pin%(NUM_OF_PINS/2)+1)*2));
@@ -53,9 +68,6 @@ void qe_config_iopin(u8 port, u8 pin, in
 		out_be32(&par_io->ioport[port].dir1, pin_2bit_dir | tmp_val);
 	}
 
-	/* Calculate pin location for 1bit mask */
-	pin_1bit_mask = (u32)(1 << (NUM_OF_PINS - (pin+1)));
-
 	/* Setup the open drain */
 	tmp_val = in_be32(&par_io->ioport[port].podr);
 	if (open_drain) {
@@ -80,3 +92,38 @@ void qe_config_iopin(u8 port, u8 pin, in
 		out_be32(&par_io->ioport[port].ppar1, pin_2bit_assign | tmp_val);
 	}
 }
+
+void qe_read_iopin(u8 port, u8 pin, int *data)
+{
+	u32			pin_1bit_mask;
+	u32			tmp_val;
+	immap_t	*im = (immap_t *)CFG_IMMR;
+	qepio83xx_t	*par_io = (qepio83xx_t *)&im->qepio;
+
+	/* Calculate pin location for 1bit mask */
+	pin_1bit_mask = (u32)(1 << (NUM_OF_PINS - (pin+1)));
+
+	/* Read the data */
+	tmp_val = in_be32(&par_io->ioport[port].pdat);
+	*data = (tmp_val >> (NUM_OF_PINS - (pin+1))) & 0x1;
+}
+
+void qe_write_iopin(u8 port, u8 pin, int data)
+{
+	u32			pin_1bit_mask;
+	u32			tmp_val;
+	immap_t	*im = (immap_t *)CFG_IMMR;
+	qepio83xx_t	*par_io = (qepio83xx_t *)&im->qepio;
+
+	/* Calculate pin location for 1bit mask */
+	pin_1bit_mask = (u32)(1 << (NUM_OF_PINS - (pin+1)));
+
+	/* Setup the data */
+	tmp_val = in_be32(&par_io->ioport[port].pdat);
+	if (data) {
+		out_be32(&par_io->ioport[port].pdat, pin_1bit_mask | tmp_val);
+	} else {
+		out_be32(&par_io->ioport[port].pdat, ~pin_1bit_mask & tmp_val);
+	}
+}
+
--- a/board/freescale/mpc8323erdb/mpc8323erdb.c	2008-03-28

01:49:12.000000000 +0200
+++ b/board/freescale/mpc8323erdb/mpc8323erdb.c 2008-03-30
15:54:25.959133000 +0300

cpu/mpc83xx/qe_io.c +37 -38
@@ -23,47 +23,47 @@
 
 const qe_iop_conf_t qe_iop_conf_tab[] = {
 	/* UCC3 */
-	{1,  0, 1, 0, 1}, /* TxD0 */
-	{1,  1, 1, 0, 1}, /* TxD1 */
-	{1,  2, 1, 0, 1}, /* TxD2 */
-	{1,  3, 1, 0, 1}, /* TxD3 */
-	{1,  9, 1, 0, 1}, /* TxER */
-	{1, 12, 1, 0, 1}, /* TxEN */
-	{3, 24, 2, 0, 1}, /* TxCLK->CLK10 */
-
-	{1,  4, 2, 0, 1}, /* RxD0 */
-	{1,  5, 2, 0, 1}, /* RxD1 */
-	{1,  6, 2, 0, 1}, /* RxD2 */
-	{1,  7, 2, 0, 1}, /* RxD3 */
-	{1,  8, 2, 0, 1}, /* RxER */
-	{1, 10, 2, 0, 1}, /* RxDV */
-	{0, 13, 2, 0, 1}, /* RxCLK->CLK9 */
-	{1, 11, 2, 0, 1}, /* COL */
-	{1, 13, 2, 0, 1}, /* CRS */
+	{1,  0, 1, 0, 1, -1}, /* TxD0 */
+	{1,  1, 1, 0, 1, -1}, /* TxD1 */
+	{1,  2, 1, 0, 1, -1}, /* TxD2 */
+	{1,  3, 1, 0, 1, -1}, /* TxD3 */
+	{1,  9, 1, 0, 1, -1}, /* TxER */
+	{1, 12, 1, 0, 1, -1}, /* TxEN */
+	{3, 24, 2, 0, 1, -1}, /* TxCLK->CLK10 */
+
+	{1,  4, 2, 0, 1, -1}, /* RxD0 */
+	{1,  5, 2, 0, 1, -1}, /* RxD1 */
+	{1,  6, 2, 0, 1, -1}, /* RxD2 */
+	{1,  7, 2, 0, 1, -1}, /* RxD3 */
+	{1,  8, 2, 0, 1, -1}, /* RxER */
+	{1, 10, 2, 0, 1, -1}, /* RxDV */
+	{0, 13, 2, 0, 1, -1}, /* RxCLK->CLK9 */
+	{1, 11, 2, 0, 1, -1}, /* COL */
+	{1, 13, 2, 0, 1, -1}, /* CRS */
 
 	/* UCC2 */
-	{0, 18, 1, 0, 1}, /* TxD0 */
-	{0, 19, 1, 0, 1}, /* TxD1 */
-	{0, 20, 1, 0, 1}, /* TxD2 */
-	{0, 21, 1, 0, 1}, /* TxD3 */
-	{0, 27, 1, 0, 1}, /* TxER */
-	{0, 30, 1, 0, 1}, /* TxEN */
-	{3, 23, 2, 0, 1}, /* TxCLK->CLK3 */
-
-	{0, 22, 2, 0, 1}, /* RxD0 */
-	{0, 23, 2, 0, 1}, /* RxD1 */
-	{0, 24, 2, 0, 1}, /* RxD2 */
-	{0, 25, 2, 0, 1}, /* RxD3 */
-	{0, 26, 1, 0, 1}, /* RxER */
-	{0, 28, 2, 0, 1}, /* Rx_DV */
-	{3, 21, 2, 0, 1}, /* RxCLK->CLK16 */
-	{0, 29, 2, 0, 1}, /* COL */
-	{0, 31, 2, 0, 1}, /* CRS */
+	{0, 18, 1, 0, 1, -1}, /* TxD0 */
+	{0, 19, 1, 0, 1, -1}, /* TxD1 */
+	{0, 20, 1, 0, 1, -1}, /* TxD2 */
+	{0, 21, 1, 0, 1, -1}, /* TxD3 */
+	{0, 27, 1, 0, 1, -1}, /* TxER */
+	{0, 30, 1, 0, 1, -1}, /* TxEN */
+	{3, 23, 2, 0, 1, -1}, /* TxCLK->CLK3 */
+
+	{0, 22, 2, 0, 1, -1}, /* RxD0 */
+	{0, 23, 2, 0, 1, -1}, /* RxD1 */
+	{0, 24, 2, 0, 1, -1}, /* RxD2 */
+	{0, 25, 2, 0, 1, -1}, /* RxD3 */
+	{0, 26, 1, 0, 1, -1}, /* RxER */
+	{0, 28, 2, 0, 1, -1}, /* Rx_DV */
+	{3, 21, 2, 0, 1, -1}, /* RxCLK->CLK16 */
+	{0, 29, 2, 0, 1, -1}, /* COL */
+	{0, 31, 2, 0, 1, -1}, /* CRS */
 
-	{3,  4, 3, 0, 2}, /* MDIO */
-	{3,  5, 1, 0, 2}, /* MDC */
+	{3,  4, 3, 0, 2, -1}, /* MDIO */
+	{3,  5, 1, 0, 2, -1}, /* MDC */
 
-	{0,  0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+	{0,  0, 0, 0, QE_IOP_TAB_END, -1}, /* END of table */
 };
 
 int board_early_init_f(void)
--- a/board/freescale/mpc832xemds/mpc832xemds.c	2008-03-28

01:49:12.000000000 +0200
+++ b/board/freescale/mpc832xemds/mpc832xemds.c 2008-03-30
15:57:01.040395000 +0300

cpu/mpc83xx/qe_io.c +37 -38
@@ -31,47 +31,47 @@
 
 const qe_iop_conf_t qe_iop_conf_tab[] = {
 	/* ETH3 */
-	{1,  0, 1, 0, 1}, /* TxD0 */
-	{1,  1, 1, 0, 1}, /* TxD1 */
-	{1,  2, 1, 0, 1}, /* TxD2 */
-	{1,  3, 1, 0, 1}, /* TxD3 */
-	{1,  9, 1, 0, 1}, /* TxER */
-	{1, 12, 1, 0, 1}, /* TxEN */
-	{3, 24, 2, 0, 1}, /* TxCLK->CLK10 */
-
-	{1,  4, 2, 0, 1}, /* RxD0 */
-	{1,  5, 2, 0, 1}, /* RxD1 */
-	{1,  6, 2, 0, 1}, /* RxD2 */
-	{1,  7, 2, 0, 1}, /* RxD3 */
-	{1,  8, 2, 0, 1}, /* RxER */
-	{1, 10, 2, 0, 1}, /* RxDV */
-	{0, 13, 2, 0, 1}, /* RxCLK->CLK9 */
-	{1, 11, 2, 0, 1}, /* COL */
-	{1, 13, 2, 0, 1}, /* CRS */
+	{1,  0, 1, 0, 1, -1}, /* TxD0 */
+	{1,  1, 1, 0, 1, -1}, /* TxD1 */
+	{1,  2, 1, 0, 1, -1}, /* TxD2 */
+	{1,  3, 1, 0, 1, -1}, /* TxD3 */
+	{1,  9, 1, 0, 1, -1}, /* TxER */
+	{1, 12, 1, 0, 1, -1}, /* TxEN */
+	{3, 24, 2, 0, 1, -1}, /* TxCLK->CLK10 */
+
+	{1,  4, 2, 0, 1, -1}, /* RxD0 */
+	{1,  5, 2, 0, 1, -1}, /* RxD1 */
+	{1,  6, 2, 0, 1, -1}, /* RxD2 */
+	{1,  7, 2, 0, 1, -1}, /* RxD3 */
+	{1,  8, 2, 0, 1, -1}, /* RxER */
+	{1, 10, 2, 0, 1, -1}, /* RxDV */
+	{0, 13, 2, 0, 1, -1}, /* RxCLK->CLK9 */
+	{1, 11, 2, 0, 1, -1}, /* COL */
+	{1, 13, 2, 0, 1, -1}, /* CRS */
 
 	/* ETH4 */
-	{1, 18, 1, 0, 1}, /* TxD0 */
-	{1, 19, 1, 0, 1}, /* TxD1 */
-	{1, 20, 1, 0, 1}, /* TxD2 */
-	{1, 21, 1, 0, 1}, /* TxD3 */
-	{1, 27, 1, 0, 1}, /* TxER */
-	{1, 30, 1, 0, 1}, /* TxEN */
-	{3,  6, 2, 0, 1}, /* TxCLK->CLK8 */
-
-	{1, 22, 2, 0, 1}, /* RxD0 */
-	{1, 23, 2, 0, 1}, /* RxD1 */
-	{1, 24, 2, 0, 1}, /* RxD2 */
-	{1, 25, 2, 0, 1}, /* RxD3 */
-	{1, 26, 1, 0, 1}, /* RxER */
-	{1, 28, 2, 0, 1}, /* Rx_DV */
-	{3, 31, 2, 0, 1}, /* RxCLK->CLK7 */
-	{1, 29, 2, 0, 1}, /* COL */
-	{1, 31, 2, 0, 1}, /* CRS */
+	{1, 18, 1, 0, 1, -1}, /* TxD0 */
+	{1, 19, 1, 0, 1, -1}, /* TxD1 */
+	{1, 20, 1, 0, 1, -1}, /* TxD2 */
+	{1, 21, 1, 0, 1, -1}, /* TxD3 */
+	{1, 27, 1, 0, 1, -1}, /* TxER */
+	{1, 30, 1, 0, 1, -1}, /* TxEN */
+	{3,  6, 2, 0, 1, -1}, /* TxCLK->CLK8 */
+
+	{1, 22, 2, 0, 1, -1}, /* RxD0 */
+	{1, 23, 2, 0, 1, -1}, /* RxD1 */
+	{1, 24, 2, 0, 1, -1}, /* RxD2 */
+	{1, 25, 2, 0, 1, -1}, /* RxD3 */
+	{1, 26, 1, 0, 1, -1}, /* RxER */
+	{1, 28, 2, 0, 1, -1}, /* Rx_DV */
+	{3, 31, 2, 0, 1, -1}, /* RxCLK->CLK7 */
+	{1, 29, 2, 0, 1, -1}, /* COL */
+	{1, 31, 2, 0, 1, -1}, /* CRS */
 
-	{3,  4, 3, 0, 2}, /* MDIO */
-	{3,  5, 1, 0, 2}, /* MDC */
+	{3,  4, 3, 0, 2, -1}, /* MDIO */
+	{3,  5, 1, 0, 2, -1}, /* MDC */
 
-	{0,  0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+	{0,  0, 0, 0, QE_IOP_TAB_END, -1}, /* END of table */
 };
 
 int board_early_init_f(void)
--- a/board/freescale/mpc8360emds/mpc8360emds.c	2008-03-28

01:49:12.000000000 +0200
+++ b/board/freescale/mpc8360emds/mpc8360emds.c 2008-03-30
15:57:20.682650000 +0300

cpu/mpc83xx/qe_io.c +55 -56
@@ -30,63 +30,63 @@
 
 const qe_iop_conf_t qe_iop_conf_tab[] = {
 	/* GETH1 */
-	{0,  3, 1, 0, 1}, /* TxD0 */
-	{0,  4, 1, 0, 1}, /* TxD1 */
-	{0,  5, 1, 0, 1}, /* TxD2 */
-	{0,  6, 1, 0, 1}, /* TxD3 */
-	{1,  6, 1, 0, 3}, /* TxD4 */
-	{1,  7, 1, 0, 1}, /* TxD5 */
-	{1,  9, 1, 0, 2}, /* TxD6 */
-	{1, 10, 1, 0, 2}, /* TxD7 */
-	{0,  9, 2, 0, 1}, /* RxD0 */
-	{0, 10, 2, 0, 1}, /* RxD1 */
-	{0, 11, 2, 0, 1}, /* RxD2 */
-	{0, 12, 2, 0, 1}, /* RxD3 */
-	{0, 13, 2, 0, 1}, /* RxD4 */
-	{1,  1, 2, 0, 2}, /* RxD5 */
-	{1,  0, 2, 0, 2}, /* RxD6 */
-	{1,  4, 2, 0, 2}, /* RxD7 */
-	{0,  7, 1, 0, 1}, /* TX_EN */
-	{0,  8, 1, 0, 1}, /* TX_ER */
-	{0, 15, 2, 0, 1}, /* RX_DV */
-	{0, 16, 2, 0, 1}, /* RX_ER */
-	{0,  0, 2, 0, 1}, /* RX_CLK */
-	{2,  9, 1, 0, 3}, /* GTX_CLK - CLK10 */
-	{2,  8, 2, 0, 1}, /* GTX125 - CLK9 */
+	{0,  3, 1, 0, 1, -1}, /* TxD0 */
+	{0,  4, 1, 0, 1, -1}, /* TxD1 */
+	{0,  5, 1, 0, 1, -1}, /* TxD2 */
+	{0,  6, 1, 0, 1, -1}, /* TxD3 */
+	{1,  6, 1, 0, 3, -1}, /* TxD4 */
+	{1,  7, 1, 0, 1, -1}, /* TxD5 */
+	{1,  9, 1, 0, 2, -1}, /* TxD6 */
+	{1, 10, 1, 0, 2, -1}, /* TxD7 */
+	{0,  9, 2, 0, 1, -1}, /* RxD0 */
+	{0, 10, 2, 0, 1, -1}, /* RxD1 */
+	{0, 11, 2, 0, 1, -1}, /* RxD2 */
+	{0, 12, 2, 0, 1, -1}, /* RxD3 */
+	{0, 13, 2, 0, 1, -1}, /* RxD4 */
+	{1,  1, 2, 0, 2, -1}, /* RxD5 */
+	{1,  0, 2, 0, 2, -1}, /* RxD6 */
+	{1,  4, 2, 0, 2, -1}, /* RxD7 */
+	{0,  7, 1, 0, 1, -1}, /* TX_EN */
+	{0,  8, 1, 0, 1, -1}, /* TX_ER */
+	{0, 15, 2, 0, 1, -1}, /* RX_DV */
+	{0, 16, 2, 0, 1, -1}, /* RX_ER */
+	{0,  0, 2, 0, 1, -1}, /* RX_CLK */
+	{2,  9, 1, 0, 3, -1}, /* GTX_CLK - CLK10 */
+	{2,  8, 2, 0, 1, -1}, /* GTX125 - CLK9 */
 	/* GETH2 */
-	{0, 17, 1, 0, 1}, /* TxD0 */
-	{0, 18, 1, 0, 1}, /* TxD1 */
-	{0, 19, 1, 0, 1}, /* TxD2 */
-	{0, 20, 1, 0, 1}, /* TxD3 */
-	{1,  2, 1, 0, 1}, /* TxD4 */
-	{1,  3, 1, 0, 2}, /* TxD5 */
-	{1,  5, 1, 0, 3}, /* TxD6 */
-	{1,  8, 1, 0, 3}, /* TxD7 */
-	{0, 23, 2, 0, 1}, /* RxD0 */
-	{0, 24, 2, 0, 1}, /* RxD1 */
-	{0, 25, 2, 0, 1}, /* RxD2 */
-	{0, 26, 2, 0, 1}, /* RxD3 */
-	{0, 27, 2, 0, 1}, /* RxD4 */
-	{1, 12, 2, 0, 2}, /* RxD5 */
-	{1, 13, 2, 0, 3}, /* RxD6 */
-	{1, 11, 2, 0, 2}, /* RxD7 */
-	{0, 21, 1, 0, 1}, /* TX_EN */
-	{0, 22, 1, 0, 1}, /* TX_ER */
-	{0, 29, 2, 0, 1}, /* RX_DV */
-	{0, 30, 2, 0, 1}, /* RX_ER */
-	{0, 31, 2, 0, 1}, /* RX_CLK */
-	{2,  2, 1, 0, 2}, /* GTX_CLK = CLK10 */
-	{2,  3, 2, 0, 1}, /* GTX125 - CLK4 */
-
-	{0,  1, 3, 0, 2}, /* MDIO */
-	{0,  2, 1, 0, 1}, /* MDC */
-
-	{5,  0, 1, 0, 2}, /* UART2_SOUT */
-	{5,  1, 2, 0, 3}, /* UART2_CTS */
-	{5,  2, 1, 0, 1}, /* UART2_RTS */
-	{5,  3, 2, 0, 2}, /* UART2_SIN */
+	{0, 17, 1, 0, 1, -1}, /* TxD0 */
+	{0, 18, 1, 0, 1, -1}, /* TxD1 */
+	{0, 19, 1, 0, 1, -1}, /* TxD2 */
+	{0, 20, 1, 0, 1, -1}, /* TxD3 */
+	{1,  2, 1, 0, 1, -1}, /* TxD4 */
+	{1,  3, 1, 0, 2, -1}, /* TxD5 */
+	{1,  5, 1, 0, 3, -1}, /* TxD6 */
+	{1,  8, 1, 0, 3, -1}, /* TxD7 */
+	{0, 23, 2, 0, 1, -1}, /* RxD0 */
+	{0, 24, 2, 0, 1, -1}, /* RxD1 */
+	{0, 25, 2, 0, 1, -1}, /* RxD2 */
+	{0, 26, 2, 0, 1, -1}, /* RxD3 */
+	{0, 27, 2, 0, 1, -1}, /* RxD4 */
+	{1, 12, 2, 0, 2, -1}, /* RxD5 */
+	{1, 13, 2, 0, 3, -1}, /* RxD6 */
+	{1, 11, 2, 0, 2, -1}, /* RxD7 */
+	{0, 21, 1, 0, 1, -1}, /* TX_EN */
+	{0, 22, 1, 0, 1, -1}, /* TX_ER */
+	{0, 29, 2, 0, 1, -1}, /* RX_DV */
+	{0, 30, 2, 0, 1, -1}, /* RX_ER */
+	{0, 31, 2, 0, 1, -1}, /* RX_CLK */
+	{2,  2, 1, 0, 2, -1}, /* GTX_CLK = CLK10 */
+	{2,  3, 2, 0, 1, -1}, /* GTX125 - CLK4 */
+
+	{0,  1, 3, 0, 2, -1}, /* MDIO */
+	{0,  2, 1, 0, 1, -1}, /* MDC */
+
+	{5,  0, 1, 0, 2, -1}, /* UART2_SOUT */
+	{5,  1, 2, 0, 3, -1}, /* UART2_CTS */
+	{5,  2, 1, 0, 1, -1}, /* UART2_RTS */
+	{5,  3, 2, 0, 2, -1}, /* UART2_SIN */
 
-	{0,  0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+	{0,  0, 0, 0, QE_IOP_TAB_END, -1}, /* END of table */
 };
 
 int board_early_init_f(void)
--- a/board/freescale/mpc8360erdk/mpc8360erdk.c	2008-03-28

01:49:12.000000000 +0200
+++ b/board/freescale/mpc8360erdk/mpc8360erdk.c 2008-03-30
15:57:40.425878000 +0300

cpu/mpc83xx/qe_io.c +192 -193
@@ -26,165 +26,165 @@
 
 const qe_iop_conf_t qe_iop_conf_tab[] = {
 	/* MDIO */
-	{0,  1, 3, 0, 2}, /* MDIO */
-	{0,  2, 1, 0, 1}, /* MDC */
+	{0,  1, 3, 0, 2, -1}, /* MDIO */
+	{0,  2, 1, 0, 1, -1}, /* MDC */
 
 	/* UCC1 - UEC (Gigabit) */
-	{0,  3, 1, 0, 1}, /* TxD0 */
-	{0,  4, 1, 0, 1}, /* TxD1 */
-	{0,  5, 1, 0, 1}, /* TxD2 */
-	{0,  6, 1, 0, 1}, /* TxD3 */
-	{0,  9, 2, 0, 1}, /* RxD0 */
-	{0, 10, 2, 0, 1}, /* RxD1 */
-	{0, 11, 2, 0, 1}, /* RxD2 */
-	{0, 12, 2, 0, 1}, /* RxD3 */
-	{0,  7, 1, 0, 1}, /* TX_EN */
-	{0,  8, 1, 0, 1}, /* TX_ER */
-	{0, 15, 2, 0, 1}, /* RX_DV */
-	{0,  0, 2, 0, 1}, /* RX_CLK */
-	{2,  9, 1, 0, 3}, /* GTX_CLK - CLK10 */
-	{2,  8, 2, 0, 1}, /* GTX125 - CLK9 */
+	{0,  3, 1, 0, 1, -1}, /* TxD0 */
+	{0,  4, 1, 0, 1, -1}, /* TxD1 */
+	{0,  5, 1, 0, 1, -1}, /* TxD2 */
+	{0,  6, 1, 0, 1, -1}, /* TxD3 */
+	{0,  9, 2, 0, 1, -1}, /* RxD0 */
+	{0, 10, 2, 0, 1, -1}, /* RxD1 */
+	{0, 11, 2, 0, 1, -1}, /* RxD2 */
+	{0, 12, 2, 0, 1, -1}, /* RxD3 */
+	{0,  7, 1, 0, 1, -1}, /* TX_EN */
+	{0,  8, 1, 0, 1, -1}, /* TX_ER */
+	{0, 15, 2, 0, 1, -1}, /* RX_DV */
+	{0,  0, 2, 0, 1, -1}, /* RX_CLK */
+	{2,  9, 1, 0, 3, -1}, /* GTX_CLK - CLK10 */
+	{2,  8, 2, 0, 1, -1}, /* GTX125 - CLK9 */
 
 	/* UCC2 - UEC (Gigabit) */
-	{0, 17, 1, 0, 1}, /* TxD0 */
-	{0, 18, 1, 0, 1}, /* TxD1 */
-	{0, 19, 1, 0, 1}, /* TxD2 */
-	{0, 20, 1, 0, 1}, /* TxD3 */
-	{0, 23, 2, 0, 1}, /* RxD0 */
-	{0, 24, 2, 0, 1}, /* RxD1 */
-	{0, 25, 2, 0, 1}, /* RxD2 */
-	{0, 26, 2, 0, 1}, /* RxD3 */
-	{0, 21, 1, 0, 1}, /* TX_EN */
-	{0, 22, 1, 0, 1}, /* TX_ER */
-	{0, 29, 2, 0, 1}, /* RX_DV */
-	{0, 31, 2, 0, 1}, /* RX_CLK */
-	{2,  2, 1, 0, 2}, /* GTX_CLK - CLK10 */
-	{2,  3, 2, 0, 1}, /* GTX125 - CLK4 */
+	{0, 17, 1, 0, 1, -1}, /* TxD0 */
+	{0, 18, 1, 0, 1, -1}, /* TxD1 */
+	{0, 19, 1, 0, 1, -1}, /* TxD2 */
+	{0, 20, 1, 0, 1, -1}, /* TxD3 */
+	{0, 23, 2, 0, 1, -1}, /* RxD0 */
+	{0, 24, 2, 0, 1, -1}, /* RxD1 */
+	{0, 25, 2, 0, 1, -1}, /* RxD2 */
+	{0, 26, 2, 0, 1, -1}, /* RxD3 */
+	{0, 21, 1, 0, 1, -1}, /* TX_EN */
+	{0, 22, 1, 0, 1, -1}, /* TX_ER */
+	{0, 29, 2, 0, 1, -1}, /* RX_DV */
+	{0, 31, 2, 0, 1, -1}, /* RX_CLK */
+	{2,  2, 1, 0, 2, -1}, /* GTX_CLK - CLK10 */
+	{2,  3, 2, 0, 1, -1}, /* GTX125 - CLK4 */
 
 	/* UCC7 - UEC */
-	{4,  0, 1, 0, 1}, /* TxD0 */
-	{4,  1, 1, 0, 1}, /* TxD1 */
-	{4,  2, 1, 0, 1}, /* TxD2 */
-	{4,  3, 1, 0, 1}, /* TxD3 */
-	{4,  6, 2, 0, 1}, /* RxD0 */
-	{4,  7, 2, 0, 1}, /* RxD1 */
-	{4,  8, 2, 0, 1}, /* RxD2 */
-	{4,  9, 2, 0, 1}, /* RxD3 */
-	{4,  4, 1, 0, 1}, /* TX_EN */
-	{4,  5, 1, 0, 1}, /* TX_ER */
-	{4, 12, 2, 0, 1}, /* RX_DV */
-	{4, 13, 2, 0, 1}, /* RX_ER */
-	{4, 10, 2, 0, 1}, /* COL */
-	{4, 11, 2, 0, 1}, /* CRS */
-	{2, 18, 2, 0, 1}, /* TX_CLK - CLK19 */
-	{2, 19, 2, 0, 1}, /* RX_CLK - CLK20 */
+	{4,  0, 1, 0, 1, -1}, /* TxD0 */
+	{4,  1, 1, 0, 1, -1}, /* TxD1 */
+	{4,  2, 1, 0, 1, -1}, /* TxD2 */
+	{4,  3, 1, 0, 1, -1}, /* TxD3 */
+	{4,  6, 2, 0, 1, -1}, /* RxD0 */
+	{4,  7, 2, 0, 1, -1}, /* RxD1 */
+	{4,  8, 2, 0, 1, -1}, /* RxD2 */
+	{4,  9, 2, 0, 1, -1}, /* RxD3 */
+	{4,  4, 1, 0, 1, -1}, /* TX_EN */
+	{4,  5, 1, 0, 1, -1}, /* TX_ER */
+	{4, 12, 2, 0, 1, -1}, /* RX_DV */
+	{4, 13, 2, 0, 1, -1}, /* RX_ER */
+	{4, 10, 2, 0, 1, -1}, /* COL */
+	{4, 11, 2, 0, 1, -1}, /* CRS */
+	{2, 18, 2, 0, 1, -1}, /* TX_CLK - CLK19 */
+	{2, 19, 2, 0, 1, -1}, /* RX_CLK - CLK20 */
 
 	/* UCC4 - UEC */
-	{1, 14, 1, 0, 1}, /* TxD0 */
-	{1, 15, 1, 0, 1}, /* TxD1 */
-	{1, 16, 1, 0, 1}, /* TxD2 */
-	{1, 17, 1, 0, 1}, /* TxD3 */
-	{1, 20, 2, 0, 1}, /* RxD0 */
-	{1, 21, 2, 0, 1}, /* RxD1 */
-	{1, 22, 2, 0, 1}, /* RxD2 */
-	{1, 23, 2, 0, 1}, /* RxD3 */
-	{1, 18, 1, 0, 1}, /* TX_EN */
-	{1, 19, 1, 0, 2}, /* TX_ER */
-	{1, 26, 2, 0, 1}, /* RX_DV */
-	{1, 27, 2, 0, 1}, /* RX_ER */
-	{1, 24, 2, 0, 1}, /* COL */
-	{1, 25, 2, 0, 1}, /* CRS */
-	{2,  6, 2, 0, 1}, /* TX_CLK - CLK7 */
-	{2,  7, 2, 0, 1}, /* RX_CLK - CLK8 */
+	{1, 14, 1, 0, 1, -1}, /* TxD0 */
+	{1, 15, 1, 0, 1, -1}, /* TxD1 */
+	{1, 16, 1, 0, 1, -1}, /* TxD2 */
+	{1, 17, 1, 0, 1, -1}, /* TxD3 */
+	{1, 20, 2, 0, 1, -1}, /* RxD0 */
+	{1, 21, 2, 0, 1, -1}, /* RxD1 */
+	{1, 22, 2, 0, 1, -1}, /* RxD2 */
+	{1, 23, 2, 0, 1, -1}, /* RxD3 */
+	{1, 18, 1, 0, 1, -1}, /* TX_EN */
+	{1, 19, 1, 0, 2, -1}, /* TX_ER */
+	{1, 26, 2, 0, 1, -1}, /* RX_DV */
+	{1, 27, 2, 0, 1, -1}, /* RX_ER */
+	{1, 24, 2, 0, 1, -1}, /* COL */
+	{1, 25, 2, 0, 1, -1}, /* CRS */
+	{2,  6, 2, 0, 1, -1}, /* TX_CLK - CLK7 */
+	{2,  7, 2, 0, 1, -1}, /* RX_CLK - CLK8 */
 
 	/* PCI1 */
-	{5,  4, 2, 0, 3}, /* PCI_M66EN */
-	{5,  5, 1, 0, 3}, /* PCI_INTA */
-	{5,  6, 1, 0, 3}, /* PCI_RSTO */
-	{5,  7, 3, 0, 3}, /* PCI_C_BE0 */
-	{5,  8, 3, 0, 3}, /* PCI_C_BE1 */
-	{5,  9, 3, 0, 3}, /* PCI_C_BE2 */
-	{5, 10, 3, 0, 3}, /* PCI_C_BE3 */
-	{5, 11, 3, 0, 3}, /* PCI_PAR */
-	{5, 12, 3, 0, 3}, /* PCI_FRAME */
-	{5, 13, 3, 0, 3}, /* PCI_TRDY */
-	{5, 14, 3, 0, 3}, /* PCI_IRDY */
-	{5, 15, 3, 0, 3}, /* PCI_STOP */
-	{5, 16, 3, 0, 3}, /* PCI_DEVSEL */
-	{5, 17, 0, 0, 0}, /* PCI_IDSEL */
-	{5, 18, 3, 0, 3}, /* PCI_SERR */
-	{5, 19, 3, 0, 3}, /* PCI_PERR */
-	{5, 20, 3, 0, 3}, /* PCI_REQ0 */
-	{5, 21, 2, 0, 3}, /* PCI_REQ1 */
-	{5, 22, 2, 0, 3}, /* PCI_GNT2 */
-	{5, 23, 3, 0, 3}, /* PCI_GNT0 */
-	{5, 24, 1, 0, 3}, /* PCI_GNT1 */
-	{5, 25, 1, 0, 3}, /* PCI_GNT2 */
-	{5, 26, 0, 0, 0}, /* PCI_CLK0 */
-	{5, 27, 0, 0, 0}, /* PCI_CLK1 */
-	{5, 28, 0, 0, 0}, /* PCI_CLK2 */
-	{5, 29, 0, 0, 3}, /* PCI_SYNC_OUT */
-	{6,  0, 3, 0, 3}, /* PCI_AD0 */
-	{6,  1, 3, 0, 3}, /* PCI_AD1 */
-	{6,  2, 3, 0, 3}, /* PCI_AD2 */
-	{6,  3, 3, 0, 3}, /* PCI_AD3 */
-	{6,  4, 3, 0, 3}, /* PCI_AD4 */
-	{6,  5, 3, 0, 3}, /* PCI_AD5 */
-	{6,  6, 3, 0, 3}, /* PCI_AD6 */
-	{6,  7, 3, 0, 3}, /* PCI_AD7 */
-	{6,  8, 3, 0, 3}, /* PCI_AD8 */
-	{6,  9, 3, 0, 3}, /* PCI_AD9 */
-	{6, 10, 3, 0, 3}, /* PCI_AD10 */
-	{6, 11, 3, 0, 3}, /* PCI_AD11 */
-	{6, 12, 3, 0, 3}, /* PCI_AD12 */
-	{6, 13, 3, 0, 3}, /* PCI_AD13 */
-	{6, 14, 3, 0, 3}, /* PCI_AD14 */
-	{6, 15, 3, 0, 3}, /* PCI_AD15 */
-	{6, 16, 3, 0, 3}, /* PCI_AD16 */
-	{6, 17, 3, 0, 3}, /* PCI_AD17 */
-	{6, 18, 3, 0, 3}, /* PCI_AD18 */
-	{6, 19, 3, 0, 3}, /* PCI_AD19 */
-	{6, 20, 3, 0, 3}, /* PCI_AD20 */
-	{6, 21, 3, 0, 3}, /* PCI_AD21 */
-	{6, 22, 3, 0, 3}, /* PCI_AD22 */
-	{6, 23, 3, 0, 3}, /* PCI_AD23 */
-	{6, 24, 3, 0, 3}, /* PCI_AD24 */
-	{6, 25, 3, 0, 3}, /* PCI_AD25 */
-	{6, 26, 3, 0, 3}, /* PCI_AD26 */
-	{6, 27, 3, 0, 3}, /* PCI_AD27 */
-	{6, 28, 3, 0, 3}, /* PCI_AD28 */
-	{6, 29, 3, 0, 3}, /* PCI_AD29 */
-	{6, 30, 3, 0, 3}, /* PCI_AD30 */
-	{6, 31, 3, 0, 3}, /* PCI_AD31 */
+	{5,  4, 2, 0, 3, -1}, /* PCI_M66EN */
+	{5,  5, 1, 0, 3, -1}, /* PCI_INTA */
+	{5,  6, 1, 0, 3, -1}, /* PCI_RSTO */
+	{5,  7, 3, 0, 3, -1}, /* PCI_C_BE0 */
+	{5,  8, 3, 0, 3, -1}, /* PCI_C_BE1 */
+	{5,  9, 3, 0, 3, -1}, /* PCI_C_BE2 */
+	{5, 10, 3, 0, 3, -1}, /* PCI_C_BE3 */
+	{5, 11, 3, 0, 3, -1}, /* PCI_PAR */
+	{5, 12, 3, 0, 3, -1}, /* PCI_FRAME */
+	{5, 13, 3, 0, 3, -1}, /* PCI_TRDY */
+	{5, 14, 3, 0, 3, -1}, /* PCI_IRDY */
+	{5, 15, 3, 0, 3, -1}, /* PCI_STOP */
+	{5, 16, 3, 0, 3, -1}, /* PCI_DEVSEL */
+	{5, 17, 0, 0, 0, -1}, /* PCI_IDSEL */
+	{5, 18, 3, 0, 3, -1}, /* PCI_SERR */
+	{5, 19, 3, 0, 3, -1}, /* PCI_PERR */
+	{5, 20, 3, 0, 3, -1}, /* PCI_REQ0 */
+	{5, 21, 2, 0, 3, -1}, /* PCI_REQ1 */
+	{5, 22, 2, 0, 3, -1}, /* PCI_GNT2 */
+	{5, 23, 3, 0, 3, -1}, /* PCI_GNT0 */
+	{5, 24, 1, 0, 3, -1}, /* PCI_GNT1 */
+	{5, 25, 1, 0, 3, -1}, /* PCI_GNT2 */
+	{5, 26, 0, 0, 0, -1}, /* PCI_CLK0 */
+	{5, 27, 0, 0, 0, -1}, /* PCI_CLK1 */
+	{5, 28, 0, 0, 0, -1}, /* PCI_CLK2 */
+	{5, 29, 0, 0, 3, -1}, /* PCI_SYNC_OUT */
+	{6,  0, 3, 0, 3, -1}, /* PCI_AD0 */
+	{6,  1, 3, 0, 3, -1}, /* PCI_AD1 */
+	{6,  2, 3, 0, 3, -1}, /* PCI_AD2 */
+	{6,  3, 3, 0, 3, -1}, /* PCI_AD3 */
+	{6,  4, 3, 0, 3, -1}, /* PCI_AD4 */
+	{6,  5, 3, 0, 3, -1}, /* PCI_AD5 */
+	{6,  6, 3, 0, 3, -1}, /* PCI_AD6 */
+	{6,  7, 3, 0, 3, -1}, /* PCI_AD7 */
+	{6,  8, 3, 0, 3, -1}, /* PCI_AD8 */
+	{6,  9, 3, 0, 3, -1}, /* PCI_AD9 */
+	{6, 10, 3, 0, 3, -1}, /* PCI_AD10 */
+	{6, 11, 3, 0, 3, -1}, /* PCI_AD11 */
+	{6, 12, 3, 0, 3, -1}, /* PCI_AD12 */
+	{6, 13, 3, 0, 3, -1}, /* PCI_AD13 */
+	{6, 14, 3, 0, 3, -1}, /* PCI_AD14 */
+	{6, 15, 3, 0, 3, -1}, /* PCI_AD15 */
+	{6, 16, 3, 0, 3, -1}, /* PCI_AD16 */
+	{6, 17, 3, 0, 3, -1}, /* PCI_AD17 */
+	{6, 18, 3, 0, 3, -1}, /* PCI_AD18 */
+	{6, 19, 3, 0, 3, -1}, /* PCI_AD19 */
+	{6, 20, 3, 0, 3, -1}, /* PCI_AD20 */
+	{6, 21, 3, 0, 3, -1}, /* PCI_AD21 */
+	{6, 22, 3, 0, 3, -1}, /* PCI_AD22 */
+	{6, 23, 3, 0, 3, -1}, /* PCI_AD23 */
+	{6, 24, 3, 0, 3, -1}, /* PCI_AD24 */
+	{6, 25, 3, 0, 3, -1}, /* PCI_AD25 */
+	{6, 26, 3, 0, 3, -1}, /* PCI_AD26 */
+	{6, 27, 3, 0, 3, -1}, /* PCI_AD27 */
+	{6, 28, 3, 0, 3, -1}, /* PCI_AD28 */
+	{6, 29, 3, 0, 3, -1}, /* PCI_AD29 */
+	{6, 30, 3, 0, 3, -1}, /* PCI_AD30 */
+	{6, 31, 3, 0, 3, -1}, /* PCI_AD31 */
 
 	/* NAND */
-	{4, 18, 2, 0, 0}, /* NAND_RYnBY */
+	{4, 18, 2, 0, 0, -1}, /* NAND_RYnBY */
 
 	/* DUART - UART2 */
-	{5,  0, 1, 0, 2}, /* UART2_SOUT */
-	{5,  2, 1, 0, 1}, /* UART2_RTS */
-	{5,  3, 2, 0, 2}, /* UART2_SIN */
-	{5,  1, 2, 0, 3}, /* UART2_CTS */
+	{5,  0, 1, 0, 2, -1}, /* UART2_SOUT */
+	{5,  2, 1, 0, 1, -1}, /* UART2_RTS */
+	{5,  3, 2, 0, 2, -1}, /* UART2_SIN */
+	{5,  1, 2, 0, 3, -1}, /* UART2_CTS */
 
 	/* UCC5 - UART3 */
-	{3,  0, 1, 0, 1}, /* UART3_TX */
-	{3,  4, 1, 0, 1}, /* UART3_RTS */
-	{3,  6, 2, 0, 1}, /* UART3_RX */
-	{3, 12, 2, 0, 0}, /* UART3_CTS */
-	{3, 13, 2, 0, 0}, /* UCC5_CD */
+	{3,  0, 1, 0, 1, -1}, /* UART3_TX */
+	{3,  4, 1, 0, 1, -1}, /* UART3_RTS */
+	{3,  6, 2, 0, 1, -1}, /* UART3_RX */
+	{3, 12, 2, 0, 0, -1}, /* UART3_CTS */
+	{3, 13, 2, 0, 0, -1}, /* UCC5_CD */
 
 	/* UCC6 - UART4 */
-	{3, 14, 1, 0, 1}, /* UART4_TX */
-	{3, 18, 1, 0, 1}, /* UART4_RTS */
-	{3, 20, 2, 0, 1}, /* UART4_RX */
-	{3, 26, 2, 0, 0}, /* UART4_CTS */
-	{3, 27, 2, 0, 0}, /* UCC6_CD */
+	{3, 14, 1, 0, 1, -1}, /* UART4_TX */
+	{3, 18, 1, 0, 1, -1}, /* UART4_RTS */
+	{3, 20, 2, 0, 1, -1}, /* UART4_RX */
+	{3, 26, 2, 0, 0, -1}, /* UART4_CTS */
+	{3, 27, 2, 0, 0, -1}, /* UCC6_CD */
 
 	/* Fujitsu MB86277 (MINT) graphics controller */
-	{0, 30, 1, 0, 0}, /* nSRESET_GRAPHICS */
-	{1,  5, 1, 0, 0}, /* nXRST_GRAPHICS */
-	{1,  7, 1, 0, 0}, /* LVDS_BKLT_CTR */
-	{2, 16, 1, 0, 0}, /* LVDS_BKLT_EN */
+	{0, 30, 1, 0, 0, -1}, /* nSRESET_GRAPHICS */
+	{1,  5, 1, 0, 0, -1}, /* nXRST_GRAPHICS */
+	{1,  7, 1, 0, 0, -1}, /* LVDS_BKLT_CTR */
+	{2, 16, 1, 0, 0, -1}, /* LVDS_BKLT_EN */
 
 	/* AD7843 ADC/Touchscreen controller */
 	{4, 14, 1, 0, 0}, /* SPI_nCS0 */
@@ -204,7 +204,7 @@ const qe_iop_conf_t qe_iop_conf_tab[] = 
 	{4, 21, 1, 0, 0}, /* SUSPND */
 
 	/* END of table */
-	{0,  0, 0, 0, QE_IOP_TAB_END},
+	{0,  0, 0, 0, QE_IOP_TAB_END, -1},
 };
 
 int board_early_init_f(void)
--- a/board/freescale/mpc8568mds/mpc8568mds.c	2008-03-28 01:49:12.000000000
+0200
+++ b/board/freescale/mpc8568mds/mpc8568mds.c	2008-03-30 15:57:57.592361000
+0300
@@ -37,64 +37,64 @@
 
 const qe_iop_conf_t qe_iop_conf_tab[] = {
 	/* GETH1 */
-	{4, 10, 1, 0, 2}, /* TxD0 */
-	{4,  9, 1, 0, 2}, /* TxD1 */
-	{4,  8, 1, 0, 2}, /* TxD2 */
-	{4,  7, 1, 0, 2}, /* TxD3 */
-	{4, 23, 1, 0, 2}, /* TxD4 */
-	{4, 22, 1, 0, 2}, /* TxD5 */
-	{4, 21, 1, 0, 2}, /* TxD6 */
-	{4, 20, 1, 0, 2}, /* TxD7 */
-	{4, 15, 2, 0, 2}, /* RxD0 */
-	{4, 14, 2, 0, 2}, /* RxD1 */
-	{4, 13, 2, 0, 2}, /* RxD2 */
-	{4, 12, 2, 0, 2}, /* RxD3 */
-	{4, 29, 2, 0, 2}, /* RxD4 */
-	{4, 28, 2, 0, 2}, /* RxD5 */
-	{4, 27, 2, 0, 2}, /* RxD6 */
-	{4, 26, 2, 0, 2}, /* RxD7 */
-	{4, 11, 1, 0, 2}, /* TX_EN */
-	{4, 24, 1, 0, 2}, /* TX_ER */
-	{4, 16, 2, 0, 2}, /* RX_DV */
-	{4, 30, 2, 0, 2}, /* RX_ER */
-	{4, 17, 2, 0, 2}, /* RX_CLK */
-	{4, 19, 1, 0, 2}, /* GTX_CLK */
-	{1, 31, 2, 0, 3}, /* GTX125 */
+	{4, 10, 1, 0, 2, -1}, /* TxD0 */
+	{4,  9, 1, 0, 2, -1}, /* TxD1 */
+	{4,  8, 1, 0, 2, -1}, /* TxD2 */
+	{4,  7, 1, 0, 2, -1}, /* TxD3 */
+	{4, 23, 1, 0, 2, -1}, /* TxD4 */
+	{4, 22, 1, 0, 2, -1}, /* TxD5 */
+	{4, 21, 1, 0, 2, -1}, /* TxD6 */
+	{4, 20, 1, 0, 2, -1}, /* TxD7 */
+	{4, 15, 2, 0, 2, -1}, /* RxD0 */
+	{4, 14, 2, 0, 2, -1}, /* RxD1 */
+	{4, 13, 2, 0, 2, -1}, /* RxD2 */
+	{4, 12, 2, 0, 2, -1}, /* RxD3 */
+	{4, 29, 2, 0, 2, -1}, /* RxD4 */
+	{4, 28, 2, 0, 2, -1}, /* RxD5 */
+	{4, 27, 2, 0, 2, -1}, /* RxD6 */
+	{4, 26, 2, 0, 2, -1}, /* RxD7 */
+	{4, 11, 1, 0, 2, -1}, /* TX_EN */
+	{4, 24, 1, 0, 2, -1}, /* TX_ER */
+	{4, 16, 2, 0, 2, -1}, /* RX_DV */
+	{4, 30, 2, 0, 2, -1}, /* RX_ER */
+	{4, 17, 2, 0, 2, -1}, /* RX_CLK */
+	{4, 19, 1, 0, 2, -1}, /* GTX_CLK */
+	{1, 31, 2, 0, 3, -1}, /* GTX125 */
 
 	/* GETH2 */
-	{5, 10, 1, 0, 2}, /* TxD0 */
-	{5,  9, 1, 0, 2}, /* TxD1 */
-	{5,  8, 1, 0, 2}, /* TxD2 */
-	{5,  7, 1, 0, 2}, /* TxD3 */
-	{5, 23, 1, 0, 2}, /* TxD4 */
-	{5, 22, 1, 0, 2}, /* TxD5 */
-	{5, 21, 1, 0, 2}, /* TxD6 */
-	{5, 20, 1, 0, 2}, /* TxD7 */
-	{5, 15, 2, 0, 2}, /* RxD0 */
-	{5, 14, 2, 0, 2}, /* RxD1 */
-	{5, 13, 2, 0, 2}, /* RxD2 */
-	{5, 12, 2, 0, 2}, /* RxD3 */
-	{5, 29, 2, 0, 2}, /* RxD4 */
-	{5, 28, 2, 0, 2}, /* RxD5 */
-	{5, 27, 2, 0, 3}, /* RxD6 */
-	{5, 26, 2, 0, 2}, /* RxD7 */
-	{5, 11, 1, 0, 2}, /* TX_EN */
-	{5, 24, 1, 0, 2}, /* TX_ER */
-	{5, 16, 2, 0, 2}, /* RX_DV */
-	{5, 30, 2, 0, 2}, /* RX_ER */
-	{5, 17, 2, 0, 2}, /* RX_CLK */
-	{5, 19, 1, 0, 2}, /* GTX_CLK */
-	{1, 31, 2, 0, 3}, /* GTX125 */
-	{4,  6, 3, 0, 2}, /* MDIO */
-	{4,  5, 1, 0, 2}, /* MDC */
+	{5, 10, 1, 0, 2, -1}, /* TxD0 */
+	{5,  9, 1, 0, 2, -1}, /* TxD1 */
+	{5,  8, 1, 0, 2, -1}, /* TxD2 */
+	{5,  7, 1, 0, 2, -1}, /* TxD3 */
+	{5, 23, 1, 0, 2, -1}, /* TxD4 */
+	{5, 22, 1, 0, 2, -1}, /* TxD5 */
+	{5, 21, 1, 0, 2, -1}, /* TxD6 */
+	{5, 20, 1, 0, 2, -1}, /* TxD7 */
+	{5, 15, 2, 0, 2, -1}, /* RxD0 */
+	{5, 14, 2, 0, 2, -1}, /* RxD1 */
+	{5, 13, 2, 0, 2, -1}, /* RxD2 */
+	{5, 12, 2, 0, 2, -1}, /* RxD3 */
+	{5, 29, 2, 0, 2, -1}, /* RxD4 */
+	{5, 28, 2, 0, 2, -1}, /* RxD5 */
+	{5, 27, 2, 0, 3, -1}, /* RxD6 */
+	{5, 26, 2, 0, 2, -1}, /* RxD7 */
+	{5, 11, 1, 0, 2, -1}, /* TX_EN */
+	{5, 24, 1, 0, 2, -1}, /* TX_ER */
+	{5, 16, 2, 0, 2, -1}, /* RX_DV */
+	{5, 30, 2, 0, 2, -1}, /* RX_ER */
+	{5, 17, 2, 0, 2, -1}, /* RX_CLK */
+	{5, 19, 1, 0, 2, -1}, /* GTX_CLK */
+	{1, 31, 2, 0, 3, -1}, /* GTX125 */
+	{4,  6, 3, 0, 2, -1}, /* MDIO */
+	{4,  5, 1, 0, 2, -1}, /* MDC */
 
 	/* UART1 */
-	{2, 0, 1, 0, 2}, /* UART_SOUT1 */
-	{2, 1, 1, 0, 2}, /* UART_RTS1 */
-	{2, 2, 2, 0, 2}, /* UART_CTS1 */
-	{2, 3, 2, 0, 2}, /* UART_SIN1 */
+	{2, 0, 1, 0, 2, -1}, /* UART_SOUT1 */

cpu/mpc83xx/qe_io.c

Quoted 10 lines
cpu/mpc83xx/qe_io.c +4 -2
+	{2, 1, 1, 0, 2, -1}, /* UART_RTS1 */
+	{2, 2, 2, 0, 2, -1}, /* UART_CTS1 */
+	{2, 3, 2, 0, 2, -1}, /* UART_SIN1 */
 
-	{0,  0, 0, 0, QE_IOP_TAB_END}, /* END of table */
+	{0,  0, 0, 0, QE_IOP_TAB_END, -1}, /* END of table */
 };
 
 
--- a/common/Makefile	2008-03-28 01:49:12.000000000 +0200

+++ b/common/Makefile 2008-03-30 15:59:57.944754000 +0300

Quoted 115 lines
cpu/mpc83xx/qe_io.c +1 -0
@@ -81,6 +81,7 @@ COBJS-$(CONFIG_CMD_NET) += cmd_net.o
 COBJS-y += cmd_nvedit.o
 COBJS-y += cmd_onenand.o
 COBJS-$(CONFIG_CMD_OTP) += cmd_otp.o
+COBJS-$(CONFIG_CMD_PARIO) += cmd_pario.o
 ifdef CONFIG_PCI
 COBJS-$(CONFIG_CMD_PCI) += cmd_pci.o
 endif

0a1,85

common/cmd_pario.c new file +82 -0
@@ -0,0 +1,85 @@
+/*
+ * Copyright 2008 ECI Telecommunication.
+ *
+ * (C) Copyright 2008 David Saada <[email protected]>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <ioports.h>
+
+int do_pario (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
+{
+	char op;
+	int	port, pin, data;
+	static char	last_op;
+	static int last_port, last_pin, last_data;
+
+	/*
+	 * We use the last specified parameters, unless new ones are
+	 * entered.
+	 */
+	op = last_op;
+	port = last_port;
+	pin = last_pin;
+	data = last_data;
+
+	if ((flag & CMD_FLAG_REPEAT) == 0) {
+		op = argv[1][0];
+
+		if (argc >= 3)
+			port = simple_strtoul (argv[2], NULL, 10);
+		if (argc >= 4)
+			pin = simple_strtoul (argv[3], NULL, 10);
+		if (argc >= 5)
+			data = simple_strtoul (argv[4], NULL, 10);
+	}
+
+	if (op == 'r') {
+		qe_read_iopin(port ,pin ,&data);
+		printf("%d\n", data);
+	} else if (op == 'w') {
+		qe_write_iopin(port ,pin ,data);
+	} else {
+		printf("Usage:\n%s\n", cmdtp->usage);
+		return 1;
+	}
+
+	/*
+	 * Save the parameters for repeats.
+	 */
+	last_op = op;
+	last_port = port;
+	last_pin = pin;
+	last_data = data;
+
+	return 0;
+}
+
+/***************************************************/
+
+U_BOOT_CMD(
+	pario,	5,	1,	do_pario,
+	"pario     - Parallel I/O utility commands\n",
+	"read   <port> <pin>        - read from port <port> (0-5) pin <pin>

(0-31)\n"

common/cmd_pario.c new file +1 -0
+	"pario write  <port> <pin> <data> - write to port  <port> (0-5) pin <pin>

(0-31)\n"

common/cmd_pario.c new file +2 -0
+);
+
Signature · 14 lines
-- 
View this message in context: http://www.nabble.com/-PATCH--resubmit--QE-IO%3A-Add-initial-data-to-pin-configuration-%2B-read-write-functions-tp16381440p16381440.html
Sent from the Uboot - Users mailing list archive at Nabble.com.


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
U-Boot-Users mailing list
U-Boot-Users at lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/u-boot-users
#2 lore raw

PATCH 1/1 QE IO: Add initial data to pin configuration + read/write functions

In reply to David Saada
Quoted 10 lines · David Saada

On the MPC83xx & MPC85xx architectures that have QE, add initial data to the pin configuration table (qe_iop_conf_tab). This is relevant for GPIO pins defined as output. One can setup a value of -1 to leave the value unchanged. QE initialization tables in all relevant boards were also replaced. In addition, add IO pin read & write functions.
This patch also includes commands for reading and writing parallel I/O ports (pario command).

I have managed to apply your patch. But I *still* had to correct several line-wrap errors. I suggest that maybe nabble is not the solution you hope it is. If you wish to continue submitting patches to opensource groups, it'll be a good idea to find a solution that works. Suggestion: test by sending the email to yourself, and see if you can apply the patch to a clean branch.

Anyway, I'll wait for Kim's ACK before pushing it up into my dev-1.3.4 branch

#3 lore raw

PATCH 1/1 QE IO: Add initial data to pin configuration + read/write functions

Quoted 12 lines · On Mon, 14 Apr 2008 12:59:28 -0500 "Andy Fleming" <[email protected]> wrote:
Quoted 10 lines · David Saada

On the MPC83xx & MPC85xx architectures that have QE, add initial data to the pin configuration table (qe_iop_conf_tab). This is relevant for GPIO pins defined as output. One can setup a value of -1 to leave the value unchanged. QE initialization tables in all relevant boards were also replaced. In addition, add IO pin read & write functions.
This patch also includes commands for reading and writing parallel I/O ports (pario command).

Quoted 8 lines

I have managed to apply your patch. But I *still* had to correct several line-wrap errors. I suggest that maybe nabble is not the solution you hope it is. If you wish to continue submitting patches to opensource groups, it'll be a good idea to find a solution that works. Suggestion: test by sending the email to yourself, and see if you can apply the patch to a clean branch.

Anyway, I'll wait for Kim's ACK before pushing it up into my dev-1.3.4 branch

see:

http://article.gmane.org/gmane.comp.boot-loaders.u-boot/38991

Kim

#4 lore raw

PATCH 1/1 QE IO: Add initial data to pin configuration + read/write functions

Quoted 6 lines
Quoted 2 lines

Anyway, I'll wait for Kim's ACK before pushing it up into my dev-1.3.4 branch

see:

http://article.gmane.org/gmane.comp.boot-loaders.u-boot/38991

David, I'm still waiting for a response to Kim's comments before I can apply this. The window for 1.3.5 will open soon, so it'd be good to get a working version of this patch sent out by then.

Andy

#5 lore raw

PATCH 1/1 QE IO: Add initial data to pin configuration + read/write functions

Quoted 6 lines
Quoted 2 lines
Quoted 2 lines

Anyway, I'll wait for Kim's ACK before pushing it up into my dev-

1.3.4 branch

Quoted 3 lines

see:

Quoted 8 lines
Quoted 1 line

http://article.gmane.org/gmane.comp.boot-loaders.u-boot/38991

David, I'm still waiting for a response to Kim's comments before I can apply this. The window for 1.3.5 will open soon, so it'd be good to get a working version of this patch sent out by then.

Andy

Andy,
I pretty much agree with Kim's comments, but I don't think I'll have the time to perform these soon (especially the change that involves the unification of the 83xx/85xx/86xx code). David.