aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/broadcom/bgmac-platform.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/broadcom/bgmac-platform.c')
-rw-r--r--drivers/net/ethernet/broadcom/bgmac-platform.c21
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
51static void platform_bgmac_idm_write(struct bgmac *bgmac, u16 offset, u32 value) 51static 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
56static bool platform_bgmac_clk_enabled(struct bgmac *bgmac) 56static 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,