Root/target/linux/lantiq/files/arch/mips/lantiq/xway/prom.c

1/*
2 * This program is free software; you can redistribute it and/or modify it
3 * under the terms of the GNU General Public License version 2 as published
4 * by the Free Software Foundation.
5 *
6 * Copyright (C) 2010 John Crispin <blogic@openwrt.org>
7 */
8
9#include <linux/export.h>
10#include <linux/clk.h>
11#include <asm/bootinfo.h>
12#include <asm/time.h>
13
14#include <lantiq_soc.h>
15
16#include "../prom.h"
17#include "devices.h"
18
19#define SOC_DANUBE "Danube"
20#define SOC_TWINPASS "Twinpass"
21#define SOC_AMAZON_SE "Amazon_SE"
22#define SOC_AR9 "AR9"
23#define SOC_GR9 "GR9"
24#define SOC_VR9 "VR9"
25
26#define PART_SHIFT 12
27#define PART_MASK 0x0FFFFFFF
28#define REV_SHIFT 28
29#define REV_MASK 0xF0000000
30
31
32void __init ltq_soc_detect(struct ltq_soc_info *i)
33{
34    i->partnum = (ltq_r32(LTQ_MPS_CHIPID) & PART_MASK) >> PART_SHIFT;
35    i->rev = (ltq_r32(LTQ_MPS_CHIPID) & REV_MASK) >> REV_SHIFT;
36    sprintf(i->rev_type, "1.%d", i->rev);
37    switch (i->partnum) {
38    case SOC_ID_DANUBE1:
39    case SOC_ID_DANUBE2:
40        i->name = SOC_DANUBE;
41        i->type = SOC_TYPE_DANUBE;
42        break;
43
44    case SOC_ID_TWINPASS:
45        i->name = SOC_TWINPASS;
46        i->type = SOC_TYPE_DANUBE;
47        break;
48
49    case SOC_ID_ARX188:
50    case SOC_ID_ARX168_1:
51    case SOC_ID_ARX168_2:
52    case SOC_ID_ARX182:
53        i->name = SOC_AR9;
54        i->type = SOC_TYPE_AR9;
55        break;
56
57    case SOC_ID_GRX188:
58    case SOC_ID_GRX168:
59        i->name = SOC_GR9;
60        i->type = SOC_TYPE_AR9;
61        break;
62
63    case SOC_ID_AMAZON_SE_1:
64    case SOC_ID_AMAZON_SE_2:
65        i->name = SOC_AMAZON_SE;
66        i->type = SOC_TYPE_AMAZON_SE;
67#ifdef CONFIG_PCI
68        panic("ase is only supported for non pci kernels");
69#endif
70        break;
71
72    case SOC_ID_VRX282:
73    case SOC_ID_VRX268:
74    case SOC_ID_VRX288:
75        i->name = SOC_VR9;
76        i->type = SOC_TYPE_VR9_1;
77        break;
78
79    case SOC_ID_GRX268:
80    case SOC_ID_GRX288:
81        i->name = SOC_GR9;
82        i->type = SOC_TYPE_VR9_1;
83        break;
84
85    case SOC_ID_VRX268_2:
86    case SOC_ID_VRX288_2:
87        i->name = SOC_VR9;
88        i->type = SOC_TYPE_VR9_2;
89        break;
90
91    case SOC_ID_GRX282_2:
92    case SOC_ID_GRX288_2:
93        i->name = SOC_GR9;
94        i->type = SOC_TYPE_VR9_2;
95
96    default:
97        unreachable();
98        break;
99    }
100}
101
102void __init ltq_soc_setup(void)
103{
104    if (ltq_is_ase())
105        ltq_register_ase_asc();
106    else
107        ltq_register_asc(1);
108    ltq_register_gpio();
109    ltq_register_wdt();
110}
111

Archive Download this file



interactive