]> git.itanic.dy.fi Git - linux-stable/commitdiff
net: ipa: extend endpoints in packet init command
authorAlex Elder <elder@linaro.org>
Mon, 30 Jan 2023 21:01:52 +0000 (15:01 -0600)
committerJakub Kicinski <kuba@kernel.org>
Wed, 1 Feb 2023 05:45:51 +0000 (21:45 -0800)
The IP_PACKET_INIT immediate command defines the destination
endpoint to which a packet should be sent.  Prior to IPA v5.0, a
5 bit field in that command represents the endpoint, but starting
with IPA v5.0, the field is extended to 8 bits to support more than
32 endpoints.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ipa/ipa_cmd.c

index aa2b594ca5067ff0972882786ae741b3efe814b0..5d3a875e50feea9bd77854d7f2d75d0929eb57a5 100644 (file)
@@ -94,11 +94,11 @@ struct ipa_cmd_register_write {
 /* IPA_CMD_IP_PACKET_INIT */
 
 struct ipa_cmd_ip_packet_init {
-       u8 dest_endpoint;
+       u8 dest_endpoint;       /* Full 8 bits used for IPA v5.0+ */
        u8 reserved[7];
 };
 
-/* Field masks for ipa_cmd_ip_packet_init dest_endpoint field */
+/* Field mask for ipa_cmd_ip_packet_init dest_endpoint field (unused v5.0+) */
 #define IPA_PACKET_INIT_DEST_ENDPOINT_FMASK            GENMASK(4, 0)
 
 /* IPA_CMD_DMA_SHARED_MEM */
@@ -491,8 +491,13 @@ static void ipa_cmd_ip_packet_init_add(struct gsi_trans *trans, u8 endpoint_id)
        cmd_payload = ipa_cmd_payload_alloc(ipa, &payload_addr);
        payload = &cmd_payload->ip_packet_init;
 
-       payload->dest_endpoint = u8_encode_bits(endpoint_id,
-                                       IPA_PACKET_INIT_DEST_ENDPOINT_FMASK);
+       if (ipa->version < IPA_VERSION_5_0) {
+               payload->dest_endpoint =
+                       u8_encode_bits(endpoint_id,
+                                      IPA_PACKET_INIT_DEST_ENDPOINT_FMASK);
+       } else {
+               payload->dest_endpoint = endpoint_id;
+       }
 
        gsi_trans_cmd_add(trans, payload, sizeof(*payload), payload_addr,
                          opcode);