|
@@ -37,14 +37,16 @@ struct update_props_workarea {
|
|
|
#define UPDATE_DT_NODE 0x02000000
|
|
|
#define ADD_DT_NODE 0x03000000
|
|
|
|
|
|
-static int mobility_rtas_call(int token, char *buf)
|
|
|
+#define MIGRATION_SCOPE (1)
|
|
|
+
|
|
|
+static int mobility_rtas_call(int token, char *buf, s32 scope)
|
|
|
{
|
|
|
int rc;
|
|
|
|
|
|
spin_lock(&rtas_data_buf_lock);
|
|
|
|
|
|
memcpy(rtas_data_buf, buf, RTAS_DATA_BUF_SIZE);
|
|
|
- rc = rtas_call(token, 2, 1, NULL, rtas_data_buf, 1);
|
|
|
+ rc = rtas_call(token, 2, 1, NULL, rtas_data_buf, scope);
|
|
|
memcpy(buf, rtas_data_buf, RTAS_DATA_BUF_SIZE);
|
|
|
|
|
|
spin_unlock(&rtas_data_buf_lock);
|
|
@@ -123,7 +125,7 @@ static int update_dt_property(struct device_node *dn, struct property **prop,
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int update_dt_node(u32 phandle)
|
|
|
+static int update_dt_node(u32 phandle, s32 scope)
|
|
|
{
|
|
|
struct update_props_workarea *upwa;
|
|
|
struct device_node *dn;
|
|
@@ -151,7 +153,8 @@ static int update_dt_node(u32 phandle)
|
|
|
upwa->phandle = phandle;
|
|
|
|
|
|
do {
|
|
|
- rc = mobility_rtas_call(update_properties_token, rtas_buf);
|
|
|
+ rc = mobility_rtas_call(update_properties_token, rtas_buf,
|
|
|
+ scope);
|
|
|
if (rc < 0)
|
|
|
break;
|
|
|
|
|
@@ -219,7 +222,7 @@ static int add_dt_node(u32 parent_phandle, u32 drc_index)
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-static int pseries_devicetree_update(void)
|
|
|
+int pseries_devicetree_update(s32 scope)
|
|
|
{
|
|
|
char *rtas_buf;
|
|
|
u32 *data;
|
|
@@ -235,7 +238,7 @@ static int pseries_devicetree_update(void)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
do {
|
|
|
- rc = mobility_rtas_call(update_nodes_token, rtas_buf);
|
|
|
+ rc = mobility_rtas_call(update_nodes_token, rtas_buf, scope);
|
|
|
if (rc && rc != 1)
|
|
|
break;
|
|
|
|
|
@@ -256,7 +259,7 @@ static int pseries_devicetree_update(void)
|
|
|
delete_dt_node(phandle);
|
|
|
break;
|
|
|
case UPDATE_DT_NODE:
|
|
|
- update_dt_node(phandle);
|
|
|
+ update_dt_node(phandle, scope);
|
|
|
break;
|
|
|
case ADD_DT_NODE:
|
|
|
drc_index = *data++;
|
|
@@ -276,7 +279,7 @@ void post_mobility_fixup(void)
|
|
|
int rc;
|
|
|
int activate_fw_token;
|
|
|
|
|
|
- rc = pseries_devicetree_update();
|
|
|
+ rc = pseries_devicetree_update(MIGRATION_SCOPE);
|
|
|
if (rc) {
|
|
|
printk(KERN_ERR "Initial post-mobility device tree update "
|
|
|
"failed: %d\n", rc);
|
|
@@ -292,7 +295,7 @@ void post_mobility_fixup(void)
|
|
|
|
|
|
rc = rtas_call(activate_fw_token, 0, 1, NULL);
|
|
|
if (!rc) {
|
|
|
- rc = pseries_devicetree_update();
|
|
|
+ rc = pseries_devicetree_update(MIGRATION_SCOPE);
|
|
|
if (rc)
|
|
|
printk(KERN_ERR "Secondary post-mobility device tree "
|
|
|
"update failed: %d\n", rc);
|