MIPS: BCM63XX: add support for BCM3368 Cable Modem
[deliverable/linux.git] / arch / mips / bcm63xx / cpu.c
index 79fe32df5e96c99da07d763e0990e07ee0321260..7e17374a9ae89fc79257b021c464c3a10d2a7f6a 100644 (file)
@@ -29,6 +29,14 @@ static u8 bcm63xx_cpu_rev;
 static unsigned int bcm63xx_cpu_freq;
 static unsigned int bcm63xx_memory_size;
 
+static const unsigned long bcm3368_regs_base[] = {
+       __GEN_CPU_REGS_TABLE(3368)
+};
+
+static const int bcm3368_irqs[] = {
+       __GEN_CPU_IRQ_TABLE(3368)
+};
+
 static const unsigned long bcm6328_regs_base[] = {
        __GEN_CPU_REGS_TABLE(6328)
 };
@@ -116,6 +124,9 @@ unsigned int bcm63xx_get_memory_size(void)
 static unsigned int detect_cpu_clock(void)
 {
        switch (bcm63xx_get_cpu_id()) {
+       case BCM3368_CPU_ID:
+               return 300000000;
+
        case BCM6328_CPU_ID:
        {
                unsigned int tmp, mips_pll_fcvo;
@@ -266,7 +277,7 @@ static unsigned int detect_memory_size(void)
                banks = (val & SDRAM_CFG_BANK_MASK) ? 2 : 1;
        }
 
-       if (BCMCPU_IS_6358() || BCMCPU_IS_6368()) {
+       if (BCMCPU_IS_3368() || BCMCPU_IS_6358() || BCMCPU_IS_6368()) {
                val = bcm_memc_readl(MEMC_CFG_REG);
                rows = (val & MEMC_CFG_ROW_MASK) >> MEMC_CFG_ROW_SHIFT;
                cols = (val & MEMC_CFG_COL_MASK) >> MEMC_CFG_COL_SHIFT;
@@ -302,10 +313,17 @@ void __init bcm63xx_cpu_init(void)
                chipid_reg = BCM_6345_PERF_BASE;
                break;
        case CPU_BMIPS4350:
-               if ((read_c0_prid() & 0xf0) == 0x10)
+               switch ((read_c0_prid() & 0xff)) {
+               case 0x04:
+                       chipid_reg = BCM_3368_PERF_BASE;
+                       break;
+               case 0x10:
                        chipid_reg = BCM_6345_PERF_BASE;
-               else
+                       break;
+               default:
                        chipid_reg = BCM_6368_PERF_BASE;
+                       break;
+               }
                break;
        }
 
@@ -322,6 +340,10 @@ void __init bcm63xx_cpu_init(void)
        bcm63xx_cpu_rev = (tmp & REV_REVID_MASK) >> REV_REVID_SHIFT;
 
        switch (bcm63xx_cpu_id) {
+       case BCM3368_CPU_ID:
+               bcm63xx_regs_base = bcm3368_regs_base;
+               bcm63xx_irqs = bcm3368_irqs;
+               break;
        case BCM6328_CPU_ID:
                bcm63xx_regs_base = bcm6328_regs_base;
                bcm63xx_irqs = bcm6328_irqs;
This page took 0.02579 seconds and 5 git commands to generate.