RE: [PATCH 0/5 v3] Porting RapidIO driver from ppc to powerpc architecture and adding memory mapped RapidIO driver.

2007-10-30 Thread Zhang Wei-r63237
Yes, I'm working on it. Do not worry about it.

Wei. 

> -Original Message-
> From: Kumar Gala [mailto:[EMAIL PROTECTED] 
> Sent: Tuesday, October 30, 2007 4:31 AM
> To: [EMAIL PROTECTED]
> Cc: Zhang Wei-r63237; [EMAIL PROTECTED]; 
> [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
> linux-kernel@vger.kernel.org
> Subject: Re: [PATCH 0/5 v3] Porting RapidIO driver from ppc 
> to powerpc architecture and adding memory mapped RapidIO driver.
> 
> 
> On Oct 29, 2007, at 2:38 PM, Phil Terry wrote:
> 
> > Can anyone tell me what the status of these are? What kernel  
> > release are
> > they targetted for? Currently I'm trying to work with 2.6.23 plus  
> > these
> > patches locally.
> 
> hopefully 2.6.25.  I'd like to get the documentation updates in  
> 2.6.24 if we have agreement on them.
> 
> - k
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 0/5 v3] Porting RapidIO driver from ppc to powerpc architecture and adding memory mapped RapidIO driver.

2007-10-30 Thread Zhang Wei-r63237
Yes, I'm working on it. Do not worry about it.

Wei. 

 -Original Message-
 From: Kumar Gala [mailto:[EMAIL PROTECTED] 
 Sent: Tuesday, October 30, 2007 4:31 AM
 To: [EMAIL PROTECTED]
 Cc: Zhang Wei-r63237; [EMAIL PROTECTED]; 
 [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
 linux-kernel@vger.kernel.org
 Subject: Re: [PATCH 0/5 v3] Porting RapidIO driver from ppc 
 to powerpc architecture and adding memory mapped RapidIO driver.
 
 
 On Oct 29, 2007, at 2:38 PM, Phil Terry wrote:
 
  Can anyone tell me what the status of these are? What kernel  
  release are
  they targetted for? Currently I'm trying to work with 2.6.23 plus  
  these
  patches locally.
 
 hopefully 2.6.25.  I'd like to get the documentation updates in  
 2.6.24 if we have agreement on them.
 
 - k
 
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/5] Add DMA engine driver for Freescale MPC85xxprocessors.

2007-09-13 Thread Zhang Wei-r63237
Hi, 

> > +static void fsl_dma_set_src(dma_addr_t addr,
> > +   struct dma_async_tx_descriptor 
> *tx, int index)
> > +{
> 
> What is index supposed to mean?  It's not used, or documented 
> anywhere than
> I can see.

I've also got more document here. Hi, Dan, could you give me some
explanation about this API? :)

> 
> > +   else {
> > +   /* Run the link descriptor callback function */
> > +   if (desc->async_tx.callback) {
> > +   
> spin_unlock_irqrestore(_chan->desc_lock,
> > +   flags);
> > +   dev_dbg(fsl_chan->device->dev,
> > +   "link descriptor %p 
> callback\n", desc);
> > +   desc->async_tx.callback(
> > +   
> desc->async_tx.callback_param);
> > +   
> spin_lock_irqsave(_chan->desc_lock, flags);
> 
> After dropping the lock, you can no longer assume that your 
> iterator is
> still valid; you need to work off of the list head.
> 

list_for_each_entry_safe() is used here. I think the safe should be ok.
:P

> > +   /* Find the first un-transfer desciptor */
> > +   for (ld_node = fsl_chan->ld_queue.next;
> > +   (ld_node != _chan->ld_queue)
> > +   && (DMA_SUCCESS == dma_async_is_complete(
> > +   
> to_fsl_desc(ld_node)->async_tx.cookie,
> > +   fsl_chan->completed_cookie,
> > +   fsl_chan->common.cookie));
> > +   ld_node = ld_node->next);
> 
> Call fsl_dma_is_complete directly, don't waste time going through the
> virtual call.
> 
> And you have a recursive lock usage here; fsl_dma_is_complete calls
> fsl_chan_ld_cleanup, which acquires desc_lock, but you 
> already have it.
> 
> Couldn't you just call fsl_chan_ld_cleanup, and then check 
> what's at the
> head of the list?
> 

I'll split interrupt and poll here.

> > +static irqreturn_t fsl_dma_do_interrupt(int irq, void *data)
> > +{
> > +   struct fsl_dma_device *fdev = (struct fsl_dma_device *)data;
> > +   struct fsl_dma_chan *fsl_chan = NULL;
> > +   u32 gsr;
> > +   int ch_nr;
> > +   struct dma_chan *int_chan;
> > +
> > +   gsr = (fdev->feature & FSL_DMA_BIG_ENDIAN) ? 
> in_be32(fdev->reg_base)
> > +   : in_le32(fdev->reg_base);
> > +   ch_nr = (32 - ffs(gsr)) / 8;
> > +
> > +   list_for_each_entry(int_chan, >common.channels, 
> device_node)
> > +   if (to_fsl_chan(int_chan)->id == ch_nr)
> > +   fsl_chan = to_fsl_chan(int_chan);
> 
> Why not use an array of channels?

The list is used in dma engine core file. And it's possible that there
are not all channel listed in dts and array.

> > +
> > +   return fsl_chan ? fsl_dma_chan_do_interrupt(irq, 
> fsl_chan) : IRQ_NONE;
> > +
> > +}
> > +
> > +static void dma_do_tasklet(unsigned long unused)
> > +{
> > +   struct fsl_desc_sw *desc, *_desc;
> > +   unsigned long flags;
> > +
> > +   spin_lock_irqsave(_ln_lock, flags);
> > +   list_for_each_entry_safe(desc, _desc, _ln_chain, node) {
> > +   struct fsl_dma_chan *fsl_chan =
> > +   
> to_fsl_chan(desc->async_tx.chan);
> > +   /* Run the link descriptor callback function */
> > +   if (desc->async_tx.callback) {
> > +   spin_unlock_irqrestore(_ln_lock, flags);
> > +   dev_dbg(fsl_chan->device->dev,
> > +   "dma_tasklet: link descriptor 
> %p callback\n",
> > +   desc);
> > +   desc->async_tx.callback(
> > +   desc->async_tx.callback_param);
> > +   spin_lock_irqsave(_ln_lock, flags);
> > +   }
> > +   /* Recycle it! */
> > +   list_del(>node);
> 
> You should remove it from the list before dropping the lock, 
> as otherwise
> something else could come along and remove it again.

All right!

> 
> > +   if (strcmp(match->compatible, "fsl,mpc8540-dma-channel") == 0)
> > +   new_fsl_chan->feature = FSL_DMA_IP_86XX | 
> FSL_DMA_BIG_ENDIAN;
> 
> Shouldn't it be 85XX, to be consistent?
> 
> > +   else if (strcmp(match->compatible, 
> "fsl,mpc8349-dma-channel") == 0)
> > +   new_fsl_chan->feature = FSL_DMA_IP_83XX | 
> FSL_DMA_LITTLE_ENDIAN;
> 
> You could have the features be part of the match struct, so 
> you don't have
> to do extra strcmps.
> 

Can I use the data field of struct of_device_id?

> 
> > +static struct of_device_id of_fsl_dma_ids[] = {
> > +   { .compatible = "fsl,dma", },
> > +};
> 
> Why do we need to bind to the parent node at all?

Yes, the MPC83xx should get interrupt source from DMA device register.

> 
> > +/* There is no asm instructions for 64 bits reverse loads 
> and stores */
> > +static u64 in_le64(const u64 __iomem *addr)
> > +{
> 

RE: [PATCH 5/5] Add DMA engine driver for Freescale MPC85xxprocessors.

2007-09-13 Thread Zhang Wei-r63237
Hi, 

  +static void fsl_dma_set_src(dma_addr_t addr,
  +   struct dma_async_tx_descriptor 
 *tx, int index)
  +{
 
 What is index supposed to mean?  It's not used, or documented 
 anywhere than
 I can see.

I've also got more document here. Hi, Dan, could you give me some
explanation about this API? :)

 
  +   else {
  +   /* Run the link descriptor callback function */
  +   if (desc-async_tx.callback) {
  +   
 spin_unlock_irqrestore(fsl_chan-desc_lock,
  +   flags);
  +   dev_dbg(fsl_chan-device-dev,
  +   link descriptor %p 
 callback\n, desc);
  +   desc-async_tx.callback(
  +   
 desc-async_tx.callback_param);
  +   
 spin_lock_irqsave(fsl_chan-desc_lock, flags);
 
 After dropping the lock, you can no longer assume that your 
 iterator is
 still valid; you need to work off of the list head.
 

list_for_each_entry_safe() is used here. I think the safe should be ok.
:P

  +   /* Find the first un-transfer desciptor */
  +   for (ld_node = fsl_chan-ld_queue.next;
  +   (ld_node != fsl_chan-ld_queue)
  +(DMA_SUCCESS == dma_async_is_complete(
  +   
 to_fsl_desc(ld_node)-async_tx.cookie,
  +   fsl_chan-completed_cookie,
  +   fsl_chan-common.cookie));
  +   ld_node = ld_node-next);
 
 Call fsl_dma_is_complete directly, don't waste time going through the
 virtual call.
 
 And you have a recursive lock usage here; fsl_dma_is_complete calls
 fsl_chan_ld_cleanup, which acquires desc_lock, but you 
 already have it.
 
 Couldn't you just call fsl_chan_ld_cleanup, and then check 
 what's at the
 head of the list?
 

I'll split interrupt and poll here.

  +static irqreturn_t fsl_dma_do_interrupt(int irq, void *data)
  +{
  +   struct fsl_dma_device *fdev = (struct fsl_dma_device *)data;
  +   struct fsl_dma_chan *fsl_chan = NULL;
  +   u32 gsr;
  +   int ch_nr;
  +   struct dma_chan *int_chan;
  +
  +   gsr = (fdev-feature  FSL_DMA_BIG_ENDIAN) ? 
 in_be32(fdev-reg_base)
  +   : in_le32(fdev-reg_base);
  +   ch_nr = (32 - ffs(gsr)) / 8;
  +
  +   list_for_each_entry(int_chan, fdev-common.channels, 
 device_node)
  +   if (to_fsl_chan(int_chan)-id == ch_nr)
  +   fsl_chan = to_fsl_chan(int_chan);
 
 Why not use an array of channels?

The list is used in dma engine core file. And it's possible that there
are not all channel listed in dts and array.

  +
  +   return fsl_chan ? fsl_dma_chan_do_interrupt(irq, 
 fsl_chan) : IRQ_NONE;
  +
  +}
  +
  +static void dma_do_tasklet(unsigned long unused)
  +{
  +   struct fsl_desc_sw *desc, *_desc;
  +   unsigned long flags;
  +
  +   spin_lock_irqsave(recy_ln_lock, flags);
  +   list_for_each_entry_safe(desc, _desc, recy_ln_chain, node) {
  +   struct fsl_dma_chan *fsl_chan =
  +   
 to_fsl_chan(desc-async_tx.chan);
  +   /* Run the link descriptor callback function */
  +   if (desc-async_tx.callback) {
  +   spin_unlock_irqrestore(recy_ln_lock, flags);
  +   dev_dbg(fsl_chan-device-dev,
  +   dma_tasklet: link descriptor 
 %p callback\n,
  +   desc);
  +   desc-async_tx.callback(
  +   desc-async_tx.callback_param);
  +   spin_lock_irqsave(recy_ln_lock, flags);
  +   }
  +   /* Recycle it! */
  +   list_del(desc-node);
 
 You should remove it from the list before dropping the lock, 
 as otherwise
 something else could come along and remove it again.

All right!

 
  +   if (strcmp(match-compatible, fsl,mpc8540-dma-channel) == 0)
  +   new_fsl_chan-feature = FSL_DMA_IP_86XX | 
 FSL_DMA_BIG_ENDIAN;
 
 Shouldn't it be 85XX, to be consistent?
 
  +   else if (strcmp(match-compatible, 
 fsl,mpc8349-dma-channel) == 0)
  +   new_fsl_chan-feature = FSL_DMA_IP_83XX | 
 FSL_DMA_LITTLE_ENDIAN;
 
 You could have the features be part of the match struct, so 
 you don't have
 to do extra strcmps.
 

Can I use the data field of struct of_device_id?

 
  +static struct of_device_id of_fsl_dma_ids[] = {
  +   { .compatible = fsl,dma, },
  +};
 
 Why do we need to bind to the parent node at all?

Yes, the MPC83xx should get interrupt source from DMA device register.

 
  +/* There is no asm instructions for 64 bits reverse loads 
 and stores */
  +static u64 in_le64(const u64 __iomem *addr)
  +{
  +   return le64_to_cpu(in_be64(addr));
  +}
  +
  +static void out_le64(u64 __iomem *addr, u64 val)
  +{
  +   out_be64(addr, cpu_to_le64(val));
  +}
  +#endif
 
 You can use asm instructions for this, as 

RE: [PATCH 5/5] Add DMA engine driver for Freescale MPC85xx processors.

2007-09-11 Thread Zhang Wei-r63237
Hi, Dan,

Does I have followed your new API? :-)

> > ---
> Greetings,
> 
> Please copy me on any updates to this driver, drivers/dma, or 
> crypto/async_tx.

Ok.

> 
> Below are a few review comments...
> 
> Regards,
> Dan
> 
> > +/**
> > + * fsl_dma_alloc_descriptor - Allocate descriptor from 
> channel's DMA pool.
> > + *
> > + * Return - The descriptor allocated. NULL for failed.
> > + */
> > +static struct fsl_desc_sw *fsl_dma_alloc_descriptor(
> > +   struct fsl_dma_chan 
> *fsl_chan,
> > +   gfp_t flags)
> > +{
> > +   dma_addr_t pdesc;
> > +   struct fsl_desc_sw *desc_sw;
> > +
> > +   desc_sw = dma_pool_alloc(fsl_chan->desc_pool, 
> flags, );
> > +   if (desc_sw) {
> > +   memset(desc_sw, 0, sizeof(struct fsl_desc_sw));
> > +   dma_async_tx_descriptor_init(_sw->async_tx,
> > +   _chan->common);
> > +   desc_sw->async_tx.tx_set_src = fsl_dma_set_src;
> > +   desc_sw->async_tx.tx_set_dest = fsl_dma_set_dest;
> > +   desc_sw->async_tx.tx_submit = fsl_dma_tx_submit;
> > +   INIT_LIST_HEAD(_sw->async_tx.tx_list);
> > +   desc_sw->async_tx.phys = pdesc;
> > +   }
> > +
> > +   return desc_sw;
> > +}
> 
> I suggest pre-allocating the descriptors:
> 1/ It alleviates the need to initialize these async_tx fields 
> which never change

The dma pool has already stored the descriptors in it's list,

> 2/ The GFP_ATOMIC allocation can be removed.
> 

Ok.

> iop-adma gets by with one PAGE_SIZE buffer (128 descriptors).
> 
> [..]
> > +static irqreturn_t fsl_dma_chan_do_interrupt(int irq, void *data)
> > +{
> > +   struct fsl_dma_chan *fsl_chan = (struct fsl_dma_chan *)data;
> > +   dma_addr_t stat;
> > +
> > +   stat = get_sr(fsl_chan);
> > +   dev_dbg(fsl_chan->device->dev, "event: channel %d, 
> stat = 0x%x\n",
> > +   fsl_chan->id, stat);
> > +   set_sr(fsl_chan, stat); /* Clear the event 
> register */
> > +
> > +   stat &= ~(FSL_DMA_SR_CB | FSL_DMA_SR_CH);
> > +   if (!stat)
> > +   return IRQ_NONE;
> > +
> > +   /* If the link descriptor segment transfer finishes,
> > +* we will recycle the used descriptor.
> > +*/
> > +   if (stat & FSL_DMA_SR_EOSI) {
> > +   dev_dbg(fsl_chan->device->dev, "event: 
> End-of-segments INT\n");
> > +   dev_dbg(fsl_chan->device->dev, "event: 
> clndar 0x%016llx, "
> > +   "nlndar 0x%016llx\n", 
> (u64)get_cdar(fsl_chan),
> > +   (u64)get_ndar(fsl_chan));
> > +   stat &= ~FSL_DMA_SR_EOSI;
> > +   fsl_chan_ld_cleanup(fsl_chan, 1);
> > +   }
> > +
> > +   /* If it current transfer is the end-of-transfer,
> > +* we should clear the Channel Start bit for
> > +* prepare next transfer.
> > +*/
> > +   if (stat & (FSL_DMA_SR_EOLNI | FSL_DMA_SR_EOCDI)) {
> > +   dev_dbg(fsl_chan->device->dev, "event: 
> End-of-link INT\n");
> > +   stat &= ~FSL_DMA_SR_EOLNI;
> > +   fsl_chan_xfer_ld_queue(fsl_chan);
> > +   }
> > +
> > +   if (stat)
> > +   dev_dbg(fsl_chan->device->dev, "event: 
> unhandled sr 0x%02x\n",
> > +   stat);
> > +
> > +   dev_dbg(fsl_chan->device->dev, "event: Exit\n");
> > +   tasklet_hi_schedule(_tasklet);
> > +   return IRQ_HANDLED;
> > +}
> 
> This driver implements locking and callbacks inconsistently with how
> it is done in ioatdma and iop-adma.  The big changes are that all
> locks have been upgraded from 'spin_lock_bh' to 'spin_lock_irqsave',
> and async_tx callbacks can happen in irq context.  I would like to
> keep everything in bottom-half context to lessen the restrictions on
> what async_tx clients can perform in their callback routines.  What
> are the implications of moving 'fsl_chan_ld_cleanup' to the tasklet
> and changing the 'tasklet_hi_schedule' to 'tasklet_schedule'?

A good suggestion :), I need some investigation here.

> 
> [..]
> > +static struct dma_chan 
> *of_find_dma_chan_by_phandle(phandle phandle)
> > +{
> > +   struct device_node *np;
> > +   struct dma_chan *chan;
> > +   struct fsl_dma_device *fdev;
> > +
> > +   np = of_find_node_by_phandle(phandle);
> > +   if (!np || !of_device_is_compatible(np->parent, "fsl,dma"))
> > +   return NULL;
> > +
> > +   fdev = 
> dev_get_drvdata(_find_device_by_node(np->parent)->dev);
> > +
> > +   list_for_each_entry(chan, >common.channels, 
> device_node)
> > +   if 
> (to_of_device(to_fsl_chan(chan)->chan_dev)->node == np)
> > +   return chan;
> > +   return NULL;
> > +}
> > +EXPORT_SYMBOL(of_find_dma_chan_by_phandle);
> 
> This routine implies that there 

RE: [PATCH 5/5] Add DMA engine driver for Freescale MPC85xx processors.

2007-09-11 Thread Zhang Wei-r63237
> 
> If this is experimental, perhaps you should mark the depends line as
> such
>   depends on on DMA_ENGINE && PPC && EXPERIMENTAL

I'll add EXPERIMENTAL for MPC83xx only.

> 
> [...]
> 
> >+
> >+fsl_dma_memcpy_issue_pending(chan);
> >+while (fsl_dma_is_complete(chan, cookie, NULL, NULL)
> >+!= DMA_SUCCESS);
> 
> Again, is it possible to hang your thread here?
> 
> [...]

I'll add msleep here.

Thanks!

- zw
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/5] Add DMA engine driver for Freescale MPC85xx processors.

2007-09-11 Thread Zhang Wei-r63237
Hi, 
> --- /dev/null
> > +++ b/drivers/dma/fsldma.c
> > @@ -0,0 +1,995 @@
> 
> Thanks for using kernel-doc notation.  However, ...
> 
> > +/**
> > + * fsl_dma_alloc_descriptor - Allocate descriptor from 
> channel's DMA pool.
> 
> Function parameters need to be listed & described here.
> See Documentation/kernel-doc-nano-HOWTO.txt or other source files
> for examples.
> 
> (Applies to all documented function interfaces here.)

All right, I'll add full descriptions here. :P

> 
> > + *
> > + * Return - The descriptor allocated. NULL for failed.
> > + */
> > +static struct fsl_desc_sw *fsl_dma_alloc_descriptor(
> > +   struct fsl_dma_chan *fsl_chan,
> > +   gfp_t flags)
> > +{
> ...
> > +}
> 
> > +/**
> > + * fsl_chan_xfer_ld_queue -- Transfer the link descriptors 
> in channel
> > + *   ld_queue.
> 
> The function's "short description" (unfortunately) must be on only one
> line.  E.g.:
> 
>  * fsl_chan_xfer_ld_queue - Transfer link descriptors in 
> channel ld_queue.
> 

How about it's length greater than 80?

> > + */
> > +static void fsl_chan_xfer_ld_queue(struct fsl_dma_chan *fsl_chan)
> > +{
> ...
> > +}
> 
> > diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
> > new file mode 100644
> > index 000..05be9ed
> > --- /dev/null
> > +++ b/drivers/dma/fsldma.h
> > @@ -0,0 +1,188 @@
> > +struct fsl_dma_chan_regs {
> > +   __mix32 mr; /* 0x00 - Mode Register */
> > +   __mix32 sr; /* 0x04 - Status Register */
> > +   __mix64 cdar;   /* 0x08 - Cureent descriptor 
> address register */
> 
>   Current
> 

I'll fix it.

Thanks!
- zw
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/5] Add DMA engine driver for Freescale MPC85xx processors.

2007-09-11 Thread Zhang Wei-r63237
Hi, 
 --- /dev/null
  +++ b/drivers/dma/fsldma.c
  @@ -0,0 +1,995 @@
 
 Thanks for using kernel-doc notation.  However, ...
 
  +/**
  + * fsl_dma_alloc_descriptor - Allocate descriptor from 
 channel's DMA pool.
 
 Function parameters need to be listed  described here.
 See Documentation/kernel-doc-nano-HOWTO.txt or other source files
 for examples.
 
 (Applies to all documented function interfaces here.)

All right, I'll add full descriptions here. :P

 
  + *
  + * Return - The descriptor allocated. NULL for failed.
  + */
  +static struct fsl_desc_sw *fsl_dma_alloc_descriptor(
  +   struct fsl_dma_chan *fsl_chan,
  +   gfp_t flags)
  +{
 ...
  +}
 
  +/**
  + * fsl_chan_xfer_ld_queue -- Transfer the link descriptors 
 in channel
  + *   ld_queue.
 
 The function's short description (unfortunately) must be on only one
 line.  E.g.:
 
  * fsl_chan_xfer_ld_queue - Transfer link descriptors in 
 channel ld_queue.
 

How about it's length greater than 80?

  + */
  +static void fsl_chan_xfer_ld_queue(struct fsl_dma_chan *fsl_chan)
  +{
 ...
  +}
 
  diff --git a/drivers/dma/fsldma.h b/drivers/dma/fsldma.h
  new file mode 100644
  index 000..05be9ed
  --- /dev/null
  +++ b/drivers/dma/fsldma.h
  @@ -0,0 +1,188 @@
  +struct fsl_dma_chan_regs {
  +   __mix32 mr; /* 0x00 - Mode Register */
  +   __mix32 sr; /* 0x04 - Status Register */
  +   __mix64 cdar;   /* 0x08 - Cureent descriptor 
 address register */
 
   Current
 

I'll fix it.

Thanks!
- zw
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/5] Add DMA engine driver for Freescale MPC85xx processors.

2007-09-11 Thread Zhang Wei-r63237
 
 If this is experimental, perhaps you should mark the depends line as
 such
   depends on on DMA_ENGINE  PPC  EXPERIMENTAL

I'll add EXPERIMENTAL for MPC83xx only.

 
 [...]
 
 +
 +fsl_dma_memcpy_issue_pending(chan);
 +while (fsl_dma_is_complete(chan, cookie, NULL, NULL)
 +!= DMA_SUCCESS);
 
 Again, is it possible to hang your thread here?
 
 [...]

I'll add msleep here.

Thanks!

- zw
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 5/5] Add DMA engine driver for Freescale MPC85xx processors.

2007-09-11 Thread Zhang Wei-r63237
Hi, Dan,

Does I have followed your new API? :-)

  ---
 Greetings,
 
 Please copy me on any updates to this driver, drivers/dma, or 
 crypto/async_tx.

Ok.

 
 Below are a few review comments...
 
 Regards,
 Dan
 
  +/**
  + * fsl_dma_alloc_descriptor - Allocate descriptor from 
 channel's DMA pool.
  + *
  + * Return - The descriptor allocated. NULL for failed.
  + */
  +static struct fsl_desc_sw *fsl_dma_alloc_descriptor(
  +   struct fsl_dma_chan 
 *fsl_chan,
  +   gfp_t flags)
  +{
  +   dma_addr_t pdesc;
  +   struct fsl_desc_sw *desc_sw;
  +
  +   desc_sw = dma_pool_alloc(fsl_chan-desc_pool, 
 flags, pdesc);
  +   if (desc_sw) {
  +   memset(desc_sw, 0, sizeof(struct fsl_desc_sw));
  +   dma_async_tx_descriptor_init(desc_sw-async_tx,
  +   fsl_chan-common);
  +   desc_sw-async_tx.tx_set_src = fsl_dma_set_src;
  +   desc_sw-async_tx.tx_set_dest = fsl_dma_set_dest;
  +   desc_sw-async_tx.tx_submit = fsl_dma_tx_submit;
  +   INIT_LIST_HEAD(desc_sw-async_tx.tx_list);
  +   desc_sw-async_tx.phys = pdesc;
  +   }
  +
  +   return desc_sw;
  +}
 
 I suggest pre-allocating the descriptors:
 1/ It alleviates the need to initialize these async_tx fields 
 which never change

The dma pool has already stored the descriptors in it's list,

 2/ The GFP_ATOMIC allocation can be removed.
 

Ok.

 iop-adma gets by with one PAGE_SIZE buffer (128 descriptors).
 
 [..]
  +static irqreturn_t fsl_dma_chan_do_interrupt(int irq, void *data)
  +{
  +   struct fsl_dma_chan *fsl_chan = (struct fsl_dma_chan *)data;
  +   dma_addr_t stat;
  +
  +   stat = get_sr(fsl_chan);
  +   dev_dbg(fsl_chan-device-dev, event: channel %d, 
 stat = 0x%x\n,
  +   fsl_chan-id, stat);
  +   set_sr(fsl_chan, stat); /* Clear the event 
 register */
  +
  +   stat = ~(FSL_DMA_SR_CB | FSL_DMA_SR_CH);
  +   if (!stat)
  +   return IRQ_NONE;
  +
  +   /* If the link descriptor segment transfer finishes,
  +* we will recycle the used descriptor.
  +*/
  +   if (stat  FSL_DMA_SR_EOSI) {
  +   dev_dbg(fsl_chan-device-dev, event: 
 End-of-segments INT\n);
  +   dev_dbg(fsl_chan-device-dev, event: 
 clndar 0x%016llx, 
  +   nlndar 0x%016llx\n, 
 (u64)get_cdar(fsl_chan),
  +   (u64)get_ndar(fsl_chan));
  +   stat = ~FSL_DMA_SR_EOSI;
  +   fsl_chan_ld_cleanup(fsl_chan, 1);
  +   }
  +
  +   /* If it current transfer is the end-of-transfer,
  +* we should clear the Channel Start bit for
  +* prepare next transfer.
  +*/
  +   if (stat  (FSL_DMA_SR_EOLNI | FSL_DMA_SR_EOCDI)) {
  +   dev_dbg(fsl_chan-device-dev, event: 
 End-of-link INT\n);
  +   stat = ~FSL_DMA_SR_EOLNI;
  +   fsl_chan_xfer_ld_queue(fsl_chan);
  +   }
  +
  +   if (stat)
  +   dev_dbg(fsl_chan-device-dev, event: 
 unhandled sr 0x%02x\n,
  +   stat);
  +
  +   dev_dbg(fsl_chan-device-dev, event: Exit\n);
  +   tasklet_hi_schedule(dma_tasklet);
  +   return IRQ_HANDLED;
  +}
 
 This driver implements locking and callbacks inconsistently with how
 it is done in ioatdma and iop-adma.  The big changes are that all
 locks have been upgraded from 'spin_lock_bh' to 'spin_lock_irqsave',
 and async_tx callbacks can happen in irq context.  I would like to
 keep everything in bottom-half context to lessen the restrictions on
 what async_tx clients can perform in their callback routines.  What
 are the implications of moving 'fsl_chan_ld_cleanup' to the tasklet
 and changing the 'tasklet_hi_schedule' to 'tasklet_schedule'?

A good suggestion :), I need some investigation here.

 
 [..]
  +static struct dma_chan 
 *of_find_dma_chan_by_phandle(phandle phandle)
  +{
  +   struct device_node *np;
  +   struct dma_chan *chan;
  +   struct fsl_dma_device *fdev;
  +
  +   np = of_find_node_by_phandle(phandle);
  +   if (!np || !of_device_is_compatible(np-parent, fsl,dma))
  +   return NULL;
  +
  +   fdev = 
 dev_get_drvdata(of_find_device_by_node(np-parent)-dev);
  +
  +   list_for_each_entry(chan, fdev-common.channels, 
 device_node)
  +   if 
 (to_of_device(to_fsl_chan(chan)-chan_dev)-node == np)
  +   return chan;
  +   return NULL;
  +}
  +EXPORT_SYMBOL(of_find_dma_chan_by_phandle);
 
 This routine implies that there is a piece of code somewhere that
 wants to select which channels it can use.  A similar effect can be
 achieved by registering a dma_client with the dmaengine interface
 ('dma_async_client_register').  Then when the client code makes a call
 to 

RE: [PATCH 3/5 v3] Add the platform device support with RapidIO to MPC8641HPCN platform.

2007-07-30 Thread Zhang Wei-r63237
Hi, Arnd,

I can change it as you metioned now.

Thanks!
-zw

> -Original Message-
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Arnd Bergmann
> Sent: Sunday, July 29, 2007 9:57 PM
> To: [EMAIL PROTECTED]
> Cc: Zhang Wei-r63237; [EMAIL PROTECTED]; 
> [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
> linux-kernel@vger.kernel.org
> Subject: Re: [PATCH 3/5 v3] Add the platform device support 
> with RapidIO to MPC8641HPCN platform.
> 
> On Thursday 26 July 2007, Zhang Wei wrote:
> > +
> > +static struct of_device_id mpc86xx_of_ids[] = {
> > +   { .type = "soc", },
> > +   { .compatible = "fsl,rapidio-delta", },
> > +   {},
> > +};
> 
> With the device tree source you have posted in 2/5, the 
> rapidio node is
> a child of the soc bus, and it doesn't have any children of its own.
> Therefore it is completely equivalent to _only_ add the soc type
> to mpc86xx_of_ids[], as in 
> 
> static struct of_device_id mpc86xx_of_ids[] = {
>{ .type = "soc", },
>{},
> };
> 
> Even if you intend to add children to the rapidio node in the future,
> I'd think it would be more appropriate to have those scanned by
> the rapidio bus driver, not by of_platform.
> 
>   Arnd <><
> 
> -
> To unsubscribe from this list: send the line "unsubscribe 
> linux-kernel" in
> the body of a message to [EMAIL PROTECTED]
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/5 v3] Add the platform device support with RapidIO to MPC8641HPCN platform.

2007-07-30 Thread Zhang Wei-r63237
Hi, Arnd,

I can change it as you metioned now.

Thanks!
-zw

 -Original Message-
 From: [EMAIL PROTECTED] 
 [mailto:[EMAIL PROTECTED] On Behalf Of Arnd Bergmann
 Sent: Sunday, July 29, 2007 9:57 PM
 To: [EMAIL PROTECTED]
 Cc: Zhang Wei-r63237; [EMAIL PROTECTED]; 
 [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
 linux-kernel@vger.kernel.org
 Subject: Re: [PATCH 3/5 v3] Add the platform device support 
 with RapidIO to MPC8641HPCN platform.
 
 On Thursday 26 July 2007, Zhang Wei wrote:
  +
  +static struct of_device_id mpc86xx_of_ids[] = {
  +   { .type = soc, },
  +   { .compatible = fsl,rapidio-delta, },
  +   {},
  +};
 
 With the device tree source you have posted in 2/5, the 
 rapidio node is
 a child of the soc bus, and it doesn't have any children of its own.
 Therefore it is completely equivalent to _only_ add the soc type
 to mpc86xx_of_ids[], as in 
 
 static struct of_device_id mpc86xx_of_ids[] = {
{ .type = soc, },
{},
 };
 
 Even if you intend to add children to the rapidio node in the future,
 I'd think it would be more appropriate to have those scanned by
 the rapidio bus driver, not by of_platform.
 
   Arnd 
 
 -
 To unsubscribe from this list: send the line unsubscribe 
 linux-kernel in
 the body of a message to [EMAIL PROTECTED]
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
 Please read the FAQ at  http://www.tux.org/lkml/
 
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5 v3] Add the explanation and a sample of RapidIO OF node to the document of booting-without-of.txt file.

2007-07-27 Thread Zhang Wei-r63237
Hi, Kumar, 
> +   RapidIO is a definition of a system interconnect. This node add
> > +   the support for RapidIO processor in kernel. The node name is
> > +   suggested to be 'rapidio'.
> > +
> > +   Required properties:
> > +
> > +- compatible : Using "fsl,rapidio-delta" for Freescale PowerPC
> > +  RapidIO controller.
> > +- #address-cells : Address representation for 
> "rapidio" devices.
> > +  This field represents the number of cells needed to represent
> > +  the RapidIO address of the registers.
> 
> Can you explain this a little further.  I'm a bit confused by  
> 'RapidIO address of the registers'.
> 
I want to present "This field represents the number of cells [needed to
represent the RapidIO address] of the registers."
Maybe I should remove 'of the registers' to be more clear.

Thanks!
-zw
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 4/5 v3] Add RapidIO support to powerpc architecture.

2007-07-27 Thread Zhang Wei-r63237
Hi, Kumar, 

> -Original Message-
> From: Kumar Gala [mailto:[EMAIL PROTECTED] 
> On Jul 26, 2007, at 3:42 AM, Zhang Wei wrote:
> 
> > This patch adds the RapidIO support to the powerpc architecture.
> > Some files are moved from ppc. OF-tree and OF-device supports are  
> > added.
> > New silicons such as MPC8548, MPC8641 with serial RapidIO  
> > controller are
> > all supported.
> > Memory driver hardware operations are added.
> > Global mport variables are changed to master port private variables.
> > Multi master ports are supported.
> >
> > Signed-off-by: Zhang Wei <[EMAIL PROTECTED]>
> > ---
> >  arch/powerpc/Kconfig  |8 +
> >  arch/powerpc/kernel/Makefile  |1 +
> >  arch/powerpc/kernel/rio.c |   64 ++
> >  arch/powerpc/sysdev/Makefile  |1 +
> >  arch/powerpc/sysdev/fsl_rio.c | 1455 
> ++ 
> > +++
> 
> how much of this moved from ppc85xx_rio.c?

>From the code size, 2/3 are moved from pcc85xx_rio.c with clean up, 1/3
are new coding.

> 
> >  arch/powerpc/sysdev/fsl_rio.h |   20 +
> >  6 files changed, 1549 insertions(+), 0 deletions(-)
> >  create mode 100644 arch/powerpc/kernel/rio.c
> >  create mode 100644 arch/powerpc/sysdev/fsl_rio.c
> >  create mode 100644 arch/powerpc/sysdev/fsl_rio.h
> >
> > diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> > index 00099ef..45f32f1 100644
> > --- a/arch/powerpc/Kconfig
> > +++ b/arch/powerpc/Kconfig
> > @@ -492,6 +492,14 @@ source "drivers/pci/Kconfig"
> >
> >  source "drivers/pcmcia/Kconfig"
> >
> > +config RAPIDIO
> > +   bool "RapidIO support" if MPC8540 || MPC8560 || MPC8641 
> || MPC8548
> > +   help
> > + If you say Y here, the kernel will include drivers and
> > + infrastructure code to support RapidIO interconnect devices.
> 
> why not make this depend on something like HAS_RAPIDIO and let the  
> boards select HAS_RAPIDIO if they have it

It's more clear, We can know how many and which processors support
RapidIO. :-)

> 
> > +
> > +source "drivers/rapidio/Kconfig"
> > +
> >  source "drivers/pci/hotplug/Kconfig"
> >
> >  endmenu
> > diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/ 
> > Makefile
> > index 42c42ec..02d4100 100644
> > --- a/arch/powerpc/kernel/Makefile
> > +++ b/arch/powerpc/kernel/Makefile
> > @@ -70,6 +70,7 @@ pci64-$(CONFIG_PPC64) += 
> pci_64.o pci_dn.o isa- 
> > bridge.o
> >  pci32-$(CONFIG_PPC32)  := pci_32.o
> >  obj-$(CONFIG_PCI)  += $(pci64-y) $(pci32-y) pci-common.o
> >  obj-$(CONFIG_PCI_MSI)  += msi.o
> > +obj-$(CONFIG_RAPIDIO)  += rio.o
> 
> should probably live in sysdev/rio.c

This just keep the same position of ppc arch.

Thanks!
-zw
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 4/5 v3] Add RapidIO support to powerpc architecture.

2007-07-27 Thread Zhang Wei-r63237
Hi, Kumar, 

 -Original Message-
 From: Kumar Gala [mailto:[EMAIL PROTECTED] 
 On Jul 26, 2007, at 3:42 AM, Zhang Wei wrote:
 
  This patch adds the RapidIO support to the powerpc architecture.
  Some files are moved from ppc. OF-tree and OF-device supports are  
  added.
  New silicons such as MPC8548, MPC8641 with serial RapidIO  
  controller are
  all supported.
  Memory driver hardware operations are added.
  Global mport variables are changed to master port private variables.
  Multi master ports are supported.
 
  Signed-off-by: Zhang Wei [EMAIL PROTECTED]
  ---
   arch/powerpc/Kconfig  |8 +
   arch/powerpc/kernel/Makefile  |1 +
   arch/powerpc/kernel/rio.c |   64 ++
   arch/powerpc/sysdev/Makefile  |1 +
   arch/powerpc/sysdev/fsl_rio.c | 1455 
 ++ 
  +++
 
 how much of this moved from ppc85xx_rio.c?

From the code size, 2/3 are moved from pcc85xx_rio.c with clean up, 1/3
are new coding.

 
   arch/powerpc/sysdev/fsl_rio.h |   20 +
   6 files changed, 1549 insertions(+), 0 deletions(-)
   create mode 100644 arch/powerpc/kernel/rio.c
   create mode 100644 arch/powerpc/sysdev/fsl_rio.c
   create mode 100644 arch/powerpc/sysdev/fsl_rio.h
 
  diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
  index 00099ef..45f32f1 100644
  --- a/arch/powerpc/Kconfig
  +++ b/arch/powerpc/Kconfig
  @@ -492,6 +492,14 @@ source drivers/pci/Kconfig
 
   source drivers/pcmcia/Kconfig
 
  +config RAPIDIO
  +   bool RapidIO support if MPC8540 || MPC8560 || MPC8641 
 || MPC8548
  +   help
  + If you say Y here, the kernel will include drivers and
  + infrastructure code to support RapidIO interconnect devices.
 
 why not make this depend on something like HAS_RAPIDIO and let the  
 boards select HAS_RAPIDIO if they have it

It's more clear, We can know how many and which processors support
RapidIO. :-)

 
  +
  +source drivers/rapidio/Kconfig
  +
   source drivers/pci/hotplug/Kconfig
 
   endmenu
  diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/ 
  Makefile
  index 42c42ec..02d4100 100644
  --- a/arch/powerpc/kernel/Makefile
  +++ b/arch/powerpc/kernel/Makefile
  @@ -70,6 +70,7 @@ pci64-$(CONFIG_PPC64) += 
 pci_64.o pci_dn.o isa- 
  bridge.o
   pci32-$(CONFIG_PPC32)  := pci_32.o
   obj-$(CONFIG_PCI)  += $(pci64-y) $(pci32-y) pci-common.o
   obj-$(CONFIG_PCI_MSI)  += msi.o
  +obj-$(CONFIG_RAPIDIO)  += rio.o
 
 should probably live in sysdev/rio.c

This just keep the same position of ppc arch.

Thanks!
-zw
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5 v3] Add the explanation and a sample of RapidIO OF node to the document of booting-without-of.txt file.

2007-07-27 Thread Zhang Wei-r63237
Hi, Kumar, 
 +   RapidIO is a definition of a system interconnect. This node add
  +   the support for RapidIO processor in kernel. The node name is
  +   suggested to be 'rapidio'.
  +
  +   Required properties:
  +
  +- compatible : Using fsl,rapidio-delta for Freescale PowerPC
  +  RapidIO controller.
  +- #address-cells : Address representation for 
 rapidio devices.
  +  This field represents the number of cells needed to represent
  +  the RapidIO address of the registers.
 
 Can you explain this a little further.  I'm a bit confused by  
 'RapidIO address of the registers'.
 
I want to present This field represents the number of cells [needed to
represent the RapidIO address] of the registers.
Maybe I should remove 'of the registers' to be more clear.

Thanks!
-zw
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/4] Extend the DMA-engine API.

2007-07-12 Thread Zhang Wei-r63237
Hi, Dan,

Thanks! I get it.
It's so lucky we have the same target.
When your patch could be accepted?

Cheers,
Wei. 

> -Original Message-
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of Dan Williams
> Sent: Thursday, July 12, 2007 12:57 AM
> To: Zhang Wei-r63237
> Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
> [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
> linux-kernel@vger.kernel.org; [EMAIL PROTECTED]
> Subject: Re: [PATCH 3/4] Extend the DMA-engine API.
> 
> On 7/11/07, Zhang Wei-r63237 <[EMAIL PROTECTED]> wrote:
> > Hi, Dan,
> >
> > Do you mention here: 
> http://marc.info/?l=linux-raid=118290909614463=2 ?
> > I see the async_tx is located at crypto/ of the above page, 
> but my patch is for DMA engine in drivers/dma and for DMA 
> engine driver.
> >
> > Thanks!
> > Wei.
> 
> Hi Wei,
> 
> I was referring to:
> http://marc.info/?l=linux-raid=118290909528910=2
> 
> async_tx is an api that exploits the raw capabilities of the new
> dmaengine interface.  For your case when the existing api calls do not
> provide the proper interface you can open code something like the
> following:
> 
> tx = dev->device_prep_dma_(chan, len, int_flag)
> tx->tx_set_src(dma_addr_t, tx, index /* for multi-source ops */)
> tx->tx_set_dest(dma_addr_t, tx, index)
> tx->tx_submit(tx)
> 
> The expectation is that the most common usages of dmaengines will use
> async_tx calls, or the 'dma_async_memcpy_foo_to_bar' helper routines.
> 
> --
> Dan
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/4] Extend the DMA-engine API.

2007-07-12 Thread Zhang Wei-r63237
Hi, Dan,

Thanks! I get it.
It's so lucky we have the same target.
When your patch could be accepted?

Cheers,
Wei. 

 -Original Message-
 From: [EMAIL PROTECTED] 
 [mailto:[EMAIL PROTECTED] On Behalf Of Dan Williams
 Sent: Thursday, July 12, 2007 12:57 AM
 To: Zhang Wei-r63237
 Cc: [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
 [EMAIL PROTECTED]; [EMAIL PROTECTED]; 
 linux-kernel@vger.kernel.org; [EMAIL PROTECTED]
 Subject: Re: [PATCH 3/4] Extend the DMA-engine API.
 
 On 7/11/07, Zhang Wei-r63237 [EMAIL PROTECTED] wrote:
  Hi, Dan,
 
  Do you mention here: 
 http://marc.info/?l=linux-raidm=118290909614463w=2 ?
  I see the async_tx is located at crypto/ of the above page, 
 but my patch is for DMA engine in drivers/dma and for DMA 
 engine driver.
 
  Thanks!
  Wei.
 
 Hi Wei,
 
 I was referring to:
 http://marc.info/?l=linux-raidm=118290909528910w=2
 
 async_tx is an api that exploits the raw capabilities of the new
 dmaengine interface.  For your case when the existing api calls do not
 provide the proper interface you can open code something like the
 following:
 
 tx = dev-device_prep_dma_operation(chan, len, int_flag)
 tx-tx_set_src(dma_addr_t, tx, index /* for multi-source ops */)
 tx-tx_set_dest(dma_addr_t, tx, index)
 tx-tx_submit(tx)
 
 The expectation is that the most common usages of dmaengines will use
 async_tx calls, or the 'dma_async_memcpy_foo_to_bar' helper routines.
 
 --
 Dan
 
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/4] Extend the DMA-engine API.

2007-07-11 Thread Zhang Wei-r63237
Hi, Dan, 

Do you mention here: http://marc.info/?l=linux-raid=118290909614463=2 ?
I see the async_tx is located at crypto/ of the above page, but my patch is for 
DMA engine in drivers/dma and for DMA engine driver.

Thanks!
Wei.
> -Original Message-
> Subject: Re: [PATCH 3/4] Extend the DMA-engine API.
> 
> On 7/10/07, Zhang Wei <[EMAIL PROTECTED]> wrote:
> > Add channel wait queue and transfer callback dma_xfer_callback().
> > If the DMA controller and driver support interrupt, when the
> > transfer is finished, it will wakeup the wait queue
> > and call the callback function of the channel.
> >
> > Add dma_async_raw_xfer() to API and device_raw_xfer() to 
> struct dma_device
> > for RAW physical address DMA transfer, which will be used 
> at transfer
> > between I/O address and memory address.
> >
> 
> Please review the async_tx API patch series[1], it should meet your
> needs.  What you call "raw" mode support is now default for the
> dmaengine driver interface.  I plan to request that this series be
> merged for 2.6.23.
> 
> Regards,
> Dan
> 
> [1]http://marc.info/?l=linux-raid=2=1=md-accel=b
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/4] Extend the DMA-engine API.

2007-07-11 Thread Zhang Wei-r63237
Hi, Dan, 

Do you mention here: http://marc.info/?l=linux-raidm=118290909614463w=2 ?
I see the async_tx is located at crypto/ of the above page, but my patch is for 
DMA engine in drivers/dma and for DMA engine driver.

Thanks!
Wei.
 -Original Message-
 Subject: Re: [PATCH 3/4] Extend the DMA-engine API.
 
 On 7/10/07, Zhang Wei [EMAIL PROTECTED] wrote:
  Add channel wait queue and transfer callback dma_xfer_callback().
  If the DMA controller and driver support interrupt, when the
  transfer is finished, it will wakeup the wait queue
  and call the callback function of the channel.
 
  Add dma_async_raw_xfer() to API and device_raw_xfer() to 
 struct dma_device
  for RAW physical address DMA transfer, which will be used 
 at transfer
  between I/O address and memory address.
 
 
 Please review the async_tx API patch series[1], it should meet your
 needs.  What you call raw mode support is now default for the
 dmaengine driver interface.  I plan to request that this series be
 merged for 2.6.23.
 
 Regards,
 Dan
 
 [1]http://marc.info/?l=linux-raidw=2r=1s=md-accelq=b
 
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5 v2] Add the explanation and a sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-29 Thread Zhang Wei-r63237
Hi, Segher, 

> DTS sector to the document of booting-without-of.txt file.
> 
> >>> +- #address-cells : Address representation for
> >> "rapidio" devices.
> >>> +  This field represents the number of cells needed 
> to represent
> >>> +  the RapidIO address of the registers.  For
> >> supporting more than
> >>> +  32-bits RapidIO address, this field should be <2>.
> >>> +  See 1) above for more details on defining #address-cells.
> >>
> >> What does the RapidIO standard say about number of address
> >> bits?  You want to follow that, so all RapidIO devices can
> >> use the same #address-cells, not just the FSL ones.  Also,
> >> are there different kinds of address spaces on the bus, or
> >> is it just one big memory-like space?
> >
> > I've checked the specification of RapidIO. The supporting of RapidIO
> > extended address modes are 66, 50 and 34 bit.
> 
> These three are all two bits more than some "regular" size --
> do those two extra bits have some special meaning perhaps,
> like an address space identifier or something?
> 
> > The Freescale's silicons is only support 34 bit address now.
> > Do you mean I should not use words -- 'should be <2>'?
> > The #address-cells should be assigned according the address mode
> > supported by silicon.
> 
> No.  The #address-cells is determined by the bus binding,
> so that all RapidIO busses on the planet can be represented
> in a similar way in the OF device tree.  Take for example
> the PCI binding, which gives you three address cells -- one
> to distinguish between different address spaces (configuration
> space, legacy I/O space, memory mapped space) and to contain
> some flags (prefetchable vs. non-prefetchable, etc.); the
> other two 32-bit cells contain a 64-bit address, although
> config and legacy I/O never are more than 32 bit, and many
> PCI devices can't do 64-bit addressing at all.
> 
> Now, there is no OF binding for RapidIO yet of course, but
> it would be good to start thinking about one while doing
> the binding for your specific controller -- it will make
> life easier down the line for everyone, including yourself.
> 
How about I add more words here for more clear expression?
Such as "<2> for 34 and 50 bit address, <3> for 66 bit address".

Thanks!
Wei.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5 v2] Add the explanation and a sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-29 Thread Zhang Wei-r63237
Hi, Segher, 

 DTS sector to the document of booting-without-of.txt file.
 
  +- #address-cells : Address representation for
  rapidio devices.
  +  This field represents the number of cells needed 
 to represent
  +  the RapidIO address of the registers.  For
  supporting more than
  +  32-bits RapidIO address, this field should be 2.
  +  See 1) above for more details on defining #address-cells.
 
  What does the RapidIO standard say about number of address
  bits?  You want to follow that, so all RapidIO devices can
  use the same #address-cells, not just the FSL ones.  Also,
  are there different kinds of address spaces on the bus, or
  is it just one big memory-like space?
 
  I've checked the specification of RapidIO. The supporting of RapidIO
  extended address modes are 66, 50 and 34 bit.
 
 These three are all two bits more than some regular size --
 do those two extra bits have some special meaning perhaps,
 like an address space identifier or something?
 
  The Freescale's silicons is only support 34 bit address now.
  Do you mean I should not use words -- 'should be 2'?
  The #address-cells should be assigned according the address mode
  supported by silicon.
 
 No.  The #address-cells is determined by the bus binding,
 so that all RapidIO busses on the planet can be represented
 in a similar way in the OF device tree.  Take for example
 the PCI binding, which gives you three address cells -- one
 to distinguish between different address spaces (configuration
 space, legacy I/O space, memory mapped space) and to contain
 some flags (prefetchable vs. non-prefetchable, etc.); the
 other two 32-bit cells contain a 64-bit address, although
 config and legacy I/O never are more than 32 bit, and many
 PCI devices can't do 64-bit addressing at all.
 
 Now, there is no OF binding for RapidIO yet of course, but
 it would be good to start thinking about one while doing
 the binding for your specific controller -- it will make
 life easier down the line for everyone, including yourself.
 
