From nobody Fri May 9 00:15:14 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=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1693478809; cv=none; d=zohomail.com; s=zohoarc; b=HlS/0Smu1PZ55yfvpAM3zK84CqT50AVD9Iclnj0d16f1Ku0kPgarZfqpQkKwvnyo2eHaR9UkjmpleWLBcOQJ+X/dD3ZSJ2SB9kWrDp9BE8LozOX9zgj6dBMFTjtFqTR4U7R3cYW7OAzMo2zXDf4DEoaaqp3kqGvpQQfWrUGTStg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1693478809; h=Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=mfV/nwKI+irh9L62+dwToCu1Oo8P6yPQqKVntEFfbpw=; b=MkcYfcpsKyrDufHxgfIHtyknNeA9E7wyHkbOCNizaEH4e3WoKrNMw3alpw3sZenRy+H3q+5IemABTo3/c3lg9xBSVLuvNpOVoKoBOQx4PcnHFbOtiDumFBMTqzT6XUrotZd8fP5Ne+chFVGu7wZP0f7Mb+DnwFy3mu6IUv8MBvI= 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=<peter.maydell@linaro.org> (p=none dis=none) Return-Path: <qemu-devel-bounces+importer=patchew.org@nongnu.org> Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1693478809227130.69709677621552; Thu, 31 Aug 2023 03:46:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from <qemu-devel-bounces@nongnu.org>) id 1qbfBI-0003nB-SF; Thu, 31 Aug 2023 06:45: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 <peter.maydell@linaro.org>) id 1qbfBB-0003di-Cq for qemu-devel@nongnu.org; Thu, 31 Aug 2023 06:45:37 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <peter.maydell@linaro.org>) id 1qbfB3-00043u-9q for qemu-devel@nongnu.org; Thu, 31 Aug 2023 06:45:33 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-4013454fa93so6503055e9.0 for <qemu-devel@nongnu.org>; Thu, 31 Aug 2023 03:45:27 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id l5-20020adfe585000000b0031c71693449sm1785524wrm.1.2023.08.31.03.45.26 for <qemu-devel@nongnu.org> (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Aug 2023 03:45:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1693478726; x=1694083526; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=mfV/nwKI+irh9L62+dwToCu1Oo8P6yPQqKVntEFfbpw=; b=TRdkKHuhpNO63Yt2W90OmncD/LzbBjIeSyslhU6UXHV8/CR95FeMtIO655T5wa4Ce+ opP1Sp1IjWQV73TlVYSsw4gzR15ehlBYuYHsl2nElcuEgoG21nIjLL850Lc4LwJnE7JD 6MJRvhaSOMCoiiMF3LA9OyiR4NZyoIn/BoT6iMq64aF6BcK2bz4gPMtKzpA8mqzFFB/g koqYVzN9rlgwUd5k8Wr1jdky7nAdAv7zUNvVt50rnNBEp0LjLTzkbft98fYDGJyQ20zX SvXlZeqlYxPyNehv5GSUspZE9wX+ZFAPSOCpp2EeR7zUwaVyyPVXd04t8MTzkh1bBA91 ViLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693478726; x=1694083526; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mfV/nwKI+irh9L62+dwToCu1Oo8P6yPQqKVntEFfbpw=; b=D+ujtHSoo9Fl/9TkShpiJIgp2NPws9HXIx+g3DHcJiKDl7kdsvLGz3nf5y76PTHzWB E+d/Prm60UTvjpZoeoziHhk6fF2YbLBRq7qrP7hseXvGdAwzN0GpRAUASizR/KyZ4dO8 nLYvgH3x2Jqy62s8GMDpJSzFnzXM6sx0duyOQdEHQiq/cZsR7pxZ4s+aWSzG/JDZHsyr WSMjazjCc0nNQqhHgsWuOzEurwPg/Zv9u61y3gTw/qr4bmGksl6dvmRe77D72dQHP7Bv VOuPl0xrPynMeaARpACiCMulZZEhPOrq0Sip0Y8FFlG6Lbp0BFvJ5omOFs/uo0CH+pBL YtXA== X-Gm-Message-State: AOJu0YwUMj6u015dpPqOPQpjt8AZX7qO91p1efIStfKrULNvdu4QXmCs Fj4Yv+2joRaUTkZ/9zJxQw2KDzt7RQK+2hqfnYU= X-Google-Smtp-Source: AGHT+IHelscb0i4XhlS3G2dZuThcPRb9bqzVNZBsblO1/zj6GtXcJlQU/X4rv4pASX8ViL7UdOl4kg== X-Received: by 2002:a05:600c:b57:b0:401:aa8f:7570 with SMTP id k23-20020a05600c0b5700b00401aa8f7570mr3633409wmr.1.1693478726479; Thu, 31 Aug 2023 03:45:26 -0700 (PDT) From: Peter Maydell <peter.maydell@linaro.org> To: qemu-devel@nongnu.org Subject: [PULL 14/24] Refactor i.MX7 processor code Date: Thu, 31 Aug 2023 11:45:09 +0100 Message-Id: <20230831104519.3520658-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230831104519.3520658-1-peter.maydell@linaro.org> References: <20230831104519.3520658-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a00:1450:4864:20::331; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x331.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=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: <qemu-devel.nongnu.org> List-Unsubscribe: <https://lists.nongnu.org/mailman/options/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe> List-Archive: <https://lists.nongnu.org/archive/html/qemu-devel> List-Post: <mailto:qemu-devel@nongnu.org> List-Help: <mailto:qemu-devel-request@nongnu.org?subject=help> List-Subscribe: <https://lists.nongnu.org/mailman/listinfo/qemu-devel>, <mailto:qemu-devel-request@nongnu.org?subject=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 @linaro.org) X-ZM-MESSAGEID: 1693478810039100001 Content-Type: text/plain; charset="utf-8" From: Jean-Christophe Dubois <jcd@tribudubois.net> * Add Addr and size definition for all i.MX7 devices in i.MX7 header file. * Use those newly defined named constants whenever possible. * Standardize the way we init a familly of unimplemented devices - SAI - PWM - CAN * Add/rework few comments Signed-off-by: Jean-Christophe Dubois <jcd@tribudubois.net> Message-id: 59e195d33e4d486a8d131392acd46633c8c10ed7.1692964892.git.jcd@tri= budubois.net Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- include/hw/arm/fsl-imx7.h | 330 ++++++++++++++++++++++++++++---------- hw/arm/fsl-imx7.c | 130 ++++++++++----- 2 files changed, 335 insertions(+), 125 deletions(-) diff --git a/include/hw/arm/fsl-imx7.h b/include/hw/arm/fsl-imx7.h index fcce6421c8c..06b2c5e4acf 100644 --- a/include/hw/arm/fsl-imx7.h +++ b/include/hw/arm/fsl-imx7.h @@ -25,7 +25,6 @@ #include "hw/misc/imx7_ccm.h" #include "hw/misc/imx7_snvs.h" #include "hw/misc/imx7_gpr.h" -#include "hw/misc/imx6_src.h" #include "hw/watchdog/wdt_imx2.h" #include "hw/gpio/imx_gpio.h" #include "hw/char/imx_serial.h" @@ -39,6 +38,7 @@ #include "hw/usb/chipidea.h" #include "cpu.h" #include "qom/object.h" +#include "qemu/units.h" =20 #define TYPE_FSL_IMX7 "fsl-imx7" OBJECT_DECLARE_SIMPLE_TYPE(FslIMX7State, FSL_IMX7) @@ -57,6 +57,9 @@ enum FslIMX7Configuration { FSL_IMX7_NUM_ECSPIS =3D 4, FSL_IMX7_NUM_USBS =3D 3, FSL_IMX7_NUM_ADCS =3D 2, + FSL_IMX7_NUM_SAIS =3D 3, + FSL_IMX7_NUM_CANS =3D 2, + FSL_IMX7_NUM_PWMS =3D 4, }; =20 struct FslIMX7State { @@ -87,80 +90,106 @@ struct FslIMX7State { =20 enum FslIMX7MemoryMap { FSL_IMX7_MMDC_ADDR =3D 0x80000000, - FSL_IMX7_MMDC_SIZE =3D 2 * 1024 * 1024 * 1024UL, + FSL_IMX7_MMDC_SIZE =3D (2 * GiB), =20 - FSL_IMX7_GPIO1_ADDR =3D 0x30200000, - FSL_IMX7_GPIO2_ADDR =3D 0x30210000, - FSL_IMX7_GPIO3_ADDR =3D 0x30220000, - FSL_IMX7_GPIO4_ADDR =3D 0x30230000, - FSL_IMX7_GPIO5_ADDR =3D 0x30240000, - FSL_IMX7_GPIO6_ADDR =3D 0x30250000, - FSL_IMX7_GPIO7_ADDR =3D 0x30260000, + FSL_IMX7_QSPI1_MEM_ADDR =3D 0x60000000, + FSL_IMX7_QSPI1_MEM_SIZE =3D (256 * MiB), =20 - FSL_IMX7_IOMUXC_LPSR_GPR_ADDR =3D 0x30270000, + FSL_IMX7_PCIE1_MEM_ADDR =3D 0x40000000, + FSL_IMX7_PCIE1_MEM_SIZE =3D (256 * MiB), =20 - FSL_IMX7_WDOG1_ADDR =3D 0x30280000, - FSL_IMX7_WDOG2_ADDR =3D 0x30290000, - FSL_IMX7_WDOG3_ADDR =3D 0x302A0000, - FSL_IMX7_WDOG4_ADDR =3D 0x302B0000, + FSL_IMX7_QSPI1_RX_BUF_ADDR =3D 0x34000000, + FSL_IMX7_QSPI1_RX_BUF_SIZE =3D (32 * MiB), =20 - FSL_IMX7_IOMUXC_LPSR_ADDR =3D 0x302C0000, + /* PCIe Peripherals */ + FSL_IMX7_PCIE_REG_ADDR =3D 0x33800000, =20 - FSL_IMX7_GPT1_ADDR =3D 0x302D0000, - FSL_IMX7_GPT2_ADDR =3D 0x302E0000, - FSL_IMX7_GPT3_ADDR =3D 0x302F0000, - FSL_IMX7_GPT4_ADDR =3D 0x30300000, + /* MMAP Peripherals */ + FSL_IMX7_DMA_APBH_ADDR =3D 0x33000000, + FSL_IMX7_DMA_APBH_SIZE =3D 0x8000, =20 - FSL_IMX7_IOMUXC_ADDR =3D 0x30330000, - FSL_IMX7_IOMUXC_GPR_ADDR =3D 0x30340000, - FSL_IMX7_IOMUXCn_SIZE =3D 0x1000, + /* GPV configuration */ + FSL_IMX7_GPV6_ADDR =3D 0x32600000, + FSL_IMX7_GPV5_ADDR =3D 0x32500000, + FSL_IMX7_GPV4_ADDR =3D 0x32400000, + FSL_IMX7_GPV3_ADDR =3D 0x32300000, + FSL_IMX7_GPV2_ADDR =3D 0x32200000, + FSL_IMX7_GPV1_ADDR =3D 0x32100000, + FSL_IMX7_GPV0_ADDR =3D 0x32000000, + FSL_IMX7_GPVn_SIZE =3D (1 * MiB), =20 - FSL_IMX7_OCOTP_ADDR =3D 0x30350000, - FSL_IMX7_OCOTP_SIZE =3D 0x10000, + /* Arm Peripherals */ + FSL_IMX7_A7MPCORE_ADDR =3D 0x31000000, =20 - FSL_IMX7_ANALOG_ADDR =3D 0x30360000, - FSL_IMX7_SNVS_ADDR =3D 0x30370000, - FSL_IMX7_CCM_ADDR =3D 0x30380000, + /* AIPS-3 Begin */ =20 - FSL_IMX7_SRC_ADDR =3D 0x30390000, - FSL_IMX7_SRC_SIZE =3D 0x1000, + FSL_IMX7_ENET2_ADDR =3D 0x30BF0000, + FSL_IMX7_ENET1_ADDR =3D 0x30BE0000, =20 - FSL_IMX7_ADC1_ADDR =3D 0x30610000, - FSL_IMX7_ADC2_ADDR =3D 0x30620000, - FSL_IMX7_ADCn_SIZE =3D 0x1000, + FSL_IMX7_SDMA_ADDR =3D 0x30BD0000, + FSL_IMX7_SDMA_SIZE =3D (4 * KiB), =20 - FSL_IMX7_PWM1_ADDR =3D 0x30660000, - FSL_IMX7_PWM2_ADDR =3D 0x30670000, - FSL_IMX7_PWM3_ADDR =3D 0x30680000, - FSL_IMX7_PWM4_ADDR =3D 0x30690000, - FSL_IMX7_PWMn_SIZE =3D 0x10000, + FSL_IMX7_EIM_ADDR =3D 0x30BC0000, + FSL_IMX7_EIM_SIZE =3D (4 * KiB), =20 - FSL_IMX7_PCIE_PHY_ADDR =3D 0x306D0000, - FSL_IMX7_PCIE_PHY_SIZE =3D 0x10000, + FSL_IMX7_QSPI_ADDR =3D 0x30BB0000, + FSL_IMX7_QSPI_SIZE =3D 0x8000, =20 - FSL_IMX7_GPC_ADDR =3D 0x303A0000, + FSL_IMX7_SIM2_ADDR =3D 0x30BA0000, + FSL_IMX7_SIM1_ADDR =3D 0x30B90000, + FSL_IMX7_SIMn_SIZE =3D (4 * KiB), + + FSL_IMX7_USDHC3_ADDR =3D 0x30B60000, + FSL_IMX7_USDHC2_ADDR =3D 0x30B50000, + FSL_IMX7_USDHC1_ADDR =3D 0x30B40000, + + FSL_IMX7_USB3_ADDR =3D 0x30B30000, + FSL_IMX7_USBMISC3_ADDR =3D 0x30B30200, + FSL_IMX7_USB2_ADDR =3D 0x30B20000, + FSL_IMX7_USBMISC2_ADDR =3D 0x30B20200, + FSL_IMX7_USB1_ADDR =3D 0x30B10000, + FSL_IMX7_USBMISC1_ADDR =3D 0x30B10200, + FSL_IMX7_USBMISCn_SIZE =3D 0x200, + + FSL_IMX7_USB_PL301_ADDR =3D 0x30AD0000, + FSL_IMX7_USB_PL301_SIZE =3D (64 * KiB), + + FSL_IMX7_SEMAPHORE_HS_ADDR =3D 0x30AC0000, + FSL_IMX7_SEMAPHORE_HS_SIZE =3D (64 * KiB), + + FSL_IMX7_MUB_ADDR =3D 0x30AB0000, + FSL_IMX7_MUA_ADDR =3D 0x30AA0000, + FSL_IMX7_MUn_SIZE =3D (KiB), + + FSL_IMX7_UART7_ADDR =3D 0x30A90000, + FSL_IMX7_UART6_ADDR =3D 0x30A80000, + FSL_IMX7_UART5_ADDR =3D 0x30A70000, + FSL_IMX7_UART4_ADDR =3D 0x30A60000, + + FSL_IMX7_I2C4_ADDR =3D 0x30A50000, + FSL_IMX7_I2C3_ADDR =3D 0x30A40000, + FSL_IMX7_I2C2_ADDR =3D 0x30A30000, + FSL_IMX7_I2C1_ADDR =3D 0x30A20000, + + FSL_IMX7_CAN2_ADDR =3D 0x30A10000, + FSL_IMX7_CAN1_ADDR =3D 0x30A00000, + FSL_IMX7_CANn_SIZE =3D (4 * KiB), + + FSL_IMX7_AIPS3_CONF_ADDR =3D 0x309F0000, + FSL_IMX7_AIPS3_CONF_SIZE =3D (64 * KiB), =20 FSL_IMX7_CAAM_ADDR =3D 0x30900000, - FSL_IMX7_CAAM_SIZE =3D 0x40000, + FSL_IMX7_CAAM_SIZE =3D (256 * KiB), =20 - FSL_IMX7_CAN1_ADDR =3D 0x30A00000, - FSL_IMX7_CAN2_ADDR =3D 0x30A10000, - FSL_IMX7_CANn_SIZE =3D 0x10000, + FSL_IMX7_SPBA_ADDR =3D 0x308F0000, + FSL_IMX7_SPBA_SIZE =3D (4 * KiB), =20 - FSL_IMX7_I2C1_ADDR =3D 0x30A20000, - FSL_IMX7_I2C2_ADDR =3D 0x30A30000, - FSL_IMX7_I2C3_ADDR =3D 0x30A40000, - FSL_IMX7_I2C4_ADDR =3D 0x30A50000, + FSL_IMX7_SAI3_ADDR =3D 0x308C0000, + FSL_IMX7_SAI2_ADDR =3D 0x308B0000, + FSL_IMX7_SAI1_ADDR =3D 0x308A0000, + FSL_IMX7_SAIn_SIZE =3D (4 * KiB), =20 - FSL_IMX7_ECSPI1_ADDR =3D 0x30820000, - FSL_IMX7_ECSPI2_ADDR =3D 0x30830000, - FSL_IMX7_ECSPI3_ADDR =3D 0x30840000, - FSL_IMX7_ECSPI4_ADDR =3D 0x30630000, - - FSL_IMX7_LCDIF_ADDR =3D 0x30730000, - FSL_IMX7_LCDIF_SIZE =3D 0x1000, - - FSL_IMX7_UART1_ADDR =3D 0x30860000, + FSL_IMX7_UART3_ADDR =3D 0x30880000, /* * Some versions of the reference manual claim that UART2 is @ * 0x30870000, but experiments with HW + DT files in upstream @@ -168,45 +197,174 @@ enum FslIMX7MemoryMap { * actually located @ 0x30890000 */ FSL_IMX7_UART2_ADDR =3D 0x30890000, - FSL_IMX7_UART3_ADDR =3D 0x30880000, - FSL_IMX7_UART4_ADDR =3D 0x30A60000, - FSL_IMX7_UART5_ADDR =3D 0x30A70000, - FSL_IMX7_UART6_ADDR =3D 0x30A80000, - FSL_IMX7_UART7_ADDR =3D 0x30A90000, + FSL_IMX7_UART1_ADDR =3D 0x30860000, =20 - FSL_IMX7_SAI1_ADDR =3D 0x308A0000, - FSL_IMX7_SAI2_ADDR =3D 0x308B0000, - FSL_IMX7_SAI3_ADDR =3D 0x308C0000, - FSL_IMX7_SAIn_SIZE =3D 0x10000, + FSL_IMX7_ECSPI3_ADDR =3D 0x30840000, + FSL_IMX7_ECSPI2_ADDR =3D 0x30830000, + FSL_IMX7_ECSPI1_ADDR =3D 0x30820000, + FSL_IMX7_ECSPIn_SIZE =3D (4 * KiB), =20 - FSL_IMX7_ENET1_ADDR =3D 0x30BE0000, - FSL_IMX7_ENET2_ADDR =3D 0x30BF0000, + /* AIPS-3 End */ =20 - FSL_IMX7_USB1_ADDR =3D 0x30B10000, - FSL_IMX7_USBMISC1_ADDR =3D 0x30B10200, - FSL_IMX7_USB2_ADDR =3D 0x30B20000, - FSL_IMX7_USBMISC2_ADDR =3D 0x30B20200, - FSL_IMX7_USB3_ADDR =3D 0x30B30000, - FSL_IMX7_USBMISC3_ADDR =3D 0x30B30200, - FSL_IMX7_USBMISCn_SIZE =3D 0x200, + /* AIPS-2 Begin */ =20 - FSL_IMX7_USDHC1_ADDR =3D 0x30B40000, - FSL_IMX7_USDHC2_ADDR =3D 0x30B50000, - FSL_IMX7_USDHC3_ADDR =3D 0x30B60000, + FSL_IMX7_AXI_DEBUG_MON_ADDR =3D 0x307E0000, + FSL_IMX7_AXI_DEBUG_MON_SIZE =3D (64 * KiB), =20 - FSL_IMX7_SDMA_ADDR =3D 0x30BD0000, - FSL_IMX7_SDMA_SIZE =3D 0x1000, + FSL_IMX7_PERFMON2_ADDR =3D 0x307D0000, + FSL_IMX7_PERFMON1_ADDR =3D 0x307C0000, + FSL_IMX7_PERFMONn_SIZE =3D (64 * KiB), + + FSL_IMX7_DDRC_ADDR =3D 0x307A0000, + FSL_IMX7_DDRC_SIZE =3D (4 * KiB), + + FSL_IMX7_DDRC_PHY_ADDR =3D 0x30790000, + FSL_IMX7_DDRC_PHY_SIZE =3D (4 * KiB), + + FSL_IMX7_TZASC_ADDR =3D 0x30780000, + FSL_IMX7_TZASC_SIZE =3D (64 * KiB), + + FSL_IMX7_MIPI_DSI_ADDR =3D 0x30760000, + FSL_IMX7_MIPI_DSI_SIZE =3D (4 * KiB), + + FSL_IMX7_MIPI_CSI_ADDR =3D 0x30750000, + FSL_IMX7_MIPI_CSI_SIZE =3D 0x4000, + + FSL_IMX7_LCDIF_ADDR =3D 0x30730000, + FSL_IMX7_LCDIF_SIZE =3D 0x8000, + + FSL_IMX7_CSI_ADDR =3D 0x30710000, + FSL_IMX7_CSI_SIZE =3D (4 * KiB), + + FSL_IMX7_PXP_ADDR =3D 0x30700000, + FSL_IMX7_PXP_SIZE =3D 0x4000, + + FSL_IMX7_EPDC_ADDR =3D 0x306F0000, + FSL_IMX7_EPDC_SIZE =3D (4 * KiB), + + FSL_IMX7_PCIE_PHY_ADDR =3D 0x306D0000, + FSL_IMX7_PCIE_PHY_SIZE =3D (4 * KiB), + + FSL_IMX7_SYSCNT_CTRL_ADDR =3D 0x306C0000, + FSL_IMX7_SYSCNT_CMP_ADDR =3D 0x306B0000, + FSL_IMX7_SYSCNT_RD_ADDR =3D 0x306A0000, + + FSL_IMX7_PWM4_ADDR =3D 0x30690000, + FSL_IMX7_PWM3_ADDR =3D 0x30680000, + FSL_IMX7_PWM2_ADDR =3D 0x30670000, + FSL_IMX7_PWM1_ADDR =3D 0x30660000, + FSL_IMX7_PWMn_SIZE =3D (4 * KiB), + + FSL_IMX7_FlEXTIMER2_ADDR =3D 0x30650000, + FSL_IMX7_FlEXTIMER1_ADDR =3D 0x30640000, + FSL_IMX7_FLEXTIMERn_SIZE =3D (4 * KiB), + + FSL_IMX7_ECSPI4_ADDR =3D 0x30630000, + + FSL_IMX7_ADC2_ADDR =3D 0x30620000, + FSL_IMX7_ADC1_ADDR =3D 0x30610000, + FSL_IMX7_ADCn_SIZE =3D (4 * KiB), + + FSL_IMX7_AIPS2_CONF_ADDR =3D 0x305F0000, + FSL_IMX7_AIPS2_CONF_SIZE =3D (64 * KiB), + + /* AIPS-2 End */ + + /* AIPS-1 Begin */ + + FSL_IMX7_CSU_ADDR =3D 0x303E0000, + FSL_IMX7_CSU_SIZE =3D (64 * KiB), + + FSL_IMX7_RDC_ADDR =3D 0x303D0000, + FSL_IMX7_RDC_SIZE =3D (4 * KiB), + + FSL_IMX7_SEMAPHORE2_ADDR =3D 0x303C0000, + FSL_IMX7_SEMAPHORE1_ADDR =3D 0x303B0000, + FSL_IMX7_SEMAPHOREn_SIZE =3D (4 * KiB), + + FSL_IMX7_GPC_ADDR =3D 0x303A0000, + + FSL_IMX7_SRC_ADDR =3D 0x30390000, + FSL_IMX7_SRC_SIZE =3D (4 * KiB), + + FSL_IMX7_CCM_ADDR =3D 0x30380000, + + FSL_IMX7_SNVS_HP_ADDR =3D 0x30370000, + + FSL_IMX7_ANALOG_ADDR =3D 0x30360000, + + FSL_IMX7_OCOTP_ADDR =3D 0x30350000, + FSL_IMX7_OCOTP_SIZE =3D 0x10000, + + FSL_IMX7_IOMUXC_GPR_ADDR =3D 0x30340000, + FSL_IMX7_IOMUXC_GPR_SIZE =3D (4 * KiB), + + FSL_IMX7_IOMUXC_ADDR =3D 0x30330000, + FSL_IMX7_IOMUXC_SIZE =3D (4 * KiB), + + FSL_IMX7_KPP_ADDR =3D 0x30320000, + FSL_IMX7_KPP_SIZE =3D (4 * KiB), + + FSL_IMX7_ROMCP_ADDR =3D 0x30310000, + FSL_IMX7_ROMCP_SIZE =3D (4 * KiB), + + FSL_IMX7_GPT4_ADDR =3D 0x30300000, + FSL_IMX7_GPT3_ADDR =3D 0x302F0000, + FSL_IMX7_GPT2_ADDR =3D 0x302E0000, + FSL_IMX7_GPT1_ADDR =3D 0x302D0000, + + FSL_IMX7_IOMUXC_LPSR_ADDR =3D 0x302C0000, + FSL_IMX7_IOMUXC_LPSR_SIZE =3D (4 * KiB), + + FSL_IMX7_WDOG4_ADDR =3D 0x302B0000, + FSL_IMX7_WDOG3_ADDR =3D 0x302A0000, + FSL_IMX7_WDOG2_ADDR =3D 0x30290000, + FSL_IMX7_WDOG1_ADDR =3D 0x30280000, + + FSL_IMX7_IOMUXC_LPSR_GPR_ADDR =3D 0x30270000, + + FSL_IMX7_GPIO7_ADDR =3D 0x30260000, + FSL_IMX7_GPIO6_ADDR =3D 0x30250000, + FSL_IMX7_GPIO5_ADDR =3D 0x30240000, + FSL_IMX7_GPIO4_ADDR =3D 0x30230000, + FSL_IMX7_GPIO3_ADDR =3D 0x30220000, + FSL_IMX7_GPIO2_ADDR =3D 0x30210000, + FSL_IMX7_GPIO1_ADDR =3D 0x30200000, + + FSL_IMX7_AIPS1_CONF_ADDR =3D 0x301F0000, + FSL_IMX7_AIPS1_CONF_SIZE =3D (64 * KiB), =20 - FSL_IMX7_A7MPCORE_ADDR =3D 0x31000000, FSL_IMX7_A7MPCORE_DAP_ADDR =3D 0x30000000, + FSL_IMX7_A7MPCORE_DAP_SIZE =3D (1 * MiB), =20 - FSL_IMX7_PCIE_REG_ADDR =3D 0x33800000, - FSL_IMX7_PCIE_REG_SIZE =3D 16 * 1024, + /* AIPS-1 End */ =20 - FSL_IMX7_GPR_ADDR =3D 0x30340000, + FSL_IMX7_EIM_CS0_ADDR =3D 0x28000000, + FSL_IMX7_EIM_CS0_SIZE =3D (128 * MiB), =20 - FSL_IMX7_DMA_APBH_ADDR =3D 0x33000000, - FSL_IMX7_DMA_APBH_SIZE =3D 0x2000, + FSL_IMX7_OCRAM_PXP_ADDR =3D 0x00940000, + FSL_IMX7_OCRAM_PXP_SIZE =3D (32 * KiB), + + FSL_IMX7_OCRAM_EPDC_ADDR =3D 0x00920000, + FSL_IMX7_OCRAM_EPDC_SIZE =3D (128 * KiB), + + FSL_IMX7_OCRAM_MEM_ADDR =3D 0x00900000, + FSL_IMX7_OCRAM_MEM_SIZE =3D (128 * KiB), + + FSL_IMX7_TCMU_ADDR =3D 0x00800000, + FSL_IMX7_TCMU_SIZE =3D (32 * KiB), + + FSL_IMX7_TCML_ADDR =3D 0x007F8000, + FSL_IMX7_TCML_SIZE =3D (32 * KiB), + + FSL_IMX7_OCRAM_S_ADDR =3D 0x00180000, + FSL_IMX7_OCRAM_S_SIZE =3D (32 * KiB), + + FSL_IMX7_CAAM_MEM_ADDR =3D 0x00100000, + FSL_IMX7_CAAM_MEM_SIZE =3D (32 * KiB), + + FSL_IMX7_ROM_ADDR =3D 0x00000000, + FSL_IMX7_ROM_SIZE =3D (96 * KiB), }; =20 enum FslIMX7IRQs { diff --git a/hw/arm/fsl-imx7.c b/hw/arm/fsl-imx7.c index 9e41d4b6772..e9760535393 100644 --- a/hw/arm/fsl-imx7.c +++ b/hw/arm/fsl-imx7.c @@ -36,6 +36,9 @@ static void fsl_imx7_init(Object *obj) char name[NAME_SIZE]; int i; =20 + /* + * CPUs + */ for (i =3D 0; i < MIN(ms->smp.cpus, FSL_IMX7_NUM_CPUS); i++) { snprintf(name, NAME_SIZE, "cpu%d", i); object_initialize_child(obj, name, &s->cpu[i], @@ -49,7 +52,7 @@ static void fsl_imx7_init(Object *obj) TYPE_A15MPCORE_PRIV); =20 /* - * GPIOs 1 to 7 + * GPIOs */ for (i =3D 0; i < FSL_IMX7_NUM_GPIOS; i++) { snprintf(name, NAME_SIZE, "gpio%d", i); @@ -57,7 +60,7 @@ static void fsl_imx7_init(Object *obj) } =20 /* - * GPT1, 2, 3, 4 + * GPTs */ for (i =3D 0; i < FSL_IMX7_NUM_GPTS; i++) { snprintf(name, NAME_SIZE, "gpt%d", i); @@ -79,19 +82,24 @@ static void fsl_imx7_init(Object *obj) */ object_initialize_child(obj, "gpcv2", &s->gpcv2, TYPE_IMX_GPCV2); =20 + /* + * ECSPIs + */ for (i =3D 0; i < FSL_IMX7_NUM_ECSPIS; i++) { snprintf(name, NAME_SIZE, "spi%d", i + 1); object_initialize_child(obj, name, &s->spi[i], TYPE_IMX_SPI); } =20 - + /* + * I2Cs + */ for (i =3D 0; i < FSL_IMX7_NUM_I2CS; i++) { snprintf(name, NAME_SIZE, "i2c%d", i + 1); object_initialize_child(obj, name, &s->i2c[i], TYPE_IMX_I2C); } =20 /* - * UART + * UARTs */ for (i =3D 0; i < FSL_IMX7_NUM_UARTS; i++) { snprintf(name, NAME_SIZE, "uart%d", i); @@ -99,7 +107,7 @@ static void fsl_imx7_init(Object *obj) } =20 /* - * Ethernet + * Ethernets */ for (i =3D 0; i < FSL_IMX7_NUM_ETHS; i++) { snprintf(name, NAME_SIZE, "eth%d", i); @@ -107,7 +115,7 @@ static void fsl_imx7_init(Object *obj) } =20 /* - * SDHCI + * SDHCIs */ for (i =3D 0; i < FSL_IMX7_NUM_USDHCS; i++) { snprintf(name, NAME_SIZE, "usdhc%d", i); @@ -120,7 +128,7 @@ static void fsl_imx7_init(Object *obj) object_initialize_child(obj, "snvs", &s->snvs, TYPE_IMX7_SNVS); =20 /* - * Watchdog + * Watchdogs */ for (i =3D 0; i < FSL_IMX7_NUM_WDTS; i++) { snprintf(name, NAME_SIZE, "wdt%d", i); @@ -132,8 +140,14 @@ static void fsl_imx7_init(Object *obj) */ object_initialize_child(obj, "gpr", &s->gpr, TYPE_IMX7_GPR); =20 + /* + * PCIE + */ object_initialize_child(obj, "pcie", &s->pcie, TYPE_DESIGNWARE_PCIE_HO= ST); =20 + /* + * USBs + */ for (i =3D 0; i < FSL_IMX7_NUM_USBS; i++) { snprintf(name, NAME_SIZE, "usb%d", i); object_initialize_child(obj, name, &s->usb[i], TYPE_CHIPIDEA); @@ -156,6 +170,9 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) return; } =20 + /* + * CPUs + */ for (i =3D 0; i < smp_cpus; i++) { o =3D OBJECT(&s->cpu[i]); =20 @@ -206,10 +223,10 @@ static void fsl_imx7_realize(DeviceState *dev, Error = **errp) * A7MPCORE DAP */ create_unimplemented_device("a7mpcore-dap", FSL_IMX7_A7MPCORE_DAP_ADDR, - 0x100000); + FSL_IMX7_A7MPCORE_DAP_SIZE); =20 /* - * GPT1, 2, 3, 4 + * GPTs */ for (i =3D 0; i < FSL_IMX7_NUM_GPTS; i++) { static const hwaddr FSL_IMX7_GPTn_ADDR[FSL_IMX7_NUM_GPTS] =3D { @@ -234,6 +251,9 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) FSL_IMX7_GPTn_IRQ[i])); } =20 + /* + * GPIOs + */ for (i =3D 0; i < FSL_IMX7_NUM_GPIOS; i++) { static const hwaddr FSL_IMX7_GPIOn_ADDR[FSL_IMX7_NUM_GPIOS] =3D { FSL_IMX7_GPIO1_ADDR, @@ -281,16 +301,10 @@ static void fsl_imx7_realize(DeviceState *dev, Error = **errp) /* * IOMUXC and IOMUXC_LPSR */ - for (i =3D 0; i < FSL_IMX7_NUM_IOMUXCS; i++) { - static const hwaddr FSL_IMX7_IOMUXCn_ADDR[FSL_IMX7_NUM_IOMUXCS] = =3D { - FSL_IMX7_IOMUXC_ADDR, - FSL_IMX7_IOMUXC_LPSR_ADDR, - }; - - snprintf(name, NAME_SIZE, "iomuxc%d", i); - create_unimplemented_device(name, FSL_IMX7_IOMUXCn_ADDR[i], - FSL_IMX7_IOMUXCn_SIZE); - } + create_unimplemented_device("iomuxc", FSL_IMX7_IOMUXC_ADDR, + FSL_IMX7_IOMUXC_SIZE); + create_unimplemented_device("iomuxc_lspr", FSL_IMX7_IOMUXC_LPSR_ADDR, + FSL_IMX7_IOMUXC_LPSR_SIZE); =20 /* * CCM @@ -310,7 +324,9 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) sysbus_realize(SYS_BUS_DEVICE(&s->gpcv2), &error_abort); sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpcv2), 0, FSL_IMX7_GPC_ADDR); =20 - /* Initialize all ECSPI */ + /* + * ECSPIs + */ for (i =3D 0; i < FSL_IMX7_NUM_ECSPIS; i++) { static const hwaddr FSL_IMX7_SPIn_ADDR[FSL_IMX7_NUM_ECSPIS] =3D { FSL_IMX7_ECSPI1_ADDR, @@ -335,6 +351,9 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) FSL_IMX7_SPIn_IRQ[i])); } =20 + /* + * I2Cs + */ for (i =3D 0; i < FSL_IMX7_NUM_I2CS; i++) { static const hwaddr FSL_IMX7_I2Cn_ADDR[FSL_IMX7_NUM_I2CS] =3D { FSL_IMX7_I2C1_ADDR, @@ -359,7 +378,7 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) } =20 /* - * UART + * UARTs */ for (i =3D 0; i < FSL_IMX7_NUM_UARTS; i++) { static const hwaddr FSL_IMX7_UARTn_ADDR[FSL_IMX7_NUM_UARTS] =3D { @@ -394,7 +413,7 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) } =20 /* - * Ethernet + * Ethernets * * We must use two loops since phy_connected affects the other interfa= ce * and we have to set all properties before calling sysbus_realize(). @@ -434,7 +453,7 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) } =20 /* - * USDHC + * USDHCs */ for (i =3D 0; i < FSL_IMX7_NUM_USDHCS; i++) { static const hwaddr FSL_IMX7_USDHCn_ADDR[FSL_IMX7_NUM_USDHCS] =3D { @@ -464,7 +483,7 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) * SNVS */ sysbus_realize(SYS_BUS_DEVICE(&s->snvs), &error_abort); - sysbus_mmio_map(SYS_BUS_DEVICE(&s->snvs), 0, FSL_IMX7_SNVS_ADDR); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->snvs), 0, FSL_IMX7_SNVS_HP_ADDR); =20 /* * SRC @@ -472,7 +491,7 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) create_unimplemented_device("src", FSL_IMX7_SRC_ADDR, FSL_IMX7_SRC_SIZ= E); =20 /* - * Watchdog + * Watchdogs */ for (i =3D 0; i < FSL_IMX7_NUM_WDTS; i++) { static const hwaddr FSL_IMX7_WDOGn_ADDR[FSL_IMX7_NUM_WDTS] =3D { @@ -509,25 +528,49 @@ static void fsl_imx7_realize(DeviceState *dev, Error = **errp) create_unimplemented_device("caam", FSL_IMX7_CAAM_ADDR, FSL_IMX7_CAAM_= SIZE); =20 /* - * PWM + * PWMs */ - create_unimplemented_device("pwm1", FSL_IMX7_PWM1_ADDR, FSL_IMX7_PWMn_= SIZE); - create_unimplemented_device("pwm2", FSL_IMX7_PWM2_ADDR, FSL_IMX7_PWMn_= SIZE); - create_unimplemented_device("pwm3", FSL_IMX7_PWM3_ADDR, FSL_IMX7_PWMn_= SIZE); - create_unimplemented_device("pwm4", FSL_IMX7_PWM4_ADDR, FSL_IMX7_PWMn_= SIZE); + for (i =3D 0; i < FSL_IMX7_NUM_PWMS; i++) { + static const hwaddr FSL_IMX7_PWMn_ADDR[FSL_IMX7_NUM_PWMS] =3D { + FSL_IMX7_PWM1_ADDR, + FSL_IMX7_PWM2_ADDR, + FSL_IMX7_PWM3_ADDR, + FSL_IMX7_PWM4_ADDR, + }; + + snprintf(name, NAME_SIZE, "pwm%d", i); + create_unimplemented_device(name, FSL_IMX7_PWMn_ADDR[i], + FSL_IMX7_PWMn_SIZE); + } =20 /* - * CAN + * CANs */ - create_unimplemented_device("can1", FSL_IMX7_CAN1_ADDR, FSL_IMX7_CANn_= SIZE); - create_unimplemented_device("can2", FSL_IMX7_CAN2_ADDR, FSL_IMX7_CANn_= SIZE); + for (i =3D 0; i < FSL_IMX7_NUM_CANS; i++) { + static const hwaddr FSL_IMX7_CANn_ADDR[FSL_IMX7_NUM_CANS] =3D { + FSL_IMX7_CAN1_ADDR, + FSL_IMX7_CAN2_ADDR, + }; + + snprintf(name, NAME_SIZE, "can%d", i); + create_unimplemented_device(name, FSL_IMX7_CANn_ADDR[i], + FSL_IMX7_CANn_SIZE); + } =20 /* - * SAI (Audio SSI (Synchronous Serial Interface)) + * SAIs (Audio SSI (Synchronous Serial Interface)) */ - create_unimplemented_device("sai1", FSL_IMX7_SAI1_ADDR, FSL_IMX7_SAIn_= SIZE); - create_unimplemented_device("sai2", FSL_IMX7_SAI2_ADDR, FSL_IMX7_SAIn_= SIZE); - create_unimplemented_device("sai2", FSL_IMX7_SAI3_ADDR, FSL_IMX7_SAIn_= SIZE); + for (i =3D 0; i < FSL_IMX7_NUM_SAIS; i++) { + static const hwaddr FSL_IMX7_SAIn_ADDR[FSL_IMX7_NUM_SAIS] =3D { + FSL_IMX7_SAI1_ADDR, + FSL_IMX7_SAI2_ADDR, + FSL_IMX7_SAI3_ADDR, + }; + + snprintf(name, NAME_SIZE, "sai%d", i); + create_unimplemented_device(name, FSL_IMX7_SAIn_ADDR[i], + FSL_IMX7_SAIn_SIZE); + } =20 /* * OCOTP @@ -535,9 +578,15 @@ static void fsl_imx7_realize(DeviceState *dev, Error *= *errp) create_unimplemented_device("ocotp", FSL_IMX7_OCOTP_ADDR, FSL_IMX7_OCOTP_SIZE); =20 + /* + * GPR + */ sysbus_realize(SYS_BUS_DEVICE(&s->gpr), &error_abort); - sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpr), 0, FSL_IMX7_GPR_ADDR); + sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpr), 0, FSL_IMX7_IOMUXC_GPR_ADDR); =20 + /* + * PCIE + */ sysbus_realize(SYS_BUS_DEVICE(&s->pcie), &error_abort); sysbus_mmio_map(SYS_BUS_DEVICE(&s->pcie), 0, FSL_IMX7_PCIE_REG_ADDR); =20 @@ -550,7 +599,9 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) irq =3D qdev_get_gpio_in(DEVICE(&s->a7mpcore), FSL_IMX7_PCI_INTD_IRQ); sysbus_connect_irq(SYS_BUS_DEVICE(&s->pcie), 3, irq); =20 - + /* + * USBs + */ for (i =3D 0; i < FSL_IMX7_NUM_USBS; i++) { static const hwaddr FSL_IMX7_USBMISCn_ADDR[FSL_IMX7_NUM_USBS] =3D { FSL_IMX7_USBMISC1_ADDR, @@ -612,6 +663,7 @@ static void fsl_imx7_realize(DeviceState *dev, Error **= errp) */ create_unimplemented_device("pcie-phy", FSL_IMX7_PCIE_PHY_ADDR, FSL_IMX7_PCIE_PHY_SIZE); + } =20 static Property fsl_imx7_properties[] =3D { --=20 2.34.1