debugcc: skip registers with no masks defined

Provide a way to skip programming enable/mux registers (as we do for
div_reg) if the corresponding mask is zero.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
This commit is contained in:
Dmitry Baryshkov
2023-01-19 15:54:01 +02:00
committed by Bjorn Andersson
parent 360769b5fc
commit a9e76e4f1b

View File

@@ -91,10 +91,12 @@ static void mux_prepare_enable(struct debug_mux *mux, int selector)
{
uint32_t val;
val = readl(mux->base + mux->mux_reg);
val &= ~mux->mux_mask;
val |= selector << mux->mux_shift;
writel(val, mux->base + mux->mux_reg);
if (mux->mux_mask) {
val = readl(mux->base + mux->mux_reg);
val &= ~mux->mux_mask;
val |= selector << mux->mux_shift;
writel(val, mux->base + mux->mux_reg);
}
if (mux->div_mask) {
val = readl(mux->base + mux->div_reg);
@@ -110,9 +112,11 @@ void mux_enable(struct debug_mux *mux)
{
uint32_t val;
val = readl(mux->base + mux->enable_reg);
val |= mux->enable_mask;
writel(val, mux->base + mux->enable_reg);
if (mux->enable_mask) {
val = readl(mux->base + mux->enable_reg);
val |= mux->enable_mask;
writel(val, mux->base + mux->enable_reg);
}
if (mux->premeasure)
mux->premeasure(mux);
@@ -125,9 +129,11 @@ void mux_disable(struct debug_mux *mux)
if (mux->postmeasure)
mux->postmeasure(mux);
val = readl(mux->base + mux->enable_reg);
val &= ~mux->enable_mask;
writel(val, mux->base + mux->enable_reg);
if (mux->enable_mask) {
val = readl(mux->base + mux->enable_reg);
val &= ~mux->enable_mask;
writel(val, mux->base + mux->enable_reg);
}
}
static bool leaf_enabled(struct debug_mux *mux, struct debug_mux *leaf)