기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.
안녕하세요
6410의 CS5를 사용하여 특정 driver에서 사용하려 합니다.
커널 버젼은 2.6.21.5-cfs-v19 입니다.
먼저 커널에서 phy address 를 virtual address로 매핑하였습니다
0x38000000 -> 0xF4000000
1. ./arch/arm/mach-s3c6410/mach-smdk6410.c
static struct map_desc smdk6410_iodesc[] __initdata = {
IODESC_ENT(DM9000),
IODESC_ENT(TL16C554) // <<-----------추가한 부분
};
2. ./include/asm-arm/arch/map.h
#define S3C2410_ADDR(x) (0xF0000000 + (x))
//아래 사항 추가
#define S3C24XX_VA_TL16C554 S3C2410_ADDR(0x04000000)
#define S3C24XX_PA_TL16C554 (0x38000000)
#define S3C24XX_SZ_TL16C554 SZ_1M
device driver 부분 입니다.
{
.. 생략
writel(readl(S3C_SROM_BW) & ~(0xf << 20) , S3C_SROM_BW);
writel(readl(S3C_SROM_BW) | (1 << 22) | (1 << 23) , S3C_SROM_BW);
// S3C_SROM_BC5은 default로 사용
uartbase = S3C24XX_VA_ANDCS5;
printk(" TL16C554_Init : uartbase value : 0x%x \n",*uartbase); <<----------- uartbase access시 kernel panic
... 생략
}
--------------------------------------------------------------------------------------------------
해당 driver를 insmod시 다음과 같은 kernel panic이 발생합니다...
제가 잘못한 부분이나 빼먹은 부분이 있나요?
uartbase [0xf4000000]
TL16C554_Init : uartbase : 0xf4000000
Unhandled fault: external abort on linefetch (0x1806) at 0x00000000
Internal error: : 1806 [#1]
CPU: 0
PC is at printk+0x4/0x24
LR is at init_module+0xcc/0x120 [adtlc554]
pc : [<c009973c>] lr : [<bf0130cc>] Tainted: P
sp : c4aefed8 ip : c4aefed8 fp : c4aefeec
r10: 00000025 r9 : c607e000 r8 : c51c67c4
r7 : 00000025 r6 : bf0083a0 r5 : 00000000 r4 : bf008520
r3 : f4000000 r2 : 00000000 r1 : 00002473 r0 : bf0072ce
Flags: nZCv IRQs on FIQs on Mode SVC_32 Segment user
Control: C5387F
Table: 5442C008 DAC: 00000015
Process insmod (pid: 857, stack limit = 0xc4aee250)
Stack: (0xc4aefed8 to 0xc4af0000)
fec0: c51c679c c51c6600
fee0: c4aeffa4 c4aefef0 c00b7724 bf01300c 00000000 c4424824 00000000 00000000
ff00: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
ff20: 00000009 00000000 00000000 00000000 00000000 c609ca30 c50b6b00 c6092c0b
ff40: c60932d0 c6092f38 00000004 000000a4 000000a4 bf0083e8 c01745a4 00000023
ff60: c60932f8 bf0083ac c02dc5f0 c6093320 00000000 00000000 c00816ec 0001ee6b
ff80: bebf3ea0 00000310 00000080 c007adc8 c4aee000 00000000 00000000 c4aeffa8
ffa0: c007ac20 c00b643c 0001ee6b bebf3ea0 001d0fb8 0001ee6b 001d0fa8 00000000
ffc0: 0001ee6b bebf3ea0 00000310 00000080 00000000 00000002 00000000 bebf3dc4
ffe0: bebf3c00 bebf3bf0 000340b4 00009590 20000010 001d0fb8 fff8fff8 fff7fff8
Backtrace:
[<bf013000>] (init_module+0x0/0x120 [adtlc554]) from [<c00b7724>] (sys_init_module+0x12f4/0x13b0)
r5 = C51C6600 r4 = C51C679C
[<c00b6430>] (sys_init_module+0x0/0x13b0) from [<c007ac20>] (ret_fast_syscall+0x0/0x2c)
Code: c033c837 c03a69e4 c03a6a78 e1a0c00d (e92d000f)
Segmentation fault
위방법 말고 ioremap을 사용했을 경우에는
TL16C554_Init : uartbase : 0xc607e000
Unhandled fault: external abort on non-linefetch (0x1008) at 0xc607e000
Internal error: : 1008 [#1]
이렇게 panic이 발생하네요... ;;
현재 보드에서 사용중인 CS0,1,2 쪽을 mapping하면 정상적으로 access가능한데
CS3,4,5영역은 위와 동일한 panic이 발생합니다..
조언 부탁드립니다. 그럼 수고하세요