Correct Place of calling a driver initialization function.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I am new to linux-kernel and am using kernel 3.1.6 and working on arm-SemiHosting(through USB) drivers.

We are using SemiHosting to exchange/transfer data from the arm-board to the PC.

 

Board details –

 

Using ARM926e-js processor with 128MB SDRAM., Clock-33Mhz

SDRAM Size = 128M

 

CONFIG_PAGE_OFFSET = 0xc0000000

CONFIG_PHYS_OFFSET= 0x80000000

 

Kernel Lowmem = 32M including 8M for initramfs (starting from  24M to 32M).

HighMEM is not configured.

 

Vmalloc_start =     end address of LowMem (i.e 0xC200000)

VMALLOC_END =  Vmalloc_start + 64M  = 0xC6000000

 

 

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.

 

We are using kernel ioremap() function for accessing the USB register set, which is remaped to malloc section.

 

 

Functionality in  semihosting init (InitUSB) function –

 

1. We send header command to hostPC via USB DMA operation  by setting few USB registers.

    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.

    The USB transfer is enabled by setting USB_EN register to appropriate value.      

 

2.After header transfer  acknowledgement from hostPC should be received.

  As acknowledgement , hostPC should set INTC_USB register, we poll for this register and once this is set we are done with the initialisation.

 

 

I wanted to test if the InitUSB function is working as expected. So I called this function in the start_kernel(after Console_Init()).

As this function is just setting few registers and polling for few registers., I io_remaped this register set in the InitUSB function..

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.

 

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.

As mentioned I am calling the Init_USB function in the start_kernel(after Console_Init()).

 

Karthik.

 

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux