diff options
author | Matt Carlson <mcarlson@broadcom.com> | 2009-09-01 09:20:17 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-09-02 03:44:06 -0400 |
commit | a1b950d56de3c72bea3343f54de24c43fb7dc74e (patch) | |
tree | f54f22cec072bbc17ec963ddc3e832ccf4db7bc0 /drivers | |
parent | f6eb9b1fc1411d22c073f5264e5630a541d0f7df (diff) |
tg3: Add 5717 NVRAM detection routines
This patch adds NVRAM detection routines for the 5717.
Signed-off-by: Matt Carlson <mcarlson@broadcom.com>
Reviewed-by: Benjamin Li <benli@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/tg3.c | 154 | ||||
-rw-r--r-- | drivers/net/tg3.h | 23 |
2 files changed, 130 insertions, 47 deletions
diff --git a/drivers/net/tg3.c b/drivers/net/tg3.c index f8bb5b737eb8..2de1ab6278d5 100644 --- a/drivers/net/tg3.c +++ b/drivers/net/tg3.c | |||
@@ -10853,6 +10853,33 @@ static void __devinit tg3_get_nvram_info(struct tg3 *tp) | |||
10853 | } | 10853 | } |
10854 | } | 10854 | } |
10855 | 10855 | ||
10856 | static void __devinit tg3_nvram_get_pagesize(struct tg3 *tp, u32 nvmcfg1) | ||
10857 | { | ||
10858 | switch (nvmcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { | ||
10859 | case FLASH_5752PAGE_SIZE_256: | ||
10860 | tp->nvram_pagesize = 256; | ||
10861 | break; | ||
10862 | case FLASH_5752PAGE_SIZE_512: | ||
10863 | tp->nvram_pagesize = 512; | ||
10864 | break; | ||
10865 | case FLASH_5752PAGE_SIZE_1K: | ||
10866 | tp->nvram_pagesize = 1024; | ||
10867 | break; | ||
10868 | case FLASH_5752PAGE_SIZE_2K: | ||
10869 | tp->nvram_pagesize = 2048; | ||
10870 | break; | ||
10871 | case FLASH_5752PAGE_SIZE_4K: | ||
10872 | tp->nvram_pagesize = 4096; | ||
10873 | break; | ||
10874 | case FLASH_5752PAGE_SIZE_264: | ||
10875 | tp->nvram_pagesize = 264; | ||
10876 | break; | ||
10877 | case FLASH_5752PAGE_SIZE_528: | ||
10878 | tp->nvram_pagesize = 528; | ||
10879 | break; | ||
10880 | } | ||
10881 | } | ||
10882 | |||
10856 | static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp) | 10883 | static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp) |
10857 | { | 10884 | { |
10858 | u32 nvcfg1; | 10885 | u32 nvcfg1; |
@@ -10884,26 +10911,7 @@ static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp) | |||
10884 | } | 10911 | } |
10885 | 10912 | ||
10886 | if (tp->tg3_flags2 & TG3_FLG2_FLASH) { | 10913 | if (tp->tg3_flags2 & TG3_FLG2_FLASH) { |
10887 | switch (nvcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { | 10914 | tg3_nvram_get_pagesize(tp, nvcfg1); |
10888 | case FLASH_5752PAGE_SIZE_256: | ||
10889 | tp->nvram_pagesize = 256; | ||
10890 | break; | ||
10891 | case FLASH_5752PAGE_SIZE_512: | ||
10892 | tp->nvram_pagesize = 512; | ||
10893 | break; | ||
10894 | case FLASH_5752PAGE_SIZE_1K: | ||
10895 | tp->nvram_pagesize = 1024; | ||
10896 | break; | ||
10897 | case FLASH_5752PAGE_SIZE_2K: | ||
10898 | tp->nvram_pagesize = 2048; | ||
10899 | break; | ||
10900 | case FLASH_5752PAGE_SIZE_4K: | ||
10901 | tp->nvram_pagesize = 4096; | ||
10902 | break; | ||
10903 | case FLASH_5752PAGE_SIZE_264: | ||
10904 | tp->nvram_pagesize = 264; | ||
10905 | break; | ||
10906 | } | ||
10907 | } else { | 10915 | } else { |
10908 | /* For eeprom, set pagesize to maximum eeprom size */ | 10916 | /* For eeprom, set pagesize to maximum eeprom size */ |
10909 | tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; | 10917 | tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; |
@@ -11156,34 +11164,84 @@ static void __devinit tg3_get_57780_nvram_info(struct tg3 *tp) | |||
11156 | return; | 11164 | return; |
11157 | } | 11165 | } |
11158 | 11166 | ||
11159 | switch (nvcfg1 & NVRAM_CFG1_5752PAGE_SIZE_MASK) { | 11167 | tg3_nvram_get_pagesize(tp, nvcfg1); |
11160 | case FLASH_5752PAGE_SIZE_256: | 11168 | if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) |
11161 | tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS; | 11169 | tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS; |
11162 | tp->nvram_pagesize = 256; | 11170 | } |
11163 | break; | 11171 | |
11164 | case FLASH_5752PAGE_SIZE_512: | 11172 | |
11165 | tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS; | 11173 | static void __devinit tg3_get_5717_nvram_info(struct tg3 *tp) |
11166 | tp->nvram_pagesize = 512; | 11174 | { |
11167 | break; | 11175 | u32 nvcfg1; |
11168 | case FLASH_5752PAGE_SIZE_1K: | 11176 | |
11169 | tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS; | 11177 | nvcfg1 = tr32(NVRAM_CFG1); |
11170 | tp->nvram_pagesize = 1024; | 11178 | |
11171 | break; | 11179 | switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { |
11172 | case FLASH_5752PAGE_SIZE_2K: | 11180 | case FLASH_5717VENDOR_ATMEL_EEPROM: |
11173 | tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS; | 11181 | case FLASH_5717VENDOR_MICRO_EEPROM: |
11174 | tp->nvram_pagesize = 2048; | 11182 | tp->nvram_jedecnum = JEDEC_ATMEL; |
11175 | break; | 11183 | tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED; |
11176 | case FLASH_5752PAGE_SIZE_4K: | 11184 | tp->nvram_pagesize = ATMEL_AT24C512_CHIP_SIZE; |
11177 | tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS; | 11185 | |
11178 | tp->nvram_pagesize = 4096; | 11186 | nvcfg1 &= ~NVRAM_CFG1_COMPAT_BYPASS; |
11179 | break; | 11187 | tw32(NVRAM_CFG1, nvcfg1); |
11180 | case FLASH_5752PAGE_SIZE_264: | 11188 | return; |
11181 | tp->nvram_pagesize = 264; | 11189 | case FLASH_5717VENDOR_ATMEL_MDB011D: |
11190 | case FLASH_5717VENDOR_ATMEL_ADB011B: | ||
11191 | case FLASH_5717VENDOR_ATMEL_ADB011D: | ||
11192 | case FLASH_5717VENDOR_ATMEL_MDB021D: | ||
11193 | case FLASH_5717VENDOR_ATMEL_ADB021B: | ||
11194 | case FLASH_5717VENDOR_ATMEL_ADB021D: | ||
11195 | case FLASH_5717VENDOR_ATMEL_45USPT: | ||
11196 | tp->nvram_jedecnum = JEDEC_ATMEL; | ||
11197 | tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED; | ||
11198 | tp->tg3_flags2 |= TG3_FLG2_FLASH; | ||
11199 | |||
11200 | switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { | ||
11201 | case FLASH_5717VENDOR_ATMEL_MDB021D: | ||
11202 | case FLASH_5717VENDOR_ATMEL_ADB021B: | ||
11203 | case FLASH_5717VENDOR_ATMEL_ADB021D: | ||
11204 | tp->nvram_size = TG3_NVRAM_SIZE_256KB; | ||
11205 | break; | ||
11206 | default: | ||
11207 | tp->nvram_size = TG3_NVRAM_SIZE_128KB; | ||
11208 | break; | ||
11209 | } | ||
11182 | break; | 11210 | break; |
11183 | case FLASH_5752PAGE_SIZE_528: | 11211 | case FLASH_5717VENDOR_ST_M_M25PE10: |
11184 | tp->nvram_pagesize = 528; | 11212 | case FLASH_5717VENDOR_ST_A_M25PE10: |
11213 | case FLASH_5717VENDOR_ST_M_M45PE10: | ||
11214 | case FLASH_5717VENDOR_ST_A_M45PE10: | ||
11215 | case FLASH_5717VENDOR_ST_M_M25PE20: | ||
11216 | case FLASH_5717VENDOR_ST_A_M25PE20: | ||
11217 | case FLASH_5717VENDOR_ST_M_M45PE20: | ||
11218 | case FLASH_5717VENDOR_ST_A_M45PE20: | ||
11219 | case FLASH_5717VENDOR_ST_25USPT: | ||
11220 | case FLASH_5717VENDOR_ST_45USPT: | ||
11221 | tp->nvram_jedecnum = JEDEC_ST; | ||
11222 | tp->tg3_flags |= TG3_FLAG_NVRAM_BUFFERED; | ||
11223 | tp->tg3_flags2 |= TG3_FLG2_FLASH; | ||
11224 | |||
11225 | switch (nvcfg1 & NVRAM_CFG1_5752VENDOR_MASK) { | ||
11226 | case FLASH_5717VENDOR_ST_M_M25PE20: | ||
11227 | case FLASH_5717VENDOR_ST_A_M25PE20: | ||
11228 | case FLASH_5717VENDOR_ST_M_M45PE20: | ||
11229 | case FLASH_5717VENDOR_ST_A_M45PE20: | ||
11230 | tp->nvram_size = TG3_NVRAM_SIZE_256KB; | ||
11231 | break; | ||
11232 | default: | ||
11233 | tp->nvram_size = TG3_NVRAM_SIZE_128KB; | ||
11234 | break; | ||
11235 | } | ||
11185 | break; | 11236 | break; |
11237 | default: | ||
11238 | tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM; | ||
11239 | return; | ||
11186 | } | 11240 | } |
11241 | |||
11242 | tg3_nvram_get_pagesize(tp, nvcfg1); | ||
11243 | if (tp->nvram_pagesize != 264 && tp->nvram_pagesize != 528) | ||
11244 | tp->tg3_flags3 |= TG3_FLG3_NO_NVRAM_ADDR_TRANS; | ||
11187 | } | 11245 | } |
11188 | 11246 | ||
11189 | /* Chips other than 5700/5701 use the NVRAM for fetching info. */ | 11247 | /* Chips other than 5700/5701 use the NVRAM for fetching info. */ |
@@ -11228,6 +11286,8 @@ static void __devinit tg3_nvram_init(struct tg3 *tp) | |||
11228 | tg3_get_5906_nvram_info(tp); | 11286 | tg3_get_5906_nvram_info(tp); |
11229 | else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) | 11287 | else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_57780) |
11230 | tg3_get_57780_nvram_info(tp); | 11288 | tg3_get_57780_nvram_info(tp); |
11289 | else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) | ||
11290 | tg3_get_5717_nvram_info(tp); | ||
11231 | else | 11291 | else |
11232 | tg3_get_nvram_info(tp); | 11292 | tg3_get_nvram_info(tp); |
11233 | 11293 | ||
@@ -13074,8 +13134,10 @@ static int __devinit tg3_get_device_address(struct tg3 *tp) | |||
13074 | tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); | 13134 | tw32_f(NVRAM_CMD, NVRAM_CMD_RESET); |
13075 | else | 13135 | else |
13076 | tg3_nvram_unlock(tp); | 13136 | tg3_nvram_unlock(tp); |
13077 | } | 13137 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5717) { |
13078 | if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) | 13138 | if (tr32(TG3_CPMU_STATUS) & TG3_CPMU_STATUS_PCIE_FUNC) |
13139 | mac_offset = 0xcc; | ||
13140 | } else if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) | ||
13079 | mac_offset = 0x10; | 13141 | mac_offset = 0x10; |
13080 | 13142 | ||
13081 | /* First try to get it from MAC address mailbox. */ | 13143 | /* First try to get it from MAC address mailbox. */ |
diff --git a/drivers/net/tg3.h b/drivers/net/tg3.h index 5994476a2508..ea57a3a4372c 100644 --- a/drivers/net/tg3.h +++ b/drivers/net/tg3.h | |||
@@ -1027,8 +1027,10 @@ | |||
1027 | #define TG3_CPMU_HST_ACC 0x0000361c | 1027 | #define TG3_CPMU_HST_ACC 0x0000361c |
1028 | #define CPMU_HST_ACC_MACCLK_MASK 0x001f0000 | 1028 | #define CPMU_HST_ACC_MACCLK_MASK 0x001f0000 |
1029 | #define CPMU_HST_ACC_MACCLK_6_25 0x00130000 | 1029 | #define CPMU_HST_ACC_MACCLK_6_25 0x00130000 |
1030 | /* 0x3620 --> 0x3630 unused */ | 1030 | /* 0x3620 --> 0x362c unused */ |
1031 | 1031 | ||
1032 | #define TG3_CPMU_STATUS 0x0000362c | ||
1033 | #define TG3_CPMU_STATUS_PCIE_FUNC 0x20000000 | ||
1032 | #define TG3_CPMU_CLCK_STAT 0x00003630 | 1034 | #define TG3_CPMU_CLCK_STAT 0x00003630 |
1033 | #define CPMU_CLCK_STAT_MAC_CLCK_MASK 0x001f0000 | 1035 | #define CPMU_CLCK_STAT_MAC_CLCK_MASK 0x001f0000 |
1034 | #define CPMU_CLCK_STAT_MAC_CLCK_62_5 0x00000000 | 1036 | #define CPMU_CLCK_STAT_MAC_CLCK_62_5 0x00000000 |
@@ -1692,6 +1694,25 @@ | |||
1692 | #define FLASH_57780VENDOR_ATMEL_AT45DB021B 0x03400002 | 1694 | #define FLASH_57780VENDOR_ATMEL_AT45DB021B 0x03400002 |
1693 | #define FLASH_57780VENDOR_ATMEL_AT45DB041D 0x00400001 | 1695 | #define FLASH_57780VENDOR_ATMEL_AT45DB041D 0x00400001 |
1694 | #define FLASH_57780VENDOR_ATMEL_AT45DB041B 0x03400001 | 1696 | #define FLASH_57780VENDOR_ATMEL_AT45DB041B 0x03400001 |
1697 | #define FLASH_5717VENDOR_ATMEL_EEPROM 0x02000001 | ||
1698 | #define FLASH_5717VENDOR_MICRO_EEPROM 0x02000003 | ||
1699 | #define FLASH_5717VENDOR_ATMEL_MDB011D 0x01000001 | ||
1700 | #define FLASH_5717VENDOR_ATMEL_MDB021D 0x01000003 | ||
1701 | #define FLASH_5717VENDOR_ST_M_M25PE10 0x02000000 | ||
1702 | #define FLASH_5717VENDOR_ST_M_M25PE20 0x02000002 | ||
1703 | #define FLASH_5717VENDOR_ST_M_M45PE10 0x00000001 | ||
1704 | #define FLASH_5717VENDOR_ST_M_M45PE20 0x00000003 | ||
1705 | #define FLASH_5717VENDOR_ATMEL_ADB011B 0x01400000 | ||
1706 | #define FLASH_5717VENDOR_ATMEL_ADB021B 0x01400002 | ||
1707 | #define FLASH_5717VENDOR_ATMEL_ADB011D 0x01400001 | ||
1708 | #define FLASH_5717VENDOR_ATMEL_ADB021D 0x01400003 | ||
1709 | #define FLASH_5717VENDOR_ST_A_M25PE10 0x02400000 | ||
1710 | #define FLASH_5717VENDOR_ST_A_M25PE20 0x02400002 | ||
1711 | #define FLASH_5717VENDOR_ST_A_M45PE10 0x02400001 | ||
1712 | #define FLASH_5717VENDOR_ST_A_M45PE20 0x02400003 | ||
1713 | #define FLASH_5717VENDOR_ATMEL_45USPT 0x03400000 | ||
1714 | #define FLASH_5717VENDOR_ST_25USPT 0x03400002 | ||
1715 | #define FLASH_5717VENDOR_ST_45USPT 0x03400001 | ||
1695 | #define NVRAM_CFG1_5752PAGE_SIZE_MASK 0x70000000 | 1716 | #define NVRAM_CFG1_5752PAGE_SIZE_MASK 0x70000000 |
1696 | #define FLASH_5752PAGE_SIZE_256 0x00000000 | 1717 | #define FLASH_5752PAGE_SIZE_256 0x00000000 |
1697 | #define FLASH_5752PAGE_SIZE_512 0x10000000 | 1718 | #define FLASH_5752PAGE_SIZE_512 0x10000000 |