Message ID | 20240923093016.66437-10-shentey@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | E500 Cleanup | expand |
On Mon, 23 Sep 2024, Bernhard Beschow wrote: > Populate this read-only register with some arbitrary values which avoids > U-Boot's get_clocks() to hang(). Maybe this should be a property settable by the machine as each board may have different values and it may need to use the correct value for the machine. Regards, BALATON Zoltan > Signed-off-by: Bernhard Beschow <shentey@gmail.com> > --- > hw/ppc/mpc8544_guts.c | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > > diff --git a/hw/ppc/mpc8544_guts.c b/hw/ppc/mpc8544_guts.c > index e3540b0281..6688fd44c3 100644 > --- a/hw/ppc/mpc8544_guts.c > +++ b/hw/ppc/mpc8544_guts.c > @@ -29,6 +29,12 @@ > #define MPC8544_GUTS_RSTCR_RESET 0x02 > > #define MPC8544_GUTS_ADDR_PORPLLSR 0x00 > +REG32(GUTS_PORPLLSR, 0x00) > + FIELD(GUTS_PORPLLSR, E500_1_RATIO, 16, 6) > + FIELD(GUTS_PORPLLSR, E500_0_RATIO, 16, 6) > + FIELD(GUTS_PORPLLSR, DDR_RATIO, 9, 5) > + FIELD(GUTS_PORPLLSR, PLAT_RATIO, 1, 5) > + > #define MPC8544_GUTS_ADDR_PORBMSR 0x04 > #define MPC8544_GUTS_ADDR_PORIMPSCR 0x08 > #define MPC8544_GUTS_ADDR_PORDEVSR 0x0C > @@ -75,6 +81,12 @@ static uint64_t mpc8544_guts_read(void *opaque, hwaddr addr, > > addr &= MPC8544_GUTS_MMIO_SIZE - 1; > switch (addr) { > + case MPC8544_GUTS_ADDR_PORPLLSR: > + value = FIELD_DP32(value, GUTS_PORPLLSR, E500_1_RATIO, 3); /* 3:2 */ > + value = FIELD_DP32(value, GUTS_PORPLLSR, E500_0_RATIO, 3); /* 3:2 */ > + value = FIELD_DP32(value, GUTS_PORPLLSR, DDR_RATIO, 6); /* 6:1 */ > + value = FIELD_DP32(value, GUTS_PORPLLSR, PLAT_RATIO, 4); /* 4:1 */ > + break; > case MPC8544_GUTS_ADDR_PVR: > value = env->spr[SPR_PVR]; > break; >
diff --git a/hw/ppc/mpc8544_guts.c b/hw/ppc/mpc8544_guts.c index e3540b0281..6688fd44c3 100644 --- a/hw/ppc/mpc8544_guts.c +++ b/hw/ppc/mpc8544_guts.c @@ -29,6 +29,12 @@ #define MPC8544_GUTS_RSTCR_RESET 0x02 #define MPC8544_GUTS_ADDR_PORPLLSR 0x00 +REG32(GUTS_PORPLLSR, 0x00) + FIELD(GUTS_PORPLLSR, E500_1_RATIO, 16, 6) + FIELD(GUTS_PORPLLSR, E500_0_RATIO, 16, 6) + FIELD(GUTS_PORPLLSR, DDR_RATIO, 9, 5) + FIELD(GUTS_PORPLLSR, PLAT_RATIO, 1, 5) + #define MPC8544_GUTS_ADDR_PORBMSR 0x04 #define MPC8544_GUTS_ADDR_PORIMPSCR 0x08 #define MPC8544_GUTS_ADDR_PORDEVSR 0x0C @@ -75,6 +81,12 @@ static uint64_t mpc8544_guts_read(void *opaque, hwaddr addr, addr &= MPC8544_GUTS_MMIO_SIZE - 1; switch (addr) { + case MPC8544_GUTS_ADDR_PORPLLSR: + value = FIELD_DP32(value, GUTS_PORPLLSR, E500_1_RATIO, 3); /* 3:2 */ + value = FIELD_DP32(value, GUTS_PORPLLSR, E500_0_RATIO, 3); /* 3:2 */ + value = FIELD_DP32(value, GUTS_PORPLLSR, DDR_RATIO, 6); /* 6:1 */ + value = FIELD_DP32(value, GUTS_PORPLLSR, PLAT_RATIO, 4); /* 4:1 */ + break; case MPC8544_GUTS_ADDR_PVR: value = env->spr[SPR_PVR]; break;
Populate this read-only register with some arbitrary values which avoids U-Boot's get_clocks() to hang(). Signed-off-by: Bernhard Beschow <shentey@gmail.com> --- hw/ppc/mpc8544_guts.c | 12 ++++++++++++ 1 file changed, 12 insertions(+)