2 * Broadcom specific AMBA
3 * ChipCommon B Unit driver
5 * Copyright 2014, Hauke Mehrtens <hauke@hauke-m.de>
7 * Licensed under the GNU/GPL. See COPYING for details.
10 #include "bcma_private.h"
11 #include <linux/export.h>
12 #include <linux/bcma/bcma.h>
14 static bool bcma_wait_reg(struct bcma_bus
*bus
, void __iomem
*addr
, u32 mask
,
15 u32 value
, int timeout
)
17 unsigned long deadline
= jiffies
+ timeout
;
22 if ((val
& mask
) == value
)
26 } while (!time_after_eq(jiffies
, deadline
));
28 bcma_err(bus
, "Timeout waiting for register %p\n", addr
);
33 void bcma_chipco_b_mii_write(struct bcma_drv_cc_b
*ccb
, u32 offset
, u32 value
)
35 struct bcma_bus
*bus
= ccb
->core
->bus
;
37 writel(offset
, ccb
->mii
+ 0x00);
38 bcma_wait_reg(bus
, ccb
->mii
+ 0x00, 0x0100, 0x0000, 100);
39 writel(value
, ccb
->mii
+ 0x04);
40 bcma_wait_reg(bus
, ccb
->mii
+ 0x00, 0x0100, 0x0000, 100);
42 EXPORT_SYMBOL_GPL(bcma_chipco_b_mii_write
);
44 int bcma_core_chipcommon_b_init(struct bcma_drv_cc_b
*ccb
)
50 ccb
->mii
= ioremap_nocache(ccb
->core
->addr_s
[1], BCMA_CORE_SIZE
);
57 void bcma_core_chipcommon_b_free(struct bcma_drv_cc_b
*ccb
)