linux/drivers/net/ethernet/google/gve/gve_adminq.c
<<
>>
Prefs
   1// SPDX-License-Identifier: (GPL-2.0 OR MIT)
   2/* Google virtual Ethernet (gve) driver
   3 *
   4 * Copyright (C) 2015-2021 Google, Inc.
   5 */
   6
   7#include <linux/etherdevice.h>
   8#include <linux/pci.h>
   9#include "gve.h"
  10#include "gve_adminq.h"
  11#include "gve_register.h"
  12
  13#define GVE_MAX_ADMINQ_RELEASE_CHECK    500
  14#define GVE_ADMINQ_SLEEP_LEN            20
  15#define GVE_MAX_ADMINQ_EVENT_COUNTER_CHECK      100
  16
  17#define GVE_DEVICE_OPTION_ERROR_FMT "%s option error:\n" \
  18"Expected: length=%d, feature_mask=%x.\n" \
  19"Actual: length=%d, feature_mask=%x.\n"
  20
  21#define GVE_DEVICE_OPTION_TOO_BIG_FMT "Length of %s option larger than expected. Possible older version of guest driver.\n"
  22
  23static
  24struct gve_device_option *gve_get_next_option(struct gve_device_descriptor *descriptor,
  25                                              struct gve_device_option *option)
  26{
  27        void *option_end, *descriptor_end;
  28
  29        option_end = (void *)(option + 1) + be16_to_cpu(option->option_length);
  30        descriptor_end = (void *)descriptor + be16_to_cpu(descriptor->total_length);
  31
  32        return option_end > descriptor_end ? NULL : (struct gve_device_option *)option_end;
  33}
  34
  35static
  36void gve_parse_device_option(struct gve_priv *priv,
  37                             struct gve_device_descriptor *device_descriptor,
  38                             struct gve_device_option *option,
  39                             struct gve_device_option_gqi_rda **dev_op_gqi_rda,
  40                             struct gve_device_option_gqi_qpl **dev_op_gqi_qpl,
  41                             struct gve_device_option_dqo_rda **dev_op_dqo_rda,
  42                             struct gve_device_option_jumbo_frames **dev_op_jumbo_frames)
  43{
  44        u32 req_feat_mask = be32_to_cpu(option->required_features_mask);
  45        u16 option_length = be16_to_cpu(option->option_length);
  46        u16 option_id = be16_to_cpu(option->option_id);
  47
  48        /* If the length or feature mask doesn't match, continue without
  49         * enabling the feature.
  50         */
  51        switch (option_id) {
  52        case GVE_DEV_OPT_ID_GQI_RAW_ADDRESSING:
  53                if (option_length != GVE_DEV_OPT_LEN_GQI_RAW_ADDRESSING ||
  54                    req_feat_mask != GVE_DEV_OPT_REQ_FEAT_MASK_GQI_RAW_ADDRESSING) {
  55                        dev_warn(&priv->pdev->dev, GVE_DEVICE_OPTION_ERROR_FMT,
  56                                 "Raw Addressing",
  57                                 GVE_DEV_OPT_LEN_GQI_RAW_ADDRESSING,
  58                                 GVE_DEV_OPT_REQ_FEAT_MASK_GQI_RAW_ADDRESSING,
  59                                 option_length, req_feat_mask);
  60                        break;
  61                }
  62
  63                dev_info(&priv->pdev->dev,
  64                         "Gqi raw addressing device option enabled.\n");
  65                priv->queue_format = GVE_GQI_RDA_FORMAT;
  66                break;
  67        case GVE_DEV_OPT_ID_GQI_RDA:
  68                if (option_length < sizeof(**dev_op_gqi_rda) ||
  69                    req_feat_mask != GVE_DEV_OPT_REQ_FEAT_MASK_GQI_RDA) {
  70                        dev_warn(&priv->pdev->dev, GVE_DEVICE_OPTION_ERROR_FMT,
  71                                 "GQI RDA", (int)sizeof(**dev_op_gqi_rda),
  72                                 GVE_DEV_OPT_REQ_FEAT_MASK_GQI_RDA,
  73                                 option_length, req_feat_mask);
  74                        break;
  75                }
  76
  77                if (option_length > sizeof(**dev_op_gqi_rda)) {
  78                        dev_warn(&priv->pdev->dev,
  79                                 GVE_DEVICE_OPTION_TOO_BIG_FMT, "GQI RDA");
  80                }
  81                *dev_op_gqi_rda = (void *)(option + 1);
  82                break;
  83        case GVE_DEV_OPT_ID_GQI_QPL:
  84                if (option_length < sizeof(**dev_op_gqi_qpl) ||
  85                    req_feat_mask != GVE_DEV_OPT_REQ_FEAT_MASK_GQI_QPL) {
  86                        dev_warn(&priv->pdev->dev, GVE_DEVICE_OPTION_ERROR_FMT,
  87                                 "GQI QPL", (int)sizeof(**dev_op_gqi_qpl),
  88                                 GVE_DEV_OPT_REQ_FEAT_MASK_GQI_QPL,
  89                                 option_length, req_feat_mask);
  90                        break;
  91                }
  92
  93                if (option_length > sizeof(**dev_op_gqi_qpl)) {
  94                        dev_warn(&priv->pdev->dev,
  95                                 GVE_DEVICE_OPTION_TOO_BIG_FMT, "GQI QPL");
  96                }
  97                *dev_op_gqi_qpl = (void *)(option + 1);
  98                break;
  99        case GVE_DEV_OPT_ID_DQO_RDA:
 100                if (option_length < sizeof(**dev_op_dqo_rda) ||
 101                    req_feat_mask != GVE_DEV_OPT_REQ_FEAT_MASK_DQO_RDA) {
 102                        dev_warn(&priv->pdev->dev, GVE_DEVICE_OPTION_ERROR_FMT,
 103                                 "DQO RDA", (int)sizeof(**dev_op_dqo_rda),
 104                                 GVE_DEV_OPT_REQ_FEAT_MASK_DQO_RDA,
 105                                 option_length, req_feat_mask);
 106                        break;
 107                }
 108
 109                if (option_length > sizeof(**dev_op_dqo_rda)) {
 110                        dev_warn(&priv->pdev->dev,
 111                                 GVE_DEVICE_OPTION_TOO_BIG_FMT, "DQO RDA");
 112                }
 113                *dev_op_dqo_rda = (void *)(option + 1);
 114                break;
 115        case GVE_DEV_OPT_ID_JUMBO_FRAMES:
 116                if (option_length < sizeof(**dev_op_jumbo_frames) ||
 117                    req_feat_mask != GVE_DEV_OPT_REQ_FEAT_MASK_JUMBO_FRAMES) {
 118                        dev_warn(&priv->pdev->dev, GVE_DEVICE_OPTION_ERROR_FMT,
 119                                 "Jumbo Frames",
 120                                 (int)sizeof(**dev_op_jumbo_frames),
 121                                 GVE_DEV_OPT_REQ_FEAT_MASK_JUMBO_FRAMES,
 122                                 option_length, req_feat_mask);
 123                        break;
 124                }
 125
 126                if (option_length > sizeof(**dev_op_jumbo_frames)) {
 127                        dev_warn(&priv->pdev->dev,
 128                                 GVE_DEVICE_OPTION_TOO_BIG_FMT,
 129                                 "Jumbo Frames");
 130                }
 131                *dev_op_jumbo_frames = (void *)(option + 1);
 132                break;
 133        default:
 134                /* If we don't recognize the option just continue
 135                 * without doing anything.
 136                 */
 137                dev_dbg(&priv->pdev->dev, "Unrecognized device option 0x%hx not enabled.\n",
 138                        option_id);
 139        }
 140}
 141
 142/* Process all device options for a given describe device call. */
 143static int
 144gve_process_device_options(struct gve_priv *priv,
 145                           struct gve_device_descriptor *descriptor,
 146                           struct gve_device_option_gqi_rda **dev_op_gqi_rda,
 147                           struct gve_device_option_gqi_qpl **dev_op_gqi_qpl,
 148                           struct gve_device_option_dqo_rda **dev_op_dqo_rda,
 149                           struct gve_device_option_jumbo_frames **dev_op_jumbo_frames)
 150{
 151        const int num_options = be16_to_cpu(descriptor->num_device_options);
 152        struct gve_device_option *dev_opt;
 153        int i;
 154
 155        /* The options struct directly follows the device descriptor. */
 156        dev_opt = (void *)(descriptor + 1);
 157        for (i = 0; i < num_options; i++) {
 158                struct gve_device_option *next_opt;
 159
 160                next_opt = gve_get_next_option(descriptor, dev_opt);
 161                if (!next_opt) {
 162                        dev_err(&priv->dev->dev,
 163                                "options exceed device_descriptor's total length.\n");
 164                        return -EINVAL;
 165                }
 166
 167                gve_parse_device_option(priv, descriptor, dev_opt,
 168                                        dev_op_gqi_rda, dev_op_gqi_qpl,
 169                                        dev_op_dqo_rda, dev_op_jumbo_frames);
 170                dev_opt = next_opt;
 171        }
 172
 173        return 0;
 174}
 175
 176int gve_adminq_alloc(struct device *dev, struct gve_priv *priv)
 177{
 178        priv->adminq = dma_alloc_coherent(dev, PAGE_SIZE,
 179                                          &priv->adminq_bus_addr, GFP_KERNEL);
 180        if (unlikely(!priv->adminq))
 181                return -ENOMEM;
 182
 183        priv->adminq_mask = (PAGE_SIZE / sizeof(union gve_adminq_command)) - 1;
 184        priv->adminq_prod_cnt = 0;
 185        priv->adminq_cmd_fail = 0;
 186        priv->adminq_timeouts = 0;
 187        priv->adminq_describe_device_cnt = 0;
 188        priv->adminq_cfg_device_resources_cnt = 0;
 189        priv->adminq_register_page_list_cnt = 0;
 190        priv->adminq_unregister_page_list_cnt = 0;
 191        priv->adminq_create_tx_queue_cnt = 0;
 192        priv->adminq_create_rx_queue_cnt = 0;
 193        priv->adminq_destroy_tx_queue_cnt = 0;
 194        priv->adminq_destroy_rx_queue_cnt = 0;
 195        priv->adminq_dcfg_device_resources_cnt = 0;
 196        priv->adminq_set_driver_parameter_cnt = 0;
 197        priv->adminq_report_stats_cnt = 0;
 198        priv->adminq_report_link_speed_cnt = 0;
 199        priv->adminq_get_ptype_map_cnt = 0;
 200
 201        /* Setup Admin queue with the device */
 202        iowrite32be(priv->adminq_bus_addr / PAGE_SIZE,
 203                    &priv->reg_bar0->adminq_pfn);
 204
 205        gve_set_admin_queue_ok(priv);
 206        return 0;
 207}
 208
 209void gve_adminq_release(struct gve_priv *priv)
 210{
 211        int i = 0;
 212
 213        /* Tell the device the adminq is leaving */
 214        iowrite32be(0x0, &priv->reg_bar0->adminq_pfn);
 215        while (ioread32be(&priv->reg_bar0->adminq_pfn)) {
 216                /* If this is reached the device is unrecoverable and still
 217                 * holding memory. Continue looping to avoid memory corruption,
 218                 * but WARN so it is visible what is going on.
 219                 */
 220                if (i == GVE_MAX_ADMINQ_RELEASE_CHECK)
 221                        WARN(1, "Unrecoverable platform error!");
 222                i++;
 223                msleep(GVE_ADMINQ_SLEEP_LEN);
 224        }
 225        gve_clear_device_rings_ok(priv);
 226        gve_clear_device_resources_ok(priv);
 227        gve_clear_admin_queue_ok(priv);
 228}
 229
 230void gve_adminq_free(struct device *dev, struct gve_priv *priv)
 231{
 232        if (!gve_get_admin_queue_ok(priv))
 233                return;
 234        gve_adminq_release(priv);
 235        dma_free_coherent(dev, PAGE_SIZE, priv->adminq, priv->adminq_bus_addr);
 236        gve_clear_admin_queue_ok(priv);
 237}
 238
 239static void gve_adminq_kick_cmd(struct gve_priv *priv, u32 prod_cnt)
 240{
 241        iowrite32be(prod_cnt, &priv->reg_bar0->adminq_doorbell);
 242}
 243
 244static bool gve_adminq_wait_for_cmd(struct gve_priv *priv, u32 prod_cnt)
 245{
 246        int i;
 247
 248        for (i = 0; i < GVE_MAX_ADMINQ_EVENT_COUNTER_CHECK; i++) {
 249                if (ioread32be(&priv->reg_bar0->adminq_event_counter)
 250                    == prod_cnt)
 251                        return true;
 252                msleep(GVE_ADMINQ_SLEEP_LEN);
 253        }
 254
 255        return false;
 256}
 257
 258static int gve_adminq_parse_err(struct gve_priv *priv, u32 status)
 259{
 260        if (status != GVE_ADMINQ_COMMAND_PASSED &&
 261            status != GVE_ADMINQ_COMMAND_UNSET) {
 262                dev_err(&priv->pdev->dev, "AQ command failed with status %d\n", status);
 263                priv->adminq_cmd_fail++;
 264        }
 265        switch (status) {
 266        case GVE_ADMINQ_COMMAND_PASSED:
 267                return 0;
 268        case GVE_ADMINQ_COMMAND_UNSET:
 269                dev_err(&priv->pdev->dev, "parse_aq_err: err and status both unset, this should not be possible.\n");
 270                return -EINVAL;
 271        case GVE_ADMINQ_COMMAND_ERROR_ABORTED:
 272        case GVE_ADMINQ_COMMAND_ERROR_CANCELLED:
 273        case GVE_ADMINQ_COMMAND_ERROR_DATALOSS:
 274        case GVE_ADMINQ_COMMAND_ERROR_FAILED_PRECONDITION:
 275        case GVE_ADMINQ_COMMAND_ERROR_UNAVAILABLE:
 276                return -EAGAIN;
 277        case GVE_ADMINQ_COMMAND_ERROR_ALREADY_EXISTS:
 278        case GVE_ADMINQ_COMMAND_ERROR_INTERNAL_ERROR:
 279        case GVE_ADMINQ_COMMAND_ERROR_INVALID_ARGUMENT:
 280        case GVE_ADMINQ_COMMAND_ERROR_NOT_FOUND:
 281        case GVE_ADMINQ_COMMAND_ERROR_OUT_OF_RANGE:
 282        case GVE_ADMINQ_COMMAND_ERROR_UNKNOWN_ERROR:
 283                return -EINVAL;
 284        case GVE_ADMINQ_COMMAND_ERROR_DEADLINE_EXCEEDED:
 285                return -ETIME;
 286        case GVE_ADMINQ_COMMAND_ERROR_PERMISSION_DENIED:
 287        case GVE_ADMINQ_COMMAND_ERROR_UNAUTHENTICATED:
 288                return -EACCES;
 289        case GVE_ADMINQ_COMMAND_ERROR_RESOURCE_EXHAUSTED:
 290                return -ENOMEM;
 291        case GVE_ADMINQ_COMMAND_ERROR_UNIMPLEMENTED:
 292                return -ENOTSUPP;
 293        default:
 294                dev_err(&priv->pdev->dev, "parse_aq_err: unknown status code %d\n", status);
 295                return -EINVAL;
 296        }
 297}
 298
 299/* Flushes all AQ commands currently queued and waits for them to complete.
 300 * If there are failures, it will return the first error.
 301 */
 302static int gve_adminq_kick_and_wait(struct gve_priv *priv)
 303{
 304        u32 tail, head;
 305        int i;
 306
 307        tail = ioread32be(&priv->reg_bar0->adminq_event_counter);
 308        head = priv->adminq_prod_cnt;
 309
 310        gve_adminq_kick_cmd(priv, head);
 311        if (!gve_adminq_wait_for_cmd(priv, head)) {
 312                dev_err(&priv->pdev->dev, "AQ commands timed out, need to reset AQ\n");
 313                priv->adminq_timeouts++;
 314                return -ENOTRECOVERABLE;
 315        }
 316
 317        for (i = tail; i < head; i++) {
 318                union gve_adminq_command *cmd;
 319                u32 status, err;
 320
 321                cmd = &priv->adminq[i & priv->adminq_mask];
 322                status = be32_to_cpu(READ_ONCE(cmd->status));
 323                err = gve_adminq_parse_err(priv, status);
 324                if (err)
 325                        // Return the first error if we failed.
 326                        return err;
 327        }
 328
 329        return 0;
 330}
 331
 332/* This function is not threadsafe - the caller is responsible for any
 333 * necessary locks.
 334 */
 335static int gve_adminq_issue_cmd(struct gve_priv *priv,
 336                                union gve_adminq_command *cmd_orig)
 337{
 338        union gve_adminq_command *cmd;
 339        u32 opcode;
 340        u32 tail;
 341
 342        tail = ioread32be(&priv->reg_bar0->adminq_event_counter);
 343
 344        // Check if next command will overflow the buffer.
 345        if (((priv->adminq_prod_cnt + 1) & priv->adminq_mask) ==
 346            (tail & priv->adminq_mask)) {
 347                int err;
 348
 349                // Flush existing commands to make room.
 350                err = gve_adminq_kick_and_wait(priv);
 351                if (err)
 352                        return err;
 353
 354                // Retry.
 355                tail = ioread32be(&priv->reg_bar0->adminq_event_counter);
 356                if (((priv->adminq_prod_cnt + 1) & priv->adminq_mask) ==
 357                    (tail & priv->adminq_mask)) {
 358                        // This should never happen. We just flushed the
 359                        // command queue so there should be enough space.
 360                        return -ENOMEM;
 361                }
 362        }
 363
 364        cmd = &priv->adminq[priv->adminq_prod_cnt & priv->adminq_mask];
 365        priv->adminq_prod_cnt++;
 366
 367        memcpy(cmd, cmd_orig, sizeof(*cmd_orig));
 368        opcode = be32_to_cpu(READ_ONCE(cmd->opcode));
 369
 370        switch (opcode) {
 371        case GVE_ADMINQ_DESCRIBE_DEVICE:
 372                priv->adminq_describe_device_cnt++;
 373                break;
 374        case GVE_ADMINQ_CONFIGURE_DEVICE_RESOURCES:
 375                priv->adminq_cfg_device_resources_cnt++;
 376                break;
 377        case GVE_ADMINQ_REGISTER_PAGE_LIST:
 378                priv->adminq_register_page_list_cnt++;
 379                break;
 380        case GVE_ADMINQ_UNREGISTER_PAGE_LIST:
 381                priv->adminq_unregister_page_list_cnt++;
 382                break;
 383        case GVE_ADMINQ_CREATE_TX_QUEUE:
 384                priv->adminq_create_tx_queue_cnt++;
 385                break;
 386        case GVE_ADMINQ_CREATE_RX_QUEUE:
 387                priv->adminq_create_rx_queue_cnt++;
 388                break;
 389        case GVE_ADMINQ_DESTROY_TX_QUEUE:
 390                priv->adminq_destroy_tx_queue_cnt++;
 391                break;
 392        case GVE_ADMINQ_DESTROY_RX_QUEUE:
 393                priv->adminq_destroy_rx_queue_cnt++;
 394                break;
 395        case GVE_ADMINQ_DECONFIGURE_DEVICE_RESOURCES:
 396                priv->adminq_dcfg_device_resources_cnt++;
 397                break;
 398        case GVE_ADMINQ_SET_DRIVER_PARAMETER:
 399                priv->adminq_set_driver_parameter_cnt++;
 400                break;
 401        case GVE_ADMINQ_REPORT_STATS:
 402                priv->adminq_report_stats_cnt++;
 403                break;
 404        case GVE_ADMINQ_REPORT_LINK_SPEED:
 405                priv->adminq_report_link_speed_cnt++;
 406                break;
 407        case GVE_ADMINQ_GET_PTYPE_MAP:
 408                priv->adminq_get_ptype_map_cnt++;
 409                break;
 410        default:
 411                dev_err(&priv->pdev->dev, "unknown AQ command opcode %d\n", opcode);
 412        }
 413
 414        return 0;
 415}
 416
 417/* This function is not threadsafe - the caller is responsible for any
 418 * necessary locks.
 419 * The caller is also responsible for making sure there are no commands
 420 * waiting to be executed.
 421 */
 422static int gve_adminq_execute_cmd(struct gve_priv *priv,
 423                                  union gve_adminq_command *cmd_orig)
 424{
 425        u32 tail, head;
 426        int err;
 427
 428        tail = ioread32be(&priv->reg_bar0->adminq_event_counter);
 429        head = priv->adminq_prod_cnt;
 430        if (tail != head)
 431                // This is not a valid path
 432                return -EINVAL;
 433
 434        err = gve_adminq_issue_cmd(priv, cmd_orig);
 435        if (err)
 436                return err;
 437
 438        return gve_adminq_kick_and_wait(priv);
 439}
 440
 441/* The device specifies that the management vector can either be the first irq
 442 * or the last irq. ntfy_blk_msix_base_idx indicates the first irq assigned to
 443 * the ntfy blks. It if is 0 then the management vector is last, if it is 1 then
 444 * the management vector is first.
 445 *
 446 * gve arranges the msix vectors so that the management vector is last.
 447 */
 448#define GVE_NTFY_BLK_BASE_MSIX_IDX      0
 449int gve_adminq_configure_device_resources(struct gve_priv *priv,
 450                                          dma_addr_t counter_array_bus_addr,
 451                                          u32 num_counters,
 452                                          dma_addr_t db_array_bus_addr,
 453                                          u32 num_ntfy_blks)
 454{
 455        union gve_adminq_command cmd;
 456
 457        memset(&cmd, 0, sizeof(cmd));
 458        cmd.opcode = cpu_to_be32(GVE_ADMINQ_CONFIGURE_DEVICE_RESOURCES);
 459        cmd.configure_device_resources =
 460                (struct gve_adminq_configure_device_resources) {
 461                .counter_array = cpu_to_be64(counter_array_bus_addr),
 462                .num_counters = cpu_to_be32(num_counters),
 463                .irq_db_addr = cpu_to_be64(db_array_bus_addr),
 464                .num_irq_dbs = cpu_to_be32(num_ntfy_blks),
 465                .irq_db_stride = cpu_to_be32(sizeof(priv->ntfy_blocks[0])),
 466                .ntfy_blk_msix_base_idx =
 467                                        cpu_to_be32(GVE_NTFY_BLK_BASE_MSIX_IDX),
 468                .queue_format = priv->queue_format,
 469        };
 470
 471        return gve_adminq_execute_cmd(priv, &cmd);
 472}
 473
 474int gve_adminq_deconfigure_device_resources(struct gve_priv *priv)
 475{
 476        union gve_adminq_command cmd;
 477
 478        memset(&cmd, 0, sizeof(cmd));
 479        cmd.opcode = cpu_to_be32(GVE_ADMINQ_DECONFIGURE_DEVICE_RESOURCES);
 480
 481        return gve_adminq_execute_cmd(priv, &cmd);
 482}
 483
 484static int gve_adminq_create_tx_queue(struct gve_priv *priv, u32 queue_index)
 485{
 486        struct gve_tx_ring *tx = &priv->tx[queue_index];
 487        union gve_adminq_command cmd;
 488
 489        memset(&cmd, 0, sizeof(cmd));
 490        cmd.opcode = cpu_to_be32(GVE_ADMINQ_CREATE_TX_QUEUE);
 491        cmd.create_tx_queue = (struct gve_adminq_create_tx_queue) {
 492                .queue_id = cpu_to_be32(queue_index),
 493                .queue_resources_addr =
 494                        cpu_to_be64(tx->q_resources_bus),
 495                .tx_ring_addr = cpu_to_be64(tx->bus),
 496                .ntfy_id = cpu_to_be32(tx->ntfy_id),
 497        };
 498
 499        if (gve_is_gqi(priv)) {
 500                u32 qpl_id = priv->queue_format == GVE_GQI_RDA_FORMAT ?
 501                        GVE_RAW_ADDRESSING_QPL_ID : tx->tx_fifo.qpl->id;
 502
 503                cmd.create_tx_queue.queue_page_list_id = cpu_to_be32(qpl_id);
 504        } else {
 505                cmd.create_tx_queue.tx_ring_size =
 506                        cpu_to_be16(priv->tx_desc_cnt);
 507                cmd.create_tx_queue.tx_comp_ring_addr =
 508                        cpu_to_be64(tx->complq_bus_dqo);
 509                cmd.create_tx_queue.tx_comp_ring_size =
 510                        cpu_to_be16(priv->options_dqo_rda.tx_comp_ring_entries);
 511        }
 512
 513        return gve_adminq_issue_cmd(priv, &cmd);
 514}
 515
 516int gve_adminq_create_tx_queues(struct gve_priv *priv, u32 num_queues)
 517{
 518        int err;
 519        int i;
 520
 521        for (i = 0; i < num_queues; i++) {
 522                err = gve_adminq_create_tx_queue(priv, i);
 523                if (err)
 524                        return err;
 525        }
 526
 527        return gve_adminq_kick_and_wait(priv);
 528}
 529
 530static int gve_adminq_create_rx_queue(struct gve_priv *priv, u32 queue_index)
 531{
 532        struct gve_rx_ring *rx = &priv->rx[queue_index];
 533        union gve_adminq_command cmd;
 534
 535        memset(&cmd, 0, sizeof(cmd));
 536        cmd.opcode = cpu_to_be32(GVE_ADMINQ_CREATE_RX_QUEUE);
 537        cmd.create_rx_queue = (struct gve_adminq_create_rx_queue) {
 538                .queue_id = cpu_to_be32(queue_index),
 539                .ntfy_id = cpu_to_be32(rx->ntfy_id),
 540                .queue_resources_addr = cpu_to_be64(rx->q_resources_bus),
 541        };
 542
 543        if (gve_is_gqi(priv)) {
 544                u32 qpl_id = priv->queue_format == GVE_GQI_RDA_FORMAT ?
 545                        GVE_RAW_ADDRESSING_QPL_ID : rx->data.qpl->id;
 546
 547                cmd.create_rx_queue.rx_desc_ring_addr =
 548                        cpu_to_be64(rx->desc.bus),
 549                cmd.create_rx_queue.rx_data_ring_addr =
 550                        cpu_to_be64(rx->data.data_bus),
 551                cmd.create_rx_queue.index = cpu_to_be32(queue_index);
 552                cmd.create_rx_queue.queue_page_list_id = cpu_to_be32(qpl_id);
 553                cmd.create_rx_queue.packet_buffer_size = cpu_to_be16(rx->packet_buffer_size);
 554        } else {
 555                cmd.create_rx_queue.rx_ring_size =
 556                        cpu_to_be16(priv->rx_desc_cnt);
 557                cmd.create_rx_queue.rx_desc_ring_addr =
 558                        cpu_to_be64(rx->dqo.complq.bus);
 559                cmd.create_rx_queue.rx_data_ring_addr =
 560                        cpu_to_be64(rx->dqo.bufq.bus);
 561                cmd.create_rx_queue.packet_buffer_size =
 562                        cpu_to_be16(priv->data_buffer_size_dqo);
 563                cmd.create_rx_queue.rx_buff_ring_size =
 564                        cpu_to_be16(priv->options_dqo_rda.rx_buff_ring_entries);
 565                cmd.create_rx_queue.enable_rsc =
 566                        !!(priv->dev->features & NETIF_F_LRO);
 567        }
 568
 569        return gve_adminq_issue_cmd(priv, &cmd);
 570}
 571
 572int gve_adminq_create_rx_queues(struct gve_priv *priv, u32 num_queues)
 573{
 574        int err;
 575        int i;
 576
 577        for (i = 0; i < num_queues; i++) {
 578                err = gve_adminq_create_rx_queue(priv, i);
 579                if (err)
 580                        return err;
 581        }
 582
 583        return gve_adminq_kick_and_wait(priv);
 584}
 585
 586static int gve_adminq_destroy_tx_queue(struct gve_priv *priv, u32 queue_index)
 587{
 588        union gve_adminq_command cmd;
 589        int err;
 590
 591        memset(&cmd, 0, sizeof(cmd));
 592        cmd.opcode = cpu_to_be32(GVE_ADMINQ_DESTROY_TX_QUEUE);
 593        cmd.destroy_tx_queue = (struct gve_adminq_destroy_tx_queue) {
 594                .queue_id = cpu_to_be32(queue_index),
 595        };
 596
 597        err = gve_adminq_issue_cmd(priv, &cmd);
 598        if (err)
 599                return err;
 600
 601        return 0;
 602}
 603
 604int gve_adminq_destroy_tx_queues(struct gve_priv *priv, u32 num_queues)
 605{
 606        int err;
 607        int i;
 608
 609        for (i = 0; i < num_queues; i++) {
 610                err = gve_adminq_destroy_tx_queue(priv, i);
 611                if (err)
 612                        return err;
 613        }
 614
 615        return gve_adminq_kick_and_wait(priv);
 616}
 617
 618static int gve_adminq_destroy_rx_queue(struct gve_priv *priv, u32 queue_index)
 619{
 620        union gve_adminq_command cmd;
 621        int err;
 622
 623        memset(&cmd, 0, sizeof(cmd));
 624        cmd.opcode = cpu_to_be32(GVE_ADMINQ_DESTROY_RX_QUEUE);
 625        cmd.destroy_rx_queue = (struct gve_adminq_destroy_rx_queue) {
 626                .queue_id = cpu_to_be32(queue_index),
 627        };
 628
 629        err = gve_adminq_issue_cmd(priv, &cmd);
 630        if (err)
 631                return err;
 632
 633        return 0;
 634}
 635
 636int gve_adminq_destroy_rx_queues(struct gve_priv *priv, u32 num_queues)
 637{
 638        int err;
 639        int i;
 640
 641        for (i = 0; i < num_queues; i++) {
 642                err = gve_adminq_destroy_rx_queue(priv, i);
 643                if (err)
 644                        return err;
 645        }
 646
 647        return gve_adminq_kick_and_wait(priv);
 648}
 649
 650static int gve_set_desc_cnt(struct gve_priv *priv,
 651                            struct gve_device_descriptor *descriptor)
 652{
 653        priv->tx_desc_cnt = be16_to_cpu(descriptor->tx_queue_entries);
 654        if (priv->tx_desc_cnt * sizeof(priv->tx->desc[0]) < PAGE_SIZE) {
 655                dev_err(&priv->pdev->dev, "Tx desc count %d too low\n",
 656                        priv->tx_desc_cnt);
 657                return -EINVAL;
 658        }
 659        priv->rx_desc_cnt = be16_to_cpu(descriptor->rx_queue_entries);
 660        if (priv->rx_desc_cnt * sizeof(priv->rx->desc.desc_ring[0])
 661            < PAGE_SIZE) {
 662                dev_err(&priv->pdev->dev, "Rx desc count %d too low\n",
 663                        priv->rx_desc_cnt);
 664                return -EINVAL;
 665        }
 666        return 0;
 667}
 668
 669static int
 670gve_set_desc_cnt_dqo(struct gve_priv *priv,
 671                     const struct gve_device_descriptor *descriptor,
 672                     const struct gve_device_option_dqo_rda *dev_op_dqo_rda)
 673{
 674        priv->tx_desc_cnt = be16_to_cpu(descriptor->tx_queue_entries);
 675        priv->options_dqo_rda.tx_comp_ring_entries =
 676                be16_to_cpu(dev_op_dqo_rda->tx_comp_ring_entries);
 677        priv->rx_desc_cnt = be16_to_cpu(descriptor->rx_queue_entries);
 678        priv->options_dqo_rda.rx_buff_ring_entries =
 679                be16_to_cpu(dev_op_dqo_rda->rx_buff_ring_entries);
 680
 681        return 0;
 682}
 683
 684static void gve_enable_supported_features(struct gve_priv *priv,
 685                                          u32 supported_features_mask,
 686                                          const struct gve_device_option_jumbo_frames
 687                                                  *dev_op_jumbo_frames)
 688{
 689        /* Before control reaches this point, the page-size-capped max MTU from
 690         * the gve_device_descriptor field has already been stored in
 691         * priv->dev->max_mtu. We overwrite it with the true max MTU below.
 692         */
 693        if (dev_op_jumbo_frames &&
 694            (supported_features_mask & GVE_SUP_JUMBO_FRAMES_MASK)) {
 695                dev_info(&priv->pdev->dev,
 696                         "JUMBO FRAMES device option enabled.\n");
 697                priv->dev->max_mtu = be16_to_cpu(dev_op_jumbo_frames->max_mtu);
 698        }
 699}
 700
 701int gve_adminq_describe_device(struct gve_priv *priv)
 702{
 703        struct gve_device_option_jumbo_frames *dev_op_jumbo_frames = NULL;
 704        struct gve_device_option_gqi_rda *dev_op_gqi_rda = NULL;
 705        struct gve_device_option_gqi_qpl *dev_op_gqi_qpl = NULL;
 706        struct gve_device_option_dqo_rda *dev_op_dqo_rda = NULL;
 707        struct gve_device_descriptor *descriptor;
 708        u32 supported_features_mask = 0;
 709        union gve_adminq_command cmd;
 710        dma_addr_t descriptor_bus;
 711        int err = 0;
 712        u8 *mac;
 713        u16 mtu;
 714
 715        memset(&cmd, 0, sizeof(cmd));
 716        descriptor = dma_alloc_coherent(&priv->pdev->dev, PAGE_SIZE,
 717                                        &descriptor_bus, GFP_KERNEL);
 718        if (!descriptor)
 719                return -ENOMEM;
 720        cmd.opcode = cpu_to_be32(GVE_ADMINQ_DESCRIBE_DEVICE);
 721        cmd.describe_device.device_descriptor_addr =
 722                                                cpu_to_be64(descriptor_bus);
 723        cmd.describe_device.device_descriptor_version =
 724                        cpu_to_be32(GVE_ADMINQ_DEVICE_DESCRIPTOR_VERSION);
 725        cmd.describe_device.available_length = cpu_to_be32(PAGE_SIZE);
 726
 727        err = gve_adminq_execute_cmd(priv, &cmd);
 728        if (err)
 729                goto free_device_descriptor;
 730
 731        err = gve_process_device_options(priv, descriptor, &dev_op_gqi_rda,
 732                                         &dev_op_gqi_qpl, &dev_op_dqo_rda,
 733                                         &dev_op_jumbo_frames);
 734        if (err)
 735                goto free_device_descriptor;
 736
 737        /* If the GQI_RAW_ADDRESSING option is not enabled and the queue format
 738         * is not set to GqiRda, choose the queue format in a priority order:
 739         * DqoRda, GqiRda, GqiQpl. Use GqiQpl as default.
 740         */
 741        if (dev_op_dqo_rda) {
 742                priv->queue_format = GVE_DQO_RDA_FORMAT;
 743                dev_info(&priv->pdev->dev,
 744                         "Driver is running with DQO RDA queue format.\n");
 745                supported_features_mask =
 746                        be32_to_cpu(dev_op_dqo_rda->supported_features_mask);
 747        } else if (dev_op_gqi_rda) {
 748                priv->queue_format = GVE_GQI_RDA_FORMAT;
 749                dev_info(&priv->pdev->dev,
 750                         "Driver is running with GQI RDA queue format.\n");
 751                supported_features_mask =
 752                        be32_to_cpu(dev_op_gqi_rda->supported_features_mask);
 753        } else if (priv->queue_format == GVE_GQI_RDA_FORMAT) {
 754                dev_info(&priv->pdev->dev,
 755                         "Driver is running with GQI RDA queue format.\n");
 756        } else {
 757                priv->queue_format = GVE_GQI_QPL_FORMAT;
 758                if (dev_op_gqi_qpl)
 759                        supported_features_mask =
 760                                be32_to_cpu(dev_op_gqi_qpl->supported_features_mask);
 761                dev_info(&priv->pdev->dev,
 762                         "Driver is running with GQI QPL queue format.\n");
 763        }
 764        if (gve_is_gqi(priv)) {
 765                err = gve_set_desc_cnt(priv, descriptor);
 766        } else {
 767                /* DQO supports LRO. */
 768                priv->dev->hw_features |= NETIF_F_LRO;
 769                err = gve_set_desc_cnt_dqo(priv, descriptor, dev_op_dqo_rda);
 770        }
 771        if (err)
 772                goto free_device_descriptor;
 773
 774        priv->max_registered_pages =
 775                                be64_to_cpu(descriptor->max_registered_pages);
 776        mtu = be16_to_cpu(descriptor->mtu);
 777        if (mtu < ETH_MIN_MTU) {
 778                dev_err(&priv->pdev->dev, "MTU %d below minimum MTU\n", mtu);
 779                err = -EINVAL;
 780                goto free_device_descriptor;
 781        }
 782        priv->dev->max_mtu = mtu;
 783        priv->num_event_counters = be16_to_cpu(descriptor->counters);
 784        eth_hw_addr_set(priv->dev, descriptor->mac);
 785        mac = descriptor->mac;
 786        dev_info(&priv->pdev->dev, "MAC addr: %pM\n", mac);
 787        priv->tx_pages_per_qpl = be16_to_cpu(descriptor->tx_pages_per_qpl);
 788        priv->rx_data_slot_cnt = be16_to_cpu(descriptor->rx_pages_per_qpl);
 789
 790        if (gve_is_gqi(priv) && priv->rx_data_slot_cnt < priv->rx_desc_cnt) {
 791                dev_err(&priv->pdev->dev, "rx_data_slot_cnt cannot be smaller than rx_desc_cnt, setting rx_desc_cnt down to %d.\n",
 792                        priv->rx_data_slot_cnt);
 793                priv->rx_desc_cnt = priv->rx_data_slot_cnt;
 794        }
 795        priv->default_num_queues = be16_to_cpu(descriptor->default_num_queues);
 796
 797        gve_enable_supported_features(priv, supported_features_mask,
 798                                      dev_op_jumbo_frames);
 799
 800free_device_descriptor:
 801        dma_free_coherent(&priv->pdev->dev, PAGE_SIZE, descriptor,
 802                          descriptor_bus);
 803        return err;
 804}
 805
 806int gve_adminq_register_page_list(struct gve_priv *priv,
 807                                  struct gve_queue_page_list *qpl)
 808{
 809        struct device *hdev = &priv->pdev->dev;
 810        u32 num_entries = qpl->num_entries;
 811        u32 size = num_entries * sizeof(qpl->page_buses[0]);
 812        union gve_adminq_command cmd;
 813        dma_addr_t page_list_bus;
 814        __be64 *page_list;
 815        int err;
 816        int i;
 817
 818        memset(&cmd, 0, sizeof(cmd));
 819        page_list = dma_alloc_coherent(hdev, size, &page_list_bus, GFP_KERNEL);
 820        if (!page_list)
 821                return -ENOMEM;
 822
 823        for (i = 0; i < num_entries; i++)
 824                page_list[i] = cpu_to_be64(qpl->page_buses[i]);
 825
 826        cmd.opcode = cpu_to_be32(GVE_ADMINQ_REGISTER_PAGE_LIST);
 827        cmd.reg_page_list = (struct gve_adminq_register_page_list) {
 828                .page_list_id = cpu_to_be32(qpl->id),
 829                .num_pages = cpu_to_be32(num_entries),
 830                .page_address_list_addr = cpu_to_be64(page_list_bus),
 831        };
 832
 833        err = gve_adminq_execute_cmd(priv, &cmd);
 834        dma_free_coherent(hdev, size, page_list, page_list_bus);
 835        return err;
 836}
 837
 838int gve_adminq_unregister_page_list(struct gve_priv *priv, u32 page_list_id)
 839{
 840        union gve_adminq_command cmd;
 841
 842        memset(&cmd, 0, sizeof(cmd));
 843        cmd.opcode = cpu_to_be32(GVE_ADMINQ_UNREGISTER_PAGE_LIST);
 844        cmd.unreg_page_list = (struct gve_adminq_unregister_page_list) {
 845                .page_list_id = cpu_to_be32(page_list_id),
 846        };
 847
 848        return gve_adminq_execute_cmd(priv, &cmd);
 849}
 850
 851int gve_adminq_set_mtu(struct gve_priv *priv, u64 mtu)
 852{
 853        union gve_adminq_command cmd;
 854
 855        memset(&cmd, 0, sizeof(cmd));
 856        cmd.opcode = cpu_to_be32(GVE_ADMINQ_SET_DRIVER_PARAMETER);
 857        cmd.set_driver_param = (struct gve_adminq_set_driver_parameter) {
 858                .parameter_type = cpu_to_be32(GVE_SET_PARAM_MTU),
 859                .parameter_value = cpu_to_be64(mtu),
 860        };
 861
 862        return gve_adminq_execute_cmd(priv, &cmd);
 863}
 864
 865int gve_adminq_report_stats(struct gve_priv *priv, u64 stats_report_len,
 866                            dma_addr_t stats_report_addr, u64 interval)
 867{
 868        union gve_adminq_command cmd;
 869
 870        memset(&cmd, 0, sizeof(cmd));
 871        cmd.opcode = cpu_to_be32(GVE_ADMINQ_REPORT_STATS);
 872        cmd.report_stats = (struct gve_adminq_report_stats) {
 873                .stats_report_len = cpu_to_be64(stats_report_len),
 874                .stats_report_addr = cpu_to_be64(stats_report_addr),
 875                .interval = cpu_to_be64(interval),
 876        };
 877
 878        return gve_adminq_execute_cmd(priv, &cmd);
 879}
 880
 881int gve_adminq_report_link_speed(struct gve_priv *priv)
 882{
 883        union gve_adminq_command gvnic_cmd;
 884        dma_addr_t link_speed_region_bus;
 885        __be64 *link_speed_region;
 886        int err;
 887
 888        link_speed_region =
 889                dma_alloc_coherent(&priv->pdev->dev, sizeof(*link_speed_region),
 890                                   &link_speed_region_bus, GFP_KERNEL);
 891
 892        if (!link_speed_region)
 893                return -ENOMEM;
 894
 895        memset(&gvnic_cmd, 0, sizeof(gvnic_cmd));
 896        gvnic_cmd.opcode = cpu_to_be32(GVE_ADMINQ_REPORT_LINK_SPEED);
 897        gvnic_cmd.report_link_speed.link_speed_address =
 898                cpu_to_be64(link_speed_region_bus);
 899
 900        err = gve_adminq_execute_cmd(priv, &gvnic_cmd);
 901
 902        priv->link_speed = be64_to_cpu(*link_speed_region);
 903        dma_free_coherent(&priv->pdev->dev, sizeof(*link_speed_region), link_speed_region,
 904                          link_speed_region_bus);
 905        return err;
 906}
 907
 908int gve_adminq_get_ptype_map_dqo(struct gve_priv *priv,
 909                                 struct gve_ptype_lut *ptype_lut)
 910{
 911        struct gve_ptype_map *ptype_map;
 912        union gve_adminq_command cmd;
 913        dma_addr_t ptype_map_bus;
 914        int err = 0;
 915        int i;
 916
 917        memset(&cmd, 0, sizeof(cmd));
 918        ptype_map = dma_alloc_coherent(&priv->pdev->dev, sizeof(*ptype_map),
 919                                       &ptype_map_bus, GFP_KERNEL);
 920        if (!ptype_map)
 921                return -ENOMEM;
 922
 923        cmd.opcode = cpu_to_be32(GVE_ADMINQ_GET_PTYPE_MAP);
 924        cmd.get_ptype_map = (struct gve_adminq_get_ptype_map) {
 925                .ptype_map_len = cpu_to_be64(sizeof(*ptype_map)),
 926                .ptype_map_addr = cpu_to_be64(ptype_map_bus),
 927        };
 928
 929        err = gve_adminq_execute_cmd(priv, &cmd);
 930        if (err)
 931                goto err;
 932
 933        /* Populate ptype_lut. */
 934        for (i = 0; i < GVE_NUM_PTYPES; i++) {
 935                ptype_lut->ptypes[i].l3_type =
 936                        ptype_map->ptypes[i].l3_type;
 937                ptype_lut->ptypes[i].l4_type =
 938                        ptype_map->ptypes[i].l4_type;
 939        }
 940err:
 941        dma_free_coherent(&priv->pdev->dev, sizeof(*ptype_map), ptype_map,
 942                          ptype_map_bus);
 943        return err;
 944}
 945