diff mbox series

[PULL,03/11] sm501: Add some more unimplemented registers

Message ID 20180111045937.2119-4-david@gibson.dropbear.id.au
State New
Headers show
Series ppc-for-2.12 queue 20180111 | expand

Commit Message

David Gibson Jan. 11, 2018, 4:59 a.m. UTC
From: BALATON Zoltan <balaton@eik.bme.hu>

These are not really implemented (just return zero or default values)
but add these so guests accessing them can run.

Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
---
 hw/display/sm501.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

Comments

Peter Maydell Jan. 18, 2018, 12:01 p.m. UTC | #1
On 11 January 2018 at 04:59, David Gibson <david@gibson.dropbear.id.au> wrote:
> From: BALATON Zoltan <balaton@eik.bme.hu>
>
> These are not really implemented (just return zero or default values)
> but add these so guests accessing them can run.
>
> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
> ---
>  hw/display/sm501.c | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
>
> diff --git a/hw/display/sm501.c b/hw/display/sm501.c
> index b9b611131e..4f7dc59b25 100644
> --- a/hw/display/sm501.c
> +++ b/hw/display/sm501.c
> @@ -795,6 +795,8 @@ static uint64_t sm501_system_config_read(void *opaque, hwaddr addr,
>      case SM501_ARBTRTN_CONTROL:
>          ret = s->arbitration_control;
>          break;
> +    case SM501_COMMAND_LIST_STATUS:
> +        ret = 0x00180002; /* FIFOs are empty, everything idle */
>      case SM501_IRQ_MASK:
>          ret = s->irq_mask;
>          break;

Is this new case missing a "break;" statement? Coverity points
out that we fall through and overwrite the previous assignment
to 'ret' (CID 1385154).

thanks
-- PMM
BALATON Zoltan Jan. 19, 2018, 1:44 a.m. UTC | #2
On Thu, 18 Jan 2018, Peter Maydell wrote:
> On 11 January 2018 at 04:59, David Gibson <david@gibson.dropbear.id.au> wrote:
>> From: BALATON Zoltan <balaton@eik.bme.hu>
>>
>> These are not really implemented (just return zero or default values)
>> but add these so guests accessing them can run.
>>
>> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
>> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
>> ---
>>  hw/display/sm501.c | 17 +++++++++++++++++
>>  1 file changed, 17 insertions(+)
>>
>> diff --git a/hw/display/sm501.c b/hw/display/sm501.c
>> index b9b611131e..4f7dc59b25 100644
>> --- a/hw/display/sm501.c
>> +++ b/hw/display/sm501.c
>> @@ -795,6 +795,8 @@ static uint64_t sm501_system_config_read(void *opaque, hwaddr addr,
>>      case SM501_ARBTRTN_CONTROL:
>>          ret = s->arbitration_control;
>>          break;
>> +    case SM501_COMMAND_LIST_STATUS:
>> +        ret = 0x00180002; /* FIFOs are empty, everything idle */
>>      case SM501_IRQ_MASK:
>>          ret = s->irq_mask;
>>          break;
>
> Is this new case missing a "break;" statement? Coverity points
> out that we fall through and overwrite the previous assignment
> to 'ret' (CID 1385154).

Oops, stupid mistake. Indeed, Coverity is right, fall through is not 
intended here. Sent a patch, thank you for spotting it.

Regards,
BALATON Zoltan
diff mbox series

Patch

diff --git a/hw/display/sm501.c b/hw/display/sm501.c
index b9b611131e..4f7dc59b25 100644
--- a/hw/display/sm501.c
+++ b/hw/display/sm501.c
@@ -795,6 +795,8 @@  static uint64_t sm501_system_config_read(void *opaque, hwaddr addr,
     case SM501_ARBTRTN_CONTROL:
         ret = s->arbitration_control;
         break;
+    case SM501_COMMAND_LIST_STATUS:
+        ret = 0x00180002; /* FIFOs are empty, everything idle */
     case SM501_IRQ_MASK:
         ret = s->irq_mask;
         break;
@@ -812,6 +814,9 @@  static uint64_t sm501_system_config_read(void *opaque, hwaddr addr,
     case SM501_POWER_MODE_CONTROL:
         ret = s->power_mode_control;
         break;
+    case SM501_ENDIAN_CONTROL:
+        ret = 0; /* Only default little endian mode is supported */
+        break;
 
     default:
         printf("sm501 system config : not implemented register read."
@@ -865,6 +870,12 @@  static void sm501_system_config_write(void *opaque, hwaddr addr,
     case SM501_POWER_MODE_CONTROL:
         s->power_mode_control = value & 0x00000003;
         break;
+    case SM501_ENDIAN_CONTROL:
+        if (value & 0x00000001) {
+            printf("sm501 system config : big endian mode not implemented.\n");
+            abort();
+        }
+        break;
 
     default:
         printf("sm501 system config : not implemented register write."
@@ -924,6 +935,9 @@  static uint64_t sm501_disp_ctrl_read(void *opaque, hwaddr addr,
     case SM501_DC_PANEL_PANNING_CONTROL:
         ret = s->dc_panel_panning_control;
         break;
+    case SM501_DC_PANEL_COLOR_KEY:
+        /* Not implemented yet */
+        break;
     case SM501_DC_PANEL_FB_ADDR:
         ret = s->dc_panel_fb_addr;
         break;
@@ -1035,6 +1049,9 @@  static void sm501_disp_ctrl_write(void *opaque, hwaddr addr,
     case SM501_DC_PANEL_PANNING_CONTROL:
         s->dc_panel_panning_control = value & 0xFF3FFF3F;
         break;
+    case SM501_DC_PANEL_COLOR_KEY:
+        /* Not implemented yet */
+        break;
     case SM501_DC_PANEL_FB_ADDR:
         s->dc_panel_fb_addr = value & 0x8FFFFFF0;
         break;