How about I add more words here for more clear expression?
Such as 2 for 34 and 50 bit address, 3 for 66 bit address.

Thanks!
Wei.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5 v2] Add the explanation and a sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-28 Thread Zhang Wei-r63237
Hi, Segher, 
 
> > +- #address-cells : Address representation for 
> "rapidio" devices.
> > +  This field represents the number of cells needed to represent
> > +  the RapidIO address of the registers.  For 
> supporting more than
> > +  32-bits RapidIO address, this field should be <2>.
> > +  See 1) above for more details on defining #address-cells.
> 
> What does the RapidIO standard say about number of address
> bits?  You want to follow that, so all RapidIO devices can
> use the same #address-cells, not just the FSL ones.  Also,
> are there different kinds of address spaces on the bus, or
> is it just one big memory-like space?
> 
> 

I've checked the specification of RapidIO. The supporting of RapidIO
extended address modes are 66, 50 and 34 bit.
The Freescale's silicons is only support 34 bit address now.
Do you mean I should not use words -- 'should be <2>'?
The #address-cells should be assigned according the address mode
supported by silicon.

Thanks!
Wei.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/5 v2] Add the platform device support with RapidIO to MPC8641HPCN platform.

2007-06-28 Thread Zhang Wei-r63237
Hi, Arnd,


