[PATCH 1/6] powerpc: update flash size and partition in mpc8272ads dts

Subsystems: linux for powerpc (32-bit and 64-bit), the rest · Maintainers: Madhavan Srinivasan, Linus Torvalds

STALE6654d

20 messages, 4 authors, 2008-08-07 · open the first message on its own page

[PATCH 1/6] powerpc: update flash size and partition in mpc8272ads dts

From: Li Yang <hidden>
Date: 2008-08-06 06:50:01

Make the flash size 8M to be consistent with the module comes with board.
Add predefined partitions for the flash.  Add ethernet port aliases.

Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/boot/dts/mpc8272ads.dts |   38 +++++++++++++++++++++++++++++----
 1 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/arch/powerpc/boot/dts/mpc8272ads.dts b/arch/powerpc/boot/dts/mpc8272ads.dts
index 2a1929a..b2ce4c0 100644
--- a/arch/powerpc/boot/dts/mpc8272ads.dts
+++ b/arch/powerpc/boot/dts/mpc8272ads.dts
@@ -17,6 +17,11 @@
 	#address-cells = <1>;
 	#size-cells = <1>;
 
+	aliases {
+		ethernet0 = &enet0;
+		ethernet1 = &enet1;
+	};
+
 	cpus {
 		#address-cells = <1>;
 		#size-cells = <0>;
@@ -46,15 +51,38 @@
 		#size-cells = <1>;
 		reg = <0xf0010100 0x40>;
 
-		ranges = <0x0 0x0 0xfe000000 0x2000000
+		ranges = <0x0 0x0 0xff800000 0x800000
 		          0x1 0x0 0xf4500000 0x8000
 		          0x3 0x0 0xf8200000 0x8000>;
 
 		flash@0,0 {
-			compatible = "jedec-flash";
-			reg = <0x0 0x0 0x2000000>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			compatible = "cfi-flash";
+			probe-type = "CFI";
+			reg = <0x0 0x0 0x800000>;
 			bank-width = <4>;
 			device-width = <1>;
+			hrcw@0 {
+				label = "hrcw";
+				reg = <0x0 0x40000>;
+			};
+			fs@40000 {
+				label = "fs";
+				reg = <0x40000 0x540000>;
+			};
+			kernel@580000 {
+				label = "kernel";
+				reg = <0x580000 0x180000>;
+			};
+			u-boot@700000 {
+				label = "u-boot";
+				reg = <0x700000 0x40000>;
+			};
+			u-boot-env@740000 {
+				label = "u-boot-env";
+				reg = <0x740000 0x40000>;
+			};
 		};
 
 		board-control@1,0 {
@@ -192,7 +220,7 @@
 				};
 			};
 
