<p class="MsoNormal">Hi,</p>

<p class="MsoNormal">I am new to linux-kernel and am using kernel 3.1.6 and
working on arm-SemiHosting(through USB) drivers.</p>

<p class="MsoNormal">We are using SemiHosting to exchange/transfer data from the arm-board
to the PC.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Board details – </p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Using ARM926e-js processor with 128MB SDRAM., Clock-33Mhz</p>

<p class="MsoNormal">SDRAM Size = 128M</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">CONFIG_PAGE_OFFSET = 0xc0000000</p>

<p class="MsoNormal">CONFIG_PHYS_OFFSET= 0x80000000</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Kernel Lowmem = 32M including 8M for initramfs (starting
from  24M to 32M).</p>

<p class="MsoNormal">HighMEM is not configured.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Vmalloc_start =     end
address of LowMem (i.e 0xC200000)</p>

<p class="MsoNormal">VMALLOC_END = 
Vmalloc_start + 64M  = 0xC6000000</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">The SemiHosting(USB) drivers have read(); write(); seek();
functionalities along with an InitUSB function that initializes the semihosting
USB hardware unit on the arm board.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">We are using kernel ioremap() function for accessing the USB
register set, which is remaped to malloc section.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Functionality in  semihosting
init (InitUSB) function –</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">1. We send header command to hostPC via USB DMA
operation  by setting few USB registers.</p>

<p class="MsoNormal">    USB DMA takes the
start address of the header and it’s size and these two params (addr, size) are
set into corresponding USB registers.</p>

<p class="MsoNormal">    The USB transfer
is enabled by setting USB_EN register to appropriate value.       </p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">2.After header transfer 
acknowledgement from hostPC should be received.</p>

<p class="MsoNormal">  As acknowledgement ,
hostPC should set INTC_USB register, we poll for this register and once this is
set we are done with the initialisation.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">I wanted to test if the InitUSB function is working as
expected. So I called this function in the start_kernel(after Console_Init()).</p>

<p class="MsoNormal">As this function is just setting few registers and polling
for few registers., I io_remaped this register set in the InitUSB function..</p>

<p class="MsoNormal">But the INTC_USB register that is set by the hostPC as
acknowledgement is not getting set and the code is never coming out of the
while loop.</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Now, I wanted to know if the place from where the InitUSB()
function is called is the culprit and due to it if I am not receiving
acknowledgement from the PC.</p>

<p class="MsoNormal">As mentioned I am calling the Init_USB function in the start_kernel(after
Console_Init()).</p>

<p class="MsoNormal"> </p>

<p class="MsoNormal">Karthik.</p>

<p class="MsoNormal"> </p>