> 
> On Wednesday 27 June 2007, Zhang Wei wrote:
> > +static struct of_device_id mpc86xx_of_ids[] = {
> > +   { .type = "soc", },
> > +   { .compatible = "fsl,rapidio-delta", },
> > +   {},
> > +};
> > +
> > +static __init int mpc86xx_of_device_init(void)
> > +{
> > +   return of_platform_bus_probe(NULL, mpc86xx_of_ids, NULL);
> > +}
> 
> This will add any devices below the "fsl,rapidio-delta" device
> as an of_device. Is that what you actually want? I would guess that
> you want to add the bridge itself, not the devices below it.
> 
> Is the rapidio device at the root of the device tree, and if so, why
> not under the soc bus?
> 

RapidIO is rather a bus that a device although these is no other nodes defined 
in its sector now.

Thanks!
Wei.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 3/5 v2] Add the platform device support with RapidIO to MPC8641HPCN platform.

2007-06-28 Thread Zhang Wei-r63237
Hi, Arnd,


 
 On Wednesday 27 June 2007, Zhang Wei wrote:
  +static struct of_device_id mpc86xx_of_ids[] = {
  +   { .type = soc, },
  +   { .compatible = fsl,rapidio-delta, },
  +   {},
  +};
  +
  +static __init int mpc86xx_of_device_init(void)
  +{
  +   return of_platform_bus_probe(NULL, mpc86xx_of_ids, NULL);
  +}
 
 This will add any devices below the fsl,rapidio-delta device
 as an of_device. Is that what you actually want? I would guess that
 you want to add the bridge itself, not the devices below it.
 
 Is the rapidio device at the root of the device tree, and if so, why
 not under the soc bus?
 

