X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=target%2Flinux%2Far71xx%2Ffiles%2Farch%2Fmips%2Fath79%2Fmach-rb2011.c;h=46b8a053d3fb869e9cec4a74900217a2ae4d46d1;hp=ecdd7ea2e89f00a2968ffaf3b8a374b41e6dfe9d;hb=144cfb65a478a57ae0c551df27ee6d152b644799;hpb=5804b9d1b71c5bdf23ad2889f22d147300ec175e diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c index ecdd7ea2e8..46b8a053d3 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c @@ -39,11 +39,10 @@ #define RB2011_GPIO_NAND_NCE 14 #define RB_ROUTERBOOT_OFFSET 0x0000 -#define RB_ROUTERBOOT_SIZE 0xb000 -#define RB_HARD_CFG_OFFSET 0xb000 +#define RB_ROUTERBOOT_MIN_SIZE 0xb000 #define RB_HARD_CFG_SIZE 0x1000 #define RB_BIOS_OFFSET 0xd000 -#define RB_BIOS_SIZE 0x2000 +#define RB_BIOS_SIZE 0x1000 #define RB_SOFT_CFG_OFFSET 0xf000 #define RB_SOFT_CFG_SIZE 0x1000 @@ -53,11 +52,9 @@ static struct mtd_partition rb2011_spi_partitions[] = { { .name = "routerboot", .offset = RB_ROUTERBOOT_OFFSET, - .size = RB_ROUTERBOOT_SIZE, .mask_flags = MTD_WRITEABLE, }, { .name = "hard_config", - .offset = RB_HARD_CFG_OFFSET, .size = RB_HARD_CFG_SIZE, .mask_flags = MTD_WRITEABLE, }, { @@ -67,11 +64,29 @@ static struct mtd_partition rb2011_spi_partitions[] = { .mask_flags = MTD_WRITEABLE, }, { .name = "soft_config", - .offset = RB_SOFT_CFG_OFFSET, .size = RB_SOFT_CFG_SIZE, } }; + +static void __init rb2011_init_partitions(void) +{ + u8 *addr = (u8 *) KSEG1ADDR(0x1f000000); + u32 next = RB_ROUTERBOOT_MIN_SIZE; + + if (routerboot_find_magic(addr, 0x10000, &next, true)) + printk(KERN_ERR "Warning: could not find a valid RouterBOOT hard config\n"); + rb2011_spi_partitions[0].size = next; + rb2011_spi_partitions[1].offset = next; + + next = RB_BIOS_OFFSET + RB_BIOS_SIZE; + if (routerboot_find_magic(addr, 0x10000, &next, false)) + printk(KERN_ERR "Warning: could not find a valid RouterBOOT soft config\n"); + + rb2011_spi_partitions[3].offset = next; +} + + static struct mtd_partition rb2011_nand_partitions[] = { { .name = "booter", @@ -106,7 +121,7 @@ static struct ar8327_pad_cfg rb2011_ar8327_pad0_cfg = { static struct ar8327_platform_data rb2011_ar8327_data = { .pad0_cfg = &rb2011_ar8327_pad0_cfg, - .cpuport_cfg = { + .port0_cfg = { .force_link = 1, .speed = AR8327_PORT_SPEED_1000, .duplex = 1, @@ -123,32 +138,16 @@ static struct mdio_board_info rb2011_mdio0_info[] = { }, }; -static void __init rb2011_gmac_setup(void) -{ - void __iomem *base; - u32 t; - - base = ioremap(AR934X_GMAC_BASE, AR934X_GMAC_SIZE); - - t = __raw_readl(base + AR934X_GMAC_REG_ETH_CFG); - t &= ~(AR934X_ETH_CFG_RGMII_GMAC0 | AR934X_ETH_CFG_MII_GMAC0 | - AR934X_ETH_CFG_GMII_GMAC0 | AR934X_ETH_CFG_SW_ONLY_MODE); - t |= AR934X_ETH_CFG_RGMII_GMAC0 | AR934X_ETH_CFG_SW_ONLY_MODE; - - __raw_writel(t, base + AR934X_GMAC_REG_ETH_CFG); - - iounmap(base); -} - static void __init rb2011_wlan_init(void) { - u8 *hard_cfg = (u8 *) KSEG1ADDR(0x1f000000 + RB_HARD_CFG_OFFSET); + u8 *hard_cfg = (u8 *) KSEG1ADDR(0x1f000000); u16 tag_len; u8 *tag; char *art_buf; u8 wlan_mac[ETH_ALEN]; int err; + hard_cfg += rb2011_spi_partitions[1].offset; err = routerboot_find_tag(hard_cfg, RB_HARD_CFG_SIZE, RB_ID_WLAN_DATA, &tag, &tag_len); if (err) { @@ -217,6 +216,7 @@ static void __init rb2011_nand_init(void) ath79_nfc_set_parts(rb2011_nand_partitions, ARRAY_SIZE(rb2011_nand_partitions)); ath79_nfc_set_select_chip(rb2011_nand_select_chip); + ath79_nfc_set_swap_dma(true); ath79_register_nfc(); } @@ -227,12 +227,14 @@ static void __init rb2011_gpio_init(void) static void __init rb2011_setup(void) { + rb2011_init_partitions(); rb2011_gpio_init(); ath79_register_m25p80(&rb2011_spi_flash_data); rb2011_nand_init(); - rb2011_gmac_setup(); + ath79_setup_ar934x_eth_cfg(AR934X_ETH_CFG_RGMII_GMAC0 | + AR934X_ETH_CFG_SW_ONLY_MODE); ath79_register_mdio(1, 0x0); ath79_register_mdio(0, 0x0);