qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: Yoshinori Sato
Subject: Re: [PATCH RFC] hw/sh4/sh7750: Add STBCR/STBCR2 register support
Date: Thu, 19 Oct 2023 11:03:39 +0900
User-agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (Gojō) APEL-LB/10.8 EasyPG/1.0.0 Emacs/28.2 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO)

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 <geert+renesas@glider.be>
> ---
> [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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]