RapidIO is rather a bus that a device although these is no other nodes defined 
in its sector now.

Thanks!
Wei.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5 v2] Add the explanation and a sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-28 Thread Zhang Wei-r63237
Hi, Segher, 
 
  +- #address-cells : Address representation for 
 rapidio devices.
  +  This field represents the number of cells needed to represent
  +  the RapidIO address of the registers.  For 
 supporting more than
  +  32-bits RapidIO address, this field should be 2.
  +  See 1) above for more details on defining #address-cells.
 
 What does the RapidIO standard say about number of address
 bits?  You want to follow that, so all RapidIO devices can
 use the same #address-cells, not just the FSL ones.  Also,
 are there different kinds of address spaces on the bus, or
 is it just one big memory-like space?
 
 

I've checked the specification of RapidIO. The supporting of RapidIO
extended address modes are 66, 50 and 34 bit.
The Freescale's silicons is only support 34 bit address now.
Do you mean I should not use words -- 'should be 2'?
The #address-cells should be assigned according the address mode
supported by silicon.

Thanks!
Wei.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5] Add the explanation and sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-17 Thread Zhang Wei-r63237
Hi, Kumar and Segher, 

>
> > "..8641.." "..8641d.." "..8548.." "..8548e.." "..8543.." 
> "..8543e.." 
> > "..8572.." "..8572e.." "..8567.." "..8567e.." "..8568.." "..8568e.."
> 
> You don't need to mention _all_ compatible devices in
> the "compatible" property, only the few that matter;
> typically the oldest one, and sometimes some intermediate
> device that has extra features over the original one.
> 

