1 --- a/drivers/ssb/scan.c
2 +++ b/drivers/ssb/scan.c
3 @@ -90,6 +90,14 @@ const char *ssb_core_name(u16 coreid)
5 case SSB_DEV_ARM_7TDMI:
7 + case SSB_DEV_ETHERNET_GBIT2:
8 + return "Gigabit MAC";
9 + case SSB_DEV_MIPS_74K:
11 + case SSB_DEV_DDR_CTRLR:
12 + return "DDR1/2 memory controller";
18 @@ -148,6 +156,7 @@ static u8 chipid_to_nrcores(u16 chipid)
25 ssb_printk(KERN_ERR PFX
26 --- a/include/linux/ssb/ssb.h
27 +++ b/include/linux/ssb/ssb.h
28 @@ -166,9 +166,16 @@ struct ssb_bus_ops {
29 #define SSB_DEV_MINI_MACPHY 0x823
30 #define SSB_DEV_ARM_1176 0x824
31 #define SSB_DEV_ARM_7TDMI 0x825
32 +#define SSB_DEV_ETHERNET_GBIT2 0x82d
33 +#define SSB_DEV_MIPS_74K 0x82c
34 +#define SSB_DEV_DDR_CTRLR 0x82e
35 +#define SSB_DEV_I2S 0x834
36 +#define SSB_DEV_DEFAULT 0xfff
38 /* Vendor-ID values */
39 #define SSB_VENDOR_BROADCOM 0x4243
40 +#define SSB_VENDOR_BROADCOM2 0x04BF
41 +#define SSB_VENDOR_ARM 0x43b
43 /* Some kernel subsystems poke with dev->drvdata, so we must use the
44 * following ugly workaround to get from struct device to struct ssb_device */
45 --- a/include/linux/ssb/ssb_regs.h
46 +++ b/include/linux/ssb/ssb_regs.h
48 #define SSB_SDRAM_SWAPPED 0x10000000U /* Byteswapped Physical SDRAM */
49 #define SSB_ENUM_BASE 0x18000000U /* Enumeration space base */
50 #define SSB_ENUM_LIMIT 0x18010000U /* Enumeration space limit */
51 +#define SSB_AI_BASE 0x18100000 /* base for AI registers */
53 #define SSB_FLASH2 0x1c000000U /* Flash Region 2 (region 1 shadowed here) */
54 #define SSB_FLASH2_SZ 0x02000000U /* Size of Flash Region 2 */
56 #define SSB_EUART (SSB_EXTIF_BASE + 0x00800000)
57 #define SSB_LED (SSB_EXTIF_BASE + 0x00900000)
59 +#define SSB_EROM_ASD_SZ_BASE 0x00001000
61 /* Enumeration space constants */
62 #define SSB_CORE_SIZE 0x1000 /* Size of a core MMIO area */
63 @@ -556,5 +558,41 @@ enum {
64 #define SSB_ADM_BASE2 0xFFFF0000 /* Type2 base address for the core */
65 #define SSB_ADM_BASE2_SHIFT 16
67 +/***** EROM defines for AI type busses *****/
68 +#define SSB_EROM_VALID 1
69 +#define SSB_EROM_END 0xe
70 +#define SSB_EROM_TAG 0xe
71 +/* Adress Space Descriptor */
72 +#define SSB_EROM_ASD 0x4
73 +#define SSB_EROM_ASD_SP_MASK 0x00000f00
74 +#define SSB_EROM_ASD_SP_SHIFT 8
75 +#define SSB_EROM_ASD_ST_MASK 0x000000c0
76 +#define SSB_EROM_ASD_ST_SLAVE 0x00000000
77 +#define SSB_EROM_ASD_ST_BRIDGE 0x00000040
78 +#define SSB_EROM_ASD_ST_MWRAP 0x000000c0
79 +#define SSB_EROM_ASD_ST_SWRAP 0x00000080
80 +#define SSB_EROM_ASD_ADDR_MASK 0xfffff000
81 +#define SSB_EROM_ASD_AG32 0x00000008
82 +#define SSB_EROM_ASD_SZ_MASK 0x00000030
83 +#define SSB_EROM_ASD_SZ_SZD 0x00000030
84 +#define SSB_EROM_ASD_SZ_SHIFT 4
85 +#define SSB_EROM_CI 0
86 +#define SSB_EROM_CIA_CID_MASK 0x000fff00
87 +#define SSB_EROM_CIA_CID_SHIFT 8
88 +#define SSB_EROM_CIA_MFG_MASK 0xfff00000
89 +#define SSB_EROM_CIA_MFG_SHIFT 20
90 +#define SSB_EROM_CIB_REV_MASK 0xff000000
91 +#define SSB_EROM_CIB_REV_SHIFT 24
92 +#define SSB_EROM_CIB_NMW_MASK 0x0007c000
93 +#define SSB_EROM_CIB_NSW_MASK 0x00f80000
94 +#define SSB_EROM_CIB_NSP_MASK 0x00003e00
96 +/***** Registers of AI config space *****/
97 +#define SSB_AI_RESETCTRL 0x800 /* maybe 0x804 for big endian */
98 +#define SSB_AI_RESETCTRL_RESET 1
99 +#define SSB_AI_IOCTRL 0x408 /* maybe 0x40c for big endian */
100 +#define SSB_CF_FGC 0x0002
101 +#define SSB_CF_CLOCK_EN 0x001
102 +#define SSB_AI_oobselouta30 0x100
104 #endif /* LINUX_SSB_REGS_H_ */