-			ethernet@11300 {
+			enet0: ethernet@11300 {
 				device_type = "network";
 				compatible = "fsl,mpc8272-fcc-enet",
 				             "fsl,cpm2-fcc-enet";
@@ -205,7 +233,7 @@
 				fsl,cpm-command = <0x12000300>;
 			};
 
-			ethernet@11320 {
+			enet1: ethernet@11320 {
 				device_type = "network";
 				compatible = "fsl,mpc8272-fcc-enet",
 				             "fsl,cpm2-fcc-enet";
-- 
1.5.5.1.248.g4b17

[PATCH 2/6] powerpc: export cpm2_immr symbol for CPM2 drivers to compile as module

From: Li Yang <hidden>
Date: 2008-08-06 06:50:03

Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/sysdev/cpm2.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/sysdev/cpm2.c b/arch/powerpc/sysdev/cpm2.c
index f1c3395..021480e 100644
--- a/arch/powerpc/sysdev/cpm2.c
+++ b/arch/powerpc/sysdev/cpm2.c
@@ -52,6 +52,7 @@ cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor space */
  * the communication processor devices.
  */
 cpm2_map_t __iomem *cpm2_immr;
+EXPORT_SYMBOL(cpm2_immr);
 
 #define CPM_MAP_SIZE	(0x40000)	/* 256k - the PQ3 reserve this amount
 					   of space for CPM as it is larger
-- 
1.5.5.1.248.g4b17

[PATCH 3/6] powerpc: update QE/CPM2 headers for USB support

From: Li Yang <hidden>
Date: 2008-08-06 06:50:04

Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/include/asm/immap_cpm2.h |    9 +++------
 arch/powerpc/include/asm/immap_qe.h   |    9 +++------
 2 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/arch/powerpc/include/asm/immap_cpm2.h b/arch/powerpc/include/asm/immap_cpm2.h
index 4080bab..d4f069b 100644
--- a/arch/powerpc/include/asm/immap_cpm2.h
+++ b/arch/powerpc/include/asm/immap_cpm2.h
@@ -554,14 +554,11 @@ typedef struct usb_ctlr {
 	u8	usb_usadr;
 	u8	usb_uscom;
 	u8	res1[1];
-	u16	usb_usep1;
-	u16	usb_usep2;
-	u16	usb_usep3;
-	u16	usb_usep4;
+	__be16  usb_usep[4];
 	u8	res2[4];
-	u16	usb_usber;
+	__be16  usb_usber;
 	u8	res3[2];
-	u16	usb_usbmr;
+	__be16  usb_usbmr;
 	u8	usb_usbs;
 	u8	res4[7];
 } usb_cpm2_t;
diff --git a/arch/powerpc/include/asm/immap_qe.h b/arch/powerpc/include/asm/immap_qe.h
index 3c2fced..08d616a 100644
--- a/arch/powerpc/include/asm/immap_qe.h
+++ b/arch/powerpc/include/asm/immap_qe.h
@@ -215,10 +215,7 @@ struct usb_ctlr {
 	u8	usb_usadr;
 	u8	usb_uscom;
 	u8	res1[1];
-	__be16	usb_usep1;
-	__be16	usb_usep2;
-	__be16	usb_usep3;
-	__be16	usb_usep4;
+	__be16  usb_usep[4];
 	u8	res2[4];
 	__be16	usb_usber;
 	u8	res3[2];
@@ -472,8 +469,8 @@ extern phys_addr_t get_qe_base(void);
 
 static inline unsigned long immrbar_virt_to_phys(void *address)
 {
-	if ( ((u32)address >= (u32)qe_immr) &&
-			((u32)address < ((u32)qe_immr + QE_IMMAP_SIZE)) )
+	if (((u32)address >= (u32)qe_immr) &&
+			((u32)address < ((u32)qe_immr + QE_IMMAP_SIZE)))
 		return (unsigned long)(address - (u32)qe_immr +
 				(u32)get_qe_base());
 	return (unsigned long)virt_to_phys(address);
-- 
1.5.5.1.248.g4b17

[PATCH 4/6] powerpc: add USB peripheral support to MPC8272ADS

From: Li Yang <hidden>
Date: 2008-08-06 06:50:06

Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/boot/dts/mpc8272ads.dts      |    8 ++++++++
 arch/powerpc/platforms/82xx/mpc8272_ads.c |   25 +++++++++++++++++++++++++
 arch/powerpc/platforms/82xx/pq2ads.h      |    3 +++
 3 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/boot/dts/mpc8272ads.dts b/arch/powerpc/boot/dts/mpc8272ads.dts
index b2ce4c0..75cc94c 100644
--- a/arch/powerpc/boot/dts/mpc8272ads.dts
+++ b/arch/powerpc/boot/dts/mpc8272ads.dts
@@ -256,6 +256,14 @@
 				#address-cells = <1>;
 				#size-cells = <0>;
 			};
+
+			usb@11b60 {
+				compatible = "fsl,qe_udc";
+				reg = <0x11b60 0x40 0x8b00 0x100>;
+				interrupts = <11 8>;
+				interrupt-parent = <&PIC>;
+				mode = "slave";
+			};
 		};
 
 		PIC: interrupt-controller@10c00 {
diff --git a/arch/powerpc/platforms/82xx/mpc8272_ads.c b/arch/powerpc/platforms/82xx/mpc8272_ads.c
index 8054c68..69781e6 100644
--- a/arch/powerpc/platforms/82xx/mpc8272_ads.c
+++ b/arch/powerpc/platforms/82xx/mpc8272_ads.c
@@ -23,6 +23,7 @@
 #include <asm/udbg.h>
 #include <asm/machdep.h>
 #include <asm/time.h>
+#include <asm/fs_pd.h>
 
 #include <platforms/82xx/pq2.h>
 
@@ -100,11 +101,22 @@ static struct cpm_pin mpc8272_ads_pins[] = {
 	/* I2C */
 	{3, 14, CPM_PIN_INPUT | CPM_PIN_SECONDARY | CPM_PIN_OPENDRAIN},
 	{3, 15, CPM_PIN_INPUT | CPM_PIN_SECONDARY | CPM_PIN_OPENDRAIN},
+
+	/* USB */
+	{2, 20, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, /* output enable */
+	{2, 11, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* RP */
+	{2, 10, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* RN */
+	{3, 25, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* Rxd */
+	{3, 24, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, /* TN */
+	{3, 23, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY}, /* TP */
+	{2, 24, CPM_PIN_INPUT | CPM_PIN_PRIMARY},  /* Usb_clk */
 };
 
 static void __init init_ioports(void)
 {
 	int i;
+	cpmux_t __iomem *im_cpmux;
+	u32 reg;
 
 	for (i = 0; i < ARRAY_SIZE(mpc8272_ads_pins); i++) {
 		struct cpm_pin *pin = &mpc8272_ads_pins[i];
@@ -119,6 +131,13 @@ static void __init init_ioports(void)
 	cpm2_clk_setup(CPM_CLK_FCC1, CPM_CLK10, CPM_CLK_TX);
 	cpm2_clk_setup(CPM_CLK_FCC2, CPM_CLK15, CPM_CLK_RX);
 	cpm2_clk_setup(CPM_CLK_FCC2, CPM_CLK16, CPM_CLK_TX);
+
+	/* USB use clock of SCC3 */
+	cpm2_clk_setup(CPM_CLK_SCC3, CPM_CLK8, CPM_CLK_TX);
+	/* SCC3 cannot be used in NMSI mode */
+	im_cpmux = cpm2_map(im_cpmux);
+	reg = in_be32(&im_cpmux->cmx_scr);
+	out_be32(&im_cpmux->cmx_scr, reg | CMXSCR_SC3);
 }
 
 static void __init mpc8272_ads_setup_arch(void)
@@ -150,6 +169,12 @@ static void __init mpc8272_ads_setup_arch(void)
 	clrbits32(&bcsr[3], BCSR3_FETHIEN2);
 	setbits32(&bcsr[3], BCSR3_FETH2_RST);
 
+	/* Enabling USB support in BCSR */
+	np = of_find_compatible_node(NULL, NULL, "fsl,qe_udc");
+	if (np != NULL) {
+		clrbits32(&bcsr[3], BCSR3_USB_EN);
+		clrbits32(&bcsr[3], BCSR3_USB_HI_SPEED);
+	}
 	iounmap(bcsr);
 
 	init_ioports();
diff --git a/arch/powerpc/platforms/82xx/pq2ads.h b/arch/powerpc/platforms/82xx/pq2ads.h
index 984db42..d0e82e2 100644
--- a/arch/powerpc/platforms/82xx/pq2ads.h
+++ b/arch/powerpc/platforms/82xx/pq2ads.h
@@ -43,6 +43,9 @@
 #define BCSR1_RS232_EN2		((uint)0x01000000)      /* 0 ==enable */
 #define BCSR3_FETHIEN2		((uint)0x10000000)      /* 0 == enable*/
 #define BCSR3_FETH2_RST		((uint)0x80000000)      /* 0 == reset */
+#define BCSR3_USB_EN      ((uint)0x80000000)        /* 0 == enable*/
+#define BCSR3_USB_HI_SPEED     ((uint)0x40000000)   /* 0 == highspeed */
+#define BCSR3_USBVCC     ((uint)0x20000000)         /* 0 == disable */
 
 /* cpm serial driver works with constants below */
 
-- 
1.5.5.1.248.g4b17

[PATCH 5/6] powerpc: add USB peripheral support to MPC836xMDS

From: Li Yang <hidden>
Date: 2008-08-06 06:50:07

Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/boot/dts/mpc836x_mds.dts     |   15 ++++++-
 arch/powerpc/platforms/83xx/mpc836x_mds.c |   19 ++++++++-
 arch/powerpc/platforms/83xx/mpc83xx.h     |    1 +
 arch/powerpc/platforms/83xx/usb.c         |   67 +++++++++++++++++++++++++++++
 4 files changed, 100 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index a3b76a7..596377b 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -235,6 +235,17 @@
 					0  2  1  0  1  0>; /* MDC */
 			};
 
+			pio_usb: usb_pin@01 {
+				pio-map = <
+			/* port  pin  dir  open_drain  assignment  has_irq */
+					1  2  1  0  3  0        /* USBOE  */
+					1  3  1  0  3  0        /* USBTP  */
+					1  8  1  0  1  0        /* USBTN  */
+					1 10  2  0  3  0        /* USBRXD */
+					1  9  2  1  3  0        /* USBRP  */
+					1 11  2  1  3  0>;      /* USBRN  */
+			};
+
 		};
 	};
 
@@ -280,11 +291,13 @@
 		};
 
 		usb@6c0 {
-			compatible = "qe_udc";
+			compatible = "fsl,qe_udc";
 			reg = <0x6c0 0x40 0x8b00 0x100>;
 			interrupts = <11>;
 			interrupt-parent = <&qeic>;
 			mode = "slave";
+			usb-clock = <21>;
+			pio-handle = <&pio_usb>;
 		};
 
 		enet0: ucc@2000 {
diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c
index 9d46e5b..92afd40 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
@@ -93,6 +93,12 @@ static void __init mpc836x_mds_setup_arch(void)
 
 		for (np = NULL; (np = of_find_node_by_name(np, "ucc")) != NULL;)
 			par_io_of_config(np);
+
+		np = of_find_compatible_node(NULL, NULL, "fsl,qe_udc");
+		if (np) {
+			par_io_of_config(np);
+			qe_usb_clock_set(np);
+		}
 	}
 
 	if ((np = of_find_compatible_node(NULL, "network", "ucc_geth"))
@@ -127,9 +133,20 @@ static void __init mpc836x_mds_setup_arch(void)
 			iounmap(immap);
 		}
 
-		iounmap(bcsr_regs);
 		of_node_put(np);
 	}
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,qe_udc");
+	if (np != NULL) {
+		/* Set the TESCs run on RGMII mode */
+		bcsr_regs[8] &= ~0xf0;
+		/* Enable the USB Device PHY */
+		bcsr_regs[13] &= ~0x0f;
+		udelay(1000);
+		bcsr_regs[13] |= 0x05;
+		of_node_put(np);
+	}
+	iounmap(bcsr_regs);
 #endif				/* CONFIG_QUICC_ENGINE */
 }
 
diff --git a/arch/powerpc/platforms/83xx/mpc83xx.h b/arch/powerpc/platforms/83xx/mpc83xx.h
index 2a7cbab..d025b47 100644
--- a/arch/powerpc/platforms/83xx/mpc83xx.h
+++ b/arch/powerpc/platforms/83xx/mpc83xx.h
@@ -63,5 +63,6 @@ extern void mpc83xx_restart(char *cmd);
 extern long mpc83xx_time_init(void);
 extern int mpc834x_usb_cfg(void);
 extern int mpc831x_usb_cfg(void);
+extern int qe_usb_clock_set(struct device_node *np);
 
 #endif				/* __MPC83XX_H__ */
diff --git a/arch/powerpc/platforms/83xx/usb.c b/arch/powerpc/platforms/83xx/usb.c
index cc99c28..3d04ab5 100644
--- a/arch/powerpc/platforms/83xx/usb.c
+++ b/arch/powerpc/platforms/83xx/usb.c
@@ -18,6 +18,7 @@
 #include <asm/io.h>
 #include <asm/prom.h>
 #include <sysdev/fsl_soc.h>
+#include <asm/qe.h>
 
 #include "mpc83xx.h"
 
@@ -240,3 +241,69 @@ int mpc837x_usb_cfg(void)
 	return ret;
 }
 #endif /* CONFIG_PPC_MPC837x */
+
+#ifdef CONFIG_QUICC_ENGINE
+/* QE USB_CLOCK configure functions */
+int qe_usb_clock_set(struct device_node *np)
+{
+	u32 tmpreg = 0;
+	struct qe_mux *qemux = NULL;
+	const int *clock;
+
+	qemux = &qe_immr->qmx;
+
+	clock = of_get_property(np, "usb-clock", NULL);
+	if (!clock)
+		return -EINVAL;
+
+	/* CLK21 -> USBCLK on MPC8360-PB*/
+	tmpreg = in_be32(&qemux->cmxgcr) & ~QE_CMXGCR_USBCS;
+	switch (*clock) {
+	case 21:
+		tmpreg |= 0x8;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 20, 2, 0, 1, 0);  /* PC20 for CLK21 */
+		break;
+	case 19:
+		tmpreg |= 0x7;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 18, 2, 0, 1, 0);  /* PC18 for CLK19 */
+		break;
+	case 17:
+		tmpreg |= 0x6;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 16, 2, 0, 1, 0);  /* PC16 for CLK17 */
+		break;
+	case 13:
+		tmpreg |= 0x5;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 12, 2, 0, 1, 0);  /* PC12 for CLK13 */
+		break;
+	case 9:
+		tmpreg |= 0x4;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 8, 2, 0, 1, 0);  /* PC8 for CLK9 */
+		break;
+	case 7:
+		tmpreg |= 0x3;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 6, 2, 0, 1, 0);  /* PC6 for CLK7 */
+		break;
+	case 5:
+		tmpreg |= 0x2;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 4, 2, 0, 1, 0);  /* PC4 for CLK5 */
+		break;
+	case 3:
+		tmpreg |= 0x1;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 2, 2, 0, 1, 0);  /* PC2 for CLK3 */
+		break;
+	default:
+		printk(KERN_ERR "Unsupport usb-clock input pin\n");
+	}
+
+	return 0;
+}
+#endif
+
-- 
1.5.5.1.248.g4b17