The oldest one is difficult to find out sometime. Can we only set the
self name in dts, such as "fsl, rapidio-8641", and add this 'compatible'
property to the driver ids arrays? Such as:

static struct of_device_id of_rio_rpn_ids[] = {
{ .compatible = "fsl, rapidio-8540",},
{ .compatible = "fsl, rapidio-8560",},
{ .compatible = "fsl, rapidio-8641",},
{ .compatible = "fsl, rapidio-8548",},
{},
};

How about that?

> It isn't useful to add "compatible" entries that no OS
> probes for.
> 
> >> Concrete names are good.
> >
> > While I agree concrete names are good, we put these 'blocks' in so 
> > many devices that using the device to match on is pointless.
> 
> You *definitely* should put the device name for _this_
> device in there, in case it needs some special workaround.
> 
> > I'm all for making up a name like 'Grande', 'Del', 
> 'Janeiro'.  This is 
> > effective what we did with gianfar.  The name gets picked up pretty 
> > quickly by people.
> 
> That can be used as the "base" name, yes.
> 

Do you have the name list? I can change my codes according them.

How about 'Mercurary', 'Venus', 'Earth', 'Mars', 'Saturn', 'Jupiter',
'Uranus', 'Neptune',
Or 'Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra',
'Scorpius', 'Sagittarius', 'Capricornus', 'Aquarius', 'Pisces' ?

