/** * \brief Disable a module clock derived from the PBB clock * \param module_index Index of the module clock in the PBBMASK register */ void sysclk_disable_pbb_module(uint32_t module_index) { irqflags_t flags; /* Disable the module */ sysclk_priv_disable_module(PM_CLK_GRP_PBB, module_index); /* Disable the bridge if possible */ flags = cpu_irq_save(); if (PM->PM_PBBMASK == 0) { sysclk_disable_hsb_module(SYSCLK_PBB_BRIDGE); } cpu_irq_restore(flags); }
/** * \brief Disable a module clock derived from the PBB clock * \param index Index of the module clock in the PBBMASK register */ void sysclk_disable_pbb_module(unsigned int index) { irqflags_t flags; /* Disable the module */ sysclk_priv_disable_module(AVR32_PM_CLK_GRP_PBB, index); /* Disable the bridge if possible */ flags = cpu_irq_save(); sysclk_pbb_refcount--; if (!sysclk_pbb_refcount) sysclk_disable_hsb_module(SYSCLK_PBB_BRIDGE); cpu_irq_restore(flags); }
/** * \brief Disable a module clock derived from the PBB clock * \param index Index of the module clock in the PBBMASK register */ void sysclk_disable_pbb_module(unsigned int index) { unsigned int pbus_id = 0; irqflags_t flags; /* Disable the module */ sysclk_priv_disable_module(AVR32_PM_CLK_GRP_PBB, index); /* The AES module is on PBC, others are on PBB */ if (index == SYSCLK_AES) pbus_id = 1; /* Disable the bridge if possible */ flags = cpu_irq_save(); sysclk_bus_refcount[pbus_id]--; if (!sysclk_bus_refcount[pbus_id]) sysclk_disable_hsb_module(2 + (4 * pbus_id)); cpu_irq_restore(flags); }