[PATCH 6/6] powerpc: add 82xx platform level support to SEC engine

From: Li Yang <hidden>
Date: 2008-08-06 06:50:12

Initialize base and size of SEC memory region and bus priority for SEC.

Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/include/asm/immap_cpm2.h     |    7 +++++--
 arch/powerpc/platforms/82xx/mpc8272_ads.c |    1 +
 arch/powerpc/platforms/82xx/pq2.c         |   19 +++++++++++++++++++
 arch/powerpc/platforms/82xx/pq2.h         |    1 +
 4 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/include/asm/immap_cpm2.h b/arch/powerpc/include/asm/immap_cpm2.h
index d4f069b..71de9d0 100644
--- a/arch/powerpc/include/asm/immap_cpm2.h
+++ b/arch/powerpc/include/asm/immap_cpm2.h
@@ -115,10 +115,13 @@ typedef struct	mem_ctlr {
 	u32	memc_immr;
 	u32	memc_pcibr0;
 	u32	memc_pcibr1;
-	u8	res10[16];
+	u32	secbr;
+	u8	res10[4];
+	u32	secmr;
+	u8	res11[4];
 	u32	memc_pcimsk0;
 	u32	memc_pcimsk1;
-	u8	res11[52];
+	u8	res12[52];
 } memctl_cpm2_t;
 
 /* System Integration Timers.
diff --git a/arch/powerpc/platforms/82xx/mpc8272_ads.c b/arch/powerpc/platforms/82xx/mpc8272_ads.c
index 69781e6..a98d97c 100644
--- a/arch/powerpc/platforms/82xx/mpc8272_ads.c
+++ b/arch/powerpc/platforms/82xx/mpc8272_ads.c
@@ -179,6 +179,7 @@ static void __init mpc8272_ads_setup_arch(void)
 
 	init_ioports();
 	pq2_init_pci();
+	pq2_init_sec();
 
 	if (ppc_md.progress)
 		ppc_md.progress("mpc8272_ads_setup_arch(), finish", 0);
diff --git a/arch/powerpc/platforms/82xx/pq2.c b/arch/powerpc/platforms/82xx/pq2.c
index 1b75902..bacb136 100644
--- a/arch/powerpc/platforms/82xx/pq2.c
+++ b/arch/powerpc/platforms/82xx/pq2.c
@@ -22,6 +22,8 @@
 #include <platforms/82xx/pq2.h>
 
 #define RMR_CSRE 0x00000001
+#define PQ2_SECMR_128K 0xfffe0000
+#define PQ2_ALRH_SEC 0x30126745
 
 void pq2_restart(char *cmd)
 {
@@ -35,6 +37,23 @@ void pq2_restart(char *cmd)
 	panic("Restart failed\n");
 }
 
+void __init pq2_init_sec(void)
+{
+	struct device_node *np = NULL;
+	struct resource res;
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,talitos");
+	if (!np)
+		return;
+
+	of_address_to_resource(np, 0, &res);
+	printk(KERN_INFO "Setting SECBR and SECMR\n");
+	out_be32(&cpm2_immr->im_memctl.secbr, (u32)res.start);
+	out_be32(&cpm2_immr->im_memctl.secmr, PQ2_SECMR_128K);
+	out_be32(&cpm2_immr->im_siu_conf.siu_82xx.sc_ppc_alrh, PQ2_ALRH_SEC);
+	of_node_put(np);
+}
+
 #ifdef CONFIG_PCI
 static int pq2_pci_exclude_device(struct pci_controller *hose,
                                   u_char bus, u8 devfn)
diff --git a/arch/powerpc/platforms/82xx/pq2.h b/arch/powerpc/platforms/82xx/pq2.h
index a41f84a..98d3c3c 100644
--- a/arch/powerpc/platforms/82xx/pq2.h
+++ b/arch/powerpc/platforms/82xx/pq2.h
@@ -2,6 +2,7 @@
 #define _PQ2_H
 
 void pq2_restart(char *cmd);
+void pq2_init_sec(void);
 
 #ifdef CONFIG_PCI
 int pq2ads_pci_init_irq(void);
-- 
1.5.5.1.248.g4b17

Re: [PATCH 4/6] powerpc: add USB peripheral support to MPC8272ADS

From: Stephen Rothwell <hidden>
Date: 2008-08-06 07:48:37

Hi Li,

On Wed,  6 Aug 2008 15:04:43 +0800 Li Yang [off-list ref] wrote:
quoted hunk
@@ -150,6 +169,12 @@ static void __init mpc8272_ads_setup_arch(void)
 	clrbits32(&bcsr[3], BCSR3_FETHIEN2);
 	setbits32(&bcsr[3], BCSR3_FETH2_RST);
 
+	/* Enabling USB support in BCSR */
+	np = of_find_compatible_node(NULL, NULL, "fsl,qe_udc");
+	if (np != NULL) {
		of_node_put(np);
quoted hunk
+		clrbits32(&bcsr[3], BCSR3_USB_EN);
+		clrbits32(&bcsr[3], BCSR3_USB_HI_SPEED);
+	}
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

Re: [PATCH 5/6] powerpc: add USB peripheral support to MPC836xMDS

From: Stephen Rothwell <hidden>
Date: 2008-08-06 07:50:33

Hi Li,

On Wed,  6 Aug 2008 15:04:44 +0800 Li Yang [off-list ref] wrote:
quoted hunk
@@ -93,6 +93,12 @@ static void __init mpc836x_mds_setup_arch(void)
 
 		for (np = NULL; (np = of_find_node_by_name(np, "ucc")) != NULL;)
 			par_io_of_config(np);
+
+		np = of_find_compatible_node(NULL, NULL, "fsl,qe_udc");
+		if (np) {
+			par_io_of_config(np);
+			qe_usb_clock_set(np);
			of_node_put(np);
+		}
-- 
Cheers,
Stephen Rothwell                    sfr@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/

Re: [PATCH 5/6] powerpc: add USB peripheral support to MPC836xMDS

From: Anton Vorontsov <hidden>
Date: 2008-08-06 12:07:50

Hello Li,

On Wed, Aug 06, 2008 at 03:04:44PM +0800, Li Yang wrote:
quoted hunk
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/boot/dts/mpc836x_mds.dts     |   15 ++++++-
 arch/powerpc/platforms/83xx/mpc836x_mds.c |   19 ++++++++-
 arch/powerpc/platforms/83xx/mpc83xx.h     |    1 +
 arch/powerpc/platforms/83xx/usb.c         |   67 +++++++++++++++++++++++++++++
 4 files changed, 100 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index a3b76a7..596377b 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -235,6 +235,17 @@
 					0  2  1  0  1  0>; /* MDC */
 			};
 