Thanks!
Wei.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5] Add the explanation and sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-17 Thread Zhang Wei-r63237
Hi, Kumar and Segher, 


  ..8641.. ..8641d.. ..8548.. ..8548e.. ..8543.. 
 ..8543e.. 
  ..8572.. ..8572e.. ..8567.. ..8567e.. ..8568.. ..8568e..
 
 You don't need to mention _all_ compatible devices in
 the compatible property, only the few that matter;
 typically the oldest one, and sometimes some intermediate
 device that has extra features over the original one.
 

The oldest one is difficult to find out sometime. Can we only set the
self name in dts, such as fsl, rapidio-8641, and add this 'compatible'
property to the driver ids arrays? Such as:

static struct of_device_id of_rio_rpn_ids[] = {
{ .compatible = fsl, rapidio-8540,},
{ .compatible = fsl, rapidio-8560,},
{ .compatible = fsl, rapidio-8641,},
{ .compatible = fsl, rapidio-8548,},
{},
};

How about that?

 It isn't useful to add compatible entries that no OS
 probes for.
 
  Concrete names are good.
 
  While I agree concrete names are good, we put these 'blocks' in so 
  many devices that using the device to match on is pointless.
 
 You *definitely* should put the device name for _this_
 device in there, in case it needs some special workaround.
 
  I'm all for making up a name like 'Grande', 'Del', 
 'Janeiro'.  This is 
  effective what we did with gianfar.  The name gets picked up pretty 
  quickly by people.
 
 That can be used as the base name, yes.
 

