RE: [PATCH] fsl-rio: fix compile error

2011-11-11 Thread Liu Gang-B34182
Yes, I'm afraid srio was not enabled when you compiled.

Regards,

Liu Gang
-Original Message-
From: Paul Gortmaker [mailto:paul.gortma...@windriver.com] 
Sent: Friday, November 11, 2011 11:48 PM
To: Liu Gang-B34182
Cc: linuxppc-dev@lists.ozlabs.org; alexandre.boun...@idt.com; 
a...@linux-foundation.org; linux-ker...@vger.kernel.org; Li Yang-R58472; Gala 
Kumar-B11780; Zang Roy-R61911
Subject: Re: [PATCH] fsl-rio: fix compile error

On 11-11-11 08:48 AM, Liu Gang wrote:
> The "#include " was replaced by "#include "
> in the patch "powerpc: various straight conversions from module.h --> 
> export.h".
> This will cause the following compile problem:
> arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception':
> arch/powerpc/sysdev/fsl_rio.c:296: error: implicit declaration of function 
> 'search_exception_tables'.
> 
> The file fsl_rio.c needs the declaration of function "search_exception_tables"
> in the header file "linux/module.h".

Thanks -- not sure why this never showed up in my builds of all the powerpc 
configs, _or_ the linux-next builds.  Maybe srio isn't enabled in any of them? 

In any case it looks fine to me.  Having the search_exception_tables live in 
module.h seems odd, but that is an independent issue for later.

I can queue this unless someone else has already done so.

Paul.

> 
> Signed-off-by: Liu Gang 
> ---
>  arch/powerpc/sysdev/fsl_rio.c |2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/sysdev/fsl_rio.c 
> b/arch/powerpc/sysdev/fsl_rio.c index de170fd..22ffccd 100644
> --- a/arch/powerpc/sysdev/fsl_rio.c
> +++ b/arch/powerpc/sysdev/fsl_rio.c
> @@ -23,7 +23,7 @@
>   */
>  
>  #include 
> -#include 
> +#include 
>  #include 
>  #include 
>  #include 


___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] powerpc kvm: fix kvmppc_start_thread() for CONFIG_SMP=N

2011-11-11 Thread Michael Neuling
In message <4ebd46f4.5040...@suse.de> you wrote:
> On 11/11/2011 03:03 AM, Michael Neuling wrote:
> > Currently kvmppc_start_thread() tries to wake other SMT threads via
> > xics_wake_cpu().  Unfortunately xics_wake_cpu only exists when
> > CONFIG_SMP=Y so when compiling with CONFIG_SMP=N we get:
> >
> >arch/powerpc/kvm/built-in.o: In function `.kvmppc_start_thread':
> >book3s_hv.c:(.text+0xa1e0): undefined reference to `.xics_wake_cpu'
> >
> > The following should be fine since kvmppc_start_thread() shouldn't
> > called to start non-zero threads when SMP=N since threads_per_core=1.
> >
> > Signed-off-by: Michael Neuling
> 
> Thanks, applied to kvm-ppc-next. Please CC kvm-ppc@vger next time :).

Thanks will do.

Mikey
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


AUTO: Michael Barry is out of the office (returning 15/11/2011)

2011-11-11 Thread Michael Barry

I am out of the office until 15/11/2011.




Note: This is an automated response to your message  "Linuxppc-dev Digest,
Vol 87, Issue 74" sent on 12/11/2011 1:00:02.

This is the only notification you will receive while this person is away.

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: Disabling TCP slow start after idle

2011-11-11 Thread Stephen Rothwell
Hi David,

On Fri, 11 Nov 2011 15:30:23 - "David Laight"  
wrote:
>
> We have some connections that suffer very badly from the TCP
> 'slow start' algorithm. These are connections that will
> always be local - they may be MAC-Switch-MAC using RGMII
> crossover, they might also be connected via an external
> switch. In either case the RTT is most likely to be almost
> zero, certainly below 1ms.

You would be better off asking networking questions on netdev at
vger.kernel.org ...

-- 
Cheers,
Stephen Rothwells...@canb.auug.org.au
http://www.canb.auug.org.au/~sfr/


pgplAPTcbUlop.pgp
Description: PGP signature
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

RE: [PATCH] fsl-rio: fix compile error

2011-11-11 Thread Bounine, Alexandre
On Fri, Nov 11, 2011 at 8:48 AM Liu Gang  wrote:

> Sent: Friday, November 11, 2011 8:48 AM
> To: linuxppc-dev@lists.ozlabs.org; Bounine, Alexandre
> Cc: a...@linux-foundation.org; linux-ker...@vger.kernel.org;
> paul.gortma...@windriver.com; r58...@freescale.com;
> b11...@freescale.com; r61...@freescale.com; Liu Gang
> Subject: [PATCH] fsl-rio: fix compile error
> 
> The "#include " was replaced by "#include
> "
> in the patch "powerpc: various straight conversions from module.h -->
> export.h".
> This will cause the following compile problem:
> arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception':
> arch/powerpc/sysdev/fsl_rio.c:296: error: implicit declaration of
> function 'search_exception_tables'.
> 
> The file fsl_rio.c needs the declaration of function
> "search_exception_tables"
> in the header file "linux/module.h".
> 
> Signed-off-by: Liu Gang 
> ---
>  arch/powerpc/sysdev/fsl_rio.c |2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/sysdev/fsl_rio.c
> b/arch/powerpc/sysdev/fsl_rio.c
> index de170fd..22ffccd 100644
> --- a/arch/powerpc/sysdev/fsl_rio.c
> +++ b/arch/powerpc/sysdev/fsl_rio.c
> @@ -23,7 +23,7 @@
>   */
> 
>  #include 
> -#include 
> +#include 
>  #include 
>  #include 
>  #include 
> --
> 1.7.3.1
> 


Acked-by: Alexandre Bounine 

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] P1021: set IReady in QE Microcode Upload

2011-11-11 Thread Tabi Timur-B04825
Kokoris, Ioannis wrote:
> Hi,
>
> QE Microcode Initialization using qe_upload_microcode() does not work
> on P1021 if the IRAM-Ready register is not set after the microcode
> upload. This patch adds a definition for the "I-RAM Ready" register and
> sets it uppon microcode upload completion.

Will this code still work on other QE parts, like the MPC8323?

-- 
Timur Tabi
Linux kernel developer at Freescale
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


RE: [PATCH 2/7] powerpc/85xx: add HOTPLUG_CPU support

2011-11-11 Thread Zhao Chenhui-B35336


> -Original Message-
> From: Benjamin Herrenschmidt [mailto:b...@kernel.crashing.org]
> Sent: Friday, November 11, 2011 12:23 PM
> To: Zhao Chenhui-B35336
> Cc: linuxppc-dev@lists.ozlabs.org
> Subject: Re: [PATCH 2/7] powerpc/85xx: add HOTPLUG_CPU support
> 
> On Fri, 2011-11-04 at 20:31 +0800, Zhao Chenhui wrote:
> 
> >  #ifdef CONFIG_SMP
> >  /* When we get here, r24 needs to hold the CPU # */
> > .globl __secondary_start
> > diff --git a/arch/powerpc/kernel/smp.c b/arch/powerpc/kernel/smp.c
> > index 7bf2187..12a54f0 100644
> > --- a/arch/powerpc/kernel/smp.c
> > +++ b/arch/powerpc/kernel/smp.c
> > @@ -381,8 +381,14 @@ void generic_cpu_die(unsigned int cpu)
> >
> > for (i = 0; i < 100; i++) {
> > smp_rmb();
> > -   if (per_cpu(cpu_state, cpu) == CPU_DEAD)
> > +   if (per_cpu(cpu_state, cpu) == CPU_DEAD) {
> > +   /*
> > +* After another core sets cpu_state to CPU_DEAD,
> > +* it needs some time to die.
> > +*/
> > +   msleep(10);
> > return;
> > +   }
> > msleep(100);
> > }
> > printk(KERN_ERR "CPU%d didn't die...\n", cpu);
> 
> I don't really see why you need to wait. This loop is about waiting for
> the CPU to mark itself DEAD, not necessarily to be physically powered
> off.
> 

If I don't add this delay, the kernel hangs sometimes when hotpluging a core.
I will move this function to 85xx/smp.c in the next revision.

> > +struct epapr_entry {
> > +   u32 addr_h;
> > +   u32 addr_l;
> > +   u32 r3_h;
> > +   u32 r3_l;
> > +   u32 reserved;
> > +   u32 pir;
> > +   u32 r6_h;
> > +   u32 r6_l;
> > +};
> 
> This should probably be in a generic location.
> 
> > +static int is_corenet;
> 
> This global is a bit gross...
> 
>  ...

Agree. I will remove it.

> 
> > +
> > +static void __cpuinit smp_85xx_reset_core(int nr)
> > +{
> > +   __iomem u32 *vaddr, *pir_vaddr;
> > +   u32 val, cpu_mask;
> > +
> > +   /* If CoreNet platform, use BRR as release register. */
> > +   if (is_corenet) {
> > +   cpu_mask = 1 << nr;
> > +   vaddr = ioremap(get_immrbase() + MPC85xx_BRR_OFF, 4);
> > +   } else {
> > +   cpu_mask = 1 << (24 + nr);
> > +   vaddr = ioremap(get_immrbase() + MPC85xx_ECM_EEBPCR_OFF, 4);
> > +   }
> 
> Instead, can't you instead have two functions using a common helper and
> pick/hook the right one ?
> 
> Also in what context is that reset_core() called ? Doing ioremap isn't
> something you can do at any random time...
> 
> Cheers,
> Ben.
> 
> 

Thanks. I will fix them.

-chenhui

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH] P1021: set IReady in QE Microcode Upload

2011-11-11 Thread Kokoris, Ioannis
Hi,

QE Microcode Initialization using qe_upload_microcode() does not work on P1021 
if the IRAM-Ready register is not set after the microcode upload. This patch 
adds a definition for the "I-RAM Ready" register and sets it uppon microcode 
upload completion.


Signed-off-by: Ioannis Kokkoris 


diff -Nru a/arch/powerpc/include/asm/immap_qe.h 
b/arch/powerpc/include/asm/immap_qe.h
--- a/arch/powerpc/include/asm/immap_qe.h   2011-11-11 17:47:45.0 
+0200
+++ b/arch/powerpc/include/asm/immap_qe.h   2011-11-11 17:49:31.0 
+0200
@@ -26,7 +26,9 @@
 struct qe_iram {
__be32  iadd;   /* I-RAM Address Register */
__be32  idata;  /* I-RAM Data Register */
-   u8  res0[0x78];
+   u8  res0[0x04];
+   __be32  iready; /* I-RAM Ready Register */
+   u8  res1[0x70];
 } __attribute__ ((packed));
 
 /* QE Interrupt Controller */
diff -Nru a/arch/powerpc/include/asm/qe.h b/arch/powerpc/include/asm/qe.h
--- a/arch/powerpc/include/asm/qe.h 2011-11-11 17:47:57.0 +0200
+++ b/arch/powerpc/include/asm/qe.h 2011-11-11 17:49:42.0 +0200
@@ -499,6 +499,7 @@
 /* I-RAM */
 #define QE_IRAM_IADD_AIE   0x8000  /* Auto Increment Enable */
 #define QE_IRAM_IADD_BADDR 0x0008  /* Base Address */
+#define QE_IRAM_READY   0x8000  /* Ready */
 
 /* UPC */
 #define UPGCR_PROTOCOL 0x8000  /* protocol ul2 or pl2 */
diff -Nru a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c
--- a/arch/powerpc/sysdev/qe_lib/qe.c   2011-11-11 17:48:44.0 +0200
+++ b/arch/powerpc/sysdev/qe_lib/qe.c   2011-11-11 17:49:59.0 +0200
@@ -377,6 +377,9 @@
 
