2010년 9월 13일 월요일

Mango64 & kernel) 이더넷 디바이스 드라이버 살리기


(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



댓글 없음: