[PATCH] USB: gadget: pxa25x: support additional IXP425 steppings

STALE5943d

7 messages, 3 authors, 2010-04-23 · open the first message on its own page

[PATCH] USB: gadget: pxa25x: support additional IXP425 steppings

From: Steve Bennett <hidden>
Date: 2010-03-23 04:35:13

Here is a trivial patch to add support pxa25x_udc for additional IXP
steppings.

Please let me know if I should send this anywhere else/instead.

Cheers,
Steve
--
?Web: Embedded Web Framework - http://uweb.workware.net.au/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-USB-gadget-pxa25x-support-additional-IXP425-stepping.patch
Type: application/octet-stream
Size: 1167 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100323/4d800319/attachment.obj>

[PATCH] USB: gadget: pxa25x: support additional IXP425 steppings

From: Hendrik Sattler <hidden>
Date: 2010-03-23 08:30:09

Zitat von Steve Bennett [off-list ref]:
Here is a trivial patch to add support pxa25x_udc for additional IXP
steppings.

Please let me know if I should send this anywhere else/instead.
Your patch really is not the right approach.

I had a similar patch some time ago[1]. This driver part should  
actually be reworked to not use that ifdef and switch-case thing (and  
not read the cpu id register itself, either).

[1]: http://www.spinics.net/lists/arm-kernel/msg62009.html

I am not up-to-date how far Russell got with his proposed changes.

HS

[PATCH] USB: gadget: pxa25x: support additional IXP425 steppings

From: Steve Bennett <hidden>
Date: 2010-03-23 08:37:36

On 23/03/2010, at 6:30 PM, Hendrik Sattler wrote:
Zitat von Steve Bennett [off-list ref]:
quoted
Here is a trivial patch to add support pxa25x_udc for additional IXP
steppings.

Please let me know if I should send this anywhere else/instead.
Your patch really is not the right approach.

I had a similar patch some time ago[1]. This driver part should actually be reworked to not use that ifdef and switch-case thing (and not read the cpu id register itself, either).

[1]: http://www.spinics.net/lists/arm-kernel/msg62009.html

I am not up-to-date how far Russell got with his proposed changes.

HS
Thanks. I see Russell's proposed patch at http://www.spinics.net/lists/arm-kernel/msg63303.html

Doesn't look like this got any further. It's been a year now (which is why I missed this thread).

Russell, is there something stopping us going with your patch?
Does it just need some updating/testing?

Cheers,
Steve
--
?Web: Embedded Web Framework - http://uweb.workware.net.au/

[PATCH] USB: gadget: pxa25x: support additional IXP425 steppings

From: Russell King - ARM Linux <hidden>
Date: 2010-03-23 09:20:59

On Tue, Mar 23, 2010 at 06:37:36PM +1000, Steve Bennett wrote:
Russell, is there something stopping us going with your patch?
Nothing really - only lack of motivation and sufficient reason to make
the change.
Does it just need some updating/testing?
After a year, it certainly will do.

[PATCH] USB: gadget: pxa25x: support additional IXP425 steppings

From: Steve Bennett <hidden>
Date: 2010-03-23 12:58:00

On 23/03/2010, at 7:20 PM, Russell King - ARM Linux wrote:
On Tue, Mar 23, 2010 at 06:37:36PM +1000, Steve Bennett wrote:
quoted
Russell, is there something stopping us going with your patch?
Nothing really - only lack of motivation and sufficient reason to make
the change.
quoted
Does it just need some updating/testing?
After a year, it certainly will do.
OK. Your patch and Hendrik's are largely independent.
If I update Hendrik's patch will that do?
Something like this:
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index be5fb34..b63b65c 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -2096,39 +2096,11 @@ static struct pxa25x_udc memory = {
 #endif /* !CONFIG_USB_PXA25X_SMALL */
 };
 
-#define CP15R0_VENDOR_MASK	0xffffe000
-
-#if	defined(CONFIG_ARCH_PXA)
-#define CP15R0_XSCALE_VALUE	0x69052000	/* intel/arm/xscale */
-
-#elif	defined(CONFIG_ARCH_IXP4XX)
-#define CP15R0_XSCALE_VALUE	0x69054000	/* intel/arm/ixp4xx */
-
-#endif
-
 #define CP15R0_PROD_MASK	0x000003f0
-#define PXA25x			0x00000100	/* and PXA26x */
-#define PXA210			0x00000120
-
 #define CP15R0_REV_MASK		0x0000000f
