Hi Chao,

On Mon, May 18, 2026 at 06:13:58PM +0800, Chao Liu wrote:
> On Thu, May 14, 2026 at 01:15:25AM +0800, Kuan-Wei Chiu wrote:
> > Add a stub for the CV1800B clock controller. This is specifically
> > required for the SDHCI controller to function correctly under Linux.
> > 
> > The Linux 'sophgo,cv1800-clk' driver probes this device to determine
> > the clock tree configuration. This implementation sets the bypass
> > registers (CLK_BYP_0 and CLK_BYP_1) to 0xFFFFFFFF during reset,
> > matching the POR default state. This bypasses the PLLs and allows the
> > SDHCI and other peripherals to operate using the 25MHz reference clock.
> > 
> > Without this device, the SD card driver fails to initialize, preventing
> > the system from mounting the root filesystem from the SD card:
> > 
> > [    0.888739] Waiting for root device /dev/mmcblk0...
> > [   10.727739] mmc0: Timeout waiting for hardware cmd interrupt.
> > [   10.728042] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
> > [   10.728356] mmc0: sdhci: Sys addr:  0x00000002 | Version:  0x00002402
> > [   10.728618] mmc0: sdhci: Blk size:  0x00000000 | Blk cnt:  0x00000000
> > [   10.728919] mmc0: sdhci: Argument:  0x00000000 | Trn mode: 0x00000000
> > [   10.729271] mmc0: sdhci: Present:   0x01ff0000 | Host ctl: 0x00000001
> > [   10.729591] mmc0: sdhci: Power:     0x0000000f | Blk gap:  0x00000000
> > [   10.729903] mmc0: sdhci: Wake-up:   0x00000000 | Clock:    0x00000000
> > [   10.730223] mmc0: sdhci: Timeout:   0x00000000 | Int stat: 0x00000000
> > [   10.730537] mmc0: sdhci: Int enab:  0x00ff0083 | Sig enab: 0x00ff0083
> > [   10.730795] mmc0: sdhci: ACmd stat: 0x00000000 | Slot int: 0x00000000
> > [   10.731005] mmc0: sdhci: Caps:      0x056900b9 | Caps_1:   0x00000000
> > [   10.731211] mmc0: sdhci: Cmd:       0x00000000 | Max curr: 0x00000000
> > [   10.731415] mmc0: sdhci: Resp[0]:   0x00000000 | Resp[1]:  0x00000000
> > [   10.731636] mmc0: sdhci: Resp[2]:   0x00000000 | Resp[3]:  0x00000000
> > [   10.731851] mmc0: sdhci: Host ctl2: 0x00000000
> > [   10.732018] mmc0: sdhci: ADMA Err:  0x00000000 | ADMA Ptr: 0x00000000
> > [   10.732229] mmc0: sdhci: ============================================
> > 
> > Signed-off-by: Kuan-Wei Chiu <[email protected]>
> > ---
> >  hw/misc/Kconfig               |  3 ++
> >  hw/misc/cv1800b_clk.c         | 89 +++++++++++++++++++++++++++++++++++
> >  hw/misc/meson.build           |  1 +
> >  include/hw/misc/cv1800b_clk.h | 24 ++++++++++
> >  4 files changed, 117 insertions(+)
> >  create mode 100644 hw/misc/cv1800b_clk.c
> >  create mode 100644 include/hw/misc/cv1800b_clk.h
> > 
> > diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig
> > index 99bdf09219..42cdf771a4 100644
> > --- a/hw/misc/Kconfig
> > +++ b/hw/misc/Kconfig
> > @@ -254,4 +254,7 @@ config IOSB
> >  config XLNX_VERSAL_TRNG
> >      bool
> >  
> > +config SOPHGO_CV1800B_CLK
> > +    bool
> > +
> >  source macio/Kconfig
> > diff --git a/hw/misc/cv1800b_clk.c b/hw/misc/cv1800b_clk.c
> > new file mode 100644
> > index 0000000000..738f0910db
> > --- /dev/null
> > +++ b/hw/misc/cv1800b_clk.c
> > @@ -0,0 +1,89 @@
> > +/* SPDX-License-Identifier: GPL-2.0-or-later */
> > +/*
> > + * Sophgo CV1800B Clock Controller
> > + *
> > + * Copyright (c) 2026 Kuan-Wei Chiu <[email protected]>
> > + */
> > +
> > +#include "qemu/osdep.h"
> > +#include "qemu/log.h"
> > +#include "hw/misc/cv1800b_clk.h"
> > +
> > +#define REG_CLK_BYP_0  (0x030 / 4)
> > +#define REG_CLK_BYP_1  (0x034 / 4)
> I suggest using the REG_BYTE_WIDTH macro instead of the constant value 4
> here and elsewhere.
> 
> #define REG_BYTE_WIDTH    (4)
> #define REG_CLK_BYP_0     (0x030 / REG_BYTE_WIDTH)
> #define REG_CLK_BYP_1     (0x034 / REG_BYTE_WIDTH)
> 
> You could also use `RegisterInfo` to define these register operations, so
> we don’t have to manually define these helper macros. Since this hardware
> is relatively simple, the current implementation is acceptable as well.
> 
Noted. Thanks.
I'll make this change when I respin this patchset.

Regards,
Kuan-Wei

Reply via email to