[ifxmips]
authorJohn Crispin <john@openwrt.org>
Fri, 6 Aug 2010 15:49:42 +0000 (15:49 +0000)
committerJohn Crispin <john@openwrt.org>
Fri, 6 Aug 2010 15:49:42 +0000 (15:49 +0000)
* remove references to gpio_dev
* make vmmc driver register its own memory and dont rely on arch code to do so
* makes any Danube board with a CFI commandset 2 NOR flash chip functional again
* fixes filenames of downloaded firmwares

thanks, Ithamar R. Adema

SVN-Revision: 22515

package/ifx-vmmc/Makefile
package/ifx-vmmc/patches-2.6.33/100-ifxmips.patch
target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/ar9/mach-easy50812.c
target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/common/devices.c
target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/common/devices.h
target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/common/prom.c
target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/mach-easy4010.c
target/linux/ifxmips/files-2.6.33/arch/mips/ifxmips/danube/mach-easy50712.c
target/linux/ifxmips/files-2.6.33/arch/mips/include/asm/mach-ifxmips/ifxmips_prom.h
target/linux/ifxmips/patches-2.6.33/200-cfi-swap.patch

index c7f1593bf1dee7e26b1b719ed64f0e1c3c8c269f..e691cd151a2ed4f467bf4f894b9e6d00635a09d8 100644 (file)
@@ -72,6 +72,7 @@ FW_DIR:=lib/firmware
 ifeq ($(CONFIG_VOICE_CPE_VMMC_WITH_DEVICE_DANUBE_extract),y)
   CONFIGURE_ARGS += --with-device=DANUBE
   FW_TARGET:=danube_firmware.bin
+  FW_SOURCE:=danube_firmware.bin
   FW_URL:=http://www.arcor.de/hilfe/files/pdf/
   FW_FILE=arcor_A800_452CPW_FW_1.02.206(20081201).bin
   FW_MD5SUM:=19d9af4e369287a0f0abaed415cdac10
@@ -82,6 +83,7 @@ endif
 
 ifeq ($(CONFIG_VOICE_CPE_VMMC_WITH_DEVICE_DANUBE),y)
   CONFIGURE_ARGS += --with-device=DANUBE
+  FW_SOURCE:=voip_R12.1.0.1.0-enc.bin
   FW_TARGET:=danube_firmware.bin
   FW_FILE=fw_voip_danube-12.1.0.1.0.tar.gz
   FW_MD5SUM:=51868b88dee9dbc65d3dbba355ded91c
@@ -152,7 +154,7 @@ endef
 define KernelPackage/ifx-vmmc/install
        $(INSTALL_DIR) $(1)/etc/init.d $(1)/$(FW_DIR)
        $(INSTALL_BIN) ./files/vmmc.init $(1)/etc/init.d/vmmc
-       $(CP) $(PKG_BUILD_DIR)/firmware/$(FW_TARGET) $(1)/$(FW_DIR)/$(FW_TARGET)
+       $(CP) $(PKG_BUILD_DIR)/firmware/$(FW_SOURCE) $(1)/$(FW_DIR)/$(FW_TARGET)
        $(CP) $(PKG_BUILD_DIR)/coef/$(COEF_TARGET) $(1)/$(FW_DIR)/$(COEF_TARGET)
 endef
 
index 6a4cc8d590afa4412f92cf37e15b177a302abae7..5d3d1c6cabc1983eec86c38d308a271f6a41e4d9 100644 (file)
     timer = TIMER1A;
 --- a/src/mps/drv_mps_vmmc_danube.c
 +++ b/src/mps/drv_mps_vmmc_danube.c
-@@ -32,9 +32,22 @@
+@@ -32,9 +32,20 @@
  #include "ifxos_select.h"
  #include "ifxos_interrupt.h"
  
 +#  include <asm/mach-ifxmips/ifxmips_irq.h>
 +#  include <asm/mach-ifxmips/ifxmips_gptu.h>
 +#  include <asm/mach-ifxmips/ifxmips_prom.h>
