The start address 0x4806E000 (UART4 base address) is already present in /proc/iomem with the name omap4-uart.
How to disable the memory regions already allocated ?.
Edit : Even though request_mem_region is successful the console during booting shows this messages.
[ 0.758514] Serial: 8250/16550 driver, 3 ports, IRQ sharing enabled
[ 0.760040] omap_uart.0: ttyO0 at MMIO 0x4806a000 (irq = 104) is a OMAP UART0
[ 0.760498] omap_uart.1: ttyO1 at MMIO 0x4806c000 (irq = 105) is a OMAP UART1
[ 0.760955] omap_uart.2: ttyO2 at MMIO 0x48020000 (irq = 106) is a OMAP UART2
[ 1.778808] console [ttyO2] enabled
[ 1.782989] omap_uart omap_uart.3: [UART3]: failure [serial_omap_probe]: -22
[ 1.790466] omap_uart: probe of omap_uart.3 failed with error -22
I think it indicates the kernel is still trying to configure the uart4 instance? Edit 2: During software reset the while loop enters into infinite loop
/* Pad Configuration */
unsigned int pad_value = 0xFFF8FFF8;
l = ioread32(pad_map);
l &= pad_value;
iowrite32(l,pad_map);
printk(KERN_ALERT "pad configured\n");
/* Software reset */
printk(KERN_ALERT "reset check bit = %x\n",((serial_in(UART_OMAP_SYSC))));
serial_out(UART_OMAP_SYSC,swreset);
printk(KERN_ALERT "reset check bit = %x\n",((serial_in(UART_OMAP_SYSC))));
readval = serial_in(UART_OMAP_SYSS);
while((readval & 0x01)== 0);
printk(KERN_ALERT "software reset completed\n");
@Dino,
How to disable the memory regions already allocated ?.
Solution: what i think is that you can disable UART driver from kernel (menuconfig), build the kernel image and check /proc/iomem, I guess UART4 related instances will be removed.
Note: If using device tree concept then need to disable UART4 node "@uart4" in device tree.
I would like to use it in my driver code with different name. Is it possible?
Solution: In your LKM request for the memory range using request_mem_region with your driver name.
BTW: Why the call to ioremap is not failing ?
Solution: ioremap api will not fail because api does not have check for ex:"driver name" or any other checks.