source: trunk/target/linux/brcm63xx/patches-2.6.39/001-6345_cpu.patch @ 27880

Last change on this file since 27880 was 27880, checked in by florian, 5 years ago

[brcm63xx] improve BCM6345 support

  • runtime detect the amount of memory available
  • define EBI_BASE as MPI_BASE to get rid of chip-select specific hacks
  • fix GPIO control
File size: 3.6 KB
  • arch/mips/bcm63xx/cpu.c

    a b static unsigned int detect_memory_size(v 
    260260        unsigned int cols = 0, rows = 0, is_32bits = 0, banks = 0; 
    261261        u32 val; 
    262262 
    263         if (BCMCPU_IS_6345()) 
    264                 return (8 * 1024 * 1024); 
     263        if (BCMCPU_IS_6345()) { 
     264                val = bcm_sdram_readl(SDRAM_MBASE_REG); 
     265                return (val * 8 * 1024 * 1024); 
     266        } 
    265267 
    266268        if (BCMCPU_IS_6338() || BCMCPU_IS_6348()) { 
    267269                val = bcm_sdram_readl(SDRAM_CFG_REG); 
  • arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h

    a b  
    735735#define SDRAM_CFG_BANK_SHIFT            13 
    736736#define SDRAM_CFG_BANK_MASK             (1 << SDRAM_CFG_BANK_SHIFT) 
    737737 
     738#define SDRAM_MBASE_REG                 0xc 
     739 
    738740#define SDRAM_PRIO_REG                  0x2C 
    739741#define SDRAM_PRIO_MIPS_SHIFT           29 
    740742#define SDRAM_PRIO_MIPS_MASK            (1 << SDRAM_PRIO_MIPS_SHIFT) 
  • arch/mips/bcm63xx/boards/board_bcm963xx.c

    a b void __init board_prom_init(void) 
    698698        char cfe_version[32]; 
    699699        u32 val; 
    700700 
    701         /* read base address of boot chip select (0) 
    702          * 6345 does not have MPI but boots from standard 
    703          * MIPS Flash address */ 
    704         if (BCMCPU_IS_6345()) 
    705                 val = 0x1fc00000; 
    706         else { 
    707                 val = bcm_mpi_readl(MPI_CSBASE_REG(0)); 
    708                 val &= MPI_CSBASE_BASE_MASK; 
    709         } 
     701        /* read base address of boot chip select (0) */ 
     702        val = bcm_mpi_readl(MPI_CSBASE_REG(0)); 
     703        val &= MPI_CSBASE_BASE_MASK; 
    710704        boot_addr = (u8 *)KSEG1ADDR(val); 
    711705 
    712706        /* dump cfe version */ 
    int __init board_register_devices(void) 
    881875                bcm63xx_dsp_register(&board.dsp); 
    882876 
    883877        /* read base address of boot chip select (0) */ 
    884         if (BCMCPU_IS_6345()) 
    885                 val = 0x1fc00000; 
    886         else { 
    887                 val = bcm_mpi_readl(MPI_CSBASE_REG(0)); 
    888                 val &= MPI_CSBASE_BASE_MASK; 
    889         } 
     878        val = bcm_mpi_readl(MPI_CSBASE_REG(0)); 
     879        val &= MPI_CSBASE_BASE_MASK; 
     880 
    890881        mtd_resources[0].start = val; 
    891882        mtd_resources[0].end = 0x1FFFFFFF; 
    892883 
  • arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h

    a b enum bcm63xx_regs_set { 
    163163#define BCM_6345_ENET0_BASE             (0xfffe1800) 
    164164#define BCM_6345_ENETDMA_BASE           (0xfffe2800) 
    165165#define BCM_6345_PCMCIA_BASE            (0xfffe2028) 
    166 #define BCM_6345_MPI_BASE               (0xdeadbeef) 
     166#define BCM_6345_MPI_BASE               (0xfffe2000) 
    167167#define BCM_6345_OHCI0_BASE             (0xfffe2100) 
    168168#define BCM_6345_OHCI_PRIV_BASE         (0xfffe2200) 
    169169#define BCM_6345_USBH_PRIV_BASE         (0xdeadbeef) 
  • arch/mips/bcm63xx/gpio.c

    a b  
    44 * for more details. 
    55 * 
    66 * Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr> 
    7  * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org> 
     7 * Copyright (C) 2008-2011 Florian Fainelli <florian@openwrt.org> 
    88 */ 
    99 
    1010#include <linux/kernel.h> 
    static void bcm63xx_gpio_set(struct gpio 
    3333                BUG(); 
    3434 
    3535        if (gpio < 32) { 
    36                 reg = GPIO_DATA_LO_REG; 
     36                if (!BCMCPU_IS_6345()) 
     37                        reg = GPIO_DATA_LO_REG; 
     38                else 
     39                        reg = GPIO_DATA_HI_REG; 
    3740                mask = 1 << gpio; 
    3841                v = &gpio_out_low; 
    3942        } else { 
    static int bcm63xx_gpio_get(struct gpio_ 
    6063                BUG(); 
    6164 
    6265        if (gpio < 32) { 
    63                 reg = GPIO_DATA_LO_REG; 
     66                if (!BCMCPU_IS_6345()) 
     67                        reg = GPIO_DATA_LO_REG; 
     68                else 
     69                        reg = GPIO_DATA_HI_REG; 
    6470                mask = 1 << gpio; 
    6571        } else { 
    6672                reg = GPIO_DATA_HI_REG; 
    static struct gpio_chip bcm63xx_gpio_chi 
    125131 
    126132int __init bcm63xx_gpio_init(void) 
    127133{ 
    128         gpio_out_low = bcm_gpio_readl(GPIO_DATA_LO_REG); 
     134        if (!BCMCPU_IS_6345()) 
     135                gpio_out_low = bcm_gpio_readl(GPIO_DATA_LO_REG); 
     136        else 
     137                gpio_out_low = bcm_gpio_readl(GPIO_DATA_HI_REG); 
     138 
    129139        gpio_out_high = bcm_gpio_readl(GPIO_DATA_HI_REG); 
    130140        bcm63xx_gpio_chip.ngpio = bcm63xx_gpio_count(); 
    131141        pr_info("registering %d GPIOs\n", bcm63xx_gpio_chip.ngpio); 
Note: See TracBrowser for help on using the repository browser.