From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-24.1 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id F1AC1C433FE for ; Sun, 5 Sep 2021 20:35:00 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 367236108E for ; Sun, 5 Sep 2021 20:35:00 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 367236108E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=kaod.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=nongnu.org Received: from localhost ([::1]:45710 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mMyqx-0001LN-7c for qemu-devel@archiver.kernel.org; Sun, 05 Sep 2021 16:34:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:42674) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMypy-0008NJ-3v for qemu-devel@nongnu.org; Sun, 05 Sep 2021 16:33:58 -0400 Received: from 2.mo552.mail-out.ovh.net ([178.33.105.233]:45487) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mMypv-0005U4-Dk for qemu-devel@nongnu.org; Sun, 05 Sep 2021 16:33:57 -0400 Received: from mxplan5.mail.ovh.net (unknown [10.108.4.98]) by mo552.mail-out.ovh.net (Postfix) with ESMTPS id A1DB320807; Sun, 5 Sep 2021 20:33:51 +0000 (UTC) Received: from kaod.org (37.59.142.99) by DAG4EX1.mxp5.local (172.16.2.31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.14; Sun, 5 Sep 2021 22:33:49 +0200 Authentication-Results: garm.ovh; auth=pass (GARM-99G003a4c59a0a-bcc7-44ea-937a-a1ca2d64d17c, 66A9BF958F2B7C6001B822A929017098407F6BEC) smtp.auth=clg@kaod.org X-OVh-ClientIp: 82.64.250.170 Subject: Re: [PATCH v3] hw/arm/aspeed: Add Fuji machine type To: References: <20210905185535.3108281-1-pdel@fb.com> From: =?UTF-8?Q?C=c3=a9dric_Le_Goater?= Message-ID: <2098ae0f-1d79-ecc9-78e0-3d11d36db95b@kaod.org> Date: Sun, 5 Sep 2021 22:33:49 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: <20210905185535.3108281-1-pdel@fb.com> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 8bit X-Originating-IP: [37.59.142.99] X-ClientProxiedBy: DAG4EX1.mxp5.local (172.16.2.31) To DAG4EX1.mxp5.local (172.16.2.31) X-Ovh-Tracer-GUID: 257b1204-d55f-40ef-b232-92a36413c41b X-Ovh-Tracer-Id: 3003619478739389292 X-VR-SPAMSTATE: OK X-VR-SPAMSCORE: 0 X-VR-SPAMCAUSE: gggruggvucftvghtrhhoucdtuddrgedvtddrudefuddgudegkecutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfqggfjpdevjffgvefmvefgnecuuegrihhlohhuthemucehtddtnecunecujfgurhepuffvfhfhkffffgggjggtgfhisehtkeertddtfeejnecuhfhrohhmpeevrogurhhitggpnfgvpgfiohgrthgvrhcuoegtlhhgsehkrghougdrohhrgheqnecuggftrfgrthhtvghrnhepheeutdehgefhvdehtdeuleetgedvfeeukedtfeeihfffffeiuddutdduhffgvedtnecuffhomhgrihhnpehgihhthhhusgdrtghomhenucfkpheptddrtddrtddrtddpfeejrdehledrudegvddrleelnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmohguvgepshhmthhpqdhouhhtpdhhvghlohepmhigphhlrghnhedrmhgrihhlrdhovhhhrdhnvghtpdhinhgvtheptddrtddrtddrtddpmhgrihhlfhhrohhmpegtlhhgsehkrghougdrohhrghdprhgtphhtthhopehpuggvlhesfhgsrdgtohhm Received-SPF: pass client-ip=178.33.105.233; envelope-from=clg@kaod.org; helo=2.mo552.mail-out.ovh.net X-Spam_score_int: -56 X-Spam_score: -5.7 X-Spam_bar: ----- X-Spam_report: (-5.7 / 5.0 requ) BAYES_00=-1.9, NICE_REPLY_A=-3.832, 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.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, andrew@aj.id.au, f4bug@amsat.org, qemu-devel@nongnu.org, patrick@stwcx.xyz, qemu-arm@nongnu.org, joel@jms.id.au Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" On 9/5/21 8:55 PM, pdel@fb.com wrote: > From: Peter Delevoryas > > This adds a new machine type "fuji-bmc" based on the following device tree: > > https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/aspeed-bmc-facebook-fuji.dts > > Most of the i2c devices are not there, they're added here: > > https://github.com/facebook/openbmc/blob/helium/meta-facebook/meta-fuji/recipes-utils/openbmc-utils/files/setup_i2c.sh > > I tested this by building a Fuji image from Facebook's OpenBMC repo, > booting, and ssh'ing from host-to-guest. > > Signed-off-by: Peter Delevoryas There are a few checkpatch warnings that I fixed directly. Anyhow, Reviewed-by: Cédric Le Goater I will wait a little before resending the PR :) I have pushed on my tree [1] the fuji machine and a few fixes for the ADC model. This is still WIP and if you have some ADC tests that come to mind, they would be welcomed. Thanks, C. [1] https://github.com/legoater/qemu/commits/aspeed-6.2 > --- > hw/arm/aspeed.c | 112 ++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 112 insertions(+) > > diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c > index 7a9459340c..cc2d721ac7 100644 > --- a/hw/arm/aspeed.c > +++ b/hw/arm/aspeed.c > @@ -159,6 +159,10 @@ struct AspeedMachineState { > #define RAINIER_BMC_HW_STRAP1 0x00000000 > #define RAINIER_BMC_HW_STRAP2 0x00000000 > > +/* Fuji hardware value */ > +#define FUJI_BMC_HW_STRAP1 0x00000000 > +#define FUJI_BMC_HW_STRAP2 0x00000000 > + > /* > * The max ram region is for firmwares that scan the address space > * with load/store to guess how much RAM the SoC has. > @@ -772,6 +776,90 @@ static void rainier_bmc_i2c_init(AspeedMachineState *bmc) > aspeed_eeprom_init(aspeed_i2c_get_bus(&soc->i2c, 15), 0x50, 64 * KiB); > } > > +static void get_pca9548_channels(I2CBus *bus, uint8_t mux_addr, I2CBus **channels) { > + I2CSlave *mux = i2c_slave_create_simple(bus, "pca9548", mux_addr); > + for (int i = 0; i < 8; i++) { > + channels[i] = pca954x_i2c_get_bus(mux, i); > + } > +} > + > +#define TYPE_LM75 TYPE_TMP105 > +#define TYPE_TMP75 TYPE_TMP105 > +#define TYPE_TMP422 "tmp422" > + > +static void fuji_bmc_i2c_init(AspeedMachineState *bmc) > +{ > + AspeedSoCState *soc = &bmc->soc; > + I2CBus *i2c[144] = {}; > + > + for (int i = 0; i < 16; i++) { > + i2c[i] = aspeed_i2c_get_bus(&soc->i2c, i); > + } > + I2CBus *i2c180 = i2c[2]; > + I2CBus *i2c480 = i2c[8]; > + I2CBus *i2c600 = i2c[11]; > + > + get_pca9548_channels(i2c180, 0x70, &i2c[16]); > + get_pca9548_channels(i2c480, 0x70, &i2c[24]); > + // NOTE: The device tree skips [32, 40) in the alias numbering, so we do > + // the same here. > + get_pca9548_channels(i2c600, 0x77, &i2c[40]); > + get_pca9548_channels(i2c[24], 0x71, &i2c[48]); > + get_pca9548_channels(i2c[25], 0x72, &i2c[56]); > + get_pca9548_channels(i2c[26], 0x76, &i2c[64]); > + get_pca9548_channels(i2c[27], 0x76, &i2c[72]); > + for (int i = 0; i < 8; i++) { > + get_pca9548_channels(i2c[40 + i], 0x76, &i2c[80 + i * 8]); > + } > + > + i2c_slave_create_simple(i2c[17], TYPE_LM75, 0x4c); > + i2c_slave_create_simple(i2c[17], TYPE_LM75, 0x4d); > + > + aspeed_eeprom_init(i2c[19], 0x52, 64 * KiB); > + aspeed_eeprom_init(i2c[20], 0x50, 2 * KiB); > + aspeed_eeprom_init(i2c[22], 0x52, 2 * KiB); > + > + i2c_slave_create_simple(i2c[3], TYPE_LM75, 0x48); > + i2c_slave_create_simple(i2c[3], TYPE_LM75, 0x49); > + i2c_slave_create_simple(i2c[3], TYPE_LM75, 0x4a); > + i2c_slave_create_simple(i2c[3], TYPE_TMP422, 0x4c); > + > + aspeed_eeprom_init(i2c[8], 0x51, 64 * KiB); > + i2c_slave_create_simple(i2c[8], TYPE_LM75, 0x4a); > + > + i2c_slave_create_simple(i2c[50], TYPE_LM75, 0x4c); > + aspeed_eeprom_init(i2c[50], 0x52, 64 * KiB); > + i2c_slave_create_simple(i2c[51], TYPE_TMP75, 0x48); > + i2c_slave_create_simple(i2c[52], TYPE_TMP75, 0x49); > + > + i2c_slave_create_simple(i2c[59], TYPE_TMP75, 0x48); > + i2c_slave_create_simple(i2c[60], TYPE_TMP75, 0x49); > + > + aspeed_eeprom_init(i2c[65], 0x53, 64 * KiB); > + i2c_slave_create_simple(i2c[66], TYPE_TMP75, 0x49); > + i2c_slave_create_simple(i2c[66], TYPE_TMP75, 0x48); > + aspeed_eeprom_init(i2c[68], 0x52, 64 * KiB); > + aspeed_eeprom_init(i2c[69], 0x52, 64 * KiB); > + aspeed_eeprom_init(i2c[70], 0x52, 64 * KiB); > + aspeed_eeprom_init(i2c[71], 0x52, 64 * KiB); > + > + aspeed_eeprom_init(i2c[73], 0x53, 64 * KiB); > + i2c_slave_create_simple(i2c[74], TYPE_TMP75, 0x49); > + i2c_slave_create_simple(i2c[74], TYPE_TMP75, 0x48); > + aspeed_eeprom_init(i2c[76], 0x52, 64 * KiB); > + aspeed_eeprom_init(i2c[77], 0x52, 64 * KiB); > + aspeed_eeprom_init(i2c[78], 0x52, 64 * KiB); > + aspeed_eeprom_init(i2c[79], 0x52, 64 * KiB); > + aspeed_eeprom_init(i2c[28], 0x50, 2 * KiB); > + > + for (int i = 0; i < 8; i++) { > + aspeed_eeprom_init(i2c[81 + i * 8], 0x56, 64 * KiB); > + i2c_slave_create_simple(i2c[82 + i * 8], TYPE_TMP75, 0x48); > + i2c_slave_create_simple(i2c[83 + i * 8], TYPE_TMP75, 0x4b); > + i2c_slave_create_simple(i2c[84 + i * 8], TYPE_TMP75, 0x4a); > + } > +} > + > static bool aspeed_get_mmio_exec(Object *obj, Error **errp) > { > return ASPEED_MACHINE(obj)->mmio_exec; > @@ -1070,6 +1158,26 @@ static void aspeed_machine_rainier_class_init(ObjectClass *oc, void *data) > aspeed_soc_num_cpus(amc->soc_name); > }; > > +static void aspeed_machine_fuji_class_init(ObjectClass *oc, void *data) > +{ > + MachineClass *mc = MACHINE_CLASS(oc); > + AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc); > + > + mc->desc = "Facebook Fuji BMC (Cortex-A7)"; > + amc->soc_name = "ast2600-a3"; > + amc->hw_strap1 = FUJI_BMC_HW_STRAP1; > + amc->hw_strap2 = FUJI_BMC_HW_STRAP2; > + amc->fmc_model = "mx66l1g45g"; > + amc->spi_model = "mx66l1g45g"; > + amc->num_cs = 2; > + amc->macs_mask = ASPEED_MAC3_ON; > + amc->i2c_init = fuji_bmc_i2c_init; > + amc->uart_default = ASPEED_DEV_UART1; > + mc->default_ram_size = 2 * GiB; > + mc->default_cpus = mc->min_cpus = mc->max_cpus = > + aspeed_soc_num_cpus(amc->soc_name); > +}; > + > static const TypeInfo aspeed_machine_types[] = { > { > .name = MACHINE_TYPE_NAME("palmetto-bmc"), > @@ -1119,6 +1227,10 @@ static const TypeInfo aspeed_machine_types[] = { > .name = MACHINE_TYPE_NAME("rainier-bmc"), > .parent = TYPE_ASPEED_MACHINE, > .class_init = aspeed_machine_rainier_class_init, > + }, { > + .name = MACHINE_TYPE_NAME("fuji-bmc"), > + .parent = TYPE_ASPEED_MACHINE, > + .class_init = aspeed_machine_fuji_class_init, > }, { > .name = TYPE_ASPEED_MACHINE, > .parent = TYPE_MACHINE, >