++#  include <linux/dma-mapping.h>
 +
 +#  define IFX_RCU_RST_REQ        IFXMIPS_RCU_RST
 +#  define IFX_RCU_RST_REQ_CPU1   IFXMIPS_RCU_RST_CPU1
-+
-+#  define ifx_get_cp1_base       prom_get_cp1_base
-+#  define ifx_get_cp1_size       prom_get_cp1_size
 +#else
 +#  include <asm/ifx/ifx_regs.h>
 +#  include <asm/ifx_vpe.h>
  
  #include "drv_mps_vmmc.h"
  #include "drv_mps_vmmc_dbg.h"
+@@ -72,6 +71,23 @@ volatile IFX_uint32_t *danube_cp1_base;
+ /* Local function definition     */
+ /* ============================= */
++#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,28))
++IFX_uint32_t ifx_get_cp1_size(IFX_void_t)
++{
++      return 2;
++}
++
++IFX_uint32_t *ifx_get_cp1_base(IFX_void_t)
++{
++      if (!danube_cp1_base) {
++              dma_addr_t dma;
++              danube_cp1_base = dma_alloc_coherent(NULL, ifx_get_cp1_size()<<20, &dma, GFP_ATOMIC);
++      }
++
++      return (IFX_uint32_t*)danube_cp1_base;
++}
++#endif
++
+ /******************************************************************************
+  * DANUBE Specific Routines
+  ******************************************************************************/
 @@ -119,6 +132,15 @@ IFX_int32_t ifx_mps_download_firmware (m
     }
  
index 0baaba37c2085c11b4fb4742c90de47f32bd76dc..3f63a5d95db6ea011863ef6aef76fd01517aa934 100644 (file)
@@ -60,9 +60,6 @@ easy50812_init(void)
 {
        ifxmips_register_gpio();
 
-       //printk("ifxmips_register_gpio_dev\n");
-       //ifxmips_register_gpio_dev();
-
        ifxmips_register_mtd(&easy50812_flash_data);
 
        ifxmips_register_leds(easy50812_leds, ARRAY_SIZE(easy50812_leds));
index dcd2346c8ef9dcfb2e0428898b04d1b7ed80b347..dade30c40f70a4df5ff0905053700406ebf087c5 100644 (file)
 #include <ifxmips.h>
 #include <ifxmips_irq.h>
 
-/* gpiodev */
-static struct platform_device ifxmips_gpio_dev =
-{
-       .name                   = "GPIODEV",
-       .num_resources  = 1,
-};
-
-void __init
-ifxmips_register_gpio_dev(void)
-{
-       platform_device_register(&ifxmips_gpio_dev);
-}
-
 /* gpio leds */
 #ifdef CONFIG_LEDS_GPIO
 static struct gpio_led_platform_data ifxmips_gpio_led_data;
index 31fac266c0e7dd3e4f0ff80d63185aac1fadea96..a3a932ccf82a7a106f382ebf710ca54deccacd5c 100644 (file)
@@ -3,7 +3,6 @@
 
 #include <ifxmips_platform.h>
 
-void __init ifxmips_register_gpio_dev(void);
 void __init ifxmips_register_gpio_leds(struct gpio_led *leds, int cnt);
 void __init ifxmips_register_leds(struct gpio_led *leds, int cnt);
 void __init ifxmips_register_mtd(struct physmap_flash_data *pdata);
index e6a4a09d771d173e2b9f8e65bb78dd38dd7b0ad5..aef002c184dcfa312e8d25e9da81168dbc378cfc 100644 (file)
@@ -9,10 +9,6 @@
 #include <ifxmips.h>
 #include <ifxmips_prom.h>
 
-/* for voice cpu (MIPS24K) */
-unsigned int *prom_cp1_base;
-unsigned int prom_cp1_size = 0;
-
 /* for Multithreading (APRP) on MIPS34K */
 unsigned long physical_memsize;
 
@@ -21,21 +17,6 @@ prom_free_prom_memory(void)
 {
 }
 
-unsigned int*
-prom_get_cp1_base(void)
-{
-       return prom_cp1_base;
-}
-EXPORT_SYMBOL(prom_get_cp1_base);
-
-unsigned int
-prom_get_cp1_size(void)
-{
-       /* return size im MB */
-       return prom_cp1_size>>20;
-}
-EXPORT_SYMBOL(prom_get_cp1_size);
-
 extern unsigned char ifxmips_ethaddr[6];
 int cmdline_mac = 0;
 
@@ -115,18 +96,6 @@ static void __init prom_init_cmdline(void)
        }
        memsize *= 1024 * 1024;
 
