From nobody Thu May 2 21:40:53 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677504962; cv=none; d=zohomail.com; s=zohoarc; b=gM6dec4vwZXw2lTl4PjTmpmGIhcHllsDouqUXqu7vGGON6Pbh6qnbhAe17L7AF6ZEyVsoOyV7TTTWE9srbCbHfCenx/1UTJyNh2fScYgv5xgManmxj++ZmUBdWAatceq9/iPEVfJ/ZD6O4Djhc0OiNgl94lB/YZNyqQ1DAaYVu4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677504962; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=0Lqzv22KvYd26WZBONiwLPN2WCs4CWG7bM0JqgVXsno=; b=dV0qsaO5k9+O75KWLiexCo0RNdZq4AT8+NiAeTFENaEXzavfWeUCY/h4EV2jaaUVXVUICpdXq+cbb9K1yis3X3p1OmZPR3zm5Q+Lz8aeLYK2Coe9TFXoHUa9gFqlDByRzkGgM/QmEIXaUi+LTLsL8vNRuXBXxmTasNRs9blsh58= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677504962688847.2824380022754; Mon, 27 Feb 2023 05:36:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWdeY-0005F0-7P; Mon, 27 Feb 2023 08:34:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pWddv-0004zc-IE; Mon, 27 Feb 2023 08:34:24 -0500 Received: from mail-ed1-x535.google.com ([2a00:1450:4864:20::535]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pWddo-0007eb-Qe; Mon, 27 Feb 2023 08:34:13 -0500 Received: by mail-ed1-x535.google.com with SMTP id o12so25781433edb.9; Mon, 27 Feb 2023 05:33:59 -0800 (PST) Received: from localhost.localdomain (dynamic-078-055-154-008.78.55.pool.telefonica.de. [78.55.154.8]) by smtp.gmail.com with ESMTPSA id gx16-20020a1709068a5000b008b69aa62efcsm3253603ejc.62.2023.02.27.05.33.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 05:33:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0Lqzv22KvYd26WZBONiwLPN2WCs4CWG7bM0JqgVXsno=; b=nuo2CveytfjAXGT5pVJ0vSsWFFOOSCNeaBKGMqLZjsg92D28UkimNplFlynr3JUWX6 i9Aveg4abv2vfjObyop4yZkh4T+LP9HtTaaTSDW/iHTjU/vDblZbTsNbJD9d/g+M6dFh LsCMhl3iKYrK31ibeqrUqfraNhcmGKnqEGmk88UGIeXQwFR3+3RQXYbXRtcUn/vx+Q3g HVGXpdTlowNU21HFZu88kKEho2dEDAzfc+c99QK6UwfZk9TGcdFiSyRu37w7dywZD05X dzzhRCrziKefpj+h6urlzLN5UVqmgLvKMp6c3GjgkFEyNk9IC0N+xh5lIse6yE/b+G9S dnCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0Lqzv22KvYd26WZBONiwLPN2WCs4CWG7bM0JqgVXsno=; b=SqXADK0NHW1w1VRsJP/UuQZCkATajCI/SJed/mRw94fs0OKCphNM9zdv1uOot4Y3O/ lz3TBE/4B0hpJPBhHlraCqULeQXrDksOAT1cItmbkORK5XzYVfpqiOyu6pziTG98XQCJ 7rkpT9cH0ek44MEIu/muqk6P7WD4poAU/Ca/69CghVyGzGIsezjjNc9Og7qm9kRWth3b FkmPYP6ZCo+SnI0g44NZ0RpVADBW2r7ZTMKyLb8yVbk6kcVDhAmAIu0Inl1ygHIg1kjj liO/C7eDiTKqw3VlPQlCTjT2K1Xat7BFHd9dbuIIOI9EV9UGjYp6mshd13baFaGpU+k1 Uaag== X-Gm-Message-State: AO0yUKWsaGPFsMyLcx0TZiiI57LFH4rexC76ckGaaCweNQaU3ZkrjCMq fo+B0W8WXig4O6f73AfIlFnsD+dVI5k= X-Google-Smtp-Source: AK7set965rrO8OqvvVKqbc2Oivr8UkYH7Vt+MrC5I2N7iwamiArLHohjZJhQ/Egbk9A6Cdo0cFWg4w== X-Received: by 2002:a17:907:1c14:b0:8f0:143d:ee34 with SMTP id nc20-20020a1709071c1400b008f0143dee34mr9829024ejc.1.1677504837992; Mon, 27 Feb 2023 05:33:57 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Huacai Chen , Gerd Hoffmann , Jiaxun Yang , qemu-ppc@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Rene Engel , Daniel Henrique Barboza Subject: [PATCH v4 1/7] hw/display/sm501: Implement more 2D raster operations Date: Mon, 27 Feb 2023 14:33:19 +0100 Message-Id: <20230227133325.22023-2-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230227133325.22023-1-shentey@gmail.com> References: <20230227133325.22023-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::535; envelope-from=shentey@gmail.com; helo=mail-ed1-x535.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677504964823100003 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan Add simple implementation for two raster operations that are used by AmigaOS which fixes graphics problems in some programs using these. Signed-off-by: BALATON Zoltan Reported-by: Rene Engel Tested-by: Rene Engel Reviewed-by: Daniel Henrique Barboza Message-Id: <17ef3c59dc7868f75034e9ebe21e2999c8f718d4.1677445307.git.balato= n@eik.bme.hu> --- hw/display/sm501.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index e1d0591d36..58bc9701ee 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -753,7 +753,7 @@ static void sm501_2d_operation(SM501State *s) } =20 if ((rop_mode && rop =3D=3D 0x5) || (!rop_mode && rop =3D=3D 0x55)= ) { - /* Invert dest, is there a way to do this with pixman? */ + /* DSTINVERT, is there a way to do this with pixman? */ unsigned int x, y, i; uint8_t *d =3D s->local_mem + dst_base; =20 @@ -763,6 +763,34 @@ static void sm501_2d_operation(SM501State *s) stn_he_p(&d[i], bypp, ~ldn_he_p(&d[i], bypp)); } } + } else if (!rop_mode && rop =3D=3D 0x99) { + /* DSxn, is there a way to do this with pixman? */ + unsigned int x, y, i, j; + uint8_t *sp =3D s->local_mem + src_base; + uint8_t *d =3D s->local_mem + dst_base; + + for (y =3D 0; y < height; y++) { + i =3D (dst_x + (dst_y + y) * dst_pitch) * bypp; + j =3D (src_x + (src_y + y) * src_pitch) * bypp; + for (x =3D 0; x < width; x++, i +=3D bypp, j +=3D bypp) { + stn_he_p(&d[i], bypp, + ~(ldn_he_p(&sp[j], bypp) ^ ldn_he_p(&d[i], by= pp))); + } + } + } else if (!rop_mode && rop =3D=3D 0xee) { + /* SRCPAINT, is there a way to do this with pixman? */ + unsigned int x, y, i, j; + uint8_t *sp =3D s->local_mem + src_base; + uint8_t *d =3D s->local_mem + dst_base; + + for (y =3D 0; y < height; y++) { + i =3D (dst_x + (dst_y + y) * dst_pitch) * bypp; + j =3D (src_x + (src_y + y) * src_pitch) * bypp; + for (x =3D 0; x < width; x++, i +=3D bypp, j +=3D bypp) { + stn_he_p(&d[i], bypp, + ldn_he_p(&sp[j], bypp) | ldn_he_p(&d[i], bypp= )); + } + } } else { /* Do copy src for unimplemented ops, better than unpainted ar= ea */ if ((rop_mode && (rop !=3D 0xc || rop2_source_is_pattern)) || --=20 2.39.2 From nobody Thu May 2 21:40:53 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677505045; cv=none; d=zohomail.com; s=zohoarc; b=fMrGe0KDmC7t5vdfmLlqR0l9/5GnrK/kD9kTbSJ7GQzq4Mnwcl/OeB9FhqTWo50zSMzB/XgC8n9Lpv9FA40Y1KV/EvdpwLLTroHMA46ysTkXNTCPLfkRYd/xBWqV2fICv4boFegRtJ8vpiq4I9YxBr4/ZfV1dWDQW04rf6BYeNY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677505045; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qhpe+xXQXqVggEkdge6NZga40k7yps9fWCoPkwYceTE=; b=Qv0J/8dT4dCLBp5hQt4bZgHrXcVnwxB00UlI3rsrLvunJg1G4PBSzdYChlOEoLof7d2NBchEzJa8Thly2CSb8yNUgbgH0R9Br7qRNpEcA4QA7k3szz+kul9vFUNATZODPEbtsiXvIMkh0aZ4hZ1ru993HLtFziNlIoenR6B9PX0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677505045773279.9794095647685; Mon, 27 Feb 2023 05:37:25 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWdeV-000569-0x; Mon, 27 Feb 2023 08:34:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pWdds-0004zG-HL; Mon, 27 Feb 2023 08:34:20 -0500 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pWddo-0007eu-Oj; Mon, 27 Feb 2023 08:34:12 -0500 Received: by mail-ed1-x52c.google.com with SMTP id i34so25837609eda.7; Mon, 27 Feb 2023 05:34:00 -0800 (PST) Received: from localhost.localdomain (dynamic-078-055-154-008.78.55.pool.telefonica.de. [78.55.154.8]) by smtp.gmail.com with ESMTPSA id gx16-20020a1709068a5000b008b69aa62efcsm3253603ejc.62.2023.02.27.05.33.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 05:33:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qhpe+xXQXqVggEkdge6NZga40k7yps9fWCoPkwYceTE=; b=bCzjNa7U2r8jSA4WAT9ZIgM8TUioEiuQZMOdY/K/w6jGsjXqWBCbrQmi3BmUt5DKqY si+TI8PqBEHujyCV86G4pRpQdWHQ4d7s6Gshnce1WMGA8nr08DSzLwplJTqOpyvX9SPM fkkRCAFbRqGyBma+G3Eip16usYB2pNk86WKhtfdWYTWxuSTUMusNYaG3Av7gEhAEgrVl s4t8FCkLDi2q5Y4pcbVB1HEtPpWo0vHt+tltYDomACe0ecyoBK4Paec5IoXH7mzO/1PJ 11iQcBqhodkSdjyiadroIxlnZg5jO5XhhORzY1YunCP7wLwb/As03jSpeLVpZ4zZhiM2 pKUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qhpe+xXQXqVggEkdge6NZga40k7yps9fWCoPkwYceTE=; b=tWelzl0bCT88XsUUIPrwyA2nmtus4nIqLEPL5dJsbPezJaMPZNs8AmiPzkvUzT8CZq yByNiDqtaCYbooLu+s/d/FVTQ+l183VJEEh/sij+qFg4oO1irISXO+RAqf1nQlH2zPgw eVJ5+F8UfZrSZhhUQ+Uf8setS3s1Dlul7+BekUiuA158bH1Xu4EszTcCvFp1NiM6zvSi zlOKxKRwae/g5v7kM8+h+oLpCVGGqtvSH7n8Zuvn6VCJPOPRY7Ngm75Gis7nk2TCZIrf MbdxdtHmzPeiW1DeTwmMIrUSJ9Ovkr4gRHVbBtiRVm6pD/I6QfmjHa4WA9IJF6KH2NnO TkfA== X-Gm-Message-State: AO0yUKVW/gyG3LF4d2zo0KWyg4dOtxdJ43LYWZ0v/tJzy0NJfEXx/cT8 /ax/nkwQU/3lHvdmN9Zj+vmf6yKzSB8= X-Google-Smtp-Source: AK7set+9myuLP1R4RACds9jPu7ChcomWaKnHRKrJ2b+mXRn0dy2uahdKhBY6+OPZcQ1CkxKHyF52vg== X-Received: by 2002:a17:906:ff13:b0:8b2:d70c:34ae with SMTP id zn19-20020a170906ff1300b008b2d70c34aemr35604923ejb.71.1677504839009; Mon, 27 Feb 2023 05:33:59 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Huacai Chen , Gerd Hoffmann , Jiaxun Yang , qemu-ppc@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Rene Engel Subject: [PATCH v4 2/7] hw/display/sm501: Add fallbacks to pixman routines Date: Mon, 27 Feb 2023 14:33:20 +0100 Message-Id: <20230227133325.22023-3-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230227133325.22023-1-shentey@gmail.com> References: <20230227133325.22023-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52c; envelope-from=shentey@gmail.com; helo=mail-ed1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677505047299100006 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan Pixman may return false if it does not have a suitable implementation. Add fallbacks to handle such cases. Signed-off-by: BALATON Zoltan Reported-by: Rene Engel Tested-by: Rene Engel Message-Id: <20ed9442a0146238254ccc340c0d1efa226c6356.1677445307.git.balato= n@eik.bme.hu> --- hw/display/sm501.c | 75 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 52 insertions(+), 23 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 58bc9701ee..23c4418e19 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -691,7 +691,7 @@ static void sm501_2d_operation(SM501State *s) unsigned int dst_pitch =3D (s->twoD_pitch >> 16) & 0x1FFF; int crt =3D (s->dc_crt_control & SM501_DC_CRT_CONTROL_SEL) ? 1 : 0; int fb_len =3D get_width(s, crt) * get_height(s, crt) * get_bpp(s, crt= ); - bool overlap =3D false; + bool overlap =3D false, fallback =3D false; =20 if ((s->twoD_stretch >> 16) & 0xF) { qemu_log_mask(LOG_UNIMP, "sm501: only XY addressing is supported.\= n"); @@ -834,25 +834,48 @@ static void sm501_2d_operation(SM501State *s) if (tmp_stride * sizeof(uint32_t) * height > sizeof(tmp_bu= f)) { tmp =3D g_malloc(tmp_stride * sizeof(uint32_t) * heigh= t); } - pixman_blt((uint32_t *)&s->local_mem[src_base], tmp, - src_pitch * bypp / sizeof(uint32_t), - tmp_stride, 8 * bypp, 8 * bypp, - src_x, src_y, 0, 0, width, height); - pixman_blt(tmp, (uint32_t *)&s->local_mem[dst_base], - tmp_stride, - dst_pitch * bypp / sizeof(uint32_t), - 8 * bypp, 8 * bypp, - 0, 0, dst_x, dst_y, width, height); + fallback =3D !pixman_blt((uint32_t *)&s->local_mem[src_bas= e], + tmp, + src_pitch * bypp / sizeof(uint32_t), + tmp_stride, + 8 * bypp, 8 * bypp, + src_x, src_y, 0, 0, width, height); + if (!fallback) { + fallback =3D !pixman_blt(tmp, + (uint32_t *)&s->local_mem[dst_base], + tmp_stride, + dst_pitch * bypp / sizeof(uint32_t), + 8 * bypp, 8 * bypp, + 0, 0, dst_x, dst_y, width, height); + } if (tmp !=3D tmp_buf) { g_free(tmp); } } else { - pixman_blt((uint32_t *)&s->local_mem[src_base], - (uint32_t *)&s->local_mem[dst_base], - src_pitch * bypp / sizeof(uint32_t), - dst_pitch * bypp / sizeof(uint32_t), - 8 * bypp, 8 * bypp, - src_x, src_y, dst_x, dst_y, width, height); + fallback =3D !pixman_blt((uint32_t *)&s->local_mem[src_bas= e], + (uint32_t *)&s->local_mem[dst_base], + src_pitch * bypp / sizeof(uint32_t), + dst_pitch * bypp / sizeof(uint32_t), + 8 * bypp, 8 * bypp, src_x, src_y, + dst_x, dst_y, width, height); + } + if (fallback) { + uint8_t *sp =3D s->local_mem + src_base; + uint8_t *d =3D s->local_mem + dst_base; + unsigned int y, i, j; + for (y =3D 0; y < height; y++) { + if (overlap) { /* overlap also means rtl */ + i =3D (dst_y + height - 1 - y) * dst_pitch; + i =3D (dst_x + i) * bypp; + j =3D (src_y + height - 1 - y) * src_pitch; + j =3D (src_x + j) * bypp; + memmove(&d[i], &sp[j], width * bypp); + } else { + i =3D (dst_x + (dst_y + y) * dst_pitch) * bypp; + j =3D (src_x + (src_y + y) * src_pitch) * bypp; + memcpy(&d[i], &sp[j], width * bypp); + } + } } } break; @@ -867,13 +890,19 @@ static void sm501_2d_operation(SM501State *s) color =3D cpu_to_le16(color); } =20 - if (width =3D=3D 1 && height =3D=3D 1) { - unsigned int i =3D (dst_x + dst_y * dst_pitch) * bypp; - stn_he_p(&s->local_mem[dst_base + i], bypp, color); - } else { - pixman_fill((uint32_t *)&s->local_mem[dst_base], - dst_pitch * bypp / sizeof(uint32_t), - 8 * bypp, dst_x, dst_y, width, height, color); + if ((width =3D=3D 1 && height =3D=3D 1) || + !pixman_fill((uint32_t *)&s->local_mem[dst_base], + dst_pitch * bypp / sizeof(uint32_t), 8 * bypp, + dst_x, dst_y, width, height, color)) { + /* fallback when pixman failed or we don't want to call it */ + uint8_t *d =3D s->local_mem + dst_base; + unsigned int x, y, i; + for (y =3D 0; y < height; y++, i +=3D dst_pitch * bypp) { + i =3D (dst_x + (dst_y + y) * dst_pitch) * bypp; + for (x =3D 0; x < width; x++, i +=3D bypp) { + stn_he_p(&d[i], bypp, color); + } + } } break; } --=20 2.39.2 From nobody Thu May 2 21:40:53 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677504985; cv=none; d=zohomail.com; s=zohoarc; b=Ra/szAZtVBLSRvE6hMfonLhSBum3MaAQaw+9gDzUTqHTImtDWD6bZdAmV9sRT4cUMbCzTd2ypZ3Vh9IYTGILj+jWLaze9sB0/3carnUl10QbtNnej0YUPSmrmKiIQxM/7z+q8TQlk8UNPcbXLq/vnvR4bTwZ+5OTd4oi2dAKHc0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677504985; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=NyrcxGf0uGzTYvYyLp610kYB0kT0EhYYjluHCkpVk6Q=; b=ZptccmI2OP9nqxvKWuDxz/jGPWoOfDfOuQv60q+XaxoL090PcAT3YEtV7UnHNukE1xjb3dJe2T33/EHgH62zx0+k9ZzIVSmJj/iPN6YHWhaSciCZ75fjDVZiTjOkJU4Ehu4/KuWc4Zc3L3x+bEoL+NTW3jjSFOYSRdam973JYqU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677504985640308.9499895059887; Mon, 27 Feb 2023 05:36:25 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWdeY-0005F5-He; Mon, 27 Feb 2023 08:34:54 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pWddv-0004zb-IB; Mon, 27 Feb 2023 08:34:24 -0500 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pWddq-0007fA-Ux; Mon, 27 Feb 2023 08:34:13 -0500 Received: by mail-ed1-x530.google.com with SMTP id o12so25781868edb.9; Mon, 27 Feb 2023 05:34:01 -0800 (PST) Received: from localhost.localdomain (dynamic-078-055-154-008.78.55.pool.telefonica.de. [78.55.154.8]) by smtp.gmail.com with ESMTPSA id gx16-20020a1709068a5000b008b69aa62efcsm3253603ejc.62.2023.02.27.05.33.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 05:33:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NyrcxGf0uGzTYvYyLp610kYB0kT0EhYYjluHCkpVk6Q=; b=MFdWYi5lLyOrdY3GBkz1IEQ6g7YjXGAjkoVZCHAjNLNTWbEhRITpsV6rW/OwXr8FsN AZMKov8q7BzNqn01cPR/6bcT9aKmKKp6unX/HQMbuIjX646bHvkGpc24m3vpWe77KsyR z2Q22o0CrhO7yFGof9VEejpcCiA4GojWzuozsQ3V8W8dmdzlW6UEmnhTnJFHnUZHaWeH gXlcDSWOc8/0K7oC5lFXf9IQT2dv02T0jJyNZMR3mn1PxY8TvP9exgwOVs+46XUefstQ l9k3WaslDvRdOZwCpKcsEeDx0hnIuftl95/rzZqMmen4ZplBMp94Zbn3j8sDZKay0Ac0 qrpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NyrcxGf0uGzTYvYyLp610kYB0kT0EhYYjluHCkpVk6Q=; b=YoDbUylhaqcbLRQKXf29ebXVzABx13zUpnk7JGc+BNZeQmRfiUxfut33m4iMqBbAsY p2UMLlfrX1b6DZjYneB7GYK2348wu5D0Znfo88gpWmIZQINCeTayfS2GHsB0VIfqOi+D 8oFK7WGmirk3Qb3Wv1du48T7bcPcddfwp54+NARejCKd1JG9GmgQGkNCyRvzn9PU6ytB 02oco6GfBUk5J98mZ2zitQpKM6N3hM96mGeVGkujCW6MrUEh9zkXM1wBXgbIbgyd3wii Vspb5qGVh0YzKSavNtozowA4v9hTVStrtGp4/XvmMqxl1MJ4GhWuOAVXNeSUeX+VbZ4N nFgw== X-Gm-Message-State: AO0yUKX8oEfiO7gjPWo6PIuk68wSTY3KAp3aocGZ7YsaGPeP8icKYTu/ HGM0H1Yslnpd+yUj+gfBsuNoqZLSpu8= X-Google-Smtp-Source: AK7set9H2BVUhZ1t/q1mkne4/gh3RvZTi1Sx5mqpVmqHBh+NOwgAz00gW0/EmQEJovxcZcQalirNkQ== X-Received: by 2002:a17:906:264d:b0:8a9:e330:3a23 with SMTP id i13-20020a170906264d00b008a9e3303a23mr34404333ejc.26.1677504840000; Mon, 27 Feb 2023 05:34:00 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Huacai Chen , Gerd Hoffmann , Jiaxun Yang , qemu-ppc@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 3/7] hw/display/sm501: Add debug property to control pixman usage Date: Mon, 27 Feb 2023 14:33:21 +0100 Message-Id: <20230227133325.22023-4-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230227133325.22023-1-shentey@gmail.com> References: <20230227133325.22023-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::530; envelope-from=shentey@gmail.com; helo=mail-ed1-x530.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677504986782100003 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan Add a property to allow disabling pixman and always use the fallbacks for different operations which is useful for testing different drawing methods or debugging pixman related issues. Signed-off-by: BALATON Zoltan Message-Id: --- hw/display/sm501.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/hw/display/sm501.c b/hw/display/sm501.c index 23c4418e19..f2f7f26751 100644 --- a/hw/display/sm501.c +++ b/hw/display/sm501.c @@ -464,6 +464,7 @@ typedef struct SM501State { uint32_t last_width; uint32_t last_height; bool do_full_update; /* perform a full update next time */ + uint8_t use_pixman; I2CBus *i2c_bus; =20 /* mmio registers */ @@ -826,7 +827,7 @@ static void sm501_2d_operation(SM501State *s) de =3D db + (width + (height - 1) * dst_pitch) * bypp; overlap =3D (db < se && sb < de); } - if (overlap) { + if (overlap && (s->use_pixman & BIT(2))) { /* pixman can't do reverse blit: copy via temporary */ int tmp_stride =3D DIV_ROUND_UP(width * bypp, sizeof(uint3= 2_t)); uint32_t *tmp =3D tmp_buf; @@ -851,13 +852,15 @@ static void sm501_2d_operation(SM501State *s) if (tmp !=3D tmp_buf) { g_free(tmp); } - } else { + } else if (!overlap && (s->use_pixman & BIT(1))) { fallback =3D !pixman_blt((uint32_t *)&s->local_mem[src_bas= e], (uint32_t *)&s->local_mem[dst_base], src_pitch * bypp / sizeof(uint32_t), dst_pitch * bypp / sizeof(uint32_t), 8 * bypp, 8 * bypp, src_x, src_y, dst_x, dst_y, width, height); + } else { + fallback =3D true; } if (fallback) { uint8_t *sp =3D s->local_mem + src_base; @@ -890,7 +893,7 @@ static void sm501_2d_operation(SM501State *s) color =3D cpu_to_le16(color); } =20 - if ((width =3D=3D 1 && height =3D=3D 1) || + if (!(s->use_pixman & BIT(0)) || (width =3D=3D 1 && height =3D=3D = 1) || !pixman_fill((uint32_t *)&s->local_mem[dst_base], dst_pitch * bypp / sizeof(uint32_t), 8 * bypp, dst_x, dst_y, width, height, color)) { @@ -2039,6 +2042,7 @@ static void sm501_realize_sysbus(DeviceState *dev, Er= ror **errp) static Property sm501_sysbus_properties[] =3D { DEFINE_PROP_UINT32("vram-size", SM501SysBusState, vram_size, 0), DEFINE_PROP_UINT32("base", SM501SysBusState, base, 0), + DEFINE_PROP_UINT8("x-pixman", SM501SysBusState, state.use_pixman, 7), DEFINE_PROP_END_OF_LIST(), }; =20 @@ -2122,6 +2126,7 @@ static void sm501_realize_pci(PCIDevice *dev, Error *= *errp) =20 static Property sm501_pci_properties[] =3D { DEFINE_PROP_UINT32("vram-size", SM501PCIState, vram_size, 64 * MiB), + DEFINE_PROP_UINT8("x-pixman", SM501PCIState, state.use_pixman, 7), DEFINE_PROP_END_OF_LIST(), }; =20 @@ -2162,11 +2167,18 @@ static void sm501_pci_class_init(ObjectClass *klass= , void *data) dc->vmsd =3D &vmstate_sm501_pci; } =20 +static void sm501_pci_init(Object *o) +{ + object_property_set_description(o, "x-pixman", "Use pixman for: " + "1: fill, 2: blit, 4: overlap blit"); +} + static const TypeInfo sm501_pci_info =3D { .name =3D TYPE_PCI_SM501, .parent =3D TYPE_PCI_DEVICE, .instance_size =3D sizeof(SM501PCIState), .class_init =3D sm501_pci_class_init, + .instance_init =3D sm501_pci_init, .interfaces =3D (InterfaceInfo[]) { { INTERFACE_CONVENTIONAL_PCI_DEVICE }, { }, --=20 2.39.2 From nobody Thu May 2 21:40:53 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677504930; cv=none; d=zohomail.com; s=zohoarc; b=PKbI6opaHI3Q/sXsTCurQshvoyeMLUfDKQ2T9r5De3xJnR49m0Z4Hr+1ufmeUe9mARZyxhzMSzd+IpM2SFoJeyKV9BZuCOWQRFBo94Or6sw5B01uHzLitBhDhYeZ2y5p3eQ6rMxAZQtelMfII8oZKE78kBLvnm6psyspmDLqFfg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677504930; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=RwQ27/eMfpymF6hg7GwyOuyo/R5GZYPcbaoXe8Jhs2M=; b=HnEfTP5E1S4LFDRjEqhlt0bTnpZoB7yJKg5MmUxReziwwHfcAbahSE6U8VomhK7oXae4qYk5KsiJZl6ixuSU63hMMwkXrLUHGTs9XtKK5XRkqJciW6FAZQSa1mJc1j/8Cqe7zImNwOwQwVpva0ZQ2eN0VAOksqQahHhV0Sfosl8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 167750493023381.90366993942496; Mon, 27 Feb 2023 05:35:30 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWdeV-00056e-3v; Mon, 27 Feb 2023 08:34:51 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pWddv-0004zd-Jf; Mon, 27 Feb 2023 08:34:24 -0500 Received: from mail-ed1-x52b.google.com ([2a00:1450:4864:20::52b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pWddr-0007fQ-Tl; Mon, 27 Feb 2023 08:34:14 -0500 Received: by mail-ed1-x52b.google.com with SMTP id d30so25862945eda.4; Mon, 27 Feb 2023 05:34:02 -0800 (PST) Received: from localhost.localdomain (dynamic-078-055-154-008.78.55.pool.telefonica.de. [78.55.154.8]) by smtp.gmail.com with ESMTPSA id gx16-20020a1709068a5000b008b69aa62efcsm3253603ejc.62.2023.02.27.05.34.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 05:34:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RwQ27/eMfpymF6hg7GwyOuyo/R5GZYPcbaoXe8Jhs2M=; b=Eda89c4sgPoJgXV9spOiekecADfiDs3tSE3TgzIwiTx6w96kWXgWQB3IkbNSOEKxdJ 265g41pFrxfWSS1/LItH+8LQ8evxtGMs2ZpNkLFXjb+6TvEZTr4N+97u4q8dGQSfkLC4 VbeQJnPbChu3Q1oDu4FJv2y7QsY8o9rAmz/z7tePntNQ1RwEqb4fNA2rYOj4fUHOHFUo H3140RCOKk83tMXxe6YwFyv8nV5WigPQtDQTTQ+KVRJtDwBYGINkwrcRyEJlsqfEo2GG 3ERYG0i8cNUBdSf4Ge0krQ2hPDAezpn/hZlZSAAMrCdIKAi3hzlBnaIaXOb08LEKYE/J P1FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RwQ27/eMfpymF6hg7GwyOuyo/R5GZYPcbaoXe8Jhs2M=; b=uxf4a/iRwTRl/WimF9E+0TD8cV718H9KyU/aKDhRib1hxpTABa5d1sD5XwBKCueeqM wbZMAvM55B8qcHYpoAn+tUE2YBVYN5l4rN9BLC8CKK1jkeNC560r7KnIihlJvafIFA/3 8FTRi7X7chsBXcS9s7MK+RqKmqL0HpoPSkSnEg5jAz6jGYAbzBi9pZUYXGhbZMFHN9Zt ivgqRtPlAf8bzrGJzUKJ9sCjywYxbVYlFaEYDthkVdMChg4NWp64rlwOiMewM3ceyzaK UM81zxv+xFFMWBA+pErLzQ7TqTFvvYPf5iAMaK/OcrE5QhT+L0vNdoxtp6N4VABCFtUW JDjw== X-Gm-Message-State: AO0yUKVho4biNIkK3/Z0J5Y81zXSw2qr25x1b3pFC5U01LyY9keWrg3s DYftkXUfwr6a8c84V9xeSykikOpf2Gw= X-Google-Smtp-Source: AK7set/l2NHybf/7arOh49ZKiCr9WS9sdGHb3H2naAMUxfgW0xiZkOifPR6eOacgxgkUtZuMouzj/w== X-Received: by 2002:a17:906:80d6:b0:87f:89f2:c012 with SMTP id a22-20020a17090680d600b0087f89f2c012mr35124909ejx.24.1677504840997; Mon, 27 Feb 2023 05:34:00 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Huacai Chen , Gerd Hoffmann , Jiaxun Yang , qemu-ppc@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Rene Engel Subject: [PATCH v4 4/7] hw/isa/vt82c686: Declare gpio inputs so it can be connected in board code Date: Mon, 27 Feb 2023 14:33:22 +0100 Message-Id: <20230227133325.22023-5-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230227133325.22023-1-shentey@gmail.com> References: <20230227133325.22023-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52b; envelope-from=shentey@gmail.com; helo=mail-ed1-x52b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677504930915100001 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan Signed-off-by: BALATON Zoltan Tested-by: Rene Engel --- hw/isa/vt82c686.c | 1 + 1 file changed, 1 insertion(+) diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index 7aea97365f..84b5c5e64f 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -653,6 +653,7 @@ static void via_isa_realize(PCIDevice *d, Error **errp) int i; =20 qdev_init_gpio_out(dev, &s->cpu_intr, 1); + qdev_init_gpio_in_named(dev, via_isa_set_pci_irq, "pirq", PCI_NUM_PINS= ); isa_irq =3D qemu_allocate_irqs(via_isa_request_i8259_irq, s, 1); isa_bus =3D isa_bus_new(dev, pci_address_space(d), pci_address_space_i= o(d), errp); --=20 2.39.2 From nobody Thu May 2 21:40:53 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677505045; cv=none; d=zohomail.com; s=zohoarc; b=IGcDtJ5PAul+fjTUB8DgLxxh1p3uzskpLWJLzJwldgQLnDVSX9Gma/k0WfohSYxuWPPHTLCor3pfExRR4ok8H0LLs0RP+AfPtmtvkutZ67pVGnL6PxwuVD6FzGXaJaXNcWl8VPifUkHu/AKpLeWwSrTK5GnsUFeOaXWZkjKAQNI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677505045; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7h7DFpIyPYWA8e6aIzCKHW2L9bDyUG+cLQqGnLqsunY=; b=ISeXkITjzsMYmAMhKpDK0reo3T2y8rI6g518PgRaHSgvSEBDb4Arm5/aAhptA5KZCP51puux/irZhLJ9SWTni9bJxApR24Vy0TQXLXp/WTnhXB8kEv/jrTxOgNM9hGo9ATFC/dBRBknHYRpQSBrjnIg9W/SGMlRqFcpyTPTalNE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677505045081113.05639649970874; Mon, 27 Feb 2023 05:37:25 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWdeX-0005ES-4i; Mon, 27 Feb 2023 08:34:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pWddv-0004za-Hz; Mon, 27 Feb 2023 08:34:24 -0500 Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pWddq-0007fe-VM; Mon, 27 Feb 2023 08:34:13 -0500 Received: by mail-ed1-x52a.google.com with SMTP id cy6so25876462edb.5; Mon, 27 Feb 2023 05:34:03 -0800 (PST) Received: from localhost.localdomain (dynamic-078-055-154-008.78.55.pool.telefonica.de. [78.55.154.8]) by smtp.gmail.com with ESMTPSA id gx16-20020a1709068a5000b008b69aa62efcsm3253603ejc.62.2023.02.27.05.34.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 05:34:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7h7DFpIyPYWA8e6aIzCKHW2L9bDyUG+cLQqGnLqsunY=; b=A47rFavkzxsiirFam0FsfIsTzgFHtdx17KQVO1AV2ZQgeggRW8UT1AGHyCEMGIiXLv YShmPGd/51O0L7YAheLHIEFNQRbUS8TceVC5QpGaRDPaex+B346XPMyMzBCWfUhRMM1S q2dl4kGVEUiiSz5Fc2Iac8lQQh8yeDc5pR+2vHeNLhsvEE/AQq7y21zcQ/r9UnI08vt+ dYjBFVWgGNTGnFRyU2Q2PVmCLk8YozDU6rOKb4/9xtb01Y2P17CVblFkuZZqWSLDRT7G cXaFvcrE7h3RFqSDY+7rZoOGF9RjdtIKCppT8Fi1IT6McRAvgjlUZV+Qw0ZWNTQEcsjt 4/FA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7h7DFpIyPYWA8e6aIzCKHW2L9bDyUG+cLQqGnLqsunY=; b=UTUrutgU6usdHFEhitmRRnZ1mAzuL7QGsvii1VMdAMOdzYsoMwMLlhgZhUlWsLgH+a T8QTSKawZW1L5AymNKvfFeBJlGbIn54WVJYnpKrCHROY2cEMTnRyMSlEf4tg2CuKIQbk CfC5vCTWEX0D/RzEevkaaItvBwDyI3Vws2Ye+7W3YRO8NPqIGljaf3j+qbJzytFB3POP ajCT/YPiQP0oK9BjNGi2foVYmk9DfI9Bve408WUvQbcEMc0/JyNmY2xi/CxNKx9x6FZL 2WnHTuQMYZbC1WyHZSmLew18vZXjkF6/X9qncH2Ycn9jNpTmY0UXev9GjWgz4ZamKn2X awUw== X-Gm-Message-State: AO0yUKU+e2Z0j/atXaVGXrjT1UD+OuKbyjBxe64aBGx/u9GD2Sqp+bQE VBSUELSXyFr67R2avEvy6yIfJcYtBCM= X-Google-Smtp-Source: AK7set+HuFmyqvy4jQnTC/ASxe1f7iGINGEP3cFXSgZ16L64Ej/7UjcQ4qxGrgOHObabVFkSfiSmIA== X-Received: by 2002:a17:907:c293:b0:88d:79df:7cfc with SMTP id tk19-20020a170907c29300b0088d79df7cfcmr31561825ejc.62.1677504841915; Mon, 27 Feb 2023 05:34:01 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Huacai Chen , Gerd Hoffmann , Jiaxun Yang , qemu-ppc@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Rene Engel , Daniel Henrique Barboza Subject: [PATCH v4 5/7] hw/ppc/pegasos2: Fix PCI interrupt routing Date: Mon, 27 Feb 2023 14:33:23 +0100 Message-Id: <20230227133325.22023-6-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230227133325.22023-1-shentey@gmail.com> References: <20230227133325.22023-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52a; envelope-from=shentey@gmail.com; helo=mail-ed1-x52a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677505047270100005 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan According to the PegasosII schematics the PCI interrupt lines are connected to both the gpp pins of the Mv64361 north bridge and the PINT pins of the VT8231 south bridge so guests can get interrupts from either of these. So far we only had the MV64361 connections which worked for on board devices but for additional PCI devices (such as network or sound card added with -device) guest OSes expect interrupt from the ISA IRQ 9 where the firmware routes these PCI interrupts in VT8231 ISA bridge. After the previous patches we can now model this and also remove the board specific connection from mv64361. Also configure routing of these lines when using Virtual Open Firmware to match board firmware for guests that expect this. This fixes PCI interrupts on pegasos2 under Linux, MorphOS and AmigaOS. Signed-off-by: BALATON Zoltan Tested-by: Rene Engel Reviewed-by: Daniel Henrique Barboza Message-Id: --- hw/pci-host/mv64361.c | 4 ---- hw/ppc/pegasos2.c | 20 +++++++++++++++++++- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/hw/pci-host/mv64361.c b/hw/pci-host/mv64361.c index f43f33fbd9..3d9132f989 100644 --- a/hw/pci-host/mv64361.c +++ b/hw/pci-host/mv64361.c @@ -874,10 +874,6 @@ static void mv64361_realize(DeviceState *dev, Error **= errp) } sysbus_init_irq(SYS_BUS_DEVICE(dev), &s->cpu_irq); qdev_init_gpio_in_named(dev, mv64361_gpp_irq, "gpp", 32); - /* FIXME: PCI IRQ connections may be board specific */ - for (i =3D 0; i < PCI_NUM_PINS; i++) { - s->pci[1].irq[i] =3D qdev_get_gpio_in_named(dev, "gpp", 12 + i); - } } =20 static void mv64361_reset(DeviceState *dev) diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c index 41688699eb..4e1476673b 100644 --- a/hw/ppc/pegasos2.c +++ b/hw/ppc/pegasos2.c @@ -74,6 +74,8 @@ struct Pegasos2MachineState { MachineState parent_obj; PowerPCCPU *cpu; DeviceState *mv; + qemu_irq mv_pirq[PCI_NUM_PINS]; + qemu_irq via_pirq[PCI_NUM_PINS]; Vof *vof; void *fdt_blob; uint64_t kernel_addr; @@ -96,6 +98,15 @@ static void pegasos2_cpu_reset(void *opaque) } } =20 +static void pegasos2_pci_irq(void *opaque, int n, int level) +{ + Pegasos2MachineState *pm =3D opaque; + + /* PCI interrupt lines are connected to both MV64361 and VT8231 */ + qemu_set_irq(pm->mv_pirq[n], level); + qemu_set_irq(pm->via_pirq[n], level); +} + static void pegasos2_init(MachineState *machine) { Pegasos2MachineState *pm =3D PEGASOS2_MACHINE(machine); @@ -107,7 +118,7 @@ static void pegasos2_init(MachineState *machine) I2CBus *i2c_bus; const char *fwname =3D machine->firmware ?: PROM_FILENAME; char *filename; - int sz; + int i, sz; uint8_t *spd_data; =20 /* init CPU */ @@ -157,11 +168,18 @@ static void pegasos2_init(MachineState *machine) /* Marvell Discovery II system controller */ pm->mv =3D DEVICE(sysbus_create_simple(TYPE_MV64361, -1, qdev_get_gpio_in(DEVICE(pm->cpu), PPC6xx_INPUT_I= NT))); + for (i =3D 0; i < PCI_NUM_PINS; i++) { + pm->mv_pirq[i] =3D qdev_get_gpio_in_named(pm->mv, "gpp", 12 + i); + } pci_bus =3D mv64361_get_pci_bus(pm->mv, 1); + pci_bus_irqs(pci_bus, pegasos2_pci_irq, pm, PCI_NUM_PINS); =20 /* VIA VT8231 South Bridge (multifunction PCI device) */ via =3D OBJECT(pci_create_simple_multifunction(pci_bus, PCI_DEVFN(12, = 0), true, TYPE_VT8231_ISA)); + for (i =3D 0; i < PCI_NUM_PINS; i++) { + pm->via_pirq[i] =3D qdev_get_gpio_in_named(DEVICE(via), "pirq", i); + } object_property_add_alias(OBJECT(machine), "rtc-time", object_resolve_path_component(via, "rtc"), "date"); --=20 2.39.2 From nobody Thu May 2 21:40:53 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677504940; cv=none; d=zohomail.com; s=zohoarc; b=CMsp8MWTxLglV8Z2EV9zugoEMtZ67ALeKSrqQFrJNwSDC9rbkGzjk2pP5AleNuMC7yWYD2NCn3BTosEWYRI6Q97FHGmtPFXnWfFrpI2Hky7R2+eGl/3Ctbf1bKADCkZZh97vMkSmC5LNju7ly0AJOPvhT+UzMV1F56GVImNLpsg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677504940; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=g6hWoNmNq0LdjIkJy1284FovBi3hLwMAwc1D442lKak=; b=nVkqiJgaEGdkFyb9ZugDYGGezsxN6hCQqn/gwHVbWQEDr4Zj4hwmKd3iGCstSsJDqHG4EwzPzJ1xXUhnOV54qecNJ9DpXzel3C8aVD2xxBLyt1/QK0Yb0GSqEXNDlKInQ/VIQ+kSasxrBY9ZYQjurO0nYEaOUL9ftYOt4hVtKKk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1677504940126557.8784243079463; Mon, 27 Feb 2023 05:35:40 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWdeW-0005E0-I8; Mon, 27 Feb 2023 08:34:52 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pWddv-0004ze-KT; Mon, 27 Feb 2023 08:34:24 -0500 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pWdds-0007fp-82; Mon, 27 Feb 2023 08:34:15 -0500 Received: by mail-ed1-x52c.google.com with SMTP id da10so25925514edb.3; Mon, 27 Feb 2023 05:34:03 -0800 (PST) Received: from localhost.localdomain (dynamic-078-055-154-008.78.55.pool.telefonica.de. [78.55.154.8]) by smtp.gmail.com with ESMTPSA id gx16-20020a1709068a5000b008b69aa62efcsm3253603ejc.62.2023.02.27.05.34.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 05:34:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g6hWoNmNq0LdjIkJy1284FovBi3hLwMAwc1D442lKak=; b=lZkNwYlrbWvL94zTPKBQ++s69Q+4wrQ/zNkViUsi/SNXO4eZVdyWAzInPgeB9sH5/D lgnZ7fdJumuVy+XD51fICr7Q9ZglyO1KmpGBuH0CMFugnQ4w02cTpzvAEcOFcbqHt5nm JzJOzc23YTH89vwrnQZFlA8xzyernVaI1TXwauEPtVzOZfT3J3fTqtFsS8sGOD9Ednid 8qvsp304HerIgP41TlpofKiu5KC75FbNAm4mG47ug9MQ706ALjEoZigb+XZVIK1cRzBY zf48dNU9YO2itowgLlmar5RPAIAziYlvP83h3kJfK6aalD90/HA+LawiXa77N9kO/0ej vXPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g6hWoNmNq0LdjIkJy1284FovBi3hLwMAwc1D442lKak=; b=024E2AY6+RhYp1UCTGqWslEKsOdl8Ny43ThY1DKmRvT3mFbl3OHTNCYcpfet6gLo+i Y6LjEbd/jk8eO39eaXPmlwyGxtFouGlNTTdNUIHjezdG9peL1OI6CC3jruErmV3DhZFS khNwLj5b8LZXQHryipOxCnsQfLZOTVQCdEtA6MeDo/GIm8EpCGrsiWcxGOcOCmLbmn5Y co0JvaqTRZPrG3YSx8ZBaCDuZlKDDyiCrQpFeuWPO0rZzTx34XHJpfIWWkczyc9GThDb 1NET0h5T++OWeNmRC4uXpbstha4KT1SIxsQ4agXFYlQwCZ8epBFPZyYXZQqEZdDJMf0K jjag== X-Gm-Message-State: AO0yUKVOVpAbwznd7q4daJpAqgWzcb8ACWio++3mYdnD/aDywycPHAh2 OesHjvuPUxLEX+PPLGKXCoe7SgFRgsY= X-Google-Smtp-Source: AK7set8D8yrA0nlPntLElGNbh9ThIw142TlxmklN+xaBOucCssBbhTCXcxYD36rsL4rfSUAORppBvg== X-Received: by 2002:a17:907:98c4:b0:8ae:27d1:511a with SMTP id kd4-20020a17090798c400b008ae27d1511amr32968319ejc.61.1677504842823; Mon, 27 Feb 2023 05:34:02 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Huacai Chen , Gerd Hoffmann , Jiaxun Yang , qemu-ppc@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v4 6/7] hw/audio/ac97: Split off some definitions to a header Date: Mon, 27 Feb 2023 14:33:24 +0100 Message-Id: <20230227133325.22023-7-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230227133325.22023-1-shentey@gmail.com> References: <20230227133325.22023-1-shentey@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52c; envelope-from=shentey@gmail.com; helo=mail-ed1-x52c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677504940510100002 From: BALATON Zoltan These can be shared with other AC97 implementations. Signed-off-by: BALATON Zoltan Reviewed-by: Philippe Mathieu-Daud=C3=A9 Message-Id: <6f0980fdc3753624be6f3935a6ab0a2dc1df4b30.1677445307.git.balato= n@eik.bme.hu> --- hw/audio/ac97.h | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ hw/audio/ac97.c | 43 +------------------------------- 2 files changed, 66 insertions(+), 42 deletions(-) create mode 100644 hw/audio/ac97.h diff --git a/hw/audio/ac97.h b/hw/audio/ac97.h new file mode 100644 index 0000000000..0358b56ff4 --- /dev/null +++ b/hw/audio/ac97.h @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2006 InnoTek Systemberatung GmbH + * + * This file is part of VirtualBox Open Source Edition (OSE), as + * available from http://www.virtualbox.org. This file is free software; + * you can redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software Foundation, + * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE + * distribution. VirtualBox OSE is distributed in the hope that it will + * be useful, but WITHOUT ANY WARRANTY of any kind. + * + * If you received this file as part of a commercial VirtualBox + * distribution, then only the terms of your commercial VirtualBox + * license agreement apply instead of the previous paragraph. + * + * Contributions after 2012-01-13 are licensed under the terms of the + * GNU GPL, version 2 or (at your option) any later version. + */ + +#ifndef AC97_H +#define AC97_H + +enum { + AC97_Reset =3D 0x00, + AC97_Master_Volume_Mute =3D 0x02, + AC97_Headphone_Volume_Mute =3D 0x04, + AC97_Master_Volume_Mono_Mute =3D 0x06, + AC97_Master_Tone_RL =3D 0x08, + AC97_PC_BEEP_Volume_Mute =3D 0x0A, + AC97_Phone_Volume_Mute =3D 0x0C, + AC97_Mic_Volume_Mute =3D 0x0E, + AC97_Line_In_Volume_Mute =3D 0x10, + AC97_CD_Volume_Mute =3D 0x12, + AC97_Video_Volume_Mute =3D 0x14, + AC97_Aux_Volume_Mute =3D 0x16, + AC97_PCM_Out_Volume_Mute =3D 0x18, + AC97_Record_Select =3D 0x1A, + AC97_Record_Gain_Mute =3D 0x1C, + AC97_Record_Gain_Mic_Mute =3D 0x1E, + AC97_General_Purpose =3D 0x20, + AC97_3D_Control =3D 0x22, + AC97_AC_97_RESERVED =3D 0x24, + AC97_Powerdown_Ctrl_Stat =3D 0x26, + AC97_Extended_Audio_ID =3D 0x28, + AC97_Extended_Audio_Ctrl_Stat =3D 0x2A, + AC97_PCM_Front_DAC_Rate =3D 0x2C, + AC97_PCM_Surround_DAC_Rate =3D 0x2E, + AC97_PCM_LFE_DAC_Rate =3D 0x30, + AC97_PCM_LR_ADC_Rate =3D 0x32, + AC97_MIC_ADC_Rate =3D 0x34, + AC97_6Ch_Vol_C_LFE_Mute =3D 0x36, + AC97_6Ch_Vol_L_R_Surround_Mute =3D 0x38, + AC97_Vendor_Reserved =3D 0x58, + AC97_Sigmatel_Analog =3D 0x6c, /* We emulate a Sigmatel code= c */ + AC97_Sigmatel_Dac2Invert =3D 0x6e, /* We emulate a Sigmatel code= c */ + AC97_Vendor_ID1 =3D 0x7c, + AC97_Vendor_ID2 =3D 0x7e +}; + +#define EACS_VRA 1 +#define EACS_VRM 8 + +#define MUTE_SHIFT 15 + +#endif /* AC97_H */ diff --git a/hw/audio/ac97.c b/hw/audio/ac97.c index 364cdfa733..b3fb10284c 100644 --- a/hw/audio/ac97.c +++ b/hw/audio/ac97.c @@ -26,43 +26,7 @@ #include "qemu/module.h" #include "sysemu/dma.h" #include "qom/object.h" - -enum { - AC97_Reset =3D 0x00, - AC97_Master_Volume_Mute =3D 0x02, - AC97_Headphone_Volume_Mute =3D 0x04, - AC97_Master_Volume_Mono_Mute =3D 0x06, - AC97_Master_Tone_RL =3D 0x08, - AC97_PC_BEEP_Volume_Mute =3D 0x0A, - AC97_Phone_Volume_Mute =3D 0x0C, - AC97_Mic_Volume_Mute =3D 0x0E, - AC97_Line_In_Volume_Mute =3D 0x10, - AC97_CD_Volume_Mute =3D 0x12, - AC97_Video_Volume_Mute =3D 0x14, - AC97_Aux_Volume_Mute =3D 0x16, - AC97_PCM_Out_Volume_Mute =3D 0x18, - AC97_Record_Select =3D 0x1A, - AC97_Record_Gain_Mute =3D 0x1C, - AC97_Record_Gain_Mic_Mute =3D 0x1E, - AC97_General_Purpose =3D 0x20, - AC97_3D_Control =3D 0x22, - AC97_AC_97_RESERVED =3D 0x24, - AC97_Powerdown_Ctrl_Stat =3D 0x26, - AC97_Extended_Audio_ID =3D 0x28, - AC97_Extended_Audio_Ctrl_Stat =3D 0x2A, - AC97_PCM_Front_DAC_Rate =3D 0x2C, - AC97_PCM_Surround_DAC_Rate =3D 0x2E, - AC97_PCM_LFE_DAC_Rate =3D 0x30, - AC97_PCM_LR_ADC_Rate =3D 0x32, - AC97_MIC_ADC_Rate =3D 0x34, - AC97_6Ch_Vol_C_LFE_Mute =3D 0x36, - AC97_6Ch_Vol_L_R_Surround_Mute =3D 0x38, - AC97_Vendor_Reserved =3D 0x58, - AC97_Sigmatel_Analog =3D 0x6c, /* We emulate a Sigmatel code= c */ - AC97_Sigmatel_Dac2Invert =3D 0x6e, /* We emulate a Sigmatel code= c */ - AC97_Vendor_ID1 =3D 0x7c, - AC97_Vendor_ID2 =3D 0x7e -}; +#include "ac97.h" =20 #define SOFT_VOLUME #define SR_FIFOE 16 /* rwc */ @@ -121,11 +85,6 @@ enum { #define BD_IOC (1 << 31) #define BD_BUP (1 << 30) =20 -#define EACS_VRA 1 -#define EACS_VRM 8 - -#define MUTE_SHIFT 15 - #define TYPE_AC97 "AC97" OBJECT_DECLARE_SIMPLE_TYPE(AC97LinkState, AC97) =20 --=20 2.39.2 From nobody Thu May 2 21:40:53 2024 Delivered-To: importer2@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1677505049; cv=none; d=zohomail.com; s=zohoarc; b=E1G+E37ktnlto81XtSPfNQCWWL8zWZ7RcmHJ9aJsikQg2MmCZw/QEzj5/vFm5aQ8zaaPQ2Oy6exJJZYG0x1d+H7GhsaPXNe5sez1JWV0jAcKv+DADeEuh5FKDBpzxDSZ4V6T4dr0pvbhrULCe7KevCHvkcp4vntex7bd0V3zDc4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1677505049; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=A5Dm+iTcX454fcHyMEXk9WWCeIVDWcRwDhmrUkKh0lw=; b=Aa0sLSzCVmfCrYu6mO6rfaBaX6Co58Hjl/HbaqLkvdfEHuBqEyLgkUqId87vNza9jNbWSXNF3TqEI+769WsuTtPuXeJqUhoGZr6/fXCmhRiQ1FGbI4+8IQywurwJcVvayFrasU4RM0BtdKVSC0Jb4TJ6zQoxragbMpAVcAvTpS0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer2=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 167750504926074.90504795662946; Mon, 27 Feb 2023 05:37:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pWdeX-0005Eg-Ps; Mon, 27 Feb 2023 08:34:53 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pWddv-0004zZ-IJ; Mon, 27 Feb 2023 08:34:24 -0500 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pWddq-0007g6-Ux; Mon, 27 Feb 2023 08:34:14 -0500 Received: by mail-ed1-x52d.google.com with SMTP id i34so25838501eda.7; Mon, 27 Feb 2023 05:34:05 -0800 (PST) Received: from localhost.localdomain (dynamic-078-055-154-008.78.55.pool.telefonica.de. [78.55.154.8]) by smtp.gmail.com with ESMTPSA id gx16-20020a1709068a5000b008b69aa62efcsm3253603ejc.62.2023.02.27.05.34.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Feb 2023 05:34:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=A5Dm+iTcX454fcHyMEXk9WWCeIVDWcRwDhmrUkKh0lw=; b=ORUZm7XIbSXxZwmavNY/qcBH7RZWicFHoDwLXxlmFNJ/l4gEZCLFGIaHo4gC4zAlKZ 9H/vUEhqH3gXsX2ViZcTOkK5zoX9Px9YkGSGEku6gcsmWeReozxmkYXT76yjpU3nr8x2 7XCvAQFPBY1FNj7LvgUPdW9crxH+Dijp5+mO36NhCOAjRydddSAlHMs63+tL8rR5cQ5W NFzAeY+KiTIAWb88Z6BkQuj1hHeU6q3Kri8/0h2a295I8iNnf0oLPjrz6T/ROD/OfgPT q+8eRgXimnjpVB3OMHn6IBeB2Uf5ad4UUS6ynQqhb97JFmmMDn5p/yHop1DoM/jTbbIj rRCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=A5Dm+iTcX454fcHyMEXk9WWCeIVDWcRwDhmrUkKh0lw=; b=wZu6k/2x7pW7W7Tjm0Y5FoXll7mrcQXnEZKQeIzHs1o5hH94/XzozuluVY6Rb+aKEr b6fjB8G9WTpOcOwL+hCuPetVZ1l8FNzjRwwW9p0Yv+tPp7CXHxu0w9L+NIormLrBjaeg +F3v4XochHJj+R8KByuUBGRPcivwdJlmLtZPgvbwntoarX+pvglg2noki3BY47k+kPT2 sRun529wLqfNw4Osmciz929VDpbfHSm9BZiy6iH1Ki83pFoyZYxVZ/iBcStUrdhG21Gp n4JcwGZrT4Esb9ZepRjj9HkPCtnmKrOL+HRloNgYRUw97etWiVo3ublAVvdmkzqC8rxc TnmQ== X-Gm-Message-State: AO0yUKXwCXZpCP+c3jxbffCp0CFucb5HdMdMa4dVyMjjm1W+GoGTAUV0 MPnMZxfMjuiFlXhwxKc4dsiIX38neKg= X-Google-Smtp-Source: AK7set/XJw53tA1IJpBaTaTzVEG+KgPH6fwhonx9AcIgcVXHFr0UFneWVYMbCnEC/qSXeYdmSp9dbQ== X-Received: by 2002:a17:906:68d3:b0:8b1:7e1f:91c5 with SMTP id y19-20020a17090668d300b008b17e1f91c5mr35903416ejr.35.1677504843751; Mon, 27 Feb 2023 05:34:03 -0800 (PST) From: Bernhard Beschow To: qemu-devel@nongnu.org Cc: BALATON Zoltan , Huacai Chen , Gerd Hoffmann , Jiaxun Yang , qemu-ppc@nongnu.org, =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Rene Engel Subject: [PATCH v4 7/7] hw/audio/via-ac97: Basic implementation of audio playback Date: Mon, 27 Feb 2023 14:33:25 +0100 Message-Id: <20230227133325.22023-8-shentey@gmail.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230227133325.22023-1-shentey@gmail.com> References: <20230227133325.22023-1-shentey@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer2=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52d; envelope-from=shentey@gmail.com; helo=mail-ed1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer2=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer2=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1677505051288100003 Content-Type: text/plain; charset="utf-8" From: BALATON Zoltan Add basic implementation of the AC'97 sound part used in VIA south bridge chips. Not all features of the device is emulated, only one playback channel is supported for now but this is enough to get sound output from some guests using this device on pegasos2. Signed-off-by: BALATON Zoltan Tested-by: Rene Engel Message-Id: <0f210fb86b832649821fe142d58634319c091874.1677445307.git.balato= n@eik.bme.hu> --- include/hw/isa/vt82c686.h | 25 +++ hw/audio/via-ac97.c | 455 +++++++++++++++++++++++++++++++++++++- hw/isa/vt82c686.c | 2 +- hw/audio/trace-events | 6 + hw/isa/trace-events | 1 + 5 files changed, 482 insertions(+), 7 deletions(-) diff --git a/include/hw/isa/vt82c686.h b/include/hw/isa/vt82c686.h index e273cd38dc..da1722daf2 100644 --- a/include/hw/isa/vt82c686.h +++ b/include/hw/isa/vt82c686.h @@ -1,6 +1,8 @@ #ifndef HW_VT82C686_H #define HW_VT82C686_H =20 +#include "hw/pci/pci_device.h" +#include "audio/audio.h" =20 #define TYPE_VT82C686B_ISA "vt82c686b-isa" #define TYPE_VT82C686B_USB_UHCI "vt82c686b-usb-uhci" @@ -9,6 +11,29 @@ #define TYPE_VIA_IDE "via-ide" #define TYPE_VIA_MC97 "via-mc97" =20 +typedef struct { + uint8_t stat; + uint8_t type; + uint32_t base; + uint32_t curr; + uint32_t addr; + uint32_t clen; +} ViaAC97SGDChannel; + +OBJECT_DECLARE_SIMPLE_TYPE(ViaAC97State, VIA_AC97); + +struct ViaAC97State { + PCIDevice dev; + QEMUSoundCard card; + MemoryRegion sgd; + MemoryRegion fm; + MemoryRegion midi; + SWVoiceOut *vo; + ViaAC97SGDChannel aur; + uint16_t codec_regs[128]; + uint32_t ac97_cmd; +}; + void via_isa_set_irq(PCIDevice *d, int n, int level); =20 #endif diff --git a/hw/audio/via-ac97.c b/hw/audio/via-ac97.c index d1a856f63d..676254b7a4 100644 --- a/hw/audio/via-ac97.c +++ b/hw/audio/via-ac97.c @@ -1,39 +1,482 @@ /* * VIA south bridges sound support * + * Copyright (c) 2022-2023 BALATON Zoltan + * * This work is licensed under the GNU GPL license version 2 or later. */ =20 /* - * TODO: This is entirely boiler plate just registering empty PCI devices - * with the right ID guests expect, functionality should be added here. + * TODO: This is only a basic implementation of one audio playback channel + * more functionality should be added here. */ =20 #include "qemu/osdep.h" +#include "qemu/log.h" #include "hw/isa/vt82c686.h" -#include "hw/pci/pci_device.h" +#include "ac97.h" +#include "trace.h" + +#define CLEN_IS_EOL(x) ((x)->clen & BIT(31)) +#define CLEN_IS_FLAG(x) ((x)->clen & BIT(30)) +#define CLEN_IS_STOP(x) ((x)->clen & BIT(29)) +#define CLEN_LEN(x) ((x)->clen & 0xffffff) + +#define STAT_ACTIVE BIT(7) +#define STAT_PAUSED BIT(6) +#define STAT_TRIG BIT(3) +#define STAT_STOP BIT(2) +#define STAT_EOL BIT(1) +#define STAT_FLAG BIT(0) + +#define CNTL_START BIT(7) +#define CNTL_TERM BIT(6) +#define CNTL_PAUSE BIT(3) + +static void open_voice_out(ViaAC97State *s); + +static uint16_t codec_rates[] =3D { 8000, 11025, 16000, 22050, 32000, 4410= 0, + 48000 }; + +#define CODEC_REG(s, o) ((s)->codec_regs[(o) / 2]) +#define CODEC_VOL(vol, mask) ((255 * ((vol) & mask)) / mask) + +static void codec_volume_set_out(ViaAC97State *s) +{ + int lvol, rvol, mute; + + lvol =3D 255 - CODEC_VOL(CODEC_REG(s, AC97_Master_Volume_Mute) >> 8, 0= x1f); + lvol *=3D 255 - CODEC_VOL(CODEC_REG(s, AC97_PCM_Out_Volume_Mute) >> 8,= 0x1f); + lvol /=3D 255; + rvol =3D 255 - CODEC_VOL(CODEC_REG(s, AC97_Master_Volume_Mute), 0x1f); + rvol *=3D 255 - CODEC_VOL(CODEC_REG(s, AC97_PCM_Out_Volume_Mute), 0x1f= ); + rvol /=3D 255; + mute =3D CODEC_REG(s, AC97_Master_Volume_Mute) >> MUTE_SHIFT; + mute |=3D CODEC_REG(s, AC97_PCM_Out_Volume_Mute) >> MUTE_SHIFT; + AUD_set_volume_out(s->vo, mute, lvol, rvol); +} + +static void codec_reset(ViaAC97State *s) +{ + memset(s->codec_regs, 0, sizeof(s->codec_regs)); + CODEC_REG(s, AC97_Reset) =3D 0x6a90; + CODEC_REG(s, AC97_Master_Volume_Mute) =3D 0x8000; + CODEC_REG(s, AC97_Headphone_Volume_Mute) =3D 0x8000; + CODEC_REG(s, AC97_Master_Volume_Mono_Mute) =3D 0x8000; + CODEC_REG(s, AC97_Phone_Volume_Mute) =3D 0x8008; + CODEC_REG(s, AC97_Mic_Volume_Mute) =3D 0x8008; + CODEC_REG(s, AC97_Line_In_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_CD_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_Video_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_Aux_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_PCM_Out_Volume_Mute) =3D 0x8808; + CODEC_REG(s, AC97_Record_Gain_Mute) =3D 0x8000; + CODEC_REG(s, AC97_Powerdown_Ctrl_Stat) =3D 0x000f; + CODEC_REG(s, AC97_Extended_Audio_ID) =3D 0x0a05; + CODEC_REG(s, AC97_Extended_Audio_Ctrl_Stat) =3D 0x0400; + CODEC_REG(s, AC97_PCM_Front_DAC_Rate) =3D 48000; + CODEC_REG(s, AC97_PCM_LR_ADC_Rate) =3D 48000; + /* Sigmatel 9766 (STAC9766) */ + CODEC_REG(s, AC97_Vendor_ID1) =3D 0x8384; + CODEC_REG(s, AC97_Vendor_ID2) =3D 0x7666; +} + +static uint16_t codec_read(ViaAC97State *s, uint8_t addr) +{ + return CODEC_REG(s, addr); +} + +static void codec_write(ViaAC97State *s, uint8_t addr, uint16_t val) +{ + trace_via_ac97_codec_write(addr, val); + switch (addr) { + case AC97_Reset: + codec_reset(s); + return; + case AC97_Master_Volume_Mute: + case AC97_PCM_Out_Volume_Mute: + if (addr =3D=3D AC97_Master_Volume_Mute) { + if (val & BIT(13)) { + val |=3D 0x1f00; + } + if (val & BIT(5)) { + val |=3D 0x1f; + } + } + CODEC_REG(s, addr) =3D val & 0x9f1f; + codec_volume_set_out(s); + return; + case AC97_Extended_Audio_Ctrl_Stat: + CODEC_REG(s, addr) &=3D ~EACS_VRA; + CODEC_REG(s, addr) |=3D val & EACS_VRA; + if (!(val & EACS_VRA)) { + CODEC_REG(s, AC97_PCM_Front_DAC_Rate) =3D 48000; + CODEC_REG(s, AC97_PCM_LR_ADC_Rate) =3D 48000; + open_voice_out(s); + } + return; + case AC97_PCM_Front_DAC_Rate: + case AC97_PCM_LR_ADC_Rate: + if (CODEC_REG(s, AC97_Extended_Audio_Ctrl_Stat) & EACS_VRA) { + int i; + uint16_t rate =3D val; + + for (i =3D 0; i < ARRAY_SIZE(codec_rates) - 1; i++) { + if (rate < codec_rates[i] + + (codec_rates[i + 1] - codec_rates[i]) / 2) { + rate =3D codec_rates[i]; + break; + } + } + if (rate > 48000) { + rate =3D 48000; + } + CODEC_REG(s, addr) =3D rate; + open_voice_out(s); + } + return; + case AC97_Powerdown_Ctrl_Stat: + CODEC_REG(s, addr) =3D (val & 0xff00) | (CODEC_REG(s, addr) & 0xff= ); + return; + case AC97_Extended_Audio_ID: + case AC97_Vendor_ID1: + case AC97_Vendor_ID2: + /* Read only registers */ + return; + default: + qemu_log_mask(LOG_UNIMP, + "via-ac97: Unimplemented codec register 0x%x\n", add= r); + CODEC_REG(s, addr) =3D val; + } +} + +static void fetch_sgd(ViaAC97SGDChannel *c, PCIDevice *d) +{ + uint32_t b[2]; + + if (c->curr < c->base) { + c->curr =3D c->base; + } + if (unlikely(pci_dma_read(d, c->curr, b, sizeof(b)) !=3D MEMTX_OK)) { + qemu_log_mask(LOG_GUEST_ERROR, + "via-ac97: DMA error reading SGD table\n"); + return; + } + c->addr =3D le32_to_cpu(b[0]); + c->clen =3D le32_to_cpu(b[1]); + trace_via_ac97_sgd_fetch(c->curr, c->addr, CLEN_IS_STOP(c) ? 'S' : '-', + CLEN_IS_EOL(c) ? 'E' : '-', + CLEN_IS_FLAG(c) ? 'F' : '-', CLEN_LEN(c)); +} + +static void out_cb(void *opaque, int avail) +{ + ViaAC97State *s =3D opaque; + ViaAC97SGDChannel *c =3D &s->aur; + int temp, to_copy, copied; + bool stop =3D false; + uint8_t tmpbuf[4096]; + + if (c->stat & STAT_PAUSED) { + return; + } + c->stat |=3D STAT_ACTIVE; + while (avail && !stop) { + if (!c->clen) { + fetch_sgd(c, &s->dev); + } + temp =3D MIN(CLEN_LEN(c), avail); + while (temp) { + to_copy =3D MIN(temp, sizeof(tmpbuf)); + pci_dma_read(&s->dev, c->addr, tmpbuf, to_copy); + copied =3D AUD_write(s->vo, tmpbuf, to_copy); + if (!copied) { + stop =3D true; + break; + } + temp -=3D copied; + avail -=3D copied; + c->addr +=3D copied; + c->clen -=3D copied; + } + if (CLEN_LEN(c) =3D=3D 0) { + c->curr +=3D 8; + if (CLEN_IS_EOL(c)) { + c->stat |=3D STAT_EOL; + if (c->type & CNTL_START) { + c->curr =3D c->base; + c->stat |=3D STAT_PAUSED; + } else { + c->stat &=3D ~STAT_ACTIVE; + AUD_set_active_out(s->vo, 0); + } + if (c->type & STAT_EOL) { + pci_set_irq(&s->dev, 1); + } + } + if (CLEN_IS_FLAG(c)) { + c->stat |=3D STAT_FLAG; + c->stat |=3D STAT_PAUSED; + if (c->type & STAT_FLAG) { + pci_set_irq(&s->dev, 1); + } + } + if (CLEN_IS_STOP(c)) { + c->stat |=3D STAT_STOP; + c->stat |=3D STAT_PAUSED; + } + c->clen =3D 0; + stop =3D true; + } + } +} + +static void open_voice_out(ViaAC97State *s) +{ + struct audsettings as =3D { + .freq =3D CODEC_REG(s, AC97_PCM_Front_DAC_Rate), + .nchannels =3D s->aur.type & BIT(4) ? 2 : 1, + .fmt =3D s->aur.type & BIT(5) ? AUDIO_FORMAT_S16 : AUDIO_FORMAT_S8, + .endianness =3D 0, + }; + s->vo =3D AUD_open_out(&s->card, s->vo, "via-ac97.out", s, out_cb, &as= ); +} + +static uint64_t sgd_read(void *opaque, hwaddr addr, unsigned size) +{ + ViaAC97State *s =3D opaque; + uint64_t val =3D 0; + + switch (addr) { + case 0: + val =3D s->aur.stat; + if (s->aur.type & CNTL_START) { + val |=3D STAT_TRIG; + } + break; + case 1: + val =3D s->aur.stat & STAT_PAUSED ? BIT(3) : 0; + break; + case 2: + val =3D s->aur.type; + break; + case 4: + val =3D s->aur.curr; + break; + case 0xc: + val =3D CLEN_LEN(&s->aur); + break; + case 0x10: + /* silence unimplemented log message that happens at every IRQ */ + break; + case 0x80: + val =3D s->ac97_cmd; + break; + case 0x84: + val =3D s->aur.stat & STAT_FLAG; + if (s->aur.stat & STAT_EOL) { + val |=3D BIT(4); + } + if (s->aur.stat & STAT_STOP) { + val |=3D BIT(8); + } + if (s->aur.stat & STAT_ACTIVE) { + val |=3D BIT(12); + } + break; + default: + qemu_log_mask(LOG_UNIMP, "via-ac97: Unimplemented register read 0x= %" + HWADDR_PRIx"\n", addr); + } + trace_via_ac97_sgd_read(addr, size, val); + return val; +} + +static void sgd_write(void *opaque, hwaddr addr, uint64_t val, unsigned si= ze) +{ + ViaAC97State *s =3D opaque; + + trace_via_ac97_sgd_write(addr, size, val); + switch (addr) { + case 0: + if (val & STAT_STOP) { + s->aur.stat &=3D ~STAT_PAUSED; + } + if (val & STAT_EOL) { + s->aur.stat &=3D ~(STAT_EOL | STAT_PAUSED); + if (s->aur.type & STAT_EOL) { + pci_set_irq(&s->dev, 0); + } + } + if (val & STAT_FLAG) { + s->aur.stat &=3D ~(STAT_FLAG | STAT_PAUSED); + if (s->aur.type & STAT_FLAG) { + pci_set_irq(&s->dev, 0); + } + } + break; + case 1: + if (val & CNTL_START) { + AUD_set_active_out(s->vo, 1); + s->aur.stat =3D STAT_ACTIVE; + } + if (val & CNTL_TERM) { + AUD_set_active_out(s->vo, 0); + s->aur.stat &=3D ~(STAT_ACTIVE | STAT_PAUSED); + s->aur.clen =3D 0; + } + if (val & CNTL_PAUSE) { + AUD_set_active_out(s->vo, 0); + s->aur.stat &=3D ~STAT_ACTIVE; + s->aur.stat |=3D STAT_PAUSED; + } else if (!(val & CNTL_PAUSE) && (s->aur.stat & STAT_PAUSED)) { + AUD_set_active_out(s->vo, 1); + s->aur.stat |=3D STAT_ACTIVE; + s->aur.stat &=3D ~STAT_PAUSED; + } + break; + case 2: + { + uint32_t oldval =3D s->aur.type; + s->aur.type =3D val; + if ((oldval & 0x30) !=3D (val & 0x30)) { + open_voice_out(s); + } + break; + } + case 4: + s->aur.base =3D val & ~1ULL; + s->aur.curr =3D s->aur.base; + break; + case 0x80: + if (val >> 30) { + /* we only have primary codec */ + break; + } + if (val & BIT(23)) { /* read reg */ + s->ac97_cmd =3D val & 0xc0ff0000ULL; + s->ac97_cmd |=3D codec_read(s, (val >> 16) & 0x7f); + s->ac97_cmd |=3D BIT(25); /* data valid */ + } else { + s->ac97_cmd =3D val & 0xc0ffffffULL; + codec_write(s, (val >> 16) & 0x7f, val); + } + break; + case 0xc: + case 0x84: + /* Read only */ + break; + default: + qemu_log_mask(LOG_UNIMP, "via-ac97: Unimplemented register write 0= x%" + HWADDR_PRIx"\n", addr); + } +} + +static const MemoryRegionOps sgd_ops =3D { + .read =3D sgd_read, + .write =3D sgd_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static uint64_t fm_read(void *opaque, hwaddr addr, unsigned size) +{ + qemu_log_mask(LOG_UNIMP, "%s: 0x%"HWADDR_PRIx" %d\n", __func__, addr, = size); + return 0; +} + +static void fm_write(void *opaque, hwaddr addr, uint64_t val, unsigned siz= e) +{ + qemu_log_mask(LOG_UNIMP, "%s: 0x%"HWADDR_PRIx" %d <=3D 0x%"PRIX64"\n", + __func__, addr, size, val); +} + +static const MemoryRegionOps fm_ops =3D { + .read =3D fm_read, + .write =3D fm_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static uint64_t midi_read(void *opaque, hwaddr addr, unsigned size) +{ + qemu_log_mask(LOG_UNIMP, "%s: 0x%"HWADDR_PRIx" %d\n", __func__, addr, = size); + return 0; +} + +static void midi_write(void *opaque, hwaddr addr, uint64_t val, unsigned s= ize) +{ + qemu_log_mask(LOG_UNIMP, "%s: 0x%"HWADDR_PRIx" %d <=3D 0x%"PRIX64"\n", + __func__, addr, size, val); +} + +static const MemoryRegionOps midi_ops =3D { + .read =3D midi_read, + .write =3D midi_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static void via_ac97_reset(DeviceState *dev) +{ + ViaAC97State *s =3D VIA_AC97(dev); + + codec_reset(s); +} =20 static void via_ac97_realize(PCIDevice *pci_dev, Error **errp) { - pci_set_word(pci_dev->config + PCI_COMMAND, - PCI_COMMAND_INVALIDATE | PCI_COMMAND_PARITY); + ViaAC97State *s =3D VIA_AC97(pci_dev); + Object *o =3D OBJECT(s); + + /* + * Command register Bus Master bit is documented to be fixed at 0 but = it's + * needed for PCI DMA to work in QEMU. The pegasos2 firmware writes 0 = here + * and the AmigaOS driver writes 1 only enabling IO bit which works on + * real hardware. So set it here and fix it to 1 to allow DMA. + */ + pci_set_word(pci_dev->config + PCI_COMMAND, PCI_COMMAND_MASTER); + pci_set_word(pci_dev->wmask + PCI_COMMAND, PCI_COMMAND_IO); pci_set_word(pci_dev->config + PCI_STATUS, PCI_STATUS_CAP_LIST | PCI_STATUS_DEVSEL_MEDIUM); pci_set_long(pci_dev->config + PCI_INTERRUPT_PIN, 0x03); + pci_set_byte(pci_dev->config + 0x40, 1); /* codec ready */ + + memory_region_init_io(&s->sgd, o, &sgd_ops, s, "via-ac97.sgd", 256); + pci_register_bar(pci_dev, 0, PCI_BASE_ADDRESS_SPACE_IO, &s->sgd); + memory_region_init_io(&s->fm, o, &fm_ops, s, "via-ac97.fm", 4); + pci_register_bar(pci_dev, 1, PCI_BASE_ADDRESS_SPACE_IO, &s->fm); + memory_region_init_io(&s->midi, o, &midi_ops, s, "via-ac97.midi", 4); + pci_register_bar(pci_dev, 2, PCI_BASE_ADDRESS_SPACE_IO, &s->midi); + + AUD_register_card ("via-ac97", &s->card); } =20 +static void via_ac97_exit(PCIDevice *dev) +{ + ViaAC97State *s =3D VIA_AC97(dev); + + AUD_close_out(&s->card, s->vo); + AUD_remove_card(&s->card); +} + +static Property via_ac97_properties[] =3D { + DEFINE_AUDIO_PROPERTIES(ViaAC97State, card), + DEFINE_PROP_END_OF_LIST(), +}; + static void via_ac97_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); PCIDeviceClass *k =3D PCI_DEVICE_CLASS(klass); =20 k->realize =3D via_ac97_realize; + k->exit =3D via_ac97_exit; k->vendor_id =3D PCI_VENDOR_ID_VIA; k->device_id =3D PCI_DEVICE_ID_VIA_AC97; k->revision =3D 0x50; k->class_id =3D PCI_CLASS_MULTIMEDIA_AUDIO; + device_class_set_props(dc, via_ac97_properties); set_bit(DEVICE_CATEGORY_SOUND, dc->categories); dc->desc =3D "VIA AC97"; + dc->reset =3D via_ac97_reset; /* Reason: Part of a south bridge chip */ dc->user_creatable =3D false; } @@ -41,7 +484,7 @@ static void via_ac97_class_init(ObjectClass *klass, void= *data) static const TypeInfo via_ac97_info =3D { .name =3D TYPE_VIA_AC97, .parent =3D TYPE_PCI_DEVICE, - .instance_size =3D sizeof(PCIDevice), + .instance_size =3D sizeof(ViaAC97State), .class_init =3D via_ac97_class_init, .interfaces =3D (InterfaceInfo[]) { { INTERFACE_CONVENTIONAL_PCI_DEVICE }, diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c index 84b5c5e64f..48947cb125 100644 --- a/hw/isa/vt82c686.c +++ b/hw/isa/vt82c686.c @@ -554,7 +554,7 @@ struct ViaISAState { PCIIDEState ide; UHCIState uhci[2]; ViaPMState pm; - PCIDevice ac97; + ViaAC97State ac97; PCIDevice mc97; }; =20 diff --git a/hw/audio/trace-events b/hw/audio/trace-events index e0e71cd9b1..4dec48a4fd 100644 --- a/hw/audio/trace-events +++ b/hw/audio/trace-events @@ -11,3 +11,9 @@ hda_audio_running(const char *stream, int nr, bool runnin= g) "st %s, nr %d, run % hda_audio_format(const char *stream, int chan, const char *fmt, int freq) = "st %s, %d x %s @ %d Hz" hda_audio_adjust(const char *stream, int pos) "st %s, pos %d" hda_audio_overrun(const char *stream) "st %s" + +#via-ac97.c +via_ac97_codec_write(uint8_t addr, uint16_t val) "0x%x <- 0x%x" +via_ac97_sgd_fetch(uint32_t curr, uint32_t addr, char stop, char eol, char= flag, uint32_t len) "curr=3D0x%x addr=3D0x%x %c%c%c len=3D%d" +via_ac97_sgd_read(uint64_t addr, unsigned size, uint64_t val) "0x%"PRIx64"= %d -> 0x%"PRIx64 +via_ac97_sgd_write(uint64_t addr, unsigned size, uint64_t val) "0x%"PRIx64= " %d <- 0x%"PRIx64 diff --git a/hw/isa/trace-events b/hw/isa/trace-events index c4567a9b47..1816e8307a 100644 --- a/hw/isa/trace-events +++ b/hw/isa/trace-events @@ -16,6 +16,7 @@ apm_io_write(uint8_t addr, uint8_t val) "write addr=3D0x%= x val=3D0x%02x" =20 # vt82c686.c via_isa_write(uint32_t addr, uint32_t val, int len) "addr 0x%x val 0x%x le= n 0x%x" +via_pm_read(uint32_t addr, uint32_t val, int len) "addr 0x%x val 0x%x len = 0x%x" via_pm_write(uint32_t addr, uint32_t val, int len) "addr 0x%x val 0x%x len= 0x%x" via_pm_io_read(uint32_t addr, uint32_t val, int len) "addr 0x%x val 0x%x l= en 0x%x" via_pm_io_write(uint32_t addr, uint32_t val, int len) "addr 0x%x val 0x%x = len 0x%x" --=20 2.39.2