aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tg3.c
diff options
context:
space:
mode:
authorMatt Carlson <mcarlson@broadcom.com>2009-09-01 09:20:17 -0400
committerDavid S. Miller <davem@davemloft.net>2009-09-02 03:44:06 -0400
commita1b950d56de3c72bea3343f54de24c43fb7dc74e (patch)
treef54f22cec072bbc17ec963ddc3e832ccf4db7bc0 /drivers/net/tg3.c
parentf6eb9b1fc1411d22c073f5264e5630a541d0f7df (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/net/tg3.c')
-rw-r--r--drivers/net/tg3.c154
1 files changed, 108 insertions, 46 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
10856static 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
10856static void __devinit tg3_get_5752_nvram_info(struct tg3 *tp) 10883static 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; 11173static 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. */