From d8182dd59e73aa5bf2f212b015b5958727acb5f9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Mon, 7 May 2012 20:22:42 +0800 Subject: [PATCH] rk30: add vmac support --- arch/arm/mach-rk29/include/mach/board.h | 8 ------ arch/arm/mach-rk30/clock_data.c | 2 +- arch/arm/mach-rk30/common.c | 33 ++++++++++++----------- arch/arm/mach-rk30/devices.c | 36 +++++++++++++++++++++---- arch/arm/mach-rk30/include/mach/board.h | 1 + arch/arm/plat-rk/include/plat/board.h | 8 ++++++ 6 files changed, 59 insertions(+), 29 deletions(-) diff --git a/arch/arm/mach-rk29/include/mach/board.h b/arch/arm/mach-rk29/include/mach/board.h index 515b09c7f062..722f7a94e1c0 100755 --- a/arch/arm/mach-rk29/include/mach/board.h +++ b/arch/arm/mach-rk29/include/mach/board.h @@ -70,14 +70,6 @@ struct rk29_button_light_info{ int (*io_deinit)(void); }; -/*vmac*/ -struct rk29_vmac_platform_data { - int (*vmac_register_set)(void); - int (*rmii_io_init)(void); - int (*rmii_io_deinit)(void); - int (*rmii_power_control)(int enable); -}; - #define INVALID_GPIO -1 diff --git a/arch/arm/mach-rk30/clock_data.c b/arch/arm/mach-rk30/clock_data.c index e9e10049a556..8d37b035b03a 100755 --- a/arch/arm/mach-rk30/clock_data.c +++ b/arch/arm/mach-rk30/clock_data.c @@ -2637,7 +2637,7 @@ static struct clk_lookup clks[] = { CLK1(pclk_timer2), CLK(NULL, "rmii_clkin", &rmii_clkin), - CLK1(mac_pll_div), + CLK(NULL, "mac_ref_div", &clk_mac_pll_div), // compatible with rk29 CLK1(mac_ref), CLK1(mii_tx), CLK1(hsadc_pll_div), diff --git a/arch/arm/mach-rk30/common.c b/arch/arm/mach-rk30/common.c index b85115b34117..381da22b1fd0 100755 --- a/arch/arm/mach-rk30/common.c +++ b/arch/arm/mach-rk30/common.c @@ -19,24 +19,27 @@ static void __init rk30_cpu_axi_init(void) { - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x0088); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x0108); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x0188); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x0388); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x4008); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x5008); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x6008); - writel_relaxed(0xa, RK30_CPU_AXI_BUS_BASE + 0x7008); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x7088); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x7108); - writel_relaxed(0xa, RK30_CPU_AXI_BUS_BASE + 0x7188); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x7208); - writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x7288); - writel_relaxed(0x3f, RK30_CPU_AXI_BUS_BASE + 0x0014); + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x0088); // cpu0 + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x0108); // dmac1 + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x0188); // cpu1r + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x0388); // cpu1w +#ifdef CONFIG_RK29_VMAC + writel_relaxed(0xa, RK30_CPU_AXI_BUS_BASE + 0x4008); // peri +#else + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x4008); // peri +#endif + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x5008); // gpu + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x6008); // vpu + writel_relaxed(0xa, RK30_CPU_AXI_BUS_BASE + 0x7008); // lcdc0 + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x7088); // cif0 + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x7108); // ipp + writel_relaxed(0xa, RK30_CPU_AXI_BUS_BASE + 0x7188); // lcdc1 + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x7208); // cif1 + writel_relaxed(0x0, RK30_CPU_AXI_BUS_BASE + 0x7288); // rga + writel_relaxed(0x3f, RK30_CPU_AXI_BUS_BASE + 0x0014); // memory scheduler read latency dsb(); } - #define L2_LY_SP_OFF (0) #define L2_LY_SP_MSK (0x7) diff --git a/arch/arm/mach-rk30/devices.c b/arch/arm/mach-rk30/devices.c index 57937c0976d8..852ded9a79aa 100755 --- a/arch/arm/mach-rk30/devices.c +++ b/arch/arm/mach-rk30/devices.c @@ -847,7 +847,6 @@ static struct platform_device device_rga = { }; #endif -//#ifdef CONFIG_RK29_IPP static struct resource resource_ipp[] = { [0] = { .start = RK30_IPP_PHYS, @@ -867,7 +866,6 @@ static struct platform_device device_ipp = { .num_resources = ARRAY_SIZE(resource_ipp), .resource = resource_ipp, }; -//#endif #ifdef CONFIG_SND_RK29_SOC_I2S #ifdef CONFIG_SND_RK29_SOC_I2S_8CH @@ -983,6 +981,7 @@ static void __init rk30_init_i2s(void) #endif platform_device_register(&device_pcm); } + #ifdef CONFIG_USB20_OTG /*DWC_OTG*/ static struct resource usb20_otg_resource[] = { @@ -1100,7 +1099,33 @@ static void __init rk30_init_sdmmc(void) #endif } -extern int rk29sdk_wifi_bt_gpio_control_init(void); +#ifdef CONFIG_RK29_VMAC +static u64 eth_dmamask = DMA_BIT_MASK(32); +static struct resource resources_vmac[] = { + [0] = { + .start = RK30_MAC_PHYS, + .end = RK30_MAC_PHYS + RK30_MAC_SIZE - 1, + .flags = IORESOURCE_MEM, + }, + [1] = { + .start = IRQ_MAC, + .end = IRQ_MAC, + .flags = IORESOURCE_IRQ, + } +}; + +static struct platform_device device_vmac = { + .name = "rk29 vmac", + .id = 0, + .dev = { + .dma_mask = ð_dmamask, + .coherent_dma_mask = DMA_BIT_MASK(32), + .platform_data = &board_vmac_data, + }, + .num_resources = ARRAY_SIZE(resources_vmac), + .resource = resources_vmac, +}; +#endif static int __init rk30_init_devices(void) { @@ -1123,9 +1148,7 @@ static int __init rk30_init_devices(void) #ifdef CONFIG_RGA_RK30 platform_device_register(&device_rga); #endif -//#ifdef CONFIG_RK29_IPP platform_device_register(&device_ipp); -//#endif #ifdef CONFIG_LCDC0_RK30 platform_device_register(&device_lcdc0); #endif @@ -1144,6 +1167,9 @@ static int __init rk30_init_devices(void) rk_serial_debug_init(DEBUG_UART_BASE, IRQ_UART0 + CONFIG_RK_DEBUG_UART, IRQ_UART_SIGNAL, -1); #endif rk30_init_i2s(); +#ifdef CONFIG_RK29_VMAC + platform_device_register(&device_vmac); +#endif return 0; } diff --git a/arch/arm/mach-rk30/include/mach/board.h b/arch/arm/mach-rk30/include/mach/board.h index 962b856f89ee..a03686db380c 100755 --- a/arch/arm/mach-rk30/include/mach/board.h +++ b/arch/arm/mach-rk30/include/mach/board.h @@ -56,6 +56,7 @@ extern struct rk29_sdmmc_platform_data default_sdmmc0_data; extern struct rk29_sdmmc_platform_data default_sdmmc1_data; extern struct i2c_gpio_platform_data default_i2c_gpio_data; +extern struct rk29_vmac_platform_data board_vmac_data; void __init rk30_map_common_io(void); void __init rk30_init_irq(void); diff --git a/arch/arm/plat-rk/include/plat/board.h b/arch/arm/plat-rk/include/plat/board.h index 5d69a91e1932..44a502521ad5 100755 --- a/arch/arm/plat-rk/include/plat/board.h +++ b/arch/arm/plat-rk/include/plat/board.h @@ -127,6 +127,14 @@ struct rk29_gpio_expander_info { unsigned int pin_value; //GPIO_HIGH or GPIO_LOW }; +/*vmac*/ +struct rk29_vmac_platform_data { + int (*vmac_register_set)(void); + int (*rmii_io_init)(void); + int (*rmii_io_deinit)(void); + int (*rmii_power_control)(int enable); +}; + #define BOOT_MODE_NORMAL 0 #define BOOT_MODE_FACTORY2 1 #define BOOT_MODE_RECOVERY 2 -- 2.34.1