diff options
Diffstat (limited to 'drivers/net/ethernet/broadcom/bgmac-platform.c')
-rw-r--r-- | drivers/net/ethernet/broadcom/bgmac-platform.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/net/ethernet/broadcom/bgmac-platform.c b/drivers/net/ethernet/broadcom/bgmac-platform.c index 73aca97a96bc..d937083db9a4 100644 --- a/drivers/net/ethernet/broadcom/bgmac-platform.c +++ b/drivers/net/ethernet/broadcom/bgmac-platform.c | |||
@@ -50,11 +50,14 @@ static u32 platform_bgmac_idm_read(struct bgmac *bgmac, u16 offset) | |||
50 | 50 | ||
51 | static void platform_bgmac_idm_write(struct bgmac *bgmac, u16 offset, u32 value) | 51 | static void platform_bgmac_idm_write(struct bgmac *bgmac, u16 offset, u32 value) |
52 | { | 52 | { |
53 | return writel(value, bgmac->plat.idm_base + offset); | 53 | writel(value, bgmac->plat.idm_base + offset); |
54 | } | 54 | } |
55 | 55 | ||
56 | static bool platform_bgmac_clk_enabled(struct bgmac *bgmac) | 56 | static bool platform_bgmac_clk_enabled(struct bgmac *bgmac) |
57 | { | 57 | { |
58 | if (!bgmac->plat.idm_base) | ||
59 | return true; | ||
60 | |||
58 | if ((bgmac_idm_read(bgmac, BCMA_IOCTL) & BGMAC_CLK_EN) != BGMAC_CLK_EN) | 61 | if ((bgmac_idm_read(bgmac, BCMA_IOCTL) & BGMAC_CLK_EN) != BGMAC_CLK_EN) |
59 | return false; | 62 | return false; |
60 | if (bgmac_idm_read(bgmac, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET) | 63 | if (bgmac_idm_read(bgmac, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET) |
@@ -66,6 +69,9 @@ static void platform_bgmac_clk_enable(struct bgmac *bgmac, u32 flags) | |||
66 | { | 69 | { |
67 | u32 val; | 70 | u32 val; |
68 | 71 | ||
72 | if (!bgmac->plat.idm_base) | ||
73 | return; | ||
74 | |||
69 | /* The Reset Control register only contains a single bit to show if the | 75 | /* The Reset Control register only contains a single bit to show if the |
70 | * controller is currently in reset. Do a sanity check here, just in | 76 | * controller is currently in reset. Do a sanity check here, just in |
71 | * case the bootloader happened to leave the device in reset. | 77 | * case the bootloader happened to leave the device in reset. |
@@ -180,6 +186,7 @@ static int bgmac_probe(struct platform_device *pdev) | |||
180 | bgmac->feature_flags |= BGMAC_FEAT_CMDCFG_SR_REV4; | 186 | bgmac->feature_flags |= BGMAC_FEAT_CMDCFG_SR_REV4; |
181 | bgmac->feature_flags |= BGMAC_FEAT_TX_MASK_SETUP; | 187 | bgmac->feature_flags |= BGMAC_FEAT_TX_MASK_SETUP; |
182 | bgmac->feature_flags |= BGMAC_FEAT_RX_MASK_SETUP; | 188 | bgmac->feature_flags |= BGMAC_FEAT_RX_MASK_SETUP; |
189 | bgmac->feature_flags |= BGMAC_FEAT_IDM_MASK; | ||
183 | 190 | ||
184 | bgmac->dev = &pdev->dev; | 191 | bgmac->dev = &pdev->dev; |
185 | bgmac->dma_dev = &pdev->dev; | 192 | bgmac->dma_dev = &pdev->dev; |
@@ -207,15 +214,13 @@ static int bgmac_probe(struct platform_device *pdev) | |||
207 | return PTR_ERR(bgmac->plat.base); | 214 | return PTR_ERR(bgmac->plat.base); |
208 | 215 | ||
209 | regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "idm_base"); | 216 | regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "idm_base"); |
210 | if (!regs) { | 217 | if (regs) { |
211 | dev_err(&pdev->dev, "Unable to obtain idm resource\n"); | 218 | bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs); |
212 | return -EINVAL; | 219 | if (IS_ERR(bgmac->plat.idm_base)) |
220 | return PTR_ERR(bgmac->plat.idm_base); | ||
221 | bgmac->feature_flags &= ~BGMAC_FEAT_IDM_MASK; | ||
213 | } | 222 | } |
214 | 223 | ||
215 | bgmac->plat.idm_base = devm_ioremap_resource(&pdev->dev, regs); | ||
216 | if (IS_ERR(bgmac->plat.idm_base)) | ||
217 | return PTR_ERR(bgmac->plat.idm_base); | ||
218 | |||
219 | regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "nicpm_base"); | 224 | regs = platform_get_resource_byname(pdev, IORESOURCE_MEM, "nicpm_base"); |
220 | if (regs) { | 225 | if (regs) { |
221 | bgmac->plat.nicpm_base = devm_ioremap_resource(&pdev->dev, | 226 | bgmac->plat.nicpm_base = devm_ioremap_resource(&pdev->dev, |