diff options
Diffstat (limited to 'arch/powerpc/platforms/wsp/wsp.c')
-rw-r--r-- | arch/powerpc/platforms/wsp/wsp.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/powerpc/platforms/wsp/wsp.c b/arch/powerpc/platforms/wsp/wsp.c index d25cc96c21b8..ddb6efe88914 100644 --- a/arch/powerpc/platforms/wsp/wsp.c +++ b/arch/powerpc/platforms/wsp/wsp.c | |||
@@ -89,6 +89,7 @@ void wsp_halt(void) | |||
89 | struct device_node *dn; | 89 | struct device_node *dn; |
90 | struct device_node *mine; | 90 | struct device_node *mine; |
91 | struct device_node *me; | 91 | struct device_node *me; |
92 | int rc; | ||
92 | 93 | ||
93 | me = of_get_cpu_node(smp_processor_id(), NULL); | 94 | me = of_get_cpu_node(smp_processor_id(), NULL); |
94 | mine = scom_find_parent(me); | 95 | mine = scom_find_parent(me); |
@@ -101,15 +102,15 @@ void wsp_halt(void) | |||
101 | 102 | ||
102 | /* read-modify-write it so the HW probe does not get | 103 | /* read-modify-write it so the HW probe does not get |
103 | * confused */ | 104 | * confused */ |
104 | val = scom_read(m, 0); | 105 | rc = scom_read(m, 0, &val); |
105 | val |= 1; | 106 | if (rc == 0) |
106 | scom_write(m, 0, val); | 107 | scom_write(m, 0, val | 1); |
107 | scom_unmap(m); | 108 | scom_unmap(m); |
108 | } | 109 | } |
109 | m = scom_map(mine, 0, 1); | 110 | m = scom_map(mine, 0, 1); |
110 | val = scom_read(m, 0); | 111 | rc = scom_read(m, 0, &val); |
111 | val |= 1; | 112 | if (rc == 0) |
112 | scom_write(m, 0, val); | 113 | scom_write(m, 0, val | 1); |
113 | /* should never return */ | 114 | /* should never return */ |
114 | scom_unmap(m); | 115 | scom_unmap(m); |
115 | } | 116 | } |