Commit 059e4938 authored by Masakazu Mokuno's avatar Masakazu Mokuno Committed by Benjamin Herrenschmidt

powerpc/ps3: Add a sub-match id to ps3_system_bus

Add sub match id for ps3 system bus so that two different system bus
devices can be connected to a shared device.
Signed-off-by: default avatarMasakazu Mokuno <mokuno@sm.sony.co.jp>
Signed-off-by: default avatarGeoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 6e5f1537
...@@ -486,6 +486,7 @@ static int __init ps3_register_graphics_devices(void) ...@@ -486,6 +486,7 @@ static int __init ps3_register_graphics_devices(void)
return -ENOMEM; return -ENOMEM;
p->dev.match_id = PS3_MATCH_ID_GRAPHICS; p->dev.match_id = PS3_MATCH_ID_GRAPHICS;
p->dev.match_sub_id = PS3_MATCH_SUB_ID_FB;
p->dev.dev_type = PS3_DEVICE_TYPE_IOC0; p->dev.dev_type = PS3_DEVICE_TYPE_IOC0;
result = ps3_system_bus_device_register(&p->dev); result = ps3_system_bus_device_register(&p->dev);
......
...@@ -347,16 +347,23 @@ static int ps3_system_bus_match(struct device *_dev, ...@@ -347,16 +347,23 @@ static int ps3_system_bus_match(struct device *_dev,
struct ps3_system_bus_driver *drv = ps3_drv_to_system_bus_drv(_drv); struct ps3_system_bus_driver *drv = ps3_drv_to_system_bus_drv(_drv);
struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
result = dev->match_id == drv->match_id; if (!dev->match_sub_id)
result = dev->match_id == drv->match_id;
else
result = dev->match_sub_id == drv->match_sub_id &&
dev->match_id == drv->match_id;
if (result) if (result)
pr_info("%s:%d: dev=%u(%s), drv=%u(%s): match\n", __func__, pr_info("%s:%d: dev=%u.%u(%s), drv=%u.%u(%s): match\n",
__LINE__, dev->match_id, dev->core.bus_id, __func__, __LINE__,
drv->match_id, drv->core.name); dev->match_id, dev->match_sub_id, dev->core.bus_id,
drv->match_id, drv->match_sub_id, drv->core.name);
else else
pr_debug("%s:%d: dev=%u(%s), drv=%u(%s): miss\n", __func__, pr_debug("%s:%d: dev=%u.%u(%s), drv=%u.%u(%s): miss\n",
__LINE__, dev->match_id, dev->core.bus_id, __func__, __LINE__,
drv->match_id, drv->core.name); dev->match_id, dev->match_sub_id, dev->core.bus_id,
drv->match_id, drv->match_sub_id, drv->core.name);
return result; return result;
} }
......
...@@ -1297,6 +1297,7 @@ static int ps3fb_shutdown(struct ps3_system_bus_device *dev) ...@@ -1297,6 +1297,7 @@ static int ps3fb_shutdown(struct ps3_system_bus_device *dev)
static struct ps3_system_bus_driver ps3fb_driver = { static struct ps3_system_bus_driver ps3fb_driver = {
.match_id = PS3_MATCH_ID_GRAPHICS, .match_id = PS3_MATCH_ID_GRAPHICS,
.match_sub_id = PS3_MATCH_SUB_ID_FB,
.core.name = DEVICE_NAME, .core.name = DEVICE_NAME,
.core.owner = THIS_MODULE, .core.owner = THIS_MODULE,
.probe = ps3fb_probe, .probe = ps3fb_probe,
......
...@@ -337,12 +337,18 @@ enum ps3_system_bus_device_type { ...@@ -337,12 +337,18 @@ enum ps3_system_bus_device_type {
PS3_DEVICE_TYPE_LPM, PS3_DEVICE_TYPE_LPM,
}; };
enum ps3_match_sub_id {
/* for PS3_MATCH_ID_GRAPHICS */
PS3_MATCH_SUB_ID_FB = 1,
};
/** /**
* struct ps3_system_bus_device - a device on the system bus * struct ps3_system_bus_device - a device on the system bus
*/ */
struct ps3_system_bus_device { struct ps3_system_bus_device {
enum ps3_match_id match_id; enum ps3_match_id match_id;
enum ps3_match_sub_id match_sub_id;
enum ps3_system_bus_device_type dev_type; enum ps3_system_bus_device_type dev_type;
u64 bus_id; /* SB */ u64 bus_id; /* SB */
...@@ -371,6 +377,7 @@ int ps3_close_hv_device(struct ps3_system_bus_device *dev); ...@@ -371,6 +377,7 @@ int ps3_close_hv_device(struct ps3_system_bus_device *dev);
struct ps3_system_bus_driver { struct ps3_system_bus_driver {
enum ps3_match_id match_id; enum ps3_match_id match_id;
enum ps3_match_sub_id match_sub_id;
struct device_driver core; struct device_driver core;
int (*probe)(struct ps3_system_bus_device *); int (*probe)(struct ps3_system_bus_device *);
int (*remove)(struct ps3_system_bus_device *); int (*remove)(struct ps3_system_bus_device *);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment