<div class="im"> Hi,<br>&gt;<br>&gt; I am new to linux-kernel and am using kernel 3.1.6 and working on<br>&gt; arm-SemiHosting(through USB) drivers.<br>&gt;<br>&gt; We are using SemiHosting to exchange/transfer data from the arm-board to<br>
&gt; the PC.<br><br></div>What is SemiHosting?<div>SemiHosting is a way to tranfer/exchange data b/w arm-board and the PC.</div><div>We have an application USBConsole.exe running on the windows machine that controls/interfaces with the USB uint on the</div>
<div>arm board.<br><div class="im"><br>&gt; Board details –<br>&gt;<br>&gt; Using ARM926e-js processor with 128MB SDRAM., Clock-33Mhz<br>&gt;<br>&gt; SDRAM Size = 128M<br>&gt;<br>&gt; CONFIG_PAGE_OFFSET = 0xc0000000<br>&gt; CONFIG_PHYS_OFFSET= 0x80000000<br>
&gt; Kernel Lowmem = 32M including 8M for initramfs (starting from  24M to 32M).<br>&gt; HighMEM is not configured.<br>&gt; Vmalloc_start =     end address of LowMem (i.e 0xC200000)<br>&gt; VMALLOC_END =  Vmalloc_start + 64M  = 0xC6000000<br>
&gt;<br>&gt; The SemiHosting(USB) drivers have read(); write(); seek(); functionalities<br>&gt; along with an InitUSB function that initializes the semihosting USB<br>&gt; hardware unit on the arm board.<br><br></div>Is this a USB host controller, or a device controller?  Do you have a<br>
pointer to where this code is somewhere so we can see what it does?</div><div>It is neither.,it is a hardware unit on the arm-board with a register set accesed by both arm and </div><div>the USBConsole.exe on the PC.This USBConsole.exe sets these registers appropriately.</div>
<div><br><div class="im"><br>&gt; We are using kernel ioremap() function for accessing the USB register set,<br>&gt; which is remaped to malloc section.<br><br></div>Are these are the USB controller&#39;s register set for a host device, or a<br>
&quot;gadget&quot;?<br><div class="im"><br>&gt; Functionality in  semihosting init (InitUSB) function –<br>&gt;<br>&gt; 1. We send header command to hostPC via USB DMA operation  by setting few<br>&gt; USB registers.<br><br>
</div>Setting them where?</div><div>Setting them on the board memory(USB register memory after virtually mapped)<br><div class="im"><br>&gt;     USB DMA takes the start address of the header and it’s size and these<br>&gt; two params (addr, size) are set into corresponding USB registers.<br>
&gt;<br>&gt;     The USB transfer is enabled by setting USB_EN register to appropriate<br>&gt; value.<br>&gt;<br>&gt;<br>&gt;<br>&gt; 2.After header transfer  acknowledgement from hostPC should be received.<br>&gt;<br>&gt;   As acknowledgement , hostPC should set INTC_USB register, we poll for<br>
&gt; this register and once this is set we are done with the initialisation.<br>&gt;<br>&gt; I wanted to test if the InitUSB function is working as expected. So I<br>&gt; called this function in the start_kernel(after Console_Init()).<br>
&gt;<br>&gt; As this function is just setting few registers and polling for few<br>&gt; registers., I io_remaped this register set in the InitUSB function..<br>&gt;<br>&gt; But the INTC_USB register that is set by the hostPC as acknowledgement is<br>
&gt; not getting set and the code is never coming out of the while loop.<br>&gt;</div><div class="im">  Can a USBConsole.exe running on the windows machine access register on the arm-board running on the linux.??</div><div class="im">
&gt;<br>&gt; As mentioned I am calling the Init_USB function in the start_kernel(after<br>&gt; Console_Init()).</div><br><div class="gmail_quote">On Fri, Mar 9, 2012 at 8:34 PM, Greg KH <span dir="ltr">&lt;<a href="mailto:gregkh@linuxfoundation.org">gregkh@linuxfoundation.org</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Fri, Mar 09, 2012 at 03:49:57PM +0530, KARTHIK SEKURU wrote:<br>
&gt; Hi,<br>
&gt;<br>
&gt; I am new to linux-kernel and am using kernel 3.1.6 and working on<br>
&gt; arm-SemiHosting(through USB) drivers.<br>
&gt;<br>
&gt; We are using SemiHosting to exchange/transfer data from the arm-board to<br>
&gt; the PC.<br>
<br>
</div>What is SemiHosting?<br>
<div class="im"><br>
&gt; Board details –<br>
&gt;<br>
&gt; Using ARM926e-js processor with 128MB SDRAM., Clock-33Mhz<br>
&gt;<br>
&gt; SDRAM Size = 128M<br>
&gt;<br>
&gt; CONFIG_PAGE_OFFSET = 0xc0000000<br>
&gt; CONFIG_PHYS_OFFSET= 0x80000000<br>
&gt; Kernel Lowmem = 32M including 8M for initramfs (starting from  24M to 32M).<br>
&gt; HighMEM is not configured.<br>
&gt; Vmalloc_start =     end address of LowMem (i.e 0xC200000)<br>
&gt; VMALLOC_END =  Vmalloc_start + 64M  = 0xC6000000<br>
&gt;<br>
&gt; The SemiHosting(USB) drivers have read(); write(); seek(); functionalities<br>
&gt; along with an InitUSB function that initializes the semihosting USB<br>
&gt; hardware unit on the arm board.<br>
<br>
</div>Is this a USB host controller, or a device controller?  Do you have a<br>
pointer to where this code is somewhere so we can see what it does?<br>
<div class="im"><br>
&gt; We are using kernel ioremap() function for accessing the USB register set,<br>
&gt; which is remaped to malloc section.<br>
<br>
</div>Are these are the USB controller&#39;s register set for a host device, or a<br>
&quot;gadget&quot;?<br>
<div class="im"><br>
&gt; Functionality in  semihosting init (InitUSB) function –<br>
&gt;<br>
&gt; 1. We send header command to hostPC via USB DMA operation  by setting few<br>
&gt; USB registers.<br>
<br>
</div>Setting them where?<br>
<div class="im"><br>
&gt;     USB DMA takes the start address of the header and it’s size and these<br>
&gt; two params (addr, size) are set into corresponding USB registers.<br>
&gt;<br>
&gt;     The USB transfer is enabled by setting USB_EN register to appropriate<br>
&gt; value.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 2.After header transfer  acknowledgement from hostPC should be received.<br>
&gt;<br>
&gt;   As acknowledgement , hostPC should set INTC_USB register, we poll for<br>
&gt; this register and once this is set we are done with the initialisation.<br>
&gt;<br>
&gt; I wanted to test if the InitUSB function is working as expected. So I<br>
&gt; called this function in the start_kernel(after Console_Init()).<br>
&gt;<br>
&gt; As this function is just setting few registers and polling for few<br>
&gt; registers., I io_remaped this register set in the InitUSB function..<br>
&gt;<br>
&gt; But the INTC_USB register that is set by the hostPC as acknowledgement is<br>
&gt; not getting set and the code is never coming out of the while loop.<br>
&gt;<br>
&gt; Now, I wanted to know if the place from where the InitUSB() function is<br>
&gt; called is the culprit and due to it if I am not receiving acknowledgement<br>
&gt; from the PC.<br>
&gt;<br>
&gt; As mentioned I am calling the Init_USB function in the start_kernel(after<br>
&gt; Console_Init()).<br>
<br>
</div>I think a pointer to the code would be the easiest for us to understand<br>
exactly what is going on here.  Also, USB specific questions are best<br>
asked on the <a href="mailto:linux-usb@vger.kernel.org">linux-usb@vger.kernel.org</a> mailing list, have you tried<br>
there?<br>
<br>
thanks,<br>
<br>
greg k-h<br>
</blockquote></div><br></div>