|
@@ -371,7 +371,8 @@ static const MemoryRegionOps aspeed_ast2500_scu_ops = {
|
|
|
|
|
|
static uint32_t aspeed_scu_get_clkin(AspeedSCUState *s)
|
|
static uint32_t aspeed_scu_get_clkin(AspeedSCUState *s)
|
|
{
|
|
{
|
|
- if (s->hw_strap1 & SCU_HW_STRAP_CLK_25M_IN) {
|
|
|
|
|
|
+ if (s->hw_strap1 & SCU_HW_STRAP_CLK_25M_IN ||
|
|
|
|
+ ASPEED_SCU_GET_CLASS(s)->clkin_25Mhz) {
|
|
return 25000000;
|
|
return 25000000;
|
|
} else if (s->hw_strap1 & SCU_HW_STRAP_CLK_48M_IN) {
|
|
} else if (s->hw_strap1 & SCU_HW_STRAP_CLK_48M_IN) {
|
|
return 48000000;
|
|
return 48000000;
|
|
@@ -562,6 +563,7 @@ static void aspeed_2400_scu_class_init(ObjectClass *klass, void *data)
|
|
asc->get_apb = aspeed_2400_scu_get_apb_freq;
|
|
asc->get_apb = aspeed_2400_scu_get_apb_freq;
|
|
asc->apb_divider = 2;
|
|
asc->apb_divider = 2;
|
|
asc->nr_regs = ASPEED_SCU_NR_REGS;
|
|
asc->nr_regs = ASPEED_SCU_NR_REGS;
|
|
|
|
+ asc->clkin_25Mhz = false;
|
|
asc->ops = &aspeed_ast2400_scu_ops;
|
|
asc->ops = &aspeed_ast2400_scu_ops;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -583,6 +585,7 @@ static void aspeed_2500_scu_class_init(ObjectClass *klass, void *data)
|
|
asc->get_apb = aspeed_2400_scu_get_apb_freq;
|
|
asc->get_apb = aspeed_2400_scu_get_apb_freq;
|
|
asc->apb_divider = 4;
|
|
asc->apb_divider = 4;
|
|
asc->nr_regs = ASPEED_SCU_NR_REGS;
|
|
asc->nr_regs = ASPEED_SCU_NR_REGS;
|
|
|
|
+ asc->clkin_25Mhz = false;
|
|
asc->ops = &aspeed_ast2500_scu_ops;
|
|
asc->ops = &aspeed_ast2500_scu_ops;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -756,6 +759,7 @@ static void aspeed_2600_scu_class_init(ObjectClass *klass, void *data)
|
|
asc->get_apb = aspeed_2600_scu_get_apb_freq;
|
|
asc->get_apb = aspeed_2600_scu_get_apb_freq;
|
|
asc->apb_divider = 4;
|
|
asc->apb_divider = 4;
|
|
asc->nr_regs = ASPEED_AST2600_SCU_NR_REGS;
|
|
asc->nr_regs = ASPEED_AST2600_SCU_NR_REGS;
|
|
|
|
+ asc->clkin_25Mhz = true;
|
|
asc->ops = &aspeed_ast2600_scu_ops;
|
|
asc->ops = &aspeed_ast2600_scu_ops;
|
|
}
|
|
}
|
|
|
|
|