From patchwork Thu Feb 13 12:22:16 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Patchwork-Id: 864818 Delivered-To: patch@linaro.org Received: by 2002:a5d:47a6:0:b0:38f:210b:807b with SMTP id 6csp394893wrb; Thu, 13 Feb 2025 04:23:48 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCU3r2ULpcGK4G0wv8uyXqj2imj8LkStLrKCpMFLrNbYlUhN4RtYvCNEtjWOq2JPvSwbvWcpBA==@linaro.org X-Google-Smtp-Source: AGHT+IHNPOWeo/Yq8AQaA/ine6CckoPvhyLIKpR2tuHctimWz2Oy84H2JHqymaw2R723rg+bepB2 X-Received: by 2002:a05:620a:390f:b0:7c0:56ba:559 with SMTP id af79cd13be357-7c06fce2e60mr1203687485a.47.1739449428646; Thu, 13 Feb 2025 04:23:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1739449428; cv=none; d=google.com; s=arc-20240605; b=aIOd52oeaK+ree+iPa316pRkqvlP6xkp4IUWg9MtDvlZHoOEAY2RhNDvWBzbRY7u3U /BwFZjnBh3e1iSHl6Bkp18W6OzeAc60R2wSUzRu1pmZXdNG0O+BFCkuT4t+oa6PPPJaM 74NJXYiyHfUdcLl4G3tsIIFTsAySUItS4yQD9IEvmZA+W1t+QgpjbogViOr4Z/WoI8le TWZcB55BZQbU4No5nNd3Nuvw0twcEc4EpWuJv6rS87/JdYt2g17KRo/c/VJ95QquKk8R CCr3dFSfqbJdrYhmUot24X74YtdlrefO9rbdhrdn+5U2pF7CI/UHHg9XWn/MfQSKdVkA xJGw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=q9MrYcI98DZnIhdDN9JLb40jpmFmxWLeEaWhZtHGUKQ=; fh=7G23nAa7ccyiTxKVJ+ZzEMcKfCbp3J9CFWyGkTQOXRo=; b=YrxHPcmGwoiF61j3pDh1ZXjNZfLw9icI5r4bT55CT1nSmmwILlgWxc96WmP2/l64Qs cWSyT4/J7SBdvOc+xNkQPLFON7KMdjtjzfDbQsPvCPYb8iGX0HoeH5rZzpF+Vo0XV+2m vF0IIXcCpk4mh2U+dv4oxSh/bhYxp+7Iwi2FSKPJWf4PJXTMNBXpF8trkUDpmJJFLOBR weXB5E4XXnb5K7p3qBCUfxHM2dl8LTHaDZZAO4yNYqB/Mtf+Vku8WCFQq/2c9AZkRdvW jZ/r8loxxk9d+b+JyOwc0Mjq2hfvH0mixlL5QQXUQl2FThj1DRIYdtzpw56QQ2w9C1eS cXMA==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TYAyAHp2; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id af79cd13be357-7c07c8bab74si115441085a.524.2025.02.13.04.23.48 for (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Thu, 13 Feb 2025 04:23:48 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=TYAyAHp2; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org; dara=neutral header.i=@linaro.org Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tiYF9-0002BZ-P9; Thu, 13 Feb 2025 07:22:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tiYF8-0002At-VY for qemu-devel@nongnu.org; Thu, 13 Feb 2025 07:22:58 -0500 Received: from mail-ed1-x532.google.com ([2a00:1450:4864:20::532]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1tiYF6-0002ZK-2Z for qemu-devel@nongnu.org; Thu, 13 Feb 2025 07:22:58 -0500 Received: by mail-ed1-x532.google.com with SMTP id 4fb4d7f45d1cf-5de38c3d2acso1334927a12.1 for ; Thu, 13 Feb 2025 04:22:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1739449374; x=1740054174; 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=q9MrYcI98DZnIhdDN9JLb40jpmFmxWLeEaWhZtHGUKQ=; b=TYAyAHp2NEkddWbTvCy1WUFVILw7IC3TiC8Rr6jjlv/6G8bR7YQj/W9jdZ942LXVdF SOLRZxjWG8glB/afTOomDAg64svXf/jnWRoGxU2xn220oDqr10FrfSBLQSUn5wxZsejw YcKTWJaxzNWZ48kT8wp4NDiPXXqWgXaZV/nod0slOok2WBqZEWn/CHtDWAnLLMSu/Y2p Clnn6cfJtAXKJGDbeP2+wZx6je7lUq1PS3zd9kwwEwiYAdHA2RfKieo0f7lVfU/klUb0 9KMYDJJYYmuKtgm+9lnNWuJFSsBG4ut6Xe8/ISXPUo3PFGdsqcblkT44vZ2YbvpOMTQP hilg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739449374; x=1740054174; 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=q9MrYcI98DZnIhdDN9JLb40jpmFmxWLeEaWhZtHGUKQ=; b=HnlcUGiqnkkC3E0pCJChvBVmGE+/39g6GVEMYvMsiFZ5Ws6lxGEvK3vHBWLnNUvGgx gCqTphhWH7ttcqzoIRd+Y0g8IwN91B7XOhzLyX8lhfICSn5NVd6Jcby7Adi82ZQSZWTK 3MNBQm4TO+/ITuDjQlKThrLgbAw1jMdufUb87536KBy5T8Npgpyd9DfxafYYAApwNSTe /KSEWqw83uTdBXleZeUFy7huDedz5uQPeRSqwdi3MZq4Ti7XJjopCiPzxkQNxPFeP6Nf Hw/mkvEDgpEcMpqiU6c9thPsZeLUdonnB4VHY4P2vF/T/6JI+hR3ZbAgh6Lz5RRN+vBU Us1w== X-Gm-Message-State: AOJu0Yz7eQHq5OpT/J3bLbsZOGuaN/3YqlN0hydkGqYZHvm1cPzkZwLQ BLUETipRaueE3cFVlONQ4x+A8QlRZQn2Nlc2038R/58YpW8taaq6yjgKR0h/VKxKZaAiWvdBHGZ eEl8= X-Gm-Gg: ASbGnctcIBpI3fxHchleIyXJc26qBmeQcKzzCh6JHD/YeV4eOtpOH4Zj3EL4+fDMU7B tP6Mhr12H1Fe40nnsOTNo/6ZHatiX7N5L/NhX+gHbE37/tEWcMvS+j2H6qPZs4uk32gV5CcU/75 7//0nCslsS7xYYHUpMlEfdR61fR50hQxe3S4mtxsrmiNP3FULz/LQF8vXEapH8RysBkmdgpPpX0 I3/SfVNEQt/oIdVu3hwsxiam27sqMLqQo+AxzTGZ+rf71dsKuxJRoVJWlie/L/5f2H0zMTHzBGP ddgxF+Y15Xd9HN7iX1jcPf7AyOKYgiMefmukFrB3SpYUnn7zep7BL674AvMr X-Received: by 2002:a05:6402:50cc:b0:5d9:fc81:e197 with SMTP id 4fb4d7f45d1cf-5deadd8e4a1mr6069944a12.8.1739449374292; Thu, 13 Feb 2025 04:22:54 -0800 (PST) Received: from localhost.localdomain (6.170.88.92.rev.sfr.net. [92.88.170.6]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-5dece1c4646sm1104999a12.27.2025.02.13.04.22.51 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 13 Feb 2025 04:22:53 -0800 (PST) From: =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Thomas Huth , qemu-riscv@nongnu.org, qemu-ppc@nongnu.org, qemu-arm@nongnu.org, Markus Armbruster , =?utf-8?q?Philippe_Mathieu-Daud?= =?utf-8?q?=C3=A9?= Subject: [PATCH v8 5/6] hw/char/xilinx_uartlite: Make device endianness configurable Date: Thu, 13 Feb 2025 13:22:16 +0100 Message-ID: <20250213122217.62654-6-philmd@linaro.org> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250213122217.62654-1-philmd@linaro.org> References: <20250213122217.62654-1-philmd@linaro.org> MIME-Version: 1.0 Received-SPF: pass client-ip=2a00:1450:4864:20::532; envelope-from=philmd@linaro.org; helo=mail-ed1-x532.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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: qemu-devel-bounces+patch=linaro.org@nongnu.org Replace the DEVICE_NATIVE_ENDIAN MemoryRegionOps by a pair of DEVICE_LITTLE_ENDIAN / DEVICE_BIG_ENDIAN. Add the "endianness" property to select the device endianness. This property is unspecified by default, and machines need to make it explicit. Set the proper endianness for each machine using the device. Signed-off-by: Philippe Mathieu-Daudé Reviewed-by: Thomas Huth Reviewed-by: Richard Henderson --- hw/char/xilinx_uartlite.c | 34 ++++++++++++++++-------- hw/microblaze/petalogix_s3adsp1800_mmu.c | 1 + hw/riscv/microblaze-v-generic.c | 1 + 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/hw/char/xilinx_uartlite.c b/hw/char/xilinx_uartlite.c index 56955e0d74a..4037c937eeb 100644 --- a/hw/char/xilinx_uartlite.c +++ b/hw/char/xilinx_uartlite.c @@ -24,6 +24,7 @@ #include "qemu/osdep.h" #include "qemu/log.h" +#include "qapi/error.h" #include "hw/char/xilinx_uartlite.h" #include "hw/irq.h" #include "hw/qdev-properties.h" @@ -57,6 +58,7 @@ struct XilinxUARTLite { SysBusDevice parent_obj; + EndianMode model_endianness; MemoryRegion mmio; CharBackend chr; qemu_irq irq; @@ -166,17 +168,21 @@ uart_write(void *opaque, hwaddr addr, uart_update_irq(s); } -static const MemoryRegionOps uart_ops = { - .read = uart_read, - .write = uart_write, - .endianness = DEVICE_NATIVE_ENDIAN, - .valid = { - .min_access_size = 1, - .max_access_size = 4 - } +static const MemoryRegionOps uart_ops[2] = { + [0 ... 1] = { + .read = uart_read, + .write = uart_write, + .valid = { + .min_access_size = 1, + .max_access_size = 4, + }, + }, + [0].endianness = DEVICE_LITTLE_ENDIAN, + [1].endianness = DEVICE_BIG_ENDIAN, }; static const Property xilinx_uartlite_properties[] = { + DEFINE_PROP_ENDIAN_NODEFAULT("endianness", XilinxUARTLite, model_endianness), DEFINE_PROP_CHR("chardev", XilinxUARTLite, chr), }; @@ -214,6 +220,15 @@ static void xilinx_uartlite_realize(DeviceState *dev, Error **errp) { XilinxUARTLite *s = XILINX_UARTLITE(dev); + if (s->model_endianness == ENDIAN_MODE_UNSPECIFIED) { + error_setg(errp, TYPE_XILINX_UARTLITE " property 'endianness'" + " must be set to 'big' or 'little'"); + return; + } + + memory_region_init_io(&s->mmio, OBJECT(dev), + &uart_ops[s->model_endianness == ENDIAN_MODE_BIG], + s, "xlnx.xps-uartlite", R_MAX * 4); qemu_chr_fe_set_handlers(&s->chr, uart_can_rx, uart_rx, uart_event, NULL, s, NULL, true); } @@ -223,9 +238,6 @@ static void xilinx_uartlite_init(Object *obj) XilinxUARTLite *s = XILINX_UARTLITE(obj); sysbus_init_irq(SYS_BUS_DEVICE(obj), &s->irq); - - memory_region_init_io(&s->mmio, obj, &uart_ops, s, - "xlnx.xps-uartlite", R_MAX * 4); sysbus_init_mmio(SYS_BUS_DEVICE(obj), &s->mmio); } diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c b/hw/microblaze/petalogix_s3adsp1800_mmu.c index caaea222a8c..bdba2006b72 100644 --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c @@ -109,6 +109,7 @@ petalogix_s3adsp1800_init(MachineState *machine) } dev = qdev_new(TYPE_XILINX_UARTLITE); + qdev_prop_set_enum(dev, "endianness", endianness); qdev_prop_set_chr(dev, "chardev", serial_hd(0)); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, UARTLITE_BASEADDR); diff --git a/hw/riscv/microblaze-v-generic.c b/hw/riscv/microblaze-v-generic.c index 3c79f5733b2..d8e67906d26 100644 --- a/hw/riscv/microblaze-v-generic.c +++ b/hw/riscv/microblaze-v-generic.c @@ -92,6 +92,7 @@ static void mb_v_generic_init(MachineState *machine) /* Uartlite */ dev = qdev_new(TYPE_XILINX_UARTLITE); + qdev_prop_set_enum(dev, "endianness", ENDIAN_MODE_LITTLE); qdev_prop_set_chr(dev, "chardev", serial_hd(0)); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, UARTLITE_BASEADDR);