xref: /openbmc/linux/drivers/bcma/core.c (revision 8369ae33)
18369ae33SRafał Miłecki /*
28369ae33SRafał Miłecki  * Broadcom specific AMBA
38369ae33SRafał Miłecki  * Core ops
48369ae33SRafał Miłecki  *
58369ae33SRafał Miłecki  * Licensed under the GNU/GPL. See COPYING for details.
68369ae33SRafał Miłecki  */
78369ae33SRafał Miłecki 
88369ae33SRafał Miłecki #include "bcma_private.h"
98369ae33SRafał Miłecki #include <linux/bcma/bcma.h>
108369ae33SRafał Miłecki 
118369ae33SRafał Miłecki bool bcma_core_is_enabled(struct bcma_device *core)
128369ae33SRafał Miłecki {
138369ae33SRafał Miłecki 	if ((bcma_aread32(core, BCMA_IOCTL) & (BCMA_IOCTL_CLK | BCMA_IOCTL_FGC))
148369ae33SRafał Miłecki 	    != BCMA_IOCTL_CLK)
158369ae33SRafał Miłecki 		return false;
168369ae33SRafał Miłecki 	if (bcma_aread32(core, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
178369ae33SRafał Miłecki 		return false;
188369ae33SRafał Miłecki 	return true;
198369ae33SRafał Miłecki }
208369ae33SRafał Miłecki EXPORT_SYMBOL_GPL(bcma_core_is_enabled);
218369ae33SRafał Miłecki 
228369ae33SRafał Miłecki static void bcma_core_disable(struct bcma_device *core, u32 flags)
238369ae33SRafał Miłecki {
248369ae33SRafał Miłecki 	if (bcma_aread32(core, BCMA_RESET_CTL) & BCMA_RESET_CTL_RESET)
258369ae33SRafał Miłecki 		return;
268369ae33SRafał Miłecki 
278369ae33SRafał Miłecki 	bcma_awrite32(core, BCMA_IOCTL, flags);
288369ae33SRafał Miłecki 	bcma_aread32(core, BCMA_IOCTL);
298369ae33SRafał Miłecki 	udelay(10);
308369ae33SRafał Miłecki 
318369ae33SRafał Miłecki 	bcma_awrite32(core, BCMA_RESET_CTL, BCMA_RESET_CTL_RESET);
328369ae33SRafał Miłecki 	udelay(1);
338369ae33SRafał Miłecki }
348369ae33SRafał Miłecki 
358369ae33SRafał Miłecki int bcma_core_enable(struct bcma_device *core, u32 flags)
368369ae33SRafał Miłecki {
378369ae33SRafał Miłecki 	bcma_core_disable(core, flags);
388369ae33SRafał Miłecki 
398369ae33SRafał Miłecki 	bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | BCMA_IOCTL_FGC | flags));
408369ae33SRafał Miłecki 	bcma_aread32(core, BCMA_IOCTL);
418369ae33SRafał Miłecki 
428369ae33SRafał Miłecki 	bcma_awrite32(core, BCMA_RESET_CTL, 0);
438369ae33SRafał Miłecki 	udelay(1);
448369ae33SRafał Miłecki 
458369ae33SRafał Miłecki 	bcma_awrite32(core, BCMA_IOCTL, (BCMA_IOCTL_CLK | flags));
468369ae33SRafał Miłecki 	bcma_aread32(core, BCMA_IOCTL);
478369ae33SRafał Miłecki 	udelay(1);
488369ae33SRafał Miłecki 
498369ae33SRafał Miłecki 	return 0;
508369ae33SRafał Miłecki }
518369ae33SRafał Miłecki EXPORT_SYMBOL_GPL(bcma_core_enable);
52