* [RESEND 1/3] drm/mst: switch to guid_t type for GUID
@ 2024-08-12 12:23 Jani Nikula
2024-08-12 12:23 ` [RESEND 2/3] drm/mst: switch to guid_gen() to generate valid GUIDs Jani Nikula
` (2 more replies)
0 siblings, 3 replies; 14+ messages in thread
From: Jani Nikula @ 2024-08-12 12:23 UTC (permalink / raw)
To: dri-devel, amd-gfx; +Cc: intel-gfx, jani.nikula
The kernel has a guid_t type for GUIDs. Switch to using it, but avoid
any functional changes here.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
drivers/gpu/drm/display/drm_dp_mst_topology.c | 67 +++++++++++--------
include/drm/display/drm_dp_mst_helper.h | 12 ++--
3 files changed, 45 insertions(+), 36 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 7e7929f24ae4..72c10fc2c890 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -2610,7 +2610,7 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
}
}
- memcpy(mgr->mst_primary->guid, guid, 16);
+ import_guid(&mgr->mst_primary->guid, guid);
out_fail:
mutex_unlock(&mgr->lock);
diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index 379a449a28a2..39f1dc45004e 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -89,7 +89,7 @@ static int drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr,
struct drm_dp_mst_branch *mstb,
struct drm_dp_mst_port *port);
static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
- u8 *guid);
+ guid_t *guid);
static int drm_dp_mst_register_i2c_bus(struct drm_dp_mst_port *port);
static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_mst_port *port);
@@ -801,7 +801,7 @@ static bool drm_dp_sideband_parse_link_address(const struct drm_dp_mst_topology_
int idx = 1;
int i;
- memcpy(repmsg->u.link_addr.guid, &raw->msg[idx], 16);
+ import_guid(&repmsg->u.link_addr.guid, &raw->msg[idx]);
idx += 16;
repmsg->u.link_addr.nports = raw->msg[idx] & 0xf;
idx++;
@@ -829,7 +829,7 @@ static bool drm_dp_sideband_parse_link_address(const struct drm_dp_mst_topology_
idx++;
if (idx > raw->curlen)
goto fail_len;
- memcpy(repmsg->u.link_addr.ports[i].peer_guid, &raw->msg[idx], 16);
+ import_guid(&repmsg->u.link_addr.ports[i].peer_guid, &raw->msg[idx]);
idx += 16;
if (idx > raw->curlen)
goto fail_len;
@@ -1029,7 +1029,7 @@ static bool drm_dp_sideband_parse_reply(const struct drm_dp_mst_topology_mgr *mg
msg->req_type = (raw->msg[0] & 0x7f);
if (msg->reply_type == DP_SIDEBAND_REPLY_NAK) {
- memcpy(msg->u.nak.guid, &raw->msg[1], 16);
+ import_guid(&msg->u.nak.guid, &raw->msg[1]);
msg->u.nak.reason = raw->msg[17];
msg->u.nak.nak_data = raw->msg[18];
return false;
@@ -1078,7 +1078,7 @@ drm_dp_sideband_parse_connection_status_notify(const struct drm_dp_mst_topology_
if (idx > raw->curlen)
goto fail_len;
- memcpy(msg->u.conn_stat.guid, &raw->msg[idx], 16);
+ import_guid(&msg->u.conn_stat.guid, &raw->msg[idx]);
idx += 16;
if (idx > raw->curlen)
goto fail_len;
@@ -1107,7 +1107,7 @@ static bool drm_dp_sideband_parse_resource_status_notify(const struct drm_dp_mst
if (idx > raw->curlen)
goto fail_len;
- memcpy(msg->u.resource_stat.guid, &raw->msg[idx], 16);
+ import_guid(&msg->u.resource_stat.guid, &raw->msg[idx]);
idx += 16;
if (idx > raw->curlen)
goto fail_len;
@@ -2174,20 +2174,24 @@ ssize_t drm_dp_mst_dpcd_write(struct drm_dp_aux *aux,
offset, size, buffer);
}
-static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, u8 *guid)
+static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, guid_t *guid)
{
int ret = 0;
- memcpy(mstb->guid, guid, 16);
+ guid_copy(&mstb->guid, guid);
+
+ if (!drm_dp_validate_guid(mstb->mgr, &mstb->guid)) {
+ u8 buf[UUID_SIZE];
+
+ export_guid(buf, &mstb->guid);
- if (!drm_dp_validate_guid(mstb->mgr, mstb->guid)) {
if (mstb->port_parent) {
ret = drm_dp_send_dpcd_write(mstb->mgr,
mstb->port_parent,
- DP_GUID, 16, mstb->guid);
+ DP_GUID, sizeof(buf), buf);
} else {
ret = drm_dp_dpcd_write(mstb->mgr->aux,
- DP_GUID, mstb->guid, 16);
+ DP_GUID, buf, sizeof(buf));
}
}
@@ -2567,9 +2571,9 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
return mstb;
}
-static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper(
- struct drm_dp_mst_branch *mstb,
- const uint8_t *guid)
+static struct drm_dp_mst_branch *
+get_mst_branch_device_by_guid_helper(struct drm_dp_mst_branch *mstb,
+ const guid_t *guid)
{
struct drm_dp_mst_branch *found_mstb;
struct drm_dp_mst_port *port;
@@ -2577,10 +2581,9 @@ static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper(
if (!mstb)
return NULL;
- if (memcmp(mstb->guid, guid, 16) == 0)
+ if (guid_equal(&mstb->guid, guid))
return mstb;
-
list_for_each_entry(port, &mstb->ports, next) {
found_mstb = get_mst_branch_device_by_guid_helper(port->mstb, guid);
@@ -2593,7 +2596,7 @@ static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper(
static struct drm_dp_mst_branch *
drm_dp_get_mst_branch_device_by_guid(struct drm_dp_mst_topology_mgr *mgr,
- const uint8_t *guid)
+ const guid_t *guid)
{
struct drm_dp_mst_branch *mstb;
int ret;
@@ -2695,17 +2698,20 @@ static void drm_dp_mst_queue_probe_work(struct drm_dp_mst_topology_mgr *mgr)
}
static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
- u8 *guid)
+ guid_t *guid)
{
u64 salt;
+ u8 buf[UUID_SIZE];
- if (memchr_inv(guid, 0, 16))
+ if (!guid_is_null(guid))
return true;
salt = get_jiffies_64();
- memcpy(&guid[0], &salt, sizeof(u64));
- memcpy(&guid[8], &salt, sizeof(u64));
+ memcpy(&buf[0], &salt, sizeof(u64));
+ memcpy(&buf[8], &salt, sizeof(u64));
+
+ import_guid(guid, buf);
return false;
}
@@ -2945,7 +2951,7 @@ static int drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
drm_dbg_kms(mgr->dev, "link address reply: %d\n", reply->nports);
drm_dp_dump_link_address(mgr, reply);
- ret = drm_dp_check_mstb_guid(mstb, reply->guid);
+ ret = drm_dp_check_mstb_guid(mstb, &reply->guid);
if (ret) {
char buf[64];
@@ -3799,8 +3805,9 @@ EXPORT_SYMBOL(drm_dp_mst_topology_mgr_suspend);
int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr,
bool sync)
{
+ u8 buf[UUID_SIZE];
+ guid_t guid;
int ret;
- u8 guid[16];
mutex_lock(&mgr->lock);
if (!mgr->mst_primary)
@@ -3821,13 +3828,15 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr,
}
/* Some hubs forget their guids after they resume */
- ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
- if (ret != 16) {
+ ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
+ if (ret != sizeof(buf)) {
drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
goto out_fail;
}
- ret = drm_dp_check_mstb_guid(mgr->mst_primary, guid);
+ import_guid(&guid, buf);
+
+ ret = drm_dp_check_mstb_guid(mgr->mst_primary, &guid);
if (ret) {
drm_dbg_kms(mgr->dev, "check mstb failed - undocked during suspend?\n");
goto out_fail;
@@ -4005,12 +4014,12 @@ drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
bool hotplug = false, dowork = false;
if (hdr->broadcast) {
- const u8 *guid = NULL;
+ const guid_t *guid = NULL;
if (msg->req_type == DP_CONNECTION_STATUS_NOTIFY)
- guid = msg->u.conn_stat.guid;
+ guid = &msg->u.conn_stat.guid;
else if (msg->req_type == DP_RESOURCE_STATUS_NOTIFY)
- guid = msg->u.resource_stat.guid;
+ guid = &msg->u.resource_stat.guid;
if (guid)
mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid);
diff --git a/include/drm/display/drm_dp_mst_helper.h b/include/drm/display/drm_dp_mst_helper.h
index 02b037d3a93f..f6a1cbb0f600 100644
--- a/include/drm/display/drm_dp_mst_helper.h
+++ b/include/drm/display/drm_dp_mst_helper.h
@@ -244,18 +244,18 @@ struct drm_dp_mst_branch {
bool link_address_sent;
/* global unique identifier to identify branch devices */
- u8 guid[16];
+ guid_t guid;
};
struct drm_dp_nak_reply {
- u8 guid[16];
+ guid_t guid;
u8 reason;
u8 nak_data;
};
struct drm_dp_link_address_ack_reply {
- u8 guid[16];
+ guid_t guid;
u8 nports;
struct drm_dp_link_addr_reply_port {
bool input_port;
@@ -265,7 +265,7 @@ struct drm_dp_link_address_ack_reply {
bool ddps;
bool legacy_device_plug_status;
u8 dpcd_revision;
- u8 peer_guid[16];
+ guid_t peer_guid;
u8 num_sdp_streams;
u8 num_sdp_stream_sinks;
} ports[16];
@@ -348,7 +348,7 @@ struct drm_dp_allocate_payload_ack_reply {
};
struct drm_dp_connection_status_notify {
- u8 guid[16];
+ guid_t guid;
u8 port_number;
bool legacy_device_plug_status;
bool displayport_device_plug_status;
@@ -425,7 +425,7 @@ struct drm_dp_query_payload {
struct drm_dp_resource_status_notify {
u8 port_number;
- u8 guid[16];
+ guid_t guid;
u16 available_pbn;
};
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [RESEND 2/3] drm/mst: switch to guid_gen() to generate valid GUIDs
2024-08-12 12:23 [RESEND 1/3] drm/mst: switch to guid_t type for GUID Jani Nikula
@ 2024-08-12 12:23 ` Jani Nikula
2024-08-28 13:16 ` Daniel Vetter
2024-08-12 12:23 ` [RESEND 3/3] drm/amd/display: " Jani Nikula
2024-08-28 13:00 ` [RESEND 1/3] drm/mst: switch to guid_t type for GUID Daniel Vetter
2 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2024-08-12 12:23 UTC (permalink / raw)
To: dri-devel, amd-gfx; +Cc: intel-gfx, jani.nikula
Instead of just smashing jiffies into a GUID, use guid_gen() to generate
RFC 4122 compliant GUIDs.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
drivers/gpu/drm/display/drm_dp_mst_topology.c | 10 +---------
1 file changed, 1 insertion(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
index 39f1dc45004e..38a9a1441e62 100644
--- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
+++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
@@ -2700,18 +2700,10 @@ static void drm_dp_mst_queue_probe_work(struct drm_dp_mst_topology_mgr *mgr)
static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
guid_t *guid)
{
- u64 salt;
- u8 buf[UUID_SIZE];
-
if (!guid_is_null(guid))
return true;
- salt = get_jiffies_64();
-
- memcpy(&buf[0], &salt, sizeof(u64));
- memcpy(&buf[8], &salt, sizeof(u64));
-
- import_guid(guid, buf);
+ guid_gen(guid);
return false;
}
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-12 12:23 [RESEND 1/3] drm/mst: switch to guid_t type for GUID Jani Nikula
2024-08-12 12:23 ` [RESEND 2/3] drm/mst: switch to guid_gen() to generate valid GUIDs Jani Nikula
@ 2024-08-12 12:23 ` Jani Nikula
2024-08-28 13:20 ` Daniel Vetter
2024-08-28 13:53 ` Hamza Mahfooz
2024-08-28 13:00 ` [RESEND 1/3] drm/mst: switch to guid_t type for GUID Daniel Vetter
2 siblings, 2 replies; 14+ messages in thread
From: Jani Nikula @ 2024-08-12 12:23 UTC (permalink / raw)
To: dri-devel, amd-gfx; +Cc: intel-gfx, jani.nikula
Instead of just smashing jiffies into a GUID, use guid_gen() to generate
RFC 4122 compliant GUIDs.
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
---
Side note, it baffles me why amdgpu has a copy of this instead of
plumbing it into drm mst code.
---
.../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
1 file changed, 12 insertions(+), 11 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 72c10fc2c890..ce05e7e2a383 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
{
+ u8 buf[UUID_SIZE];
+ guid_t guid;
int ret;
- u8 guid[16];
- u64 tmp64;
mutex_lock(&mgr->lock);
if (!mgr->mst_primary)
@@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
}
/* Some hubs forget their guids after they resume */
- ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
- if (ret != 16) {
+ ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
+ if (ret != sizeof(buf)) {
drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
goto out_fail;
}
- if (memchr_inv(guid, 0, 16) == NULL) {
- tmp64 = get_jiffies_64();
- memcpy(&guid[0], &tmp64, sizeof(u64));
- memcpy(&guid[8], &tmp64, sizeof(u64));
+ import_guid(&guid, buf);
- ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
+ if (guid_is_null(&guid)) {
+ guid_gen(&guid);
+ export_guid(buf, &guid);
- if (ret != 16) {
+ ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
+
+ if (ret != sizeof(buf)) {
drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
goto out_fail;
}
}
- import_guid(&mgr->mst_primary->guid, guid);
+ guid_copy(&mgr->mst_primary->guid, &guid);
out_fail:
mutex_unlock(&mgr->lock);
--
2.39.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [RESEND 1/3] drm/mst: switch to guid_t type for GUID
2024-08-12 12:23 [RESEND 1/3] drm/mst: switch to guid_t type for GUID Jani Nikula
2024-08-12 12:23 ` [RESEND 2/3] drm/mst: switch to guid_gen() to generate valid GUIDs Jani Nikula
2024-08-12 12:23 ` [RESEND 3/3] drm/amd/display: " Jani Nikula
@ 2024-08-28 13:00 ` Daniel Vetter
2 siblings, 0 replies; 14+ messages in thread
From: Daniel Vetter @ 2024-08-28 13:00 UTC (permalink / raw)
To: Jani Nikula; +Cc: dri-devel, amd-gfx, intel-gfx
On Mon, Aug 12, 2024 at 03:23:10PM +0300, Jani Nikula wrote:
> The kernel has a guid_t type for GUIDs. Switch to using it, but avoid
> any functional changes here.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
I didn't cross-check everything, I'll trust the compiler on this. But
functionally lgtm
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Reading code a bit I did wonder whether we could have send/receive macros
that just work for compile-time statically sized types ... but not even
kmalloc is there yet I think, at least haven't seen anything.
-Sima
> ---
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 2 +-
> drivers/gpu/drm/display/drm_dp_mst_topology.c | 67 +++++++++++--------
> include/drm/display/drm_dp_mst_helper.h | 12 ++--
> 3 files changed, 45 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 7e7929f24ae4..72c10fc2c890 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -2610,7 +2610,7 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
> }
> }
>
> - memcpy(mgr->mst_primary->guid, guid, 16);
> + import_guid(&mgr->mst_primary->guid, guid);
>
> out_fail:
> mutex_unlock(&mgr->lock);
> diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> index 379a449a28a2..39f1dc45004e 100644
> --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> @@ -89,7 +89,7 @@ static int drm_dp_send_enum_path_resources(struct drm_dp_mst_topology_mgr *mgr,
> struct drm_dp_mst_branch *mstb,
> struct drm_dp_mst_port *port);
> static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
> - u8 *guid);
> + guid_t *guid);
>
> static int drm_dp_mst_register_i2c_bus(struct drm_dp_mst_port *port);
> static void drm_dp_mst_unregister_i2c_bus(struct drm_dp_mst_port *port);
> @@ -801,7 +801,7 @@ static bool drm_dp_sideband_parse_link_address(const struct drm_dp_mst_topology_
> int idx = 1;
> int i;
>
> - memcpy(repmsg->u.link_addr.guid, &raw->msg[idx], 16);
> + import_guid(&repmsg->u.link_addr.guid, &raw->msg[idx]);
> idx += 16;
> repmsg->u.link_addr.nports = raw->msg[idx] & 0xf;
> idx++;
> @@ -829,7 +829,7 @@ static bool drm_dp_sideband_parse_link_address(const struct drm_dp_mst_topology_
> idx++;
> if (idx > raw->curlen)
> goto fail_len;
> - memcpy(repmsg->u.link_addr.ports[i].peer_guid, &raw->msg[idx], 16);
> + import_guid(&repmsg->u.link_addr.ports[i].peer_guid, &raw->msg[idx]);
> idx += 16;
> if (idx > raw->curlen)
> goto fail_len;
> @@ -1029,7 +1029,7 @@ static bool drm_dp_sideband_parse_reply(const struct drm_dp_mst_topology_mgr *mg
> msg->req_type = (raw->msg[0] & 0x7f);
>
> if (msg->reply_type == DP_SIDEBAND_REPLY_NAK) {
> - memcpy(msg->u.nak.guid, &raw->msg[1], 16);
> + import_guid(&msg->u.nak.guid, &raw->msg[1]);
> msg->u.nak.reason = raw->msg[17];
> msg->u.nak.nak_data = raw->msg[18];
> return false;
> @@ -1078,7 +1078,7 @@ drm_dp_sideband_parse_connection_status_notify(const struct drm_dp_mst_topology_
> if (idx > raw->curlen)
> goto fail_len;
>
> - memcpy(msg->u.conn_stat.guid, &raw->msg[idx], 16);
> + import_guid(&msg->u.conn_stat.guid, &raw->msg[idx]);
> idx += 16;
> if (idx > raw->curlen)
> goto fail_len;
> @@ -1107,7 +1107,7 @@ static bool drm_dp_sideband_parse_resource_status_notify(const struct drm_dp_mst
> if (idx > raw->curlen)
> goto fail_len;
>
> - memcpy(msg->u.resource_stat.guid, &raw->msg[idx], 16);
> + import_guid(&msg->u.resource_stat.guid, &raw->msg[idx]);
> idx += 16;
> if (idx > raw->curlen)
> goto fail_len;
> @@ -2174,20 +2174,24 @@ ssize_t drm_dp_mst_dpcd_write(struct drm_dp_aux *aux,
> offset, size, buffer);
> }
>
> -static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, u8 *guid)
> +static int drm_dp_check_mstb_guid(struct drm_dp_mst_branch *mstb, guid_t *guid)
> {
> int ret = 0;
>
> - memcpy(mstb->guid, guid, 16);
> + guid_copy(&mstb->guid, guid);
> +
> + if (!drm_dp_validate_guid(mstb->mgr, &mstb->guid)) {
> + u8 buf[UUID_SIZE];
> +
> + export_guid(buf, &mstb->guid);
>
> - if (!drm_dp_validate_guid(mstb->mgr, mstb->guid)) {
> if (mstb->port_parent) {
> ret = drm_dp_send_dpcd_write(mstb->mgr,
> mstb->port_parent,
> - DP_GUID, 16, mstb->guid);
> + DP_GUID, sizeof(buf), buf);
> } else {
> ret = drm_dp_dpcd_write(mstb->mgr->aux,
> - DP_GUID, mstb->guid, 16);
> + DP_GUID, buf, sizeof(buf));
> }
> }
>
> @@ -2567,9 +2571,9 @@ static struct drm_dp_mst_branch *drm_dp_get_mst_branch_device(struct drm_dp_mst_
> return mstb;
> }
>
> -static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper(
> - struct drm_dp_mst_branch *mstb,
> - const uint8_t *guid)
> +static struct drm_dp_mst_branch *
> +get_mst_branch_device_by_guid_helper(struct drm_dp_mst_branch *mstb,
> + const guid_t *guid)
> {
> struct drm_dp_mst_branch *found_mstb;
> struct drm_dp_mst_port *port;
> @@ -2577,10 +2581,9 @@ static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper(
> if (!mstb)
> return NULL;
>
> - if (memcmp(mstb->guid, guid, 16) == 0)
> + if (guid_equal(&mstb->guid, guid))
> return mstb;
>
> -
> list_for_each_entry(port, &mstb->ports, next) {
> found_mstb = get_mst_branch_device_by_guid_helper(port->mstb, guid);
>
> @@ -2593,7 +2596,7 @@ static struct drm_dp_mst_branch *get_mst_branch_device_by_guid_helper(
>
> static struct drm_dp_mst_branch *
> drm_dp_get_mst_branch_device_by_guid(struct drm_dp_mst_topology_mgr *mgr,
> - const uint8_t *guid)
> + const guid_t *guid)
> {
> struct drm_dp_mst_branch *mstb;
> int ret;
> @@ -2695,17 +2698,20 @@ static void drm_dp_mst_queue_probe_work(struct drm_dp_mst_topology_mgr *mgr)
> }
>
> static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
> - u8 *guid)
> + guid_t *guid)
> {
> u64 salt;
> + u8 buf[UUID_SIZE];
>
> - if (memchr_inv(guid, 0, 16))
> + if (!guid_is_null(guid))
> return true;
>
> salt = get_jiffies_64();
>
> - memcpy(&guid[0], &salt, sizeof(u64));
> - memcpy(&guid[8], &salt, sizeof(u64));
> + memcpy(&buf[0], &salt, sizeof(u64));
> + memcpy(&buf[8], &salt, sizeof(u64));
> +
> + import_guid(guid, buf);
>
> return false;
> }
> @@ -2945,7 +2951,7 @@ static int drm_dp_send_link_address(struct drm_dp_mst_topology_mgr *mgr,
> drm_dbg_kms(mgr->dev, "link address reply: %d\n", reply->nports);
> drm_dp_dump_link_address(mgr, reply);
>
> - ret = drm_dp_check_mstb_guid(mstb, reply->guid);
> + ret = drm_dp_check_mstb_guid(mstb, &reply->guid);
> if (ret) {
> char buf[64];
>
> @@ -3799,8 +3805,9 @@ EXPORT_SYMBOL(drm_dp_mst_topology_mgr_suspend);
> int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr,
> bool sync)
> {
> + u8 buf[UUID_SIZE];
> + guid_t guid;
> int ret;
> - u8 guid[16];
>
> mutex_lock(&mgr->lock);
> if (!mgr->mst_primary)
> @@ -3821,13 +3828,15 @@ int drm_dp_mst_topology_mgr_resume(struct drm_dp_mst_topology_mgr *mgr,
> }
>
> /* Some hubs forget their guids after they resume */
> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
> - if (ret != 16) {
> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
> + if (ret != sizeof(buf)) {
> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
> goto out_fail;
> }
>
> - ret = drm_dp_check_mstb_guid(mgr->mst_primary, guid);
> + import_guid(&guid, buf);
> +
> + ret = drm_dp_check_mstb_guid(mgr->mst_primary, &guid);
> if (ret) {
> drm_dbg_kms(mgr->dev, "check mstb failed - undocked during suspend?\n");
> goto out_fail;
> @@ -4005,12 +4014,12 @@ drm_dp_mst_process_up_req(struct drm_dp_mst_topology_mgr *mgr,
> bool hotplug = false, dowork = false;
>
> if (hdr->broadcast) {
> - const u8 *guid = NULL;
> + const guid_t *guid = NULL;
>
> if (msg->req_type == DP_CONNECTION_STATUS_NOTIFY)
> - guid = msg->u.conn_stat.guid;
> + guid = &msg->u.conn_stat.guid;
> else if (msg->req_type == DP_RESOURCE_STATUS_NOTIFY)
> - guid = msg->u.resource_stat.guid;
> + guid = &msg->u.resource_stat.guid;
>
> if (guid)
> mstb = drm_dp_get_mst_branch_device_by_guid(mgr, guid);
> diff --git a/include/drm/display/drm_dp_mst_helper.h b/include/drm/display/drm_dp_mst_helper.h
> index 02b037d3a93f..f6a1cbb0f600 100644
> --- a/include/drm/display/drm_dp_mst_helper.h
> +++ b/include/drm/display/drm_dp_mst_helper.h
> @@ -244,18 +244,18 @@ struct drm_dp_mst_branch {
> bool link_address_sent;
>
> /* global unique identifier to identify branch devices */
> - u8 guid[16];
> + guid_t guid;
> };
>
>
> struct drm_dp_nak_reply {
> - u8 guid[16];
> + guid_t guid;
> u8 reason;
> u8 nak_data;
> };
>
> struct drm_dp_link_address_ack_reply {
> - u8 guid[16];
> + guid_t guid;
> u8 nports;
> struct drm_dp_link_addr_reply_port {
> bool input_port;
> @@ -265,7 +265,7 @@ struct drm_dp_link_address_ack_reply {
> bool ddps;
> bool legacy_device_plug_status;
> u8 dpcd_revision;
> - u8 peer_guid[16];
> + guid_t peer_guid;
> u8 num_sdp_streams;
> u8 num_sdp_stream_sinks;
> } ports[16];
> @@ -348,7 +348,7 @@ struct drm_dp_allocate_payload_ack_reply {
> };
>
> struct drm_dp_connection_status_notify {
> - u8 guid[16];
> + guid_t guid;
> u8 port_number;
> bool legacy_device_plug_status;
> bool displayport_device_plug_status;
> @@ -425,7 +425,7 @@ struct drm_dp_query_payload {
>
> struct drm_dp_resource_status_notify {
> u8 port_number;
> - u8 guid[16];
> + guid_t guid;
> u16 available_pbn;
> };
>
> --
> 2.39.2
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 2/3] drm/mst: switch to guid_gen() to generate valid GUIDs
2024-08-12 12:23 ` [RESEND 2/3] drm/mst: switch to guid_gen() to generate valid GUIDs Jani Nikula
@ 2024-08-28 13:16 ` Daniel Vetter
0 siblings, 0 replies; 14+ messages in thread
From: Daniel Vetter @ 2024-08-28 13:16 UTC (permalink / raw)
To: Jani Nikula; +Cc: dri-devel, amd-gfx, intel-gfx
On Mon, Aug 12, 2024 at 03:23:11PM +0300, Jani Nikula wrote:
> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
> RFC 4122 compliant GUIDs.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Read a bit the RFC, definitely sounds better than stuffing jiffies into
the guid ...
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
> drivers/gpu/drm/display/drm_dp_mst_topology.c | 10 +---------
> 1 file changed, 1 insertion(+), 9 deletions(-)
>
> diff --git a/drivers/gpu/drm/display/drm_dp_mst_topology.c b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> index 39f1dc45004e..38a9a1441e62 100644
> --- a/drivers/gpu/drm/display/drm_dp_mst_topology.c
> +++ b/drivers/gpu/drm/display/drm_dp_mst_topology.c
> @@ -2700,18 +2700,10 @@ static void drm_dp_mst_queue_probe_work(struct drm_dp_mst_topology_mgr *mgr)
> static bool drm_dp_validate_guid(struct drm_dp_mst_topology_mgr *mgr,
> guid_t *guid)
> {
> - u64 salt;
> - u8 buf[UUID_SIZE];
> -
> if (!guid_is_null(guid))
> return true;
>
> - salt = get_jiffies_64();
> -
> - memcpy(&buf[0], &salt, sizeof(u64));
> - memcpy(&buf[8], &salt, sizeof(u64));
> -
> - import_guid(guid, buf);
> + guid_gen(guid);
>
> return false;
> }
> --
> 2.39.2
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-12 12:23 ` [RESEND 3/3] drm/amd/display: " Jani Nikula
@ 2024-08-28 13:20 ` Daniel Vetter
2024-08-28 13:40 ` Jani Nikula
2024-08-28 13:53 ` Hamza Mahfooz
1 sibling, 1 reply; 14+ messages in thread
From: Daniel Vetter @ 2024-08-28 13:20 UTC (permalink / raw)
To: Jani Nikula; +Cc: dri-devel, amd-gfx, intel-gfx
On Mon, Aug 12, 2024 at 03:23:12PM +0300, Jani Nikula wrote:
> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
> RFC 4122 compliant GUIDs.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> ---
>
> Side note, it baffles me why amdgpu has a copy of this instead of
> plumbing it into drm mst code.
Yeah ec5fa9fcdeca ("drm/amd/display: Adjust the MST resume flow") promised
a follow-up, but that seems to have never materialized. Really should
materialize though. Patch lgtm
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 72c10fc2c890..ce05e7e2a383 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
>
> static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
> {
> + u8 buf[UUID_SIZE];
> + guid_t guid;
> int ret;
> - u8 guid[16];
> - u64 tmp64;
>
> mutex_lock(&mgr->lock);
> if (!mgr->mst_primary)
> @@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
> }
>
> /* Some hubs forget their guids after they resume */
> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
> - if (ret != 16) {
> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
> + if (ret != sizeof(buf)) {
> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
> goto out_fail;
> }
>
> - if (memchr_inv(guid, 0, 16) == NULL) {
> - tmp64 = get_jiffies_64();
> - memcpy(&guid[0], &tmp64, sizeof(u64));
> - memcpy(&guid[8], &tmp64, sizeof(u64));
> + import_guid(&guid, buf);
>
> - ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
> + if (guid_is_null(&guid)) {
> + guid_gen(&guid);
> + export_guid(buf, &guid);
>
> - if (ret != 16) {
> + ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
> +
> + if (ret != sizeof(buf)) {
> drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
> goto out_fail;
> }
> }
>
> - import_guid(&mgr->mst_primary->guid, guid);
> + guid_copy(&mgr->mst_primary->guid, &guid);
>
> out_fail:
> mutex_unlock(&mgr->lock);
> --
> 2.39.2
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-28 13:20 ` Daniel Vetter
@ 2024-08-28 13:40 ` Jani Nikula
2024-08-28 13:58 ` Alex Deucher
0 siblings, 1 reply; 14+ messages in thread
From: Jani Nikula @ 2024-08-28 13:40 UTC (permalink / raw)
To: Daniel Vetter
Cc: dri-devel, amd-gfx, intel-gfx, Harry Wentland, Leo Li,
Rodrigo Siqueira, Alex Deucher
On Wed, 28 Aug 2024, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> On Mon, Aug 12, 2024 at 03:23:12PM +0300, Jani Nikula wrote:
>> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
>> RFC 4122 compliant GUIDs.
>>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>
>> ---
>>
>> Side note, it baffles me why amdgpu has a copy of this instead of
>> plumbing it into drm mst code.
>
> Yeah ec5fa9fcdeca ("drm/amd/display: Adjust the MST resume flow") promised
> a follow-up, but that seems to have never materialized. Really should
> materialize though. Patch lgtm
>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Thanks!
Cc: AMD folks, ack for merging the series via drm-misc-next?
BR,
Jani.
>
>
>> ---
>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
>> 1 file changed, 12 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> index 72c10fc2c890..ce05e7e2a383 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> @@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
>>
>> static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>> {
>> + u8 buf[UUID_SIZE];
>> + guid_t guid;
>> int ret;
>> - u8 guid[16];
>> - u64 tmp64;
>>
>> mutex_lock(&mgr->lock);
>> if (!mgr->mst_primary)
>> @@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>> }
>>
>> /* Some hubs forget their guids after they resume */
>> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
>> - if (ret != 16) {
>> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
>> + if (ret != sizeof(buf)) {
>> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
>> goto out_fail;
>> }
>>
>> - if (memchr_inv(guid, 0, 16) == NULL) {
>> - tmp64 = get_jiffies_64();
>> - memcpy(&guid[0], &tmp64, sizeof(u64));
>> - memcpy(&guid[8], &tmp64, sizeof(u64));
>> + import_guid(&guid, buf);
>>
>> - ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
>> + if (guid_is_null(&guid)) {
>> + guid_gen(&guid);
>> + export_guid(buf, &guid);
>>
>> - if (ret != 16) {
>> + ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
>> +
>> + if (ret != sizeof(buf)) {
>> drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
>> goto out_fail;
>> }
>> }
>>
>> - import_guid(&mgr->mst_primary->guid, guid);
>> + guid_copy(&mgr->mst_primary->guid, &guid);
>>
>> out_fail:
>> mutex_unlock(&mgr->lock);
>> --
>> 2.39.2
>>
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-12 12:23 ` [RESEND 3/3] drm/amd/display: " Jani Nikula
2024-08-28 13:20 ` Daniel Vetter
@ 2024-08-28 13:53 ` Hamza Mahfooz
2024-08-28 14:06 ` Jani Nikula
1 sibling, 1 reply; 14+ messages in thread
From: Hamza Mahfooz @ 2024-08-28 13:53 UTC (permalink / raw)
To: Jani Nikula, dri-devel, amd-gfx; +Cc: intel-gfx
On 8/12/24 08:23, Jani Nikula wrote:
> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
> RFC 4122 compliant GUIDs.
>
> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>
> ---
Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
I would prefer to take this series through the amdgpu tree though,
assuming nobody minds.
>
> Side note, it baffles me why amdgpu has a copy of this instead of
> plumbing it into drm mst code.
> ---
> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 72c10fc2c890..ce05e7e2a383 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
>
> static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
> {
> + u8 buf[UUID_SIZE];
> + guid_t guid;
> int ret;
> - u8 guid[16];
> - u64 tmp64;
>
> mutex_lock(&mgr->lock);
> if (!mgr->mst_primary)
> @@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
> }
>
> /* Some hubs forget their guids after they resume */
> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
> - if (ret != 16) {
> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
> + if (ret != sizeof(buf)) {
> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
> goto out_fail;
> }
>
> - if (memchr_inv(guid, 0, 16) == NULL) {
> - tmp64 = get_jiffies_64();
> - memcpy(&guid[0], &tmp64, sizeof(u64));
> - memcpy(&guid[8], &tmp64, sizeof(u64));
> + import_guid(&guid, buf);
>
> - ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
> + if (guid_is_null(&guid)) {
> + guid_gen(&guid);
> + export_guid(buf, &guid);
>
> - if (ret != 16) {
> + ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
> +
> + if (ret != sizeof(buf)) {
> drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
> goto out_fail;
> }
> }
>
> - import_guid(&mgr->mst_primary->guid, guid);
> + guid_copy(&mgr->mst_primary->guid, &guid);
>
> out_fail:
> mutex_unlock(&mgr->lock);
--
Hamza
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-28 13:40 ` Jani Nikula
@ 2024-08-28 13:58 ` Alex Deucher
2024-08-28 15:08 ` Harry Wentland
0 siblings, 1 reply; 14+ messages in thread
From: Alex Deucher @ 2024-08-28 13:58 UTC (permalink / raw)
To: Jani Nikula
Cc: Daniel Vetter, dri-devel, amd-gfx, intel-gfx, Harry Wentland,
Leo Li, Rodrigo Siqueira, Alex Deucher
On Wed, Aug 28, 2024 at 9:53 AM Jani Nikula <jani.nikula@intel.com> wrote:
>
> On Wed, 28 Aug 2024, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> > On Mon, Aug 12, 2024 at 03:23:12PM +0300, Jani Nikula wrote:
> >> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
> >> RFC 4122 compliant GUIDs.
> >>
> >> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
> >>
> >> ---
> >>
> >> Side note, it baffles me why amdgpu has a copy of this instead of
> >> plumbing it into drm mst code.
> >
> > Yeah ec5fa9fcdeca ("drm/amd/display: Adjust the MST resume flow") promised
> > a follow-up, but that seems to have never materialized. Really should
> > materialize though. Patch lgtm
> >
> > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
> Thanks!
>
> Cc: AMD folks, ack for merging the series via drm-misc-next?
Unless Harry has any objections,
Acked-by: Alex Deucher <alexander.deucher@amd.com>
>
> BR,
> Jani.
>
>
> >
> >
> >> ---
> >> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
> >> 1 file changed, 12 insertions(+), 11 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> >> index 72c10fc2c890..ce05e7e2a383 100644
> >> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> >> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> >> @@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
> >>
> >> static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
> >> {
> >> + u8 buf[UUID_SIZE];
> >> + guid_t guid;
> >> int ret;
> >> - u8 guid[16];
> >> - u64 tmp64;
> >>
> >> mutex_lock(&mgr->lock);
> >> if (!mgr->mst_primary)
> >> @@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
> >> }
> >>
> >> /* Some hubs forget their guids after they resume */
> >> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
> >> - if (ret != 16) {
> >> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
> >> + if (ret != sizeof(buf)) {
> >> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
> >> goto out_fail;
> >> }
> >>
> >> - if (memchr_inv(guid, 0, 16) == NULL) {
> >> - tmp64 = get_jiffies_64();
> >> - memcpy(&guid[0], &tmp64, sizeof(u64));
> >> - memcpy(&guid[8], &tmp64, sizeof(u64));
> >> + import_guid(&guid, buf);
> >>
> >> - ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
> >> + if (guid_is_null(&guid)) {
> >> + guid_gen(&guid);
> >> + export_guid(buf, &guid);
> >>
> >> - if (ret != 16) {
> >> + ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
> >> +
> >> + if (ret != sizeof(buf)) {
> >> drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
> >> goto out_fail;
> >> }
> >> }
> >>
> >> - import_guid(&mgr->mst_primary->guid, guid);
> >> + guid_copy(&mgr->mst_primary->guid, &guid);
> >>
> >> out_fail:
> >> mutex_unlock(&mgr->lock);
> >> --
> >> 2.39.2
> >>
>
> --
> Jani Nikula, Intel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-28 13:53 ` Hamza Mahfooz
@ 2024-08-28 14:06 ` Jani Nikula
2024-08-28 15:10 ` Jani Nikula
2024-08-28 15:13 ` Hamza Mahfooz
0 siblings, 2 replies; 14+ messages in thread
From: Jani Nikula @ 2024-08-28 14:06 UTC (permalink / raw)
To: Hamza Mahfooz, dri-devel, amd-gfx; +Cc: intel-gfx
On Wed, 28 Aug 2024, Hamza Mahfooz <hamza.mahfooz@amd.com> wrote:
> On 8/12/24 08:23, Jani Nikula wrote:
>> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
>> RFC 4122 compliant GUIDs.
>>
>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>
>> ---
>
> Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
>
> I would prefer to take this series through the amdgpu tree though,
> assuming nobody minds.
How long is it going to take for that to get synced back to
drm-misc-next though?
BR,
Jani.
>
>>
>> Side note, it baffles me why amdgpu has a copy of this instead of
>> plumbing it into drm mst code.
>> ---
>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
>> 1 file changed, 12 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> index 72c10fc2c890..ce05e7e2a383 100644
>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>> @@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
>>
>> static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>> {
>> + u8 buf[UUID_SIZE];
>> + guid_t guid;
>> int ret;
>> - u8 guid[16];
>> - u64 tmp64;
>>
>> mutex_lock(&mgr->lock);
>> if (!mgr->mst_primary)
>> @@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>> }
>>
>> /* Some hubs forget their guids after they resume */
>> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
>> - if (ret != 16) {
>> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
>> + if (ret != sizeof(buf)) {
>> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
>> goto out_fail;
>> }
>>
>> - if (memchr_inv(guid, 0, 16) == NULL) {
>> - tmp64 = get_jiffies_64();
>> - memcpy(&guid[0], &tmp64, sizeof(u64));
>> - memcpy(&guid[8], &tmp64, sizeof(u64));
>> + import_guid(&guid, buf);
>>
>> - ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
>> + if (guid_is_null(&guid)) {
>> + guid_gen(&guid);
>> + export_guid(buf, &guid);
>>
>> - if (ret != 16) {
>> + ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
>> +
>> + if (ret != sizeof(buf)) {
>> drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
>> goto out_fail;
>> }
>> }
>>
>> - import_guid(&mgr->mst_primary->guid, guid);
>> + guid_copy(&mgr->mst_primary->guid, &guid);
>>
>> out_fail:
>> mutex_unlock(&mgr->lock);
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-28 13:58 ` Alex Deucher
@ 2024-08-28 15:08 ` Harry Wentland
2024-08-29 9:32 ` Jani Nikula
0 siblings, 1 reply; 14+ messages in thread
From: Harry Wentland @ 2024-08-28 15:08 UTC (permalink / raw)
To: Alex Deucher, Jani Nikula
Cc: Daniel Vetter, dri-devel, amd-gfx, intel-gfx, Leo Li,
Rodrigo Siqueira, Alex Deucher
On 2024-08-28 09:58, Alex Deucher wrote:
> On Wed, Aug 28, 2024 at 9:53 AM Jani Nikula <jani.nikula@intel.com> wrote:
>>
>> On Wed, 28 Aug 2024, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>>> On Mon, Aug 12, 2024 at 03:23:12PM +0300, Jani Nikula wrote:
>>>> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
>>>> RFC 4122 compliant GUIDs.
>>>>
>>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>
>>>> ---
>>>>
>>>> Side note, it baffles me why amdgpu has a copy of this instead of
>>>> plumbing it into drm mst code.
>>>
>>> Yeah ec5fa9fcdeca ("drm/amd/display: Adjust the MST resume flow") promised
>>> a follow-up, but that seems to have never materialized. Really should
>>> materialize though. Patch lgtm
>>>
>>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>>
>> Thanks!
>>
>> Cc: AMD folks, ack for merging the series via drm-misc-next?
>
> Unless Harry has any objections,
> Acked-by: Alex Deucher <alexander.deucher@amd.com>
>
Acked-by: Harry Wentland <harry.wentland@amd.com>
Harry
>>
>> BR,
>> Jani.
>>
>>
>>>
>>>
>>>> ---
>>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
>>>> 1 file changed, 12 insertions(+), 11 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> index 72c10fc2c890..ce05e7e2a383 100644
>>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>>> @@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
>>>>
>>>> static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>>>> {
>>>> + u8 buf[UUID_SIZE];
>>>> + guid_t guid;
>>>> int ret;
>>>> - u8 guid[16];
>>>> - u64 tmp64;
>>>>
>>>> mutex_lock(&mgr->lock);
>>>> if (!mgr->mst_primary)
>>>> @@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>>>> }
>>>>
>>>> /* Some hubs forget their guids after they resume */
>>>> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
>>>> - if (ret != 16) {
>>>> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
>>>> + if (ret != sizeof(buf)) {
>>>> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
>>>> goto out_fail;
>>>> }
>>>>
>>>> - if (memchr_inv(guid, 0, 16) == NULL) {
>>>> - tmp64 = get_jiffies_64();
>>>> - memcpy(&guid[0], &tmp64, sizeof(u64));
>>>> - memcpy(&guid[8], &tmp64, sizeof(u64));
>>>> + import_guid(&guid, buf);
>>>>
>>>> - ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
>>>> + if (guid_is_null(&guid)) {
>>>> + guid_gen(&guid);
>>>> + export_guid(buf, &guid);
>>>>
>>>> - if (ret != 16) {
>>>> + ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
>>>> +
>>>> + if (ret != sizeof(buf)) {
>>>> drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
>>>> goto out_fail;
>>>> }
>>>> }
>>>>
>>>> - import_guid(&mgr->mst_primary->guid, guid);
>>>> + guid_copy(&mgr->mst_primary->guid, &guid);
>>>>
>>>> out_fail:
>>>> mutex_unlock(&mgr->lock);
>>>> --
>>>> 2.39.2
>>>>
>>
>> --
>> Jani Nikula, Intel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-28 14:06 ` Jani Nikula
@ 2024-08-28 15:10 ` Jani Nikula
2024-08-28 15:13 ` Hamza Mahfooz
1 sibling, 0 replies; 14+ messages in thread
From: Jani Nikula @ 2024-08-28 15:10 UTC (permalink / raw)
To: Hamza Mahfooz, dri-devel, amd-gfx; +Cc: intel-gfx
On Wed, 28 Aug 2024, Jani Nikula <jani.nikula@intel.com> wrote:
> On Wed, 28 Aug 2024, Hamza Mahfooz <hamza.mahfooz@amd.com> wrote:
>> On 8/12/24 08:23, Jani Nikula wrote:
>>> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
>>> RFC 4122 compliant GUIDs.
>>>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>
>>> ---
>>
>> Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
>>
>> I would prefer to take this series through the amdgpu tree though,
>> assuming nobody minds.
>
> How long is it going to take for that to get synced back to
> drm-misc-next though?
Also getting acks from Alex and Harry to merge via drm-misc-next.
BR,
Jani.
>
> BR,
> Jani.
>
>
>>
>>>
>>> Side note, it baffles me why amdgpu has a copy of this instead of
>>> plumbing it into drm mst code.
>>> ---
>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
>>> 1 file changed, 12 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> index 72c10fc2c890..ce05e7e2a383 100644
>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> @@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
>>>
>>> static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>>> {
>>> + u8 buf[UUID_SIZE];
>>> + guid_t guid;
>>> int ret;
>>> - u8 guid[16];
>>> - u64 tmp64;
>>>
>>> mutex_lock(&mgr->lock);
>>> if (!mgr->mst_primary)
>>> @@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>>> }
>>>
>>> /* Some hubs forget their guids after they resume */
>>> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
>>> - if (ret != 16) {
>>> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
>>> + if (ret != sizeof(buf)) {
>>> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
>>> goto out_fail;
>>> }
>>>
>>> - if (memchr_inv(guid, 0, 16) == NULL) {
>>> - tmp64 = get_jiffies_64();
>>> - memcpy(&guid[0], &tmp64, sizeof(u64));
>>> - memcpy(&guid[8], &tmp64, sizeof(u64));
>>> + import_guid(&guid, buf);
>>>
>>> - ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
>>> + if (guid_is_null(&guid)) {
>>> + guid_gen(&guid);
>>> + export_guid(buf, &guid);
>>>
>>> - if (ret != 16) {
>>> + ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
>>> +
>>> + if (ret != sizeof(buf)) {
>>> drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
>>> goto out_fail;
>>> }
>>> }
>>>
>>> - import_guid(&mgr->mst_primary->guid, guid);
>>> + guid_copy(&mgr->mst_primary->guid, &guid);
>>>
>>> out_fail:
>>> mutex_unlock(&mgr->lock);
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-28 14:06 ` Jani Nikula
2024-08-28 15:10 ` Jani Nikula
@ 2024-08-28 15:13 ` Hamza Mahfooz
1 sibling, 0 replies; 14+ messages in thread
From: Hamza Mahfooz @ 2024-08-28 15:13 UTC (permalink / raw)
To: Jani Nikula, dri-devel, amd-gfx; +Cc: intel-gfx
On 8/28/24 10:06, Jani Nikula wrote:
> On Wed, 28 Aug 2024, Hamza Mahfooz <hamza.mahfooz@amd.com> wrote:
>> On 8/12/24 08:23, Jani Nikula wrote:
>>> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
>>> RFC 4122 compliant GUIDs.
>>>
>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>
>>> ---
>>
>> Acked-by: Hamza Mahfooz <hamza.mahfooz@amd.com>
>>
>> I would prefer to take this series through the amdgpu tree though,
>> assuming nobody minds.
>
> How long is it going to take for that to get synced back to
> drm-misc-next though?
It might take awhile, so it's probably best to merge it through
drm-misc-next.
>
> BR,
> Jani.
>
>
>>
>>>
>>> Side note, it baffles me why amdgpu has a copy of this instead of
>>> plumbing it into drm mst code.
>>> ---
>>> .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 23 ++++++++++---------
>>> 1 file changed, 12 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> index 72c10fc2c890..ce05e7e2a383 100644
>>> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
>>> @@ -2568,9 +2568,9 @@ static int dm_late_init(void *handle)
>>>
>>> static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>>> {
>>> + u8 buf[UUID_SIZE];
>>> + guid_t guid;
>>> int ret;
>>> - u8 guid[16];
>>> - u64 tmp64;
>>>
>>> mutex_lock(&mgr->lock);
>>> if (!mgr->mst_primary)
>>> @@ -2591,26 +2591,27 @@ static void resume_mst_branch_status(struct drm_dp_mst_topology_mgr *mgr)
>>> }
>>>
>>> /* Some hubs forget their guids after they resume */
>>> - ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, guid, 16);
>>> - if (ret != 16) {
>>> + ret = drm_dp_dpcd_read(mgr->aux, DP_GUID, buf, sizeof(buf));
>>> + if (ret != sizeof(buf)) {
>>> drm_dbg_kms(mgr->dev, "dpcd read failed - undocked during suspend?\n");
>>> goto out_fail;
>>> }
>>>
>>> - if (memchr_inv(guid, 0, 16) == NULL) {
>>> - tmp64 = get_jiffies_64();
>>> - memcpy(&guid[0], &tmp64, sizeof(u64));
>>> - memcpy(&guid[8], &tmp64, sizeof(u64));
>>> + import_guid(&guid, buf);
>>>
>>> - ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, guid, 16);
>>> + if (guid_is_null(&guid)) {
>>> + guid_gen(&guid);
>>> + export_guid(buf, &guid);
>>>
>>> - if (ret != 16) {
>>> + ret = drm_dp_dpcd_write(mgr->aux, DP_GUID, buf, sizeof(buf));
>>> +
>>> + if (ret != sizeof(buf)) {
>>> drm_dbg_kms(mgr->dev, "check mstb guid failed - undocked during suspend?\n");
>>> goto out_fail;
>>> }
>>> }
>>>
>>> - import_guid(&mgr->mst_primary->guid, guid);
>>> + guid_copy(&mgr->mst_primary->guid, &guid);
>>>
>>> out_fail:
>>> mutex_unlock(&mgr->lock);
>
--
Hamza
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [RESEND 3/3] drm/amd/display: switch to guid_gen() to generate valid GUIDs
2024-08-28 15:08 ` Harry Wentland
@ 2024-08-29 9:32 ` Jani Nikula
0 siblings, 0 replies; 14+ messages in thread
From: Jani Nikula @ 2024-08-29 9:32 UTC (permalink / raw)
To: Harry Wentland, Alex Deucher
Cc: Daniel Vetter, dri-devel, amd-gfx, intel-gfx, Leo Li,
Rodrigo Siqueira, Alex Deucher, Hamza Mahfooz
On Wed, 28 Aug 2024, Harry Wentland <harry.wentland@amd.com> wrote:
> On 2024-08-28 09:58, Alex Deucher wrote:
>> On Wed, Aug 28, 2024 at 9:53 AM Jani Nikula <jani.nikula@intel.com> wrote:
>>>
>>> On Wed, 28 Aug 2024, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>>>> On Mon, Aug 12, 2024 at 03:23:12PM +0300, Jani Nikula wrote:
>>>>> Instead of just smashing jiffies into a GUID, use guid_gen() to generate
>>>>> RFC 4122 compliant GUIDs.
>>>>>
>>>>> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
>>>>>
>>>>> ---
>>>>>
>>>>> Side note, it baffles me why amdgpu has a copy of this instead of
>>>>> plumbing it into drm mst code.
>>>>
>>>> Yeah ec5fa9fcdeca ("drm/amd/display: Adjust the MST resume flow") promised
>>>> a follow-up, but that seems to have never materialized. Really should
>>>> materialize though. Patch lgtm
>>>>
>>>> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>>>
>>> Thanks!
>>>
>>> Cc: AMD folks, ack for merging the series via drm-misc-next?
>>
>> Unless Harry has any objections,
>> Acked-by: Alex Deucher <alexander.deucher@amd.com>
>>
>
> Acked-by: Harry Wentland <harry.wentland@amd.com>
Thanks for the reviews and acks, pushed the series to drm-misc-next.
BR,
Jani.
--
Jani Nikula, Intel
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-08-29 9:32 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-12 12:23 [RESEND 1/3] drm/mst: switch to guid_t type for GUID Jani Nikula
2024-08-12 12:23 ` [RESEND 2/3] drm/mst: switch to guid_gen() to generate valid GUIDs Jani Nikula
2024-08-28 13:16 ` Daniel Vetter
2024-08-12 12:23 ` [RESEND 3/3] drm/amd/display: " Jani Nikula
2024-08-28 13:20 ` Daniel Vetter
2024-08-28 13:40 ` Jani Nikula
2024-08-28 13:58 ` Alex Deucher
2024-08-28 15:08 ` Harry Wentland
2024-08-29 9:32 ` Jani Nikula
2024-08-28 13:53 ` Hamza Mahfooz
2024-08-28 14:06 ` Jani Nikula
2024-08-28 15:10 ` Jani Nikula
2024-08-28 15:13 ` Hamza Mahfooz
2024-08-28 13:00 ` [RESEND 1/3] drm/mst: switch to guid_t type for GUID Daniel Vetter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).