Patchwork [v3] hw/arm_sysctl: Fix RESETCTL for realview-pb-a8 and -pbx-a9

login
register
mail settings
Submitter Jean-Christophe DUBOIS
Date Nov. 6, 2011, 7:14 p.m.
Message ID <1320606843-13329-1-git-send-email-jcd@tribudubois.net>
Download mbox | patch
Permalink /patch/123958/
State New
Headers show

Comments

Jean-Christophe DUBOIS - Nov. 6, 2011, 7:14 p.m.
Depending on the considered baseboard the bit used to
reset the platform is different.

Here is the list of considered Realview/Versatile platforms:

Realview/Versatile AB for ARM926EJ-S: BOARD_ID = 0x100 = BOARD_ID_PB926
http://infocenter.arm.com/help/topic/com.arm.doc.dui0225d/CACCIFGI.html

RealView Emulation Baseboard: BOARD_ID = 0x140 = BOARD_ID_EB
No reset register

RealView PB for Cortex-A8: BOARD_ID = 0x178 = BOARD_ID_PBA8
http://infocenter.arm.com/help/topic/com.arm.doc.dui0417d/BBACIGAD.html

RealView PB for Cortex-A9: BOARD_ID = 0x182 = BOARD_ID_PBX
http://infocenter.arm.com/help/topic/com.arm.doc.dui0440b/CACCHBFB.html

Motherboard Express µATX: BOARD_ID = 0x190 = BOARD_ID_VEXPRESS
No reset register

Signed-off-by: Jean-Christophe DUBOIS <jcd@tribudubois.net>
---

v3:
- change patch name to something more meaningful
- move version information after the commit message.
- remove added BOARD_ID and code for unsuported board
- remove code style fixing for unrelated code

v2:
- Add multiple boards support
- fix coding style
- Added a BOARD_ID descriptor for unsupported baseboards.

 hw/arm_sysctl.c |   27 +++++++++++++++++++++------
 1 files changed, 21 insertions(+), 6 deletions(-)
Peter Maydell - Nov. 6, 2011, 9:37 p.m.
On 6 November 2011 19:14, Jean-Christophe DUBOIS <jcd@tribudubois.net> wrote:
> Depending on the considered baseboard the bit used to
> reset the platform is different.

> Signed-off-by: Jean-Christophe DUBOIS <jcd@tribudubois.net>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

-- PMM
andrzej zaborowski - Nov. 14, 2011, 3:01 a.m.
On 6 November 2011 20:14, Jean-Christophe DUBOIS <jcd@tribudubois.net> wrote:
> Depending on the considered baseboard the bit used to
> reset the platform is different.
>
> Here is the list of considered Realview/Versatile platforms:
>
> Realview/Versatile AB for ARM926EJ-S: BOARD_ID = 0x100 = BOARD_ID_PB926
> http://infocenter.arm.com/help/topic/com.arm.doc.dui0225d/CACCIFGI.html
>
> RealView Emulation Baseboard: BOARD_ID = 0x140 = BOARD_ID_EB
> No reset register
>
> RealView PB for Cortex-A8: BOARD_ID = 0x178 = BOARD_ID_PBA8
> http://infocenter.arm.com/help/topic/com.arm.doc.dui0417d/BBACIGAD.html
>
> RealView PB for Cortex-A9: BOARD_ID = 0x182 = BOARD_ID_PBX
> http://infocenter.arm.com/help/topic/com.arm.doc.dui0440b/CACCHBFB.html
>
> Motherboard Express µATX: BOARD_ID = 0x190 = BOARD_ID_VEXPRESS
> No reset register
>
> Signed-off-by: Jean-Christophe DUBOIS <jcd@tribudubois.net>

Thanks, I applied this fix.

Cheers
Peter Maydell - Nov. 14, 2011, 8:09 a.m.
On 14 November 2011 03:01, andrzej zaborowski <balrogg@gmail.com> wrote:
> On 6 November 2011 20:14, Jean-Christophe DUBOIS <jcd@tribudubois.net> wrote:
>> Depending on the considered baseboard the bit used to
>> reset the platform is different.

> Thanks, I applied this fix.

I had this queued in my "OK but not for 1.0" list...

-- PMM

Patch

diff --git a/hw/arm_sysctl.c b/hw/arm_sysctl.c
index 17cf6f7..477fc6f 100644
--- a/hw/arm_sysctl.c
+++ b/hw/arm_sysctl.c
@@ -231,15 +231,30 @@  static void arm_sysctl_write(void *opaque, target_phys_addr_t offset,
         s->nvflags &= ~val;
         break;
     case 0x40: /* RESETCTL */
-        if (board_id(s) == BOARD_ID_VEXPRESS) {
+        switch (board_id(s)) {
+        case BOARD_ID_PB926:
+            if (s->lockval == LOCK_VALUE) {
+                s->resetlevel = val;
+                if (val & 0x100) {
+                    qemu_system_reset_request();
+                }
+            }
+            break;
+        case BOARD_ID_PBX:
+        case BOARD_ID_PBA8:
+            if (s->lockval == LOCK_VALUE) {
+                s->resetlevel = val;
+                if (val & 0x04) {
+                    qemu_system_reset_request();
+                }
+            }
+            break;
+        case BOARD_ID_VEXPRESS:
+        case BOARD_ID_EB:
+        default:
             /* reserved: RAZ/WI */
             break;
         }
-        if (s->lockval == LOCK_VALUE) {
-            s->resetlevel = val;
-            if (val & 0x100)
-                qemu_system_reset_request ();
-        }
         break;
     case 0x44: /* PCICTL */
         /* nothing to do.  */