+Sean Anderson Hi Sagar,
On Wed, Feb 19, 2020 at 12:13 AM Sagar Shrikant Kadam <sagar.ka...@sifive.com> wrote: > > Fetch core clock frequency from prci if clock-frequency for CPU nodes > is missing in device tree, so that the cmd "#cpu detail" will show the > correct CPU frequency. > > U-Boot command "#cpu detail" is showing wrong frequency values. > This patch fixes this issue by getting the core clock set in prci driver > if clock-frequency is not added to CPU nodes in device tree. > It is tested on HiFive Unleashed A00 board. > > Signed-off-by: Sagar Shrikant Kadam <sagar.ka...@sifive.com> > Tested-by: Vincent Chen <vincent.c...@sifive.com> > --- > drivers/cpu/riscv_cpu.c | 39 ++++++++++++++++++++++++++++++++++++++- > 1 file changed, 38 insertions(+), 1 deletion(-) > > diff --git a/drivers/cpu/riscv_cpu.c b/drivers/cpu/riscv_cpu.c > index 28ad0aa..eb5491f 100644 > --- a/drivers/cpu/riscv_cpu.c > +++ b/drivers/cpu/riscv_cpu.c > @@ -9,6 +9,8 @@ > #include <errno.h> > #include <dm/device-internal.h> > #include <dm/lists.h> > +#include <clk-uclass.h> > +#include <dt-bindings/clock/sifive-fu540-prci.h> It's wrong to include a SoC specific header file in a generic driver. > > DECLARE_GLOBAL_DATA_PTR; > > @@ -25,11 +27,46 @@ static int riscv_cpu_get_desc(struct udevice *dev, char > *buf, int size) > return 0; > } > > +static ulong riscv_get_clkrate(int clk_index) > +{ > + int ret; > + struct udevice *dev; > + struct clk clk; > + ulong rate; > + > + ret = uclass_get_device_by_driver(UCLASS_CLK, > + DM_GET_DRIVER(sifive_fu540_prci), > + &dev); > + if (ret < 0) { > + pr_err("%s: Could not get device driver\n", __func__); > + return ret; > + } > + > + clk.id = clk_index; > + ret = clk_request(dev, &clk); > + if (ret < 0) { > + pr_err("%s: request to clock device failed...\n", __func__); > + return ret; > + } > + > + rate = clk_get_rate(&clk); > + > + clk_free(&clk); > + > + return rate; > +} > + > static int riscv_cpu_get_info(struct udevice *dev, struct cpu_info *info) > { > const char *mmu; > + int ret; > > - dev_read_u32(dev, "clock-frequency", (u32 *)&info->cpu_freq); > + ret = dev_read_u32(dev, "clock-frequency", (u32 *)&info->cpu_freq); > + if (ret) { > + /* if clock-frequency is missing in DT, read it from prci */ > + debug("Fetch core clk configured by prci\n"); > + info->cpu_freq = riscv_get_clkrate(PRCI_CLK_COREPLL); > + } > > mmu = dev_read_string(dev, "mmu-type"); > if (!mmu) > -- What you were trying to do in this patch, I believe the following 2 patches already did it. http://patchwork.ozlabs.org/patch/1236177/ http://patchwork.ozlabs.org/patch/1236180/ Regards, Bin