-       /* only on Twinpass/Danube a second CPU is used for Voice */
-       if ((cpu_data[0].cputype == CPU_24K) && (prom_cp1_size))
-       {
-#define CP1_SIZE       2 << 20
-               prom_cp1_size = CP1_SIZE;
-               memsize -= prom_cp1_size;
-               prom_cp1_base = (unsigned int *)KSEG1ADDR(memsize);
-
-               early_printf("Using %dMB Ram and reserving %dMB for cp1\n",
-                       memsize>>20, prom_cp1_size>>20);
-       }
-
        add_memory_region(0x00000000, memsize, BOOT_MEM_RAM);
 }
 
index afb0b89a83ecbae253294e9cbab127077bf48362..c18f9acb2a489cb3cca0af66eb45bcb1f9863d6e 100644 (file)
@@ -61,8 +61,6 @@ easy4010_init(void)
 {
        ifxmips_register_gpio();
 
-       ifxmips_register_gpio_dev();
-
        ifxmips_register_mtd(&easy4010_flash_data);
 
        ifxmips_register_leds(easy4010_leds, ARRAY_SIZE(easy4010_leds));
index c7ee7db7776d631ff12ad99e9cf4bc7bf896cb0e..42159027a9698d778d626fd83d9f09124f9077d5 100644 (file)
@@ -61,8 +61,6 @@ easy50712_init(void)
 {
        ifxmips_register_gpio();
 
-       ifxmips_register_gpio_dev();
-
        ifxmips_register_mtd(&easy50712_flash_data);
 
        ifxmips_register_leds(easy50712_leds, ARRAY_SIZE(easy50712_leds));
index 71012be3ce526a8146aaf5238c2b18fee4cdebd1..6e4b597cc9da34fe4439748bd78b3813106668b3 100644 (file)
@@ -19,8 +19,6 @@
 #define _IFXPROM_H__
 
 extern void early_printf(const char *fmt, ...);
-extern u32 *prom_get_cp1_base(void);
-extern u32 prom_get_cp1_size(void);
 extern int ifxmips_has_brn_block(void);
 
 #endif
index e43a1d204d214bf6a71da8d1c28705bd8c3ce398..4f40db7bce036d5242641995bef7a50c08b2fe34 100644 (file)
        case FL_WRITING:
 --- a/drivers/mtd/chips/cfi_cmdset_0002.c
 +++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -1068,7 +1068,9 @@ static int __xipram do_write_oneword(str
+@@ -39,7 +39,11 @@
+ #include <linux/mtd/xip.h>
+ #define AMD_BOOTLOC_BUG
+-#define FORCE_WORD_WRITE 0
++#ifdef CONFIG_IFXMIPS
++#  define FORCE_WORD_WRITE 1
++#else
++#  define FORCE_WORD_WRITE 0
++#endif
+ #define MAX_WORD_RETRIES 3
+@@ -1096,7 +1096,9 @@ static int __xipram do_write_oneword(str
        int retry_cnt = 0;
  
        adr += chip->start;