<div dir="ltr"><div><div>Hi All,<br></div>         First of all thank you  all for taking your time out to reply<br></div><br><div><div><div><div class="gmail_extra"> <br></div><div class="gmail_extra"><br><div class="gmail_quote">
On Fri, Aug 23, 2013 at 3:59 AM, Ira W. Snyder <span dir="ltr"><<a href="mailto:iws@ovro.caltech.edu" target="_blank">iws@ovro.caltech.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class=""><div class="h5">On Thu, Aug 22, 2013 at 02:43:38PM -0700, David Hawkins wrote:<br>
> Hi S.Saravanan,<br>
><br>
> > I have a custom board  with four MPC8640 nodes connected over<br>
> > a transparent PCI express switch . In this configuration one node is<br>
> > configured as host(Root Complex) and others as agents(End Point). Thus<br>
> > the legacy PCI software works fine . However the mainline kernel lacks<br>
> > any standard support for Inter-processor communication over PCI. I am<br>
> > in the process of developing an Ethernet over  PCI driver for the same<br>
> > on the lines of rionet . However I am facing the following problems.<br>
> ><br>
> > a)   I can generate MSI interrupts from End Point to Root Complex over<br>
> > PCI . But the vice-versa is not possible . However i need a method to<br>
> > interrupt the End Point from the Root Complex to complete my driver.<br>
><br>
> Root complex's would normally interrupt a device via a PCIe write<br>
> to a register in a BAR on the end-point (or in extended configuration<br>
> space registers depending on the hardware implementation).<br>
<br></div></div></blockquote><div>MPC8640 End point implements only the Type 0 header (Page 1116) . The header implements five BARs (Page 1165).  <br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class=""><div class="h5">
> > Only previous references I can find are this post<br>
> > <a href="http://www.mail-archive.com/linuxppc-dev@lists.ozlabs.org/msg25765.html" target="_blank">http://www.mail-archive.com/linuxppc-dev@lists.ozlabs.org/msg25765.html</a><br>
> > However this uses doorbells and I think may not be possible in MPC8640.<br>
><br>
> PCIe drivers need some way to interrupt the processor, so there must<br>
> be an option somewhere ... for example, what are the message register<br>
> interrupts intended for? See p479<br>
><br>
> <a href="http://cache.freescale.com/files/32bit/doc/ref_manual/MPC8641DRM.pdf" target="_blank">http://cache.freescale.com/files/32bit/doc/ref_manual/MPC8641DRM.pdf</a><br>
><br>
> (Ira and myself have not used the MPC8640 so are not familiar with<br>
> its user manual).<br></div></div></blockquote><div><br></div><div>   Message registers  are for interrupting the processor . A write to them sends an interrupt to the processor .  Actually message registers are used by the RC to enable interrupts to the processor when an EP sends an MSI transaction to RC.In RC driver  i register separately for the msi interrupts from all three EPs.<br>
<br> To access them in the EP from the RC  i will have to set an inbound window mapping the PIC 
register space in the EP  to the PCI mem space  assigned to it . An inbound window maps a PCI address on the bus received by the PCIe controller to a platform address. I will try that and let u know . <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class=""><div class="h5">
><br>
> > Any pointers on this issue and guidance on this driver development would<br>
> > be helpful .<br>
><br>
> We use the Ethernet-over-PCI driver that Ira developed. Our next boards<br>
> will use an MPC8308, but we don't currently have any in a PCIe device<br>
> form-factor (just the MPC8038RDB), so he has not ported it to PCIe.<br>
><br>
> Feel free to discuss your ideas for your PCIe driver (eg., why start<br>
> with rionet rather than Ira's driver), either on-list, or email Ira<br>
> and myself directly<br></div></div></blockquote><div><br></div><div>To be frank with you there was no particular reason in starting with rionet. Maybe because our board also had SRIO interface and we are using rionet driver successfully. I had looked at Ira's driver later. I will study that also and try   to come back with a skeleton for my driver.  <br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class=""><div class="h5">
<br>
</div></div>One further note. You might want to look at rproc/rpmsg and their virtio<br>
driver support. That seems to be where the Linux world is moving for<br>
inter-processor communications. See for example the ARM CPUs interfacing<br>
with DSPs.<br>
<span class=""><font color="#888888"><br>
Ira<br>
</font></span></blockquote></div><br></div><div class="gmail_extra">I will study that as i am not familiar with virtio .<br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Regards,<br><br></div><div class="gmail_extra">
S.Saravanan<br></div><div class="gmail_extra"><br><br><br></div></div></div></div></div>