From owner-dev-commits-src-main@freebsd.org Sat Jun 19 17:07:00 2021 Return-Path: Delivered-To: dev-commits-src-main@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 37CA565D06E; Sat, 19 Jun 2021 17:07:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4G6hzS17Bkz4VNP; Sat, 19 Jun 2021 17:07:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 059B519EF8; Sat, 19 Jun 2021 17:07:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 15JH6xTG013573; Sat, 19 Jun 2021 17:06:59 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 15JH6xJI013572; Sat, 19 Jun 2021 17:06:59 GMT (envelope-from git) Date: Sat, 19 Jun 2021 17:06:59 GMT Message-Id: <202106191706.15JH6xJI013572@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Emmanuel Vadot Subject: git: 6506efea63f5 - main - mmccam: Read the common members of CSD v1.0 and v2.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: manu X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6506efea63f5a52d62ceea4bc18b8faf8a037ff3 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-main@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for the main branch of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 19 Jun 2021 17:07:00 -0000 The branch main has been updated by manu: URL: https://cgit.FreeBSD.org/src/commit/?id=6506efea63f5a52d62ceea4bc18b8faf8a037ff3 commit 6506efea63f5a52d62ceea4bc18b8faf8a037ff3 Author: Emmanuel Vadot AuthorDate: 2021-06-17 16:11:04 +0000 Commit: Emmanuel Vadot CommitDate: 2021-06-19 17:06:54 +0000 mmccam: Read the common members of CSD v1.0 and v2.0 And only get the differents ones based on the version. No functional changes intented. Sponsored by: Diablotin Systems --- sys/cam/mmc/mmc_da.c | 63 +++++++++++++++++++--------------------------------- 1 file changed, 23 insertions(+), 40 deletions(-) diff --git a/sys/cam/mmc/mmc_da.c b/sys/cam/mmc/mmc_da.c index 8deba8ccfaff..e41792dcebc1 100644 --- a/sys/cam/mmc/mmc_da.c +++ b/sys/cam/mmc/mmc_da.c @@ -284,20 +284,30 @@ mmc_decode_csd_sd(uint32_t *raw_csd, struct mmc_csd *csd) memset(csd, 0, sizeof(*csd)); csd->csd_structure = v = mmc_get_bits(raw_csd, 128, 126, 2); + + /* Common members between 1.0 and 2.0 */ + m = mmc_get_bits(raw_csd, 128, 115, 4); + e = mmc_get_bits(raw_csd, 128, 112, 3); + csd->tacc = (exp[e] * mant[m] + 9) / 10; + csd->nsac = mmc_get_bits(raw_csd, 128, 104, 8) * 100; + m = mmc_get_bits(raw_csd, 128, 99, 4); + e = mmc_get_bits(raw_csd, 128, 96, 3); + csd->tran_speed = exp[e] * 10000 * mant[m]; + csd->ccc = mmc_get_bits(raw_csd, 128, 84, 12); + csd->read_bl_len = 1 << mmc_get_bits(raw_csd, 128, 80, 4); + csd->read_bl_partial = mmc_get_bits(raw_csd, 128, 79, 1); + csd->write_blk_misalign = mmc_get_bits(raw_csd, 128, 78, 1); + csd->read_blk_misalign = mmc_get_bits(raw_csd, 128, 77, 1); + csd->dsr_imp = mmc_get_bits(raw_csd, 128, 76, 1); + csd->erase_blk_en = mmc_get_bits(raw_csd, 128, 46, 1); + csd->erase_sector = mmc_get_bits(raw_csd, 128, 39, 7) + 1; + csd->wp_grp_size = mmc_get_bits(raw_csd, 128, 32, 7); + csd->wp_grp_enable = mmc_get_bits(raw_csd, 128, 31, 1); + csd->r2w_factor = 1 << mmc_get_bits(raw_csd, 128, 26, 3); + csd->write_bl_len = 1 << mmc_get_bits(raw_csd, 128, 22, 4); + csd->write_bl_partial = mmc_get_bits(raw_csd, 128, 21, 1); + if (v == 0) { - m = mmc_get_bits(raw_csd, 128, 115, 4); - e = mmc_get_bits(raw_csd, 128, 112, 3); - csd->tacc = (exp[e] * mant[m] + 9) / 10; - csd->nsac = mmc_get_bits(raw_csd, 128, 104, 8) * 100; - m = mmc_get_bits(raw_csd, 128, 99, 4); - e = mmc_get_bits(raw_csd, 128, 96, 3); - csd->tran_speed = exp[e] * 10000 * mant[m]; - csd->ccc = mmc_get_bits(raw_csd, 128, 84, 12); - csd->read_bl_len = 1 << mmc_get_bits(raw_csd, 128, 80, 4); - csd->read_bl_partial = mmc_get_bits(raw_csd, 128, 79, 1); - csd->write_blk_misalign = mmc_get_bits(raw_csd, 128, 78, 1); - csd->read_blk_misalign = mmc_get_bits(raw_csd, 128, 77, 1); - csd->dsr_imp = mmc_get_bits(raw_csd, 128, 76, 1); csd->vdd_r_curr_min = cur_min[mmc_get_bits(raw_csd, 128, 59, 3)]; csd->vdd_r_curr_max = cur_max[mmc_get_bits(raw_csd, 128, 56, 3)]; csd->vdd_w_curr_min = cur_min[mmc_get_bits(raw_csd, 128, 53, 3)]; @@ -305,36 +315,9 @@ mmc_decode_csd_sd(uint32_t *raw_csd, struct mmc_csd *csd) m = mmc_get_bits(raw_csd, 128, 62, 12); e = mmc_get_bits(raw_csd, 128, 47, 3); csd->capacity = ((1 + m) << (e + 2)) * csd->read_bl_len; - csd->erase_blk_en = mmc_get_bits(raw_csd, 128, 46, 1); - csd->erase_sector = mmc_get_bits(raw_csd, 128, 39, 7) + 1; - csd->wp_grp_size = mmc_get_bits(raw_csd, 128, 32, 7); - csd->wp_grp_enable = mmc_get_bits(raw_csd, 128, 31, 1); - csd->r2w_factor = 1 << mmc_get_bits(raw_csd, 128, 26, 3); - csd->write_bl_len = 1 << mmc_get_bits(raw_csd, 128, 22, 4); - csd->write_bl_partial = mmc_get_bits(raw_csd, 128, 21, 1); } else if (v == 1) { - m = mmc_get_bits(raw_csd, 128, 115, 4); - e = mmc_get_bits(raw_csd, 128, 112, 3); - csd->tacc = (exp[e] * mant[m] + 9) / 10; - csd->nsac = mmc_get_bits(raw_csd, 128, 104, 8) * 100; - m = mmc_get_bits(raw_csd, 128, 99, 4); - e = mmc_get_bits(raw_csd, 128, 96, 3); - csd->tran_speed = exp[e] * 10000 * mant[m]; - csd->ccc = mmc_get_bits(raw_csd, 128, 84, 12); - csd->read_bl_len = 1 << mmc_get_bits(raw_csd, 128, 80, 4); - csd->read_bl_partial = mmc_get_bits(raw_csd, 128, 79, 1); - csd->write_blk_misalign = mmc_get_bits(raw_csd, 128, 78, 1); - csd->read_blk_misalign = mmc_get_bits(raw_csd, 128, 77, 1); - csd->dsr_imp = mmc_get_bits(raw_csd, 128, 76, 1); csd->capacity = ((uint64_t)mmc_get_bits(raw_csd, 128, 48, 22) + 1) * 512 * 1024; - csd->erase_blk_en = mmc_get_bits(raw_csd, 128, 46, 1); - csd->erase_sector = mmc_get_bits(raw_csd, 128, 39, 7) + 1; - csd->wp_grp_size = mmc_get_bits(raw_csd, 128, 32, 7); - csd->wp_grp_enable = mmc_get_bits(raw_csd, 128, 31, 1); - csd->r2w_factor = 1 << mmc_get_bits(raw_csd, 128, 26, 3); - csd->write_bl_len = 1 << mmc_get_bits(raw_csd, 128, 22, 4); - csd->write_bl_partial = mmc_get_bits(raw_csd, 128, 21, 1); } else panic("unknown SD CSD version"); }