(Mango64 & kernel) 이더넷 디바이스 드라이버 살리기
망고64는 이더넷이 BANK4에 연결이 되어 있습니다. 따라서,
타이밍을 조절하는 코드를 수정해야 합니다.
Mach-mango6410.c
struct map_desc mango6410_iodesc[] = { IODESC_ENT(SMC9115), }; static struct platform_device *mango6410_devices[] __initdata = { #ifdef CONFIG_S3C6410_SD_CH0 &s3c_device_hsmmc0, #endif #ifdef CONFIG_S3C6410_SD_CH1 &s3c_device_hsmmc1, #endif &s3c_device_i2c0, &s3c_device_i2c1, #if defined(CONFIG_SPI_CNTRLR_0) &s3c_device_spi0, #endif #if defined(CONFIG_SPI_CNTRLR_1) &s3c_device_spi1, #endif &s3c_device_ts, &s3c_device_smc911x, &s3c_device_lcd, &s3c_device_nand, &s3c_device_onenand, &s3c_device_keypad, &s3c_device_usb, &s3c_device_usbgadget, #ifdef CONFIG_S3C_ADC &s3c_device_adc, #endif #ifdef CONFIG_RTC_DRV_S3C &s3c_device_rtc, #endif #ifdef CONFIG_VIDEO_G2D &s3c_device_g2d, #endif #ifdef CONFIG_VIDEO_FIMC &s3c_device_fimc0, &s3c_device_fimc1, #endif #if CONFIG_VIDEO_CAM &s3c_device_camif, #endif #ifdef CONFIG_VIDEO_MFC &s3c_device_mfc, #endif #ifdef CONFIG_VIDEO_G3D &s3c_device_g3d, #endif #ifdef CONFIG_VIDEO_ROTATOR &s3c_device_rotator, #endif #ifdef CONFIG_VIDEO_JPEG &s3c_device_jpeg, #endif &s3c_device_vpp, #ifdef CONFIG_S3C6410_TVOUT &s3c_device_tvenc, &s3c_device_tvscaler, #endif &sec_device_backlight, &sec_device_battery, }; static void __init smdk6410_smc911x_set(void) { unsigned int tmp; tmp = __raw_readl(S3C64XX_SROM_BW); tmp &= ~(S3C64XX_SROM_BW_WAIT_ENABLE4_MASK | S3C64XX_SROM_BW_WAIT_ENABLE4_MASK | S3C64XX_SROM_BW_DATA_WIDTH4_MASK); tmp |= S3C64XX_SROM_BW_BYTE_ENABLE4_ENABLE | S3C64XX_SROM_BW_WAIT_ENABLE4_ENABLE | S3C64XX_SROM_BW_DATA_WIDTH4_16BIT; __raw_writel(tmp, S3C64XX_SROM_BW); __raw_writel(S3C64XX_SROM_BCn_TACS(0) | S3C64XX_SROM_BCn_TCOS(4) | S3C64XX_SROM_BCn_TACC(13) | S3C64XX_SROM_BCn_TCOH(1) | S3C64XX_SROM_BCn_TCAH(4) | S3C64XX_SROM_BCn_TACP(6) | S3C64XX_SROM_BCn_PMC_NORMAL, S3C64XX_SROM_BC4); } |
Y:\work\mango64\kernel-eclair\arch\arm\mach-s3c6400\include\mach\regs-mem.h 에 추가
#define S3C64XX_SROM_BW_DATA_WIDTH4_8BIT (0 <<> #define S3C64XX_SROM_BW_DATA_WIDTH4_16BIT (1 <<> #define S3C64XX_SROM_BW_DATA_WIDTH4_MASK (1 <<> #define S3C64XX_SROM_BW_WAIT_ENABLE4_DISABLE (0 <<> #define S3C64XX_SROM_BW_WAIT_ENABLE4_ENABLE (1 <<> #define S3C64XX_SROM_BW_WAIT_ENABLE4_MASK (1 <<> #define S3C64XX_SROM_BW_BYTE_ENABLE4_DISABLE (0 <<> #define S3C64XX_SROM_BW_BYTE_ENABLE4_ENABLE (1 <<> #define S3C64XX_SROM_BW_BYTE_ENABLE4_MASK (1 <<19) |
\arch\arm\plat-s3c\include\plat\map-base.h에 추가
#define S3C_VA_SMSC9220 S3C_ADDR(0x03b00000) /* SMSC911X */ |
drivers\net\smsc911x.c에 추가
static int __devinit smsc911x_drv_probe(struct platform_device *pdev) { struct net_device *dev; struct smsc911x_data *pdata; struct smsc911x_platform_config *config = pdev->dev.platform_data; struct resource *res; unsigned int intcfg = 0; int res_size; int retval; DECLARE_MAC_BUF(mac); pr_info("%s: Driver version %s.\n", SMSC_CHIPNAME, SMSC_DRV_VERSION); #if defined(CONFIG_MACH_SMDK6410) || defined(CONFIG_MACH_MANGO6410) // Mango64 set_irq_type(IRQ_EINT(11), IRQ_TYPE_LEVEL_LOW); #endif |
arch\arm\plat-s3c64xx\devs.c 의 .name과
#define SMSC_CHIPNAME "smsc911x"(drivers\net\smsc911x.c)
이름이 동일해야 합니다.
struct platform_device s3c_device_smc911x = { .name = "smsc911x", .id = -1, .num_resources = ARRAY_SIZE(s3c_smc911x_resources), .resource = s3c_smc911x_resources, .dev = { .platform_data = &smsc911x_config, }, }; |
.config 파일에
CONFIG_SMSC911X=y
로 되어 있어야 합니다.
확인 방법
부팅 메시지에서 아래와 같이 나와야 합니다.
1.626278] smsc911x: Driver version 2008-10-21. [ 1.631831] smsc911x-mdio: probed [ 1.632438] eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ffffffff:01, irq=-1) [ 1.640862] net eth0: MAC Address: de:89:87:cf:08:c8 |
|
댓글 없음:
댓글 쓰기