From nobody Wed Feb 11 12:08:33 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6407AC7EE24 for ; Tue, 9 May 2023 05:15:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234608AbjEIFPH (ORCPT ); Tue, 9 May 2023 01:15:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43366 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234569AbjEIFO4 (ORCPT ); Tue, 9 May 2023 01:14:56 -0400 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8B0837DAD for ; Mon, 8 May 2023 22:14:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683609291; x=1715145291; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=aqWLD7A36wWQjmacfjH5FzsuDyhA+wqIDedurUB7PSc=; b=OPzs9EXpSY6s5qxWhIRxsVc2iITEQzpxDimqlXdVG5tbDeBRh7ltlRVl Y8iquyLbuGf4iAxktFupdFR+J9fBF+auM4hW5gh3pGnVe/7J3TnCB7PAN SHEqFxo+fJ8SGHiku/UkYqaBdoZRdRzK5SWqPQC6oN8SlTgimtoQM4SKe fzV4pJ1u9v/KhkaOZ+WYWkyCyKCnD+lGIFGaA79eDLgGDKyPxxldJGIpK mDjaN0nEOoeDhJZaXxEcMyRes/7TGqkeB0k3x+IrtW+oR1dOCXXZ30R1c +pNzC31WPXbMs6xhDKQJ4glzpY43cvGZcsyE3+3Eg33hlz4jKuykTyYJx Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="339037122" X-IronPort-AV: E=Sophos;i="5.99,261,1677571200"; d="scan'208";a="339037122" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 May 2023 22:14:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="873033251" X-IronPort-AV: E=Sophos;i="5.99,261,1677571200"; d="scan'208";a="873033251" Received: from lucas-s2600cw.jf.intel.com ([10.165.21.196]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 May 2023 22:14:45 -0700 From: Lucas De Marchi To: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Andy Shevchenko , Thomas Gleixner , linux-kernel@vger.kernel.org, Masahiro Yamada , Andrew Morton , Kevin Brodsky , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Jani Nikula , Lucas De Marchi Subject: [PATCH 1/3] drm/amd: Remove wrapper macros over get_u{32,16,8} Date: Mon, 8 May 2023 22:14:01 -0700 Message-Id: <20230509051403.2748545-2-lucas.demarchi@intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230509051403.2748545-1-lucas.demarchi@intel.com> References: <20230509051403.2748545-1-lucas.demarchi@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Both amdgpu and radeon use some wrapper macros over get_u{32,16,8}() functions which end up adding an implicit argument. Instead of using the macros, just call the functions directly without hiding the context that is being passed. This will allow the macros to be used in a more global context like ULL() and UL() currently are. Callers are automatically converted with the following coccinelle script: $ cat utype.cocci virtual patch @@ expression e; @@ ( - U32(e) + get_u32(ctx->ctx->bios, e) | - U16(e) + get_u16(ctx->ctx->bios, e) | - U8(e) + get_u8(ctx->ctx->bios, e) | - CU32(e) + get_u32(ctx->bios, e) | - CU16(e) + get_u16(ctx->bios, e) | - CU8(e) + get_u8(ctx->bios, e) ) $ coccicheck SPFLAGS=3D--in-place MODE=3Dpatch \ COCCI=3Dutype.cocci \ M=3D./drivers/gpu/drm/ Signed-off-by: Lucas De Marchi --- drivers/gpu/drm/amd/amdgpu/atom.c | 212 ++++++++++++------------ drivers/gpu/drm/amd/include/atom-bits.h | 9 +- drivers/gpu/drm/radeon/atom-bits.h | 9 +- drivers/gpu/drm/radeon/atom.c | 209 +++++++++++------------ 4 files changed, 219 insertions(+), 220 deletions(-) diff --git a/drivers/gpu/drm/amd/amdgpu/atom.c b/drivers/gpu/drm/amd/amdgpu= /atom.c index 1c5d9388ad0b..eea49bfb403f 100644 --- a/drivers/gpu/drm/amd/amdgpu/atom.c +++ b/drivers/gpu/drm/amd/amdgpu/atom.c @@ -112,62 +112,62 @@ static uint32_t atom_iio_execute(struct atom_context = *ctx, int base, uint32_t temp =3D 0xCDCDCDCD; =20 while (1) - switch (CU8(base)) { + switch (get_u8(ctx->bios, base)) { case ATOM_IIO_NOP: base++; break; case ATOM_IIO_READ: - temp =3D ctx->card->reg_read(ctx->card, CU16(base + 1)); + temp =3D ctx->card->reg_read(ctx->card, + get_u16(ctx->bios, base + 1)); base +=3D 3; break; case ATOM_IIO_WRITE: - ctx->card->reg_write(ctx->card, CU16(base + 1), temp); + ctx->card->reg_write(ctx->card, + get_u16(ctx->bios, base + 1), + temp); base +=3D 3; break; case ATOM_IIO_CLEAR: temp &=3D - ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << - CU8(base + 2)); + ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << + get_u8(ctx->bios, base + 2)); base +=3D 3; break; case ATOM_IIO_SET: temp |=3D - (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base + - 2); + (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->b= ios, + base + 2); base +=3D 3; break; case ATOM_IIO_MOVE_INDEX: temp &=3D - ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << - CU8(base + 3)); + ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << + get_u8(ctx->bios, base + 3)); temp |=3D - ((index >> CU8(base + 2)) & - (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base + - 3); + ((index >> get_u8(ctx->bios, base + 2)) & + (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx-= >bios, + base + 3); base +=3D 4; break; case ATOM_IIO_MOVE_DATA: temp &=3D - ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << - CU8(base + 3)); + ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << + get_u8(ctx->bios, base + 3)); temp |=3D - ((data >> CU8(base + 2)) & - (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base + - 3); + ((data >> get_u8(ctx->bios, base + 2)) & + (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx-= >bios, + base + 3); base +=3D 4; break; case ATOM_IIO_MOVE_ATTR: temp &=3D - ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << - CU8(base + 3)); + ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << + get_u8(ctx->bios, base + 3)); temp |=3D ((ctx-> - io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 - - CU8 - (base - + - 1)))) - << CU8(base + 3); + io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 - + get_u8(ctx->bios, base + 1)))) + << get_u8(ctx->bios, base + 3); base +=3D 4; break; case ATOM_IIO_END: @@ -187,7 +187,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, align =3D (attr >> 3) & 7; switch (arg) { case ATOM_ARG_REG: - idx =3D U16(*ptr); + idx =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; if (print) DEBUG("REG[0x%04X]", idx); @@ -219,7 +219,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, } break; case ATOM_ARG_PS: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; /* get_unaligned_le32 avoids unaligned accesses from atombios * tables, noticed on a DEC Alpha. */ @@ -228,7 +228,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, DEBUG("PS[0x%02X,0x%04X]", idx, val); break; case ATOM_ARG_WS: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if (print) DEBUG("WS[0x%02X]", idx); @@ -265,7 +265,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, } break; case ATOM_ARG_ID: - idx =3D U16(*ptr); + idx =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; if (print) { if (gctx->data_block) @@ -273,10 +273,10 @@ static uint32_t atom_get_src_int(atom_exec_context *c= tx, uint8_t attr, else DEBUG("ID[0x%04X]", idx); } - val =3D U32(idx + gctx->data_block); + val =3D get_u32(ctx->ctx->bios, idx + gctx->data_block); break; case ATOM_ARG_FB: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n", @@ -290,7 +290,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, case ATOM_ARG_IMM: switch (align) { case ATOM_SRC_DWORD: - val =3D U32(*ptr); + val =3D get_u32(ctx->ctx->bios, *ptr); (*ptr) +=3D 4; if (print) DEBUG("IMM 0x%08X\n", val); @@ -298,7 +298,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, case ATOM_SRC_WORD0: case ATOM_SRC_WORD8: case ATOM_SRC_WORD16: - val =3D U16(*ptr); + val =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; if (print) DEBUG("IMM 0x%04X\n", val); @@ -307,7 +307,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, case ATOM_SRC_BYTE8: case ATOM_SRC_BYTE16: case ATOM_SRC_BYTE24: - val =3D U8(*ptr); + val =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if (print) DEBUG("IMM 0x%02X\n", val); @@ -315,14 +315,14 @@ static uint32_t atom_get_src_int(atom_exec_context *c= tx, uint8_t attr, } return 0; case ATOM_ARG_PLL: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if (print) DEBUG("PLL[0x%02X]", idx); val =3D gctx->card->pll_read(gctx->card, idx); break; case ATOM_ARG_MC: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if (print) DEBUG("MC[0x%02X]", idx); @@ -410,20 +410,20 @@ static uint32_t atom_get_src_direct(atom_exec_context= *ctx, uint8_t align, int * =20 switch (align) { case ATOM_SRC_DWORD: - val =3D U32(*ptr); + val =3D get_u32(ctx->ctx->bios, *ptr); (*ptr) +=3D 4; break; case ATOM_SRC_WORD0: case ATOM_SRC_WORD8: case ATOM_SRC_WORD16: - val =3D U16(*ptr); + val =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; break; case ATOM_SRC_BYTE0: case ATOM_SRC_BYTE8: case ATOM_SRC_BYTE16: case ATOM_SRC_BYTE24: - val =3D U8(*ptr); + val =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; break; } @@ -460,7 +460,7 @@ static void atom_put_dst(atom_exec_context *ctx, int ar= g, uint8_t attr, val |=3D saved; switch (arg) { case ATOM_ARG_REG: - idx =3D U16(*ptr); + idx =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; DEBUG("REG[0x%04X]", idx); idx +=3D gctx->reg_block; @@ -493,13 +493,13 @@ static void atom_put_dst(atom_exec_context *ctx, int = arg, uint8_t attr, } break; case ATOM_ARG_PS: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; DEBUG("PS[0x%02X]", idx); ctx->ps[idx] =3D cpu_to_le32(val); break; case ATOM_ARG_WS: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; DEBUG("WS[0x%02X]", idx); switch (idx) { @@ -532,7 +532,7 @@ static void atom_put_dst(atom_exec_context *ctx, int ar= g, uint8_t attr, } break; case ATOM_ARG_FB: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n", @@ -542,13 +542,13 @@ static void atom_put_dst(atom_exec_context *ctx, int = arg, uint8_t attr, DEBUG("FB[0x%02X]", idx); break; case ATOM_ARG_PLL: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; DEBUG("PLL[0x%02X]", idx); gctx->card->pll_write(gctx->card, idx, val); break; case ATOM_ARG_MC: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; DEBUG("MC[0x%02X]", idx); gctx->card->mc_write(gctx->card, idx, val); @@ -584,7 +584,7 @@ static void atom_put_dst(atom_exec_context *ctx, int ar= g, uint8_t attr, =20 static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -598,7 +598,7 @@ static void atom_op_add(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -617,14 +617,14 @@ static void atom_op_beep(atom_exec_context *ctx, int = *ptr, int arg) =20 static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg) { - int idx =3D U8((*ptr)++); + int idx =3D get_u8(ctx->ctx->bios, (*ptr)++); int r =3D 0; =20 if (idx < ATOM_TABLE_NAMES_CNT) SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]); else SDEBUG(" table: %d\n", idx); - if (U16(ctx->ctx->cmd_table + 4 + 2 * idx)) + if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx)) r =3D amdgpu_atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_= shift); if (r) { ctx->abort =3D true; @@ -633,7 +633,7 @@ static void atom_op_calltable(atom_exec_context *ctx, i= nt *ptr, int arg) =20 static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t saved; int dptr =3D *ptr; attr &=3D 0x38; @@ -645,7 +645,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *= ptr, int arg) =20 static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -659,7 +659,7 @@ static void atom_op_compare(atom_exec_context *ctx, int= *ptr, int arg) =20 static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg) { - unsigned count =3D U8((*ptr)++); + unsigned count =3D get_u8(ctx->ctx->bios, (*ptr)++); SDEBUG(" count: %d\n", count); if (arg =3D=3D ATOM_UNIT_MICROSEC) udelay(count); @@ -671,7 +671,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *= ptr, int arg) =20 static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -689,7 +689,7 @@ static void atom_op_div(atom_exec_context *ctx, int *pt= r, int arg) static void atom_op_div32(atom_exec_context *ctx, int *ptr, int arg) { uint64_t val64; - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -714,7 +714,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg) { - int execute =3D 0, target =3D U16(*ptr); + int execute =3D 0, target =3D get_u16(ctx->ctx->bios, *ptr); unsigned long cjiffies; =20 (*ptr) +=3D 2; @@ -768,7 +768,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *p= tr, int arg) =20 static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, mask, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -785,7 +785,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *p= tr, int arg) =20 static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t src, saved; int dptr =3D *ptr; if (((attr >> 3) & 7) !=3D ATOM_SRC_DWORD) @@ -802,7 +802,7 @@ static void atom_op_move(atom_exec_context *ctx, int *p= tr, int arg) =20 static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -814,7 +814,7 @@ static void atom_op_mul(atom_exec_context *ctx, int *pt= r, int arg) static void atom_op_mul32(atom_exec_context *ctx, int *ptr, int arg) { uint64_t val64; - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -832,7 +832,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -846,7 +846,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr= , int arg) =20 static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t val =3D U8((*ptr)++); + uint8_t val =3D get_u8(ctx->ctx->bios, (*ptr)++); SDEBUG("POST card output: 0x%02X\n", val); } =20 @@ -867,7 +867,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int= *ptr, int arg) =20 static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg) { - int idx =3D U8(*ptr); + int idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; SDEBUG(" block: %d\n", idx); if (!idx) @@ -875,13 +875,14 @@ static void atom_op_setdatablock(atom_exec_context *c= tx, int *ptr, int arg) else if (idx =3D=3D 255) ctx->ctx->data_block =3D ctx->start; else - ctx->ctx->data_block =3D U16(ctx->ctx->data_table + 4 + 2 * idx); + ctx->ctx->data_block =3D get_u16(ctx->ctx->bios, + ctx->ctx->data_table + 4 + 2 * idx); SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block); } =20 static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); SDEBUG(" fb_base: "); ctx->ctx->fb_base =3D atom_get_src(ctx, attr, ptr); } @@ -891,7 +892,7 @@ static void atom_op_setport(atom_exec_context *ctx, int= *ptr, int arg) int port; switch (arg) { case ATOM_PORT_ATI: - port =3D U16(*ptr); + port =3D get_u16(ctx->ctx->bios, *ptr); if (port < ATOM_IO_NAMES_CNT) SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]); else @@ -915,14 +916,14 @@ static void atom_op_setport(atom_exec_context *ctx, i= nt *ptr, int arg) =20 static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg) { - ctx->ctx->reg_block =3D U16(*ptr); + ctx->ctx->reg_block =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block); } =20 static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++), shift; + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++), shift; uint32_t saved, dst; int dptr =3D *ptr; attr &=3D 0x38; @@ -938,7 +939,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, = int *ptr, int arg) =20 static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++), shift; + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++), shift; uint32_t saved, dst; int dptr =3D *ptr; attr &=3D 0x38; @@ -954,7 +955,7 @@ static void atom_op_shift_right(atom_exec_context *ctx,= int *ptr, int arg) =20 static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++), shift; + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++), shift; uint32_t saved, dst; int dptr =3D *ptr; uint32_t dst_align =3D atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3]; @@ -973,7 +974,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++), shift; + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++), shift; uint32_t saved, dst; int dptr =3D *ptr; uint32_t dst_align =3D atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3]; @@ -992,7 +993,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -1006,18 +1007,18 @@ static void atom_op_sub(atom_exec_context *ctx, int= *ptr, int arg) =20 static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t src, val, target; SDEBUG(" switch: "); src =3D atom_get_src(ctx, attr, ptr); - while (U16(*ptr) !=3D ATOM_CASE_END) - if (U8(*ptr) =3D=3D ATOM_CASE_MAGIC) { + while (get_u16(ctx->ctx->bios, *ptr) !=3D ATOM_CASE_END) + if (get_u8(ctx->ctx->bios, *ptr) =3D=3D ATOM_CASE_MAGIC) { (*ptr)++; SDEBUG(" case: "); val =3D atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM, ptr); - target =3D U16(*ptr); + target =3D get_u16(ctx->ctx->bios, *ptr); if (val =3D=3D src) { SDEBUG(" target: %04X\n", target); *ptr =3D ctx->start + target; @@ -1033,7 +1034,7 @@ static void atom_op_switch(atom_exec_context *ctx, in= t *ptr, int arg) =20 static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -1045,7 +1046,7 @@ static void atom_op_test(atom_exec_context *ctx, int = *ptr, int arg) =20 static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -1059,13 +1060,13 @@ static void atom_op_xor(atom_exec_context *ctx, int= *ptr, int arg) =20 static void atom_op_debug(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t val =3D U8((*ptr)++); + uint8_t val =3D get_u8(ctx->ctx->bios, (*ptr)++); SDEBUG("DEBUG output: 0x%02X\n", val); } =20 static void atom_op_processds(atom_exec_context *ctx, int *ptr, int arg) { - uint16_t val =3D U16(*ptr); + uint16_t val =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D val + 2; SDEBUG("PROCESSDS output: 0x%02X\n", val); } @@ -1206,7 +1207,7 @@ static struct { =20 static int amdgpu_atom_execute_table_locked(struct atom_context *ctx, int = index, uint32_t *params) { - int base =3D CU16(ctx->cmd_table + 4 + 2 * index); + int base =3D get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index); int len, ws, ps, ptr; unsigned char op; atom_exec_context ectx; @@ -1215,9 +1216,9 @@ static int amdgpu_atom_execute_table_locked(struct at= om_context *ctx, int index, if (!base) return -EINVAL; =20 - len =3D CU16(base + ATOM_CT_SIZE_PTR); - ws =3D CU8(base + ATOM_CT_WS_PTR); - ps =3D CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK; + len =3D get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR); + ws =3D get_u8(ctx->bios, base + ATOM_CT_WS_PTR); + ps =3D get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK; ptr =3D base + ATOM_CT_CODE_PTR; =20 SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps); @@ -1235,7 +1236,7 @@ static int amdgpu_atom_execute_table_locked(struct at= om_context *ctx, int index, =20 debug_depth++; while (1) { - op =3D CU8(ptr++); + op =3D get_u8(ctx->bios, ptr++); if (op < ATOM_OP_NAMES_CNT) SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1); else @@ -1293,11 +1294,11 @@ static void atom_index_iio(struct atom_context *ctx= , int base) ctx->iio =3D kzalloc(2 * 256, GFP_KERNEL); if (!ctx->iio) return; - while (CU8(base) =3D=3D ATOM_IIO_START) { - ctx->iio[CU8(base + 1)] =3D base + 2; + while (get_u8(ctx->bios, base) =3D=3D ATOM_IIO_START) { + ctx->iio[get_u8(ctx->bios, base + 1)] =3D base + 2; base +=3D 2; - while (CU8(base) !=3D ATOM_IIO_END) - base +=3D atom_iio_len[CU8(base)]; + while (get_u8(ctx->bios, base) !=3D ATOM_IIO_END) + base +=3D atom_iio_len[get_u8(ctx->bios, base)]; base +=3D 3; } } @@ -1472,7 +1473,7 @@ struct atom_context *amdgpu_atom_parse(struct card_in= fo *card, void *bios) ctx->card =3D card; ctx->bios =3D bios; =20 - if (CU16(0) !=3D ATOM_BIOS_MAGIC) { + if (get_u16(ctx->bios, 0) !=3D ATOM_BIOS_MAGIC) { pr_info("Invalid BIOS magic\n"); kfree(ctx); return NULL; @@ -1485,7 +1486,7 @@ struct atom_context *amdgpu_atom_parse(struct card_in= fo *card, void *bios) return NULL; } =20 - base =3D CU16(ATOM_ROM_TABLE_PTR); + base =3D get_u16(ctx->bios, ATOM_ROM_TABLE_PTR); if (strncmp (CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC, strlen(ATOM_ROM_MAGIC))) { @@ -1494,15 +1495,16 @@ struct atom_context *amdgpu_atom_parse(struct card_= info *card, void *bios) return NULL; } =20 - ctx->cmd_table =3D CU16(base + ATOM_ROM_CMD_PTR); - ctx->data_table =3D CU16(base + ATOM_ROM_DATA_PTR); - atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4); + ctx->cmd_table =3D get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR); + ctx->data_table =3D get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR); + atom_index_iio(ctx, + get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4); if (!ctx->iio) { amdgpu_atom_destroy(ctx); return NULL; } =20 - idx =3D CU16(ATOM_ROM_PART_NUMBER_PTR); + idx =3D get_u16(ctx->bios, ATOM_ROM_PART_NUMBER_PTR); if (idx =3D=3D 0) idx =3D 0x80; =20 @@ -1533,18 +1535,18 @@ struct atom_context *amdgpu_atom_parse(struct card_= info *card, void *bios) =20 int amdgpu_atom_asic_init(struct atom_context *ctx) { - int hwi =3D CU16(ctx->data_table + ATOM_DATA_FWI_PTR); + int hwi =3D get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR); uint32_t ps[16]; int ret; =20 memset(ps, 0, 64); =20 - ps[0] =3D cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR)); - ps[1] =3D cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR)); + ps[0] =3D cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR)); + ps[1] =3D cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR)); if (!ps[0] || !ps[1]) return 1; =20 - if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT)) + if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT)) return 1; ret =3D amdgpu_atom_execute_table(ctx, ATOM_CMD_INIT, ps); if (ret) @@ -1566,18 +1568,18 @@ bool amdgpu_atom_parse_data_header(struct atom_cont= ext *ctx, int index, uint16_t *data_start) { int offset =3D index * 2 + 4; - int idx =3D CU16(ctx->data_table + offset); + int idx =3D get_u16(ctx->bios, ctx->data_table + offset); u16 *mdt =3D (u16 *)(ctx->bios + ctx->data_table + 4); =20 if (!mdt[index]) return false; =20 if (size) - *size =3D CU16(idx); + *size =3D get_u16(ctx->bios, idx); if (frev) - *frev =3D CU8(idx + 2); + *frev =3D get_u8(ctx->bios, idx + 2); if (crev) - *crev =3D CU8(idx + 3); + *crev =3D get_u8(ctx->bios, idx + 3); *data_start =3D idx; return true; } @@ -1586,16 +1588,16 @@ bool amdgpu_atom_parse_cmd_header(struct atom_conte= xt *ctx, int index, uint8_t * uint8_t *crev) { int offset =3D index * 2 + 4; - int idx =3D CU16(ctx->cmd_table + offset); + int idx =3D get_u16(ctx->bios, ctx->cmd_table + offset); u16 *mct =3D (u16 *)(ctx->bios + ctx->cmd_table + 4); =20 if (!mct[index]) return false; =20 if (frev) - *frev =3D CU8(idx + 2); + *frev =3D get_u8(ctx->bios, idx + 2); if (crev) - *crev =3D CU8(idx + 3); + *crev =3D get_u8(ctx->bios, idx + 3); return true; } =20 diff --git a/drivers/gpu/drm/amd/include/atom-bits.h b/drivers/gpu/drm/amd/= include/atom-bits.h index e8fae5c77514..28c196a91221 100644 --- a/drivers/gpu/drm/amd/include/atom-bits.h +++ b/drivers/gpu/drm/amd/include/atom-bits.h @@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr) { return ((unsigned char *)bios)[ptr]; } -#define U8(ptr) get_u8(ctx->ctx->bios, (ptr)) -#define CU8(ptr) get_u8(ctx->bios, (ptr)) + static inline uint16_t get_u16(void *bios, int ptr) { return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8); } -#define U16(ptr) get_u16(ctx->ctx->bios, (ptr)) -#define CU16(ptr) get_u16(ctx->bios, (ptr)) + static inline uint32_t get_u32(void *bios, int ptr) { return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16); } -#define U32(ptr) get_u32(ctx->ctx->bios, (ptr)) -#define CU32(ptr) get_u32(ctx->bios, (ptr)) + #define CSTR(ptr) (((char *)(ctx->bios))+(ptr)) =20 #endif diff --git a/drivers/gpu/drm/radeon/atom-bits.h b/drivers/gpu/drm/radeon/at= om-bits.h index e8fae5c77514..28c196a91221 100644 --- a/drivers/gpu/drm/radeon/atom-bits.h +++ b/drivers/gpu/drm/radeon/atom-bits.h @@ -29,20 +29,17 @@ static inline uint8_t get_u8(void *bios, int ptr) { return ((unsigned char *)bios)[ptr]; } -#define U8(ptr) get_u8(ctx->ctx->bios, (ptr)) -#define CU8(ptr) get_u8(ctx->bios, (ptr)) + static inline uint16_t get_u16(void *bios, int ptr) { return get_u8(bios ,ptr)|(((uint16_t)get_u8(bios, ptr+1))<<8); } -#define U16(ptr) get_u16(ctx->ctx->bios, (ptr)) -#define CU16(ptr) get_u16(ctx->bios, (ptr)) + static inline uint32_t get_u32(void *bios, int ptr) { return get_u16(bios, ptr)|(((uint32_t)get_u16(bios, ptr+2))<<16); } -#define U32(ptr) get_u32(ctx->ctx->bios, (ptr)) -#define CU32(ptr) get_u32(ctx->bios, (ptr)) + #define CSTR(ptr) (((char *)(ctx->bios))+(ptr)) =20 #endif diff --git a/drivers/gpu/drm/radeon/atom.c b/drivers/gpu/drm/radeon/atom.c index c1bbfbe28bda..1c54d52c4cb0 100644 --- a/drivers/gpu/drm/radeon/atom.c +++ b/drivers/gpu/drm/radeon/atom.c @@ -112,64 +112,65 @@ static uint32_t atom_iio_execute(struct atom_context = *ctx, int base, uint32_t temp =3D 0xCDCDCDCD; =20 while (1) - switch (CU8(base)) { + switch (get_u8(ctx->bios, base)) { case ATOM_IIO_NOP: base++; break; case ATOM_IIO_READ: - temp =3D ctx->card->ioreg_read(ctx->card, CU16(base + 1)); + temp =3D ctx->card->ioreg_read(ctx->card, + get_u16(ctx->bios, base + 1)); base +=3D 3; break; case ATOM_IIO_WRITE: if (rdev->family =3D=3D CHIP_RV515) - (void)ctx->card->ioreg_read(ctx->card, CU16(base + 1)); - ctx->card->ioreg_write(ctx->card, CU16(base + 1), temp); + (void)ctx->card->ioreg_read(ctx->card, + get_u16(ctx->bios, base + 1)); + ctx->card->ioreg_write(ctx->card, + get_u16(ctx->bios, base + 1), + temp); base +=3D 3; break; case ATOM_IIO_CLEAR: temp &=3D - ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << - CU8(base + 2)); + ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << + get_u8(ctx->bios, base + 2)); base +=3D 3; break; case ATOM_IIO_SET: temp |=3D - (0xFFFFFFFF >> (32 - CU8(base + 1))) << CU8(base + - 2); + (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << get_u8(ctx->b= ios, + base + 2); base +=3D 3; break; case ATOM_IIO_MOVE_INDEX: temp &=3D - ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << - CU8(base + 3)); + ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << + get_u8(ctx->bios, base + 3)); temp |=3D - ((index >> CU8(base + 2)) & - (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base + - 3); + ((index >> get_u8(ctx->bios, base + 2)) & + (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx-= >bios, + base + 3); base +=3D 4; break; case ATOM_IIO_MOVE_DATA: temp &=3D - ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << - CU8(base + 3)); + ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << + get_u8(ctx->bios, base + 3)); temp |=3D - ((data >> CU8(base + 2)) & - (0xFFFFFFFF >> (32 - CU8(base + 1)))) << CU8(base + - 3); + ((data >> get_u8(ctx->bios, base + 2)) & + (0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1)))) << get_u8(ctx-= >bios, + base + 3); base +=3D 4; break; case ATOM_IIO_MOVE_ATTR: temp &=3D - ~((0xFFFFFFFF >> (32 - CU8(base + 1))) << - CU8(base + 3)); + ~((0xFFFFFFFF >> (32 - get_u8(ctx->bios, base + 1))) << + get_u8(ctx->bios, base + 3)); temp |=3D ((ctx-> - io_attr >> CU8(base + 2)) & (0xFFFFFFFF >> (32 - - CU8 - (base - + - 1)))) - << CU8(base + 3); + io_attr >> get_u8(ctx->bios, base + 2)) & (0xFFFFFFFF >> (32 - + get_u8(ctx->bios, base + 1)))) + << get_u8(ctx->bios, base + 3); base +=3D 4; break; case ATOM_IIO_END: @@ -189,7 +190,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, align =3D (attr >> 3) & 7; switch (arg) { case ATOM_ARG_REG: - idx =3D U16(*ptr); + idx =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; if (print) DEBUG("REG[0x%04X]", idx); @@ -221,7 +222,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, } break; case ATOM_ARG_PS: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; /* get_unaligned_le32 avoids unaligned accesses from atombios * tables, noticed on a DEC Alpha. */ @@ -230,7 +231,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, DEBUG("PS[0x%02X,0x%04X]", idx, val); break; case ATOM_ARG_WS: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if (print) DEBUG("WS[0x%02X]", idx); @@ -267,7 +268,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, } break; case ATOM_ARG_ID: - idx =3D U16(*ptr); + idx =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; if (print) { if (gctx->data_block) @@ -275,10 +276,10 @@ static uint32_t atom_get_src_int(atom_exec_context *c= tx, uint8_t attr, else DEBUG("ID[0x%04X]", idx); } - val =3D U32(idx + gctx->data_block); + val =3D get_u32(ctx->ctx->bios, idx + gctx->data_block); break; case ATOM_ARG_FB: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { DRM_ERROR("ATOM: fb read beyond scratch region: %d vs. %d\n", @@ -292,7 +293,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, case ATOM_ARG_IMM: switch (align) { case ATOM_SRC_DWORD: - val =3D U32(*ptr); + val =3D get_u32(ctx->ctx->bios, *ptr); (*ptr) +=3D 4; if (print) DEBUG("IMM 0x%08X\n", val); @@ -300,7 +301,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, case ATOM_SRC_WORD0: case ATOM_SRC_WORD8: case ATOM_SRC_WORD16: - val =3D U16(*ptr); + val =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; if (print) DEBUG("IMM 0x%04X\n", val); @@ -309,7 +310,7 @@ static uint32_t atom_get_src_int(atom_exec_context *ctx= , uint8_t attr, case ATOM_SRC_BYTE8: case ATOM_SRC_BYTE16: case ATOM_SRC_BYTE24: - val =3D U8(*ptr); + val =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if (print) DEBUG("IMM 0x%02X\n", val); @@ -317,14 +318,14 @@ static uint32_t atom_get_src_int(atom_exec_context *c= tx, uint8_t attr, } return 0; case ATOM_ARG_PLL: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if (print) DEBUG("PLL[0x%02X]", idx); val =3D gctx->card->pll_read(gctx->card, idx); break; case ATOM_ARG_MC: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if (print) DEBUG("MC[0x%02X]", idx); @@ -412,20 +413,20 @@ static uint32_t atom_get_src_direct(atom_exec_context= *ctx, uint8_t align, int * =20 switch (align) { case ATOM_SRC_DWORD: - val =3D U32(*ptr); + val =3D get_u32(ctx->ctx->bios, *ptr); (*ptr) +=3D 4; break; case ATOM_SRC_WORD0: case ATOM_SRC_WORD8: case ATOM_SRC_WORD16: - val =3D U16(*ptr); + val =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; break; case ATOM_SRC_BYTE0: case ATOM_SRC_BYTE8: case ATOM_SRC_BYTE16: case ATOM_SRC_BYTE24: - val =3D U8(*ptr); + val =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; break; } @@ -462,7 +463,7 @@ static void atom_put_dst(atom_exec_context *ctx, int ar= g, uint8_t attr, val |=3D saved; switch (arg) { case ATOM_ARG_REG: - idx =3D U16(*ptr); + idx =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; DEBUG("REG[0x%04X]", idx); idx +=3D gctx->reg_block; @@ -495,13 +496,13 @@ static void atom_put_dst(atom_exec_context *ctx, int = arg, uint8_t attr, } break; case ATOM_ARG_PS: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; DEBUG("PS[0x%02X]", idx); ctx->ps[idx] =3D cpu_to_le32(val); break; case ATOM_ARG_WS: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; DEBUG("WS[0x%02X]", idx); switch (idx) { @@ -534,7 +535,7 @@ static void atom_put_dst(atom_exec_context *ctx, int ar= g, uint8_t attr, } break; case ATOM_ARG_FB: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; if ((gctx->fb_base + (idx * 4)) > gctx->scratch_size_bytes) { DRM_ERROR("ATOM: fb write beyond scratch region: %d vs. %d\n", @@ -544,13 +545,13 @@ static void atom_put_dst(atom_exec_context *ctx, int = arg, uint8_t attr, DEBUG("FB[0x%02X]", idx); break; case ATOM_ARG_PLL: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; DEBUG("PLL[0x%02X]", idx); gctx->card->pll_write(gctx->card, idx, val); break; case ATOM_ARG_MC: - idx =3D U8(*ptr); + idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; DEBUG("MC[0x%02X]", idx); gctx->card->mc_write(gctx->card, idx, val); @@ -586,7 +587,7 @@ static void atom_put_dst(atom_exec_context *ctx, int ar= g, uint8_t attr, =20 static void atom_op_add(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -600,7 +601,7 @@ static void atom_op_add(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_and(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -619,14 +620,14 @@ static void atom_op_beep(atom_exec_context *ctx, int = *ptr, int arg) =20 static void atom_op_calltable(atom_exec_context *ctx, int *ptr, int arg) { - int idx =3D U8((*ptr)++); + int idx =3D get_u8(ctx->ctx->bios, (*ptr)++); int r =3D 0; =20 if (idx < ATOM_TABLE_NAMES_CNT) SDEBUG(" table: %d (%s)\n", idx, atom_table_names[idx]); else SDEBUG(" table: %d\n", idx); - if (U16(ctx->ctx->cmd_table + 4 + 2 * idx)) + if (get_u16(ctx->ctx->bios, ctx->ctx->cmd_table + 4 + 2 * idx)) r =3D atom_execute_table_locked(ctx->ctx, idx, ctx->ps + ctx->ps_shift); if (r) { ctx->abort =3D true; @@ -635,7 +636,7 @@ static void atom_op_calltable(atom_exec_context *ctx, i= nt *ptr, int arg) =20 static void atom_op_clear(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t saved; int dptr =3D *ptr; attr &=3D 0x38; @@ -647,7 +648,7 @@ static void atom_op_clear(atom_exec_context *ctx, int *= ptr, int arg) =20 static void atom_op_compare(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -661,7 +662,7 @@ static void atom_op_compare(atom_exec_context *ctx, int= *ptr, int arg) =20 static void atom_op_delay(atom_exec_context *ctx, int *ptr, int arg) { - unsigned count =3D U8((*ptr)++); + unsigned count =3D get_u8(ctx->ctx->bios, (*ptr)++); SDEBUG(" count: %d\n", count); if (arg =3D=3D ATOM_UNIT_MICROSEC) udelay(count); @@ -673,7 +674,7 @@ static void atom_op_delay(atom_exec_context *ctx, int *= ptr, int arg) =20 static void atom_op_div(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -695,7 +696,7 @@ static void atom_op_eot(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_jump(atom_exec_context *ctx, int *ptr, int arg) { - int execute =3D 0, target =3D U16(*ptr); + int execute =3D 0, target =3D get_u16(ctx->ctx->bios, *ptr); unsigned long cjiffies; =20 (*ptr) +=3D 2; @@ -748,7 +749,7 @@ static void atom_op_jump(atom_exec_context *ctx, int *p= tr, int arg) =20 static void atom_op_mask(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, mask, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -765,7 +766,7 @@ static void atom_op_mask(atom_exec_context *ctx, int *p= tr, int arg) =20 static void atom_op_move(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t src, saved; int dptr =3D *ptr; if (((attr >> 3) & 7) !=3D ATOM_SRC_DWORD) @@ -782,7 +783,7 @@ static void atom_op_move(atom_exec_context *ctx, int *p= tr, int arg) =20 static void atom_op_mul(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -798,7 +799,7 @@ static void atom_op_nop(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_or(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -812,7 +813,7 @@ static void atom_op_or(atom_exec_context *ctx, int *ptr= , int arg) =20 static void atom_op_postcard(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t val =3D U8((*ptr)++); + uint8_t val =3D get_u8(ctx->ctx->bios, (*ptr)++); SDEBUG("POST card output: 0x%02X\n", val); } =20 @@ -833,7 +834,7 @@ static void atom_op_savereg(atom_exec_context *ctx, int= *ptr, int arg) =20 static void atom_op_setdatablock(atom_exec_context *ctx, int *ptr, int arg) { - int idx =3D U8(*ptr); + int idx =3D get_u8(ctx->ctx->bios, *ptr); (*ptr)++; SDEBUG(" block: %d\n", idx); if (!idx) @@ -841,13 +842,14 @@ static void atom_op_setdatablock(atom_exec_context *c= tx, int *ptr, int arg) else if (idx =3D=3D 255) ctx->ctx->data_block =3D ctx->start; else - ctx->ctx->data_block =3D U16(ctx->ctx->data_table + 4 + 2 * idx); + ctx->ctx->data_block =3D get_u16(ctx->ctx->bios, + ctx->ctx->data_table + 4 + 2 * idx); SDEBUG(" base: 0x%04X\n", ctx->ctx->data_block); } =20 static void atom_op_setfbbase(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); SDEBUG(" fb_base: "); ctx->ctx->fb_base =3D atom_get_src(ctx, attr, ptr); } @@ -857,7 +859,7 @@ static void atom_op_setport(atom_exec_context *ctx, int= *ptr, int arg) int port; switch (arg) { case ATOM_PORT_ATI: - port =3D U16(*ptr); + port =3D get_u16(ctx->ctx->bios, *ptr); if (port < ATOM_IO_NAMES_CNT) SDEBUG(" port: %d (%s)\n", port, atom_io_names[port]); else @@ -881,14 +883,14 @@ static void atom_op_setport(atom_exec_context *ctx, i= nt *ptr, int arg) =20 static void atom_op_setregblock(atom_exec_context *ctx, int *ptr, int arg) { - ctx->ctx->reg_block =3D U16(*ptr); + ctx->ctx->reg_block =3D get_u16(ctx->ctx->bios, *ptr); (*ptr) +=3D 2; SDEBUG(" base: 0x%04X\n", ctx->ctx->reg_block); } =20 static void atom_op_shift_left(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++), shift; + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++), shift; uint32_t saved, dst; int dptr =3D *ptr; attr &=3D 0x38; @@ -904,7 +906,7 @@ static void atom_op_shift_left(atom_exec_context *ctx, = int *ptr, int arg) =20 static void atom_op_shift_right(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++), shift; + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++), shift; uint32_t saved, dst; int dptr =3D *ptr; attr &=3D 0x38; @@ -920,7 +922,7 @@ static void atom_op_shift_right(atom_exec_context *ctx,= int *ptr, int arg) =20 static void atom_op_shl(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++), shift; + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++), shift; uint32_t saved, dst; int dptr =3D *ptr; uint32_t dst_align =3D atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3]; @@ -939,7 +941,7 @@ static void atom_op_shl(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_shr(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++), shift; + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++), shift; uint32_t saved, dst; int dptr =3D *ptr; uint32_t dst_align =3D atom_dst_to_src[(attr >> 3) & 7][(attr >> 6) & 3]; @@ -958,7 +960,7 @@ static void atom_op_shr(atom_exec_context *ctx, int *pt= r, int arg) =20 static void atom_op_sub(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -972,18 +974,18 @@ static void atom_op_sub(atom_exec_context *ctx, int *= ptr, int arg) =20 static void atom_op_switch(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t src, val, target; SDEBUG(" switch: "); src =3D atom_get_src(ctx, attr, ptr); - while (U16(*ptr) !=3D ATOM_CASE_END) - if (U8(*ptr) =3D=3D ATOM_CASE_MAGIC) { + while (get_u16(ctx->ctx->bios, *ptr) !=3D ATOM_CASE_END) + if (get_u8(ctx->ctx->bios, *ptr) =3D=3D ATOM_CASE_MAGIC) { (*ptr)++; SDEBUG(" case: "); val =3D atom_get_src(ctx, (attr & 0x38) | ATOM_ARG_IMM, ptr); - target =3D U16(*ptr); + target =3D get_u16(ctx->ctx->bios, *ptr); if (val =3D=3D src) { SDEBUG(" target: %04X\n", target); *ptr =3D ctx->start + target; @@ -999,7 +1001,7 @@ static void atom_op_switch(atom_exec_context *ctx, int= *ptr, int arg) =20 static void atom_op_test(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src; SDEBUG(" src1: "); dst =3D atom_get_dst(ctx, arg, attr, ptr, NULL, 1); @@ -1011,7 +1013,7 @@ static void atom_op_test(atom_exec_context *ctx, int = *ptr, int arg) =20 static void atom_op_xor(atom_exec_context *ctx, int *ptr, int arg) { - uint8_t attr =3D U8((*ptr)++); + uint8_t attr =3D get_u8(ctx->ctx->bios, (*ptr)++); uint32_t dst, src, saved; int dptr =3D *ptr; SDEBUG(" dst: "); @@ -1158,7 +1160,7 @@ atom_op_debug, 0},}; =20 static int atom_execute_table_locked(struct atom_context *ctx, int index, = uint32_t * params) { - int base =3D CU16(ctx->cmd_table + 4 + 2 * index); + int base =3D get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * index); int len, ws, ps, ptr; unsigned char op; atom_exec_context ectx; @@ -1167,9 +1169,9 @@ static int atom_execute_table_locked(struct atom_cont= ext *ctx, int index, uint32 if (!base) return -EINVAL; =20 - len =3D CU16(base + ATOM_CT_SIZE_PTR); - ws =3D CU8(base + ATOM_CT_WS_PTR); - ps =3D CU8(base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK; + len =3D get_u16(ctx->bios, base + ATOM_CT_SIZE_PTR); + ws =3D get_u8(ctx->bios, base + ATOM_CT_WS_PTR); + ps =3D get_u8(ctx->bios, base + ATOM_CT_PS_PTR) & ATOM_CT_PS_MASK; ptr =3D base + ATOM_CT_CODE_PTR; =20 SDEBUG(">> execute %04X (len %d, WS %d, PS %d)\n", base, len, ws, ps); @@ -1187,7 +1189,7 @@ static int atom_execute_table_locked(struct atom_cont= ext *ctx, int index, uint32 =20 debug_depth++; while (1) { - op =3D CU8(ptr++); + op =3D get_u8(ctx->bios, ptr++); if (op < ATOM_OP_NAMES_CNT) SDEBUG("%s @ 0x%04X\n", atom_op_names[op], ptr - 1); else @@ -1253,11 +1255,11 @@ static void atom_index_iio(struct atom_context *ctx= , int base) ctx->iio =3D kzalloc(2 * 256, GFP_KERNEL); if (!ctx->iio) return; - while (CU8(base) =3D=3D ATOM_IIO_START) { - ctx->iio[CU8(base + 1)] =3D base + 2; + while (get_u8(ctx->bios, base) =3D=3D ATOM_IIO_START) { + ctx->iio[get_u8(ctx->bios, base + 1)] =3D base + 2; base +=3D 2; - while (CU8(base) !=3D ATOM_IIO_END) - base +=3D atom_iio_len[CU8(base)]; + while (get_u8(ctx->bios, base) !=3D ATOM_IIO_END) + base +=3D atom_iio_len[get_u8(ctx->bios, base)]; base +=3D 3; } } @@ -1277,7 +1279,7 @@ struct atom_context *atom_parse(struct card_info *car= d, void *bios) ctx->card =3D card; ctx->bios =3D bios; =20 - if (CU16(0) !=3D ATOM_BIOS_MAGIC) { + if (get_u16(ctx->bios, 0) !=3D ATOM_BIOS_MAGIC) { pr_info("Invalid BIOS magic\n"); kfree(ctx); return NULL; @@ -1290,7 +1292,7 @@ struct atom_context *atom_parse(struct card_info *car= d, void *bios) return NULL; } =20 - base =3D CU16(ATOM_ROM_TABLE_PTR); + base =3D get_u16(ctx->bios, ATOM_ROM_TABLE_PTR); if (strncmp (CSTR(base + ATOM_ROM_MAGIC_PTR), ATOM_ROM_MAGIC, strlen(ATOM_ROM_MAGIC))) { @@ -1299,15 +1301,16 @@ struct atom_context *atom_parse(struct card_info *c= ard, void *bios) return NULL; } =20 - ctx->cmd_table =3D CU16(base + ATOM_ROM_CMD_PTR); - ctx->data_table =3D CU16(base + ATOM_ROM_DATA_PTR); - atom_index_iio(ctx, CU16(ctx->data_table + ATOM_DATA_IIO_PTR) + 4); + ctx->cmd_table =3D get_u16(ctx->bios, base + ATOM_ROM_CMD_PTR); + ctx->data_table =3D get_u16(ctx->bios, base + ATOM_ROM_DATA_PTR); + atom_index_iio(ctx, + get_u16(ctx->bios, ctx->data_table + ATOM_DATA_IIO_PTR) + 4); if (!ctx->iio) { atom_destroy(ctx); return NULL; } =20 - str =3D CSTR(CU16(base + ATOM_ROM_MSG_PTR)); + str =3D CSTR(get_u16(ctx->bios, base + ATOM_ROM_MSG_PTR)); while (*str && ((*str =3D=3D '\n') || (*str =3D=3D '\r'))) str++; /* name string isn't always 0 terminated */ @@ -1326,18 +1329,18 @@ struct atom_context *atom_parse(struct card_info *c= ard, void *bios) int atom_asic_init(struct atom_context *ctx) { struct radeon_device *rdev =3D ctx->card->dev->dev_private; - int hwi =3D CU16(ctx->data_table + ATOM_DATA_FWI_PTR); + int hwi =3D get_u16(ctx->bios, ctx->data_table + ATOM_DATA_FWI_PTR); uint32_t ps[16]; int ret; =20 memset(ps, 0, 64); =20 - ps[0] =3D cpu_to_le32(CU32(hwi + ATOM_FWI_DEFSCLK_PTR)); - ps[1] =3D cpu_to_le32(CU32(hwi + ATOM_FWI_DEFMCLK_PTR)); + ps[0] =3D cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFSCLK_PTR)); + ps[1] =3D cpu_to_le32(get_u32(ctx->bios, hwi + ATOM_FWI_DEFMCLK_PTR)); if (!ps[0] || !ps[1]) return 1; =20 - if (!CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT)) + if (!get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_INIT)) return 1; ret =3D atom_execute_table(ctx, ATOM_CMD_INIT, ps); if (ret) @@ -1346,7 +1349,7 @@ int atom_asic_init(struct atom_context *ctx) memset(ps, 0, 64); =20 if (rdev->family < CHIP_R600) { - if (CU16(ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL)) + if (get_u16(ctx->bios, ctx->cmd_table + 4 + 2 * ATOM_CMD_SPDFANCNTL)) atom_execute_table(ctx, ATOM_CMD_SPDFANCNTL, ps); } return ret; @@ -1363,18 +1366,18 @@ bool atom_parse_data_header(struct atom_context *ct= x, int index, uint16_t * data_start) { int offset =3D index * 2 + 4; - int idx =3D CU16(ctx->data_table + offset); + int idx =3D get_u16(ctx->bios, ctx->data_table + offset); u16 *mdt =3D (u16 *)(ctx->bios + ctx->data_table + 4); =20 if (!mdt[index]) return false; =20 if (size) - *size =3D CU16(idx); + *size =3D get_u16(ctx->bios, idx); if (frev) - *frev =3D CU8(idx + 2); + *frev =3D get_u8(ctx->bios, idx + 2); if (crev) - *crev =3D CU8(idx + 3); + *crev =3D get_u8(ctx->bios, idx + 3); *data_start =3D idx; return true; } @@ -1383,16 +1386,16 @@ bool atom_parse_cmd_header(struct atom_context *ctx= , int index, uint8_t * frev, uint8_t * crev) { int offset =3D index * 2 + 4; - int idx =3D CU16(ctx->cmd_table + offset); + int idx =3D get_u16(ctx->bios, ctx->cmd_table + offset); u16 *mct =3D (u16 *)(ctx->bios + ctx->cmd_table + 4); =20 if (!mct[index]) return false; =20 if (frev) - *frev =3D CU8(idx + 2); + *frev =3D get_u8(ctx->bios, idx + 2); if (crev) - *crev =3D CU8(idx + 3); + *crev =3D get_u8(ctx->bios, idx + 3); return true; } =20 --=20 2.40.1 From nobody Wed Feb 11 12:08:33 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 233C3C7EE24 for ; Tue, 9 May 2023 05:14:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234568AbjEIFO4 (ORCPT ); Tue, 9 May 2023 01:14:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229729AbjEIFOv (ORCPT ); Tue, 9 May 2023 01:14:51 -0400 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 55F179025 for ; Mon, 8 May 2023 22:14:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683609290; x=1715145290; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Ci3h/ZFdl5D0Hl7kzFcbanHfMsv6+NX1ka7tFtfJ1yc=; b=XM+C5mHrL2DPvDQgjNznPzhQDBSw0B920c1CTHF3/FsyjEyf8BHdLANb 1VVasaZ/S0nI1nMziWulXjB0ioRmOQBpmrgHmXgVvXTG13RjeVGy7XAji Xqkrj1gOqrpxz9RCQTTdHqrdvPZbzhNX0DnHHKiq/kKQB9kX6Eejs5OMu K+6dFn6spZ69ztXXGuQHOUwBYUCWvlxN+kr5QX+fgToF6ZtUQqrgoKFIR 6XaENbIjQEymYGoAxrK7/m9cZ9+qJN5Tf0JLzxo9/CGmuclOD6FTV7qz1 d6jEzUmMfZeQAAUyb09Aw2yJFngvOqTmGhd/sBS2JQZHl8d88TIYpF53L Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="339037109" X-IronPort-AV: E=Sophos;i="5.99,261,1677571200"; d="scan'208";a="339037109" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 May 2023 22:14:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="873033253" X-IronPort-AV: E=Sophos;i="5.99,261,1677571200"; d="scan'208";a="873033253" Received: from lucas-s2600cw.jf.intel.com ([10.165.21.196]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 May 2023 22:14:45 -0700 From: Lucas De Marchi To: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Andy Shevchenko , Thomas Gleixner , linux-kernel@vger.kernel.org, Masahiro Yamada , Andrew Morton , Kevin Brodsky , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Jani Nikula , Lucas De Marchi Subject: [PATCH 2/3] linux/bits.h: Add fixed-width GENMASK and BIT macros Date: Mon, 8 May 2023 22:14:02 -0700 Message-Id: <20230509051403.2748545-3-lucas.demarchi@intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230509051403.2748545-1-lucas.demarchi@intel.com> References: <20230509051403.2748545-1-lucas.demarchi@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add GENMASK_U32(), GENMASK_U16() and GENMASK_U8() macros to create masks for fixed-width types and also the corresponding BIT_U32(), BIT_U16() and BIT_U8(). All of those depend on a new "U" suffix added to the integer constant. Due to naming clashes it's better to call the macro U32. Since C doesn't have a proper suffix for short and char types, the U16 and U18 variants just use U32 with one additional check in the BIT_* macros to make sure the compiler gives an error when the those types overflow. The BIT_U16() and BIT_U8() need the help of GENMASK_INPUT_CHECK(), as otherwise they would allow an invalid bit to be passed. Hence implement them in include/linux/bits.h rather than together with the other BIT* variants. The following test file is is used to test this: $ cat mask.c #include #include static const u32 a =3D GENMASK_U32(31, 0); static const u16 b =3D GENMASK_U16(15, 0); static const u8 c =3D GENMASK_U8(7, 0); static const u32 x =3D BIT_U32(31); static const u16 y =3D BIT_U16(15); static const u8 z =3D BIT_U8(7); #if FAIL static const u32 a2 =3D GENMASK_U32(32, 0); static const u16 b2 =3D GENMASK_U16(16, 0); static const u8 c2 =3D GENMASK_U8(8, 0); static const u32 x2 =3D BIT_U32(32); static const u16 y2 =3D BIT_U16(16); static const u8 z2 =3D BIT_U8(8); #endif Signed-off-by: Lucas De Marchi --- include/linux/bits.h | 22 ++++++++++++++++++++++ include/uapi/linux/const.h | 2 ++ include/vdso/const.h | 1 + 3 files changed, 25 insertions(+) diff --git a/include/linux/bits.h b/include/linux/bits.h index 7c0cf5031abe..ff4786c99b8c 100644 --- a/include/linux/bits.h +++ b/include/linux/bits.h @@ -42,4 +42,26 @@ #define GENMASK_ULL(h, l) \ (GENMASK_INPUT_CHECK(h, l) + __GENMASK_ULL(h, l)) =20 +#define __GENMASK_U32(h, l) \ + (((~U32(0)) - (U32(1) << (l)) + 1) & \ + (~U32(0) >> (32 - 1 - (h)))) +#define GENMASK_U32(h, l) \ + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U32(h, l)) + +#define __GENMASK_U16(h, l) \ + ((U32(0xffff) - (U32(1) << (l)) + 1) & \ + (U32(0xffff) >> (16 - 1 - (h)))) +#define GENMASK_U16(h, l) \ + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U16(h, l)) + +#define __GENMASK_U8(h, l) \ + (((U32(0xff)) - (U32(1) << (l)) + 1) & \ + (U32(0xff) >> (8 - 1 - (h)))) +#define GENMASK_U8(h, l) \ + (GENMASK_INPUT_CHECK(h, l) + __GENMASK_U8(h, l)) + +#define BIT_U32(nr) _BITU32(nr) +#define BIT_U16(nr) (GENMASK_INPUT_CHECK(16 - 1, nr) + (U32(1) << (nr))) +#define BIT_U8(nr) (GENMASK_INPUT_CHECK(32 - 1, nr) + (U32(1) << (nr))) + #endif /* __LINUX_BITS_H */ diff --git a/include/uapi/linux/const.h b/include/uapi/linux/const.h index a429381e7ca5..3a4e152520f4 100644 --- a/include/uapi/linux/const.h +++ b/include/uapi/linux/const.h @@ -22,9 +22,11 @@ #define _AT(T,X) ((T)(X)) #endif =20 +#define _U32(x) (_AC(x, U)) #define _UL(x) (_AC(x, UL)) #define _ULL(x) (_AC(x, ULL)) =20 +#define _BITU32(x) (_U32(1) << (x)) #define _BITUL(x) (_UL(1) << (x)) #define _BITULL(x) (_ULL(1) << (x)) =20 diff --git a/include/vdso/const.h b/include/vdso/const.h index 94b385ad438d..417384a9795b 100644 --- a/include/vdso/const.h +++ b/include/vdso/const.h @@ -4,6 +4,7 @@ =20 #include =20 +#define U32(x) (_U32(x)) #define UL(x) (_UL(x)) #define ULL(x) (_ULL(x)) =20 --=20 2.40.1 From nobody Wed Feb 11 12:08:33 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64AFEC7EE2A for ; Tue, 9 May 2023 05:15:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234598AbjEIFO7 (ORCPT ); Tue, 9 May 2023 01:14:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43342 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234528AbjEIFOw (ORCPT ); Tue, 9 May 2023 01:14:52 -0400 Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 586D99028 for ; Mon, 8 May 2023 22:14:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1683609291; x=1715145291; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/zV+bBMFzqzEbY+zzFUi37/thW9CxZ9azFDevSUQdV0=; b=EJ0ErFeEMyLQqq7fhYPEDJ3JavD+UZ6nsYN0jo+wFtG/8j9vC3B4qCKO q5eDVBBu88+Jn7ei73QVeKL0UglOiHpHGEFoUa974ZbJS5fO/EdV9nAgW 280en2mHw28wbh+QE5u/23rPriVgzNbyd9UA8ZV1VUhBYJrFR+EG8FcMO i6SdvdGPFADoE6YEQu9W2MvfPYPmmLjvuAKzdyOMfdCX+kqkFN0A2gz2h mvVYNCDhydf6CT+21fdBcPsddhaSuDunot18XTHOH9eIQ7LFcZBO2R9WI 5Y5QHRshjhU9vmvjMEdYyyOveH+wMY6As8YuqyuB+bWkmPCnIJhMSkXlv A==; X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="339037116" X-IronPort-AV: E=Sophos;i="5.99,261,1677571200"; d="scan'208";a="339037116" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 May 2023 22:14:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10704"; a="873033256" X-IronPort-AV: E=Sophos;i="5.99,261,1677571200"; d="scan'208";a="873033256" Received: from lucas-s2600cw.jf.intel.com ([10.165.21.196]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 May 2023 22:14:45 -0700 From: Lucas De Marchi To: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, dri-devel@lists.freedesktop.org Cc: Andy Shevchenko , Thomas Gleixner , linux-kernel@vger.kernel.org, Masahiro Yamada , Andrew Morton , Kevin Brodsky , Alex Deucher , =?UTF-8?q?Christian=20K=C3=B6nig?= , Jani Nikula , Lucas De Marchi Subject: [PATCH 3/3] drm/i915: Temporary conversion to new GENMASK/BIT macros Date: Mon, 8 May 2023 22:14:03 -0700 Message-Id: <20230509051403.2748545-4-lucas.demarchi@intel.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230509051403.2748545-1-lucas.demarchi@intel.com> References: <20230509051403.2748545-1-lucas.demarchi@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Convert the REG_* macros from i915_reg_defs.h to use the new macros defined in linux/bits.h. This is just to help on the implementation of the new macros and not intended to be applied. Signed-off-by: Lucas De Marchi --- drivers/gpu/drm/i915/i915_reg_defs.h | 28 +++++----------------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_reg_defs.h b/drivers/gpu/drm/i915/i9= 15_reg_defs.h index 622d603080f9..61fbb8d62b25 100644 --- a/drivers/gpu/drm/i915/i915_reg_defs.h +++ b/drivers/gpu/drm/i915/i915_reg_defs.h @@ -17,10 +17,7 @@ * * @return: Value with bit @__n set. */ -#define REG_BIT(__n) \ - ((u32)(BIT(__n) + \ - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \ - ((__n) < 0 || (__n) > 31)))) +#define REG_BIT(__n) BIT_U32(__n) =20 /** * REG_BIT8() - Prepare a u8 bit value @@ -30,10 +27,7 @@ * * @return: Value with bit @__n set. */ -#define REG_BIT8(__n) \ - ((u8)(BIT(__n) + \ - BUILD_BUG_ON_ZERO(__is_constexpr(__n) && \ - ((__n) < 0 || (__n) > 7)))) +#define REG_BIT8(__n) BIT_U8(__n) =20 /** * REG_GENMASK() - Prepare a continuous u32 bitmask @@ -44,11 +38,7 @@ * * @return: Continuous bitmask from @__high to @__low, inclusive. */ -#define REG_GENMASK(__high, __low) \ - ((u32)(GENMASK(__high, __low) + \ - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \ - __is_constexpr(__low) && \ - ((__low) < 0 || (__high) > 31 || (__low) > (__high))))) +#define REG_GENMASK(__high, __low) GENMASK_U32(__high, __low) =20 /** * REG_GENMASK64() - Prepare a continuous u64 bitmask @@ -59,11 +49,7 @@ * * @return: Continuous bitmask from @__high to @__low, inclusive. */ -#define REG_GENMASK64(__high, __low) \ - ((u64)(GENMASK_ULL(__high, __low) + \ - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \ - __is_constexpr(__low) && \ - ((__low) < 0 || (__high) > 63 || (__low) > (__high))))) +#define REG_GENMASK64(__high, __low) GENMASK_ULL(__high, __low) =20 /** * REG_GENMASK8() - Prepare a continuous u8 bitmask @@ -74,11 +60,7 @@ * * @return: Continuous bitmask from @__high to @__low, inclusive. */ -#define REG_GENMASK8(__high, __low) \ - ((u8)(GENMASK(__high, __low) + \ - BUILD_BUG_ON_ZERO(__is_constexpr(__high) && \ - __is_constexpr(__low) && \ - ((__low) < 0 || (__high) > 7 || (__low) > (__high))))) +#define REG_GENMASK8(__high, __low) GENMASK_U8(__high, __low) =20 /* * Local integer constant expression version of is_power_of_2(). --=20 2.40.1