aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/myri10ge/myri10ge.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/myri10ge/myri10ge.c')
-rw-r--r--drivers/net/myri10ge/myri10ge.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c
index cd856d7ce9f1..c724d96fd1e5 100644
--- a/drivers/net/myri10ge/myri10ge.c
+++ b/drivers/net/myri10ge/myri10ge.c
@@ -3739,6 +3739,7 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3739 int i; 3739 int i;
3740 int status = -ENXIO; 3740 int status = -ENXIO;
3741 int dac_enabled; 3741 int dac_enabled;
3742 unsigned hdr_offset, ss_offset;
3742 3743
3743 netdev = alloc_etherdev_mq(sizeof(*mgp), MYRI10GE_MAX_SLICES); 3744 netdev = alloc_etherdev_mq(sizeof(*mgp), MYRI10GE_MAX_SLICES);
3744 if (netdev == NULL) { 3745 if (netdev == NULL) {
@@ -3806,14 +3807,6 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3806 if (mgp->mtrr >= 0) 3807 if (mgp->mtrr >= 0)
3807 mgp->wc_enabled = 1; 3808 mgp->wc_enabled = 1;
3808#endif 3809#endif
3809 /* Hack. need to get rid of these magic numbers */
3810 mgp->sram_size =
3811 2 * 1024 * 1024 - (2 * (48 * 1024) + (32 * 1024)) - 0x100;
3812 if (mgp->sram_size > mgp->board_span) {
3813 dev_err(&pdev->dev, "board span %ld bytes too small\n",
3814 mgp->board_span);
3815 goto abort_with_mtrr;
3816 }
3817 mgp->sram = ioremap_wc(mgp->iomem_base, mgp->board_span); 3810 mgp->sram = ioremap_wc(mgp->iomem_base, mgp->board_span);
3818 if (mgp->sram == NULL) { 3811 if (mgp->sram == NULL) {
3819 dev_err(&pdev->dev, "ioremap failed for %ld bytes at 0x%lx\n", 3812 dev_err(&pdev->dev, "ioremap failed for %ld bytes at 0x%lx\n",
@@ -3821,9 +3814,19 @@ static int myri10ge_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
3821 status = -ENXIO; 3814 status = -ENXIO;
3822 goto abort_with_mtrr; 3815 goto abort_with_mtrr;
3823 } 3816 }
3817 hdr_offset =
3818 ntohl(__raw_readl(mgp->sram + MCP_HEADER_PTR_OFFSET)) & 0xffffc;
3819 ss_offset = hdr_offset + offsetof(struct mcp_gen_header, string_specs);
3820 mgp->sram_size = ntohl(__raw_readl(mgp->sram + ss_offset));
3821 if (mgp->sram_size > mgp->board_span ||
3822 mgp->sram_size <= MYRI10GE_FW_OFFSET) {
3823 dev_err(&pdev->dev,
3824 "invalid sram_size %dB or board span %ldB\n",
3825 mgp->sram_size, mgp->board_span);
3826 goto abort_with_ioremap;
3827 }
3824 memcpy_fromio(mgp->eeprom_strings, 3828 memcpy_fromio(mgp->eeprom_strings,
3825 mgp->sram + mgp->sram_size - MYRI10GE_EEPROM_STRINGS_SIZE, 3829 mgp->sram + mgp->sram_size, MYRI10GE_EEPROM_STRINGS_SIZE);
3826 MYRI10GE_EEPROM_STRINGS_SIZE);
3827 memset(mgp->eeprom_strings + MYRI10GE_EEPROM_STRINGS_SIZE - 2, 0, 2); 3830 memset(mgp->eeprom_strings + MYRI10GE_EEPROM_STRINGS_SIZE - 2, 0, 2);
3828 status = myri10ge_read_mac_addr(mgp); 3831 status = myri10ge_read_mac_addr(mgp);
3829 if (status) 3832 if (status)