Skip to content

Commit e28db8c

Browse files
shinas-marvellPaolo Abeni
authored and
Paolo Abeni
committed
octeon_ep: control net framework to support VF offloads
Inquire firmware on supported offloads, as well as convey offloads enabled dynamically to firmware for the VFs. Implement control net API to support the same. Signed-off-by: Shinas Rasheed <[email protected]> Reviewed-by: Simon Horman <[email protected]> Signed-off-by: Paolo Abeni <[email protected]>
1 parent c130e58 commit e28db8c

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-1
lines changed

drivers/net/ethernet/marvell/octeon_ep/octep_pfvf_mbox.c

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,47 @@ static void octep_pfvf_dev_remove(struct octep_device *oct, u32 vf_id,
158158
rsp->s.type = OCTEP_PFVF_MBOX_TYPE_RSP_ACK;
159159
}
160160

161+
static void octep_pfvf_get_fw_info(struct octep_device *oct, u32 vf_id,
162+
union octep_pfvf_mbox_word cmd,
163+
union octep_pfvf_mbox_word *rsp)
164+
{
165+
struct octep_fw_info fw_info;
166+
int err;
167+
168+
err = octep_ctrl_net_get_info(oct, vf_id, &fw_info);
169+
if (err) {
170+
rsp->s_fw_info.type = OCTEP_PFVF_MBOX_TYPE_RSP_NACK;
171+
dev_err(&oct->pdev->dev, "Get VF info failed via host control Mbox\n");
172+
return;
173+
}
174+
175+
rsp->s_fw_info.pkind = fw_info.pkind;
176+
rsp->s_fw_info.fsz = fw_info.fsz;
177+
rsp->s_fw_info.rx_ol_flags = fw_info.rx_ol_flags;
178+
rsp->s_fw_info.tx_ol_flags = fw_info.tx_ol_flags;
179+
180+
rsp->s_fw_info.type = OCTEP_PFVF_MBOX_TYPE_RSP_ACK;
181+
}
182+
183+
static void octep_pfvf_set_offloads(struct octep_device *oct, u32 vf_id,
184+
union octep_pfvf_mbox_word cmd,
185+
union octep_pfvf_mbox_word *rsp)
186+
{
187+
struct octep_ctrl_net_offloads offloads = {
188+
.rx_offloads = cmd.s_offloads.rx_ol_flags,
189+
.tx_offloads = cmd.s_offloads.tx_ol_flags
190+
};
191+
int err;
192+
193+
err = octep_ctrl_net_set_offloads(oct, vf_id, &offloads, true);
194+
if (err) {
195+
rsp->s_offloads.type = OCTEP_PFVF_MBOX_TYPE_RSP_NACK;
196+
dev_err(&oct->pdev->dev, "Set VF offloads failed via host control Mbox\n");
197+
return;
198+
}
199+
rsp->s_offloads.type = OCTEP_PFVF_MBOX_TYPE_RSP_ACK;
200+
}
201+
161202
int octep_setup_pfvf_mbox(struct octep_device *oct)
162203
{
163204
int i = 0, num_vfs = 0, rings_per_vf = 0;
@@ -334,6 +375,12 @@ void octep_pfvf_mbox_work(struct work_struct *work)
334375
case OCTEP_PFVF_MBOX_CMD_DEV_REMOVE:
335376
octep_pfvf_dev_remove(oct, vf_id, cmd, &rsp);
336377
break;
378+
case OCTEP_PFVF_MBOX_CMD_GET_FW_INFO:
379+
octep_pfvf_get_fw_info(oct, vf_id, cmd, &rsp);
380+
break;
381+
case OCTEP_PFVF_MBOX_CMD_SET_OFFLOADS:
382+
octep_pfvf_set_offloads(oct, vf_id, cmd, &rsp);
383+
break;
337384
default:
338385
dev_err(&oct->pdev->dev, "PF-VF mailbox: invalid opcode %d\n", cmd.s.opcode);
339386
rsp.s.type = OCTEP_PFVF_MBOX_TYPE_RSP_NACK;

drivers/net/ethernet/marvell/octeon_ep/octep_pfvf_mbox.h

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,10 @@
1818
enum octep_pfvf_mbox_version {
1919
OCTEP_PFVF_MBOX_VERSION_V0,
2020
OCTEP_PFVF_MBOX_VERSION_V1,
21+
OCTEP_PFVF_MBOX_VERSION_V2,
2122
};
2223

23-
#define OCTEP_PFVF_MBOX_VERSION_CURRENT OCTEP_PFVF_MBOX_VERSION_V1
24+
#define OCTEP_PFVF_MBOX_VERSION_CURRENT OCTEP_PFVF_MBOX_VERSION_V2
2425

2526
enum octep_pfvf_mbox_opcode {
2627
OCTEP_PFVF_MBOX_CMD_VERSION,
@@ -34,6 +35,8 @@ enum octep_pfvf_mbox_opcode {
3435
OCTEP_PFVF_MBOX_CMD_GET_LINK_STATUS,
3536
OCTEP_PFVF_MBOX_CMD_GET_MTU,
3637
OCTEP_PFVF_MBOX_CMD_DEV_REMOVE,
38+
OCTEP_PFVF_MBOX_CMD_GET_FW_INFO,
39+
OCTEP_PFVF_MBOX_CMD_SET_OFFLOADS,
3740
OCTEP_PFVF_MBOX_CMD_MAX,
3841
};
3942

@@ -138,6 +141,22 @@ union octep_pfvf_mbox_word {
138141
u64 status:1;
139142
u64 rsvd:53;
140143
} s_link_status;
144+
struct {
145+
u64 opcode:8;
146+
u64 type:2;
147+
u64 pkind:8;
148+
u64 fsz:8;
149+
u64 rx_ol_flags:16;
150+
u64 tx_ol_flags:16;
151+
u64 rsvd:6;
152+
} s_fw_info;
153+
struct {
154+
u64 opcode:8;
155+
u64 type:2;
156+
u64 rsvd:22;
157+
u64 rx_ol_flags:16;
158+
u64 tx_ol_flags:16;
159+
} s_offloads;
141160
} __packed;
142161

143162
void octep_pfvf_mbox_work(struct work_struct *work);

0 commit comments

Comments
 (0)