From nobody Fri Nov 14 19:40:01 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520225; cv=none; d=zohomail.com; s=zohoarc; b=lwvD5Jtl6KghISSrVOVpkNLeuUojxM1p6TTIjnhyphge643Q+1R5eX/bxCzOftAmR0WxrThtwNR0Bnn8t6uyJ/l36+CaChi3fNKMApp8PQGfQPFim/koYmlTssT1is+HZq4hvjclH2DU63xdBRKNlXwk5G2PIG+oW8myq8LZCHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520225; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=dD9uX6PaBNvNuAFjXV9Q7DahJDHptOizy7QDhFL8Gts=; b=IUQD/EUCB1Afmn7SLBmNB+WqyeyX0IohdIuPd9s1T4IDibA8QdOVY0iiYdicJ1W6GvDDzfY+0+FCd63vm15VXjUnJ7fscFIfs+IZDSzNBA9tqwD+egakFgWOVe5KKJey0sBlW5JPFRx2Xhjh53Oud8oIcaRO3wCuPhuFrOJ+Cjc= 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+importer=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 1760520225811791.2972214295139; Wed, 15 Oct 2025 02:23:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeM-0001xm-I4; Wed, 15 Oct 2025 05:18:26 -0400 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 1v8xe6-0001pi-Ps for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:12 -0400 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdl-0007Bk-MM for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:09 -0400 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-b41870fef44so491070366b.3 for ; Wed, 15 Oct 2025 02:17:44 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519862; x=1761124662; darn=nongnu.org; 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=dD9uX6PaBNvNuAFjXV9Q7DahJDHptOizy7QDhFL8Gts=; b=hMdCQWsNKd4NetYe7OEnS64akGFKWuBwmAo0rHa1o1HYeMjQy9u7AdmV9IdlvY7qdM m5uPQQQjmchXSF6a9reTaHLjrqosVupVj/xbP8/C7mG3AVOwsUlvdqOT+vHGabY1XotF /ZjF4e3eLY+hFa2Cvw6ZpJlBqzNZBn5uuRVx6uWHLcN/4YioLubCrXSOzKxUmBGznvhW uajAzqDHzAAcaygPjwuhr0PHD3DUyNyQLAiE9AJHjER2uYr8tKmsiHRKa5WL+X8yX8Ha xcOpfMEdeWooeW9kakOcvla0UqcZMX8X6YlzYGkS7t9IcouX6bw4v2rCBFyRlA1ZclOt CTUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519862; x=1761124662; 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=dD9uX6PaBNvNuAFjXV9Q7DahJDHptOizy7QDhFL8Gts=; b=gyiSUJhnSIHnobDg2Zn9PY4Fr9FIf77tBy5u6A/mrFjJqW5LEEitWHvEJyeZXLhjiq YPoPCCwN/xocWCFK4N2WG5iJWxaFwM+3c+sGXlnt8H6YWXAh8piL7rC2HdeQqi2He57Y MB3Lmd3IqcMPPstN53txbLkO3SrFkzWaScsBmODR0/61uW8WSeSzZDBNHTUbdvTo2IPr 0bkxZTmh++tD8//1Y7VzMoUM23sA3XI9fCFGDB3HZ0zTligpSqiv2Q9esrG7I9HzvDEr ggeFCkgN0mB7pUUFLB5P8ZLaY4MOGy3yyzBRHs0qgP1pHb1m7gTxJdjvt5pIF//UFD64 lR2w== X-Gm-Message-State: AOJu0Yyj2k7kDOM6m+MCXRm9UqMpG6prnAIDXpgzjMYF38u024aP47Kh 8OYY1CzlYBYFkIRauQOEdEyH9IGOCQIfA3OSLbsYbHrKtXrk+ahVDlFhfZ+2RuYxcs0= X-Gm-Gg: ASbGncubyi2P3UWbx82D1OszqjBVRe1wfDigYQTksf7tESQ93Derg5wTpmCGl+lNFtk 5pNhBDiaPu6aGqx9YI3L5KPtN/v5C7J4CY7L12LF7vKws65bt1Yq9Z33BkzaxiVdUbzVj2dLmel 0wWhPdWXzxKwFryi1Yv2+GUvVDEa4q/5GwxQ1y5wuT7vnqz0rswXoHUKUXQEkhoQHuwaVfs2aTy GZxIQcUT4HirFtHcWg8Z6gkIfuJ7dgtrVTMSqlJwwv64fib2w5Lw9BQSB69bEwfUkp1DxuaG2GX vZH9lnW4DFX+SnIh7wV6PNTwsAUTVm5u6/UDPuvn7RAQKYEKuGv+MQ33zY3nr/D5wUKaXANp0rh C2RCSJJyQzadcZPvsKYA3xUEhlrSH0pkg6GJ7X9iVKYJ1fcQHhZF09uasoj3WS+0s0ix4L3kR X-Google-Smtp-Source: AGHT+IFn+Jxc4SgpAXY72JjpWx+qqMtm+cS8pd7JnLXg7lsD9pjCYZCnrynqxVjYC2WqHyUIITBJIA== X-Received: by 2002:a17:907:7f0b:b0:b46:31be:e8fe with SMTP id a640c23a62f3a-b50aa48c4f0mr3042696566b.11.1760519861994; Wed, 15 Oct 2025 02:17:41 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV Subject: [PATCH v3 01/14] hw/timer: Make frequency configurable Date: Wed, 15 Oct 2025 11:17:16 +0200 Message-ID: <20251015091729.33761-2-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::629; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x629.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=unavailable 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520228505154100 Content-Type: text/plain; charset="utf-8" From: YannickV The a9 global timer and arm mp timers rely on the PERIPHCLK as their clock source. The current implementation does not take that into account. That causes problems for applications assuming other frequencies than 1 GHz. We can now configure frequencies for the a9 global timer and arm mp timer. By allowing these values to be set according to the application's needs, we ensure that the timers behave consistently with the expected system configuration. The SoC configures the device correctly. Information can be found in the Zynq 7000 SoC Technical Reference Manual under Timers. https://docs.amd.com/r/en-US/ug585-zynq-7000-SoC-TRM Signed-off-by: YannickV --- hw/timer/a9gtimer.c | 9 ++++++--- hw/timer/arm_mptimer.c | 15 +++++++++++---- include/hw/timer/a9gtimer.h | 1 + include/hw/timer/arm_mptimer.h | 2 ++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c index 690140f5a6..ad9abcb4bb 100644 --- a/hw/timer/a9gtimer.c +++ b/hw/timer/a9gtimer.c @@ -63,9 +63,9 @@ static inline int a9_gtimer_get_current_cpu(A9GTimerState= *s) static inline uint64_t a9_gtimer_get_conv(A9GTimerState *s) { uint64_t prescale =3D extract32(s->control, R_CONTROL_PRESCALER_SHIFT, - R_CONTROL_PRESCALER_LEN); - - return (prescale + 1) * 10; + R_CONTROL_PRESCALER_LEN) + 1; + uint64_t scaled_prescaler =3D prescale * 10; + return muldiv64(scaled_prescaler, NANOSECONDS_PER_SECOND, s->freq_hz); } =20 static A9GTimerUpdate a9_gtimer_get_update(A9GTimerState *s) @@ -374,6 +374,9 @@ static const VMStateDescription vmstate_a9_gtimer =3D { }; =20 static const Property a9_gtimer_properties[] =3D { + /* Default clock-frequency is 1GHz (NANOSECONDS_PER_SECOND) */ + DEFINE_PROP_UINT64("clock-frequency", A9GTimerState, freq_hz, + NANOSECONDS_PER_SECOND), DEFINE_PROP_UINT32("num-cpu", A9GTimerState, num_cpu, 0), }; =20 diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c index 7cc5915e9e..342ca1276a 100644 --- a/hw/timer/arm_mptimer.c +++ b/hw/timer/arm_mptimer.c @@ -59,9 +59,11 @@ static inline void timerblock_update_irq(TimerBlock *tb) } =20 /* Return conversion factor from mpcore timer ticks to qemu timer ticks. = */ -static inline uint32_t timerblock_scale(uint32_t control) +static inline uint32_t timerblock_scale(TimerBlock *tb, uint32_t control) { - return (((control >> 8) & 0xff) + 1) * 10; + uint64_t prescale =3D (((control >> 8) & 0xff) + 1); + uint64_t scaled_prescaler =3D prescale * 10; + return muldiv64(scaled_prescaler, NANOSECONDS_PER_SECOND, tb->freq_hz); } =20 /* Must be called within a ptimer transaction block */ @@ -155,7 +157,7 @@ static void timerblock_write(void *opaque, hwaddr addr, ptimer_stop(tb->timer); } if ((control & 0xff00) !=3D (value & 0xff00)) { - ptimer_set_period(tb->timer, timerblock_scale(value)); + ptimer_set_period(tb->timer, timerblock_scale(tb, value)); } if (value & 1) { uint64_t count =3D ptimer_get_count(tb->timer); @@ -222,7 +224,8 @@ static void timerblock_reset(TimerBlock *tb) ptimer_transaction_begin(tb->timer); ptimer_stop(tb->timer); ptimer_set_limit(tb->timer, 0, 1); - ptimer_set_period(tb->timer, timerblock_scale(0)); + ptimer_set_period(tb->timer, + timerblock_scale(tb, tb->control)); ptimer_transaction_commit(tb->timer); } } @@ -269,6 +272,7 @@ static void arm_mptimer_realize(DeviceState *dev, Error= **errp) */ for (i =3D 0; i < s->num_cpu; i++) { TimerBlock *tb =3D &s->timerblock[i]; + tb->freq_hz =3D s->freq_hz; tb->timer =3D ptimer_init(timerblock_tick, tb, PTIMER_POLICY); sysbus_init_irq(sbd, &tb->irq); memory_region_init_io(&tb->iomem, OBJECT(s), &timerblock_ops, tb, @@ -301,6 +305,9 @@ static const VMStateDescription vmstate_arm_mptimer =3D= { }; =20 static const Property arm_mptimer_properties[] =3D { + /* Default clock-frequency is 1GHz (NANOSECONDS_PER_SECOND) */ + DEFINE_PROP_UINT64("clock-frequency", ARMMPTimerState, freq_hz, + NANOSECONDS_PER_SECOND), DEFINE_PROP_UINT32("num-cpu", ARMMPTimerState, num_cpu, 0), }; =20 diff --git a/include/hw/timer/a9gtimer.h b/include/hw/timer/a9gtimer.h index 6ae9122e4b..3b63d14927 100644 --- a/include/hw/timer/a9gtimer.h +++ b/include/hw/timer/a9gtimer.h @@ -76,6 +76,7 @@ struct A9GTimerState { =20 MemoryRegion iomem; /* static props */ + uint64_t freq_hz; uint32_t num_cpu; =20 QEMUTimer *timer; diff --git a/include/hw/timer/arm_mptimer.h b/include/hw/timer/arm_mptimer.h index 65a96e2a0d..da43a3d351 100644 --- a/include/hw/timer/arm_mptimer.h +++ b/include/hw/timer/arm_mptimer.h @@ -31,6 +31,7 @@ typedef struct { uint32_t control; uint32_t status; struct ptimer_state *timer; + uint64_t freq_hz; qemu_irq irq; MemoryRegion iomem; } TimerBlock; @@ -43,6 +44,7 @@ struct ARMMPTimerState { SysBusDevice parent_obj; /*< public >*/ =20 + uint64_t freq_hz; uint32_t num_cpu; TimerBlock timerblock[ARM_MPTIMER_MAX_CPUS]; MemoryRegion iomem; --=20 2.47.3 From nobody Fri Nov 14 19:40:01 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520012; cv=none; d=zohomail.com; s=zohoarc; b=LqunwYPCVSLUGTOr8rDGKCgic9SHpX26Ug7SzEHDRkQ6i5yRf9Z699CZNPmxglqZfetw+Izqvu4CyZkzNMRGGbEFQ0fSNJ+JfsaVCLNqbRwMbMEj82Wkbyg9VsT1Wxf7/GREYGufabM+WQjPS4HTfKJUnFFaoIJfebYItUb73QE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520012; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=8m7VawR/OxqHvIOhqF6CI4yFuFJqXm6ZRHJgBXFIs2k=; b=JjRBdTdE3M7YMPcGYeZI1TSYkZdD5sv4cTtKBRKRFdKhtDopMHyVyhUUpUHY/cYQ4vcuqFqmKXEvKisF4boC7hr9TLlqwIZYRlGjKJF4XVPn9yyxvgGoA1YxygEwWlFAso6PEM2I7Y5rNw9Wjz+v0yMHkgvng1sR/EF6jfKXa8s= 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+importer=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 1760520012712215.3106157988849; Wed, 15 Oct 2025 02:20:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeI-0001tA-Jn; Wed, 15 Oct 2025 05:18:22 -0400 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 1v8xe2-0001n6-30 for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:08 -0400 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdi-0007Bv-BI for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:00 -0400 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-b00a9989633so157952366b.0 for ; Wed, 15 Oct 2025 02:17:44 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519863; x=1761124663; darn=nongnu.org; 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=8m7VawR/OxqHvIOhqF6CI4yFuFJqXm6ZRHJgBXFIs2k=; b=MbFB7jtQd2DQmSoDjZoRHdKW5qxDLXcH8E7kyTGP+oye5RHf3f4hpRftMPhB2v/rt2 RdceKreOISdnFtqD2g+xrJnNI3ey2qZs1K1g1O3kwN5c2lIfGpslUHeVJcmmTUi3mSRj DIsS1jQktQdW5Qs0lK7nYypkJTXd9eDKrSK2rpqZf91Tm3jU5cPTr8bNOUZ2NMj/3Tqy rAhMGFl2gk56TCGoC5APFkzCtTYeL8BiSmGe8gwLmXv3kKX4eZk8LQCYORn8Q+V5eHvI qhyuUDnSI8SqO+pUWFasdSBhVQuNACKDBbcb0w4JdMIBtIYAMGpM9FEzdTdAnOPHT314 iGfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519863; x=1761124663; 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=8m7VawR/OxqHvIOhqF6CI4yFuFJqXm6ZRHJgBXFIs2k=; b=IsUd/hwu2OZGMyUMcmhtJspx+b91VWOLSTW9E6xlzHWAU17WdNU3VAFyjfX2pn52Jz 9rFh9j7vEJrwDF1Rm3iRwTrjp5plW28dlt3clYK6BRuMfhzHPzrgeDt6Mz0sAZ2tDA0j mUwNNYeGoNPtRref8W4r4kPSpOURNQ4k9w0QFG13+nGogyajV1Ec8SE7Ao9LbnWQJ+6J jWoQ7sq35vfNT4YPcqTm0dTDk9J57kONJzT6eyjlblDyOaSRt7yW8a49qXVH/uJjZwnb rJf57zQcrDu/nEN9kjarUQK3MiEIWo3WRK5WVCkK2/x/nKd5aGbotYIa7JtTR4uunqY6 A4fg== X-Gm-Message-State: AOJu0YzHRWL+SQkD3YsIw72IXfdaUueAseF5c5CN31AQ449FLU3CUpwq J3yj/llNwOhdnQw7p66p8E7tydeFyqQNc0Xi5Ci65rToMKjRZMOwdlWkL9szWnRa3O4= X-Gm-Gg: ASbGncvczPHHhh/asLzJKrfHy5JfnXXfp+/a6RXl2nDMBUxwUoBq//EuNNMaTzbFmqy ZHd0DtGQWYerNpoFKTTeyd6i+gGiJX9pzdokik1ODDY35lHIdx56yhxNhMWV7LovBu4Q05d2Rvx dzTxsjvkHU1gCuEu8BcozzCBTRcr7rosTAk7ntjvIh937IoLq6GmCQwPbs18uS/muupObvVIm6V Y4++3tLnBNcBfZd3gnn4Pb2OOaTo8lAigQv7+xPqDaucf+gkbGULNwqJY9PodVon5MXwJSTsoc6 6QnJCWynhRk7RMfIV6ekibZGPtDAt9FV7DjxONQVrLU8fflu+BUl5VP68jDyTm1heqoSDnTYhQi vM+JCEzchjIx9ty63727kgxy1BAkhEghrZhwaZ61w9TbA0FOH9nHUqxIRUU/2ujokFC7l+2YO X-Google-Smtp-Source: AGHT+IFJvQJYBuyhdCLuAI9rl/toqlfqnx92EsYwa0SXLO6F4eUuNOuaNQVmAV+lzCoh286Ms7d17g== X-Received: by 2002:a17:907:8694:b0:b40:7305:b93d with SMTP id a640c23a62f3a-b50bcbe2701mr3405313066b.2.1760519863120; Wed, 15 Oct 2025 02:17:43 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV Subject: [PATCH v3 02/14] hw/timer: Make PERIPHCLK divider configurable Date: Wed, 15 Oct 2025 11:17:17 +0200 Message-ID: <20251015091729.33761-3-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::629; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x629.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, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520014220154100 Content-Type: text/plain; charset="utf-8" From: YannickV The A9 global timer and ARM MP timer use PERIPHCLK as their clock source. The frequency of PERIPHCLK is derived by dividing the main clock (CLK) by a configurable divider (must be at least 2). Previously, the PERIPHCLK divider was not configurable, which could lead to unexspected behavior if the application exspected a different PERIPHCLK rate. The property periphclk-divider specifies by which value the main clock is divided to generate PERIPHCLK. This allows flexible configuration of the timer clocks to match application requirements. Information can be found in the Zynq 7000 Soc Technical Reference Manual under Timers. https://docs.amd.com/r/en-US/ug585-zynq-7000-SoC-TRM Signed-off-by: YannickV --- hw/timer/a9gtimer.c | 19 ++++++++++++++++++- hw/timer/arm_mptimer.c | 19 ++++++++++++++++++- include/hw/timer/a9gtimer.h | 1 + include/hw/timer/arm_mptimer.h | 2 ++ 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c index ad9abcb4bb..8b4c6d7e6a 100644 --- a/hw/timer/a9gtimer.c +++ b/hw/timer/a9gtimer.c @@ -27,6 +27,7 @@ #include "hw/timer/a9gtimer.h" #include "migration/vmstate.h" #include "qapi/error.h" +#include "qemu/error-report.h" #include "qemu/timer.h" #include "qemu/bitops.h" #include "qemu/log.h" @@ -62,9 +63,17 @@ static inline int a9_gtimer_get_current_cpu(A9GTimerStat= e *s) =20 static inline uint64_t a9_gtimer_get_conv(A9GTimerState *s) { + /* + * Referring to the ARM-Cortex-A9 MPCore TRM + * + * The a9 global timer relies on the PERIPHCLK as its clock source. + * The PERIPHCLK clock period must be configured as a multiple of the + * main clock CLK. The conversion from the qemu clock (1GHz) to a9 + * gtimer ticks can be calculated like this: + */ uint64_t prescale =3D extract32(s->control, R_CONTROL_PRESCALER_SHIFT, R_CONTROL_PRESCALER_LEN) + 1; - uint64_t scaled_prescaler =3D prescale * 10; + uint64_t scaled_prescaler =3D prescale * s->periphclk_divider; return muldiv64(scaled_prescaler, NANOSECONDS_PER_SECOND, s->freq_hz); } =20 @@ -312,6 +321,12 @@ static void a9_gtimer_realize(DeviceState *dev, Error = **errp) sysbus_init_mmio(sbd, &s->iomem); s->timer =3D timer_new_ns(QEMU_CLOCK_VIRTUAL, a9_gtimer_update_no_sync= , s); =20 + if (s->periphclk_divider < 2) { + error_setg(errp, "Invalid periphclk-divider (%lu), must be >=3D 2", + s->periphclk_divider); + return; + } + for (i =3D 0; i < s->num_cpu; i++) { A9GTimerPerCPU *gtb =3D &s->per_cpu[i]; =20 @@ -378,6 +393,8 @@ static const Property a9_gtimer_properties[] =3D { DEFINE_PROP_UINT64("clock-frequency", A9GTimerState, freq_hz, NANOSECONDS_PER_SECOND), DEFINE_PROP_UINT32("num-cpu", A9GTimerState, num_cpu, 0), + DEFINE_PROP_UINT64("periphclk-divider", A9GTimerState, + periphclk_divider, 10), }; =20 static void a9_gtimer_class_init(ObjectClass *klass, const void *data) diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c index 342ca1276a..cf434ca2f4 100644 --- a/hw/timer/arm_mptimer.c +++ b/hw/timer/arm_mptimer.c @@ -27,6 +27,7 @@ #include "hw/timer/arm_mptimer.h" #include "migration/vmstate.h" #include "qapi/error.h" +#include "qemu/error-report.h" #include "qemu/module.h" #include "hw/core/cpu.h" =20 @@ -61,8 +62,16 @@ static inline void timerblock_update_irq(TimerBlock *tb) /* Return conversion factor from mpcore timer ticks to qemu timer ticks. = */ static inline uint32_t timerblock_scale(TimerBlock *tb, uint32_t control) { + /* + * Referring to the ARM-Cortex-A9 MPCore TRM + * + * The arm mp timer relies on the PERIPHCLK as its clock source. + * The PERIPHCLK clock period must be configured as a multiple of the + * main clock CLK. The conversion from the qemu clock (1GHz) to arm mp + * timer ticks can be calculated like this: + */ uint64_t prescale =3D (((control >> 8) & 0xff) + 1); - uint64_t scaled_prescaler =3D prescale * 10; + uint64_t scaled_prescaler =3D prescale * tb->periphclk_divider; return muldiv64(scaled_prescaler, NANOSECONDS_PER_SECOND, tb->freq_hz); } =20 @@ -273,6 +282,12 @@ static void arm_mptimer_realize(DeviceState *dev, Erro= r **errp) for (i =3D 0; i < s->num_cpu; i++) { TimerBlock *tb =3D &s->timerblock[i]; tb->freq_hz =3D s->freq_hz; + if (s->periphclk_divider < 2) { + error_setg(errp, "Invalid periphclk-divider (%lu), must be >= =3D 2", + s->periphclk_divider); + return; + } + tb->periphclk_divider =3D s->periphclk_divider; tb->timer =3D ptimer_init(timerblock_tick, tb, PTIMER_POLICY); sysbus_init_irq(sbd, &tb->irq); memory_region_init_io(&tb->iomem, OBJECT(s), &timerblock_ops, tb, @@ -309,6 +324,8 @@ static const Property arm_mptimer_properties[] =3D { DEFINE_PROP_UINT64("clock-frequency", ARMMPTimerState, freq_hz, NANOSECONDS_PER_SECOND), DEFINE_PROP_UINT32("num-cpu", ARMMPTimerState, num_cpu, 0), + DEFINE_PROP_UINT64("periphclk-divider", ARMMPTimerState, + periphclk_divider, 10), }; =20 static void arm_mptimer_class_init(ObjectClass *klass, const void *data) diff --git a/include/hw/timer/a9gtimer.h b/include/hw/timer/a9gtimer.h index 3b63d14927..ff9baf1c77 100644 --- a/include/hw/timer/a9gtimer.h +++ b/include/hw/timer/a9gtimer.h @@ -77,6 +77,7 @@ struct A9GTimerState { MemoryRegion iomem; /* static props */ uint64_t freq_hz; + uint64_t periphclk_divider; uint32_t num_cpu; =20 QEMUTimer *timer; diff --git a/include/hw/timer/arm_mptimer.h b/include/hw/timer/arm_mptimer.h index da43a3d351..061934e4b5 100644 --- a/include/hw/timer/arm_mptimer.h +++ b/include/hw/timer/arm_mptimer.h @@ -32,6 +32,7 @@ typedef struct { uint32_t status; struct ptimer_state *timer; uint64_t freq_hz; + uint64_t periphclk_divider; qemu_irq irq; MemoryRegion iomem; } TimerBlock; @@ -45,6 +46,7 @@ struct ARMMPTimerState { /*< public >*/ =20 uint64_t freq_hz; + uint64_t periphclk_divider; uint32_t num_cpu; TimerBlock timerblock[ARM_MPTIMER_MAX_CPUS]; MemoryRegion iomem; --=20 2.47.3 From nobody Fri Nov 14 19:40:01 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520087; cv=none; d=zohomail.com; s=zohoarc; b=Yf28JlXgumHxdN2RsqJCq0tQ06ASLyYfVVytCPGOqar44IRyET8KWvuw4yhP0JkrROdSkGkvAgvzxpnKHAAzUY13sPK+/SWEioQ6+O2cqkssEv38yqCC1Frl1NpxQo4hfOMDHlDbvsKpPojPBJJWnoxXdZx3UMBbSUD3BshEcsQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520087; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VkrWnXOza2cCpUm4Jt1bEmOXlc37hxfarF7/E3Z83v0=; b=Oe7OQjHkWXRyPD4Ppnmd1v0I87ZkZiByiEj3Q+GbRNkomYi0EiyeMloQCbqvnW8VasU6PPwIPmoJp8VTQXmi+L2ZrB5m5op/l8X+8Fvpt4TjMZvcREP8RJ78lDlNIcsLYpPlbqiWjdnUEHPSpUbFQXsuJQI5srHLI44hbSobKyw= 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+importer=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 1760520087177233.5088619422786; Wed, 15 Oct 2025 02:21:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeU-00022x-9d; Wed, 15 Oct 2025 05:18:34 -0400 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 1v8xe8-0001q4-Qn for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:13 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdm-0007CD-4i for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:10 -0400 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b3da3b34950so1029388566b.3 for ; Wed, 15 Oct 2025 02:17:47 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519864; x=1761124664; darn=nongnu.org; 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=VkrWnXOza2cCpUm4Jt1bEmOXlc37hxfarF7/E3Z83v0=; b=HUysQ0HZ84LMdtji+2c57JxlvIE3sQ7d260781+PL7ccx96nlw0HCPOdBY/93cPhUr rC1RUJqIBHNlynC9+Zy4Z/jH07IR4tDjxO4OADLIQpdEbUKcyQUl/9wjcAZXHrkecpNA 1Lo4mH2oQU77+FBM2ukTt5viGdT2HcZeQh8WvMSmkOz8qf1NbJaqkjbe0UFpbgWDE09O CQr7oqUQyzeS62jqpA7KbcRWqWG2Zb5lF6YF+eNvCnWnVOjTFPfrwWE52dd2kWwfwvQ2 zF4epk0PbeSdW4BARQuUbuW9yykcWZOVHL1NJJLI5taDi2y0MneENCBYwTQLXe/lJEVA FQgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519864; x=1761124664; 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=VkrWnXOza2cCpUm4Jt1bEmOXlc37hxfarF7/E3Z83v0=; b=cEGFwOH3jXtvDpUWysuSd4mM3A6x2AVQl9prwXFn77XBXCuUrTKeAoopnFcMCSrYNG zVRfFXenjx2Ej7cH10RXv9tA4hjZzQQtg684XIsyhbdG3Cnelvx21i2VvcChgwlTZyWa MCG6DFxs0TwZcNhJSsY4uK7HoE03zCe3hJO2a34c7oC3W15x7fw8wFGj9HvdhC1gEUGT 0SrR9wAoODBoBvQiYdizPS5oTqQzDlMhRrwe5TjqK5ERbauEXjhiBgS/ko06R9Z0DVw+ WRJ/IsF55g4RLJ3ky1oEmmif3zp+iDtj7qybgJcdNnvTQWvLqBWXDey6PiftvmYz/CcY 6klA== X-Gm-Message-State: AOJu0Yy2fGLJTmGbveB7iSeRusWdpOVPljJzbwk/j00RbT/Fc8GxofMH eMNRW0ktADkbRBHJM9zsTe44by6Dd482iHfNEVOgdc2LeswlC3RBtLRF7i7vdKdCc6E= X-Gm-Gg: ASbGncvzz0T1lPtJwGYfBYAEIzR1nvZGCwTnHXw6/nVxdGLIRB5Q3TFmu82suSjmzxU i4sKvdm7UfSI0BREu3Yg5y/hKHFvsr+LBVp1W6/UUNjGFgjGUbUz3/Oo3wGAlcTDHUoG/oXyns/ ZZlW5pPJYxoQGMqYdVZEMn4JaxlTgYKSKV+h6s6mm1nuanVne01fFDypvaTktB/7sRiAenMUG7P cYikr/qUPKORBkBqXmaIg23aJjgTPErp8ASQ62MSqaDXj3U5n5fL0krcGiDcF7LcuHMdGONwaB8 JZOKe7jwo2Zy33pjXIr15iLAqn8CPs9jhVGipmEytdh5FJY/6hbTFVzZJurkB8sXmUiaQUVVN/R NyAw8PmXCdJOFs6VCgjKV3moWK5cNnnkVG5EqOULvfNmWLYobkrr9jTyaDzuhr1mOZTcgE6i+ X-Google-Smtp-Source: AGHT+IHlC6ekauqE3OSEZFb2GQP7S1s+gG0eaQtrkYEotRvpWIZfGPRVElMm6rgpII2wNgtlbcI4mQ== X-Received: by 2002:a17:907:961b:b0:b3a:ecc1:7769 with SMTP id a640c23a62f3a-b50ac0cb195mr2888802166b.52.1760519864156; Wed, 15 Oct 2025 02:17:44 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV , "Edgar E. Iglesias" Subject: [PATCH v3 03/14] hw/dma/zynq-devcfg: Handle bitstream loading via DMA to 0xffffffff Date: Wed, 15 Oct 2025 11:17:18 +0200 Message-ID: <20251015091729.33761-4-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::632; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x632.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, T_SPF_TEMPERROR=0.01 autolearn=unavailable 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520090979154101 Content-Type: text/plain; charset="utf-8" From: YannickV A DMA transfer to destination address `0xffffffff` should trigger a bitstream load via the PCAP interface. Currently, this case is not intercepted, causing loaders to enter an infinite loop when polling the status register. This commit adds a check for `0xffffffff` as the destination address. If detected, the relevant status register bits (`DMA_DONE`, `DMA_P_DONE`, and `PCFG_DONE`) are set to indicate a successful bitstream load. If the address is different, the DMA transfer proceeds as usual. A successful load is indicated but nothing is actually done. Guests relying on FPGA functions are still known to fail. This feature is required for the integration of the Beckhoff CX7200 model. Signed-off-by: YannickV Reviewed-by: Edgar E. Iglesias --- hw/dma/xlnx-zynq-devcfg.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/hw/dma/xlnx-zynq-devcfg.c b/hw/dma/xlnx-zynq-devcfg.c index 26845713ee..f11d0e1b1c 100644 --- a/hw/dma/xlnx-zynq-devcfg.c +++ b/hw/dma/xlnx-zynq-devcfg.c @@ -247,7 +247,14 @@ static uint64_t r_lock_pre_write(RegisterInfo *reg, ui= nt64_t val) static void r_dma_dst_len_post_write(RegisterInfo *reg, uint64_t val) { XlnxZynqDevcfg *s =3D XLNX_ZYNQ_DEVCFG(reg->opaque); - + if ((s->regs[R_DMA_DST_ADDR]) =3D=3D 0xffffffff) { + DB_PRINT("bitstream loading detected\n"); + s->regs[R_INT_STS] |=3D R_INT_STS_DMA_DONE_MASK | + R_INT_STS_DMA_P_DONE_MASK | + R_INT_STS_PCFG_DONE_MASK; + xlnx_zynq_devcfg_update_ixr(s); + return; + } s->dma_cmd_fifo[s->dma_cmd_fifo_num] =3D (XlnxZynqDevcfgDMACmd) { .src_addr =3D s->regs[R_DMA_SRC_ADDR] & ~0x3UL, .dest_addr =3D s->regs[R_DMA_DST_ADDR] & ~0x3UL, --=20 2.47.3 From nobody Fri Nov 14 19:40:01 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520176; cv=none; d=zohomail.com; s=zohoarc; b=PVNxLpOgktLZtJ+kSgAXNz8GtKoqEEpWIdCxjww6COPMaMZlzWOHgFsUKZSIBZ8BTilLh6qKtS74TS/IuT1s0Pk98Wdw6kbJAKs/IVrS1LTOrJ/9kHcs//v3B+yIK+CGO29iMJMN4ra1gp/AxMgdPw0yGx5l1+OjU3s2uaGdJcQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520176; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=baDgYgvzr/dXlXUXldhfL3pSR8JkqjCM4XJ76RH788g=; b=k3DiwkWaJAvSFEDcCisF5k6e/+rLVbVfJ9BwQdguDM5XlxJeguAb1Ou/R7sQhmYfRNeXeIBESCTi0SM1fIGl5mOeNhDz3/ZHVk05jzuSgEf2U8keWO6XcPU5qy+9qgWiq+2+PKQly7HS4TxAAUFURKiY9OFTfW/FNMfRKB9MA8s= 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+importer=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 1760520176629971.7602817089323; Wed, 15 Oct 2025 02:22:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeL-0001x8-L5; Wed, 15 Oct 2025 05:18:25 -0400 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 1v8xe8-0001q5-TE for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:14 -0400 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdn-0007DA-5u for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:11 -0400 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b4736e043f9so996467566b.0 for ; Wed, 15 Oct 2025 02:17:49 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519865; x=1761124665; darn=nongnu.org; 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=baDgYgvzr/dXlXUXldhfL3pSR8JkqjCM4XJ76RH788g=; b=YCsrt3XSQrzCFXHfydZQ/Nib2E94QUXzVOqM4L6dnS72bPn9Su2/Cd7OGSzSyusBZ5 //yLfaghPqIrZGcaUS0w3uaJ+uPXLrgSwLgjU/KAiBTrumbJ+6EbkA15vNIgNhyo07Sz U/0ohlYHHW9GClrevsSCnlSfXkq30me0bZ1W+2tqsWWKD/9AtTEbm+tjrtnSpEQW5fot 9fYcBC3mgTGrHMo1+Pbvt9IKdtvebr2/chJN1uf870E9uROJyrf85NwpKwHrhudLHL76 ekRAYr03uZvsy1E711ZJTaPqb3xWGmSqdtKIsXqOye6EzlojCDLGLk9GKzhqCrOoJWrN ff8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519865; x=1761124665; 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=baDgYgvzr/dXlXUXldhfL3pSR8JkqjCM4XJ76RH788g=; b=V4A69uV9Alw5EA9ealb1P/ETAvEehzyxmcKvUhg6x9Ofa+228bJKzDUkim+A42HezW Cg5hbArZgT8RbbHsYJmalwaDy+qSE+gGQozWi/udHRfzOFx+/OTG/57aX3iRXqY5xhaf Uk9bjvwRfQ++My+/EW6wphwunffTQmdUdOLm/uM0tQiWu5/W1IYN1Fs1wV4Iw6YuAhY3 kSBBwVxjQCwwxnMnvZYWa7Dad9UOns4oCjgD8PeiYBVxJsIF7/eojRqvTqzVyguvyJP4 46GOpqcbYoN6wXVMKhgo6ePIUnqqYPvsz/dLG8aMHOjquMFgY+6soUbuj6xYAHJ2haNA XbDw== X-Gm-Message-State: AOJu0Yz8Qeo7GAHLxvrsEVd5rujH+FVrt197DbFn8d1Z+PBb3/Ohesc2 5daRNX0r2IzrtXWGlSLPTlDZ80s6bsRBDssQWtrxOUfoWCgOHGecvX9ZM0fpT/fi+5Q= X-Gm-Gg: ASbGncs/1oWMnaw+jT8xapfflQPt2qFnFTxOVjV25jwPgLqv9ybODPo3Y/kScWXqrBv 2JyS/8ljZxY9KRdfUCidQCJ+iHeM+EYAlCPHLYQdZH+R2fUSpHTAvEaN3T5iz0RRxXbKUpm9PrJ LZpqUKquAEEFfk0NMg84KeZHtNXqYg77zTCfl9/965Y9fc/srdaFsla3++R2giSA1icpWhPLlZI ak5fKOVeqeDgwT+JcEfsMSMKYuebOvln6gIA8DHqdqSif3wBBqwjcI+S3xM+aUzPs4tZ/vypjm5 fol5mcVql2BzWPkB7mw7brbLEX/9G0MBejeUeFUgIRy6Fa/Sts/d2yEVRRaGhPl/jHNtvnWHGr3 zbgeT6eI0C5s4ft6wFj1J0eIW4oeTk/bhPcrLEmNmnxF4D7SzypHw29JHpdfBazdCXyNYVY3M X-Google-Smtp-Source: AGHT+IGytdFse3HoFRdqgE/u92lvDWAJzEzdBBmxgsEmtKzwprTw1/OgX+vjm8Hlaaa+Upama61Icw== X-Received: by 2002:a17:907:9448:b0:b50:9863:dbe0 with SMTP id a640c23a62f3a-b50abfd6e35mr2935573066b.37.1760519865171; Wed, 15 Oct 2025 02:17:45 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV , "Edgar E. Iglesias" Subject: [PATCH v3 04/14] hw/arm/zynq-devcfg: Prevent unintended unlock during initialization Date: Wed, 15 Oct 2025 11:17:19 +0200 Message-ID: <20251015091729.33761-5-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::635; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x635.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=unavailable 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520179868154100 Content-Type: text/plain; charset="utf-8" From: YannickV During the emulation startup, all registers are reset, which triggers the `r_unlock_post_write` function with a value of 0. This led to an unintended memory access disable, making the devcfg unusable. During startup, the memory space no longer gets locked. Signed-off-by: YannickV Reviewed-by: Edgar E. Iglesias --- hw/dma/xlnx-zynq-devcfg.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/dma/xlnx-zynq-devcfg.c b/hw/dma/xlnx-zynq-devcfg.c index f11d0e1b1c..72d73e93c7 100644 --- a/hw/dma/xlnx-zynq-devcfg.c +++ b/hw/dma/xlnx-zynq-devcfg.c @@ -221,7 +221,9 @@ static void r_unlock_post_write(RegisterInfo *reg, uint= 64_t val) { XlnxZynqDevcfg *s =3D XLNX_ZYNQ_DEVCFG(reg->opaque); const char *device_prefix =3D object_get_typename(OBJECT(s)); - + if (device_is_in_reset(DEVICE(s))) { + return; + } if (val =3D=3D R_UNLOCK_MAGIC) { DB_PRINT("successful unlock\n"); s->regs[R_CTRL] |=3D R_CTRL_PCAP_PR_MASK; --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520032; cv=none; d=zohomail.com; s=zohoarc; b=ZDaZXboXm0jwiP6BhAxFZ+jFjGlPrwUhJVS/d11nFHzDV+OsUAvMHf7S/4XIj2zW0py9F45QUFLOeKdy+ljSt8QQ/7S0/goAv4IAf/agF4mfr2S7fwy0440VNezOTemGlljnM4Fzghj31Bi786yfD9WpRAlU++MenLe/Rh8WtLE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520032; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=fSujfC2+BtnBsUbXy51XTtLY9h2/Ra17MGX020tEjTU=; b=oEw9F3VvkZd+KsEizhQLf41gk/0Ns2oj+LHAB3e4scmIIdR2jz+fmcjHzf9i4cGh7y6IM0B4tY3iYxRevzGui7H/niogtqIrte2yY38ujJoZvGiRiC3819+BLGLJAutbLtlfHs8S6a1C0Wcd5KLuOrng0I4m0pURkAu3GSQRQvU= 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+importer=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 1760520032976138.78354608390168; Wed, 15 Oct 2025 02:20:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeI-0001t9-Ce; Wed, 15 Oct 2025 05:18:22 -0400 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 1v8xe8-0001q3-Qn for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:13 -0400 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 1v8xdm-0007D2-CC for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:11 -0400 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-6318855a83fso14182218a12.2 for ; Wed, 15 Oct 2025 02:17:49 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519866; x=1761124666; darn=nongnu.org; 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=fSujfC2+BtnBsUbXy51XTtLY9h2/Ra17MGX020tEjTU=; b=TwRNv9fO6/f5niwkuf9/M8zKTU9Mokv0oRY4HGooRcqC0cDLFZO8M5WUuHby++Yb2j D/AmpkHOFwYvsyFJ87F2RmPIfY+f4aGwMHFITd2kl+rXm6o0tKA3OxhP3CJrkdKBIEFq cTEd7XnKLCQRmqVxJ3ckQ3r2zWNkR+gAfzg0nTz8ozzwf9BdGCCgwmlleLagvXiF9tbx 9GFqyhKMKA4yFB82QD9tuGjb+F4eMBAGQTWBGqdaYz4p+V6YP0aVGyfhTzj5GcbZ0a8A ys6Q4m5qGeheh/UyH2bqjsOOWMJuJJbIeRXtP+YZxDWpQ7Ss+xHsJGEmdqZYK1eU1G40 oW8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519866; x=1761124666; 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=fSujfC2+BtnBsUbXy51XTtLY9h2/Ra17MGX020tEjTU=; b=f4BEjZ9FKPlBZf7rsSQqtLKIOZS3NEBDIMY6dWgIaUcPbYIwpbuxp0zWPW7KbSukMK OMDCMG/i1ZFkzc5WJNPR3HSOaCml4RFbyI4xvkzObxJeykpqQKoALbxlUX15EPrORkGe 2V1BRIoPAk7v2S+EvpBnFwf4+M1ugIj0o/f/BS3gFxkdLyCcooLjJRwJ8y6qEPm6uikj WDkFIpS83Z1+mql+TFqUE86uQy6nUcmyHe6cwho7Ablqa96beHoypifoJX/s0Wq3K22g hs3DrNPYIswS/W9MGv72Uu/bcvZQdJ5oKr+TqlsamvcZRGMNrkVqU27sE/bhxz2rpits 5aPQ== X-Gm-Message-State: AOJu0YxbFlHqoTp4ArwGPikocg4LjX8U30yuzO/9G4wc6uwMV7b4S92L ZlR1ioy2HlTRrVsaa3bgRlKzljKAlWysW1jk0Qw+XRnPmAfGR/8Vd6A8mF56XszuUUU= X-Gm-Gg: ASbGncv3YjKkUsACKMi3Z+hnv5pLSiSKWC1OygSHVV5QvX36RG3UR+h5ckgLoQG+Tvf LLS5pcMZul2Hdb+z3WCMl+cyTKPTSJU62C0/aiCPDVU58bpU3tjDVQgRtrZMHbXfyIfBKf75Ld8 lakI8X76cLQ36cf4jhbJwsHtDGM5Hu4sBg01kDxwHCVR96hWWEjEnQz7mkoWn3szWZFUgaOdGqD V2/ABMfIrJmPEJB35q40yUVNSe59dN7ewYLkpB/BQEVJvd0QIuGlYhqSsb+V/UZORajZe+HEp6A Vuw/L02618EismxCzNGwcylJPiBlsak8mrbT+jGNLeGO79i+RcOhPfRCQa/j0bWgvmUDxBM770x LLgIdXSnMfnedGhMDi70ZkDej3ITy7I3hyQn5Qia2Y/VlCUKcMQocim2P0sFhkB5v5D5MvX9v X-Google-Smtp-Source: AGHT+IG6XOp9huMJrW8Ci+fIIdS/2oTxIMTa3EW7f0U+yWhb3bjs9b1M+QT57cDof0el3mCm6j0RBw== X-Received: by 2002:a17:906:ee85:b0:b3c:200b:4364 with SMTP id a640c23a62f3a-b50aae9839emr3060671266b.27.1760519866201; Wed, 15 Oct 2025 02:17:46 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV , "Edgar E. Iglesias" Subject: [PATCH v3 05/14] hw/dma/zynq: Ensure PCFG_DONE bit remains set to indicate PL is in user mode Date: Wed, 15 Oct 2025 11:17:20 +0200 Message-ID: <20251015091729.33761-6-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52c; envelope-from=corvin.koehne@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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520038197158500 Content-Type: text/plain; charset="utf-8" From: YannickV All register bits are clear on write by writing 1s to those bits, however the register bits will only be cleared if the condition that sets the interrupt flag is no longer true. Since we can assume that programming is always done, the `PCFG_DONE` flag is always set to 1, so it will not never be cleared. Signed-off-by: YannickV Reviewed-by: Edgar E. Iglesias --- hw/dma/xlnx-zynq-devcfg.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/dma/xlnx-zynq-devcfg.c b/hw/dma/xlnx-zynq-devcfg.c index 72d73e93c7..c875acd4ac 100644 --- a/hw/dma/xlnx-zynq-devcfg.c +++ b/hw/dma/xlnx-zynq-devcfg.c @@ -188,6 +188,8 @@ static void r_ixr_post_write(RegisterInfo *reg, uint64_= t val) { XlnxZynqDevcfg *s =3D XLNX_ZYNQ_DEVCFG(reg->opaque); =20 + s->regs[R_INT_STS] |=3D R_INT_STS_PCFG_DONE_MASK; + xlnx_zynq_devcfg_update_ixr(s); } =20 --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520320; cv=none; d=zohomail.com; s=zohoarc; b=bYqQlzTD8cYSNhDTTvjX3HhE4RXF+QUgNZU/DyFjQErW1uZCTr/dqWlu+0hxJN3HTMO4ReV4Xw77bRsY1Vnk0lTYIC3/dThm2UcEaJbnJf/c91BPYPpoQLXAl1lSKRmxr7pCdg3hthRfODv65Yp4pfy+QBRnWdRFNRiHpRXh9rA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520320; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=MAzXeDlEK8qSzXnIDjrAjNLtR8aANbiQ58/Bcioz01U=; b=Jguvy2ZEG6QiVjMT2sJlXD2qXi/a7tlSBn8tE1aWuoC3ttnr1ql5NL7jOBnj4mcpm9tAzKzy3Ct357NBnRhhexOlVOlK0dhSSrEUvDksytYr9xbIe2GtV65Qt8Dycde2oroJ7B2qxbeTJVNsN4JeQp+j3IUlMY8ApVgkhvBkb7k= 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+importer=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 1760520320302337.0651697714867; Wed, 15 Oct 2025 02:25:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeQ-0001zE-4N; Wed, 15 Oct 2025 05:18:30 -0400 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 1v8xe9-0001qD-TH for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:14 -0400 Received: from mail-ed1-x52e.google.com ([2a00:1450:4864:20::52e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdn-0007Dr-20 for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:13 -0400 Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-62fc0b7bf62so9337459a12.2 for ; Wed, 15 Oct 2025 02:17:50 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519867; x=1761124667; darn=nongnu.org; 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=MAzXeDlEK8qSzXnIDjrAjNLtR8aANbiQ58/Bcioz01U=; b=H3vSA1t+PyJ1Dqj0IweTRWoAwTVdBUiS1qFdwArTwJ7378L0btypjuxQBfXTjg1xnf 0Mp5pVSadIUsOdvh1Q0iWEefi7LZ3Hj5kXIF+TKPsdreMI6B49xH1qoObq9zsUavfakr AjE60csEqtUxqR0ziRs0LF+7MPXM1TypQC6je8kCaGJjYlydNk390tezff94xkB/cpR4 0C/CKNJFqhZEAaAslHjokfhJ4Nu6+PqWUR+tTeP+W28OBG1HVjuB4t2Bm4LunSKJkMW1 lcik9zsaFtjmM3OQB5456TBTktT+BsJlssg+Y9AVHAHSrkKtoXy53cfN98Q+9HZQv9Xq o3uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519867; x=1761124667; 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=MAzXeDlEK8qSzXnIDjrAjNLtR8aANbiQ58/Bcioz01U=; b=ezX89JGCfOpFD0v7A8kxUC6i9prBt+Z/OGZzhh+r1Jn0rkpsrwuVY2mgGKEGW5W5x2 ky1tDdDyndCzkdKT5flJ/CstQ7YHaFjeqdQZh/zHMa7f8s8IYj9lOsO2aJokXzqsnNEV XCAcFfKStGC5YueEWGOEt5WREzjRHx24DO7Yz6aafMMJxiIF13CrddVeJaMxz3p6rDzQ +2p790XX142HhXldANFt149eWEyjw15bj0NnlD45KODRT2Pp0APi500K6rdQd2OPLow+ SUzGrt7IoQkusqQQs1x3xKlVuIBITt/lJ33F4FZlBLcCq5Z5IdBE7+RwUrkKJwC7YpJR 5pAg== X-Gm-Message-State: AOJu0YxDAnq9EQB66x6Rr8Z2Ve/J/Wt6SsBDvZWqk6GPSS8NS7VEMiK9 p0nM1BmYpTsTatUyCpU7gBYYBxqsRlCNdHdzTjGNEE/iFNBRmPSDW/U8LLrr9af4Pl8= X-Gm-Gg: ASbGncvjixjfz6GxxubjjhBCi2l7vj7UgUw6F+Yn+pN8/f1u6CuBjoQDz3WjwKAq2ab qD0wpXakvu7DuOSYoPxJb1wGcjClFcL2n31W72AY2Dk/21LD584cbCK8NVM/0IA3pNmfAvSh+4O w9pXZW1AT7qw+DMiA4h/lcswqmd665D9/j7+Lp1Y87CEk376fDk8R/oindfupagblgQb5BjnDYz WVaVqPG3UJaZ91F6ubbSdXhTg/OeON6/JNq60gqo55a4OzlACa2+kxdyMjvxihqm95LNTCLtY7b TgasTv3EtnOCwStIorTXXq2HnV6ZDZpzpbLpFfcvqKPqWIhAniTJt52d4Cmex5YTF1fDm5opzyQ OPMr73Wq0aBw3+eXcGvABg5V0FE90psIrvB4SNlGwoqmkRvIh5u0Z1PGMHqyCig== X-Google-Smtp-Source: AGHT+IF3ocHUfPV/lptGradolyI4nOEpg+bL1Kgt2YrDClTJSQ3cTdze4tyaiOqAzGtD0BJ46uEJqw== X-Received: by 2002:a17:907:7287:b0:b48:70a3:d45a with SMTP id a640c23a62f3a-b50acb0e5e7mr2837364166b.64.1760519867078; Wed, 15 Oct 2025 02:17:47 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV , "Edgar E. Iglesias" Subject: [PATCH v3 06/14] hw/dma/zynq-devcfg: Simulate dummy PL reset Date: Wed, 15 Oct 2025 11:17:21 +0200 Message-ID: <20251015091729.33761-7-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::52e; envelope-from=corvin.koehne@gmail.com; helo=mail-ed1-x52e.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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520321793154100 Content-Type: text/plain; charset="utf-8" From: YannickV Setting PCFG_PROG_B should reset the PL. After a reset PCFG_INIT should indicate that the reset is finished successfully. In order to add a MMIO-Device as part of the PL in the Zynq, the reset logic must succeed. The PCFG_INIT flag is now set when the PL reset is triggered by PCFG_PROG_B. Indicating the reset was successful. Signed-off-by: YannickV Reviewed-by: Edgar E. Iglesias --- hw/dma/xlnx-zynq-devcfg.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hw/dma/xlnx-zynq-devcfg.c b/hw/dma/xlnx-zynq-devcfg.c index c875acd4ac..968131a691 100644 --- a/hw/dma/xlnx-zynq-devcfg.c +++ b/hw/dma/xlnx-zynq-devcfg.c @@ -49,6 +49,7 @@ =20 REG32(CTRL, 0x00) FIELD(CTRL, FORCE_RST, 31, 1) /* Not supported, wr ignor= ed */ + FIELD(CTRL, PCFG_PROG_B, 30, 1) FIELD(CTRL, PCAP_PR, 27, 1) /* Forced to 0 on bad unlo= ck */ FIELD(CTRL, PCAP_MODE, 26, 1) FIELD(CTRL, MULTIBOOT_EN, 24, 1) @@ -116,6 +117,7 @@ REG32(STATUS, 0x14) FIELD(STATUS, PSS_GTS_USR_B, 11, 1) FIELD(STATUS, PSS_FST_CFG_B, 10, 1) FIELD(STATUS, PSS_CFG_RESET_B, 5, 1) + FIELD(STATUS, PCFG_INIT, 4, 1) =20 REG32(DMA_SRC_ADDR, 0x18) REG32(DMA_DST_ADDR, 0x1C) @@ -204,6 +206,13 @@ static uint64_t r_ctrl_pre_write(RegisterInfo *reg, ui= nt64_t val) val |=3D lock_ctrl_map[i] & s->regs[R_CTRL]; } } + + if (FIELD_EX32(val, CTRL, PCFG_PROG_B)) { + s->regs[R_STATUS] |=3D R_STATUS_PCFG_INIT_MASK; + } else { + s->regs[R_STATUS] &=3D ~R_STATUS_PCFG_INIT_MASK; + } + return val; } =20 --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520075; cv=none; d=zohomail.com; s=zohoarc; b=c/pKdplq0NxyImbQei9IWF+ktVqBnojWa+twOiKY0eSiHiLE+PzDyPBpt47gYtLAunbDggpronAMT0axdgjp3+VTF1j6yfZG9FRqLT5nogaS/2CHgNJBrymcuQvFsarFsngLoqNwFSgAi7Xan70RG5nbK+r/b0V/sKtPwLQRCIA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520075; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=efx9c1ZcXLUi9oQ3sye4iSYkiRtCvMScPRmIZtuVzkQ=; b=Tfs1YzCy1SW0+9tOgd11OjIfNjeTpN6+Ykw96/R+XzJ0K1b2ow7oP6MKBHxnFxxDTCoAi437Efy0epSq5wbEFO4wrnFyH4cRCyNdbxXHTD5mSAtwwCW/9mgqdC5eak/gvgZB0+6xjWHjXhVNhUpunCCxzI23w4eUgZOliqu69f0= 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+importer=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 1760520075672965.1478253812313; Wed, 15 Oct 2025 02:21:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeK-0001vp-5o; Wed, 15 Oct 2025 05:18:24 -0400 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 1v8xe4-0001ne-Do for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:08 -0400 Received: from mail-ej1-x635.google.com ([2a00:1450:4864:20::635]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdn-0007EO-5Z for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:08 -0400 Received: by mail-ej1-x635.google.com with SMTP id a640c23a62f3a-b3dbf11fa9eso1033833366b.0 for ; Wed, 15 Oct 2025 02:17:50 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519868; x=1761124668; darn=nongnu.org; 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=efx9c1ZcXLUi9oQ3sye4iSYkiRtCvMScPRmIZtuVzkQ=; b=HSkCrcjSC8e5jNwUepGBpvl+BAZoiy+0zAkm8s2RDj6yrmxROVbQxrwCygcqSsxGMH 2TcGUe/ie96Wwcojc4376f8iiu2uPjEHzU2QrePmCz54Jhp8230Hkb6Jiw+pD6SLnDVl Ov8UbHUOOjgDeh1g4RXL53mg+kus317mOh8IhsDiJDgSQOOMaXErc1uF3JQ98Vn1f3Fi ou2duVpzvWus6UTfaJStZ9tdrxFiX6v8XTC0qyEDF6PC3dEigurly1MU1bkqn2GoK0y1 06V5D6CjpW4hCVoJslXrcKuAD2H3msusalriIkzHQbscZtPFMhOHrX0D/PU3Yy3Kcsns c63A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519868; x=1761124668; 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=efx9c1ZcXLUi9oQ3sye4iSYkiRtCvMScPRmIZtuVzkQ=; b=D6OVpVpLp2pzGAKxwDCh0hapA1Z0569XkGNv2wj4Eyp7vsa4VWXsB8HdX9vP9e4K+b nT2UfaTQHE5FTEpteS4FxeL/CFKWyZSxfMrU7XKlam4sDUs/8WmVtVDZgzQSU98QZk7S qc5sxJ4Dgv5KTYhZr5WOtQuYZcyNezdiF48ZIzzB807aL7k6RWbeNGvEMtrnk8F6h8dS ijUBzSIPsXVmcbcG7DqzruneprGlitzg9x7T61IglAUlC0zPNyvzRULLPyAQIBon2pgr 55uiFllY21WrYoeoCAhjc+Pen33AYjtitUILsmmvUq0GO2C5qB/QmG6nW4bOszW4zwvP KqOw== X-Gm-Message-State: AOJu0YwA+KOrNTbqLSgNpSx3i5vmQCMSrUZotjuKvpLnu/3Ml6t0K519 sLLUCsmLhER1jMQqFWeimctJmX8JOwGjq1Lf5XOQ3ktVyX9J2n251+UBjhV98Qj4fYA= X-Gm-Gg: ASbGnctrGa3+ziSbY3MTotqx3nH0BZDHdJkGHrmJaA34WXzgyJM6P1BYLnbbVB1e2RL aCA32lOlLSssaPZWB3pfztdjr3r+Df4P7TgmyMTvcmcKvAEoA/BkilC/1PUUrXXm8IsdC2Z7XRJ 5u5PJoMf7TOvCEQDL3iVhbSW4Ps/KIEnW8Dhyq8dqv2Ep0Skds6B68AeL2xeGsGSR/0TeXoAp73 5SLN4rQ9eISde1QZb/mVXSKqlnjcy/mjt4SQpMyf5vOSsowQbe9lA8vTSQKDbm/nnUB41DubMQK Uc/nsJfGAC1+cbkS1Y2ZqgN+s7RN3HgGROJ7WC8Xlj0aklBD50HWrZRrlzYaFYp7U+rnd6zwNnN WY2FDIHOK+OA3fvbx0krOet84UZ7RrTozA7eK71TA7sRrrPHJJUxOZ/tQFntkcQ== X-Google-Smtp-Source: AGHT+IFFl2rV6vsNtRkVRtUFogR8DFspLd1983rC2z43+rKPgqnHcIbeBAfyjfSK21SkAOuAABqb0A== X-Received: by 2002:a17:907:94d0:b0:b3c:e14c:e24 with SMTP id a640c23a62f3a-b50aa69e3c6mr2613939566b.13.1760519868011; Wed, 15 Oct 2025 02:17:48 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV , "Edgar E. Iglesias" Subject: [PATCH v3 07/14] hw/dma/zynq-devcfg: Indicate power-up status of PL Date: Wed, 15 Oct 2025 11:17:22 +0200 Message-ID: <20251015091729.33761-8-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::635; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x635.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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520078793154100 Content-Type: text/plain; charset="utf-8" From: YannickV It is assumed, that the programmable logic (PL) is always powered during emulation. Therefor the PCFG_POR_B bit in the MCTRL register is set. Signed-off-by: YannickV Reviewed-by: Edgar E. Iglesias --- hw/dma/xlnx-zynq-devcfg.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/dma/xlnx-zynq-devcfg.c b/hw/dma/xlnx-zynq-devcfg.c index 968131a691..3df80a279b 100644 --- a/hw/dma/xlnx-zynq-devcfg.c +++ b/hw/dma/xlnx-zynq-devcfg.c @@ -333,7 +333,8 @@ static const RegisterAccessInfo xlnx_zynq_devcfg_regs_i= nfo[] =3D { /* Silicon 3.0 for version field, the mysterious reserved bit 23 * and QEMU platform identifier. */ - .reset =3D 0x2 << R_MCTRL_PS_VERSION_SHIFT | 1 << 23 | R_MCTRL_QEMU= _MASK, + .reset =3D 0x2 << R_MCTRL_PS_VERSION_SHIFT | 1 << 23 | + R_MCTRL_PCFG_POR_B_MASK | R_MCTRL_QEMU_MASK, .ro =3D ~R_MCTRL_INT_PCAP_LPBK_MASK, .rsvd =3D 0x00f00303, }, --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520174; cv=none; d=zohomail.com; s=zohoarc; b=SJ3If8W5g6A+GvTxPia1L8oy8kIJoydXLXx1BxQ22ecSKo9PKk3m60sAaJTS6o4PG1DAwXsQTaAOEPJiCIBz4upddpa3zT3HAhkZReF9QObmCjsLlwsAmyeJKdyZS8u8ahuiDWPiYVdZ4wliW5dkIcHiUoM0mkdJQXJKyIu6E8I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520174; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Q9r2NZ8qPeD/1NWJeAAk7/Qwh8XmZ+kDhkQXgsWKtWs=; b=g5pSReSAB2TpgOK9+NgfRgdPrI9vx299uXE2vXHbkL2O4TeVaEwMukdYzbY5KdXufrESOCWYQqPaoYpcNHsd5JCYloW8Jgmn5Bm1tsuNgfBo1oo4nxCvuoUsrMkU345BFkVFkwDdKJea73jCtQTUnZgvgBspWA48aCrlRtQGXU0= 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+importer=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 1760520174313459.8882502813808; Wed, 15 Oct 2025 02:22:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeK-0001vT-S0; Wed, 15 Oct 2025 05:18:24 -0400 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 1v8xe9-0001qC-R7 for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:14 -0400 Received: from mail-ej1-x634.google.com ([2a00:1450:4864:20::634]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdo-0007FP-PT for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:13 -0400 Received: by mail-ej1-x634.google.com with SMTP id a640c23a62f3a-b41870fef44so491092266b.3 for ; Wed, 15 Oct 2025 02:17:51 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519870; x=1761124670; darn=nongnu.org; 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=Q9r2NZ8qPeD/1NWJeAAk7/Qwh8XmZ+kDhkQXgsWKtWs=; b=bpWg9SE1rpJ/5b60Q5n6w6KuZYacUuPCZRgDbZXWdEF4BQg5MRPCw5eLGbp5jkqUSk hx8P9om/2udK5ZlgSSaAm1+NLXo/QdtMsxX0N2cgKpsY14DIiy+DjnIeOAReEezyg7Of PDwcpUc9FQCCLvpmTrzTpeNcdfliKFvhwtdUgXexdPeQ3IAxEoXP/Kidd4jTfh65Lpd0 0gxIRG58iuL7+Bp16vixLZs4zjK+33WSifRfudl8Z4zh+x95i6Y4FEReTPpIZemsZhBJ dbItyn2G/D8NclrtQVnOeXDbv4p4StM/A1vhqExd+yrUPLTRmVe3sfdCRp321bpNQH7D KYfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519870; x=1761124670; 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=Q9r2NZ8qPeD/1NWJeAAk7/Qwh8XmZ+kDhkQXgsWKtWs=; b=fuUYPWYkj8p6eOBQX/Pgup3ErHNbXIItfIlyyv1ErzldMqUCu0Ifg5+1ceA94BgoQ9 oQfciqa31ArHaWrhiB9VOmNh/cDaAQpYnOFWO0sTTF5vh8IQIw7rnEKSVT4tY7cPxHTr AB+4HB44jT0VmsdV3EnWLVVfPmxgWhmy9PxiUdCbaff3lGNH7BEkcedSR+P1I6wcIr9B AF16/w3j7KSaQ0N+8Y+iLTFE2mbBtaFPggTjGgA72QHJ+4sZVoqzzFhdKSzJ4vMhqo1e iabIUJFcdr3gmSdVn+lwrtm46KfiRXc/MLF7WTsQnQs9ogCSn1MweCneJ4CTEe4saZKG igDw== X-Gm-Message-State: AOJu0YyeBhwBn5nO1k3B9M+pdV4icAvWEZi01QvVPlsYH/aOrtBPn8yT NAI3eJKHotsDPVKJgSwzAIIkv0s6jBK+c//pFALPOUaS0xFmQDfe4AWe7Mf4DHA06mA= X-Gm-Gg: ASbGncsJwN/n7RDXnmm3MU5LYyRa2E4AwIFK1Ad5Cc7RnBOPmCJGRQkNj0+BqREhWNY Q+4MJYlNBJI6vVo8VmyqcApGrfQj473QVWI850DcnLj9AG69QmC9C6H0XAesYNVRBWLKMRraigP CMO7uSEiZ1QNEXI1aIuVMGDV7MpSrjbmmmXM+izb6ZrBbHz1szSPlg2TemT5zA8ZXq+lJKQsQ4V msAykiGoWcDkK+gse29xJBRhi5LRsH6uWFe34Fo3morMM6i6TsZKnhneabaXSgLpNrZyEPTSbe5 QE9fXvamUZJHt/MVU0qG+tlSTy0aR7Vi7Sq9tMMECY9emOVqs77IlT6NFZ/d4q9U+7I51wT2rNz QCxjoqj0QSaBefadoG3r9Hgw3nbfX7FSasEG2MyyvWVd5t8hKMqOdGTNHD0MFiw== X-Google-Smtp-Source: AGHT+IGZh5/mdhSQessTGCP8Brm9F1tMGNXfVXYfWSJZJ+/jqqaS/yvYCFPoRFiU289eD2HfIXylBg== X-Received: by 2002:a17:907:94c6:b0:b45:913d:f523 with SMTP id a640c23a62f3a-b50aa99edc9mr3097372766b.18.1760519869630; Wed, 15 Oct 2025 02:17:49 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV , "Edgar E. Iglesias" Subject: [PATCH v3 08/14] hw/dma/zynq-devcfg: Fix register memory Date: Wed, 15 Oct 2025 11:17:23 +0200 Message-ID: <20251015091729.33761-9-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::634; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x634.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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520175860154100 Content-Type: text/plain; charset="utf-8" From: YannickV Registers are always 32 bit aligned. R_MAX is not the maximum register address, it is the maximum register number. The memory size can be determined by 4 * R_MAX. Currently every register with an offset bigger than 0x40 will be ignored, because the memory size is set wrong. This effects the MCTRL register and makes it useless. This commit restores the correct behaviour. Signed-off-by: YannickV Reviewed-by: Edgar E. Iglesias --- hw/dma/xlnx-zynq-devcfg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/dma/xlnx-zynq-devcfg.c b/hw/dma/xlnx-zynq-devcfg.c index 3df80a279b..bd8057caa9 100644 --- a/hw/dma/xlnx-zynq-devcfg.c +++ b/hw/dma/xlnx-zynq-devcfg.c @@ -393,7 +393,7 @@ static void xlnx_zynq_devcfg_init(Object *obj) s->regs_info, s->regs, &xlnx_zynq_devcfg_reg_ops, XLNX_ZYNQ_DEVCFG_ERR_DEBUG, - XLNX_ZYNQ_DEVCFG_R_MAX); + XLNX_ZYNQ_DEVCFG_R_MAX * 4); memory_region_add_subregion(&s->iomem, A_CTRL, ®_array->mem); --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520363; cv=none; d=zohomail.com; s=zohoarc; b=KFi0GN0eitckQKvgYxBvlUDTh8P7ssoNXu7Me+qgeMXLlrtIGak5PM2z7rvJ5w0yT3ZCdaZgR2B5vkg3cr74TGCiokP7Q5KgnJJBVe49ycO0xhp5jU54gNDpyX+BflYJhulu8vuqif57jRlOfdhk1jNRlZYqdZMXMx+OfWyyQWg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520363; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=r4oDkPKfPa+Gxa/uws0MBgT4Q+FJTBsXmqDgDM10rWc=; b=OYjlFo4hpxdtGbugVa6TxEJWppdMpikmC/V/DIO5shwjiSiGF/diumu+tBFXVTweS/Is0SxS0lg29DeBtH7s4TqTlWvxmWOt0onayk3VRAJAE0dMUP29q0Qa8QN8cQmvDy/jSAb0k+imc0fyAaGI0d0jlqPqg43uDryn9P4QvG0= 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+importer=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 1760520363191510.72587790956993; Wed, 15 Oct 2025 02:26:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeW-000250-0l; Wed, 15 Oct 2025 05:18:36 -0400 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 1v8xeP-00020H-Tc for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:30 -0400 Received: from mail-ej1-x62d.google.com ([2a00:1450:4864:20::62d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdr-0007Fh-47 for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:29 -0400 Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-b00a9989633so157978066b.0 for ; Wed, 15 Oct 2025 02:17:54 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519871; x=1761124671; darn=nongnu.org; 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=r4oDkPKfPa+Gxa/uws0MBgT4Q+FJTBsXmqDgDM10rWc=; b=c3Kb5WPlwx2u+S/uYYVj+K3Le8t+tKDy1nwPi4tb87l+G34IAHiEOAitL9i1pUJIHq IzGTqJhNHwAbANAM1gb1CzULm4MouE7MS43FXWR5Fc60yR0PduVXy9CI/w+YUCL3Gjf7 25x8x22zVoj2OReELXJWqmN8t6avh2wYYUssvmPSbwcGotdgl1efypf0Wp4Npm9sjNnx hKwOYVp5LH9heqjvmSH3cjT+ZNEEFNm7RnhFismhJIcSOmJCJR/2n0132Mo3tf5YPE1v qGDacnXWlktfLITX0jNKQ/fB3bNILlCUBEKxONZlRYao2IGJQ4onS1BzpScroLKW+hU0 CVHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519871; x=1761124671; 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=r4oDkPKfPa+Gxa/uws0MBgT4Q+FJTBsXmqDgDM10rWc=; b=uLzGFJHdEKs9CuccKW4cD2CFOvqnh4XANArT5/nGrpMqQetaVu+6IcWONM5hDGtQO+ kjZ7mYUhs+yE8vCSeuvdvhoq+PndBNiIkGWAC5D97e4GnTZiNS+GZKL7r4BRAf0sQ9Tu cVvB5cImBuzlJUsUPK8TQzQfciqJQU1QpY94xtQbMl9MGv4tNj2yKsuFrCpV1W4zDlsL 8+3iUPSm8L6JxPgOHUWPWyCbZR9vv/ysSFzL3z3R6Hf49prnHDsfg2mSY/cRcrW3jzb8 FTfZIGadm6k1UJWQF8kRrQxjBYWCp1e/lp0NrdIqk3RsM4UiLT1S1h+WuvTegrvTJUT9 r5cQ== X-Gm-Message-State: AOJu0YzYQpH9MWGJaug+qffz/zjE2ez5t8EiIzt5RHAaW72xTsGoKWa0 nmBRne+kWEnMb76ko0Jn0JKuEc6wjxW/2XY8jvLp4mnGwCPPGqcnWaCoOgeszLOLKyA= X-Gm-Gg: ASbGncsRr4l28qegh+QczZgG1W2HbEMs00lg/7N7aqRr5+3vaKb1He69n3eCLTulfum eDbIHxjOsJ1BZltlkSWySJYuZ16eCXKqu5en9zIChXwjQchTR0fortR7UTROEbnHL5QStH80IGx j6Ldk2DDDDXs3ch4TdercDsVmyum2QqZNtb4riKf4zum0qoVlO/S5RO5uwXnyJw/7yErSU8ysgW PzUsTA+4sPLapMT1ujvQDA9jMtVxoCIMrwpXuWFzxZwW1Uw0iAxDFCcLYm2kez+7xUqSywzhyx7 TUjHNvZEFJFGKtJ0rkp/ear3oC+Y60lPDXHIqidAtizDX2EKIYWNmgqDkKQ2W/Hf6j4svfBsMpn r7AtZsAu3Ax/4DcSRhm6s3aiV8RG1lLZieezJ8F8Up2t/NS+t4ahbGwgQYLLBj+5XSJuwF1BIFb edvKKmx5mgH9hv18i1Bl6L X-Google-Smtp-Source: AGHT+IGXQRL+4SBlCbvh9Ip1ysXfXpNAVaTRs9o9GnkkfAgVDVu2hP0ev0qiNBShFexJnFVa4pPARQ== X-Received: by 2002:a17:907:a710:b0:b27:edf1:f638 with SMTP id a640c23a62f3a-b4f43106a07mr3091369966b.23.1760519870531; Wed, 15 Oct 2025 02:17:50 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV Subject: [PATCH v3 09/14] hw/misc: Add dummy ZYNQ DDR controller Date: Wed, 15 Oct 2025 11:17:24 +0200 Message-ID: <20251015091729.33761-10-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::62d; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x62d.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=unavailable 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520364110154100 Content-Type: text/plain; charset="utf-8" From: YannickV A dummy DDR controller for ZYNQ has been added. While all registers are pre= sent, not all are functional. Read and write access is validated, and the user mo= de can be set. This provides a basic DDR controller initialization, preventing system hangs due to endless polling or similar issues. Signed-off-by: YannickV --- hw/misc/Kconfig | 3 + hw/misc/meson.build | 1 + hw/misc/xlnx-zynq-ddrc.c | 413 +++++++++++++++++++++++++++++++ include/hw/misc/xlnx-zynq-ddrc.h | 148 +++++++++++ 4 files changed, 565 insertions(+) create mode 100644 hw/misc/xlnx-zynq-ddrc.c create mode 100644 include/hw/misc/xlnx-zynq-ddrc.h diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 4e35657468..d3be733b2c 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -235,4 +235,7 @@ config IOSB config XLNX_VERSAL_TRNG bool =20 +config XLNX_ZYNQ_DDRC + bool + source macio/Kconfig diff --git a/hw/misc/meson.build b/hw/misc/meson.build index b1d8d8e5d2..ffbcca9796 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -95,6 +95,7 @@ system_ss.add(when: 'CONFIG_RASPI', if_true: files( )) system_ss.add(when: 'CONFIG_SLAVIO', if_true: files('slavio_misc.c')) system_ss.add(when: 'CONFIG_ZYNQ', if_true: files('zynq_slcr.c')) +system_ss.add(when: 'CONFIG_ZYNQ', if_true: files('xlnx-zynq-ddrc.c')) system_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx-zynqmp-= crf.c')) system_ss.add(when: 'CONFIG_XLNX_ZYNQMP_ARM', if_true: files('xlnx-zynqmp-= apu-ctrl.c')) system_ss.add(when: 'CONFIG_XLNX_VERSAL', if_true: files( diff --git a/hw/misc/xlnx-zynq-ddrc.c b/hw/misc/xlnx-zynq-ddrc.c new file mode 100644 index 0000000000..13d64329c3 --- /dev/null +++ b/hw/misc/xlnx-zynq-ddrc.c @@ -0,0 +1,413 @@ +/* + * QEMU model of the Xilinx Zynq Double Data Rate Controller + * + * Copyright (c) Beckhoff Automation GmbH. & Co. KG + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/sysbus.h" +#include "hw/register.h" +#include "qemu/bitops.h" +#include "qemu/log.h" +#include "qapi/error.h" +#include "hw/registerfields.h" +#include "system/block-backend.h" +#include "exec/address-spaces.h" +#include "exec/memory.h" +#include "system/dma.h" +#include "hw/misc/xlnx-zynq-ddrc.h" +#include "migration/vmstate.h" + +#ifndef DDRCTRL_ERR_DEBUG +#define DDRCTRL_ERR_DEBUG 0 +#endif + +static void zynq_ddrctrl_post_write(RegisterInfo *reg, uint64_t val) +{ + DDRCTRLState *s =3D DDRCTRL(reg->opaque); + if (reg->access->addr =3D=3D A_DDRC_CTRL) { + if (val & 0x1) { + s->reg[R_MODE_STS_REG] |=3D + (R_MODE_STS_REG_DDR_REG_OPERATING_MODE_MASK & 0x1); + } else { + s->reg[R_MODE_STS_REG] &=3D + ~R_MODE_STS_REG_DDR_REG_OPERATING_MODE_MASK; + } + } +} + +static const RegisterAccessInfo xlnx_zynq_ddrc_regs_info[] =3D { + /* 0x00 - 0x3C: Basic DDRC control and config */ + { .name =3D "DDRC_CTRL", + .addr =3D A_DDRC_CTRL, + .reset =3D 0x00000200, + .post_write =3D zynq_ddrctrl_post_write }, + { .name =3D "TWO_RANK_CFG", + .addr =3D A_TWO_RANK_CFG, + .reset =3D 0x000C1076 }, + { .name =3D "HPR_REG", + .addr =3D A_HPR_REG, + .reset =3D 0x03C0780F }, + { .name =3D "LPR_REG", + .addr =3D A_LPR_REG, + .reset =3D 0x03C0780F }, + { .name =3D "WR_REG", + .addr =3D A_WR_REG, + .reset =3D 0x0007F80F }, + { .name =3D "DRAM_PARAM_REG0", + .addr =3D A_DRAM_PARAM_REG0, + .reset =3D 0x00041016 }, + { .name =3D "DRAM_PARAM_REG1", + .addr =3D A_DRAM_PARAM_REG1, + .reset =3D 0x351B48D9 }, + { .name =3D "DRAM_PARAM_REG2", + .addr =3D A_DRAM_PARAM_REG2, + .reset =3D 0x83015904 }, + { .name =3D "DRAM_PARAM_REG3", + .addr =3D A_DRAM_PARAM_REG3, + .reset =3D 0x250882D0 }, + { .name =3D "DRAM_PARAM_REG4", + .addr =3D A_DRAM_PARAM_REG4, + .reset =3D 0x0000003C }, + { .name =3D "DRAM_INIT_PARAM", + .addr =3D A_DRAM_INIT_PARAM, + .reset =3D 0x00002007 }, + { .name =3D "DRAM_EMR_REG", + .addr =3D A_DRAM_EMR_REG, + .reset =3D 0x00000008 }, + { .name =3D "DRAM_EMR_MR_REG", + .addr =3D A_DRAM_EMR_MR_REG, + .reset =3D 0x00000940 }, + { .name =3D "DRAM_BURST8_RDWR", + .addr =3D A_DRAM_BURST8_RDWR, + .reset =3D 0x00020034 }, + { .name =3D "DRAM_DISABLE_DQ", + .addr =3D A_DRAM_DISABLE_DQ }, + { .name =3D "DRAM_ADDR_MAP_BANK", + .addr =3D A_DRAM_ADDR_MAP_BANK, + .reset =3D 0x00000F77 }, + { .name =3D "DRAM_ADDR_MAP_COL", + .addr =3D A_DRAM_ADDR_MAP_COL, + .reset =3D 0xFFF00000 }, + { .name =3D "DRAM_ADDR_MAP_ROW", + .addr =3D A_DRAM_ADDR_MAP_ROW, + .reset =3D 0x0FF55555 }, + { .name =3D "DRAM_ODT_REG", + .addr =3D A_DRAM_ODT_REG, + .reset =3D 0x00000249 }, + + /* 0x4C - 0x5C: PHY and DLL */ + { .name =3D "PHY_DBG_REG", + .addr =3D A_PHY_DBG_REG }, + { .name =3D "PHY_CMD_TIMEOUT_RDDATA_CPT", + .addr =3D A_PHY_CMD_TIMEOUT_RDDATA_CPT, + .reset =3D 0x00010200 }, + { .name =3D "MODE_STS_REG", + .addr =3D A_MODE_STS_REG }, + { .name =3D "DLL_CALIB", + .addr =3D A_DLL_CALIB, + .reset =3D 0x00000101 }, + { .name =3D "ODT_DELAY_HOLD", + .addr =3D A_ODT_DELAY_HOLD, + .reset =3D 0x00000023 }, + + /* 0x60 - 0x7C: Control registers */ + { .name =3D "CTRL_REG1", + .addr =3D A_CTRL_REG1, + .reset =3D 0x0000003E }, + { .name =3D "CTRL_REG2", + .addr =3D A_CTRL_REG2, + .reset =3D 0x00020000 }, + { .name =3D "CTRL_REG3", + .addr =3D A_CTRL_REG3, + .reset =3D 0x00284027 }, + { .name =3D "CTRL_REG4", + .addr =3D A_CTRL_REG4, + .reset =3D 0x00001610 }, + { .name =3D "CTRL_REG5", + .addr =3D A_CTRL_REG5, + .reset =3D 0x00455111 }, + { .name =3D "CTRL_REG6", + .addr =3D A_CTRL_REG6, + .reset =3D 0x00032222 }, + + /* 0xA0 - 0xB4: Refresh, ZQ, powerdown, misc */ + { .name =3D "CHE_REFRESH_TIMER0", + .addr =3D A_CHE_REFRESH_TIMER0, + .reset =3D 0x00008000 }, + { .name =3D "CHE_T_ZQ", + .addr =3D A_CHE_T_ZQ, + .reset =3D 0x10300802 }, + { .name =3D "CHE_T_ZQ_SHORT_INTERVAL_REG", + .addr =3D A_CHE_T_ZQ_SHORT_INTERVAL_REG, + .reset =3D 0x0020003A }, + { .name =3D "DEEP_PWRDWN_REG", + .addr =3D A_DEEP_PWRDWN_REG }, + { .name =3D "REG_2C", + .addr =3D A_REG_2C }, + { .name =3D "REG_2D", + .addr =3D A_REG_2D, + .reset =3D 0x00000200 }, + + /* 0xB8 - 0xF8: ECC, DFI, etc. */ + { .name =3D "DFI_TIMING", + .addr =3D A_DFI_TIMING, + .reset =3D 0x00200067 }, + { .name =3D "CHE_ECC_CONTROL_REG_OFFSET", + .addr =3D A_CHE_ECC_CONTROL_REG_OFFSET }, + { .name =3D "CHE_CORR_ECC_LOG_REG_OFFSET", + .addr =3D A_CHE_CORR_ECC_LOG_REG_OFFSET }, + { .name =3D "CHE_CORR_ECC_ADDR_REG_OFFSET", + .addr =3D A_CHE_CORR_ECC_ADDR_REG_OFFSET }, + { .name =3D "CHE_CORR_ECC_DATA_31_0_REG_OFFSET", + .addr =3D A_CHE_CORR_ECC_DATA_31_0_REG_OFFSET }, + { .name =3D "CHE_CORR_ECC_DATA_63_32_REG_OFFSET", + .addr =3D A_CHE_CORR_ECC_DATA_63_32_REG_OFFSET }, + { .name =3D "CHE_CORR_ECC_DATA_71_64_REG_OFFSET", + .addr =3D A_CHE_CORR_ECC_DATA_71_64_REG_OFFSET }, + { .name =3D "CHE_UNCORR_ECC_LOG_REG_OFFSET", + .addr =3D A_CHE_UNCORR_ECC_LOG_REG_OFFSET }, + { .name =3D "CHE_UNCORR_ECC_ADDR_REG_OFFSET", + .addr =3D A_CHE_UNCORR_ECC_ADDR_REG_OFFSET }, + { .name =3D "CHE_UNCORR_ECC_DATA_31_0_REG_OFFSET", + .addr =3D A_CHE_UNCORR_ECC_DATA_31_0_REG_OFFSET }, + { .name =3D "CHE_UNCORR_ECC_DATA_63_32_REG_OFFSET", + .addr =3D A_CHE_UNCORR_ECC_DATA_63_32_REG_OFFSET }, + { .name =3D "CHE_UNCORR_ECC_DATA_71_64_REG_OFFSET", + .addr =3D A_CHE_UNCORR_ECC_DATA_71_64_REG_OFFSET }, + { .name =3D "CHE_ECC_STATS_REG_OFFSET", + .addr =3D A_CHE_ECC_STATS_REG_OFFSET }, + { .name =3D "ECC_SCRUB", + .addr =3D A_ECC_SCRUB, + .reset =3D 0x00000008 }, + { .name =3D "CHE_ECC_CORR_BIT_MASK_31_0_REG_OFFSET", + .addr =3D A_CHE_ECC_CORR_BIT_MASK_31_0_REG_OFFSET }, + { .name =3D "CHE_ECC_CORR_BIT_MASK_63_32_REG_OFFSET", + .addr =3D A_CHE_ECC_CORR_BIT_MASK_63_32_REG_OFFSET }, + + /* 0x114 - 0x174: PHY config, ratios, DQS, WE */ + { .name =3D "PHY_RCVER_ENABLE", + .addr =3D A_PHY_RCVER_ENABLE }, + { .name =3D "PHY_CONFIG0", + .addr =3D A_PHY_CONFIG0, + .reset =3D 0x40000001 }, + { .name =3D "PHY_CONFIG1", + .addr =3D A_PHY_CONFIG1, + .reset =3D 0x40000001 }, + { .name =3D "PHY_CONFIG2", + .addr =3D A_PHY_CONFIG2, + .reset =3D 0x40000001 }, + { .name =3D "PHY_CONFIG3", + .addr =3D A_PHY_CONFIG3, + .reset =3D 0x40000001 }, + { .name =3D "PHY_INIT_RATIO0", + .addr =3D A_PHY_INIT_RATIO0 }, + { .name =3D "PHY_INIT_RATIO1", + .addr =3D A_PHY_INIT_RATIO1 }, + { .name =3D "PHY_INIT_RATIO2", + .addr =3D A_PHY_INIT_RATIO2 }, + { .name =3D "PHY_INIT_RATIO3", + .addr =3D A_PHY_INIT_RATIO3 }, + { .name =3D "PHY_RD_DQS_CFG0", + .addr =3D A_PHY_RD_DQS_CFG0, + .reset =3D 0x00000040 }, + { .name =3D "PHY_RD_DQS_CFG1", + .addr =3D A_PHY_RD_DQS_CFG1, + .reset =3D 0x00000040 }, + { .name =3D "PHY_RD_DQS_CFG2", + .addr =3D A_PHY_RD_DQS_CFG2, + .reset =3D 0x00000040 }, + { .name =3D "PHY_RD_DQS_CFG3", + .addr =3D A_PHY_RD_DQS_CFG3, + .reset =3D 0x00000040 }, + { .name =3D "PHY_WR_DQS_CFG0", + .addr =3D A_PHY_WR_DQS_CFG0 }, + { .name =3D "PHY_WR_DQS_CFG1", + .addr =3D A_PHY_WR_DQS_CFG1 }, + { .name =3D "PHY_WR_DQS_CFG2", + .addr =3D A_PHY_WR_DQS_CFG2 }, + { .name =3D "PHY_WR_DQS_CFG3", + .addr =3D A_PHY_WR_DQS_CFG3 }, + { .name =3D "PHY_WE_CFG0", + .addr =3D A_PHY_WE_CFG0, + .reset =3D 0x00000040 }, + { .name =3D "PHY_WE_CFG1", + .addr =3D A_PHY_WE_CFG1, + .reset =3D 0x00000040 }, + { .name =3D "PHY_WE_CFG2", + .addr =3D A_PHY_WE_CFG2, + .reset =3D 0x00000040 }, + { .name =3D "PHY_WE_CFG3", + .addr =3D A_PHY_WE_CFG3, + .reset =3D 0x00000040 }, + + /* 0x17C - 0x194: Write data slaves, misc */ + { .name =3D "WR_DATA_SLV0", + .addr =3D A_WR_DATA_SLV0, + .reset =3D 0x00000080 }, + { .name =3D "WR_DATA_SLV1", + .addr =3D A_WR_DATA_SLV1, + .reset =3D 0x00000080 }, + { .name =3D "WR_DATA_SLV2", + .addr =3D A_WR_DATA_SLV2, + .reset =3D 0x00000080 }, + { .name =3D "WR_DATA_SLV3", + .addr =3D A_WR_DATA_SLV3, + .reset =3D 0x00000080 }, + { .name =3D "REG_64", + .addr =3D A_REG_64, + .reset =3D 0x10020000 }, + { .name =3D "REG_65", + .addr =3D A_REG_65 }, + + /* 0x1A4 - 0x1C4: Misc registers */ + { .name =3D "REG69_6A0", + .addr =3D A_REG69_6A0 }, + { .name =3D "REG69_6A1", + .addr =3D A_REG69_6A1 }, + { .name =3D "REG6C_6D2", + .addr =3D A_REG6C_6D2 }, + { .name =3D "REG6C_6D3", + .addr =3D A_REG6C_6D3 }, + { .name =3D "REG6E_710", + .addr =3D A_REG6E_710 }, + { .name =3D "REG6E_711", + .addr =3D A_REG6E_711 }, + { .name =3D "REG6E_712", + .addr =3D A_REG6E_712 }, + { .name =3D "REG6E_713", + .addr =3D A_REG6E_713 }, + + /* 0x1CC - 0x1E8: DLL, PHY status */ + { .name =3D "PHY_DLL_STS0", + .addr =3D A_PHY_DLL_STS0 }, + { .name =3D "PHY_DLL_STS1", + .addr =3D A_PHY_DLL_STS1 }, + { .name =3D "PHY_DLL_STS2", + .addr =3D A_PHY_DLL_STS2 }, + { .name =3D "PHY_DLL_STS3", + .addr =3D A_PHY_DLL_STS3 }, + { .name =3D "DLL_LOCK_STS", + .addr =3D A_DLL_LOCK_STS }, + { .name =3D "PHY_CTRL_STS", + .addr =3D A_PHY_CTRL_STS }, + { .name =3D "PHY_CTRL_STS_REG2", + .addr =3D A_PHY_CTRL_STS_REG2 }, + + /* 0x200 - 0x2B4: AXI, LPDDR, misc */ + { .name =3D "AXI_ID", + .addr =3D A_AXI_ID }, + { .name =3D "PAGE_MASK", + .addr =3D A_PAGE_MASK }, + { .name =3D "AXI_PRIORITY_WR_PORT0", + .addr =3D A_AXI_PRIORITY_WR_PORT0, + .reset =3D 0x000803FF }, + { .name =3D "AXI_PRIORITY_WR_PORT1", + .addr =3D A_AXI_PRIORITY_WR_PORT1, + .reset =3D 0x000803FF }, + { .name =3D "AXI_PRIORITY_WR_PORT2", + .addr =3D A_AXI_PRIORITY_WR_PORT2, + .reset =3D 0x000803FF }, + { .name =3D "AXI_PRIORITY_WR_PORT3", + .addr =3D A_AXI_PRIORITY_WR_PORT3, + .reset =3D 0x000803FF }, + { .name =3D "AXI_PRIORITY_RD_PORT0", + .addr =3D A_AXI_PRIORITY_RD_PORT0, + .reset =3D 0x000003FF }, + { .name =3D "AXI_PRIORITY_RD_PORT1", + .addr =3D A_AXI_PRIORITY_RD_PORT1, + .reset =3D 0x000003FF }, + { .name =3D "AXI_PRIORITY_RD_PORT2", + .addr =3D A_AXI_PRIORITY_RD_PORT2, + .reset =3D 0x000003FF }, + { .name =3D "AXI_PRIORITY_RD_PORT3", + .addr =3D A_AXI_PRIORITY_RD_PORT3, + .reset =3D 0x000003FF }, + { .name =3D "EXCL_ACCESS_CFG0", + .addr =3D A_EXCL_ACCESS_CFG0 }, + { .name =3D "EXCL_ACCESS_CFG1", + .addr =3D A_EXCL_ACCESS_CFG1 }, + { .name =3D "EXCL_ACCESS_CFG2", + .addr =3D A_EXCL_ACCESS_CFG2 }, + { .name =3D "EXCL_ACCESS_CFG3", + .addr =3D A_EXCL_ACCESS_CFG3 }, + { .name =3D "MODE_REG_READ", + .addr =3D A_MODE_REG_READ }, + { .name =3D "LPDDR_CTRL0", + .addr =3D A_LPDDR_CTRL0 }, + { .name =3D "LPDDR_CTRL1", + .addr =3D A_LPDDR_CTRL1 }, + { .name =3D "LPDDR_CTRL2", + .addr =3D A_LPDDR_CTRL2, + .reset =3D 0x003C0015 }, + { .name =3D "LPDDR_CTRL3", + .addr =3D A_LPDDR_CTRL3, + .reset =3D 0x00000601 }, +}; + +static void zynq_ddrctrl_reset(DeviceState *dev) +{ + DDRCTRLState *s =3D DDRCTRL(dev); + int i; + + for (i =3D 0; i < ZYNQ_DDRCTRL_NUM_REG; ++i) { + register_reset(&s->regs_info[i]); + } +} + +static const MemoryRegionOps ddrctrl_ops =3D { + .read =3D register_read_memory, + .write =3D register_write_memory, + .endianness =3D DEVICE_LITTLE_ENDIAN, +}; + +static const VMStateDescription vmstate_zynq_ddrctrl =3D { + .name =3D "zynq_ddrc", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT32_ARRAY(reg, DDRCTRLState, ZYNQ_DDRCTRL_NUM_REG), + VMSTATE_END_OF_LIST() + } +}; + +static void zynq_ddrctrl_init(Object *obj) +{ + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + DDRCTRLState *s =3D DDRCTRL(obj); + + s->reg_array =3D + register_init_block32(DEVICE(obj), xlnx_zynq_ddrc_regs_info, + ARRAY_SIZE(xlnx_zynq_ddrc_regs_info), + s->regs_info, s->reg, + &ddrctrl_ops, + DDRCTRL_ERR_DEBUG, + ZYNQ_DDRCTRL_MMIO_SIZE); + + sysbus_init_mmio(sbd, &s->reg_array->mem); +} + +static void zynq_ddrctrl_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + + device_class_set_legacy_reset(dc, zynq_ddrctrl_reset); + dc->vmsd =3D &vmstate_zynq_ddrctrl; +} + +static const TypeInfo ddrctrl_info =3D { + .name =3D TYPE_DDRCTRL, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(DDRCTRLState), + .instance_init =3D zynq_ddrctrl_init, + .class_init =3D zynq_ddrctrl_class_init, +}; + +static void ddrctrl_register_types(void) +{ + type_register_static(&ddrctrl_info); +} + +type_init(ddrctrl_register_types) diff --git a/include/hw/misc/xlnx-zynq-ddrc.h b/include/hw/misc/xlnx-zynq-d= drc.h new file mode 100644 index 0000000000..3d45a02176 --- /dev/null +++ b/include/hw/misc/xlnx-zynq-ddrc.h @@ -0,0 +1,148 @@ +/* + * QEMU model of the Xilinx Zynq Double Data Rate Controller + * + * Copyright (c) Beckhoff Automation GmbH. & Co. KG + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef XLNX_ZYNQ_DDRC_H +#define XLNX_ZYNQ_DDRC_H + +#include "hw/sysbus.h" +#include "hw/register.h" + +#define TYPE_DDRCTRL "zynq.ddr-ctlr" +#define DDRCTRL(obj) \ + OBJECT_CHECK(DDRCTRLState, (obj), TYPE_DDRCTRL) + +REG32(DDRC_CTRL, 0x00) +REG32(TWO_RANK_CFG, 0x04) +REG32(HPR_REG, 0x08) +REG32(LPR_REG, 0x0C) +REG32(WR_REG, 0x10) +REG32(DRAM_PARAM_REG0, 0x14) +REG32(DRAM_PARAM_REG1, 0x18) +REG32(DRAM_PARAM_REG2, 0x1C) +REG32(DRAM_PARAM_REG3, 0x20) +REG32(DRAM_PARAM_REG4, 0x24) +REG32(DRAM_INIT_PARAM, 0x28) +REG32(DRAM_EMR_REG, 0x2C) +REG32(DRAM_EMR_MR_REG, 0x30) +REG32(DRAM_BURST8_RDWR, 0x34) +REG32(DRAM_DISABLE_DQ, 0x38) +REG32(DRAM_ADDR_MAP_BANK, 0x3C) +REG32(DRAM_ADDR_MAP_COL, 0x40) +REG32(DRAM_ADDR_MAP_ROW, 0x44) +REG32(DRAM_ODT_REG, 0x48) +REG32(PHY_DBG_REG, 0x4C) +REG32(PHY_CMD_TIMEOUT_RDDATA_CPT, 0x50) +REG32(MODE_STS_REG, 0x54) + FIELD(MODE_STS_REG, DDR_REG_DBG_STALL, 3, 3) + FIELD(MODE_STS_REG, DDR_REG_OPERATING_MODE, 0, 2) +REG32(DLL_CALIB, 0x58) +REG32(ODT_DELAY_HOLD, 0x5C) +REG32(CTRL_REG1, 0x60) +REG32(CTRL_REG2, 0x64) +REG32(CTRL_REG3, 0x68) +REG32(CTRL_REG4, 0x6C) +REG32(CTRL_REG5, 0x78) +REG32(CTRL_REG6, 0x7C) +REG32(CHE_REFRESH_TIMER0, 0xA0) +REG32(CHE_T_ZQ, 0xA4) +REG32(CHE_T_ZQ_SHORT_INTERVAL_REG, 0xA8) +REG32(DEEP_PWRDWN_REG, 0xAC) +REG32(REG_2C, 0xB0) +REG32(REG_2D, 0xB4) +REG32(DFI_TIMING, 0xB8) +REG32(CHE_ECC_CONTROL_REG_OFFSET, 0xC4) +REG32(CHE_CORR_ECC_LOG_REG_OFFSET, 0xC8) +REG32(CHE_CORR_ECC_ADDR_REG_OFFSET, 0xCC) +REG32(CHE_CORR_ECC_DATA_31_0_REG_OFFSET, 0xD0) +REG32(CHE_CORR_ECC_DATA_63_32_REG_OFFSET, 0xD4) +REG32(CHE_CORR_ECC_DATA_71_64_REG_OFFSET, 0xD8) +REG32(CHE_UNCORR_ECC_LOG_REG_OFFSET, 0xDC) +REG32(CHE_UNCORR_ECC_ADDR_REG_OFFSET, 0xE0) +REG32(CHE_UNCORR_ECC_DATA_31_0_REG_OFFSET, 0xE4) +REG32(CHE_UNCORR_ECC_DATA_63_32_REG_OFFSET, 0xE8) +REG32(CHE_UNCORR_ECC_DATA_71_64_REG_OFFSET, 0xEC) +REG32(CHE_ECC_STATS_REG_OFFSET, 0xF0) +REG32(ECC_SCRUB, 0xF4) +REG32(CHE_ECC_CORR_BIT_MASK_31_0_REG_OFFSET, 0xF8) +REG32(CHE_ECC_CORR_BIT_MASK_63_32_REG_OFFSET, 0xFC) +REG32(PHY_RCVER_ENABLE, 0x114) +REG32(PHY_CONFIG0, 0x118) +REG32(PHY_CONFIG1, 0x11C) +REG32(PHY_CONFIG2, 0x120) +REG32(PHY_CONFIG3, 0x124) +REG32(PHY_INIT_RATIO0, 0x12C) +REG32(PHY_INIT_RATIO1, 0x130) +REG32(PHY_INIT_RATIO2, 0x134) +REG32(PHY_INIT_RATIO3, 0x138) +REG32(PHY_RD_DQS_CFG0, 0x140) +REG32(PHY_RD_DQS_CFG1, 0x144) +REG32(PHY_RD_DQS_CFG2, 0x148) +REG32(PHY_RD_DQS_CFG3, 0x14C) +REG32(PHY_WR_DQS_CFG0, 0x154) +REG32(PHY_WR_DQS_CFG1, 0x158) +REG32(PHY_WR_DQS_CFG2, 0x15C) +REG32(PHY_WR_DQS_CFG3, 0x160) +REG32(PHY_WE_CFG0, 0x168) +REG32(PHY_WE_CFG1, 0x16C) +REG32(PHY_WE_CFG2, 0x170) +REG32(PHY_WE_CFG3, 0x174) +REG32(WR_DATA_SLV0, 0x17C) +REG32(WR_DATA_SLV1, 0x180) +REG32(WR_DATA_SLV2, 0x184) +REG32(WR_DATA_SLV3, 0x188) +REG32(REG_64, 0x190) +REG32(REG_65, 0x194) +REG32(REG69_6A0, 0x1A4) +REG32(REG69_6A1, 0x1A8) +REG32(REG6C_6D2, 0x1B0) +REG32(REG6C_6D3, 0x1B4) +REG32(REG6E_710, 0x1B8) +REG32(REG6E_711, 0x1BC) +REG32(REG6E_712, 0x1C0) +REG32(REG6E_713, 0x1C4) +REG32(PHY_DLL_STS0, 0x1CC) +REG32(PHY_DLL_STS1, 0x1D0) +REG32(PHY_DLL_STS2, 0x1D4) +REG32(PHY_DLL_STS3, 0x1D8) +REG32(DLL_LOCK_STS, 0x1E0) +REG32(PHY_CTRL_STS, 0x1E4) +REG32(PHY_CTRL_STS_REG2, 0x1E8) +REG32(AXI_ID, 0x200) +REG32(PAGE_MASK, 0x204) +REG32(AXI_PRIORITY_WR_PORT0, 0x208) +REG32(AXI_PRIORITY_WR_PORT1, 0x20C) +REG32(AXI_PRIORITY_WR_PORT2, 0x210) +REG32(AXI_PRIORITY_WR_PORT3, 0x214) +REG32(AXI_PRIORITY_RD_PORT0, 0x218) +REG32(AXI_PRIORITY_RD_PORT1, 0x21C) +REG32(AXI_PRIORITY_RD_PORT2, 0x220) +REG32(AXI_PRIORITY_RD_PORT3, 0x224) +REG32(EXCL_ACCESS_CFG0, 0x294) +REG32(EXCL_ACCESS_CFG1, 0x298) +REG32(EXCL_ACCESS_CFG2, 0x29C) +REG32(EXCL_ACCESS_CFG3, 0x2A0) +REG32(MODE_REG_READ, 0x2A4) +REG32(LPDDR_CTRL0, 0x2A8) +REG32(LPDDR_CTRL1, 0x2AC) +REG32(LPDDR_CTRL2, 0x2B0) +REG32(LPDDR_CTRL3, 0x2B4) + + +#define ZYNQ_DDRCTRL_MMIO_SIZE 0x400 +#define ZYNQ_DDRCTRL_NUM_REG (ZYNQ_DDRCTRL_MMIO_SIZE / 4) + +typedef struct DDRCTRLState { + SysBusDevice parent_obj; + + MemoryRegion iomem; + + RegisterInfoArray *reg_array; + uint32_t reg[ZYNQ_DDRCTRL_NUM_REG]; + RegisterInfo regs_info[ZYNQ_DDRCTRL_NUM_REG]; +} DDRCTRLState; +#endif --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520340; cv=none; d=zohomail.com; s=zohoarc; b=e/S8tXVlJ6YY9ua1H+Ybo72QLaMT3zyR+N7dxp6uXqCHvTim3z4RTReDnkvhD278nfasVClvNninV8O+3Uiys/KbQl80viKWwTzFvywSbPDj4b81/brrg0ClFvuiTbGv9T7+YEu3JzZbdaKIoc72DGNnZVEpAyoBlkrfQtg4GT8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520340; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=A1i0haX05wPH7+qqw20aGMRGdV4gaXbDlVbiQ7m2y5A=; b=i/6VEV8kGQAV+MEcVZmVyBL+6dA/pVBARwWnfPPSge3FY40TbxjKckaTts64VUOv7yUyP/azdKrt0KbVxybyp7nm6apNy4W6wqegns6+6zl5bgjg7L7d1Oy6TRRqM4qPXrUGs5XpWTnzlQAkYAUoMaBbGELaDnNC4YHh3cTPFK8= 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+importer=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 176052034082070.50897479274101; Wed, 15 Oct 2025 02:25:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeV-00025Q-5G; Wed, 15 Oct 2025 05:18:35 -0400 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 1v8xeK-0001wD-Al for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:24 -0400 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdq-0007Fz-CC for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:23 -0400 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-b463f986f80so402496166b.2 for ; Wed, 15 Oct 2025 02:17:53 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519872; x=1761124672; darn=nongnu.org; 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=A1i0haX05wPH7+qqw20aGMRGdV4gaXbDlVbiQ7m2y5A=; b=bYt5vrlz7gFR/4YKUaV3toDZjZ82cvTpzr/5wngk6Tn+fy5QfDDsV68HeQuAyQHui4 hH1Yp+2ToGLBUz2I1kKPByCDNEzf6p16q8NItJiIG+iGMa19D9UU8hjNLm2UsRFUd3+r Ajos5OMsOEnXfPw0ow5P1MhRW93MDHmvLvGv7Th35KmPG09OGCCGFthluCYBrVOwqHf7 pF3XvSaHcv94m2ThWMY+O9qj5BIkmUDDRbsNKTiyS7pnDdGI+7pXM7MwBQvPnmrVPShy fCU93kazZJ6NdVbkDBpEpFLuGP/yP02ELbiXGSlN0+nxz9bWo4V6Bg6X50zlHfwxg9mt jPig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519872; x=1761124672; 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=A1i0haX05wPH7+qqw20aGMRGdV4gaXbDlVbiQ7m2y5A=; b=iX414Ez9Zfd7i3ZGmTTl7igrL6oXXkimKHGBmQVqInx2GwZuIj+BX07sKrk8UbZrsa E8Ry1LPNvsIC+i6PWC34srOrp2ydSIX6J6jONgDigbjTzP0sAJAXw5hvfcXeogCjICnD xJnwdpXaZAllWh1CgnOInqkU50T97ZaQepFyU+5A1TUtcioXpDeOGhYKycws2Rvm4Gwa ErBP8aIehnDEwhtN0yP9tEO7vytxbUAPzPHfk3cENbVmdsBV/uDzWBkeGcarFo2hzLod I0/X0LG8+K2jwod3bueKp4o0iC1EUnjBsFkvw5VcH0CYPrvjhC6hR4BnXCAPI35GkG+0 hqSw== X-Gm-Message-State: AOJu0YzLzWoM+iBdlhRYrb57OPpIFareZnlAB6g6dH6vbTNMRdXbHsiO vMZbJazbfbxaX39/KfZ2lUsY3vqdg/mwAbhMcxWIBCF1pTJUfYTQZ7jKGjxY1vwnPmw= X-Gm-Gg: ASbGncsLA88jOjP2ze/C+AUCydsDrrw0VYOvhPva8CVphDzDGR4tcEbjOFC6GhgbIVW HE1L646s3wYpkWRXOYXuE4EGMCxj22CyfoDmRj6V3yeA33FU4AUtkHOQVJLm2hnNODq8MFE8Y1o daRLuK92U6k3GtxGabkvXMU/JRH+g/4KOeTj/RKNO7X+SywLCi/QXWnDUWYoPrKIlQ67bd9rgmu Uv4Cm9EjfLjHTky6rcd+XJbfy/JvXTvx2BdAFDr7YgiBOGwfx3G1j/iJNFWloXzJXoGelF+GUtU qJN+S4Zj0TEJjMZYXG+Ot4v8YFUPv8p/2A8jJVWG+vAa4D9Pst4Pl9b2E3Hh6p6RWz/Fos9nfHr mSexx/0J0QDfNUJjQbBFKUnfdd90yy2nvJsZdyoGwaeLBspx9K8t5s5gvioFuCl30qEbpvZuq X-Google-Smtp-Source: AGHT+IHXQKBdRb7I7nFha4o16yZk3FResaMPTKYJidp8LZvY35n6AKiEnnb1+zy4dDB3WqIZDgVinA== X-Received: by 2002:a17:906:c146:b0:b49:a5e4:754a with SMTP id a640c23a62f3a-b50abfd027emr3087732566b.43.1760519871521; Wed, 15 Oct 2025 02:17:51 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV , "Edgar E. Iglesias" Subject: [PATCH v3 10/14] hw/misc/zynq_slcr: Add logic for DCI configuration Date: Wed, 15 Oct 2025 11:17:25 +0200 Message-ID: <20251015091729.33761-11-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::62c; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x62c.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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520341807154100 Content-Type: text/plain; charset="utf-8" From: YannickV The registers for the digitally controlled impedance (DCI) clock are part of the system level control registers (SLCR). The DONE bit in the status register indicates a successfull DCI calibration. An description of the calibration process can be found here: https://docs.amd.com/r/en-US/ug585-zynq-7000-SoC-TRM/DDR-IOB-Impedance-Cali= bration The DCI control register and status register have been added. As soon as the ENABLE and RESET bit are set, the RESET bit has also been toggled to 0 before and the UPDATE_CONTROL is not set, the DONE bit in the status register is set. If these bits change the DONE bit is reset. Note that the option bits are not taken into consideration. Signed-off-by: YannickV Reviewed-by: Edgar E. Iglesias --- hw/misc/zynq_slcr.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/hw/misc/zynq_slcr.c b/hw/misc/zynq_slcr.c index 010387beec..d8702da4ce 100644 --- a/hw/misc/zynq_slcr.c +++ b/hw/misc/zynq_slcr.c @@ -180,6 +180,12 @@ REG32(GPIOB_CFG_HSTL, 0xb14) REG32(GPIOB_DRVR_BIAS_CTRL, 0xb18) =20 REG32(DDRIOB, 0xb40) +REG32(DDRIOB_DCI_CTRL, 0xb70) + FIELD(DDRIOB_DCI_CTRL, RESET, 0, 1) + FIELD(DDRIOB_DCI_CTRL, ENABLE, 1, 1) + FIELD(DDRIOB_DCI_CTRL, UPDATE_CONTROL, 20, 1) +REG32(DDRIOB_DCI_STATUS, 0xb74) + FIELD(DDRIOB_DCI_STATUS, DONE, 13, 1) #define DDRIOB_LENGTH 14 =20 #define ZYNQ_SLCR_MMIO_SIZE 0x1000 @@ -193,6 +199,8 @@ struct ZynqSLCRState { =20 MemoryRegion iomem; =20 + bool ddriob_dci_ctrl_reset_toggled; + uint32_t regs[ZYNQ_SLCR_NUM_REGS]; =20 Clock *ps_clk; @@ -331,6 +339,8 @@ static void zynq_slcr_reset_init(Object *obj, ResetType= type) =20 DB_PRINT("RESET\n"); =20 + s->ddriob_dci_ctrl_reset_toggled =3D false; + s->regs[R_LOCKSTA] =3D 1; /* 0x100 - 0x11C */ s->regs[R_ARM_PLL_CTRL] =3D 0x0001A008; @@ -418,6 +428,8 @@ static void zynq_slcr_reset_init(Object *obj, ResetType= type) s->regs[R_DDRIOB + 4] =3D s->regs[R_DDRIOB + 5] =3D s->regs[R_DDRIOB += 6] =3D 0x00000e00; s->regs[R_DDRIOB + 12] =3D 0x00000021; + + s->regs[R_DDRIOB_DCI_CTRL] =3D 0x00000020; } =20 static void zynq_slcr_reset_hold(Object *obj, ResetType type) @@ -554,6 +566,25 @@ static void zynq_slcr_write(void *opaque, hwaddr offse= t, (int)offset, (unsigned)val & 0xFFFF); } return; + + case R_DDRIOB_DCI_CTRL: + if (!FIELD_EX32(val, DDRIOB_DCI_CTRL, RESET) && + FIELD_EX32(s->regs[R_DDRIOB_DCI_CTRL], DDRIOB_DCI_CTRL, RESET)= ) { + + s->ddriob_dci_ctrl_reset_toggled =3D true; + DB_PRINT("DDRIOB DCI CTRL RESET was toggled\n"); + } + + if (FIELD_EX32(val, DDRIOB_DCI_CTRL, ENABLE) && + FIELD_EX32(val, DDRIOB_DCI_CTRL, RESET) && + !FIELD_EX32(val, DDRIOB_DCI_CTRL, UPDATE_CONTROL) && + s->ddriob_dci_ctrl_reset_toggled) { + + s->regs[R_DDRIOB_DCI_STATUS] |=3D R_DDRIOB_DCI_STATUS_DONE_MAS= K; + } else { + s->regs[R_DDRIOB_DCI_STATUS] &=3D ~R_DDRIOB_DCI_STATUS_DONE_MA= SK; + } + break; } =20 if (s->regs[R_LOCKSTA]) { --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520146; cv=none; d=zohomail.com; s=zohoarc; b=FeoGsTvt2Px/WkuJamDMsi8qsOX/atnYr9//512pIJkJGRII19Qw9dVEGbvJwIoPVyaQkDcThqxkUKBvfgLeRJXFwth5eXP246NaPA/qR2FqJFKSgjGzCUH8Gt3p8IFV1xL7/LtYO/FRVL5QCwuYUeUR24GD7bheHBBCm2SOCoc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520146; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=zSZesig48Z1wDDnUNJr3ddUDwhjrhjlEH2DRdaZ+h24=; b=S4bEJ/oUtRhJgZI7q5ORHuNFHQZGLL53kHNBjabEEbxj0y5cNHKSRDsb2nFcIy6rL/AsN3hlFGyGoXUYfpb2xauKgzrEkKAQgN/a3D6S8As1sqlhc8vsITvlNdN5Oh/O2kvDEAK7CeM/Lcc7zrC8ZEpHHQVDwswEC1az1pTPrDQ= 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+importer=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 1760520146970457.52696236048985; Wed, 15 Oct 2025 02:22:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xef-0002B6-At; Wed, 15 Oct 2025 05:18:45 -0400 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 1v8xeZ-00028c-J8 for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:39 -0400 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xe0-0007Gs-PU for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:39 -0400 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-b2e0513433bso481852066b.1 for ; Wed, 15 Oct 2025 02:17:54 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519873; x=1761124673; darn=nongnu.org; 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=zSZesig48Z1wDDnUNJr3ddUDwhjrhjlEH2DRdaZ+h24=; b=LtYXcBUnejR0zhO10JfRnn5ZMXncwgqzMQteYMOCWeAHWuXbLTD2EJL5sB8uM94z6+ sfmas4xj7a/1Gqb/lweWnCVXzxa8uNEpZ0xO1IBPoDT/57+s+MF5yGAn6D6UyccJYyDa nXoM45z8EMFQKNxgDJdCnOY+oQuGC45HZQFL+SbX95FlaCde2TvDklQP+8hd4eKIUXwU 29b9vClRDhfjSHkR3N+LUrj/V2z280SUHRvUoYhTMgXcp/0hiJRMGTr8E2YD19pIctvx /TaXbOo+XNnNYnLh9RMWd23JKvkukCegl0JTRoJ67nsZTJ2qiVv48m7lV4Kpens+nDIl F8Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519873; x=1761124673; 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=zSZesig48Z1wDDnUNJr3ddUDwhjrhjlEH2DRdaZ+h24=; b=a2hsTMVOeUY9dtNJaGM8G0BAZhOe/eLuGCH7oGdngMjzETaltaKGjo5q34Tkw9MrKU KBWdyGUxejNqvzk3TjAX9Whc0uZxdX2kEXoBM27U2ob4SN8uPixzFhFPcpfnowuM287s C2Mgkzh6SHfHK11dlWV/yLN03mjtECQ8McJ/zmJPUgCHlOPELGm5aKyQdNJ+PuPU3Csm lezrTBSPKfm4ovFfupkwu9t93K+kAzavrTMAqHyAdhCXm5mV/Ff1O0EQRZllz5/Q/O+3 kHLGdNOhMh6mJ+E/KbH5tItlD22oJyMB32fwNe2jYg6hQ0E4F1cYV+CySKzWv0m9KYRx zipQ== X-Gm-Message-State: AOJu0Yz+PbIuZcPJmotKQw2KCtRUTduhkIIc7ntT/9MnvCJOTh9JznFw m4vqkzJYx0BGFnThmvWKMKR7687bppkx1qJh9XC1Ej5B/A+OS/9q1K9GWP4B1ZaTLFM= X-Gm-Gg: ASbGncs4uKuNvhwu2AN1iDWwbf8Pw8S2j8IWRKT1jHfbttUvmmZlmUJYBC6pXUm2IpL PSwXy0ilwRmvobN6XzTH2nXAtVV8NMMfiDzRuczOm6nVA8b2gr6OaJpIKNhBNXAfkSrhrV8qoxx 2GDiIGpo5QHSKO35w2DpsS8nG3KcAmw/y1LeRN/sZlOMS6pEClBLE1G+qfQVmwzdOoR7FMjsuu+ Aq9gWWGbgPdeqeK+Kqv7D0clMDgIjEP1fU84+XoSdgumRJSKI9ybzt6QUH7W6pTE7UQ67e33wGX gn7n/BI1e5jm21zpEdVUdIgwSHT/qYhnSoX+BTl4k2C++OAQeGiPieqihSHUGTkpT8T+7FWYCkt HHlHVhdzNBJntMbLw2nMNbanyiD9SNGD0lotHxjj/sUNfXXdrpQhkX/6rh9+3X8uH3lis+p0L X-Google-Smtp-Source: AGHT+IHhPdg4hJO2Z943DETH4NEAHnNsTUcT1c75SRSkiJU8dUmQaNtAWfDRvXBStPqUikdflrL9Sg== X-Received: by 2002:a17:906:f599:b0:b18:63b8:c508 with SMTP id a640c23a62f3a-b50ac5d079cmr2673232366b.44.1760519872469; Wed, 15 Oct 2025 02:17:52 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV Subject: [PATCH v3 11/14] hw/misc: Add Beckhoff CCAT device Date: Wed, 15 Oct 2025 11:17:26 +0200 Message-ID: <20251015091729.33761-12-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::631; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x631.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=unavailable 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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520149715158500 Content-Type: text/plain; charset="utf-8" From: YannickV This adds the Beckhoff Communication Controller (CCAT). The information block, EEPROM interface and DMA controller are currently implemented. The EEPROM provides production information for Beckhoff Devices. An EEPORM binary must therefor be handed over. It should be aligned to a power of two. If no EEPROM binary is handed over an empty EEPROM of size 4096 is initialized. This device is needed for the Beckhoff CX7200 board emulation. Signed-off-by: YannickV --- hw/misc/Kconfig | 3 + hw/misc/beckhoff_ccat.c | 338 ++++++++++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + 3 files changed, 342 insertions(+) create mode 100644 hw/misc/beckhoff_ccat.c diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index d3be733b2c..8ecf423781 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -238,4 +238,7 @@ config XLNX_VERSAL_TRNG config XLNX_ZYNQ_DDRC bool =20 +config BECKHOFF_CCAT + bool + source macio/Kconfig diff --git a/hw/misc/beckhoff_ccat.c b/hw/misc/beckhoff_ccat.c new file mode 100644 index 0000000000..cba570e767 --- /dev/null +++ b/hw/misc/beckhoff_ccat.c @@ -0,0 +1,338 @@ +/* + * Beckhoff Communication Controller Emulation + * + * Copyright (c) Beckhoff Automation GmbH. & Co. KG + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "hw/sysbus.h" +#include "hw/register.h" +#include "qemu/bitops.h" +#include "qemu/log.h" +#include "qapi/error.h" +#include "system/block-backend.h" +#include "exec/address-spaces.h" +#include "exec/memory.h" +#include "system/dma.h" +#include "qemu/error-report.h" +#include "block/block.h" +#include "block/block_int.h" +#include "block/qdict.h" +#include "hw/block/block.h" +#include "migration/vmstate.h" +#include "qemu/bswap.h" + +#ifndef CCAT_ERR_DEBUG +#define CCAT_ERR_DEBUG 0 +#endif + +#define TYPE_BECKHOFF_CCAT "beckhoff-ccat" +OBJECT_DECLARE_SIMPLE_TYPE(BeckhoffCcat, BECKHOFF_CCAT) + +#define MAX_NUM_SLOTS 32 +#define CCAT_FUNCTION_BLOCK_SIZE 16 + +#define CCAT_EEPROM_OFFSET 0x100 +#define CCAT_DMA_OFFSET 0x8000 + +#define CCAT_MEM_SIZE 0xFFFF +#define CCAT_DMA_SIZE 0x800 +#define CCAT_EEPROM_SIZE 0x20 + +#define EEPROM_MEMORY_SIZE 0x1000 + +#define EEPROM_CMD_OFFSET (CCAT_EEPROM_OFFSET + 0x00) + #define EEPROM_CMD_WRITE_MASK 0x2 + #define EEPROM_CMD_READ_MASK 0x1 +#define EEPROM_ADR_OFFSET (CCAT_EEPROM_OFFSET + 0x04) +#define EEPROM_DATA_OFFSET (CCAT_EEPROM_OFFSET + 0x08) + +#define DMA_BUFFER_OFFSET (CCAT_DMA_OFFSET + 0x00) +#define DMA_DIRECTION_OFFSET (CCAT_DMA_OFFSET + 0x7c0) + #define DMA_DIRECTION_MASK 1 +#define DMA_TRANSFER_OFFSET (CCAT_DMA_OFFSET + 0x7c4) +#define DMA_HOST_ADR_OFFSET (CCAT_DMA_OFFSET + 0x7c8) +#define DMA_TRANSFER_LENGTH_OFFSET (CCAT_DMA_OFFSET + 0x7cc) + +/* + * The informationblock is always located at address 0x0. + * Address and size are therefor replaced by two identifiers. + * The Parameter give information about the maximal number of + * function slots and the creation date (in this case 01.01.2001) + */ +#define CCAT_ID_1 0x88a4 +#define CCAT_ID_2 0x54414343 +#define CCAT_INFO_BLOCK_PARAMS ((MAX_NUM_SLOTS << 0) | (0x1 << 8) | \ + (0x1 << 16) | (0x1 << 24)) + +#define CCAT_FUN_TYPE_ENTRY 0x0001 +#define CCAT_FUN_TYPE_EEPROM 0x0012 +#define CCAT_FUN_TYPE_DMA 0x0013 + +typedef struct BeckhoffCcat { + SysBusDevice parent_obj; + + MemoryRegion iomem; + + uint8_t mem[CCAT_MEM_SIZE]; + + BlockBackend *eeprom_blk; + uint8_t *eeprom_storage; + uint32_t eeprom_size; +} BeckhoffCcat; + +static void sync_eeprom(BeckhoffCcat *s) +{ + if (!s->eeprom_blk) { + return; + } + blk_pwrite(s->eeprom_blk, 0, s->eeprom_size, s->eeprom_storage, 0); +} + +static uint64_t beckhoff_ccat_eeprom_read(void *opaque, hwaddr addr, + unsigned size) +{ + BeckhoffCcat *s =3D opaque; + return ldn_le_p(&s->mem[addr], size); +} + +static void beckhoff_ccat_eeprom_write(void *opaque, hwaddr addr, uint64_t= val, + unsigned size) +{ + BeckhoffCcat *s =3D opaque; + uint64_t eeprom_adr; + uint64_t buf; + uint32_t bytes_to_read; + + switch (addr) { + case EEPROM_CMD_OFFSET: + eeprom_adr =3D ldl_le_p(&s->mem[EEPROM_ADR_OFFSET]); + eeprom_adr =3D (eeprom_adr * 2) % s->eeprom_size; + if (val & EEPROM_CMD_READ_MASK) { + buf =3D 0; + bytes_to_read =3D 8; + if (eeprom_adr > s->eeprom_size - 8) { + bytes_to_read =3D s->eeprom_size - eeprom_adr; + } + buf =3D ldn_le_p(s->eeprom_storage + eeprom_adr, bytes_to_read= ); + stq_le_p(&s->mem[EEPROM_DATA_OFFSET], buf); + } else if (val & EEPROM_CMD_WRITE_MASK) { + buf =3D ldl_le_p(&s->mem[EEPROM_DATA_OFFSET]); + stw_le_p((uint16_t *)(s->eeprom_storage + eeprom_adr), buf); + sync_eeprom(s); + } + break; + default: + stn_le_p(&s->mem[addr], size, val); + } +} + +static uint64_t beckhoff_ccat_dma_read(void *opaque, hwaddr addr, unsigned= size) +{ + BeckhoffCcat *s =3D opaque; + + switch (addr) { + case DMA_TRANSFER_OFFSET: + if (s->mem[DMA_TRANSFER_OFFSET] & 0x1) { + s->mem[DMA_TRANSFER_OFFSET] =3D 0; + } + break; + } + return ldn_le_p(&s->mem[addr], size); +} + +static void beckhoff_ccat_dma_write(void *opaque, hwaddr addr, uint64_t va= l, + unsigned size) +{ + BeckhoffCcat *s =3D opaque; + dma_addr_t dmaAddr; + uint8_t len; + uint8_t *mem_buf; + + switch (addr) { + case DMA_TRANSFER_OFFSET: + len =3D s->mem[DMA_TRANSFER_LENGTH_OFFSET]; + mem_buf =3D &s->mem[DMA_BUFFER_OFFSET]; + dmaAddr =3D ldl_le_p(&s->mem[DMA_HOST_ADR_OFFSET]); + if (s->mem[DMA_DIRECTION_OFFSET] & DMA_DIRECTION_MASK) { + dma_memory_read(&address_space_memory, dmaAddr, + mem_buf, len * 8, MEMTXATTRS_UNSPECIFIED); + } else { + /* + * The write transfer uses Host DMA Address + 8 as the target + * offset, as described in the CCAT manual Version 0.0.41 + * section 20.2. + */ + dma_memory_write(&address_space_memory, dmaAddr + 8, + mem_buf, len * 8, MEMTXATTRS_UNSPECIFIED); + } + break; + } + stn_le_p(&s->mem[addr], size, val); +} + +static uint64_t beckhoff_ccat_read(void *opaque, hwaddr addr, unsigned siz= e) +{ + BeckhoffCcat *s =3D opaque; + uint64_t val =3D 0; + + assert(addr <=3D CCAT_MEM_SIZE - size); + + if (addr >=3D CCAT_EEPROM_OFFSET && + addr <=3D CCAT_EEPROM_OFFSET + s->eeprom_size) { + return beckhoff_ccat_eeprom_read(opaque, addr, size); + } else if (addr >=3D CCAT_DMA_OFFSET && + addr <=3D CCAT_DMA_OFFSET + CCAT_DMA_SIZE) { + return beckhoff_ccat_dma_read(opaque, addr, size); + } else { + val =3D ldn_le_p(&s->mem[addr], size); + } + + return val; +} + +static void beckhoff_ccat_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) +{ + BeckhoffCcat *s =3D opaque; + + assert(addr <=3D CCAT_MEM_SIZE - size); + + if (addr >=3D CCAT_EEPROM_OFFSET && + addr <=3D CCAT_EEPROM_OFFSET + s->eeprom_size) { + beckhoff_ccat_eeprom_write(opaque, addr, val, size); + } else if (addr >=3D CCAT_DMA_OFFSET && + addr <=3D CCAT_DMA_OFFSET + CCAT_DMA_SIZE) { + beckhoff_ccat_dma_write(opaque, addr, val, size); + } else { + stn_le_p(&s->mem[addr], size, val); + } +} + +static const MemoryRegionOps beckhoff_ccat_ops =3D { + .read =3D beckhoff_ccat_read, + .write =3D beckhoff_ccat_write, + .endianness =3D DEVICE_LITTLE_ENDIAN, + .valid =3D { + .min_access_size =3D 1, + .max_access_size =3D 8, + }, +}; + +static void beckhoff_ccat_reset(DeviceState *dev) +{ + BeckhoffCcat *s =3D BECKHOFF_CCAT(dev); + + memset(&s->mem[0], 0, MAX_NUM_SLOTS * CCAT_FUNCTION_BLOCK_SIZE); + + size_t offset =3D 0 * CCAT_FUNCTION_BLOCK_SIZE; + stw_le_p(&s->mem[offset + 0], CCAT_FUN_TYPE_ENTRY); + stw_le_p(&s->mem[offset + 2], 0x0001); + stl_le_p(&s->mem[offset + 4], CCAT_INFO_BLOCK_PARAMS); + stl_le_p(&s->mem[offset + 8], CCAT_ID_1); + stl_le_p(&s->mem[offset + 12], CCAT_ID_2); + + offset =3D 11 * CCAT_FUNCTION_BLOCK_SIZE; + stw_le_p(&s->mem[offset + 0], CCAT_FUN_TYPE_EEPROM); + stw_le_p(&s->mem[offset + 2], 0x0001); + stl_le_p(&s->mem[offset + 4], 0); + stl_le_p(&s->mem[offset + 8], CCAT_EEPROM_OFFSET); + stl_le_p(&s->mem[offset + 12], CCAT_EEPROM_SIZE); + + offset =3D 15 * CCAT_FUNCTION_BLOCK_SIZE; + stw_le_p(&s->mem[offset + 0], CCAT_FUN_TYPE_DMA); + stw_le_p(&s->mem[offset + 2], 0x0000); + stl_le_p(&s->mem[offset + 4], 0); + stl_le_p(&s->mem[offset + 8], CCAT_DMA_OFFSET); + stl_le_p(&s->mem[offset + 12], CCAT_DMA_SIZE); +} + +static void beckhoff_ccat_realize(DeviceState *dev, Error **errp) +{ + BeckhoffCcat *s =3D BECKHOFF_CCAT(dev); + BlockBackend *blk; + + blk =3D s->eeprom_blk; + + if (blk) { + uint64_t blk_size =3D blk_getlength(blk); + if (!is_power_of_2(blk_size)) { + error_setg(errp, "Blockend size is not a power of two."); + return; + } + + if (blk_size < 512) { + error_setg(errp, "Blockend size is too small."); + return; + } else { + blk_set_perm(blk, BLK_PERM_WRITE, BLK_PERM_ALL, errp); + + s->eeprom_size =3D blk_size; + s->eeprom_blk =3D blk; + s->eeprom_storage =3D blk_blockalign(s->eeprom_blk, s->eeprom_= size); + + if (!blk_check_size_and_read_all(s->eeprom_blk, DEVICE(s), + s->eeprom_storage, s->eeprom_= size, + errp)) { + return; + } + } + } else { + s->eeprom_size =3D EEPROM_MEMORY_SIZE; + s->eeprom_storage =3D blk_blockalign(NULL, s->eeprom_size); + memset(s->eeprom_storage, 0x00, s->eeprom_size); + } +} + +static void beckhoff_ccat_init(Object *obj) +{ + BeckhoffCcat *s =3D BECKHOFF_CCAT(obj); + SysBusDevice *sbd =3D SYS_BUS_DEVICE(obj); + + memory_region_init_io(&s->iomem, obj, &beckhoff_ccat_ops, s, + TYPE_BECKHOFF_CCAT, CCAT_MEM_SIZE); + sysbus_init_mmio(sbd, &s->iomem); +} + +static const VMStateDescription vmstate_beckhoff_ccat =3D { + .name =3D "beckhoff-ccat", + .version_id =3D 1, + .minimum_version_id =3D 1, + .fields =3D (const VMStateField[]) { + VMSTATE_UINT8_ARRAY(mem, BeckhoffCcat, CCAT_MEM_SIZE), + VMSTATE_UINT32(eeprom_size, BeckhoffCcat), + VMSTATE_VBUFFER_UINT32(eeprom_storage, BeckhoffCcat, 1, NULL, + eeprom_size), + VMSTATE_END_OF_LIST() + } +}; + +static const Property beckhoff_ccat_properties[] =3D { + DEFINE_PROP_DRIVE("eeprom", BeckhoffCcat, eeprom_blk), +}; + +static void beckhoff_ccat_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + dc->realize =3D beckhoff_ccat_realize; + device_class_set_legacy_reset(dc, beckhoff_ccat_reset); + dc->vmsd =3D &vmstate_beckhoff_ccat; + device_class_set_props(dc, beckhoff_ccat_properties); +} + +static const TypeInfo beckhoff_ccat_info =3D { + .name =3D TYPE_BECKHOFF_CCAT, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(BeckhoffCcat), + .instance_init =3D beckhoff_ccat_init, + .class_init =3D beckhoff_ccat_class_init, +}; + +static void beckhoff_ccat_register_types(void) +{ + type_register_static(&beckhoff_ccat_info); +} + +type_init(beckhoff_ccat_register_types) diff --git a/hw/misc/meson.build b/hw/misc/meson.build index ffbcca9796..cd76e04a33 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -14,6 +14,7 @@ system_ss.add(when: 'CONFIG_PL310', if_true: files('arm_l= 2x0.c')) system_ss.add(when: 'CONFIG_INTEGRATOR_DEBUG', if_true: files('arm_integra= tor_debug.c')) system_ss.add(when: 'CONFIG_A9SCU', if_true: files('a9scu.c')) system_ss.add(when: 'CONFIG_ARM11SCU', if_true: files('arm11scu.c')) +system_ss.add(when: 'CONFIG_BECKHOFF_CCAT', if_true: files('beckhoff_ccat.= c')) =20 system_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m_ras.c')) =20 --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520318; cv=none; d=zohomail.com; s=zohoarc; b=BG+cgzV7rlu3J8KNDRKn2i8XZB4z3FzOSwHg9YKViFcFzUysO0eNA1WypgsGo6+1aOjovQKQouhz6cJZ4Ge/5aLI+ORnGCgVRLcI8Zp9a3YqrHULL85D1Is57jbGV1wYntCwEoopGz+9qPeJ1IIxOyaRX9wqpsa+5ZQ0j8hP2JE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520318; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=1IEAaSPzmzz5B3AM/apm91VbHSHgHQnwVHyZGTcUVH8=; b=ba5GooOrpkBaeHQqv3+QKG3+PguAMy3PHxQ6AnpCzSAZ8p2jc27TNvQ+MrYIdZGk8W3LZ/56zwTnoTl1d80zsh3jsl5O58U560lwUB5Et8J1aY56wgGzymW44gO5mCClRWBVHXJaMPyfX6I/+FKoqjhSGJ7tnGC/83K/sDn1Z0E= 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+importer=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 1760520318642421.81340710711515; Wed, 15 Oct 2025 02:25:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xeX-00027U-7Q; Wed, 15 Oct 2025 05:18:37 -0400 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 1v8xeR-00021m-2Q for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:31 -0400 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xdy-0007HH-8e for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:30 -0400 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-b48d8deafaeso1310497366b.1 for ; Wed, 15 Oct 2025 02:17:55 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519874; x=1761124674; darn=nongnu.org; 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=1IEAaSPzmzz5B3AM/apm91VbHSHgHQnwVHyZGTcUVH8=; b=JSiUqZ1HxyOiUxhm1C2USBNqRWyBodi0CJd5jNnnukWYTMFYdpr5uYJUUmnTsGflDW rAtbFrRuzaWayYFK2Q66cenxCWRMY9qiyyhAszOG1kvD8LKeMWpyAeCDz919PkyN73r1 NStWwnv3ohQ+2pQlD1LJvpOgO5wEqyErqXOMJBL+A1NPPCoHrrZWo5Gn4UYO8JWycv3t Db3rdx1AyrIIpNozUm3T5aTjWeqWya4DMeWrY4ATCItRL1L95Og3nUR5rv2moxRK0Zrx 02VX92IYhE9m+R9rHSzN70koAf5DjT+2yLM1oryMkDaM5r0ru+p1VB7GS0k4oBz2Eg6x 0VTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519874; x=1761124674; 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=1IEAaSPzmzz5B3AM/apm91VbHSHgHQnwVHyZGTcUVH8=; b=BvLJf5rpJGh7Yfln0UcSkozLHZGvRJ+tquzKg4sJB+nM1AcfWVyXxlD8GnP0S00OiD ymeq/Zoc0uwRwNZZl/VXc9Dor9E3gBVn+C3lap749BxB6daJHtupRwkO+RNARO3KbnxQ W9ghv8WttJ1c8fzjEO6BJ27/tzWcrOM5EmpG/lnEANY4IYkKk8w4u4rtpq+zPoqOP3Ef /GgEG+ymhyhd0RNfz3kw/mkA0VDO1aBlpkLm9vdcFLeiYQtoQlSLyjHSn2cEvB+Fn9gD 2ytsbae2LD6lTCn5WP8gVFVlUaPkmax71607u/SFI8jPhSlxU6LUdJKcnq2BAQgOKeQs IhSA== X-Gm-Message-State: AOJu0YyYVXaeVnewhTh0Of9FPblXB0D5Z8udXa6dplCpu6X1JWBpjPo5 APhKtNNQ/BFo414J9HZ4btPfQixGs2E2TYevLBfkicB/u64gUh57MIWLLNlvvmo+eTg= X-Gm-Gg: ASbGncuMSOrUb9tq/k2eN5/hul7MMb5ZktYgQpDjAahuAnzmG7tVP4feLquJaQeMdDD JVuBvYHJGanDAEwsjP9ivrFxSsQx3d7mD5MF5e7oHWSYE6GeOBLyRBCXT6hqZ1LNqj391Xu+gtm B8uK357FD86Bo21lr8nBPumCtuw++Hh4F/Kw69dgSn42E2kGDHvp55Y7o63kVrOvdYc1qOUUxzf hZHphRca4qPfztNk8lOWW/SseAMNYl7vHUAxccf4ZuNMDs2wcnBAphDEIsD9xtbMLCLYUbJ/c3O 2znws9GxDGo5tgBb16/6c2e58OzbAF4uZxkuLoTaGgyw3VxjRb0JrHZLHHJgPjtRm+Z3pXL126J kMcpY93acYDexbJJWKikebOoMOHH3013bQKinSurDvho9eGR84DxQNRqot/xb7htHz8RRYQwa X-Google-Smtp-Source: AGHT+IHLAZzJLN1bKOsiOe3mqN1XhP0eiIwCDbtX9fDYf91M3S2gHD5OBU7BbYanHg8raMaeLOUjMQ== X-Received: by 2002:a17:907:3f1c:b0:b3e:26ae:7288 with SMTP id a640c23a62f3a-b50aa48e3b6mr2986592866b.8.1760519873543; Wed, 15 Oct 2025 02:17:53 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV Subject: [PATCH v3 12/14] hw/block/m25p80: Add HAS_SR_TB flag for is25lp016d Date: Wed, 15 Oct 2025 11:17:27 +0200 Message-ID: <20251015091729.33761-13-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::629; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x629.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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520321780154100 Content-Type: text/plain; charset="utf-8" From: YannickV The is25lp016d has 4 Block Write Protect Bits. BP3 specifies whether the upper or lower range should be protected. Therefore, we add the HAS_SR_TB flag to the is25lp016d flags. Signed-off-by: YannickV --- hw/block/m25p80.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c index a5336d92ff..1df223ee81 100644 --- a/hw/block/m25p80.c +++ b/hw/block/m25p80.c @@ -217,7 +217,8 @@ static const FlashPartInfo known_devices[] =3D { /* ISSI */ { INFO("is25lq040b", 0x9d4013, 0, 64 << 10, 8, ER_4K) }, { INFO("is25lp080d", 0x9d6014, 0, 64 << 10, 16, ER_4K) }, - { INFO("is25lp016d", 0x9d6015, 0, 64 << 10, 32, ER_4K) }, + { INFO("is25lp016d", 0x9d6015, 0, 64 << 10, 32, + ER_4K | HAS_SR_TB) }, { INFO("is25lp032", 0x9d6016, 0, 64 << 10, 64, ER_4K) }, { INFO("is25lp064", 0x9d6017, 0, 64 << 10, 128, ER_4K) }, { INFO("is25lp128", 0x9d6018, 0, 64 << 10, 256, ER_4K) }, --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520217; cv=none; d=zohomail.com; s=zohoarc; b=Ow2ST8Dp87gaFi3Tj//4oWDUPav0u67z76pYHOKV0gCGVYNgWmfxha9GMfI/OARqqb3oQH+I+lfe0Sdf2xGxct7iHPuNzYAMW1P32L2vOq/glTvLgRuywlpI592nbGZxR9smfMkWWkAkdv6ltVdkM1W8LMJwl8c23WzlSlxo8X0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520217; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=hWNACZIj1pBtQqp+PLYZtIRjjmCtzDYzJpN1kKuma04=; b=YC0q2DT1NvviuJngraEF15+RQe8hu8/rFzLaAZ+byNWYGBS4r7JUsABco6hKXsNjyWmWF/613XpJHF5kgao4Oc5HjDRdSBMWwmErBajwuacRlJDgUfdmCbpYTBLJsWQ48pOsfwV71aSK2w7c0uqmKkLar3+kdb7z2pEZqs+jF1w= 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+importer=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 176052021710561.48128809232742; Wed, 15 Oct 2025 02:23:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xed-0002Ae-Kx; Wed, 15 Oct 2025 05:18:43 -0400 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 1v8xeY-000288-GZ for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:38 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xe0-0007Hj-Pj for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:38 -0400 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b3c2db014easo349948266b.0 for ; Wed, 15 Oct 2025 02:17:57 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519875; x=1761124675; darn=nongnu.org; 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=hWNACZIj1pBtQqp+PLYZtIRjjmCtzDYzJpN1kKuma04=; b=FulrBW1zCNglQoGP6oS53+VBzryhmLQd1vvPCO6+/qq0GGAf/j5cyv8m7To4wRZh4d SFYVKb27MTU29te2jFcpaCzEAh0ecUaib1l+kGAKIc/x4EM0zNaPsLFz+wyZMkDxwfHe VTT7F9qnEPid0NW32v2Ohf3oVGs0d9dpzC7wmXu3YS+DzT9xUvACPwzoSos78zkZ8a7U jCVvOb7Ay+LYdmFOWebjB5TMAA9BUklWpUYe6oVK1zmpYKPaSP3ikKj5efctU0WP4XM1 3KLRbVnK6G2GH6/WPeVVZjPhYjjHRHQ8los7uUT1es22PMi2jUmohb883vStqjhSRkow Bl9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519875; x=1761124675; 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=hWNACZIj1pBtQqp+PLYZtIRjjmCtzDYzJpN1kKuma04=; b=JTDcAb8aQG6/WYUVAqzGTZ5nV/jhhHPonFRBKvF9mWq4q7B5z+id56w2f/wtdT8h55 T4THoFkwCCF0CF/Kyt+sfoEHtAz7RoJ9G6jOC1trxBA0yTUEaRfy7lTCzCUSHiJsGht3 VR6c7jMb97GGZlQpxkp/r4qn2EwTKUuVYTWH+RvyLKJYCXuD15nfrdLNaqe7nifjchFh 93Zxfu486278WfDe2NOvUKauPmRShQn/gUgRieCxgbAA2PXUK7WTk5Xkcynd5E+KqoLI VHo1lyHd8gbbOA24HfeMNXDZWeJUVVXlB4wIaoUotNfvUUUnt106I2cPsONFJK3QlVfz nmDQ== X-Gm-Message-State: AOJu0YwuWdAFlklg+GEKEUi5MndEsAvsBuVpMOzZ2XJVrwj1FqWSMGST a0QxK/4vNrVDvSbmmyM6657KlC6fVTZcy4/1sa3H1nkIpiPWYTF/9WFlZYYg5LrHBWU= X-Gm-Gg: ASbGncvpCZEMbITQd1wq1FlVh6VRNxd4Ar46uhUmVKngEcfScmCl3Mj3o8BFLTUIkha XRev5JxJ05ry5yDHsmeye1fmLPuCSM9e47P5KE9b7t31ZPxGmxejTGGWO4SIb+zQZ5N/A0G80vM gC47rOXYED5f3tdwAVVJveu26FuHbXwb9GITEvbAUbc73Hh9khZylpLYq3/WN3BJShrmCfLNidh UlZm0gVxfB7wJszuseWV9wlZT+vnEFGz0c7Kd5L+lKD0BQO9hJmk7Bxv7y1wtJzSLPV/7aHoZHv E2qBN9kzv27Xd6OS+hU1ePn6UZ7zBoZ6Fi3gUTJ7cBxBIJ2z5sLNGhWviBvuS4+ZmXhNWyuLiLi HjMcXNH0fIveItWLJtjmXN3xSi4qSgTCPCfS++baFJvM2qjec2qdnqqQKZSyrLA== X-Google-Smtp-Source: AGHT+IEktc5Azdknhys3dWTggRhjxjJl7osF8Xrc2CIMGynr09FlzBkx5lr578RaBpQIe56jQofBlw== X-Received: by 2002:a17:907:9407:b0:b2b:3481:93c8 with SMTP id a640c23a62f3a-b50aa3921e2mr3042371966b.19.1760519874478; Wed, 15 Oct 2025 02:17:54 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV Subject: [PATCH v3 13/14] hw/arm: Add new machine based on xilinx-zynq-a9 for Beckhoff CX7200 Date: Wed, 15 Oct 2025 11:17:28 +0200 Message-ID: <20251015091729.33761-14-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::632; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x632.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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520218524154100 Content-Type: text/plain; charset="utf-8" From: YannickV This commit introduces a new machine, derived from xilinx-zynq-a9. While retaining the foundational architecture, unnecessary peripherals have been removed and the remaining peripherals have been adapted to match the CX7200's hardware layout and behavior. Signed-off-by: YannickV --- hw/arm/Kconfig | 18 ++ hw/arm/beckhoff_CX7200.c | 443 +++++++++++++++++++++++++++++++++++++++ hw/arm/meson.build | 1 + 3 files changed, 462 insertions(+) create mode 100644 hw/arm/beckhoff_CX7200.c diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index b44b85f436..ac1b660c66 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -307,6 +307,24 @@ config ZYNQ select XILINX_SPIPS select ZYNQ_DEVCFG =20 +config BECKHOFF_CX7200 + bool + default y + depends on TCG && ARM + select A9MPCORE + select CADENCE # UART + select PFLASH_CFI02 + select PL310 # cache controller + select PL330 + select SDHCI + select SSI_M25P80 + select XILINX # UART + select XILINX_AXI + select XILINX_SPI + select XILINX_SPIPS + select ZYNQ_DEVCFG + select BECKHOFF_CCAT + config ARM_V7M bool # currently v7M must be included in a TCG build due to translate.c diff --git a/hw/arm/beckhoff_CX7200.c b/hw/arm/beckhoff_CX7200.c new file mode 100644 index 0000000000..b99e022931 --- /dev/null +++ b/hw/arm/beckhoff_CX7200.c @@ -0,0 +1,443 @@ +/* + * Modified Xilinx Zynq Baseboard System emulation for Beckhoff CX7200. + * + * Copyright (c) 2024 Beckhoff Automation GmbH & Co. KG + * + * Based on /hw/arm/xilinx_zynq.c: + * Copyright (c) 2010 Xilinx. + * Copyright (c) 2012 Peter A.G. Crosthwaite (peter.croshtwaite@petalogix.= com) + * Copyright (c) 2012 Petalogix Pty Ltd. + * Original code by Haibing Ma. + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "qemu/osdep.h" +#include "qemu/units.h" +#include "qapi/error.h" +#include "hw/sysbus.h" +#include "hw/arm/boot.h" +#include "net/net.h" +#include "system/system.h" +#include "hw/boards.h" +#include "hw/block/flash.h" +#include "hw/loader.h" +#include "hw/adc/zynq-xadc.h" +#include "hw/ssi/ssi.h" +#include "qemu/error-report.h" +#include "hw/sd/sdhci.h" +#include "hw/char/cadence_uart.h" +#include "hw/net/cadence_gem.h" +#include "hw/cpu/a9mpcore.h" +#include "hw/qdev-clock.h" +#include "hw/misc/unimp.h" +#include "system/reset.h" +#include "qom/object.h" +#include "exec/tswap.h" +#include "target/arm/cpu-qom.h" +#include "qapi/visitor.h" +#include "system/block-backend.h" + + +#define TYPE_CX7200_MACHINE MACHINE_TYPE_NAME("beckhoff-cx7200") +OBJECT_DECLARE_SIMPLE_TYPE(CX7200MachineState, CX7200_MACHINE) + +/* board base frequency: 33.333333 MHz */ +#define PS_CLK_FREQUENCY (100 * 1000 * 1000 / 3) + +#define PERIPHCLK_DIVIDER 2 +#define PS7_CPU_CLK_FREQUENCY 720000000 + +#define NUM_SPI_FLASHES 0 +#define NUM_QSPI_FLASHES 1 +#define NUM_QSPI_BUSSES 1 + +#define IRQ_OFFSET 32 /* pic interrupts start from index 32 */ + +#define MPCORE_PERIPHBASE 0xF8F00000 +#define ZYNQ_BOARD_MIDR 0x413FC090 + +static const int dma_irqs[8] =3D { + 46, 47, 48, 49, 72, 73, 74, 75 +}; + +#define BOARD_SETUP_ADDR 0x100 + +#define SLCR_LOCK_OFFSET 0x004 +#define SLCR_UNLOCK_OFFSET 0x008 +#define SLCR_ARM_PLL_OFFSET 0x100 + +#define SLCR_XILINX_UNLOCK_KEY 0xdf0d +#define SLCR_XILINX_LOCK_KEY 0x767b + +#define ZYNQ_SDHCI_CAPABILITIES 0x69ec0080 /* Datasheet: UG585 (v1.12.1) = */ + +#define ARMV7_IMM16(x) (extract32((x), 0, 12) | \ + extract32((x), 12, 4) << 16) + +/* + * Write immediate val to address r0 + addr. r0 should contain base offset + * of the SLCR block. Clobbers r1. + */ + +#define SLCR_WRITE(addr, val) \ + 0xe3001000 + ARMV7_IMM16(extract32((val), 0, 16)), /* movw r1 ... */ \ + 0xe3401000 + ARMV7_IMM16(extract32((val), 16, 16)), /* movt r1 ... */ \ + 0xe5801000 + (addr) + +#define ZYNQ_MAX_CPUS 2 + +struct CX7200MachineState { + MachineState parent; + Clock *ps_clk; + ARMCPU *cpu[ZYNQ_MAX_CPUS]; + uint8_t boot_mode; +}; + +static void beckhoff_cx7200_write_board_setup(ARMCPU *cpu, + const struct arm_boot_info *info) +{ + int n; + uint32_t board_setup_blob[] =3D { + 0xe3a004f8, /* mov r0, #0xf8000000 */ + SLCR_WRITE(SLCR_UNLOCK_OFFSET, SLCR_XILINX_UNLOCK_KEY), + SLCR_WRITE(SLCR_ARM_PLL_OFFSET, 0x00014008), + SLCR_WRITE(SLCR_LOCK_OFFSET, SLCR_XILINX_LOCK_KEY), + 0xe12fff1e, /* bx lr */ + }; + for (n =3D 0; n < ARRAY_SIZE(board_setup_blob); n++) { + board_setup_blob[n] =3D tswap32(board_setup_blob[n]); + } + rom_add_blob_fixed("board-setup", board_setup_blob, + sizeof(board_setup_blob), BOARD_SETUP_ADDR); +} + +static struct arm_boot_info beckhoff_cx7200_binfo =3D {}; + +static void gem_init(uint32_t base, qemu_irq irq) +{ + DeviceState *dev; + SysBusDevice *s; + + dev =3D qdev_new(TYPE_CADENCE_GEM); + qemu_configure_nic_device(dev, true, NULL); + object_property_set_int(OBJECT(dev), "phy-addr", 7, &error_abort); + s =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(s, &error_fatal); + sysbus_mmio_map(s, 0, base); + sysbus_connect_irq(s, 0, irq); +} + +static void ccat_init(uint32_t base, BlockBackend *eeprom_blk) +{ + DeviceState *dev; + SysBusDevice *busdev; + + dev =3D qdev_new("beckhoff-ccat"); + if (eeprom_blk) { + qdev_prop_set_drive_err(dev, "eeprom", eeprom_blk, &error_fatal); + } + busdev =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(busdev, &error_fatal); + sysbus_mmio_map(busdev, 0, base); +} + +static void ddr_ctrl_init(uint32_t base) +{ + DeviceState *dev; + SysBusDevice *busdev; + + dev =3D qdev_new("zynq.ddr-ctlr"); + busdev =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(busdev, &error_fatal); + sysbus_mmio_map(busdev, 0, base); +} + +static inline int beckhoff_cx7200_init_spi_flashes(uint32_t base_addr, + qemu_irq irq, bool is_qspi, int un= it0) +{ + int unit =3D unit0; + DeviceState *dev; + SysBusDevice *busdev; + SSIBus *spi; + DeviceState *flash_dev; + int i, j; + int num_busses =3D is_qspi ? NUM_QSPI_BUSSES : 1; + int num_ss =3D is_qspi ? NUM_QSPI_FLASHES : NUM_SPI_FLASHES; + + dev =3D qdev_new(is_qspi ? "xlnx.ps7-qspi" : "xlnx.ps7-spi"); + qdev_prop_set_uint8(dev, "num-txrx-bytes", is_qspi ? 4 : 1); + qdev_prop_set_uint8(dev, "num-ss-bits", num_ss); + qdev_prop_set_uint8(dev, "num-busses", num_busses); + busdev =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(busdev, &error_fatal); + sysbus_mmio_map(busdev, 0, base_addr); + if (is_qspi) { + sysbus_mmio_map(busdev, 1, 0xFC000000); + } + sysbus_connect_irq(busdev, 0, irq); + + for (i =3D 0; i < num_busses; ++i) { + char bus_name[16]; + qemu_irq cs_line; + + snprintf(bus_name, 16, "spi%d", i); + spi =3D (SSIBus *)qdev_get_child_bus(dev, bus_name); + + for (j =3D 0; j < num_ss; ++j) { + DriveInfo *dinfo =3D drive_get(IF_MTD, 0, unit++); + flash_dev =3D qdev_new("is25lp016d"); + if (dinfo) { + qdev_prop_set_drive_err(flash_dev, "drive", + blk_by_legacy_dinfo(dinfo), + &error_fatal); + } + qdev_prop_set_uint8(flash_dev, "cs", j); + qdev_realize_and_unref(flash_dev, BUS(spi), &error_fatal); + + cs_line =3D qdev_get_gpio_in_named(flash_dev, SSI_GPIO_CS, 0); + sysbus_connect_irq(busdev, i * num_ss + j + 1, cs_line); + } + } + + return unit; +} + +static void beckhoff_cx7200_set_boot_mode(Object *obj, const char *str, + Error **errp) +{ + CX7200MachineState *m =3D CX7200_MACHINE(obj); + uint8_t mode =3D 0; + + if (!strncasecmp(str, "qspi", 4)) { + mode =3D 1; + } else if (!strncasecmp(str, "sd", 2)) { + mode =3D 5; + } else if (!strncasecmp(str, "nor", 3)) { + mode =3D 2; + } else if (!strncasecmp(str, "jtag", 4)) { + mode =3D 0; + } else { + error_setg(errp, "%s boot mode not supported", str); + return; + } + m->boot_mode =3D mode; +} + +static void beckhoff_cx7200_init(MachineState *machine) +{ + CX7200MachineState *cx7200_machine =3D CX7200_MACHINE(machine); + MemoryRegion *address_space_mem =3D get_system_memory(); + MemoryRegion *ocm_ram =3D g_new(MemoryRegion, 1); + DeviceState *carddev, *dev, *slcr; + SysBusDevice *busdev; + qemu_irq pic[64]; + int n; + unsigned int smp_cpus =3D machine->smp.cpus; + DriveInfo *di; + BlockBackend *blk; + + /* max 2GB ram */ + if (machine->ram_size > 2 * GiB) { + error_report("RAM size more than 2 GiB is not supported"); + exit(EXIT_FAILURE); + } + + for (n =3D 0; n < smp_cpus; n++) { + Object *cpuobj =3D object_new(machine->cpu_type); + + object_property_set_int(cpuobj, "midr", ZYNQ_BOARD_MIDR, + &error_fatal); + object_property_set_int(cpuobj, "reset-cbar", MPCORE_PERIPHBASE, + &error_fatal); + + qdev_realize(DEVICE(cpuobj), NULL, &error_fatal); + + cx7200_machine->cpu[n] =3D ARM_CPU(cpuobj); + } + + /* DDR remapped to address zero. */ + memory_region_add_subregion(address_space_mem, 0, machine->ram); + + /* 256K of on-chip memory */ + memory_region_init_ram(ocm_ram, NULL, "zynq.ocm_ram", 256 * KiB, + &error_fatal); + memory_region_add_subregion(address_space_mem, 0xFFFC0000, ocm_ram); + + /* Create the main clock source, and feed slcr with it */ + cx7200_machine->ps_clk =3D CLOCK(object_new(TYPE_CLOCK)); + object_property_add_child(OBJECT(cx7200_machine), "ps_clk", + OBJECT(cx7200_machine->ps_clk)); + object_unref(OBJECT(cx7200_machine->ps_clk)); + clock_set_hz(cx7200_machine->ps_clk, PS_CLK_FREQUENCY); + + /* Create slcr, keep a pointer to connect clocks */ + slcr =3D qdev_new("xilinx-zynq_slcr"); + qdev_connect_clock_in(slcr, "ps_clk", cx7200_machine->ps_clk); + qdev_prop_set_uint8(slcr, "boot-mode", cx7200_machine->boot_mode); + sysbus_realize_and_unref(SYS_BUS_DEVICE(slcr), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(slcr), 0, 0xF8000000); + + dev =3D qdev_new(TYPE_A9MPCORE_PRIV); + qdev_prop_set_uint32(dev, "num-cpu", smp_cpus); + A9MPPrivState *a9mp_priv_state =3D A9MPCORE_PRIV(dev); + a9mp_priv_state->gtimer.freq_hz =3D PS7_CPU_CLK_FREQUENCY; + a9mp_priv_state->gtimer.periphclk_divider =3D PERIPHCLK_DIVIDER; + a9mp_priv_state->mptimer.freq_hz =3D PS7_CPU_CLK_FREQUENCY; + a9mp_priv_state->mptimer.periphclk_divider =3D PERIPHCLK_DIVIDER; + a9mp_priv_state->wdt.freq_hz =3D PS7_CPU_CLK_FREQUENCY; + a9mp_priv_state->wdt.periphclk_divider =3D PERIPHCLK_DIVIDER; + busdev =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(busdev, &error_fatal); + sysbus_mmio_map(busdev, 0, MPCORE_PERIPHBASE); + beckhoff_cx7200_binfo.gic_cpu_if_addr =3D MPCORE_PERIPHBASE + 0x100; + sysbus_create_varargs("l2x0", MPCORE_PERIPHBASE + 0x2000, NULL); + for (n =3D 0; n < smp_cpus; n++) { + /* See "hw/intc/arm_gic.h" for the IRQ line association */ + DeviceState *cpudev =3D DEVICE(cx7200_machine->cpu[n]); + sysbus_connect_irq(busdev, n, + qdev_get_gpio_in(cpudev, ARM_CPU_IRQ)); + sysbus_connect_irq(busdev, smp_cpus + n, + qdev_get_gpio_in(cpudev, ARM_CPU_FIQ)); + } + + for (n =3D 0; n < 64; n++) { + pic[n] =3D qdev_get_gpio_in(dev, n); + } + + n =3D beckhoff_cx7200_init_spi_flashes(0xE0006000, pic[58 - IRQ_OFFSET= ], + false, 0); + n =3D beckhoff_cx7200_init_spi_flashes(0xE0007000, pic[81 - IRQ_OFFSET= ], + false, n); + n =3D beckhoff_cx7200_init_spi_flashes(0xE000D000, pic[51 - IRQ_OFFSET= ], + true, n); + + dev =3D qdev_new(TYPE_CADENCE_UART); + busdev =3D SYS_BUS_DEVICE(dev); + qdev_prop_set_chr(dev, "chardev", serial_hd(0)); + qdev_connect_clock_in(dev, "refclk", + qdev_get_clock_out(slcr, "uart0_ref_clk")); + sysbus_realize_and_unref(busdev, &error_fatal); + sysbus_mmio_map(busdev, 0, 0xE0000000); + sysbus_connect_irq(busdev, 0, pic[59 - IRQ_OFFSET]); + dev =3D qdev_new(TYPE_CADENCE_UART); + busdev =3D SYS_BUS_DEVICE(dev); + qdev_prop_set_chr(dev, "chardev", serial_hd(1)); + qdev_connect_clock_in(dev, "refclk", + qdev_get_clock_out(slcr, "uart1_ref_clk")); + sysbus_realize_and_unref(busdev, &error_fatal); + sysbus_mmio_map(busdev, 0, 0xE0001000); + sysbus_connect_irq(busdev, 0, pic[82 - IRQ_OFFSET]); + + sysbus_create_varargs("cadence_ttc", 0xF8001000, pic[42 - IRQ_OFFSET], + pic[43 - IRQ_OFFSET], pic[44 - IRQ_OFFSET], NULL= ); + sysbus_create_varargs("cadence_ttc", 0xF8002000, pic[69 - IRQ_OFFSET], + pic[70 - IRQ_OFFSET], pic[71 - IRQ_OFFSET], NULL= ); + + gem_init(0xE000C000, pic[77 - IRQ_OFFSET]); + + di =3D drive_get(IF_NONE, 0, 0); + blk =3D di ? blk_by_legacy_dinfo(di) : NULL; + ccat_init(0x40000000, blk); + + ddr_ctrl_init(0xF8006000); + + /* + * Compatible with: + * - SD Host Controller Specification Version 2.0 Part A2 + * - SDIO Specification Version 2.0 + * - MMC Specification Version 3.31 + */ + dev =3D qdev_new(TYPE_SYSBUS_SDHCI); + qdev_prop_set_uint8(dev, "sd-spec-version", 2); + qdev_prop_set_uint64(dev, "capareg", ZYNQ_SDHCI_CAPABILITIES); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0xE0101000); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[79 - IRQ_OFFSET]); + + di =3D drive_get(IF_SD, 0, 0); + blk =3D di ? blk_by_legacy_dinfo(di) : NULL; + carddev =3D qdev_new(TYPE_SD_CARD); + qdev_prop_set_drive_err(carddev, "drive", blk, &error_fatal); + qdev_realize_and_unref(carddev, qdev_get_child_bus(dev, "sd-bus"), + &error_fatal); + + dev =3D qdev_new(TYPE_ZYNQ_XADC); + sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, 0xF8007100); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, pic[39 - IRQ_OFFSET]); + + dev =3D qdev_new("pl330"); + object_property_set_link(OBJECT(dev), "memory", + OBJECT(address_space_mem), + &error_fatal); + qdev_prop_set_uint8(dev, "num_chnls", 8); + qdev_prop_set_uint8(dev, "num_periph_req", 4); + qdev_prop_set_uint8(dev, "num_events", 16); + + qdev_prop_set_uint8(dev, "data_width", 64); + qdev_prop_set_uint8(dev, "wr_cap", 8); + qdev_prop_set_uint8(dev, "wr_q_dep", 16); + qdev_prop_set_uint8(dev, "rd_cap", 8); + qdev_prop_set_uint8(dev, "rd_q_dep", 16); + qdev_prop_set_uint16(dev, "data_buffer_dep", 256); + + busdev =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(busdev, &error_fatal); + sysbus_mmio_map(busdev, 0, 0xF8003000); + sysbus_connect_irq(busdev, 0, pic[45 - IRQ_OFFSET]); /* abort irq line= */ + for (n =3D 0; n < ARRAY_SIZE(dma_irqs); ++n) { /* event irqs */ + sysbus_connect_irq(busdev, n + 1, pic[dma_irqs[n] - IRQ_OFFSET]); + } + + dev =3D qdev_new("xlnx.ps7-dev-cfg"); + busdev =3D SYS_BUS_DEVICE(dev); + sysbus_realize_and_unref(busdev, &error_fatal); + sysbus_connect_irq(busdev, 0, pic[40 - IRQ_OFFSET]); + sysbus_mmio_map(busdev, 0, 0xF8007000); + + beckhoff_cx7200_binfo.ram_size =3D machine->ram_size; + beckhoff_cx7200_binfo.board_id =3D 0xd32; + beckhoff_cx7200_binfo.loader_start =3D 0; + beckhoff_cx7200_binfo.board_setup_addr =3D BOARD_SETUP_ADDR; + beckhoff_cx7200_binfo.write_board_setup =3D beckhoff_cx7200_write_boar= d_setup; + + arm_load_kernel(cx7200_machine->cpu[0], machine, &beckhoff_cx7200_binf= o); +} + +static void beckhoff_cx7200_machine_class_init(ObjectClass *oc, void *data) +{ + static const char * const valid_cpu_types[] =3D { + ARM_CPU_TYPE_NAME("cortex-a9"), + NULL + }; + MachineClass *mc =3D MACHINE_CLASS(oc); + ObjectProperty *prop; + mc->desc =3D "Beckhoff IPC based on the Xilinx Zynq Platform Baseboard= "; + mc->init =3D beckhoff_cx7200_init; + mc->max_cpus =3D ZYNQ_MAX_CPUS; + mc->no_sdcard =3D 1; + mc->ignore_memory_transaction_failures =3D true; + mc->valid_cpu_types =3D valid_cpu_types; + mc->default_ram_id =3D "zynq.ext_ram"; + prop =3D object_class_property_add_str(oc, "boot-mode", NULL, + beckhoff_cx7200_set_boot_mode); + object_class_property_set_description(oc, "boot-mode", + "Supported boot modes:" + " jtag qspi sd nor"); + object_property_set_default_str(prop, "qspi"); +} + +static const TypeInfo beckhoff_cx7200_machine_type =3D { + .name =3D TYPE_CX7200_MACHINE, + .parent =3D TYPE_MACHINE, + .class_init =3D beckhoff_cx7200_machine_class_init, + .instance_size =3D sizeof(CX7200MachineState), +}; + +static void beckhoff_cx7200_machine_register_types(void) +{ + type_register_static(&beckhoff_cx7200_machine_type); +} + +type_init(beckhoff_cx7200_machine_register_types) diff --git a/hw/arm/meson.build b/hw/arm/meson.build index b88b5b06d7..3d87ded71f 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -2,6 +2,7 @@ arm_ss =3D ss.source_set() arm_common_ss =3D ss.source_set() arm_ss.add(when: 'CONFIG_ARM_VIRT', if_true: files('virt.c')) arm_ss.add(when: 'CONFIG_ACPI', if_true: files('virt-acpi-build.c')) +arm_common_ss.add(when: 'CONFIG_BECKHOFF_CX7200', if_true: files('beckhoff= _CX7200.c')) arm_common_ss.add(when: 'CONFIG_DIGIC', if_true: files('digic_boards.c')) arm_common_ss.add(when: 'CONFIG_EMCRAFT_SF2', if_true: files('msf2-som.c')) arm_common_ss.add(when: 'CONFIG_HIGHBANK', if_true: files('highbank.c')) --=20 2.47.3 From nobody Fri Nov 14 19:40:02 2025 Delivered-To: importer@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+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1760520047; cv=none; d=zohomail.com; s=zohoarc; b=lhj/eRNc3f0kNIhqGZC4KGcrBCbAFJB4+UXVLUiJD/QY87U5Zkw6LUBtYzhXI1eKdC6lyvoIGRYJJbmwVUnDR23P3h9e8PaEKPswBkA1ocavsaQb5UXaR3H7vjiWHRPm7X6MIGby5trRXevMhJM/jPjqfrBdrRRtgkpGXmAUBHw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760520047; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Z3TwBBdLUHAKhGiv26iGeP2UfTRRDnunnjZgIo/sg9k=; b=N2d0MJrWnt7cSTqokVA2J6PZcxqty2dJksc+VD50A0lk2Ru9Bx+iWFV/+rjbomZdi3iEbMLiMaRE+vdpyZjUWtUi2/VgZPeQQtVJ75EJp83OBv0+02Dds1ld0av27m8jLqi6XqznaXekDdj3dtaZ5G5MPzAWVQnBLL6J+a/4wYk= 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+importer=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 1760520047711772.4661422913051; Wed, 15 Oct 2025 02:20:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8xea-00028i-1u; Wed, 15 Oct 2025 05:18:40 -0400 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 1v8xeT-00022z-4d for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:33 -0400 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1v8xe0-0007Hs-1P for qemu-devel@nongnu.org; Wed, 15 Oct 2025 05:18:32 -0400 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b5a8184144dso380818666b.1 for ; Wed, 15 Oct 2025 02:17:57 -0700 (PDT) Received: from PC-DA2D10.beckhoff.com ([195.226.174.194]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b5cb9e7a23dsm182069966b.23.2025.10.15.02.17.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 15 Oct 2025 02:17:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1760519875; x=1761124675; darn=nongnu.org; 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=Z3TwBBdLUHAKhGiv26iGeP2UfTRRDnunnjZgIo/sg9k=; b=Oi9A5rvVpwcpO2fhL43PQvh00Y4XwC7n9AMjkxFn7iMl5Nqzd7MOmx7t6fuw0tGl1o 4OKHxGYo2xGbRpJPLeif9oZ8Wz/0d7o2UWLAkt54gIQ/e8/0+l3S0UbgxTxRpLnRLFIn rllF1IYE17v+kaXBdv+aivixfcWyj+Wnv9+zUmIpw2+biNMTGWDZXOU+oVZJFkHW4nOm OuPprTm5bGVshG3Y256Y9l9QNFxzcwTj/q26LeiLO3TVeQhS1zQnMvIIsrHlxKj0k0gD XcFTAKo6bVkI7qY/l2dH+dzVI2oBctTcwxQyQm33iNLGt2xl6zy42dma4bGo3EZuui0d YyhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1760519875; x=1761124675; 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=Z3TwBBdLUHAKhGiv26iGeP2UfTRRDnunnjZgIo/sg9k=; b=BT/jLSTk+kVFt0zF85A2L+KpRaZAJJM7oqvGPow59YuTVf1TZBfSh7Af2+G7TeVT1K ZX2lFmcqxYqYarjy6XPdcZ9iaUhUtcISFU79foyKayNAML7jCipCJpQTD5Srn3DbGo/4 wzdIuSQhkpV3Keq7Sp9yXC8AzAvWqjO2jqz53YnugQihFMtRusn5LByFWRFHvxlFIwIE gjv5XGPBhkbi5erQS0UJ3SIJoxcofcosbNY9QNdGQh3d0EwpDVJ7YCF7vLGNLAhaLB0H EcdksESmrbjLOumf9CRF72j8Hl2c68b32xdkpJIawxIBtwzYnslnrNThbhOvzLJtEzRQ wcIw== X-Gm-Message-State: AOJu0YzwioQMHjhR3FljhLRBgCQe08HAp4GIStVGw2AphLpK+BBdKB4C RjJY9n9jAmGtr2IFBnbeAKtjQ4Kp0G/EnEaYpQMjAwrDjo+HsNeQa+Sp77v4NjqRpjc= X-Gm-Gg: ASbGncv/HkGlyr2JnKlL9HyrvJuRnaItjrMrfXu+oL6HSg4qkInKcz8q23vvCj+gZWF hqIWko1vs/G86TQ3SYtAzlFoZHXJZTEKRNpQUHTcXJv7lIWJfsWR3TZdR27Xf50DFkUw5zWLMdS 4gQjLrtbk1M9AFajvuJFtW/fzFcB4a+eGaypaTRhAAEk9cM35j4Z0yUn0Wiwzlb/ikHzL2AwINV /iC0V4rLeGNhIFFO9S0Pwea+R/lCdmus4a8XwTHVepYo/SmoZUOWjJq16irHEY7sOxxS+5NRaGM HFeKW2/WDuAjh5u5s8TLgbwRhxNOswv4R0NY06nEZ+iWzdhOdtQf0lUER7+ZWlQzQeVm8TB87NR Q93R8kXTlCafJBkJxMeyXedxYOJYaLg1WLESbccjSrhiKCJ39fgFi+7czn7WnoqNCg989DaNg X-Google-Smtp-Source: AGHT+IHUguSygxcid9NBMRmtzkqRkLlbFkDo7Z+do6kIUo0reSSQnIOjB9aVImbBfTWyTiL7i/fkIA== X-Received: by 2002:a17:907:3f8a:b0:b3f:ccac:af47 with SMTP id a640c23a62f3a-b50ac1ccce8mr3300142566b.31.1760519875438; Wed, 15 Oct 2025 02:17:55 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Kevin Wolf , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Alistair Francis , "Edgar E. Iglesias" , Paolo Bonzini , qemu-arm@nongnu.org, Hanna Reitz , Peter Maydell , qemu-block@nongnu.org, =?UTF-8?q?Corvin=20K=C3=B6hne?= , YannickV Subject: [PATCH v3 14/14] docs/system/arm: Add support for Beckhoff CX7200 Date: Wed, 15 Oct 2025 11:17:29 +0200 Message-ID: <20251015091729.33761-15-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20251015091729.33761-1-corvin.koehne@gmail.com> References: <20251015091729.33761-1-corvin.koehne@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+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::632; envelope-from=corvin.koehne@gmail.com; helo=mail-ej1-x632.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, WEIRD_QUOTING=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+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1760520052417158500 Content-Type: text/plain; charset="utf-8" From: YannickV This commit offers some documentation on the Beckhoff CX7200 qemu emulation. Signed-off-by: YannickV --- docs/system/arm/beckhoff-cx7200.rst | 57 +++++++++++++++++++++++++++++ docs/system/target-arm.rst | 1 + 2 files changed, 58 insertions(+) create mode 100644 docs/system/arm/beckhoff-cx7200.rst diff --git a/docs/system/arm/beckhoff-cx7200.rst b/docs/system/arm/beckhoff= -cx7200.rst new file mode 100644 index 0000000000..f060319b0f --- /dev/null +++ b/docs/system/arm/beckhoff-cx7200.rst @@ -0,0 +1,57 @@ +Beckhoff CX7200 (``beckhoff-cx7200``) +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +The Beckhoff CX7200 is based on the same architecture as the Xilinx Zynq A= 9. +The Zynq 7000 family is based on the AMD SoC architecture. These products +integrate a feature-rich dual or single-core Arm Cortex-A9 MPCore based +processing system (PS) and AMD programmable logic (PL) in a single device. +The Beckhoff Communication Controller (CCAT) can be found in the PL of Zyn= q. + +More details here: +https://docs.amd.com/r/en-US/ug585-zynq-7000-SoC-TRM/Zynq-7000-SoC-Technic= al-Reference-Manual +https://www.beckhoff.com/de-de/produkte/ipc/embedded-pcs/cx7000-arm-r-cort= ex-r/cx7293.html + +The CX7200 supports following devices: + - A9 MPCORE + - cortex-a9 + - GIC v1 + - Generic timer + - wdt + - OCM 256KB + - SMC SRAM@0xe2000000 64MB + - Zynq SLCR + - SPI x2 + - QSPI + - UART + - TTC x2 + - Gigabit Ethernet Controller + - SD Controller + - XADC + - Arm PrimeCell DMA Controller + - DDR Memory + - DDR Controller + - Beckhoff Communication Controller (CCAT) + - EEPROM Interface + - DMA Controller + +Following devices are not supported: + - I2C + +Running +""""""" +Directly loading an ELF file to the CPU of the CX7200 to run f.e. TC/RTOS = (based on FreeRTOS): + +.. code-block:: bash + + $ qemu-system-arm -M beckhoff-cx7200 \ + -device loader,file=3DCX7200_Zynq_Fsbl.elf \ + -display none \ + -icount shift=3Dauto \ + + +For setting the EEPROM content of the CCAT provide the following on the co= mmand line: + +.. code-block:: bash + + -drive file=3Deeprom.bin,format=3Draw,id=3Dccat-eeprom + +The size of eeprom.bin must be aligned to a power of 2 and bigger than 256= bytes. diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst index a96d1867df..e634872b97 100644 --- a/docs/system/target-arm.rst +++ b/docs/system/target-arm.rst @@ -82,6 +82,7 @@ Board-specific documentation arm/aspeed arm/bananapi_m2u.rst arm/b-l475e-iot01a.rst + arm/beckhoff-cx7200 arm/sabrelite arm/highbank arm/digic --=20 2.47.3