From patchwork Tue Feb 2 15:23:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Anderson X-Patchwork-Id: 1434781 X-Patchwork-Delegate: lukma@denx.de Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=secospa.onmicrosoft.com header.i=@secospa.onmicrosoft.com header.a=rsa-sha256 header.s=selector2-secospa-onmicrosoft-com header.b=FA+qpQOV; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4DVTBg49KRz9tT8 for ; Wed, 3 Feb 2021 02:24:43 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 8297E8269F; Tue, 2 Feb 2021 16:24:29 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (1024-bit key; unprotected) header.d=secospa.onmicrosoft.com header.i=@secospa.onmicrosoft.com header.b="FA+qpQOV"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 9658780829; Tue, 2 Feb 2021 16:24:25 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,FORGED_SPF_HELO,MSGID_FROM_MTA_HEADER,RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on20605.outbound.protection.outlook.com [IPv6:2a01:111:f400:7e1b::605]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id C159F80829 for ; Tue, 2 Feb 2021 16:24:22 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=seco.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=sean.anderson@seco.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eVZR+kwkWDSFTj4hpgdusDf4lPuW02gJ59r1+Qnl/R1412YWbvmka77aJuWd9nYjIpy5diO9DgTjO89wUhOmuBVptLyFjeiNIzlOZ+r1Bgh14/K5mLGRCBvSyYHAypmia7/cssivEhk05n74rpQCho9KdyG0B6JYyKsG26fEcRHo17Ke0/XVH2hzWXTVjynw5WYbJpregGeNl6hmyx+eE+duIOJrT7eVE+CukEXpyI6NK4hPbSZZcC8lstsQy9djNfy0POmhFnvMataIYWB6TFwUIBp917yBj/QnAoSj5uZpj2DE/eaTzd3JCUmfMds0RuZzJoa1U9gG904cwrsBLw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BM0y18CTXCv3ks7mMHXWWBs4Fy7b5cE3IwDf1sT3Rz8=; b=Nve4LRHyueYAgnXV6LE9jV4VVVuvyb0JVH9rGehKQbcqQul4//fvRQR/ZiprV3Dpq3aZ/qp8yKfFeXuer+p5cC4y5Ul/kQWlT4bFEEeZEOdzbgZVeNpdNcfBplbryjJ6kC5OIYGgkGTk+c4lZgwol0tGhNTg5NG2pr+TmSM6TXw8Bnid3mz/XNaD5U+hGQsxN7z4rWc2shbgEHJNDEfFZH/C6b6K8Xiwm4Kb1qlugd+RETjB1LkS3Uztctx/5nnLxR/c/+trCDcNBoNqBk7IGuemTsOfqlMccg2c+b/pkR39XXyACXermU5uO2o5GI8I/IXvl4dHMQKaEPGbn8kh8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=seco.com; dmarc=pass action=none header.from=seco.com; dkim=pass header.d=seco.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=secospa.onmicrosoft.com; s=selector2-secospa-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BM0y18CTXCv3ks7mMHXWWBs4Fy7b5cE3IwDf1sT3Rz8=; b=FA+qpQOVfCQpm3F9ywVmZibimc73RDL9w2P8fdLMbD9XgFRgllIF2ebpdSzFzKrO8ojkDCmEldl3f5cWCx4xH32t3Kq+NKtrNBe2yAMNgID21PX6LKcCO2x2c9Aab2L9vPpFrMghvz0+M4N3chCLx75DUEF/uDejuNa7Ac6j5eA= Authentication-Results: lists.denx.de; dkim=none (message not signed) header.d=none;lists.denx.de; dmarc=none action=none header.from=seco.com; Received: from AM9PR03MB7251.eurprd03.prod.outlook.com (2603:10a6:20b:26e::16) by VI1PR0302MB2816.eurprd03.prod.outlook.com (2603:10a6:800:e4::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3805.19; Tue, 2 Feb 2021 15:24:21 +0000 Received: from AM9PR03MB7251.eurprd03.prod.outlook.com ([fe80::a8f2:7dd:46e5:8526]) by AM9PR03MB7251.eurprd03.prod.outlook.com ([fe80::a8f2:7dd:46e5:8526%6]) with mapi id 15.20.3805.028; Tue, 2 Feb 2021 15:24:21 +0000 From: Sean Anderson To: u-boot@lists.denx.de Cc: Lukasz Majewski , Simon Glass , Sean Anderson , Peng Fan Subject: [PATCH v4 1/9] mmc: sandbox: Add support for writing Date: Tue, 2 Feb 2021 10:23:44 -0500 Message-Id: <20210202152352.33245-2-sean.anderson@seco.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210202152352.33245-1-sean.anderson@seco.com> References: <20210202152352.33245-1-sean.anderson@seco.com> X-Originating-IP: [50.195.82.171] X-ClientProxiedBy: BL1PR13CA0432.namprd13.prod.outlook.com (2603:10b6:208:2c3::17) To AM9PR03MB7251.eurprd03.prod.outlook.com (2603:10a6:20b:26e::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from plantagenet.inhand.com (50.195.82.171) by BL1PR13CA0432.namprd13.prod.outlook.com (2603:10b6:208:2c3::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3825.16 via Frontend Transport; Tue, 2 Feb 2021 15:24:20 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ee2e5a73-03ee-4ae3-b45c-08d8c78e9d69 X-MS-TrafficTypeDiagnostic: VI1PR0302MB2816: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4941; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: RMDRUpFNuMrGI56uBjeyYDy++V54Yg7nD1aps6hmyQvNXWA0j+WXELXHfcOzEbOdcKrVDcxniFbIrw5rfzYcrrjYn1PxvUvDgJ4TX+fpisbcS/CZpK8j7p3LUi3aCIdfTK4QI2zH6IsSd65VLRhcRMgRnqbFvwz/O75nTpmElh5VgQ2151GeKFcWvOHBPyknLyiccT3p7w7Uf5KK5QEm6MHZ7NsjhA3jdX/FQVokTS7cKebNVJmrnW7ZLlL6sP9zPfYTMhKUSQb4iJxG+82wXCFTOmYKzzjZdxc+L10f/iMV2gKpJLI4AUGqU2SYMXqbzzEc3P8uhq/MV8UG7rEcV49zfyBCXrugbW9RXi9KRr5CcuicIxl7tUNRHIxGkbdM77w0qJiDxwli1lKrHb5ye6istbi8Vx8+Gt7RdFc1pAGyygZe1Yr4aFH2jfXpGpCPxGbXSaUGmdoWtS0Jrgb+7pdzH6IZs4NrGU2hvRu3P1lXY51bfZs3WtwOtJAPakSRQe1awekznOLX4ATvkNrmP/ja+n53o6OGkksLh+bbHg/bk2zpZdg9kEwEd6FWIBHv X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM9PR03MB7251.eurprd03.prod.outlook.com; PTR:; CAT:NONE; SFS:(376002)(396003)(346002)(39850400004)(366004)(136003)(54906003)(6512007)(1076003)(6916009)(316002)(478600001)(66476007)(66556008)(6666004)(5660300002)(16526019)(66946007)(2616005)(83380400001)(6506007)(2906002)(6486002)(52116002)(186003)(44832011)(4326008)(956004)(36756003)(8676002)(8936002)(86362001)(26005)(21314003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 6z2qZvYyR7bFSlUTjUqThpOgPAgTx655IRZkggQzNItb0qC1LrBxnOYRslFc3byJEu1o7pALGuvQ0MS9Obd2ftf+SN7LarIAeQ4mCHkYaelaS0VXYdyoFZDWMwMx05qMhZX0IpgDUHcxb4vxAH8JEkKmG7w3DvTIHMM3vLmaVchYIpK6tQIqiAcO4uB0FpVLRjcfHNFwS1yG73HFUCjmm7Z2p1l02Fj/7aja7vW3HSX7KtZd35+LnjjHFb/ZhI9AIoh3l6n8BcEGmil/USBDEV5iNXnwtGzMZCVq/zR484wXt23Hjcg058bYO63e0isICJSvvGcknS0lXheuhyLbzMdzKXiArWTS3r9kHAeDfAcipCDcb2FuVlNts9DWcXdz4722kNEY9dk9/oqV1Z+hLUYcyfbVOH0foMTD8+4FLUg4uHkYyf8iHcoWffQ4J6RYKmoEOFGE59gSOrVNQDzfjY4Fwbkvwv3dGkC2hTo8mF4jbY4ZwfIKpJAbTArKyJOvY6yvMigilHFt96qbolyxjdh7LzHtaPxtRaB1KFXj4ehuSwRMPcUxkQYSgK54kxtnIsGTBp1w1iYXojC4osBnua1Ouwu4eNw3N+xA8SXKD2+VP/zyydfzqfghZYg6DkrJy+x9ZBTYDTFftPxicffJwv7FWtjO/YFVFy6LPapFZp+u6eroYVG3Ay3YpRvN9KHNm1L+tTo6FxsbRZTlLLQhb8S4T8/WX0ioa+g6Y7J81t3kwgaoObTB2UH+u1BzGgh2C8jeWI6EWYrdHOl+wwZxXbxYhey+z8nkE3e0dZFHu4oZUCleEGHqvjZTNyPIQ6wIaAELnrKD1ZmwogFfF5QusQ08SZYLkmW2v6xnSli9TUF3rlGxQoIG4dHMeSCxqcKbaXVzaVJZBPd9NinChOmhffPk1ifbdObbOxJgKkwaSelCgVvksNFAj+2FyJFvGlo81S4ZQyAAnQg/96eEn6f1j1cNLWD0j7Qt9feThyBV32PmAjZqYOhQYrhGetw+EFuk4ynZdbsPZjMmkbDhr5SwDGGWvo5Jst/yeRnbecyZS/ubByHuysq/7JxfK29kGe39 X-OriginatorOrg: seco.com X-MS-Exchange-CrossTenant-Network-Message-Id: ee2e5a73-03ee-4ae3-b45c-08d8c78e9d69 X-MS-Exchange-CrossTenant-AuthSource: AM9PR03MB7251.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2021 15:24:21.4234 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bebe97c3-6438-442e-ade3-ff17aa50e733 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8ScFv/KWXdxVyQQAK3cc89xC/jPXvrsge3Vl836UqFE/gB7gKZi3KQIgK40O95G2TAlMn1YXYAeaL5HQSX/6zQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0302MB2816 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.34 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.102.3 at phobos.denx.de X-Virus-Status: Clean This adds support writing to the sandbox mmc backed by an in-memory buffer. The unit test has been updated to test reading, writing, and erasing. I'm not sure what MMCs erase to; I picked 0, but if it's 0xFF then that can be easily changed. Signed-off-by: Sean Anderson Reviewed-by: Simon Glass --- Changes in v4: - xxx_auto_alloc_size -> xxx_auto drivers/mmc/sandbox_mmc.c | 43 +++++++++++++++++++++++++++++++++------ test/dm/mmc.c | 19 ++++++++++++----- 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/drivers/mmc/sandbox_mmc.c b/drivers/mmc/sandbox_mmc.c index 8a2391d651..18ba020aac 100644 --- a/drivers/mmc/sandbox_mmc.c +++ b/drivers/mmc/sandbox_mmc.c @@ -17,6 +17,17 @@ struct sandbox_mmc_plat { struct mmc mmc; }; +#define MMC_CSIZE 0 +#define MMC_CMULT 8 /* 8 because the card is high-capacity */ +#define MMC_BL_LEN_SHIFT 10 +#define MMC_BL_LEN BIT(MMC_BL_LEN_SHIFT) +#define MMC_CAPACITY (((MMC_CSIZE + 1) << (MMC_CMULT + 2)) \ + * MMC_BL_LEN) /* 1 MiB */ + +struct sandbox_mmc_priv { + u8 buf[MMC_CAPACITY]; +}; + /** * sandbox_mmc_send_cmd() - Emulate SD commands * @@ -26,6 +37,10 @@ struct sandbox_mmc_plat { static int sandbox_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, struct mmc_data *data) { + struct sandbox_mmc_priv *priv = dev_get_priv(dev); + struct mmc *mmc = mmc_get_mmc_dev(dev); + static ulong erase_start, erase_end; + switch (cmd->cmdidx) { case MMC_CMD_ALL_SEND_CID: memset(cmd->response, '\0', sizeof(cmd->response)); @@ -44,8 +59,9 @@ static int sandbox_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, break; case MMC_CMD_SEND_CSD: cmd->response[0] = 0; - cmd->response[1] = 10 << 16; /* 1 << block_len */ - cmd->response[2] = 0; + cmd->response[1] = (MMC_BL_LEN_SHIFT << 16) | + ((MMC_CSIZE >> 16) & 0x3f); + cmd->response[2] = (MMC_CSIZE & 0xffff) << 16; cmd->response[3] = 0; break; case SD_CMD_SWITCH_FUNC: { @@ -59,13 +75,27 @@ static int sandbox_mmc_send_cmd(struct udevice *dev, struct mmc_cmd *cmd, break; } case MMC_CMD_READ_SINGLE_BLOCK: - memset(data->dest, '\0', data->blocksize); - break; case MMC_CMD_READ_MULTIPLE_BLOCK: - strcpy(data->dest, "this is a test"); + memcpy(data->dest, &priv->buf[cmd->cmdarg * data->blocksize], + data->blocks * data->blocksize); + break; + case MMC_CMD_WRITE_SINGLE_BLOCK: + case MMC_CMD_WRITE_MULTIPLE_BLOCK: + memcpy(&priv->buf[cmd->cmdarg * data->blocksize], data->src, + data->blocks * data->blocksize); break; case MMC_CMD_STOP_TRANSMISSION: break; + case SD_CMD_ERASE_WR_BLK_START: + erase_start = cmd->cmdarg; + break; + case SD_CMD_ERASE_WR_BLK_END: + erase_end = cmd->cmdarg; + break; + case MMC_CMD_ERASE: + memset(&priv->buf[erase_start * mmc->write_bl_len], '\0', + (erase_end - erase_start + 1) * mmc->write_bl_len); + break; case SD_CMD_APP_SEND_OP_COND: cmd->response[0] = OCR_BUSY | OCR_HCS; cmd->response[1] = 0; @@ -148,5 +178,6 @@ U_BOOT_DRIVER(mmc_sandbox) = { .bind = sandbox_mmc_bind, .unbind = sandbox_mmc_unbind, .probe = sandbox_mmc_probe, - .plat_auto = sizeof(struct sandbox_mmc_plat), + .priv_auto = sizeof(struct sandbox_mmc_priv), + .plat_auto = sizeof(struct sandbox_mmc_plat), }; diff --git a/test/dm/mmc.c b/test/dm/mmc.c index 4e5136c850..f744452ff2 100644 --- a/test/dm/mmc.c +++ b/test/dm/mmc.c @@ -29,16 +29,25 @@ static int dm_test_mmc_blk(struct unit_test_state *uts) { struct udevice *dev; struct blk_desc *dev_desc; - char cmp[1024]; + int i; + char write[1024], read[1024]; ut_assertok(uclass_get_device(UCLASS_MMC, 0, &dev)); ut_assertok(blk_get_device_by_str("mmc", "0", &dev_desc)); - /* Read a few blocks and look for the string we expect */ + /* Write a few blocks and verify that we get the same data back */ ut_asserteq(512, dev_desc->blksz); - memset(cmp, '\0', sizeof(cmp)); - ut_asserteq(2, blk_dread(dev_desc, 0, 2, cmp)); - ut_assertok(strcmp(cmp, "this is a test")); + for (i = 0; i < sizeof(write); i++) + write[i] = i; + ut_asserteq(2, blk_dwrite(dev_desc, 0, 2, write)); + ut_asserteq(2, blk_dread(dev_desc, 0, 2, read)); + ut_asserteq_mem(write, read, sizeof(write)); + + /* Now erase them */ + memset(write, '\0', sizeof(write)); + ut_asserteq(2, blk_derase(dev_desc, 0, 2)); + ut_asserteq(2, blk_dread(dev_desc, 0, 2, read)); + ut_asserteq_mem(write, read, sizeof(write)); return 0; }