Re: [PATCH RFC] hw/sh4/sh7750: Add STBCR/STBCR2 register support

Yoshinori Sato <[email protected]>
Newsgroups gmane.linux.ports.sh.devel,gmane.comp.emulators.qemu
Message-ID <[email protected]>
On Wed, 18 Oct 2023 21:40:23 +0900,
Geert Uytterhoeven wrote:
> 
> The new Linux SH7750 clock driver uses the registers for power-down
> mode control, causing a crash:
> 
>     byte read to SH7750_STBCR_A7 (0x000000001fc00004) not supported
>     Aborted (core dumped)
> 
> Fix this by adding support for the Standby Control Registers STBCR and
> STBCR2.

FRQCR is also not returning the correct value, so it needs to be fixed.
Here are my changes.
https://gitlab.com/yoshinori.sato/qemu.git

It include.
- Minimal CPG support.
- DT support
- Add target LANDISK.

> Signed-off-by: Geert Uytterhoeven <[email protected]>
> ---
> [RFC PATCH v3 12/35] drivers/clk/renesas: clk-sh7750.c SH7750/7751 CPG driver.
> https://lore.kernel.org/all/a772e1b6de89af22057d3af31cc03dcad7964fc7.1697199949.git.ysato@users.sourceforge.jp
> 
> Accesses to CLKSTP00 and CLKSTCLK00 (0xfe0a0000/0x1e0a0000 and
> 0xfe0a0008/0x1e0a0008) don't seem to cause any issues, although I can't
> see immediately where they are handled?
> 
> ---
>  hw/sh4/sh7750.c | 23 +++++++++++++++++++++--
>  1 file changed, 21 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/sh4/sh7750.c b/hw/sh4/sh7750.c
> index ebe0fd96d94ca17b..deeb83b4540bbf2b 100644
> --- a/hw/sh4/sh7750.c
> +++ b/hw/sh4/sh7750.c
> @@ -59,6 +59,9 @@ typedef struct SH7750State {
>      uint16_t bcr3;
>      uint32_t bcr4;
>      uint16_t rfcr;
> +    /* Power-Down Modes */
> +    uint8_t stbcr;
> +    uint8_t stbcr2;
>      /* PCMCIA controller */
>      uint16_t pcr;
>      /* IO ports */
> @@ -219,7 +222,13 @@ static void ignore_access(const char *kind, hwaddr addr)
>  
>  static uint32_t sh7750_mem_readb(void *opaque, hwaddr addr)
>  {
> +    SH7750State *s = opaque;
> +
>      switch (addr) {
> +    case SH7750_STBCR_A7:
> +        return s->stbcr;
> +    case SH7750_STBCR2_A7:
> +        return s->stbcr2;
>      default:
>          error_access("byte read", addr);
>          abort();
> @@ -318,14 +327,24 @@ static uint32_t sh7750_mem_readl(void *opaque, hwaddr addr)
>  static void sh7750_mem_writeb(void *opaque, hwaddr addr,
>                                uint32_t mem_value)
>  {
> +    SH7750State *s = opaque;
>  
>      if (is_in_sdrmx(addr, 2) || is_in_sdrmx(addr, 3)) {
>          ignore_access("byte write", addr);
>          return;
>      }
>  
> -    error_access("byte write", addr);
> -    abort();
> +    switch (addr) {
> +    case SH7750_STBCR_A7:
> +        s->stbcr = mem_value;
> +        return;
> +    case SH7750_STBCR2_A7:
> +        s->stbcr2 = mem_value;
> +        return;
> +    default:
> +        error_access("byte write", addr);
> +        abort();
> +    }
>  }
>  
>  static void sh7750_mem_writew(void *opaque, hwaddr addr,
> -- 
> 2.34.1
> 

-- 
Yosinori Sato
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.