-
 #define CP15R0_PRODREV_MASK	(CP15R0_PROD_MASK | CP15R0_REV_MASK)
 
 #define PXA255_A0		0x00000106	/* or PXA260_B1 */
-#define PXA250_C0		0x00000105	/* or PXA26x_B0 */
-#define PXA250_B2		0x00000104
-#define PXA250_B1		0x00000103	/* or PXA260_A0 */
-#define PXA250_B0		0x00000102
-#define PXA250_A1		0x00000101
-#define PXA250_A0		0x00000100
-
-#define PXA210_C0		0x00000125
-#define PXA210_B2		0x00000124
-#define PXA210_B1		0x00000123
-#define PXA210_B0		0x00000122
-#define IXP425_A0		0x000001c1
-#define IXP425_B0		0x000001f1
-#define IXP465_AD		0x00000200
 
 /*
  *	probe - binds to the platform device
@@ -2137,42 +2109,24 @@ static int __init pxa25x_udc_probe(struct platform_device *pdev)
 {
 	struct pxa25x_udc *dev = &memory;
 	int retval, vbus_irq, irq;
-	u32 chiprev;
 
-	/* insist on Intel/ARM/XScale */
-	asm("mrc%? p15, 0, %0, c0, c0" : "=r" (chiprev));
-	if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) {
-		pr_err("%s: not XScale!\n", driver_name);
-		return -ENODEV;
-	}
+#if defined(CONFIG_ARCH_PXA)
+	if (cpu_is_pxa210() || cpu_is_pxa25x()) {
+		if ((read_cpuid_id() & CP15R0_PRODREV_MASK) == PXA255_A0)
+			dev->has_cfr = 1;
+		/* PXA250_A0/A1 "not released"; ep 13, 15 unusable */
+		/* PXA21x/PXA25x with stepping < C0: OUT-DMA is broken ... */
+	} else {
 
-	/* trigger chiprev-specific logic */
-	switch (chiprev & CP15R0_PRODREV_MASK) {
-#if	defined(CONFIG_ARCH_PXA)
-	case PXA255_A0:
-		dev->has_cfr = 1;
-		break;
-	case PXA250_A0:
-	case PXA250_A1:
-		/* A0/A1 "not released"; ep 13, 15 unusable */
-		/* fall through */
-	case PXA250_B2: case PXA210_B2:
-	case PXA250_B1: case PXA210_B1:
-	case PXA250_B0: case PXA210_B0:
-		/* OUT-DMA is broken ... */
-		/* fall through */
-	case PXA250_C0: case PXA210_C0:
-		break;
-#elif	defined(CONFIG_ARCH_IXP4XX)
-	case IXP425_A0:
-	case IXP425_B0:
-	case IXP465_AD:
+#elif defined(CONFIG_ARCH_IXP4XX)
+	if (cpu_is_ixp42x() || cpu_is_ixp43x() || cpu_is_ixp46x())
 		dev->has_cfr = 1;
-		break;
+	else {
+
+#else
+	{
 #endif
-	default:
-		pr_err("%s: unrecognized processor: %08x\n",
-			driver_name, chiprev);
+		pr_err("%s: unrecognized processor\n", driver_name);
 		/* iop3xx, ixp4xx, ... */
 		return -ENODEV;
 	}


Steve
--
?Web: Embedded Web Framework - http://uweb.workware.net.au/

[PATCH] USB: gadget: pxa25x: support additional IXP425 steppings

From: Steve Bennett <hidden>
Date: 2010-04-23 01:48:59

Use generic cpu_is_...
Modified version of patch by Hendrik Sattler

Signed-off-by: Steve Bennett <redacted>
---
 drivers/usb/gadget/pxa25x_udc.c |   74 +++++++-------------------------------
 1 files changed, 14 insertions(+), 60 deletions(-)
diff --git a/drivers/usb/gadget/pxa25x_udc.c b/drivers/usb/gadget/pxa25x_udc.c
index be5fb34..b63b65c 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -2096,39 +2096,11 @@ static struct pxa25x_udc memory = {
 #endif /* !CONFIG_USB_PXA25X_SMALL */
 };
 
-#define CP15R0_VENDOR_MASK	0xffffe000
-
-#if	defined(CONFIG_ARCH_PXA)
-#define CP15R0_XSCALE_VALUE	0x69052000	/* intel/arm/xscale */
-
-#elif	defined(CONFIG_ARCH_IXP4XX)
-#define CP15R0_XSCALE_VALUE	0x69054000	/* intel/arm/ixp4xx */
-
-#endif
-
 #define CP15R0_PROD_MASK	0x000003f0
-#define PXA25x			0x00000100	/* and PXA26x */
-#define PXA210			0x00000120
-
 #define CP15R0_REV_MASK		0x0000000f
-
 #define CP15R0_PRODREV_MASK	(CP15R0_PROD_MASK | CP15R0_REV_MASK)
 
 #define PXA255_A0		0x00000106	/* or PXA260_B1 */
-#define PXA250_C0		0x00000105	/* or PXA26x_B0 */
-#define PXA250_B2		0x00000104
-#define PXA250_B1		0x00000103	/* or PXA260_A0 */
-#define PXA250_B0		0x00000102
-#define PXA250_A1		0x00000101
-#define PXA250_A0		0x00000100
-
-#define PXA210_C0		0x00000125
-#define PXA210_B2		0x00000124
-#define PXA210_B1		0x00000123
-#define PXA210_B0		0x00000122
-#define IXP425_A0		0x000001c1
-#define IXP425_B0		0x000001f1
-#define IXP465_AD		0x00000200
 
 /*
  *	probe - binds to the platform device
@@ -2137,42 +2109,24 @@ static int __init pxa25x_udc_probe(struct platform_device *pdev)
 {
 	struct pxa25x_udc *dev = &memory;
 	int retval, vbus_irq, irq;
-	u32 chiprev;
 
-	/* insist on Intel/ARM/XScale */
-	asm("mrc%? p15, 0, %0, c0, c0" : "=r" (chiprev));
-	if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) {
-		pr_err("%s: not XScale!\n", driver_name);
-		return -ENODEV;
-	}
+#if defined(CONFIG_ARCH_PXA)
+	if (cpu_is_pxa210() || cpu_is_pxa25x()) {
+		if ((read_cpuid_id() & CP15R0_PRODREV_MASK) == PXA255_A0)
+			dev->has_cfr = 1;
+		/* PXA250_A0/A1 "not released"; ep 13, 15 unusable */
+		/* PXA21x/PXA25x with stepping < C0: OUT-DMA is broken ... */
+	} else {
 
-	/* trigger chiprev-specific logic */
-	switch (chiprev & CP15R0_PRODREV_MASK) {
-#if	defined(CONFIG_ARCH_PXA)
-	case PXA255_A0:
-		dev->has_cfr = 1;
-		break;
-	case PXA250_A0:
-	case PXA250_A1:
-		/* A0/A1 "not released"; ep 13, 15 unusable */
-		/* fall through */
-	case PXA250_B2: case PXA210_B2:
-	case PXA250_B1: case PXA210_B1:
-	case PXA250_B0: case PXA210_B0:
-		/* OUT-DMA is broken ... */
-		/* fall through */
-	case PXA250_C0: case PXA210_C0:
-		break;
-#elif	defined(CONFIG_ARCH_IXP4XX)
-	case IXP425_A0:
-	case IXP425_B0:
-	case IXP465_AD:
+#elif defined(CONFIG_ARCH_IXP4XX)
+	if (cpu_is_ixp42x() || cpu_is_ixp43x() || cpu_is_ixp46x())
 		dev->has_cfr = 1;
-		break;
+	else {
+
+#else
+	{
 #endif
-	default:
-		pr_err("%s: unrecognized processor: %08x\n",
-			driver_name, chiprev);
+		pr_err("%s: unrecognized processor\n", driver_name);
 		/* iop3xx, ixp4xx, ... */
 		return -ENODEV;
 	}
-- 
1.7.0.3

[PATCH] USB: gadget: pxa25x: support additional IXP425 steppings

From: Hendrik Sattler <hidden>
Date: 2010-04-23 04:36:59

Am Freitag 23 April 2010 03:48:59 schrieb Steve Bennett:
Use generic cpu_is_...
Modified version of patch by Hendrik Sattler

Signed-off-by: Steve Bennett <redacted>
I'd really like to see this go in.

Signed-off-by: Hendrik Sattler<redacted>
quoted hunk
---
 drivers/usb/gadget/pxa25x_udc.c |   74
+++++++------------------------------- 1 files changed, 14 insertions(+),
60 deletions(-)
diff --git a/drivers/usb/gadget/pxa25x_udc.c
b/drivers/usb/gadget/pxa25x_udc.c index be5fb34..b63b65c 100644
--- a/drivers/usb/gadget/pxa25x_udc.c
+++ b/drivers/usb/gadget/pxa25x_udc.c
@@ -2096,39 +2096,11 @@ static struct pxa25x_udc memory = {
 #endif /* !CONFIG_USB_PXA25X_SMALL */
 };

-#define CP15R0_VENDOR_MASK	0xffffe000
-
-#if	defined(CONFIG_ARCH_PXA)
-#define CP15R0_XSCALE_VALUE	0x69052000	/* intel/arm/xscale */
-
-#elif	defined(CONFIG_ARCH_IXP4XX)
-#define CP15R0_XSCALE_VALUE	0x69054000	/* intel/arm/ixp4xx */
-
-#endif
-
 #define CP15R0_PROD_MASK	0x000003f0
-#define PXA25x			0x00000100	/* and PXA26x */
-#define PXA210			0x00000120
-
 #define CP15R0_REV_MASK		0x0000000f
-
 #define CP15R0_PRODREV_MASK	(CP15R0_PROD_MASK | CP15R0_REV_MASK)

 #define PXA255_A0		0x00000106	/* or PXA260_B1 */
-#define PXA250_C0		0x00000105	/* or PXA26x_B0 */
-#define PXA250_B2		0x00000104
-#define PXA250_B1		0x00000103	/* or PXA260_A0 */
-#define PXA250_B0		0x00000102
-#define PXA250_A1		0x00000101
-#define PXA250_A0		0x00000100
-
-#define PXA210_C0		0x00000125
-#define PXA210_B2		0x00000124
-#define PXA210_B1		0x00000123
-#define PXA210_B0		0x00000122
-#define IXP425_A0		0x000001c1
-#define IXP425_B0		0x000001f1
-#define IXP465_AD		0x00000200

 /*
  *	probe - binds to the platform device
@@ -2137,42 +2109,24 @@ static int __init pxa25x_udc_probe(struct
platform_device *pdev) {
 	struct pxa25x_udc *dev = &memory;
 	int retval, vbus_irq, irq;
-	u32 chiprev;

-	/* insist on Intel/ARM/XScale */
-	asm("mrc%? p15, 0, %0, c0, c0" : "=r" (chiprev));
-	if ((chiprev & CP15R0_VENDOR_MASK) != CP15R0_XSCALE_VALUE) {
-		pr_err("%s: not XScale!\n", driver_name);
-		return -ENODEV;
-	}
+#if defined(CONFIG_ARCH_PXA)
+	if (cpu_is_pxa210() || cpu_is_pxa25x()) {
+		if ((read_cpuid_id() & CP15R0_PRODREV_MASK) == PXA255_A0)
+			dev->has_cfr = 1;
+		/* PXA250_A0/A1 "not released"; ep 13, 15 unusable */
+		/* PXA21x/PXA25x with stepping < C0: OUT-DMA is broken ... */
+	} else {

-	/* trigger chiprev-specific logic */
-	switch (chiprev & CP15R0_PRODREV_MASK) {
-#if	defined(CONFIG_ARCH_PXA)
-	case PXA255_A0:
-		dev->has_cfr = 1;
-		break;
-	case PXA250_A0:
-	case PXA250_A1:
-		/* A0/A1 "not released"; ep 13, 15 unusable */
-		/* fall through */
-	case PXA250_B2: case PXA210_B2:
-	case PXA250_B1: case PXA210_B1:
-	case PXA250_B0: case PXA210_B0:
-		/* OUT-DMA is broken ... */
-		/* fall through */
-	case PXA250_C0: case PXA210_C0:
-		break;
-#elif	defined(CONFIG_ARCH_IXP4XX)
-	case IXP425_A0:
-	case IXP425_B0:
-	case IXP465_AD:
+#elif defined(CONFIG_ARCH_IXP4XX)
+	if (cpu_is_ixp42x() || cpu_is_ixp43x() || cpu_is_ixp46x())
 		dev->has_cfr = 1;
-		break;
+	else {
+
+#else
+	{
 #endif
-	default:
-		pr_err("%s: unrecognized processor: %08x\n",
-			driver_name, chiprev);
+		pr_err("%s: unrecognized processor\n", driver_name);
 		/* iop3xx, ixp4xx, ... */
 		return -ENODEV;
 	}
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help