+			pio_usb: usb_pin@01 {
+				pio-map = <
+			/* port  pin  dir  open_drain  assignment  has_irq */
+					1  2  1  0  3  0        /* USBOE  */
+					1  3  1  0  3  0        /* USBTP  */
+					1  8  1  0  1  0        /* USBTN  */
+					1 10  2  0  3  0        /* USBRXD */
+					1  9  2  1  3  0        /* USBRP  */
+					1 11  2  1  3  0>;      /* USBRN  */
+			};
+
 		};
 	};
 
@@ -280,11 +291,13 @@
 		};
 
 		usb@6c0 {
-			compatible = "qe_udc";
+			compatible = "fsl,qe_udc";
You might want to reuse existing bindings as described in
Documentation/powerpc/dts-bindings/fsl/cpm_qe/qe/usb.txt.
 			reg = <0x6c0 0x40 0x8b00 0x100>;
 			interrupts = <11>;
 			interrupt-parent = <&qeic>;
 			mode = "slave";
I'd suggest to rename this to "peripheral" as we use for fsl dual-role
usb controller.
+			usb-clock = <21>;
+			pio-handle = <&pio_usb>;
Can we not introduce new pio maps? The pio setup should be done
by the firmware, or at least fixed up via the board file, as in
arch/powerpc/platforms/83xx/mpc832x_rdb.c.

[...]
quoted hunk
+#ifdef CONFIG_QUICC_ENGINE
+/* QE USB_CLOCK configure functions */
+int qe_usb_clock_set(struct device_node *np)
We already have this function, in arch/powerpc/sysdev/qe_lib/usb.c

It does not parse any of properties though, driver should do this.
quoted hunk
+{
+	u32 tmpreg = 0;
+	struct qe_mux *qemux = NULL;
+	const int *clock;
+
+	qemux = &qe_immr->qmx;
+
+	clock = of_get_property(np, "usb-clock", NULL);
+	if (!clock)
+		return -EINVAL;
+
+	/* CLK21 -> USBCLK on MPC8360-PB*/
+	tmpreg = in_be32(&qemux->cmxgcr) & ~QE_CMXGCR_USBCS;
+	switch (*clock) {
+	case 21:
+		tmpreg |= 0x8;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 20, 2, 0, 1, 0);  /* PC20 for CLK21 */
No, pio config is very board-specific. This should be done by the
firmware (ideally) or by the board file.

Thanks,

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

Re: [PATCH 2/6] powerpc: export cpm2_immr symbol for CPM2 drivers to compile as module

From: Anton Vorontsov <hidden>
Date: 2008-08-06 15:24:55

On Wed, Aug 06, 2008 at 03:04:41PM +0800, Li Yang wrote:
quoted hunk
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/sysdev/cpm2.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/sysdev/cpm2.c b/arch/powerpc/sysdev/cpm2.c
index f1c3395..021480e 100644
--- a/arch/powerpc/sysdev/cpm2.c
+++ b/arch/powerpc/sysdev/cpm2.c
@@ -52,6 +52,7 @@ cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor space */
  * the communication processor devices.
  */
 cpm2_map_t __iomem *cpm2_immr;
+EXPORT_SYMBOL(cpm2_immr);
This is uneeded if you'll start using cpm_muram_* functions
from include/asm-powerpc/cpm.h.

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

Re: [PATCH 4/6] powerpc: add USB peripheral support to MPC8272ADS

From: Scott Wood <hidden>
Date: 2008-08-06 17:19:56

On Wed, Aug 06, 2008 at 03:04:43PM +0800, Li Yang wrote:
quoted hunk
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/boot/dts/mpc8272ads.dts      |    8 ++++++++
 arch/powerpc/platforms/82xx/mpc8272_ads.c |   25 +++++++++++++++++++++++++
 arch/powerpc/platforms/82xx/pq2ads.h      |    3 +++
 3 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/boot/dts/mpc8272ads.dts b/arch/powerpc/boot/dts/mpc8272ads.dts
index b2ce4c0..75cc94c 100644
--- a/arch/powerpc/boot/dts/mpc8272ads.dts
+++ b/arch/powerpc/boot/dts/mpc8272ads.dts
@@ -256,6 +256,14 @@
 				#address-cells = <1>;
 				#size-cells = <0>;
 			};
+
+			usb@11b60 {
+				compatible = "fsl,qe_udc";
"fsl,mpc8272-usb", "fsl,cpm2-usb".

Where is fsl,qe_udc documented or used (other than in the BCSR setup)?
What does "udc" mean (the only reference to it in the 8272 manual is
under ATM)?
+				mode = "slave";
Please document this property.

-Scott

Re: [PATCH 6/6] powerpc: add 82xx platform level support to SEC engine

From: Scott Wood <hidden>
Date: 2008-08-06 17:27:59

On Wed, Aug 06, 2008 at 03:04:45PM +0800, Li Yang wrote:
quoted hunk
diff --git a/arch/powerpc/platforms/82xx/pq2.c b/arch/powerpc/platforms/82xx/pq2.c
index 1b75902..bacb136 100644
--- a/arch/powerpc/platforms/82xx/pq2.c
+++ b/arch/powerpc/platforms/82xx/pq2.c
@@ -22,6 +22,8 @@
 #include <platforms/82xx/pq2.h>
 
 #define RMR_CSRE 0x00000001
+#define PQ2_SECMR_128K 0xfffe0000
+#define PQ2_ALRH_SEC 0x30126745
 
 void pq2_restart(char *cmd)
 {
@@ -35,6 +37,23 @@ void pq2_restart(char *cmd)
 	panic("Restart failed\n");
 }
 
+void __init pq2_init_sec(void)
+{
+	struct device_node *np = NULL;
+	struct resource res;
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,talitos");
This is an obsolete binding. 
See "Documentation/powerpc/dts-bindings/fsl/sec.txt".
quoted hunk
+	if (!np)
+		return;
+
+	of_address_to_resource(np, 0, &res);
+	printk(KERN_INFO "Setting SECBR and SECMR\n");
This is an unnecessary printk().
quoted hunk
+	out_be32(&cpm2_immr->im_memctl.secbr, (u32)res.start);
+	out_be32(&cpm2_immr->im_memctl.secmr, PQ2_SECMR_128K);
+	out_be32(&cpm2_immr->im_siu_conf.siu_82xx.sc_ppc_alrh, PQ2_ALRH_SEC);
Please put some comments here explaining what you're doing, such as 
/* Map the SEC registers */, and /* Lower the SEC arbitration priority */.

-Scott

Re: [PATCH 5/6] powerpc: add USB peripheral support to MPC836xMDS

From: Scott Wood <hidden>
Date: 2008-08-06 17:29:26

On Wed, Aug 06, 2008 at 03:04:44PM +0800, Li Yang wrote:
quoted hunk
 		usb@6c0 {
-			compatible = "qe_udc";
+			compatible = "fsl,qe_udc";
[snip]
quoted hunk
+
+		np = of_find_compatible_node(NULL, NULL, "fsl,qe_udc");
+		if (np) {
+			par_io_of_config(np);
+			qe_usb_clock_set(np);
+		}
What about existing device trees in use?
+		printk(KERN_ERR "Unsupport usb-clock input pin\n");
s/Unsupport/Unsupported/

-Scott

Re: [PATCH 5/6] powerpc: add USB peripheral support to MPC836xMDS

From: Li Yang <hidden>
Date: 2008-08-07 03:18:10

On Wed, 2008-08-06 at 12:29 -0500, Scott Wood wrote:
On Wed, Aug 06, 2008 at 03:04:44PM +0800, Li Yang wrote:
quoted
 		usb@6c0 {
-			compatible = "qe_udc";
+			compatible = "fsl,qe_udc";
[snip]
quoted
+
+		np = of_find_compatible_node(NULL, NULL, "fsl,qe_udc");
+		if (np) {
+			par_io_of_config(np);
+			qe_usb_clock_set(np);
+		}
What about existing device trees in use?
This node was never used in existing device trees for mainline kernel.

- Leo

Re: [PATCH 4/6] powerpc: add USB peripheral support to MPC8272ADS

From: Li Yang <hidden>
Date: 2008-08-07 03:35:26

On Wed, 2008-08-06 at 12:19 -0500, Scott Wood wrote:
On Wed, Aug 06, 2008 at 03:04:43PM +0800, Li Yang wrote:
quoted
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/boot/dts/mpc8272ads.dts      |    8 ++++++++
 arch/powerpc/platforms/82xx/mpc8272_ads.c |   25 +++++++++++++++++++++++++
 arch/powerpc/platforms/82xx/pq2ads.h      |    3 +++
 3 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/boot/dts/mpc8272ads.dts b/arch/powerpc/boot/dts/mpc8272ads.dts
index b2ce4c0..75cc94c 100644
--- a/arch/powerpc/boot/dts/mpc8272ads.dts
+++ b/arch/powerpc/boot/dts/mpc8272ads.dts
@@ -256,6 +256,14 @@
 				#address-cells = <1>;
 				#size-cells = <0>;
 			};
+
+			usb@11b60 {
+				compatible = "fsl,qe_udc";
"fsl,mpc8272-usb", "fsl,cpm2-usb".

Where is fsl,qe_udc documented or used (other than in the BCSR setup)?
What does "udc" mean (the only reference to it in the 8272 manual is
under ATM)?
udc is a common name for USB device mode drivers to work with Linux
gadget.  We will have two separate drivers for USB host and device.
Probably we can have two compatibles "fsl,qe_udc" and "fsl,qe-usb-host"

- Leo

Re: [PATCH 5/6] powerpc: add USB peripheral support to MPC836xMDS

From: Li Yang <hidden>
Date: 2008-08-07 09:16:56

Hi Anton,

On Wed, 2008-08-06 at 16:07 +0400, Anton Vorontsov wrote:
Hello Li,

On Wed, Aug 06, 2008 at 03:04:44PM +0800, Li Yang wrote:
quoted
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/boot/dts/mpc836x_mds.dts     |   15 ++++++-
 arch/powerpc/platforms/83xx/mpc836x_mds.c |   19 ++++++++-
 arch/powerpc/platforms/83xx/mpc83xx.h     |    1 +
 arch/powerpc/platforms/83xx/usb.c         |   67 +++++++++++++++++++++++++++++
 4 files changed, 100 insertions(+), 2 deletions(-)
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index a3b76a7..596377b 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -235,6 +235,17 @@
 					0  2  1  0  1  0>; /* MDC */
 			};
 
+			pio_usb: usb_pin@01 {
+				pio-map = <
+			/* port  pin  dir  open_drain  assignment  has_irq */
+					1  2  1  0  3  0        /* USBOE  */
+					1  3  1  0  3  0        /* USBTP  */
+					1  8  1  0  1  0        /* USBTN  */
+					1 10  2  0  3  0        /* USBRXD */
+					1  9  2  1  3  0        /* USBRP  */
+					1 11  2  1  3  0>;      /* USBRN  */
+			};
+
 		};
 	};
 
@@ -280,11 +291,13 @@
 		};
 
 		usb@6c0 {
-			compatible = "qe_udc";
+			compatible = "fsl,qe_udc";

2 more quoted lines

Ok.  I didn't notice your addition to the binding.  I will try to update
it for device mode.
quoted
 			reg = <0x6c0 0x40 0x8b00 0x100>;
 			interrupts = <11>;
 			interrupt-parent = <&qeic>;
 			mode = "slave";
I'd suggest to rename this to "peripheral" as we use for fsl dual-role
usb controller.
As there will be two drivers chosen by compatible, I'm now inclined to
put this information in compatible.
quoted
+			usb-clock = <21>;
+			pio-handle = <&pio_usb>;
Can we not introduce new pio maps? The pio setup should be done
by the firmware, or at least fixed up via the board file, as in
arch/powerpc/platforms/83xx/mpc832x_rdb.c.
Actually I am more apt to leaving full hardware access to kernel than
firmware, especially for devices that are not used in firmware.  The
reason why I made the pin-configuration flexible is that for development
boards the role of pins are often changeable.
[...]
quoted
+#ifdef CONFIG_QUICC_ENGINE
+/* QE USB_CLOCK configure functions */
+int qe_usb_clock_set(struct device_node *np)
We already have this function, in arch/powerpc/sysdev/qe_lib/usb.c
I just saw this.  Will try to reuse it.
It does not parse any of properties though, driver should do this.
quoted
+{
+	u32 tmpreg = 0;
+	struct qe_mux *qemux = NULL;
+	const int *clock;
+
+	qemux = &qe_immr->qmx;
+
+	clock = of_get_property(np, "usb-clock", NULL);
+	if (!clock)
+		return -EINVAL;
+
+	/* CLK21 -> USBCLK on MPC8360-PB*/
+	tmpreg = in_be32(&qemux->cmxgcr) & ~QE_CMXGCR_USBCS;
+	switch (*clock) {
+	case 21:
+		tmpreg |= 0x8;
+		out_be32(&qemux->cmxgcr, tmpreg);
+		par_io_config_pin(2, 20, 2, 0, 1, 0);  /* PC20 for CLK21 */
No, pio config is very board-specific. This should be done by the
firmware (ideally) or by the board file.
Pio config is board and board configuration specific.  It's better to
make it configurable by device tree.

- Leo

Re: [PATCH 2/6] powerpc: export cpm2_immr symbol for CPM2 drivers to compile as module

From: Li Yang <hidden>
Date: 2008-08-07 10:04:33

On Wed, 2008-08-06 at 19:24 +0400, Anton Vorontsov wrote:
On Wed, Aug 06, 2008 at 03:04:41PM +0800, Li Yang wrote:
quoted
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/sysdev/cpm2.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/sysdev/cpm2.c b/arch/powerpc/sysdev/cpm2.c
index f1c3395..021480e 100644
--- a/arch/powerpc/sysdev/cpm2.c
+++ b/arch/powerpc/sysdev/cpm2.c
@@ -52,6 +52,7 @@ cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor space */
  * the communication processor devices.
  */
 cpm2_map_t __iomem *cpm2_immr;
+EXPORT_SYMBOL(cpm2_immr);
This is uneeded if you'll start using cpm_muram_* functions
from include/asm-powerpc/cpm.h.
Right.  But there are still a few in tree drivers rely on this such as
fs_enet.

Ps: In your cpm_muram_init() you re-mapped the muram space separately .
Are we planning to get rid of cpm2_immr completely and manage memory
mapping by each block?

- Leo

Re: [PATCH 2/6] powerpc: export cpm2_immr symbol for CPM2 drivers to compile as module

From: Anton Vorontsov <hidden>
Date: 2008-08-07 11:38:11

On Thu, Aug 07, 2008 at 06:19:22PM +0800, Li Yang wrote:
On Wed, 2008-08-06 at 19:24 +0400, Anton Vorontsov wrote:
quoted
On Wed, Aug 06, 2008 at 03:04:41PM +0800, Li Yang wrote:
quoted
Signed-off-by: Li Yang <redacted>
---
 arch/powerpc/sysdev/cpm2.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/arch/powerpc/sysdev/cpm2.c b/arch/powerpc/sysdev/cpm2.c
index f1c3395..021480e 100644
--- a/arch/powerpc/sysdev/cpm2.c
+++ b/arch/powerpc/sysdev/cpm2.c
@@ -52,6 +52,7 @@ cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor space */
  * the communication processor devices.
  */
 cpm2_map_t __iomem *cpm2_immr;
+EXPORT_SYMBOL(cpm2_immr);
This is uneeded if you'll start using cpm_muram_* functions
from include/asm-powerpc/cpm.h.
Right.  But there are still a few in tree drivers rely on this such as
fs_enet.
Probably they should be fixed... Only two users left:

$ git-grep cpm2_immr drivers/
drivers/mtd/maps/wr_sbc82xx_flash.c:    volatile memctl_cpm2_t *mc = &cpm2_immr->im_memctl;
drivers/mtd/maps/wr_sbc82xx_flash.c:    mc = &cpm2_immr->im_memctl;
drivers/net/fs_enet/fs_enet-main.c:     fs_enet_immap = cpm2_immr;
drivers/net/fs_enet/mac-fcc.c:  fep->fcc.mem = (void __iomem *)cpm2_immr;

I think wr_sbc82xx_flash.c is superseded by the physmap_of driver. There
is no single CONFIG_MTD_SBC8240 enabled in the powerpc/configs.

Plus, I wonder how they didn't break the build all that time w/o
EXPORT_SYMBOL(). Probably nobody tried to build them as modules.
Ps: In your cpm_muram_init() you re-mapped the muram space separately .
Are we planning to get rid of cpm2_immr completely and manage memory
mapping by each block?
At least I always thought so...

Thanks,

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

Re: [PATCH 5/6] powerpc: add USB peripheral support to MPC836xMDS

From: Anton Vorontsov <hidden>
Date: 2008-08-07 13:23:13

On Thu, Aug 07, 2008 at 05:31:44PM +0800, Li Yang wrote:
[...]
quoted
quoted
 			reg = <0x6c0 0x40 0x8b00 0x100>;
 			interrupts = <11>;
 			interrupt-parent = <&qeic>;
 			mode = "slave";
I'd suggest to rename this to "peripheral" as we use for fsl dual-role
usb controller.
As there will be two drivers chosen by compatible, I'm now inclined to
put this information in compatible.
Please don't. I deliberately wrote bindings w/o specifing "udc" or
"host" in the compatible entry.

"udc"/"host" is the modes of an USB controller, but the controller
itself is the same: "fsl,mpc8323-qe-usb" (the first chip with QE USB).

So the driver should always match this device, but it can return
-ENODEV if mode is unspecified or !peripheral.
quoted
quoted
+			usb-clock = <21>;
+			pio-handle = <&pio_usb>;
Can we not introduce new pio maps? The pio setup should be done
by the firmware, or at least fixed up via the board file, as in
arch/powerpc/platforms/83xx/mpc832x_rdb.c.
Actually I am more apt to leaving full hardware access to kernel than
firmware, especially for devices that are not used in firmware.  The
reason why I made the pin-configuration flexible is that for development
boards the role of pins are often changeable.
[...]
Pio config is board and board configuration specific.  It's better to
make it configurable by device tree.
Device tree isn't configuration file. The bad thing about pio-map is that
it is passing raw values instead of actually describing the hardware.

For example,

pio-map = <1  6  2  0  1  0>;

The thing describes bankB/pin6.. but you'll can't tell what exactly
this pin supposed to do. :-/

Basically "pio-map" is expanded version of this:

fsl,cpodr-reg = <0x...>;
fsl,cppar1-reg = <0x...>;
fsl,cppar2-reg = <0x...>;
...


Instead, it would be great to have something like this:

usb@... {
	/*
	 *      gpio/pinmux    pin
	 *      controller
	 */
	pio-map = <&pinmuxA     1 /* bindings says first pin is clk */
		   &pinmuxB    14 /* bindings says second pin is usboe */
		   ...>;
};

ucc@... {
	pio-map = <&pinmuxA     2 /* bindings says first pin is clk */
		   &pinmuxB    24 /* bindings says second pin is rxd0 */
		   &pinmuxB    21 /* bindings says second pin is rxd1 */
		   ...>;
};

Then drivers would call something like this in probe():

19 more lines

Re: [PATCH 4/6] powerpc: add USB peripheral support to MPC8272ADS

From: Scott Wood <hidden>
Date: 2008-08-07 14:19:46

On Thu, Aug 07, 2008 at 11:50:14AM +0800, Li Yang wrote:
udc is a common name for USB device mode drivers to work with Linux
gadget.  We will have two separate drivers for USB host and device.
Probably we can have two compatibles "fsl,qe_udc" and "fsl,qe-usb-host"
1. If you have separate compatibles, what do you need the "mode" property
for?
2. mpc8272 is not QE.
3. fsl,cpm2-usb-slave would be much more readable than fsl,qe_udc.

-Scott
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help