for (i = 0; i < be32_to_cpu(ucode->count); i++)
out_be32(&qe_immr->iram.idata, be32_to_cpu(code[i]));
+   
+   /* Set I-RAM Ready Register */  
+   out_be32(&qe_immr->iram.iready, be32_to_cpu(QE_IRAM_READY));
 }
 
 /*
--

Best Regards,
Ioannis

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] KVM: PPC: move compute_tlbie_rb to book3s_64 common header

2011-11-11 Thread Alexander Graf

On 11/08/2011 06:08 PM, Andreas Schwab wrote:

compute_tlbie_rb is only used on ppc64 and cannot be compiled on ppc32.

Signed-off-by: Andreas Schwab


Thanks, applied to kvm-ppc-next.

Alex

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] KVM: PPC: protect use of kvmppc_h_pr

2011-11-11 Thread Alexander Graf

On 11/08/2011 06:17 PM, Andreas Schwab wrote:

kvmppc_h_pr is only available if CONFIG_KVM_BOOK3S_64_PR.

Signed-off-by: Andreas Schwab


Thanks, applied to kvm-ppc-next.


Alex

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] powerpc kvm: fix kvmppc_start_thread() for CONFIG_SMP=N

2011-11-11 Thread Alexander Graf

On 11/11/2011 03:03 AM, Michael Neuling wrote:

Currently kvmppc_start_thread() tries to wake other SMT threads via
xics_wake_cpu().  Unfortunately xics_wake_cpu only exists when
CONFIG_SMP=Y so when compiling with CONFIG_SMP=N we get:

   arch/powerpc/kvm/built-in.o: In function `.kvmppc_start_thread':
   book3s_hv.c:(.text+0xa1e0): undefined reference to `.xics_wake_cpu'

The following should be fine since kvmppc_start_thread() shouldn't
called to start non-zero threads when SMP=N since threads_per_core=1.

Signed-off-by: Michael Neuling


Thanks, applied to kvm-ppc-next. Please CC kvm-ppc@vger next time :).


Alex

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [PATCH] fsl-rio: fix compile error

2011-11-11 Thread Paul Gortmaker
On 11-11-11 08:48 AM, Liu Gang wrote:
> The "#include " was replaced by "#include "
> in the patch "powerpc: various straight conversions from module.h --> 
> export.h".
> This will cause the following compile problem:
> arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception':
> arch/powerpc/sysdev/fsl_rio.c:296: error: implicit declaration of function 
> 'search_exception_tables'.
> 
> The file fsl_rio.c needs the declaration of function "search_exception_tables"
> in the header file "linux/module.h".

Thanks -- not sure why this never showed up in my builds of all the
powerpc configs, _or_ the linux-next builds.  Maybe srio isn't enabled
in any of them? 

In any case it looks fine to me.  Having the search_exception_tables
live in module.h seems odd, but that is an independent issue for later.

I can queue this unless someone else has already done so.

Paul.

> 
> Signed-off-by: Liu Gang 
> ---
>  arch/powerpc/sysdev/fsl_rio.c |2 +-
>  1 files changed, 1 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c
> index de170fd..22ffccd 100644
> --- a/arch/powerpc/sysdev/fsl_rio.c
> +++ b/arch/powerpc/sysdev/fsl_rio.c
> @@ -23,7 +23,7 @@
>   */
>  
>  #include 
> -#include 
> +#include 
>  #include 
>  #include 
>  #include 
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Disabling TCP slow start after idle

2011-11-11 Thread David Laight
We have some connections that suffer very badly from the TCP
'slow start' algorithm. These are connections that will
always be local - they may be MAC-Switch-MAC using RGMII
crossover, they might also be connected via an external
switch. In either case the RTT is most likely to be almost
zero, certainly below 1ms.

The traffic is single packets (carrying another protocol)
so we have Nagle disabled and the send and receive sides
run separately. So the traffic is neither bulk, nor
command/response.

This means that there is very rarely any unacked data,
so almost every packet is sent using 'slow start'.

If the external switch drops a packet (they do!) then
slow start stops more packets being sent, and nothing
progresses for about 1.5 seconds by which time there
is a significant amount of traffic queued and, in some
cases, data has to be discarded.

Similar issues happen if the receiving system decides
to defer the ack until a timer tick (instead of
sending one after every second packet). In this case
only 4 packets are sent. (We fixed this one be sending
a software ACK every 4 packets.)

Quite cleary the 'slow start' algorithm just doesn't
work in these cases.

I found this https://lkml.org/lkml/2010/4/9/427
discussion about a socket option to disable slow start.
But it seems that some people are completely against the idea.
I'd have thought that the global option would be more of a
problem - since that will affect ftp connections to remote
hosts where slow start is alomost certainly benefitial.

I'd have thought it would be sensible to allow one (or more)
of the following (either as a sysctl, socket option, or
code change):
1) Disable slow start for the local subnet.
2) Disable slow start for connections with very low RTT.
3) Disable slow start for a minimum period with no traffic
   (after the last packet is acked).

I'm not sure of the resolution used by the Linux RTT
calculations. I know NetBSD had a recent set of patches
to fix calculation errors with low RTT because the code
had been written when all RTT were much longer.

David

