From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5BF6B42606; Thu, 21 Sep 2023 14:08:49 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2CD08402E9; Thu, 21 Sep 2023 14:08:49 +0200 (CEST) Received: from mail-vk1-f171.google.com (mail-vk1-f171.google.com [209.85.221.171]) by mails.dpdk.org (Postfix) with ESMTP id 4FBBC402C5 for ; Thu, 21 Sep 2023 14:08:48 +0200 (CEST) Received: by mail-vk1-f171.google.com with SMTP id 71dfb90a1353d-490cd6db592so352524e0c.1 for ; Thu, 21 Sep 2023 05:08:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695298127; x=1695902927; darn=dpdk.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=/dPnu1EKgljIE8qAwxDK0MkKGVUdy40PDB5vHKFRXt0=; b=GPvLQm4q4JTwdvYoYj7sY09ZY1S0ra8q6GY0uC9W5azctR9UMT3WZWS5CnOYstsvfZ OIzLyDj8hXru8CC8Pb8Z+4/MdwBa5r3sm23bg/R+nxtSn7yj60OG5TQT+8ypsAg8N/I4 SZCUDd8a27149iggXCrOJAk4CI6eFQUZQUwAQ0artrch0wXyWbzoXMCJtV6geOhHyH4P Mgujel1PwBWpnsorXkv4ZrH9AP5vqpXvvTq887odXYjqi9kbUTw2BvrH+9fg4FbQRjUZ g7D5b1i4Zjz0tKeI57lbfjqbK3QtqD61tbp1VIdnJP0IXIFPPhYm2snsjCK5JiyTVKkD TQtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695298127; x=1695902927; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/dPnu1EKgljIE8qAwxDK0MkKGVUdy40PDB5vHKFRXt0=; b=CU12hSd3PqbxiHCVIP/e2y6MaNC2BltI83MySzCK3i4gagBYgNQk4wLJ0iZAOTEyLq rkc4KoC98ZZNwGk7chn+t7+2VuPYIoDuJhXLROGA3rSeBA1AvHbLpXFrhtp8e17sEOfb seaEH7yFYzHTIUmERB/Uxyl2pUHJl07UVHg9kYQ8RhzuHseFy/o6bgg0x4qmkFOdVbWR XIEGuVl+MrnVD80COevyD2mpXyIHI17xB9QCZQa/kaRX2gJlILtwzz/2/LO4jMfyv2td FaSTmuMM0Pr0VpHQjxa+SN+3Xn0Tj6Xc8GuDwPyuHJ4RfgcBvt293Iat2oMY9W6/U0TM mdWw== X-Gm-Message-State: AOJu0Yw13eLtoofavA3UfOzBOmJwINJLLtTK57t+zAtMsOEMCCGWsiU+ 4Zz9POjmpSdb2ntFRWD5lhp1KD4AB3ZMPDDAebw= X-Google-Smtp-Source: AGHT+IEnd1AmJfspeQVvzNtYW23xMiH7tWt9mPv4t9TG7mXiE6dPUVUcZoZBsdGvJ6aWqxQIOQnMHB7mEc6uCS0J+nk= X-Received: by 2002:a1f:e1c4:0:b0:48d:d09:abb6 with SMTP id y187-20020a1fe1c4000000b0048d0d09abb6mr4585903vkg.6.1695298127556; Thu, 21 Sep 2023 05:08:47 -0700 (PDT) MIME-Version: 1.0 References: <20230830155927.3566-1-syalavarthi@marvell.com> <20230830155927.3566-3-syalavarthi@marvell.com> In-Reply-To: <20230830155927.3566-3-syalavarthi@marvell.com> From: Jerin Jacob Date: Thu, 21 Sep 2023 17:38:20 +0530 Message-ID: Subject: Re: [PATCH v1 02/34] ml/cnxk: drop use of RTE API for firmware read To: Srikanth Yalavarthi , David Marchand Cc: Prince Takkar , dev@dpdk.org, sshankarnara@marvell.com, aprabhu@marvell.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On Wed, Aug 30, 2023 at 9:40=E2=80=AFPM Srikanth Yalavarthi wrote: > > Dropped use of rte_firmware_read API to read ML firmware > binary. When DPDK is built with libarchive aaupport, the > the RTE API assumes the binary file as a compressed > archive. This causes the ML firmware binary to be parsed > incorrectly. + @David Marchand rte_firmware_read() author for his opinions > > Fixes: c29da752ffa8 ("ml/cnxk: support firmware load and device reset") > Cc: syalavarthi@marvell.com > > Signed-off-by: Srikanth Yalavarthi > --- > drivers/ml/cnxk/cn10k_ml_dev.c | 64 +++++++++++++++++++++++++++++++--- > 1 file changed, 60 insertions(+), 4 deletions(-) > > diff --git a/drivers/ml/cnxk/cn10k_ml_dev.c b/drivers/ml/cnxk/cn10k_ml_de= v.c > index e3c2badcef5..b7e6ed9a00e 100644 > --- a/drivers/ml/cnxk/cn10k_ml_dev.c > +++ b/drivers/ml/cnxk/cn10k_ml_dev.c > @@ -2,6 +2,11 @@ > * Copyright (c) 2022 Marvell. > */ > > +#include > +#include > +#include > +#include > + > #include > #include > #include > @@ -61,6 +66,57 @@ static const int valid_ocm_page_size[] =3D {1024, 2048= , 4096, 8192, 16384}; > /* Dummy operations for ML device */ > struct rte_ml_dev_ops ml_dev_dummy_ops =3D {0}; > > +static int > +ml_read_file(const char *file, size_t *size, char **buffer) > +{ > + char *file_buffer =3D NULL; > + struct stat file_stat; > + char *file_map; > + int ret; > + int fd; > + > + fd =3D open(file, O_RDONLY); > + if (fd =3D=3D -1) { > + plt_err("Failed to open file: %s\n", file); > + return -errno; > + } > + > + if (fstat(fd, &file_stat) !=3D 0) { > + plt_err("fstat failed for file: %s\n", file); > + close(fd); > + return -errno; > + } > + > + file_buffer =3D rte_malloc("ml_firmware", file_stat.st_size, PLT_= CACHE_LINE_SIZE); > + if (file_buffer =3D=3D NULL) { > + plt_err("Failed to allocate memory: %s\n", file); > + ret =3D -ENOMEM; > + goto error; > + } > + > + file_map =3D mmap(0, file_stat.st_size, PROT_READ, MAP_PRIVATE, f= d, 0); > + if (file_map =3D=3D MAP_FAILED) { > + plt_err("Failed to map file: %s\n", file); > + ret =3D -errno; > + goto error; > + } > + > + rte_memcpy(file_buffer, file_map, file_stat.st_size); > + munmap(file_map, file_stat.st_size); > + close(fd); > + > + *size =3D file_stat.st_size; > + *buffer =3D file_buffer; > + > + return 0; > + > +error: > + free(file_buffer); > + close(fd); > + > + return ret; > +} > + > static int > parse_string_arg(const char *key __rte_unused, const char *value, void *= extra_args) > { > @@ -736,7 +792,7 @@ cn10k_ml_fw_load(struct cn10k_ml_dev *mldev) > { > const struct plt_memzone *mz; > struct cn10k_ml_fw *fw; > - void *fw_buffer =3D NULL; > + char *fw_buffer =3D NULL; > uint64_t mz_size =3D 0; > uint64_t fw_size =3D 0; > int ret =3D 0; > @@ -746,7 +802,7 @@ cn10k_ml_fw_load(struct cn10k_ml_dev *mldev) > > if (roc_env_is_emulator() || roc_env_is_hw()) { > /* Read firmware image to a buffer */ > - ret =3D rte_firmware_read(fw->path, &fw_buffer, &fw_size)= ; > + ret =3D ml_read_file(fw->path, &fw_size, &fw_buffer); > if ((ret < 0) || (fw_buffer =3D=3D NULL)) { > plt_err("Unable to read firmware data: %s\n", fw-= >path); > return ret; > @@ -763,7 +819,7 @@ cn10k_ml_fw_load(struct cn10k_ml_dev *mldev) > mz =3D plt_memzone_reserve_aligned(FW_MEMZONE_NAME, mz_size, 0, M= L_CN10K_ALIGN_SIZE); > if (mz =3D=3D NULL) { > plt_err("plt_memzone_reserve failed : %s", FW_MEMZONE_NAM= E); > - free(fw_buffer); > + rte_free(fw_buffer); > return -ENOMEM; > } > fw->req =3D mz->addr; > @@ -780,7 +836,7 @@ cn10k_ml_fw_load(struct cn10k_ml_dev *mldev) > if (roc_env_is_emulator() || roc_env_is_hw()) { > fw->data =3D PLT_PTR_ADD(mz->addr, sizeof(struct cn10k_ml= _req)); > ret =3D cn10k_ml_fw_load_cn10ka(fw, fw_buffer, fw_size); > - free(fw_buffer); > + rte_free(fw_buffer); > } else if (roc_env_is_asim()) { > fw->data =3D NULL; > ret =3D cn10k_ml_fw_load_asim(fw); > -- > 2.41.0 >