[POWERPC] PS3: Add logical performance monitor device support
Add PS3 logical performance monitor device support to the PS3 system-bus and platform device registration routines. Signed-off-by: Geoff Levand <geoffrey.levand@am.sony.com> Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
committed by
Paul Mackerras
parent
c2b16e1c10
commit
ed7570022a
@@ -31,6 +31,89 @@
|
||||
|
||||
#include "platform.h"
|
||||
|
||||
static int __init ps3_register_lpm_devices(void)
|
||||
{
|
||||
int result;
|
||||
u64 tmp1;
|
||||
u64 tmp2;
|
||||
struct ps3_system_bus_device *dev;
|
||||
|
||||
pr_debug(" -> %s:%d\n", __func__, __LINE__);
|
||||
|
||||
dev = kzalloc(sizeof(*dev), GFP_KERNEL);
|
||||
if (!dev)
|
||||
return -ENOMEM;
|
||||
|
||||
dev->match_id = PS3_MATCH_ID_LPM;
|
||||
dev->dev_type = PS3_DEVICE_TYPE_LPM;
|
||||
|
||||
/* The current lpm driver only supports a single BE processor. */
|
||||
|
||||
result = ps3_repository_read_be_node_id(0, &dev->lpm.node_id);
|
||||
|
||||
if (result) {
|
||||
pr_debug("%s:%d: ps3_repository_read_be_node_id failed \n",
|
||||
__func__, __LINE__);
|
||||
goto fail_read_repo;
|
||||
}
|
||||
|
||||
result = ps3_repository_read_lpm_privileges(dev->lpm.node_id, &tmp1,
|
||||
&dev->lpm.rights);
|
||||
|
||||
if (result) {
|
||||
pr_debug("%s:%d: ps3_repository_read_lpm_privleges failed \n",
|
||||
__func__, __LINE__);
|
||||
goto fail_read_repo;
|
||||
}
|
||||
|
||||
lv1_get_logical_partition_id(&tmp2);
|
||||
|
||||
if (tmp1 != tmp2) {
|
||||
pr_debug("%s:%d: wrong lpar\n",
|
||||
__func__, __LINE__);
|
||||
result = -ENODEV;
|
||||
goto fail_rights;
|
||||
}
|
||||
|
||||
if (!(dev->lpm.rights & PS3_LPM_RIGHTS_USE_LPM)) {
|
||||
pr_debug("%s:%d: don't have rights to use lpm\n",
|
||||
__func__, __LINE__);
|
||||
result = -EPERM;
|
||||
goto fail_rights;
|
||||
}
|
||||
|
||||
pr_debug("%s:%d: pu_id %lu, rights %lu(%lxh)\n",
|
||||
__func__, __LINE__, dev->lpm.pu_id, dev->lpm.rights,
|
||||
dev->lpm.rights);
|
||||
|
||||
result = ps3_repository_read_pu_id(0, &dev->lpm.pu_id);
|
||||
|
||||
if (result) {
|
||||
pr_debug("%s:%d: ps3_repository_read_pu_id failed \n",
|
||||
__func__, __LINE__);
|
||||
goto fail_read_repo;
|
||||
}
|
||||
|
||||
result = ps3_system_bus_device_register(dev);
|
||||
|
||||
if (result) {
|
||||
pr_debug("%s:%d ps3_system_bus_device_register failed\n",
|
||||
__func__, __LINE__);
|
||||
goto fail_register;
|
||||
}
|
||||
|
||||
pr_debug(" <- %s:%d\n", __func__, __LINE__);
|
||||
return 0;
|
||||
|
||||
|
||||
fail_register:
|
||||
fail_rights:
|
||||
fail_read_repo:
|
||||
kfree(dev);
|
||||
pr_debug(" <- %s:%d: failed\n", __func__, __LINE__);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* ps3_setup_gelic_device - Setup and register a gelic device instance.
|
||||
*
|
||||
@@ -827,6 +910,8 @@ static int __init ps3_register_devices(void)
|
||||
|
||||
ps3_register_sound_devices();
|
||||
|
||||
ps3_register_lpm_devices();
|
||||
|
||||
pr_debug(" <- %s:%d\n", __func__, __LINE__);
|
||||
return 0;
|
||||
}
|
||||
|
Reference in New Issue
Block a user