From nobody Sat Nov 15 05:35:28 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=1755248515; cv=none; d=zohomail.com; s=zohoarc; b=d/ctrR1DMEbqzTPsxV08WIqzvXHTcaQWL0RzLBm1ZR3432SZ8bSd4AI9BY8qN7VrYHUrjlZYmHaGhr5I3SbRQoEzZxX46lAz2dUyyvD132DW2CT4DzAyI04NLqEbCnAQ0X3iUKFrU9C8pwfEvP99AZamEmOElVaPawRpZykAfVo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248515; h=Content-Type: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=btWRctgXmqOAjXkvhCM7gh0k0uVSvkROM7NTsMMO0EE=; b=PUJN+50jqK4sS6LIx4VwYimWFH/8bl9mYllMMnNyAz8PN5qgAU5Q/Tr56GCO9sEJJyWbKbDx2cq16IwpPWRJwI3MuhuhiBOw5Z1gSwLIRjVrIVQtjbpuuZEFzSOW5u6HEtv/qYMtwbdE5rV0CoWtvoUPPGh3CCcJYOahV3nu9DU= 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 1755248515862210.55821754558508; Fri, 15 Aug 2025 02:01:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJQ-0003ZO-5h; Fri, 15 Aug 2025 05:01: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 1umqJM-0003Wm-N2; Fri, 15 Aug 2025 05:01:20 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJK-0005Z4-Gk; Fri, 15 Aug 2025 05:01:20 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3b9d41bfa35so1456055f8f.0; Fri, 15 Aug 2025 02:01:17 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248476; x=1755853276; 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=btWRctgXmqOAjXkvhCM7gh0k0uVSvkROM7NTsMMO0EE=; b=mNj2lg48fGVcmIxpNuyVTaAzkV+lHIQANg/vvkPLMDcmznxbBkjBGfzSY8dDAwVR9J ZvZEtCkLD6oWDlwg6JFeOF+aYePLsygMAqQcLbm0LNgVXSqX9BCqxoYtXkp3kkpnHrPY yErmtd/PuymLbQKo7jR9Fnzhp36h/rK20JAf2jZHZSB9hClk9Y1SVxvghbwN5YW0kF5O fiOUpYLvbD10rfjZ+j7fVuOLPXpDqSaJFFs9M1yxBhW/zaJa/AzhiEPkdQ7C7lYpTcda G/Ed/5ejYQD9QF4VpiZwDXS8+ENoPavY+TttHbQnORwqL4+uVLqVUG1s4Zt8E62Hedze +MLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248476; x=1755853276; 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=btWRctgXmqOAjXkvhCM7gh0k0uVSvkROM7NTsMMO0EE=; b=sxDogJW376Wolr8t6AZw6Fhl9VY7dIZth2eOMrV65hGu7kayS8nXN1SEV9T1HJWRKB oIKPshKJpLUsBCTGP4x8GurayfS0d5Wb8k2tmqUipt677g4Lf3IJb+DMDXFuxsHHJspB 5JW2/5Xs2x3qIBXtesGmU5EDL/zYNcaRGBkt0rCaV9W4wAvpWJYkA6gKGgGYK7bNa4XO fKlFWS54DF1GLRDdMJ4GGP+R5BjxwjAFe/9Fr4hk8Denn4zvN2b3DzNDxo3hqvbdHQWq XWYqhZTAmFx8D1+IPzCjbJ39RjGiWlIWSocXvfkteYTwravvNNdk2R4j3Gmi6TCH2/j2 Vlyw== X-Forwarded-Encrypted: i=1; AJvYcCVQSGnCHagtPY1S30Azh55jwmlSdrNA9XITRSX5/llil3QkHlUukRq/Me4rWfoDLemmGgVwZmURaA==@nongnu.org, AJvYcCWs8yVrNTt+fjgqqoXu9FRFzt9yKeWClADq8mFpttYtTd7jSpd2xNb0UbG7S7B+r4jFQD5dy79diwQ1EQ==@nongnu.org X-Gm-Message-State: AOJu0YyW+n4uGdT0lhph7SbxICw1ljy6WrQKNvqMw+kCMwg64geOTVGb aN2nqMjRHeGNRW7HyelTGYs7eyq0ENtU7OAHbE0Gqjztbqnf+HBwQNT+n855ckML X-Gm-Gg: ASbGncvpSB75VKmPI7bkP+3BYJJosTnhsTjxEUCBz4nfUHiJdeP0/PmMFJepAMCwq0c wl/dWEPVLVssKRsuBSl3I9NaIB5wxT2jTHjFf2Aypm51hFZysGmRN8PKtjmGZZuddIICdTNcQ9s ES+YnOs6InFDWfXBbXxFTBrLuht41lbam7SGq7RyhNYAzU9N+mAwdWt9uxqrlmZsl6X4dzVzwhy VkUrMWNIBE7UovHHlk25Ke07H+4MUncTEHH1eRfVyh1BkjLWBuLL0sPR8VcYUimAwB6vERacebl Vx540bGSygGG9D7vxc0USz8xj5NPoKlgLXNjOHtBCZAjze93Qubo9gjl69UZibws3AJHoxHyKEv 1ZaGrqD3HY74aXye3xslwUiB9pDIsokJk0CQWrVRTYSJGXQ== X-Google-Smtp-Source: AGHT+IGDu3SSKg/iY77neNRxrt6vuPfYBWcJ6kzwQHruj6G8iew5kjvxEYgGu+eUC041wiut3IPwCQ== X-Received: by 2002:a5d:5887:0:b0:3b9:15eb:6464 with SMTP id ffacd0b85a97d-3bb66f11537mr978133f8f.15.1755248475653; Fri, 15 Aug 2025 02:01:15 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 01/14] hw/timer: Make frequency configurable Date: Fri, 15 Aug 2025 11:00:59 +0200 Message-ID: <20250815090113.141641-2-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::429; envelope-from=corvin.koehne@gmail.com; helo=mail-wr1-x429.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: 1755248518363116600 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 frequency can also be set via the command line, for example for the a9 global timer: -global driver=3Darm.cortex-a9-global-timer, property=3Dcpu-freq,value=3D1000000000 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: Yannick Vo=C3=9Fen --- hw/timer/a9gtimer.c | 8 +++++--- hw/timer/arm_mptimer.c | 15 +++++++++++---- include/hw/timer/a9gtimer.h | 1 + include/hw/timer/arm_mptimer.h | 2 ++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c index 9835c35483..a1f5540e75 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 ret =3D NANOSECONDS_PER_SECOND * prescale * 10; + return (uint32_t) (ret / s->cpu_clk_freq_hz); } =20 static A9GTimerUpdate a9_gtimer_get_update(A9GTimerState *s) @@ -374,6 +374,8 @@ static const VMStateDescription vmstate_a9_gtimer =3D { }; =20 static const Property a9_gtimer_properties[] =3D { + DEFINE_PROP_UINT64("cpu-freq", A9GTimerState, cpu_clk_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 803dad1e8a..a748b6ab1a 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 ret =3D NANOSECONDS_PER_SECOND * prescale * 10; + return (uint32_t) (ret / 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->clk_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, @@ -283,6 +287,7 @@ static const VMStateDescription vmstate_timerblock =3D { .minimum_version_id =3D 3, .fields =3D (const VMStateField[]) { VMSTATE_UINT32(control, TimerBlock), + VMSTATE_UINT64(freq_hz, TimerBlock), VMSTATE_UINT32(status, TimerBlock), VMSTATE_PTIMER(timer, TimerBlock), VMSTATE_END_OF_LIST() @@ -301,6 +306,8 @@ static const VMStateDescription vmstate_arm_mptimer =3D= { }; =20 static const Property arm_mptimer_properties[] =3D { + DEFINE_PROP_UINT64("clk-freq", ARMMPTimerState, clk_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..8ce507a793 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 cpu_clk_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..8b936cceac 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 clk_freq_hz; uint32_t num_cpu; TimerBlock timerblock[ARM_MPTIMER_MAX_CPUS]; MemoryRegion iomem; --=20 2.50.1 From nobody Sat Nov 15 05:35:29 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=1755248661; cv=none; d=zohomail.com; s=zohoarc; b=m0JdXEgsQqtB+OIf6RZ+VMy0k6+iHSCxp/VbWDfpeY9nIGiTZCXRLY0OV/e69TjlpPaC6p1HkEHcEEu3KrlJ1g5TvYYLupbiZxCs+8VR0lUy+CpqZIQtfEC/X/Vx0FlNcFQRyTv1+IStug2JxHxiuvU/QvRcMmmU+LFtU5IHEnQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248661; h=Content-Type: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=oKlbqgXpe7F+soM4Wz0C9HHoN5daOXjlDdILnsR4XFA=; b=VmwjFFlcQDxyqEtaC7AkEXWlcwHDyG9rjUzt8FjF9swRKtk7fAh3yT66i593fupnWmDW+YXyFyuOTLdIbKfFyvqAjPUqyF/nNfILjJkrYVTnDaKQtJvIG635ZuND4srWeHmywruWHpHq6JpCG4ZQ6xBTjhhBQZS9RrG4epYPq1w= 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 1755248661093722.0132446116908; Fri, 15 Aug 2025 02:04:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJT-0003b1-1a; Fri, 15 Aug 2025 05:01:27 -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 1umqJN-0003Xj-QN; Fri, 15 Aug 2025 05:01:21 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJL-0005ZH-FG; Fri, 15 Aug 2025 05:01:21 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-45a1b00a65fso8996805e9.0; Fri, 15 Aug 2025 02:01:18 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248477; x=1755853277; 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=oKlbqgXpe7F+soM4Wz0C9HHoN5daOXjlDdILnsR4XFA=; b=VjTjQ0mbVHy+umFYgNNtc8r5Ixhnf4sQY4gtK/NQzZcl7KPeO2qIU0dCsAaZl6rGd/ YrOxaKEpnszp/m3TFuO44DZxQ8wVI9t82Z2TUNS37BTH9fJDq8JMeztBQUlETiwEN6HO Vadd8ITMaxIkvqJra/u3jKl2vwLarZjTbDLKEVQrs7qiooPEXXnA/iRZSgPlDfewDQen RZeuRbh5P+j3uF7RzeZtyPFj5YQkf2dgJdmWq4Hy1wGhteojwf7f2D1dSU0I+YnK08TE 0qe3z51/bNnkpg8eK26RQXm/VWsUnPEiZsztZAsUgGV3qN0rIkQzXZ7HdTfUdQRItBjn Fj4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248477; x=1755853277; 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=oKlbqgXpe7F+soM4Wz0C9HHoN5daOXjlDdILnsR4XFA=; b=llja08utGvPOxj59nX36RvkNgs5iInUaFeUpRCIo6NZmChbtkwRPvImcEHl3D4lF+D eKUt+QdOarRgmrRcghTDw0w4w1Mf+0m0AjTR/292cG6XZROxm/abxqi7NBLHDEmMqfw9 yLjx4Fa3E5AjM/6S02OmlMSBHHd7eoHkT8jqshfVcDA4MOdNBy6Jawyvb5DP3/Rd2Rgi ySD5jpj50yiTCI/yZJ/I9OBg8rvWCWix663soeh9GeER6KmjLnVqFla4d2MuexfNmpf2 Ohlxy3lKhPPJGH+F9iVvqCuNOms7SaRXF4nVW+LdDm0cnRoXJ8q6avwVjXxWS3qmlA3i sTZg== X-Forwarded-Encrypted: i=1; AJvYcCU2pdKPM/nvy0BVtXN/yAT9iKIbWoJ6oGNu0CN/yxmkbhGUksGed8fkuwWKbd97VrQ302hjK8kyjg==@nongnu.org, AJvYcCVXjMIbgYsf7gsMqsMr/U9ZH7O1RtuaG6+0HJWr6zxIy5A/xjtbK+pVSS2uENitQaQ8HwtjbYL6d3rQKg==@nongnu.org X-Gm-Message-State: AOJu0YyUNmuZPtMq0z9U/ffAiEVcB9FZFLJW8W0B5ddK1NmDA9cNtveg 1ZBXESbaspYRMencizklSPvkHv2CyLOSLeEXq0OkyvrF8VOmdLJ1RV/p/ANfRhs2 X-Gm-Gg: ASbGncsDbC+qdTfGOixfQiPR5I4fXH2MgDa/Ru7bT41R33sOsdzKNxr7ZQ97k+8Rezu E5L0KfK20bzKPFPGYGHhhITClg/Xm4U3+p5/J2saHgkzWKgfZou6kI1Da68BXP+LvtNiz4R31Eg cewBPIP+MB6/Kuc3VhPhKTaO5hpTwVgA1e2gIMfe0JRqp0VYgozcEsLASBB2rPggz8TvMuY+BXs 49YBZ6zYyVeQd/oC9bKM4QUQd9vR4RWHm8IfBV/Pm4W1kyY1hp0l7D2DnStN85tn2EJ/sCYSG2x PiHrvp6IaHj0NuVno9UkW9ktmJHpDckEupiRHn78O8ALGa3tJRr2TKCf4KElH3D+ZLWyQUhBosK JFGQTpQrmXKN19HNeGmwuNIWLL8gemaDyegzKT6ql8C1x9Q== X-Google-Smtp-Source: AGHT+IFbJdg7qm3VP9FPSMNThAnGf6yonl/zs/sUoCuL/vrRkMHSwFW0dJc7/q5x1EznsI338EUvUg== X-Received: by 2002:a05:600c:19d2:b0:456:19be:5e8 with SMTP id 5b1f17b1804b1-45a218595a3mr11648205e9.20.1755248476581; Fri, 15 Aug 2025 02:01:16 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 02/14] hw/timer: Make PERIPHCLK period configurable Date: Fri, 15 Aug 2025 11:01:00 +0200 Message-ID: <20250815090113.141641-3-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::333; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x333.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: 1755248663935124100 From: YannickV The a9 global timer and arm mp timer rely on the PERIPHCLK as their clock source. The period of PERIPHCLK (denoted as N) must be a multiple of the core CLK period, with N being equal to or greater than two. However, the current implementation does not take the PERIPHCLK period into account, leading to unexpected behavior in systems where the application assumes PERIPHCLK is clocked differently. The property periphclk-period represents the period N, the CLK is devided by to get the peripheral clock PERIPHCLK. We can now configure clock properties for the a9 global timer and arm mp timer. That ensures timers can behave according to the applications needs. The PERIPHCLK period can also be set via the command line, for example for the a9 global timer: -global driver=3Darm.cortex-a9-global-timer, property=3Dperiphclk-period,value=3D2 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: Yannick Vo=C3=9Fen --- hw/timer/a9gtimer.c | 19 ++++++++++++++++++- hw/timer/arm_mptimer.c | 20 +++++++++++++++++++- include/hw/timer/a9gtimer.h | 1 + include/hw/timer/arm_mptimer.h | 2 ++ 4 files changed, 40 insertions(+), 2 deletions(-) diff --git a/hw/timer/a9gtimer.c b/hw/timer/a9gtimer.c index a1f5540e75..83aa75889e 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 + *=20 + * 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 ret =3D NANOSECONDS_PER_SECOND * prescale * 10; + uint64_t ret =3D NANOSECONDS_PER_SECOND * prescale * s->periphclk_peri= od; return (uint32_t) (ret / s->cpu_clk_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_period < 2) { + error_report("Invalid periphclk-period (%lu), must be >=3D 2", + s->periphclk_period); + exit(1); + } + for (i =3D 0; i < s->num_cpu; i++) { A9GTimerPerCPU *gtb =3D &s->per_cpu[i]; =20 @@ -377,6 +392,8 @@ static const Property a9_gtimer_properties[] =3D { DEFINE_PROP_UINT64("cpu-freq", A9GTimerState, cpu_clk_freq_hz, NANOSECONDS_PER_SECOND), DEFINE_PROP_UINT32("num-cpu", A9GTimerState, num_cpu, 0), + DEFINE_PROP_UINT64("periphclk-period", A9GTimerState, + periphclk_period, 10), }; =20 static void a9_gtimer_class_init(ObjectClass *klass, void *data) diff --git a/hw/timer/arm_mptimer.c b/hw/timer/arm_mptimer.c index a748b6ab1a..767413c77a 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 + *=20 + * 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 ret =3D NANOSECONDS_PER_SECOND * prescale * 10; + uint64_t ret =3D NANOSECONDS_PER_SECOND * prescale * tb->periphclk_per= iod; return (uint32_t) (ret / 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->clk_freq_hz; + if (s->periphclk_period < 2) { + error_report("Invalid periphclk-period (%lu), must be >=3D 2", + s->periphclk_period); + exit(1); + } + tb->periphclk_period =3D s->periphclk_period; 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, @@ -288,6 +303,7 @@ static const VMStateDescription vmstate_timerblock =3D { .fields =3D (const VMStateField[]) { VMSTATE_UINT32(control, TimerBlock), VMSTATE_UINT64(freq_hz, TimerBlock), + VMSTATE_UINT64(periphclk_period, TimerBlock), VMSTATE_UINT32(status, TimerBlock), VMSTATE_PTIMER(timer, TimerBlock), VMSTATE_END_OF_LIST() @@ -309,6 +325,8 @@ static const Property arm_mptimer_properties[] =3D { DEFINE_PROP_UINT64("clk-freq", ARMMPTimerState, clk_freq_hz, NANOSECONDS_PER_SECOND), DEFINE_PROP_UINT32("num-cpu", ARMMPTimerState, num_cpu, 0), + DEFINE_PROP_UINT64("periphclk-period", ARMMPTimerState, + periphclk_period, 10), }; =20 static void arm_mptimer_class_init(ObjectClass *klass, void *data) diff --git a/include/hw/timer/a9gtimer.h b/include/hw/timer/a9gtimer.h index 8ce507a793..edb51f91e3 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 cpu_clk_freq_hz; + uint64_t periphclk_period; uint32_t num_cpu; =20 QEMUTimer *timer; diff --git a/include/hw/timer/arm_mptimer.h b/include/hw/timer/arm_mptimer.h index 8b936cceac..2c4cb5c1c3 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_period; qemu_irq irq; MemoryRegion iomem; } TimerBlock; @@ -45,6 +46,7 @@ struct ARMMPTimerState { /*< public >*/ =20 uint64_t clk_freq_hz; + uint64_t periphclk_period; uint32_t num_cpu; TimerBlock timerblock[ARM_MPTIMER_MAX_CPUS]; MemoryRegion iomem; --=20 2.50.1 From nobody Sat Nov 15 05:35:29 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=1755248612; cv=none; d=zohomail.com; s=zohoarc; b=EM3Du7d728t9o8qbmEZ++OUGGaJoLCo/fTQ7+IISgN9sDKq3xyAuRdhaDwG7/ExsvUAuU610z2i9ciRsnrpCeS9avE7gxP8pnRxU/8GpCMGD9nczv2mOK2nUSM43thb7CYUOoa5GzETC8gUNPLzQ+EN3oOvEIbhYk/tne9JLAPs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248612; h=Content-Type: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=oHXCGQU5OO8aBE2h0QkbdQ0ye/plLKhLf/VhqDOiQjI=; b=LjuhMdnnw4cWthlbwewz4qzuCTI7tDYTAxvCjlXhuu7MFEiieufj6kTe3EjnquqNtFltGSnp3OXoQJtVDHMba6rS/1a+kyQf+H4zPE2WS6apwJsAjHfYw/aPeC4guRp7tk8D5jqzym+vmU3odzqunHojK0V/pJ8xwINXMfAV0kM= 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 1755248612137811.8990683678659; Fri, 15 Aug 2025 02:03:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJU-0003by-DI; Fri, 15 Aug 2025 05:01:28 -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 1umqJO-0003Xl-3G; Fri, 15 Aug 2025 05:01:22 -0400 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJM-0005ZS-9H; Fri, 15 Aug 2025 05:01:21 -0400 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-3b9e4147690so1030022f8f.2; Fri, 15 Aug 2025 02:01:19 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248478; x=1755853278; 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=oHXCGQU5OO8aBE2h0QkbdQ0ye/plLKhLf/VhqDOiQjI=; b=Uf7QLGobHN2Vp4Ii1xviWuLoF8UP4c8kYCix2iiNEzlrIk1OnwfILQEuRkYPHwjifT ktW4UPGBvytDHjNGxhCq7Wpgr9QUYTzmc7ABQ4Ad3rUA+2u/QTqN5Hi5DkvC/MRdA9IA T/1j6HaBbjr34dG4T2ntJXK8pQx5Wq749JKGb3F6C3qHBGnvXrbSoulmQahp1yGL7d/l GG9qJzUvK4Z48mK2r7REd8Gi0pPWwBL5U9UorLbnalkUXK+YqQh0jIqJ/uk+UfkM0Ql8 3hbf9y8b1Uc4y3t0+ANdXkE0mwUj4Qm5IhM48lniM8SbKIKSRzQxNLIuPLbML9AQa/TQ uiYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248478; x=1755853278; 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=oHXCGQU5OO8aBE2h0QkbdQ0ye/plLKhLf/VhqDOiQjI=; b=W3sVtNflKlVwXgFVaexqsi6lYJJh31pNNInGapHVnqS63A6MlKPKMdvZOt+nKF2ovb QaGQGhwPvNbCei+B4MeK3VA6gJsKW4pU/Vl712/vodZwF41gz7PFEZ8Bfc9YprfhEiSi OuNT1pFvwbnwI1EHkv2Z/ektjqCz0N9kTbWoQmWyprii04sHfzy/pL+9c45c7X3dGHp+ /h65Y4X48T+DquqAq2IJevWSxUK1ahpDojsgud/53L0e6ZXfyMdskDL+CUCzEFNGgXst L1NKLQhlrKeDPZN7d4IVvEPGMi7m2GfqKqGBko24KfgSo0ocMa/KdcbHWzjKh+9QVK91 xDCw== X-Forwarded-Encrypted: i=1; AJvYcCV5jhECCoJKEZ8FKDAxAzukd1aFynwikDsS23lUNvp6lEczSBQvwfSXCl+bymLUYHYrBSE4GMuGrg==@nongnu.org, AJvYcCVjef5OOuxXwU8qikk2IY3LyGk/88I4Em4W1gsShiBSxNa0hgZgcLSN7ItplDFkIFk9Whmy3mXZfWJQ6Q==@nongnu.org X-Gm-Message-State: AOJu0YzKNl4diD0et4f6WjBliBGDEmzWNv6lL1uevk+cAVFTuQ3Y6ttg FKrH/7uKpJXEw2I6QiTtNGUQvtXjjweMMlDCNhcxUZE2mR/a8s8YFq8ec+SvRa2P X-Gm-Gg: ASbGncuG3LQ7K/zP+TV2NumS33i131OQ3F+G6OAr0q0MNVk+bmMiS9RDXAsM22aN5DN CJnd3vDBKb9uMBDtzzUTyRZlDVX6qiDOND+J1ZomIMQZ0oZXlo0nfADinbVPOsKC781UVzvWOhR nrwx67PbNv2fxQhOxqjEPHZCD0PoSetIJWHqtj3l3zYp/KTuAJbAqzO5G8ROria0xHAJpH2LzdM w5ckTio54QfWWu97+HhygX+tx4A9kqyPh47a33YEgq8mRVtRrvF/t7KvhI+gdV92taaV3O5VGan L0EUJIk+Xk71N+wfubtcajTFICdfZDLCuljhmzNANUOIDsZevwJzld38zEUSt+WHZhYlOH1KKxB DnwfpeSg1GRHfTpJcSJEy3/uOw22qvThJo+N5l0bUHxZdzw36a8ahkzhG X-Google-Smtp-Source: AGHT+IHoLAT1QdT56/FeoJ7FDYUPW53DA5mvX0R/ElVamyFxXFTQrWGrrUls7/gJK6ZTOELeSRMnaA== X-Received: by 2002:a5d:5d0d:0:b0:391:3aaf:1d5f with SMTP id ffacd0b85a97d-3bb694ae1a4mr937724f8f.52.1755248477597; Fri, 15 Aug 2025 02:01:17 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV , "Edgar E. Iglesias" Subject: [PATCH v2 03/14] hw/dma/zynq-devcfg: Handle bitstream loading via DMA to 0xffffffff Date: Fri, 15 Aug 2025 11:01:01 +0200 Message-ID: <20250815090113.141641-4-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::42b; envelope-from=corvin.koehne@gmail.com; helo=mail-wr1-x42b.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: 1755248612665116600 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: Yannick Vo=C3=9Fen 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 0fd0d23f57..b838c1c0d0 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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248539; cv=none; d=zohomail.com; s=zohoarc; b=FOVohCEGxe1fXfJq3VAXfdebwnPAUDt1WPdsr2xCUxhZdK36RPt0iu6G0Rpj65T9/FPikZ4wKKeQ/Kykp3f8xEqPDec/3Giq3km3lyrQzR28m8PR+0yv74aEvACjVYosY2pdhz6kUFj6KhhyFW0ihazgnj8P+jKVWNDOxPveKQ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248539; h=Content-Type: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=IhEYTkw9kQ7NyHSTO//2vzqheMEFMkjFgww9i9v8pPg=; b=Eagr8LHcav+PdTgmJ5eRrw8LQUVkFZ61RXKV9nfqR7mLAi2766HBUc2z0pr2feHEoE6YbFfgONGJ8gQNsuF5Kj4wrBTP8exhNzAJ5W9h2z9F83oMd+CQlbpy7uxCqvqpeYg3YFr5CWrZTIQ8EXmdHym/GpVoMPkbIzN2rYp1Ivo= 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 1755248539729656.8956193613786; Fri, 15 Aug 2025 02:02:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJS-0003aM-Rw; Fri, 15 Aug 2025 05:01: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 1umqJO-0003Y9-SO; Fri, 15 Aug 2025 05:01:23 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJM-0005bz-WD; Fri, 15 Aug 2025 05:01:22 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-45a23def5f2so566665e9.0; Fri, 15 Aug 2025 02:01:19 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248478; x=1755853278; 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=IhEYTkw9kQ7NyHSTO//2vzqheMEFMkjFgww9i9v8pPg=; b=iY04MioIrtrgDK0KlSkYfaIS5g23pZVKDZswoP6B4CQf5GJ1vLsAwKi3wXBOuVLvng kryk/H+Z30MACK9EujxhBzCtdGnW1TfNk4hEmidvMH+KDLK8QgtL5ADil1/xXzlMT6kU 7VJ5rcdoro2X5sXJEY6SeMwfekJCKet3MM8N1521YekKlnm+Yyqe56a0jW9YUFKZUi5v z90z03AhxYLfnTCQsSKdsMN+UFCq81KfGmkLSfw3uP9kBHQcdoySmsHjVJLBw/LTctLK OB4OsfzbnvmlWc8uRQBn6q3j21gVSKenDSaXLCFNXXDLf0ILFFaCCiZdQEKyy70vHeJi bk0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248479; x=1755853279; 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=IhEYTkw9kQ7NyHSTO//2vzqheMEFMkjFgww9i9v8pPg=; b=IvLCYFRzX7Q/QDNNF36+9bDaYUwTaOCzHrpbWBkC5D2cgGpXV6Ja51PI0Jer+1WpDa hjNXwMBzyv7FHCQhNYGluSsgqFoVToH8oeQdmMwm4sUijMDnZiHG+9BwUYTjYBvwxZLX PBs4Kk+B6oZUhSXcepRYWlfQ27Q4+miMO30MwGejN4IYFTZKCdJf5gVZSLStxY5OOWW8 GJf9M46OkuM9Ek3S61R1096TLbaFdElscFx1866Dp6lPDHW9TkRBizESXphXn2rnbfCw bvGNhU86R2XNO7poNAwV+WYovdd42cvDKFQTVYNUj6KfVjAnhOb+avUr1xeDkFignfI3 rCUg== X-Forwarded-Encrypted: i=1; AJvYcCWdcZYDhzo9wOJkHw3D72z1CvyN4gxSVU7J3B0BSpR7sI8U1g7MC0vJPPoztAfLgFblaIzCl4ju3g==@nongnu.org, AJvYcCXKg5q/uLG4cZUHRcfEAyA9zjskk0He/3oTYIx6C4xCQhFGrjbrGaT4RHNs3WR/6K223fogdiIU4yNyyA==@nongnu.org X-Gm-Message-State: AOJu0Yyu84yrRWF8rY2UVULpauGYBMXqdLVsN0Pald7JydqSX8ZgHBA2 KZ/8wmlVIqtr6lVLbFXWiV6MdYk77m0A5CMi4uym4/TSN9bzoBL95BQ7QWOLM4Ex X-Gm-Gg: ASbGncth32VaZHX/VY2vVxtPbRiwLqqjg675gUxXp6h8mKQpPoeWpGf76rt5mGJ9tVR LFOBYrKSgbFd59TkSEVwZeFz4FuVz3dQjP1L5kLgvs1HZiqEhHoJ/sFrlpAoYOm+4A9Zzl+vzhC UMzWbqwewK6h1th4IGiBxkfQ/tLXer+bJWYlt9Yf2nepUJ20rLbfAZOH0WWpaI2aawj6F+plPxH f/otGB8Uz/gWJ5RsKgHPCWUwtu3sZHHAaYFsNyWUCzpd21JB3rsInnK/5n1rgA5yPbGFtTd8ADR RoHMkuwunRvvsoze6fVRUtmGQrav4624VDAggcHamOK+1EKRv7agIgN7cO+qGlccVQlsaPn09db sDJ7l4qL8tNBN+v7X8QaGt4AWB7+2RXBaAmPeAWC39mtCVbgHkPNxwF+9 X-Google-Smtp-Source: AGHT+IE9i+SKH69ORcy9a4Uc1F3lEUI3YK5lZDD787F83RYQZtWsJ3gcvXakg0jjneOrm0tbuHURkw== X-Received: by 2002:a05:600c:c8c:b0:456:fdd:6030 with SMTP id 5b1f17b1804b1-45a21839acemr13029895e9.19.1755248478515; Fri, 15 Aug 2025 02:01:18 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 04/14] hw/arm/zynq-devcfg: Prevent unintended unlock during initialization Date: Fri, 15 Aug 2025 11:01:02 +0200 Message-ID: <20250815090113.141641-5-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x336.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: 1755248542732124100 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: Yannick Vo=C3=9Fen 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 b838c1c0d0..f28d0015e6 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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248588; cv=none; d=zohomail.com; s=zohoarc; b=fqCGvOZFD55ouWsqr2fh8ZC/i+Y0po9wLpTc2WmF6yd2CL7NQmMnh++k4zZ7B3NlMdAUq/oGbKdoNcH2oQUU0sRJs8zSHSXAYj68N1tCzyregCsXMppPy/kmc4eS/XKc7Z8sE9NHS/4dsOyczxZpGxwoL/joZP9V09lFG//pWBQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248587; h=Content-Type: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=xzrN4JQXtZ2ZB3mC3v/OE6qFemrSPSXXjsrAC6BF420=; b=ccb9YezN2B0M1albiVxfrfqG/iBlhOxZf/bLNSBl3no9AoKbKj9wDxaRjV2+kMhwhUrSQzSMVyBcAqvfFZSbxNqGLAcR4PSP7cD5TiWsUwssDbBVq0ENA6H01Kyo0mphbEMD6zNACb0ekEm0Iiew3N0cCyuYpGWzfbC9oHtF5Vw= 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 1755248587988934.5018064698527; Fri, 15 Aug 2025 02:03:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJX-0003ex-Bh; Fri, 15 Aug 2025 05:01:31 -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 1umqJQ-0003ZP-4c; Fri, 15 Aug 2025 05:01:24 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJO-0005cl-IT; Fri, 15 Aug 2025 05:01:23 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-45a1ac7c066so10096855e9.1; Fri, 15 Aug 2025 02:01:20 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248479; x=1755853279; 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=xzrN4JQXtZ2ZB3mC3v/OE6qFemrSPSXXjsrAC6BF420=; b=O71QLXN9kSeTBuj9OmS1CTTy1NObx2Ix1GKztcx1AdZ3W0Pp3aZC7tfSSIIeXCuGuJ kNjJ9SuYBdI77CHfTdyp5MF/xxnvI57ZcGJaYgglgCcjvOheb1kv0WtOLz8dy+b4l7rR fnI0gCZvjNf73w4Ow5GgFi0Ffh5G/trPg9MlKZ8oAj6svKDNl+Un4bLeiUZt9bClaqJi 3zyQNkosb8rbemc2R2wk1j0wB6zo3tu1VUswBZmkIPjiQ3ZbSMvlf/Cc0rSkJG+EZyCt cd+6Mr18aCxNIFtzYGQkLharO13HFFc4Jm37kuzalmSwiHfMj5D1DGD20Z6cDpr8qgiw mFiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248479; x=1755853279; 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=xzrN4JQXtZ2ZB3mC3v/OE6qFemrSPSXXjsrAC6BF420=; b=wmt4kMe0yIiQKr+tU6+JWTRzkyq5xfh1pNz1CJqCJLbZ0QgP/V4Ukf/xxADzPXnnuB Or06jya0Nma0i6Ygmmp5L+vE8IehAItuOeMJsAuczewlm8xRsQnW7+h/93gPhDkXsy6t JO3uhVvi33+QvOD0HLsZHxlfaHgiPggHwTB1yDHEaIF4Dg365mIk6oSUNwDJmbG7TmAs mNWl/xRF4udj+yX0JyN9L6jVJ3wyrhqSVSNeS9bskLvvkohTpxrHS9RvaBrvq1RQfGQn A3vt4mG36VbdEOAV1N9WtCO/noFvhXXj4ZVv2r+Y/sFZukQgh1l3ZRiw8BXXdBpcusWH +A7g== X-Forwarded-Encrypted: i=1; AJvYcCUlowokfkrM9ukjhsO569WZ/v3CpTeoi+jAdhLeJxsw84Q0cVHdlKJcpRcMzxInWQO0r8JsT08cpeuRIw==@nongnu.org, AJvYcCVDYanbyRns6QyGBLz5rgqQSZ4WrMLiY3ZeYnheRs3WBE+vf4hXIzjHeDNfOF7qtf+HPzuAw6CLww==@nongnu.org X-Gm-Message-State: AOJu0YyPk57sVBM41dmTEzsdxNLadwHDe2tcvVcx8fmgOeN3vafw7Fgb 1mA7ZcM/eXNyyheI2r2OaDKCaooqcidyoqg08lWYS0UWWjAS6QUCmNm5xrgAv9BS X-Gm-Gg: ASbGncslc5zS5RqN2HzQ3b0wEoxfQcRU9Yq5mySgW4fWSFSeP96mFejtJPo+pF6TlsL 5Oi5cRC+l9yg5ZeKeARiimmGErz1Z18USi8S0WV7S0i79x58P7cy3c1/07epH0NREnYskLubt70 uBG0XXjGxYvRb683HhjA6o+btP3LwGJbdB8Oomml0x8XaSB5nEJyBWKlGzPW8sbsNKGpjl/qv7M xk2JhcF0m4i5coYBhyYWa2VLAAOgoIFdjx3kgC34NXYs90FpcsxVYsELzOcs2FWvtI39wAunEos 3VF6cfm2ywY0bgdoymKvlNTb5Ts3z3I9ewwAyFjG7z6hiiQcVhVQ3o3o0ZOK3LWe/eRA6u/b3sA yqeutVfJGi3eJPvVVbG8tC3RFQSyMJGEe9Xupx0HWl6mC+g== X-Google-Smtp-Source: AGHT+IF/Y/srYJuhQGL35zSkQ0shzVw6j+XD50SJI8yIH1Yn5+vYH4laj8+TI7ccwZcnC3cRisN7gg== X-Received: by 2002:a05:600c:3f16:b0:459:d577:bd24 with SMTP id 5b1f17b1804b1-45a1b677a70mr45487975e9.7.1755248479346; Fri, 15 Aug 2025 02:01:19 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 05/14] hw/dma/zynq: Ensure PCFG_DONE bit remains set to indicate PL is in user mode Date: Fri, 15 Aug 2025 11:01:03 +0200 Message-ID: <20250815090113.141641-6-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x32a.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: 1755248591108124100 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: Yannick Vo=C3=9Fen 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 f28d0015e6..60ea351494 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; + =20 xlnx_zynq_devcfg_update_ixr(s); } =20 --=20 2.50.1 From nobody Sat Nov 15 05:35:29 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=1755248617; cv=none; d=zohomail.com; s=zohoarc; b=a3VXsPgEldIiiDSrdzERVxlNruqQt+x6IliFuLQf42fH5DVYr3jcShw4oMY3QlUqnqj3yR3idS+GCzFCYuXigTahwQ+NXO32gGeSftfmKfBeHG9ZIpNCjek7EpHcskcLiUERyzVsONKOpsk+L19fBrGMfABbSQZ2iDRjhsBKKo8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248617; h=Content-Type: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=jtpYVDYomfw3dnGGdJoGEMa8DBPeyARO/+gaVWAc1BE=; b=jhTgJ70qdjgET/mUaEa8xeG59ZzDinP6Xik6pYrdB50GpjqjIBn4OMmOi3weURTjWhwE+1gK4aL1Ez37x2Qa/OEUHc72r/ocAJhIJNPOZjGlSH0wy9HqoWtuMS11qfP8zVoYp0MVudayl2KB+VE9ZT2UIHJKqw0r7nRLQR31+bw= 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 17552486170901012.8189866792263; Fri, 15 Aug 2025 02:03:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJX-0003ey-Bq; Fri, 15 Aug 2025 05:01:31 -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 1umqJQ-0003ZW-9s; Fri, 15 Aug 2025 05:01:24 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJO-0005h7-NO; Fri, 15 Aug 2025 05:01:24 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-45a1b004a31so11459475e9.0; Fri, 15 Aug 2025 02:01:21 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248480; x=1755853280; 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=jtpYVDYomfw3dnGGdJoGEMa8DBPeyARO/+gaVWAc1BE=; b=FukoOGcc+Gwbjobr3bKKq3OXfDndMDdtd135x1ieA3iT2UgzF22k++CLQETf/rY7uM SQuDp639NocIygpJE/IeSinjOJ4Yi5+TxlWaC1N5BuOkO+kiQ7GqciJ07CFUhLdP+BcW npacR946SuJHwzPOrMAstT8zfwU/C9zb/Hcj96pc4o8H3lBDiQ3At8yuo4yGefZBZyfX jLqztGzazZeWeFJZkRVoFa4y3q0FfqoSYJns7r1Ut96dEnqfg+KfXPTgxS3HCuA0pYZQ nX6B0tdBW9+aN6FyAu6KCTWHtn2HqEWtds5prJeBhSHBw29xBYzFsnyYkB8hQbFD7vR/ V2mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248480; x=1755853280; 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=jtpYVDYomfw3dnGGdJoGEMa8DBPeyARO/+gaVWAc1BE=; b=uPSWCVJgXNKeyzL79V5IKlt0J5mjT2Bn2bN/DMWM6lkvxj2RmEQiYZXRyb04vRJVBY YK+rN/triIeEO4S6Puf7XJx9gdfEDzfKZGfa7YZDnZV1am21q0Bz24RNs/q0qlr111y6 XCCd6L1UqZFjUoirC45NESCK8Z5fMAoCLTZdo9EWFEOGLlASKvxNQ3ePgcXk/IZP5TIf 8uKjc8JmSC/VoCiC57RxSYiSt2Vdi58d9N2oFCz9m025EXfo/otphSzx5yr469CkdNEw O8wOG9EbAO6sq1hq3ArnuUvrOOAuC8AHkzFnS1bOUxE6dFYZuwWWX8+NTpuOgjOrBs4H 6log== X-Forwarded-Encrypted: i=1; AJvYcCUnJ3HGPaxwoxubWvj3Js68mQuzXWmYzttI6hST+Px9AHB+AmeNCQt5b8tVhQwB2NtIjOCYyYSl+ONt0g==@nongnu.org, AJvYcCVZKr0mjzyo7fexMuJCnuT4etQjEVZFZVTJRiPZCGm2lMS7y4elpegMsQO4ykuz7ICkToQwRdzfCg==@nongnu.org X-Gm-Message-State: AOJu0YyD5Apsf+t5wfdKfTsukaD9xQbFbqvHSjeH6QloKT8mLUu0XILO K7ATZqnSfl7jR3+GdaDrSpphPn98+hGKrbm4iSvRoh2kV9p7LtmptauB7lg3ks87 X-Gm-Gg: ASbGncuuiCKmEELcayw7Hy1h+jw+r2xjkwvQkgP3v9QuGkvMm3fooONCwPOgvMzDEkY hLHH9WecDIiykOsqaNAlJ669x2hYsR0UXfj2HlMoE+b0NcdPniL5yet9qA6Bb40neqHAbmPaAn7 LQyjWf5zfD94TggQ59Qwcmhmj+GcfzrQZ+tahF6aRy+npz+Uy3KpmO3yYDrNUWAHjuJifa/uVnL Rg+54nXowtrFMcOmnNTBKbDOTLSk0m5/tJ7yLkZgvxx6nJzWl46yxu3U6VEIEX71Ppp0bJ/dmTp DeUUnsfy3DySsjOe6Lttrp8EDR3u0AGdZUZD3ae4mNvgzYh2MY8qESmrmQab8M2BdUV15G8EniW 1cI9g9xkv4b+9UU+25MVtSQIv+iGMWJJGcKMtDws6cABN2A== X-Google-Smtp-Source: AGHT+IHg37ZTU1bIQKuC1ZNGfqPiGHwIWIZ7XHk104N7ANxeqdMht2r8FGG6C67rNbvHa1OFJGK8VA== X-Received: by 2002:a05:600c:2e95:b0:45a:236a:23ba with SMTP id 5b1f17b1804b1-45a236a2561mr3901325e9.22.1755248480256; Fri, 15 Aug 2025 02:01:20 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 06/14] hw/dma/zynq-devcfg: Simulate dummy PL reset Date: Fri, 15 Aug 2025 11:01:04 +0200 Message-ID: <20250815090113.141641-7-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32a; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x32a.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: 1755248619522124100 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: Yannick Vo=C3=9Fen 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 60ea351494..c699df6ad4 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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248557; cv=none; d=zohomail.com; s=zohoarc; b=diVJwlYNvFOk5DiY+cCwwYSXhAfKwRxM79it7QYLguzc14x/Po3wB4BdnjpD+2rpuCjMiivACxoIP5T5G7tCcnKGLxWIL/K7ppb/KBhCjA1pDLeK4oZ2GyHbOzKnjuQhisk2cdvY6yIvDkuq4Wbwob+mX7BwJY3C1QPUxOVoDKQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248557; h=Content-Type: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=Zzk9hUnM76xaKXIPgu879Vp6/dyXg/0tOdRlxSSSDw4=; b=OABuwRn0yi7ondSeJjVuUpzQIEZg61gNxIHoAR//8GpfUfZLzLEXTXV9a3Iz5Si94QwO8PwYL91lLY+1zbInZ6K2IHBMyy6mU1tDkZ6owflifswjNCht71/x8hN3pnwEf/AUTqf1FX2l7oEAiqu7XUcO0uWIBmryEYtaAKgW5fA= 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 1755248557348868.0075520126726; Fri, 15 Aug 2025 02:02:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJZ-0003fO-W4; Fri, 15 Aug 2025 05:01: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 1umqJS-0003aL-FX; Fri, 15 Aug 2025 05:01:26 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJP-0005j4-Hq; Fri, 15 Aug 2025 05:01:25 -0400 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-45a1b0bd237so13435385e9.2; Fri, 15 Aug 2025 02:01:22 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248481; x=1755853281; 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=Zzk9hUnM76xaKXIPgu879Vp6/dyXg/0tOdRlxSSSDw4=; b=jurOJnILiSTy957c/Cyd7jILPentw2E8SQmmGUg23zFYy2NVU6MvA/jcRnE4KWqNCC oAuU5skY5VI/026udpAmNFIvcQPeDRphxGI/lJP7sJwhOK/gWDIr44+MCk39AOMO/v8T 2UjlqaAxqssB8X+fuv/WYG7SOvOX/XuCCRKO8EkYp0anbJpE1Ea8945vONONhoKkRokb 8hC7Xf1lZIiO+bBlOlY0lR0EdUVFCH6cOdz/bUcIS0qcsuxKGbrX0uDR9MhMSeg/33ej q8MtF9yupM6tZIrx85FLVv3TgY8oykB0/Icvr4FBH+tjQSHnrm5dsKKt8fe6wHfgykjm WAsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248481; x=1755853281; 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=Zzk9hUnM76xaKXIPgu879Vp6/dyXg/0tOdRlxSSSDw4=; b=CIbGJKdWJyNyMEiEtJ4VAG8/B3PshYaNLF+mdOTZkQV5KHtlcrTH13dAhuXNNAhYOS wv5Q6pBrkjxlbVxHuyZf7E1dmz5mbf/0rM3V5Y9mRkPiPAGuVjmFgs5WA5zBbQAzOunq RxGL8aPtAaUHz/GwIMzWEWCSFaKqGsarzOF9AXcvsLWGSJ6dcP2d5czkcgV3ZxhapIeH JYes2anqYC2ESchaYtAb8oGTzGRJt/s+O5NyrY20+Can+XNzadUHSJ37aUGvhEyaJNKf OWy37UE9rQC6HZFKGuLtEqPXuS/eyc+GQohXV3sjdtIvNRBScjsRekOCVsv4u1Em1BQl TV4A== X-Forwarded-Encrypted: i=1; AJvYcCVCC8y8pu4An7Gt8VSYfHg3dhcYbX6GsKVMK3W0zzD4fAzXbVoAnFpxDUKvjoo4ERYFsdpkRkg3NA==@nongnu.org, AJvYcCXjKtYK1fluAYphYPxa0jCHkyK5i9IfIpL7SJVcHf4JK20xFh86eUIenMY7VwSdldf9FCYqGeUuCTvUgg==@nongnu.org X-Gm-Message-State: AOJu0YzwMs2pUXXTnw10NKFNo2xdhp2+fr6DJiDzJowZJNfkmgLIM4Q1 25as66b9pHGu0R4InjrLML9o6+5WuN7DHvBdh9MWFZKZHuzG1TboV/8PX9NhGrAz X-Gm-Gg: ASbGncuvQN2w8KfLlKmZL/B6onli1x+sqqtxRbWHAYx8I/++4iAgmk3/OqkVne8lWlp 6eI61ahUkqx1mLrBfSBR4D/jQ5RAD9FSG6vrsAuKp0fB8nQZrqiezcyjfPIr43gtBAiWhenQh0n m/e1OQec83vxT5D7NKeOpZHRcI3lLvUHsXaspbrrFvPyJ4DiUNqfp0mrPkW9LW4HoXi2P90zpWW eztRKxIfqowGQ9wNQOHpk/ZpYGVKac6Pllc8G6zUTaYwdhoayFDy4cVg9WTc73WcP3/T3tXNKxJ OjmsMmRlKx9ONeXbHLLPoNnpcQEW9bmKT+PgoMBiddw6d1oC45xzzUwNqidoDRst12Y1ca8L+me XyXxuBGwBG31Cx6KNl/K5tNnVU2RDzWmKwGaF0hiWLAA6dg== X-Google-Smtp-Source: AGHT+IHRFt/eEqzpH62Cv4CEZt0PVbEy0BmhY2zlolVMMqHPmUw4kBGrPbojfLummVuS8xIjtpqL/g== X-Received: by 2002:a05:600c:468e:b0:458:caec:a741 with SMTP id 5b1f17b1804b1-45a21e9f09bmr10715075e9.24.1755248481169; Fri, 15 Aug 2025 02:01:21 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 07/14] hw/dma/zynq-devcfg: Indicate power-up status of PL Date: Fri, 15 Aug 2025 11:01:05 +0200 Message-ID: <20250815090113.141641-8-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x32e.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: 1755248558216116600 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: Yannick Vo=C3=9Fen 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 c699df6ad4..064955a0f8 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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248609; cv=none; d=zohomail.com; s=zohoarc; b=A7xroCpmb2PYtsURosR6+O0ZHeoa7L3vR2SBQiKrZ+gGYamj+b9d4iqF/cJqyicPubq6W5DJ2dOvpJCas8xpOKznhdKVUSb1I3MP4wtGPi3PTawoxID71eWwWvJYRsnfn7ProuM8WAHQVxjGBph3hBJ16TIzM+2fU3sMYCb2DUc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248609; h=Content-Type: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=vawIzwmzl7x6M45nvP0NuxtDTp5R+Phklc/iV4Vde8E=; b=BH79OhWHBKmCYb2uLLZ/mvDx2CPO5mN1cw7ZEfKtPx6Uu6OHqKKyAFleEBDBMfvGF2WqIuxyHdQMCVmpYrpRNdtjMHuz3PP3xQv/tH1MpI8LtELdhTmPrMrc/4n7JbvZaAiL9fRkz2RMOSkxllFaqwayyVMEjXCL50/QEEjM9fA= 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 175524860937314.463179493336497; Fri, 15 Aug 2025 02:03:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJX-0003ev-Bi; Fri, 15 Aug 2025 05:01:31 -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 1umqJU-0003cB-Fj; Fri, 15 Aug 2025 05:01:28 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJQ-0005mF-Jm; Fri, 15 Aug 2025 05:01:27 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-45a23def5f2so566855e9.0; Fri, 15 Aug 2025 02:01:23 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248482; x=1755853282; 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=vawIzwmzl7x6M45nvP0NuxtDTp5R+Phklc/iV4Vde8E=; b=P/iBcTLW/dJlzWC5Y8E2bBPRIGYHgWKU+p5+ROt4VnRomVqVl702/x3KPImexW/07W yEICF9v2/sR0oQE+WJnY95ACyozbc9xbTqSR/vzwGu5gGwYGo/gI7paTjaVtZApQ/ECw 8wm33o3CjrlFz243lUkKGS+8WISqW3lDr6LR73FtgTSb9JSugW+4WoWmFf19GoYTHy7g ZRvCMvsimxKQyxyPLf++Jta3LevvfskfQEgHYWvRTtQOpuDREuCqkifKjTU+6hqVwgM7 Chl0CLyGbmsTDNV0k5H09q9YqceeDRtZl0Rw9CdTJJga2IV1DtrE8Ls1w1GG/ojXtlFh zO0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248482; x=1755853282; 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=vawIzwmzl7x6M45nvP0NuxtDTp5R+Phklc/iV4Vde8E=; b=L96bcnjtf4YNPqW2DaIIYWIfYu+GvkK2WuZuIxk4N1N0kOXRjEKj+rlpHWmGARMjLW XUxHW1VOnvXZlK0v7AdoT1erdRE3tfQ/Q0C4tMG7/wNzEXefgIIQJ0NaC49II0dUFh3L HCDxhMT+3TbHy0Oc0T+RPhnwGn4nrMf3vrPnXIvPjkbHTumtCUzoCpqz4fIRpadVI/zI F3F7otP5HPHVBdJQBuyRNajcTlclpILGiyVtMMMjw/aFZHV742DwVkShllhbWMepNOpV pTNiE4sP/jI3zHS5ppj6VFBPK4ZbzttzTdhFvyHQMozc7mWbPLZH2LdbazxM3RJh8AHD xNBg== X-Forwarded-Encrypted: i=1; AJvYcCVRaA8gfVcZTYAuYV0joLwB+rnvHYLt3LrGmRnNMbed3s7lRKGfRiOv3IDZTmJiPTdV8ZFd5lexcw==@nongnu.org, AJvYcCXdE0/N/08yFuHg1jzslLHF2XdFDd/oYPt7jYBMtqos2SWAlOS8PbLCtQ1osES/ACIvnjbgrrIh2NyNCA==@nongnu.org X-Gm-Message-State: AOJu0YwKU/tSmbmrUQJ40O0yhtTURlzCIJ9rTSkDzxismBXiPk4SxMoz G2b1M3Qs7d2N9+GstMByJvselEuBXPu62eppgpCFJERSDq+5i6PoHcBBE/krYQPH X-Gm-Gg: ASbGncsge5AStXXQmIig1QJezp2vWNjCANWEbxSrfb9AuCpcijJ4yNjM4nq8idQ5Zu1 dVmKdXNeGUvgWR8I1pQy0ZNGtpnnDJ0FwabN4kOPKJTbe0IQLntRAYdsYKo/svzsR/sLGxjODZL lNVzQtGTrdTjKBnUGG8ECAmu/14Gya9KDoZn0uFp0YqtvQU/QYnWJwlKBFqlFPe7PNUu2ikPmv3 bv/QjlOzNsFRoeuDqHzmrZiFWyA6Oj4wO/a01wG+g1HpqWDIu2ryGGK4G/kJ6UtwzcMLiHiZjG2 s+yjKULvLU2tLdIhDKEXtLbS4DSfQ+gcQ9n+SrXNNZBoyYEkD3Efpyw77+nnny0PdeLlaBA3KBf MoSPadgv0kJr9kvpwnCplxPZBMSh29EOXW2lb8XbP20OkLQ== X-Google-Smtp-Source: AGHT+IFZcFh5MwVeSg4UkQ871q2k+C437nLtisLxXZY7NR9xeFIr4DtwqX4JNMgzMnGNp23+l2YAGA== X-Received: by 2002:a05:600c:4e86:b0:459:d6a6:77c with SMTP id 5b1f17b1804b1-45a2186461emr10794045e9.33.1755248482132; Fri, 15 Aug 2025 02:01:22 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV , "Edgar E. Iglesias" Subject: [PATCH v2 08/14] hw/dma/zynq-devcfg: Fix register memory Date: Fri, 15 Aug 2025 11:01:06 +0200 Message-ID: <20250815090113.141641-9-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32c; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x32c.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: 1755248610635116600 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: Yannick Vo=C3=9Fen 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 064955a0f8..83570ccfaa 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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248633; cv=none; d=zohomail.com; s=zohoarc; b=LODrTvdGAWbbpRvOyzZLxb7hiAOgCiZp6kflspEIwPZJs6ELA85QTFBDoNjOcN2gVOaonktSt1Q/PXzbAWaOVw8CLcWeHLFRKaAeHTv5nL+apDL0SvHj5+Wwx3+OEG6jRaZgFJQ1G8rKStc2nQcXm6kpSGNJO4VdrSnhNYvALW4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248633; h=Content-Type: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=2SojebcZanGvDC9GdA4G0rWkP5titIrT0YvHI+rBGq0=; b=bdfY+ocwjciCuPR3EdRGulPlulqlTjrVCzJzxxAmI3c9yyalr5yPEddyrcb2Q6llI64GaCNyU0I/9beYhbKOsZLJSHu7Xkx2oEDYHjMYLiVK/+w0l6ealhd3bK+FubaNDd/fY2OjYZmeAodtX0YkZl0Z+4iwYcBAoHukNbNvy9Y= 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 1755248633310796.8834016936826; Fri, 15 Aug 2025 02:03:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJe-0003hN-Mg; Fri, 15 Aug 2025 05:01:38 -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 1umqJY-0003fP-7k; Fri, 15 Aug 2025 05:01:33 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJS-0005mb-Gs; Fri, 15 Aug 2025 05:01:30 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-3b9edf504e6so891941f8f.3; Fri, 15 Aug 2025 02:01:24 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248483; x=1755853283; 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=2SojebcZanGvDC9GdA4G0rWkP5titIrT0YvHI+rBGq0=; b=IqyCTGodPTPfnOfcyPjy3Bd7kINXPcPst68OZWWpEdiUT1G4IlNbR5FipI8OmWrUaO dp9tnETRuDyxy4Up4a2Ugg6h1uEEGOf6xB6cS22sapyUz9O3fJ/dqegXvQxNp7zEl7LX G7F85QBmjorrCNgqMS1YNQcHj+Z7/+d33N8f2t3kOZ393VvfHKi65zBLNScMpVAJEE3Y irsMvZjxmX5YigesicBg6jOQ9I9tsIvEGu5/gvnIFl3xquNlfzdxr/cSeIpjTkhUgJTX Qikwc07L0RR4v4yo+zPrxkfdjtEVv4G9bXvwfkatQo4KprUNRH9jPM0Z3YAKHqvEt+nV wadA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248483; x=1755853283; 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=2SojebcZanGvDC9GdA4G0rWkP5titIrT0YvHI+rBGq0=; b=kjDX9y4ykGGgP2VV98F7VyZGX3PIMDDkZex7yy/F/AhSmYCgm5RfJH/4XGFk446cif MgnaGFZehQsQ8OSo5jwHElVWawWp3BWHMldr4oLfqB3auT9MwGl2GJT4iVrjg1mCiHe0 bHTu9jZMUV8GkV6c1DXVLpNHOySG3YMOoixgzx4+0mhPzYZgzfQru08uUt+VO31xMaQn M71tN+KeZPZCrDNALconqapV886yLo9TrPLsuz5P96r4zNmQf6cvQoPV9K1ZlWQC1nTG A7Zk0GNucGTzs6EYVmW/aCoy8ReRwRRw0Z8Q46gBLGNxHkQLybBNe1yrCugklFC8wn8/ TFCg== X-Forwarded-Encrypted: i=1; AJvYcCUqyPejLj2Mg8XOz7ZTPWqWOnoTBRU4fHoWw/WiLXSYIDAN7GAJfk6fw4EoFjwpVuwuDwkYVIgrEtK0sA==@nongnu.org, AJvYcCUsaibi34xQWjiBXRmm268K506OvLXo8G+Q4ysEjWWH2PrI1QdohHm0AB+vWN/hGgJ60SfzLknswA==@nongnu.org X-Gm-Message-State: AOJu0Yw1/JT3eE8WKU2jJvf2sLnyQQdTgVqxH/MUsV+1d6L2i91uFQp/ ZDOoh5JrXW3trjd4+Zp+R7B0qYzbPnujcRnXFagpFGtwB4BWPHLjqp+G9UyUsWPt X-Gm-Gg: ASbGncuzZP7CICURJ7172WZReI/gT7N4ijvgTiIK682uPLwVjvDrgeIUuIFgLXueE6n US4azKclTBDEgJW0a/hj2lXVxPEN5IKOLvH14PIBJBhgc4iPETlOPT9lH72t0Sk1z/QFp4TEMNP CZV5vDgSgnsHfBxfKyK6A/Vj59O+X5ILBKgaSi7mM47dY7mkA+/el//FVCQPgrVW6MicD7xtYl1 feonJ638SxT/JRd2AsPBnilo8a9zIAY9yO3S5Y/4RLfw+qzzS/uXgy8ZYUdEWPoH0nVrbRD6uRC UUX1i0616OgZwy/j+j62pM5nqmFiRBrXHrK1E8SVJ6PEBPPc/FuHZpbJR/v0NAxeK38Oy7qFHgM 5yibr+NP+0h0dOehGiUSc966pOzi4SiSHp1H4bTYFpkSKWQ== X-Google-Smtp-Source: AGHT+IElNmhdNs3JXg2lXRKThXXkMAbPXoACNSFCw01TPyJiES2CuFc4C35GdmM/Dty7L4CFiT3M2g== X-Received: by 2002:a05:600c:b8d:b0:458:bd31:2c27 with SMTP id 5b1f17b1804b1-45a21848eb0mr9787855e9.23.1755248483081; Fri, 15 Aug 2025 02:01:23 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 09/14] hw/misc: Add dummy ZYNQ DDR controller Date: Fri, 15 Aug 2025 11:01:07 +0200 Message-ID: <20250815090113.141641-10-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::433; envelope-from=corvin.koehne@gmail.com; helo=mail-wr1-x433.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: 1755248635676124100 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: Yannick Vo=C3=9Fen --- hw/misc/Kconfig | 3 + hw/misc/meson.build | 1 + hw/misc/xlnx-zynq-ddrc.c | 393 +++++++++++++++++++++++++++++++ include/hw/misc/xlnx-zynq-ddrc.h | 140 +++++++++++ 4 files changed, 537 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 8f9ce2f68c..99548e146f 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -220,4 +220,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 55f493521b..6ee7b6c71d 100644 --- a/hw/misc/meson.build +++ b/hw/misc/meson.build @@ -89,6 +89,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..8151a0e3ee --- /dev/null +++ b/hw/misc/xlnx-zynq-ddrc.c @@ -0,0 +1,393 @@ +#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" + +#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 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); +} + +static const TypeInfo ddrctrl_info =3D { + .name =3D TYPE_DDRCTRL, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(DDRCTRLState), + .class_init =3D zynq_ddrctrl_class_init, + .instance_init =3D zynq_ddrctrl_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..7b9b4d551e --- /dev/null +++ b/include/hw/misc/xlnx-zynq-ddrc.h @@ -0,0 +1,140 @@ +#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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248630; cv=none; d=zohomail.com; s=zohoarc; b=n5aKPVFeE8lJnqh46rASKPpYbT1t20w2RhF7p2c5ppaYJaodKDC8AanGgJqXCOIZsG+StrdHnO88114IkN0Ts7liZIpmbTwstobV1MXT0/kr9UuYQUDR7eCX/bRWlX16qehPnM8bJdUtOPCTnmuHemESvq6R9hl0kCPD8Np5DNM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248630; h=Content-Type: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=yhe7E+9JR9f1bfFPfckbLBX3f/KTl4nrBPiyUbHb2SY=; b=HdKP1LhSeDzbGsi1rpGCN3+kOgYErA87f7XZWGMVFlRZfVGEkH5ajOWdheFA3WjxArpC5Ds6damrd+XofPYsi1ctTVNFPUOkhD0I1GaswBBli/KSA+U/4kL/XXaFUA1jY9U54YDU1jRUhDUIkfOmwjTVEaQ2spgeWhwEZMHhK+4= 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 1755248630465734.9053827173814; Fri, 15 Aug 2025 02:03:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJe-0003hW-WA; Fri, 15 Aug 2025 05:01:39 -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 1umqJW-0003eB-Ay; Fri, 15 Aug 2025 05:01:30 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJS-0005od-SD; Fri, 15 Aug 2025 05:01:29 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-45a1b0d224dso9235535e9.3; Fri, 15 Aug 2025 02:01:25 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248484; x=1755853284; 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=yhe7E+9JR9f1bfFPfckbLBX3f/KTl4nrBPiyUbHb2SY=; b=RKMMRaxk8eHQoDrs3PMnoEPk1txkgQJgDbgLLBZFokjUz6EmHj6Xvv0o87V/w9DrWA R9hSuevWEviqA5bdEHPb8JFtx+DzqcxKQsErk3RQszN6QJrwpz48Xzga/ai96RiL0Zwj iN0yueiS0c1IIBCALHBDwO1pksHg8wxJ7pqe9ZWu1h3Diyy7uSTlt5nBuv1eZn+hHLRr I5F8zBtDU/3Ho/mEq+dAYWuheG5En1DDQr++Jo4lhVqUdiaszhwKuxt5KURwOjJsA3Cv yLIVAvoG3RKzb0WpoDpzzpUOnvOfITdb1RVr5UBywB4hbJz9A7zQsDrJj7iPIHmTFPQN 9Ltg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248484; x=1755853284; 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=yhe7E+9JR9f1bfFPfckbLBX3f/KTl4nrBPiyUbHb2SY=; b=S9xdXCZdq+RYGJ7seWX2goSzhA917U27roTCbwCjqzh//VfeRirlD9eizlXtdi1HvN Q3ue4EY3s/Od7+Nrpfk2ABVeR+aWnhd2JXCfYop5ttWeN9+yhjA651XWygp1GmztcXSj nj5REdiEu46Iq5DZkx160NuXouuyobfetFjV9X5xVAWbBuPr56SOXQLs/J0uTevg8SPr 5UxPlffccsoKedJfDQ3bE2aGSrlIYUhWUvFvmXILIiISrl+XR3BZMrqmy4thpP0NcCqy yJ8j2kwDXrA917Ok6Xsk1zMAsNGQXLbiZHa8iyua0Jn8ZsxxqEyIvCLurlp+Mxcpr50P ulMg== X-Forwarded-Encrypted: i=1; AJvYcCWCWC2C5NwvmoErawdNRm91YDHn0lAjaN8wHjHwpykF3OWVU1JLbZl08jQfYnaP1KvCoKPk4tsPXA==@nongnu.org, AJvYcCX4zy75d5XRp0cKiGamtaLEOtizjGQuk3rhen76xjuOoaf5dA66cerZLNzeFvRO2PlNvz1jiBSDvByM9w==@nongnu.org X-Gm-Message-State: AOJu0YxVKhd11pBFBHvolcgdgHIHeufcTXlT4PgF+97kiEEej0WlszeC ilLUpWC3Hr72UUemonDZGne9hl4l2vzPb7uzjOeZdVsC3LTlte/frl6fLR6/z6D8 X-Gm-Gg: ASbGncuyREAlKPrUnIIFXgv2QXmFehq6U/AobNKeEATUJZpPN0r+V6jGaD3XKIvZC5t qYG1f8RZZBo8xHd+sZN2hPjFqsk2MCGpmMJ44c977oFBjrIeQjqzl20YqmaYPizNzEGZfA9Kh9W 0MeWytgI1q9gINoEVSvw1DFgo9PhbVLI67kcM7fu2jURziMMDXgiYJtwVfqKfEevWERhQzBouTf T3//qhGPehvLGAGAXbwlj3J0hpdnwqG3P0S7fYMQe0lZ7fo/nN0xpEo8nz0tikTU+MUBdfjWL5/ O0SJmEJvMw5XiNUE3zMwLiY0O7M2fD8Q06ToKc617Zi1qxUMTKu2M2IJexF4oaWm3R2jEyFOO4G 9alnNDVIiXnwS1umw6xXXxL8utNfIycnOdvchh+S851Obr8JEprDm9vvG X-Google-Smtp-Source: AGHT+IHYHJIXN8xCDOfvrYCE902NP3v/HUZ1K1xMDhLG8nVyI3UyGqRjSzk6mDGFBW/SrpZ4mXc1tg== X-Received: by 2002:a05:600c:1c96:b0:442:c993:6f94 with SMTP id 5b1f17b1804b1-45a217f4228mr13697195e9.12.1755248483974; Fri, 15 Aug 2025 02:01:23 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV , "Edgar E. Iglesias" Subject: [PATCH v2 10/14] hw/misc/zynq_slcr: Add logic for DCI configuration Date: Fri, 15 Aug 2025 11:01:08 +0200 Message-ID: <20250815090113.141641-11-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x32f.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: 1755248631063116600 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: Yannick Vo=C3=9Fen 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 a766bab182..8d15f0cc66 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) &&=20 + 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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248676; cv=none; d=zohomail.com; s=zohoarc; b=QAxJ9e99r8sFZszU5xsb4Ohj2aWL3ll1HaloVJBDPK4VVLxcI/kNh83tz8l12eMo+5gIoFINQ4E7SVXwYyxv/Jq9E4W92OD9GK2mIV9InMuY0k89llCAqlZS7j2rGeLwkcNnZV0XL/wLEic9utHrc/VjttoNAFXOdEu1Sp+8iuM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248676; h=Content-Type: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=ORCK8wDL9qL9Qs1vQVfRjr3y0Ht8jjsxyMkyEMii9Oc=; b=M7G/KIhnTVYcU4ha1aF7dfHJQsLnY7dIBS2Vrg/lmJkDliYByn0CrYETHnWWC70v2CCGLUOvHKwhlGl90bQCBzeJ2bHREdCSWVhn6OkYg+NmCtYrbTpwYrAyg0kh8GIBa/3/ZI3ZKM+NjhMm3ocDBU6bd4f/4Xm5CGGVN4AfqoU= 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 1755248676161799.2013645007034; Fri, 15 Aug 2025 02:04:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJg-0003jG-NQ; Fri, 15 Aug 2025 05:01:41 -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 1umqJa-0003fl-42; Fri, 15 Aug 2025 05:01:34 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJU-0005qJ-Sa; Fri, 15 Aug 2025 05:01:32 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-45a1b00f187so7769325e9.0; Fri, 15 Aug 2025 02:01:26 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248485; x=1755853285; 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=ORCK8wDL9qL9Qs1vQVfRjr3y0Ht8jjsxyMkyEMii9Oc=; b=S4FsiNTt/9hYpKFaGk8GAc1dtJJT/OsbP4KIiD8QBCSpRxxTTzUr9C6gkgeAqmcp6l lw4iLXEpNbDzRfp1XA8inOjW0lDMcvKOICNmdp0qiO2EMv6kBfhV3iPIR5TajV/IKpjz TdHVQEjm/sV0at0R5Oub4yoD13gCU+8E+me6vV7PCp3bUjjvSCAcZfupJVJLg9/WNCRz xyXi/Ddt1Ukj94bZU2F0oZ8Dl/M5tzi0GNVZwa81b16XEH/13TT1VIL6jbWl2zwm3d3h UP993uGI6yKd826d/zTvcUHRlXKrDaw+2SO+Ym0+7WrX2pw/TaLPdNxK3nzIODTeVMUT Bo6A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248485; x=1755853285; 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=ORCK8wDL9qL9Qs1vQVfRjr3y0Ht8jjsxyMkyEMii9Oc=; b=CseLkTavcjTzrH4JWNWN3zMNz6dvHTkst4KPSHWolIatbHv5xR16wSg+gb9ugFCx/l oEZd1gzwqYcS8RTm0CF6pBd9j2/a2LhpUj10mJwQaiwjk5ykx3sI1n9RSxhztly5MAq5 2G67X08EAA1UMa1fu1v3YM7lLSVwucHxA9oVi9sOtw3Pjs89ldBlCJ8NmYlHvH1CGimR 9ytCVULVwmkzbbmaPQQjvbfS3CKTCzynBHSa3Lp9/dj1djR2AC8G/imBrFT0wUAcyoFx VEJNXDvECxUemNtC7wnf8VpSOKATmjAvPwsc549dFbtNBNAzlcf2mfcIPzz7As19FBCe XEDw== X-Forwarded-Encrypted: i=1; AJvYcCUAxz/CE3XCJYO5a8WZLCdf4bfsQlkfUbYI88X6kFIHxdVEHOO71nBFjMxitxe47/tsxBGTGhForA==@nongnu.org, AJvYcCVk4733uUoK3DFjp2EQPVIX1tGeIzcBcXJn8C4eJgwFij4W5E0CL6/kPw2UkemBj9l3s8dX+yAaHAq+8A==@nongnu.org X-Gm-Message-State: AOJu0Yyu+bJr3wD2alKytQ17lvXeVZiXpGzHme44kQrdaIEhBk9oHwCm tbM665sB3aD8tHYtf9xUWTHisnnk1B6HUJLigf5+BLBmRnO4yt78195TKRrsHkyW X-Gm-Gg: ASbGncseuOUlJl8nTB/uytutaQXI3Y3eAzCEJhGD5o5n4lZnaX+hDYcTQM7PQyz3i7t O1atRXjusj6IS3oNIQurnoIuypke2SJlh7QquXEVdcnRoPUY/wr7CeyAG2Vl/IXP5qB5Ru+nRpb aFbqXjIlabcs9xwVnZP3KOB2oSC2QJDVzDqma6u+bCF2honGvguKaQ/J4Lp8byd+UCDXxhnAwUQ dJQ7Bz+hzCR4kZlkl83Ss1c8Vn1MTgCdOODGnASC55Qj56De2yVhID9Q1FAPeAggih5dSlwQtBx Mrttbti2AKNNBw1UF3dnviepv8TmXndJ3dpyogQwQLMFO7HYfhEb3JFThHowV9ExpoFp40029fu gIyaQevssYKSu+ZghtAG3aLaQN/WJpnm5Jz3ysREHF61UGQ== X-Google-Smtp-Source: AGHT+IFtiV5Lg6am4L3eP2/evLc4rmW0TjOLM/dkmnUMkWAYPoGHifKpiBWSduoCRE4pyN79tj/hfQ== X-Received: by 2002:a05:600c:3510:b0:456:12ad:ec30 with SMTP id 5b1f17b1804b1-45a217f5367mr12790155e9.13.1755248484978; Fri, 15 Aug 2025 02:01:24 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 11/14] hw/misc: Add Beckhoff CCAT device Date: Fri, 15 Aug 2025 11:01:09 +0200 Message-ID: <20250815090113.141641-12-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32f; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x32f.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: 1755248678236124101 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: Yannick Vo=C3=9Fen --- hw/misc/Kconfig | 3 + hw/misc/beckhoff_ccat.c | 365 ++++++++++++++++++++++++++++++++++++++++ hw/misc/meson.build | 1 + 3 files changed, 369 insertions(+) create mode 100644 hw/misc/beckhoff_ccat.c diff --git a/hw/misc/Kconfig b/hw/misc/Kconfig index 99548e146f..f3a2efa350 100644 --- a/hw/misc/Kconfig +++ b/hw/misc/Kconfig @@ -223,4 +223,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..0e21962a98 --- /dev/null +++ b/hw/misc/beckhoff_ccat.c @@ -0,0 +1,365 @@ +/* + * Beckhoff Communication Controller Emulation + * + * Copyright (c) Beckhoff Automation GmbH. & Co. KG + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WIT= HOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#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" + +#ifndef CCAT_ERR_DEBUG +#define CCAT_ERR_DEBUG 0 +#endif + +#define DB_PRINT_L(level, ...) do { \ + if (CCAT_ERR_DEBUG > (level)) { \ + fprintf(stderr, ": %s: ", __func__); \ + fprintf(stderr, ## __VA_ARGS__); \ + } \ +} while (0) + +#define DB_PRINT(...) DB_PRINT_L(0, ## __VA_ARGS__) + +#define TYPE_BECKHOFF_CCAT "beckhoff-ccat" +#define BECKHOFF_CCAT(obj) \ + OBJECT_CHECK(BeckhoffCcat, (obj), TYPE_BECKHOFF_CCAT) + +#define MAX_NUM_SLOTS 32 + +#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; + int64_t eeprom_size; +} BeckhoffCcat; + +typedef struct __attribute__((packed)) CcatFunctionBlock { + uint16_t type; + uint16_t revision; + uint32_t parameter; + uint32_t address_offset; + uint32_t size; +} CcatFunctionBlock; + +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; + uint64_t val =3D 0; + memcpy(&val, &s->mem[addr], size); + return val; +} + +static void beckhoff_ccat_eeprom_write(void *opaque, hwaddr addr, uint64_t= val, + unsigned size) +{ + BeckhoffCcat *s =3D opaque; + uint64_t eeprom_adr; + switch (addr) { + case EEPROM_CMD_OFFSET: + eeprom_adr =3D *(uint32_t *)&s->mem[EEPROM_ADR_OFFSET]; + eeprom_adr =3D (eeprom_adr * 2) % s->eeprom_size; + if (val & EEPROM_CMD_READ_MASK) { + uint64_t buf =3D 0; + uint32_t bytes_to_read =3D 8; + if (eeprom_adr > s->eeprom_size - 8) { + bytes_to_read =3D s->eeprom_size - eeprom_adr; + } + memcpy(&buf, s->eeprom_storage + eeprom_adr, bytes_to_read); + *(uint64_t *)&s->mem[EEPROM_DATA_OFFSET] =3D buf; + + } else if (val & EEPROM_CMD_WRITE_MASK) { + uint32_t buf =3D *(uint32_t *)&s->mem[EEPROM_DATA_OFFSET]; + memcpy(s->eeprom_storage + eeprom_adr, &buf, 2); + sync_eeprom(s); + } + break; + default: + memcpy(&s->mem[addr], &val, size); + } +} + +static uint64_t beckhoff_ccat_dma_read(void *opaque, hwaddr addr, unsigned= size) +{ + BeckhoffCcat *s =3D opaque; + uint64_t val =3D 0; + + switch (addr) { + case DMA_TRANSFER_OFFSET: + if (s->mem[DMA_TRANSFER_OFFSET] & 0x1) { + DB_PRINT("DMA transfer finished\n"); + s->mem[DMA_TRANSFER_OFFSET] =3D 0; + } + break; + } + memcpy(&val, &s->mem[addr], size); + return val; +} + +static void beckhoff_ccat_dma_write(void *opaque, hwaddr addr, uint64_t va= l, + unsigned size) +{ + BeckhoffCcat *s =3D opaque; + switch (addr) { + case DMA_TRANSFER_OFFSET: + uint8_t len =3D s->mem[DMA_TRANSFER_LENGTH_OFFSET]; + uint8_t *mem_buf =3D &s->mem[DMA_BUFFER_OFFSET]; + + if (s->mem[DMA_DIRECTION_OFFSET] & DMA_DIRECTION_MASK) { + dma_addr_t dmaAddr =3D *(uint32_t *)&s->mem[DMA_HOST_ADR_OFFSE= T]; + dma_memory_read(&address_space_memory, dmaAddr, + mem_buf, len * 8, MEMTXATTRS_UNSPECIFIED); + } else { + dma_addr_t dmaAddr =3D *(uint32_t *)&s->mem[DMA_HOST_ADR_OFFSE= T]; + dma_memory_write(&address_space_memory, dmaAddr + 8, + mem_buf, len * 8, MEMTXATTRS_UNSPECIFIED); + } + break; + } + memcpy(&s->mem[addr], &val, size); +} +static uint64_t beckhoff_ccat_read(void *opaque, hwaddr addr, unsigned siz= e) +{ + DB_PRINT("CCAT_READ addr=3D0x%lx size=3D%u\n", addr, size); + + BeckhoffCcat *s =3D opaque; + uint64_t val =3D 0; + + if (addr > CCAT_MEM_SIZE - size) { + error_report("Overflow. Address or size is too large.\n"); + exit(1); + } + + 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 { + memcpy(&val, &s->mem[addr], size); + } + + return val; +} + +static void beckhoff_ccat_write(void *opaque, hwaddr addr, uint64_t val, + unsigned size) +{ + DB_PRINT("CCAT_WRITE addr=3D0x%lx size=3D%u val=3D0x%lx\n", addr, size= , val); + + BeckhoffCcat *s =3D opaque; + + if (addr > CCAT_MEM_SIZE - size) { + error_report("Overflow. Address or size is too large.\n"); + exit(1); + } + + 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 { + memcpy(&s->mem[addr], &val, size); + } +} + +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); + + CcatFunctionBlock function_blocks[MAX_NUM_SLOTS] =3D {0}; + + CcatFunctionBlock info_block =3D { + .type =3D CCAT_FUN_TYPE_ENTRY, + .revision =3D 0x0001, + .parameter =3D CCAT_INFO_BLOCK_PARAMS, + .address_offset =3D CCAT_ID_1, + .size =3D CCAT_ID_2 + }; + CcatFunctionBlock eeprom_block =3D { + .type =3D CCAT_FUN_TYPE_EEPROM, + .revision =3D 0x0001, + .parameter =3D 0, + .address_offset =3D CCAT_EEPROM_OFFSET, + .size =3D CCAT_EEPROM_SIZE + }; + CcatFunctionBlock dma_block =3D { + .type =3D CCAT_FUN_TYPE_DMA, + .revision =3D 0x0000, + .parameter =3D 0, + .address_offset =3D CCAT_DMA_OFFSET, + .size =3D CCAT_DMA_SIZE + }; + + /* + * The EEPROM interface is usually at function slot 11. + * The DMA controller is usually at function slot 15. + */ + function_blocks[0] =3D info_block; + function_blocks[11] =3D eeprom_block; + function_blocks[15] =3D dma_block; + + memcpy(&s->mem[0], function_blocks, sizeof(function_blocks)); +} + +static void beckhoff_ccat_realize(DeviceState *dev, Error **errp) +{ + BeckhoffCcat *s =3D BECKHOFF_CCAT(dev); + BlockBackend *blk; + + blk =3D blk_by_name("ccat-eeprom"); + + if (blk) { + uint64_t blk_size =3D blk_getlength(blk); + if (!is_power_of_2(blk_size)) { + error_report("Blockend size is not a power of two."); + } + + if (blk_size < 512) { + error_report("Blockend size is too small. Using backup."); + 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); + } else { + DB_PRINT("EEPROM block backend found\n"); + 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)) { + exit(1); + } + } + } 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); + } + + beckhoff_ccat_reset(dev); +} + +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 void beckhoff_ccat_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + dc->realize =3D beckhoff_ccat_realize; +} + +static const TypeInfo beckhoff_ccat_info =3D { + .name =3D TYPE_BECKHOFF_CCAT, + .parent =3D TYPE_SYS_BUS_DEVICE, + .instance_size =3D sizeof(BeckhoffCcat), + .class_init =3D beckhoff_ccat_class_init, + .instance_init =3D beckhoff_ccat_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 6ee7b6c71d..1fc1468464 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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248581; cv=none; d=zohomail.com; s=zohoarc; b=AqvwUVxbbfbKsSeNXtZ72KPdN5rpO3bXLuKqeEPxsB7r/CTM5+QUJC5pSuAG91mYc3eBQ0+rtsLp+cxAJRTpZLXuTuJLt+rWfR2+5wfBRy6Jt6zSaJFoSXPo1nF56ZxGXuyZuzfXH7uffUGc+D3nCNh8syys3N95SaO43oi+1J4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248581; h=Content-Type: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=fA3ZKHNVPuqOj4lzHOhYgKjjrfguGgf30UjQHR6LMd0=; b=gEI6YVrSej+sHkkKkUKN6Bc5p4kI3T1PFF1G7+IgDf+LefenYhB3vWYUgProoiuM7DFIU0GgJ5wMwwwRgpX7R15t1GttAr5a8z7acfUFnAvnkoGawxXPxO2JbUt/tQ8d3DtIIXvjJbBadqjW32ollpC+KGAIg3N+5WMrzWXnPAA= 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 1755248581741348.00236211208244; Fri, 15 Aug 2025 02:03:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJi-0003jf-37; Fri, 15 Aug 2025 05:01:42 -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 1umqJY-0003fQ-8R; Fri, 15 Aug 2025 05:01:33 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJU-0005sH-Ta; Fri, 15 Aug 2025 05:01:31 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-45a1b05d252so11571845e9.1; Fri, 15 Aug 2025 02:01:27 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248486; x=1755853286; 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=fA3ZKHNVPuqOj4lzHOhYgKjjrfguGgf30UjQHR6LMd0=; b=lgb7WZxqG8xxlplsC8IlvBlL9S2L1Ff5jt42uXAGoXya2PxcgA74WU6XxHdCQMYXah OkKYpgPHNw1s56vibBalVVdx7ou5F/8k7tWlJalC6bdZHtjJ/MLjTgpgP6H+9aCd6arc E5r73fsY2dgrLzvRtcvUDpbhAVBVuvtcGTtxA5d9Va7QK8nuVh0u7GF3XR4ELKvtE/WE 0XUardhCh5co4RRUIhqnIvw+LLiP4D9f+E1MFkNt7fJoBj/ls1hNdk6hEfvmRd7nAnM7 xBf7CI9rzIpKhdqfUXz/w3v+HOZ4raschlUXaNJzHaHYBuU3KgbbNBBz+tjuoAZzfsXt K43w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248486; x=1755853286; 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=fA3ZKHNVPuqOj4lzHOhYgKjjrfguGgf30UjQHR6LMd0=; b=s8hXdaHOo51o/xw/JsQsCZwQb6LygSHbX29mE0yNurBRkKB1g1JccDOfTZCWr59vLa hwjMHsG+egCKK0da7zdzgtWinW7o/qG9qvf/m9+EJHlnCY1XCYD4cVZi3zgpDWiDZfz4 D6SyO2+A+PN63m/VHYe8f6vEBTfYjvMW/0ubehc7fHBncruHxxXoaFjgqA9tW4REJYPP LLmmfr2t1Hs/4a3L+CY23o3OUe909+lf5Fp6uSEDfhrPAoIqr47tMypQXSCCYyBC8/+0 DMYRWudUsl829i3HklOAURq4+XrqOCRO8GdZAKpVh/amo0fcizos9+FUJLDXnKI8/nrr DHgw== X-Forwarded-Encrypted: i=1; AJvYcCUSb0BA/ruKhMcVa4SjdOm5siavg8W5s3tedTuaH1NXEJUlsq6ZoMwdC4DhOHxWoF1ijmzcLqbMag==@nongnu.org, AJvYcCX6NS+a9T8QpF4pY4967SB6/tCyDZqeL29i/OyGZnrsekIlcZlbmz2T5dyDGGNblndgCIK2FM6zRv/6SQ==@nongnu.org X-Gm-Message-State: AOJu0Yzsis+FbwPJpeTElyXiWILXwZ7YV1LJ0ZK3Dz/WUlcx199JP8+M TvZsQdHtyJJxYUqnmvvviYcytmFlkszxrnzgN9q4W2opbOexopSxaeyIzqKHoLfL X-Gm-Gg: ASbGncse6WVnabNJJ1yhJCkzzHUG+eGCeQnGOCI4+5uTUwJDxiHHMblYA1FqmmAu8Vc 9gqDGp0jMuZrYbJljXKcEL93s0FTx4KlIZRVxjkMv1ILuxJ8QJyKkFJg2cSJhEu3D24Qfc42Mh0 wkB6izFvQ2aBGxEZTTvLTTQtMA1JiF+DMg0QmsJa2izYW9pBsw2rBDot+KlzINixyZDZEZJaL16 8WJY8Ann8VV0uJtRdUhHGqyLHK6URnhQCABo5Dkb2x/tSxnnmHQjGW6tiqsp2l6DKhQl6f2hsy5 CUeoRlCthOqAB2EP8QYtW+WttOryhY8AjkC4JtnxVyf7i7M7MsXh8cCNbxz/MPQsl6+oR0EQukX kQWo53Kgee40WDt+5HPmo6z/YUB8u9i6fpzP9HCq0G6yUzw== X-Google-Smtp-Source: AGHT+IG0rfA9kCf8rmKcn7IU+1ebJmJbfuM+aTKEwcyQgBTWEggBMVkdntOxaIAVYxdHR23p96IN8A== X-Received: by 2002:a05:600c:1c20:b0:456:1c4a:82b2 with SMTP id 5b1f17b1804b1-45a21803dcemr15371895e9.10.1755248485848; Fri, 15 Aug 2025 02:01:25 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 12/14] hw/block/m25p80: Add HAS_SR_TB flag for is25lp016d Date: Fri, 15 Aug 2025 11:01:10 +0200 Message-ID: <20250815090113.141641-13-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::336; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x336.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: 1755248582379116600 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: Yannick Vo=C3=9Fen --- 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 b84c6afb32..4c9d79ec44 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.50.1 From nobody Sat Nov 15 05:35:29 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=1755248570; cv=none; d=zohomail.com; s=zohoarc; b=SFKcflbyT0+hS16A16iK1SRFElUMyIH9srylbpYOb9YRid6vTs9BiDP06+G92w6wYT5POYDlnP4mMMoSXOtrnT6PntOMNYbMzT6KMXqCbH+QSTTjzUb448U8pYc7WNOckHhQakukPOP+xVoOoED7bSEjbYmqhxyxXOQEqvr6Kbw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248570; h=Content-Type: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=7uOuh5aN8Jt3vBlML2PEi7laaKfvz8cmH+wbiLqehdY=; b=RWqR8PaHNRCF4JAu0M/UeLqvXe0t+RNM1DBpOmcuQpj5/Gvq+M9MreuLKx2RrSOmfqjl0HDTBap36J8TWKaTUKigX6x4r2KCv+rvRGPikvxoVTN00yuX91CYGZxnfzlCgDA8mQeNK2fe0JnkYK6zp/z5/uTGZvn+9LIfu5oUjXc= 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 1755248570540724.9176322678837; Fri, 15 Aug 2025 02:02:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJk-0003ks-D7; Fri, 15 Aug 2025 05:01:44 -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 1umqJc-0003gh-6d; Fri, 15 Aug 2025 05:01:36 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJW-0005t1-ON; Fri, 15 Aug 2025 05:01:34 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-45a1b0c52f3so8951795e9.3; Fri, 15 Aug 2025 02:01:28 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248487; x=1755853287; 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=7uOuh5aN8Jt3vBlML2PEi7laaKfvz8cmH+wbiLqehdY=; b=hsgQBMPUd3GBGHkQl3uVhXpCaJVPUbGAR3ixM0J6HM00u3WGvMSsjGI1c+9hKIyKlz Awe7TNCfc0yMPdncLLFp/FNNAkew15Rcu/Eavjcy4z8mQtH9PpmwgkFJiYQEuHCbf93t WEA3gEiMA5hJZSAf3FhN8kObYqV0LXff+Y3wuoEIgPvwURuO23zkn9A2Sb6KffaFrShn yzFuwQ7PVXeKyr3pcWErSolWuHiHlNCxDU3FQwFDYL9ZSz1ZYiAkALB/Esp1tHcc+IiY frc/IEjme2NucwddES3ZtaLpeTVnh0Y3AqJRrmSdq81mBBZbou+xErqRNzOWsHaObCrT +iNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248487; x=1755853287; 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=7uOuh5aN8Jt3vBlML2PEi7laaKfvz8cmH+wbiLqehdY=; b=i0XKuws6eVG4mAD0x1IS0HWti17CMk7YcagLsYGh928dyw7x0aK6LRos26l+KhvQiB vyoTC88MNx3aMISK2+rRbh3nttayyCYJotZ3rN5bYcHxlPcSsfEneld1ECbXg58KNSdG zYslShj6xnRkCUCx0ENzm+yBD7AvWIldiSJFeYuKlDrdC/+pFHSyiGY4L2HqTdPVLPUU 9KHiR9VdmBpn9UmwqGT+QSNo9VFF5q/Os2TyPwF7IuFQNXnNvKRn9krGwRflKX55jqNJ vjxhnuvYSBIieCmog/ciu7brWBDf4e16AFpdqqXaGvNrLj/wu/R+2bjbczDrRUp4N2pd rr2A== X-Forwarded-Encrypted: i=1; AJvYcCUHijXQFfhe8QEVyEECTi1P7z0q0/8eehpwsGvLYPo9l+5Errm7GCjDEsoqOXlkI2TwEkG43o+ol0MJtQ==@nongnu.org, AJvYcCUXXNBq5LLc9WIV7ANN0XrLJ+0VuELbw2sTJk38ycj9BD7Z9hOevyLWgXcN5epm9+UvlHiqxhFFWg==@nongnu.org X-Gm-Message-State: AOJu0Yynf1rVYmAh4AE6zGJoQBVQCnp0t2PfQnBuy1kkuThowUx7B+zq gI+uGYkApC3frMwyYC3d/j8U2iYyU2sj+xV3K2+ceobcAdi3PiY6Ay9cj3KmS4vV X-Gm-Gg: ASbGncuuW3Ey+Yerlwdv5ctd2LBIOSkDt2zYc8DmemgGSVaDfK9mc+p8+jjiviset0c yz6m7dp9v/vEAAL9BX8D535S1Q9+eRLtiYs8T55MVtmlPRYO74PIFlbTct0C2fgWDkLrvIudoIN M/qwKV5M8JZl2NbHJp7DtFqOyIMA2TC5DnfYEFqhe9ddkynHlXtiO67sCUJtJdoE6Yp5KjO1ayS NAMqLTApxLe+70QfufJ0tLEOSccTMv5uXRJACBtoR7xhNG8INtkbWJBt+sg60YiB9kAW69kXCIu Z8mNdWeehyQTYVzvvWcayqEYFXY7qE6SigL85gZRfNO1bUXRg7UGaWT2taX8rhL5DSQmKcCKgHW L9jg3e4dRkWxmWxzvi1CQZwcpMl7myTH/snxWQBdQ5lN2iA== X-Google-Smtp-Source: AGHT+IGvPlGy9xA8GPsfxz+HPJ5Jx0EjOZtr21WXBxBru5eTOZru8Jf8T/Wb0Sk88Lx5LoBq4tcajw== X-Received: by 2002:a05:600c:c8a:b0:450:d37d:7c with SMTP id 5b1f17b1804b1-45a2181d555mr11630835e9.21.1755248486724; Fri, 15 Aug 2025 02:01:26 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 13/14] hw/arm: Add new machine based on xilinx-zynq-a9 for Beckhoff CX7200 Date: Fri, 15 Aug 2025 11:01:11 +0200 Message-ID: <20250815090113.141641-14-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::330; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x330.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: 1755248572500116600 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: Yannick Vo=C3=9Fen --- hw/arm/Kconfig | 18 ++ hw/arm/beckhoff_CX7200.c | 440 +++++++++++++++++++++++++++++++++++++++ hw/arm/meson.build | 1 + 3 files changed, 459 insertions(+) create mode 100644 hw/arm/beckhoff_CX7200.c diff --git a/hw/arm/Kconfig b/hw/arm/Kconfig index 256013ca80..66af990da9 100644 --- a/hw/arm/Kconfig +++ b/hw/arm/Kconfig @@ -310,6 +310,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..ba863e0100 --- /dev/null +++ b/hw/arm/beckhoff_CX7200.c @@ -0,0 +1,440 @@ +/* + * Modified Xilinx Zynq Baseboard System emulation for Beckhoff CX7200. + * + * 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. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the F= ree + * Software Foundation; either version 2 of the License, or (at your optio= n) + * any later version. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, see . + */ + +#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" + +#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_PERIOD 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) +{ + DeviceState *dev; + SysBusDevice *busdev; + + dev =3D qdev_new("beckhoff-ccat"); + 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.cpu_clk_freq_hz =3D PS7_CPU_CLK_FREQUENCY; + a9mp_priv_state->gtimer.periphclk_period =3D PERIPHCLK_PERIOD; + a9mp_priv_state->mptimer.clk_freq_hz =3D PS7_CPU_CLK_FREQUENCY; + a9mp_priv_state->mptimer.periphclk_period =3D PERIPHCLK_PERIOD; + a9mp_priv_state->wdt.clk_freq_hz =3D PS7_CPU_CLK_FREQUENCY; + a9mp_priv_state->wdt.periphclk_period =3D PERIPHCLK_PERIOD; + 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]); + + ccat_init(0x40000000); + + 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 490234b3b8..b774b066dd 100644 --- a/hw/arm/meson.build +++ b/hw/arm/meson.build @@ -17,6 +17,7 @@ arm_ss.add(when: 'CONFIG_SBSA_REF', if_true: files('sbsa-= ref.c')) arm_ss.add(when: 'CONFIG_STELLARIS', if_true: files('stellaris.c')) arm_ss.add(when: 'CONFIG_STM32VLDISCOVERY', if_true: files('stm32vldiscove= ry.c')) arm_ss.add(when: 'CONFIG_ZYNQ', if_true: files('xilinx_zynq.c')) +arm_ss.add(when: 'CONFIG_BECKHOFF_CX7200', if_true: files('beckhoff_CX7200= .c')) arm_ss.add(when: 'CONFIG_SABRELITE', if_true: files('sabrelite.c')) =20 arm_ss.add(when: 'CONFIG_ARM_V7M', if_true: files('armv7m.c')) --=20 2.50.1 From nobody Sat Nov 15 05:35:29 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=1755248619; cv=none; d=zohomail.com; s=zohoarc; b=HB97qhLatdILGT9YQD0LxzNev7SQPW/vVdsl5sj6n8I7jlwwJ2mW7/jgD3wwTgJLpAHxmJQU0aHzwmD8C8n2YfDpliaNyE1ZgMD+X5w/m+irtDyNh/6Kkr7+L+fGP+/ZyzvK6gGhVwSm82hmAarr2kF01+pi0oV1u9RPheLbxJo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1755248619; h=Content-Type: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=j7zFtEhof/fPqe84pHFWwYVCgkcZBxKurmwcEoc0vuc=; b=m85V1LjPPzT43aCHiXSW4kkXPMjdy4gfMiB82PR4tuJvHZVYDIAvzYxjZIBlIps7Uet1WCT00Wlgx3nxU8dcPIyeEhG/IU697M0c7HV7Qoe9csaWtkVlKN9gInhX+tFLzEDyXqVIcvEvPnPPIQZAEj9drWNwfRBnCnNrw51if7I= 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 1755248619069253.21221954786142; Fri, 15 Aug 2025 02:03:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1umqJe-0003hO-UN; Fri, 15 Aug 2025 05:01:38 -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 1umqJa-0003fj-3q; Fri, 15 Aug 2025 05:01:34 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1umqJW-0005tH-OU; Fri, 15 Aug 2025 05:01:33 -0400 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-45a1b00f23eso9588175e9.0; Fri, 15 Aug 2025 02:01:28 -0700 (PDT) Received: from corvink-nb.beckhoff.com ([2001:9e8:dc31:6500:43b3:5eac:8d91:b512]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a22321a54sm10964045e9.18.2025.08.15.02.01.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Aug 2025 02:01:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755248488; x=1755853288; 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=j7zFtEhof/fPqe84pHFWwYVCgkcZBxKurmwcEoc0vuc=; b=bx47Qn/bdlt6aRmpxew4RT9bNxjl0K2rbwCNk5qR40jexgStdKBXFjd3AGiCme50kb 8XwebJh0nqWNpHXp1G8ZcknC3xRZteM+a82Pkmoh4iXNyfGU2SsFQQ8pFDD9nKWfkxhg IJeKF1By17ivNz4zQZZzXcygOnCnBT3weFE/EcZn4Hj4/bKowwzKYP7eqt5jv62TVnl9 U+TJgX6/4oXsp5z7+R6Zhm6q5yiTB39RhW1DcDKf71UdoxZhOEg9LYRW4v18KTZdb1Kq Ht2O0IznnaWXMFJWwnLhGBPY3WfFIrawBw2K/RQ/P9Wf7brg1FZ+j47UqwezcLjvdgkq X/Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755248488; x=1755853288; 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=j7zFtEhof/fPqe84pHFWwYVCgkcZBxKurmwcEoc0vuc=; b=lzgANx+DsDFDGwFYBAcWEVTMHsw8LoDHjU8QW25NamkOby3PvQYHlhADLfwmhfssBV MfGtTQnlFlSWRqJD48byQckXa6fRWv6l5pVvdD5jqUQ1koE4deZxCCIOYz879IngcOWp CW1/rR/JKF1De9aS/Qvj4dZEw9XGHb4b7AklXqYu89dlwTi6STHHlomDV9E1kbAa/hZf oMKmufl0Q0+cWNfWvJUzVOrT9A6itrFBRSmz0tSgn3mBuRT2qfAcMqwhVfqD9hR3lAFc twwrGenmqn+26monlD8kZFSXi8mlLO5HNzZkugZClg292p2USgQRPKUDUfxzGJuYMT5I Wq8Q== X-Forwarded-Encrypted: i=1; AJvYcCURVJHUIVerVNGCv+uqnFL53oONDUJ6D4RQxBDTAPKOVLz+tt4hmf9EWmV7mZQ4gYHw8vyXZa/JDA==@nongnu.org, AJvYcCXGVhM4Ja92+zqO14r+bRVIe1Ro23H0gINhYTG3ssq1c4Cum0EuUltANURyGS/Kz/KZM9FJ9QvO6y0w9Q==@nongnu.org X-Gm-Message-State: AOJu0YzAYUjcQxF0TMv738AB3TlW7pC4o55ExJYXGvgIJQNlOihWjovB zGcJQN6c4uZGH+kQ1VP2RJ2PJ05j5gV5GHUNmp9zYa6Oi2xQ7PEALIWb3OeC4fKC X-Gm-Gg: ASbGncskx3EjAllWJVpFlhsUFG4FnnxzOWV7HL7NViMUbdL61TG5FK3a+csGUldb7Hy pFtjFf8tmrX+M0fdQm52Z/zTsyjqbP+so3rbGuyNpeHoRou8AJXXtaGfwXLuxvtj83YjlgnHFxJ XTuLHxX7vcUb3u604619CfUmIkEGvQPjNUXyYlKxKgLvV3lbmZ2bpMIJcfJ2udxbvBqWAEXJ1ZN NhmCT8RjArRLAVfAPThbe75l4rocUXtuXwIbeeonga1pHHb7ooDmjiH4QyLVi2gkrpY3FvbRZJh 2gv3vhDgsAEHPwv6/9lXlevADFK2gQZGaDjw6uXzO5pJsRnudt5nfZKd3eC4+udSL+nik1oEM8c b/ThbXFlxj9YkP7khz93Y2/A5UMTJCgvcLzFA1YHbDbomOQ== X-Google-Smtp-Source: AGHT+IE4Jgcuark9gRpiwE8pT6VOcNRt7Y/o8+QXDU9hksn3F3doUvts2+wZltjSu3Bf3CPeeeEm6g== X-Received: by 2002:a05:600c:354b:b0:456:eb9:5236 with SMTP id 5b1f17b1804b1-45a21808b2bmr13975715e9.15.1755248487602; Fri, 15 Aug 2025 02:01:27 -0700 (PDT) From: =?UTF-8?q?Corvin=20K=C3=B6hne?= To: qemu-devel@nongnu.org Cc: Peter Maydell , =?UTF-8?q?Corvin=20K=C3=B6hne?= , qemu-arm@nongnu.org, Kevin Wolf , Paolo Bonzini , "Edgar E. Iglesias" , Alistair Francis , =?UTF-8?q?Yannick=20Vo=C3=9Fen?= , Hanna Reitz , qemu-block@nongnu.org, YannickV Subject: [PATCH v2 14/14] docs/system/arm: Add support for Beckhoff CX7200 Date: Fri, 15 Aug 2025 11:01:12 +0200 Message-ID: <20250815090113.141641-15-corvin.koehne@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250815090113.141641-1-corvin.koehne@gmail.com> References: <20250815090113.141641-1-corvin.koehne@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::32e; envelope-from=corvin.koehne@gmail.com; helo=mail-wm1-x32e.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: 1755248620791116600 From: YannickV This commit offers some documentation on the Beckhoff CX7200 qemu emulation. Signed-off-by: Yannick Vo=C3=9Fen --- 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 9aaa9c414c..db7707725d 100644 --- a/docs/system/target-arm.rst +++ b/docs/system/target-arm.rst @@ -106,6 +106,7 @@ Board-specific documentation arm/xlnx-versal-virt arm/xlnx-zynq arm/xlnx-zcu102 + arm/beckhoff-cx7200 =20 Emulated CPU architecture support =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 --=20 2.50.1