(Copied to linuxppc-dev because I'm subscribed to it.)


___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [RFC][PATCH 08/30] powerpc/85xx: Rework P1020 SoC device tree

2011-11-11 Thread Scott Wood
On Thu, Nov 10, 2011 at 02:27:11PM -0600, Kumar Gala wrote:
> On Nov 10, 2011, at 12:58 PM, Scott Wood wrote:
> > On Thu, Nov 10, 2011 at 12:46:27PM -0600, Kumar Gala wrote:
> >> On Nov 10, 2011, at 12:05 PM, Scott Wood wrote:
> >>> What does the SoC part need to specify that has to override or go within
> >>> something the board specifies?
> >> 
> >> Not sure I follow the question.
> > 
> > My question is, why does the stuff in post need to be in post, versus pre?
> > 
> > Why can't pre define the soc node, and let the board dts set ranges? 
> > Likewise for localbus, pci, etc.
> > 
> > -Scott
> 
> Gotcha, the reason we have -pre and -post is because of how dtc include
> mechanism works.  It builds it's tree in the order things are parsed in
> the file.

That doesn't really answer the question.

> In addition, "labeled nodes" like we have in post for 'soc', 'lbc',
> etc.  have to be defined after they are referenced.

Don't you mean defined before they are referenced?

What's wrong with defining them in pre?

-Scott

___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH] fsl-rio: fix compile error

2011-11-11 Thread Liu Gang
The "#include " was replaced by "#include "
in the patch "powerpc: various straight conversions from module.h --> export.h".
This will cause the following compile problem:
arch/powerpc/sysdev/fsl_rio.c: In function 'fsl_rio_mcheck_exception':
arch/powerpc/sysdev/fsl_rio.c:296: error: implicit declaration of function 
'search_exception_tables'.

The file fsl_rio.c needs the declaration of function "search_exception_tables"
in the header file "linux/module.h".

Signed-off-by: Liu Gang 
---
 arch/powerpc/sysdev/fsl_rio.c |2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/powerpc/sysdev/fsl_rio.c b/arch/powerpc/sysdev/fsl_rio.c
index de170fd..22ffccd 100644
--- a/arch/powerpc/sysdev/fsl_rio.c
+++ b/arch/powerpc/sysdev/fsl_rio.c
@@ -23,7 +23,7 @@
  */
 
 #include 
-#include 
+#include 
 #include 
 #include 
 #include 
-- 
1.7.3.1


___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


Re: [RFC PATCH 02/17] powerpc: Split up PHYS_64BIT config option to fix "select" issues

2011-11-11 Thread Tabi Timur-B04825
Benjamin Herrenschmidt wrote:

> For PHYS_64BIT, I'm not 100% certain at this point what the best
> approach it. It should clearly be fixed and hidden for real 64-bit. As
> for the rest, should it be user selectable ?

I have been unable to convince our BSP teams that the minor performance 
improvement of a 32-bit kernel vs 36-bit is not worth the hassle.  We ship 
a lot of lower-end e500 systems that will never have more than 2GB of memory.

The P1022DS is an example.  We ship 32-bit and 36-bit versions of U-Boot, 
the kernel, and the device tree.  I recently added code to U-boot to 
detect if you have a mismatched U-Boot and device tree, because it is so 
easy to mess that up.  I would like nothing more than to abandon 32-bit 
for all e500, but I don't see Freescale allowing that any time soon.

-- 
Timur Tabi
Linux kernel developer at Freescale
___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev


[PATCH] usb/fsl_udc: fix dequeuing a request in progress

2011-11-11 Thread Li Yang
The original implementation of dequeuing a request in progress
is not correct.  Change to use a correct process and also clean
up the related functions a little bit.

Signed-off-by: Li Yang 
---
 drivers/usb/gadget/fsl_udc_core.c |   62 +---
 1 files changed, 29 insertions(+), 33 deletions(-)

diff --git a/drivers/usb/gadget/fsl_udc_core.c 
b/drivers/usb/gadget/fsl_udc_core.c
index b2c44e1..beef9b7 100644
--- a/drivers/usb/gadget/fsl_udc_core.c
+++ b/drivers/usb/gadget/fsl_udc_core.c
@@ -696,12 +696,31 @@ static void fsl_free_request(struct usb_ep *_ep, struct 
usb_request *_req)
kfree(req);
 }
 