Do you have the name list? I can change my codes according them.

How about 'Mercurary', 'Venus', 'Earth', 'Mars', 'Saturn', 'Jupiter',
'Uranus', 'Neptune',
Or 'Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo', 'Libra',
'Scorpius', 'Sagittarius', 'Capricornus', 'Aquarius', 'Pisces' ?

Thanks!
Wei.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5] Add the explanation and sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-13 Thread Zhang Wei-r63237
Hi, Segher, 

> 
> >>> +- device_type : Should be "rapidio"
> >>
> >> There is no OF binding, so no.
> >
> > So, we need to define it.
> 
> If you want to.  Until that has been done, don't use
> a "device_type".  Linux won't use it, anyway.

Do you have another ideas about that? Only remove it?

> 
> >>> +- compatible : Should be "fsl,rapidio-v0.0" or
> >> "fsl,rapidio-v1.0"
> >>> +  and so on. The version number is got from IP Block Revision
> >>> +  Register of RapidIO controller.
> >>
> >> It's better to use real device names, just like everyone
> >> else.
> >
> > Some silicons of Freescale processor are the same RapidIO 
> controller,
> > such as mpc8540/mpc8560 are the same (v0.0), mpc8548/mpc8641 are the
> > same (v1.0). For v1.0 RapidIO controller, should we use mpc8548 or
> > mpc8641? Those will make people confused.
> 
> Not at all.  On an 8641 it could be
> 
>   compatible = "fsl,mpc8641-rapidio" "fsl,mpc8548-rapidio";
> 
> which states "this is the 8641 thing and it is compatible
> to the 8548 thing".  Perfectly clear.
> 
> > Using IP Block Revision is a
> > clear choice.
> 
> I don't think so.  For one thing, it describes a version of
> a cell design, not a version of an actual device.  For another
> thing, if I hear "8641" I know what you're talking about (sort
> of, anyway), but I draw a blank stare if you say "v1.0".  I'm
> sure I'm not the only one.  Concrete names are good.
> 

>From the different view ways, there are different results. Getting the
version from RapidIO IP revision register is clear to me. :)

> >>> +- #address-cells : Address representation for
> >> "rapidio" devices.
> >>> +  This field represents the number of cells needed 
> to represent
> >>> +  the RapidIO address of the registers.  For
> >> supporting more than
> >>> +  36-bits RapidIO address, this field should be <2>.
> >>
> >> More than 32 bit?
> >
> > Yes, RapidIO bus address width is 34 bits.
> 
> You said "more than 36 bit", I tried to ask if that is a typo
> perhaps.

Ya, caught by you! I'll fix it in next version. :)

> 
> >> No.  The format of an "interrupts" entry is defined by
> >> the interrupt domain this device sits in, not by the
> >> device itself.
> >>
> > Do you misunderstand the meaning of 'interrupts'?
> 
> Hahaha.  No, I don't misunderstand what the "interrupts" property
> means.  Perhaps you do?
> 
> > These interrupts is
> > issued from the RapidIO controller to the pic controller for tx, rx,
> > err, doorbell and message.
> 
> But the rapidio node doesn't know or care what the interrupts
> are connected to, and neither should it.  That's what the
> interrupt mapping recommended practice is for.
> 

There are no rapidio device in it. Doorbell, msg are all parts of
rapidio controller.
For example, 8641 rapidio controller have 2 msg unit: msg0 and msg1.
They are not rapidio devices. Each msg unit has the tx_irq and rx_irq.

> >>> For this sector, interrupts order should be
> >>> +   >>> +  msg2_tx_irq msg2_rx_irq ... msgN_tx_irq msgN_rx_irq>.
> >>
> >> That's to be defined in the binding for your specific device,
> >> not in a more generic rapidio binding.
> >
> > These description is just for compatible="fsl,rapidio-v*.*" rapidio
> > controller.
> 
> Okay, good.  Please make that way more obvious then :-)
> 
> >>> + #address-cells = <2>;
> >>
> >> You want a #size-cells as well.
> >
> > The size is not used in this sector, so no defined.
> 
> The size _is_ used; in the "ranges" property in this node,
> for example.  It is also needed to describe the "reg" for
> any child node of this node.
> 
> A non-existant "#size-cells" means 1, and "#address-cells"
> means 2, so in principle you could do without these
> properties; but Linux doesn't parse the tree correctly in
> that case (which reminds me, I have some more patches to
> send).
> 

Ok, I'll add it in the next version for more religious.

Thanks!
Wei.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5] Add the explanation and sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-13 Thread Zhang Wei-r63237
Hi, Segher, 

> -Original Message-
> Subject: Re: [PATCH 1/5] Add the explanation and sample of 
> RapidIO DTS sector to the document of booting-without-of.txt file.
> 
> > +   k) RapidIO
> > +
> > +   Required properties:
> > +
> > +- device_type : Should be "rapidio"
> 
> There is no OF binding, so no.

So, we need to define it.

> 
> > +- compatible : Should be "fsl,rapidio-v0.0" or 
> "fsl,rapidio-v1.0"
> > +  and so on. The version number is got from IP Block Revision
> > +  Register of RapidIO controller.
> 
> It's better to use real device names, just like everyone
> else.

Some silicons of Freescale processor are the same RapidIO controller,
such as mpc8540/mpc8560 are the same (v0.0), mpc8548/mpc8641 are the
same (v1.0). For v1.0 RapidIO controller, should we use mpc8548 or
mpc8641? Those will make people confused. Using IP Block Revision is a
clear choice.

> 
> > +- #address-cells : Address representation for 
> "rapidio" devices.
> > +  This field represents the number of cells needed to represent
> > +  the RapidIO address of the registers.  For 
> supporting more than
> > +  36-bits RapidIO address, this field should be <2>.
> 
> More than 32 bit?

Yes, RapidIO bus address width is 34 bits.

> 
> > +- interrupt-parent : the phandle for the interrupt 
> controller that
> > +  services interrupts for this device.
> 
> Not required, depends on the interrupt tree of the system.
> 
> > +- interrupts :  where a is the interrupt number and b is a
> > +  field that represents an encoding of the sense and level
> > +  information for the interrupt.
> 
> No.  The format of an "interrupts" entry is defined by
> the interrupt domain this device sits in, not by the
> device itself.
> 
Do you misunderstand the meaning of 'interrupts'? These interrupts is
issued from the RapidIO controller to the pic controller for tx, rx,
err, doorbell and message.


> > For this sector, interrupts order should be
> > +   > +  msg2_tx_irq msg2_rx_irq ... msgN_tx_irq msgN_rx_irq>.
> 
> That's to be defined in the binding for your specific device,
> not in a more generic rapidio binding.

These description is just for compatible="fsl,rapidio-v*.*" rapidio
controller.

> 
> > +   #address-cells = <2>;
> 
> You want a #size-cells as well.
> 

The size is not used in this sector, so no defined.

Thanks!
Wei.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5] Add the explanation and sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-13 Thread Zhang Wei-r63237
Hi, Segher, 

 -Original Message-
 Subject: Re: [PATCH 1/5] Add the explanation and sample of 
 RapidIO DTS sector to the document of booting-without-of.txt file.
 
  +   k) RapidIO
  +
  +   Required properties:
  +
  +- device_type : Should be rapidio
 
 There is no OF binding, so no.

So, we need to define it.

 
  +- compatible : Should be fsl,rapidio-v0.0 or 
 fsl,rapidio-v1.0
  +  and so on. The version number is got from IP Block Revision
  +  Register of RapidIO controller.
 
 It's better to use real device names, just like everyone
 else.

Some silicons of Freescale processor are the same RapidIO controller,
such as mpc8540/mpc8560 are the same (v0.0), mpc8548/mpc8641 are the
same (v1.0). For v1.0 RapidIO controller, should we use mpc8548 or
mpc8641? Those will make people confused. Using IP Block Revision is a
clear choice.

 
  +- #address-cells : Address representation for 
 rapidio devices.
  +  This field represents the number of cells needed to represent
  +  the RapidIO address of the registers.  For 
 supporting more than
  +  36-bits RapidIO address, this field should be 2.
 
 More than 32 bit?

Yes, RapidIO bus address width is 34 bits.

 
  +- interrupt-parent : the phandle for the interrupt 
 controller that
  +  services interrupts for this device.
 
 Not required, depends on the interrupt tree of the system.
 
  +- interrupts : a b where a is the interrupt number and b is a
  +  field that represents an encoding of the sense and level
  +  information for the interrupt.
 
 No.  The format of an interrupts entry is defined by
 the interrupt domain this device sits in, not by the
 device itself.
 
Do you misunderstand the meaning of 'interrupts'? These interrupts is
issued from the RapidIO controller to the pic controller for tx, rx,
err, doorbell and message.


  For this sector, interrupts order should be
  +  err_irq bell_outb_irq bell_inb_irq msg1_tx_irq msg1_rx_irq
  +  msg2_tx_irq msg2_rx_irq ... msgN_tx_irq msgN_rx_irq.
 
 That's to be defined in the binding for your specific device,
 not in a more generic rapidio binding.

These description is just for compatible=fsl,rapidio-v*.* rapidio
controller.

 
  +   #address-cells = 2;
 
 You want a #size-cells as well.
 

The size is not used in this sector, so no defined.

Thanks!
Wei.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 1/5] Add the explanation and sample of RapidIO DTS sector to the document of booting-without-of.txt file.

2007-06-13 Thread Zhang Wei-r63237
Hi, Segher, 

 
  +- device_type : Should be rapidio
 
  There is no OF binding, so no.
 
  So, we need to define it.
 
 If you want to.  Until that has been done, don't use
 a device_type.  Linux won't use it, anyway.

Do you have another ideas about that? Only remove it?

 
  +- compatible : Should be fsl,rapidio-v0.0 or
  fsl,rapidio-v1.0
  +  and so on. The version number is got from IP Block Revision
  +  Register of RapidIO controller.
 
  It's better to use real device names, just like everyone
  else.
 
  Some silicons of Freescale processor are the same RapidIO 
 controller,
  such as mpc8540/mpc8560 are the same (v0.0), mpc8548/mpc8641 are the
  same (v1.0). For v1.0 RapidIO controller, should we use mpc8548 or
  mpc8641? Those will make people confused.
 
 Not at all.  On an 8641 it could be
 
   compatible = fsl,mpc8641-rapidio fsl,mpc8548-rapidio;
 
 which states this is the 8641 thing and it is compatible
 to the 8548 thing.  Perfectly clear.
 
  Using IP Block Revision is a
  clear choice.
 
 I don't think so.  For one thing, it describes a version of
 a cell design, not a version of an actual device.  For another
 thing, if I hear 8641 I know what you're talking about (sort
 of, anyway), but I draw a blank stare if you say v1.0.  I'm
 sure I'm not the only one.  Concrete names are good.
 

From the different view ways, there are different results. Getting the
version from RapidIO IP revision register is clear to me. :)

  +- #address-cells : Address representation for
  rapidio devices.
  +  This field represents the number of cells needed 
 to represent
  +  the RapidIO address of the registers.  For
  supporting more than
  +  36-bits RapidIO address, this field should be 2.
 
  More than 32 bit?
 
  Yes, RapidIO bus address width is 34 bits.
 
 You said more than 36 bit, I tried to ask if that is a typo
 perhaps.

Ya, caught by you! I'll fix it in next version. :)

 
  No.  The format of an interrupts entry is defined by
  the interrupt domain this device sits in, not by the
  device itself.
 
  Do you misunderstand the meaning of 'interrupts'?
 
 Hahaha.  No, I don't misunderstand what the interrupts property
 means.  Perhaps you do?
 
  These interrupts is
  issued from the RapidIO controller to the pic controller for tx, rx,
  err, doorbell and message.
 
 But the rapidio node doesn't know or care what the interrupts
 are connected to, and neither should it.  That's what the
 interrupt mapping recommended practice is for.
 

There are no rapidio device in it. Doorbell, msg are all parts of
rapidio controller.
For example, 8641 rapidio controller have 2 msg unit: msg0 and msg1.
They are not rapidio devices. Each msg unit has the tx_irq and rx_irq.

  For this sector, interrupts order should be
  +  err_irq bell_outb_irq bell_inb_irq msg1_tx_irq msg1_rx_irq
  +  msg2_tx_irq msg2_rx_irq ... msgN_tx_irq msgN_rx_irq.
 
  That's to be defined in the binding for your specific device,
  not in a more generic rapidio binding.
 
  These description is just for compatible=fsl,rapidio-v*.* rapidio
  controller.
 
 Okay, good.  Please make that way more obvious then :-)
 
  + #address-cells = 2;
 
  You want a #size-cells as well.
 
  The size is not used in this sector, so no defined.
 
 The size _is_ used; in the ranges property in this node,
 for example.  It is also needed to describe the reg for
 any child node of this node.
 
 A non-existant #size-cells means 1, and #address-cells
 means 2, so in principle you could do without these
 properties; but Linux doesn't parse the tree correctly in
 that case (which reminds me, I have some more patches to
 send).
 

Ok, I'll add it in the next version for more religious.

Thanks!
Wei.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 2/5] Add RapidIO sector to MPC8641HPCN board dts file.

2007-06-12 Thread Zhang Wei-r63237
Hi, Phil,

> > +++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
> > @@ -329,6 +329,19 @@
> > >;
> > };
> >  
> > +   [EMAIL PROTECTED] {
> > +   device_type = "rapidio";
> > +   compatible = "fsl,rapidio-v1.0";
> > +   #address-cells = <2>;
> > +   reg = ;
> > +   ranges = <0 0 c000 2000>;
> 
> Don't understand the range setup... The code uses c000 as 
> the start
> and 2000 as the size for the rapidio law. So whats the 0 0 for? 
> At first I thought address-cells 2 means that the range numbers are
> pairs expressing 64-bit numbers, eg start 0 0, size c000 2000
> but thats not right...
> 

RapidIO address width is 34bits, so we use <2> for #address-cells.
"0 0" is the RapidIO bus address, since the #address-cells is 2, it's
double zero. "c000" is the parent bus address, which is memory
address. "2000" is the size.
So, they means mapping the address of memory 0xc000 to RapidIO bus
address 0x0 and the size is 0x2000.

> Sorry if I'm asking stupid questions
> 
> And thanks for the patch, just what I need.
> 
> BTW do you have any notes/documentation on the space 
> allocation routines
> intended use. I'm trying to work it out but I don't see any 
> actual users
> of it yet... I need something like it for my distributed DMA driver,
> hence the interest.

Sorry, there is no documentation now. But I'll post an example for using
them.

> 
> Cheers
> Phil
> 
> > +   interrupt-parent = <>;
> > +   /* err_irq bell_outb_irq bell_inb_irq
> > +   msg1_tx_irq msg1_rx_irq
> > +   msg2_tx_irq 
> msg2_rx_irq */
> > +   interrupts = <30 2 31 2 32 2 35 2 36 2 
> 37 2 38 2>;
> > +   };
> > +
> > mpic: [EMAIL PROTECTED] {
> > clock-frequency = <0>;
> > interrupt-controller;
> 
> 
> 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


RE: [PATCH 2/5] Add RapidIO sector to MPC8641HPCN board dts file.

2007-06-12 Thread Zhang Wei-r63237
Hi, Phil,

  +++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
  @@ -329,6 +329,19 @@
  ;
  };
   
  +   [EMAIL PROTECTED] {
  +   device_type = rapidio;
  +   compatible = fsl,rapidio-v1.0;
  +   #address-cells = 2;
  +   reg = c 2;
  +   ranges = 0 0 c000 2000;
 
 Don't understand the range setup... The code uses c000 as 
 the start
 and 2000 as the size for the rapidio law. So whats the 0 0 for? 
 At first I thought address-cells 2 means that the range numbers are
 pairs expressing 64-bit numbers, eg start 0 0, size c000 2000
 but thats not right...
 

RapidIO address width is 34bits, so we use 2 for #address-cells.
0 0 is the RapidIO bus address, since the #address-cells is 2, it's
double zero. c000 is the parent bus address, which is memory
address. 2000 is the size.
So, they means mapping the address of memory 0xc000 to RapidIO bus
address 0x0 and the size is 0x2000.

 Sorry if I'm asking stupid questions
 
 And thanks for the patch, just what I need.
 
 BTW do you have any notes/documentation on the space 
 allocation routines
 intended use. I'm trying to work it out but I don't see any 
 actual users
 of it yet... I need something like it for my distributed DMA driver,
 hence the interest.

Sorry, there is no documentation now. But I'll post an example for using
them.

 
 Cheers
 Phil
 
  +   interrupt-parent = mpic;
  +   /* err_irq bell_outb_irq bell_inb_irq
  +   msg1_tx_irq msg1_rx_irq
  +   msg2_tx_irq 
 msg2_rx_irq */
  +   interrupts = 30 2 31 2 32 2 35 2 36 2 
 37 2 38 2;
  +   };
  +
  mpic: [EMAIL PROTECTED] {
  clock-frequency = 0;
  interrupt-controller;
 
 
 
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/