-/*-*/
+/* Actually add a dTD chain to an empty dQH and let go */
+static void fsl_prime_ep(struct fsl_ep *ep, struct ep_td_struct *td)
+{
+   struct ep_queue_head *qh = ep->qh;
+
+   /* Write dQH next pointer and terminate bit to 0 */
+   qh->next_dtd_ptr = cpu_to_hc32(td->td_dma
+   & EP_QUEUE_HEAD_NEXT_POINTER_MASK);
+
+   /* Clear active and halt bit */
+   qh->size_ioc_int_sts &= cpu_to_hc32(~(EP_QUEUE_HEAD_STATUS_ACTIVE
+   | EP_QUEUE_HEAD_STATUS_HALT));
+
+   /* Ensure that updates to the QH will occur before priming. */
+   wmb();
+
+   /* Prime endpoint by writing correct bit to ENDPTPRIME */
+   fsl_writel(ep_is_in(ep) ? (1 << (ep_index(ep) + 16))
+   : (1 << (ep_index(ep))), &dr_regs->endpointprime);
+}
+
+/* Add dTD chain to the dQH of an EP */
 static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req)
 {
-   int i = ep_index(ep) * 2 + ep_is_in(ep);
u32 temp, bitmask, tmp_stat;
-   struct ep_queue_head *dQH = &ep->udc->ep_qh[i];
 
/* VDBG("QH addr Register 0x%8x", dr_regs->endpointlistaddr);
VDBG("ep_qh[%d] addr is 0x%8x", i, (u32)&(ep->udc->ep_qh[i])); */
@@ -719,7 +738,7 @@ static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req 
*req)
cpu_to_hc32(req->head->td_dma & DTD_ADDR_MASK);
/* Read prime bit, if 1 goto done */
if (fsl_readl(&dr_regs->endpointprime) & bitmask)
-   goto out;
+   return;
 
do {
/* Set ATDTW bit in USBCMD */
@@ -736,28 +755,10 @@ static void fsl_queue_td(struct fsl_ep *ep, struct 
fsl_req *req)
fsl_writel(temp & ~USB_CMD_ATDTW, &dr_regs->usbcmd);
 
if (tmp_stat)
-   goto out;
+   return;
}
 
-   /* Write dQH next pointer and terminate bit to 0 */
-   temp = req->head->td_dma & EP_QUEUE_HEAD_NEXT_POINTER_MASK;
-   dQH->next_dtd_ptr = cpu_to_hc32(temp);
-
-   /* Clear active and halt bit */
-   temp = cpu_to_hc32(~(EP_QUEUE_HEAD_STATUS_ACTIVE
-   | EP_QUEUE_HEAD_STATUS_HALT));
-   dQH->size_ioc_int_sts &= temp;
-
-   /* Ensure that updates to the QH will occur before priming. */
-   wmb();
-
-   /* Prime endpoint by writing 1 to ENDPTPRIME */
-   temp = ep_is_in(ep)
-   ? (1 << (ep_index(ep) + 16))
-   : (1 << (ep_index(ep)));
-   fsl_writel(temp, &dr_regs->endpointprime);
-out:
-   return;
+   fsl_prime_ep(ep, req->head);
 }
 
 /* Fill in the dTD structure
@@ -973,25 +974,20 @@ static int fsl_ep_dequeue(struct usb_ep *_ep, struct 
usb_request *_req)
 
/* The request isn't the last request in this ep queue */
if (req->queue.next != &ep->queue) {
-   struct ep_queue_head *qh;
struct fsl_req *next_req;
 
-   qh = ep->qh;
next_req = list_entry(req->queue.next, struct fsl_req,
queue);
 
-   /* Point the QH to the first TD of next request */
-   fsl_writel((u32) next_req->head, &qh->curr_dtd_ptr);
+   /* prime with dTD of next request */
+   fsl_prime_ep(ep, next_req->head);
}
-
-   /* The request hasn't been processed, patch up the TD chain */
+   /* The request hasn't been processed, patch up the TD chain */
} else {
struct fsl_req *prev_req;
 
prev_req = list_entry(req->queue.prev, struct fsl_req, queue);
-   fsl_writel(fsl_readl(&req->tail->next_td_ptr),
-   &prev_req->tail->next_td_ptr);
-
+   prev_req->tail->next_td_ptr = req->tail->next_td_ptr;
}
 
done(ep, req, -ECONNRESET);
-- 
1.5.4.3


___
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev