Hi Alistair > -----Original Message----- > From: Alistair Francis <alistai...@gmail.com> > Sent: Saturday, February 13, 2021 3:41 AM > To: Sai Pavan Boddu <saip...@xilinx.com> > Cc: Markus Armbruster <arm...@redhat.com>; Kevin Wolf > <kw...@redhat.com>; Max Reitz <mre...@redhat.com>; Vladimir Sementsov- > Ogievskiy <vsement...@virtuozzo.com>; Eric Blake <ebl...@redhat.com>; > Joel Stanley <j...@jms.id.au>; Cédric Le Goater <c...@kaod.org>; Vincent > Palatin <vpala...@chromium.org>; Dr. David Alan Gilbert > <dgilb...@redhat.com>; Thomas Huth <th...@redhat.com>; Stefan Hajnoczi > <stefa...@redhat.com>; Peter Maydell <peter.mayd...@linaro.org>; Alistair > Francis <alistair.fran...@wdc.com>; Edgar Iglesias <edg...@xilinx.com>; Luc > Michel <luc.mic...@greensocs.com>; Paolo Bonzini <pbonz...@redhat.com>; > Sai Pavan Boddu <saip...@xilinx.com>; qemu-devel@nongnu.org Developers > <qemu-devel@nongnu.org>; Qemu-block <qemu-bl...@nongnu.org> > Subject: Re: [RFC PATCH 10/15] sd: emmc: Update CID structure for eMMC > > On Thu, Feb 11, 2021 at 12:30 AM Sai Pavan Boddu > <sai.pavan.bo...@xilinx.com> wrote: > > > > CID structure is little different for eMMC, w.r.t to product name and > > manufacturing date. > > > > Signed-off-by: Sai Pavan Boddu <sai.pavan.bo...@xilinx.com> > > Signed-off-by: Edgar E. Iglesias <edgar.igles...@xilinx.com> > > --- > > hw/sd/sd.c | 52 +++++++++++++++++++++++++++++++++++----------------- > > 1 file changed, 35 insertions(+), 17 deletions(-) > > > > diff --git a/hw/sd/sd.c b/hw/sd/sd.c > > index 7aab647..45311fa 100644 > > --- a/hw/sd/sd.c > > +++ b/hw/sd/sd.c > > @@ -345,23 +345,41 @@ static void sd_set_scr(SDState *sd) > > > > static void sd_set_cid(SDState *sd) > > { > > - sd->cid[0] = MID; /* Fake card manufacturer ID (MID) */ > > - sd->cid[1] = OID[0]; /* OEM/Application ID (OID) */ > > - sd->cid[2] = OID[1]; > > - sd->cid[3] = PNM[0]; /* Fake product name (PNM) */ > > - sd->cid[4] = PNM[1]; > > - sd->cid[5] = PNM[2]; > > - sd->cid[6] = PNM[3]; > > - sd->cid[7] = PNM[4]; > > - sd->cid[8] = PRV; /* Fake product revision (PRV) */ > > - sd->cid[9] = 0xde; /* Fake serial number (PSN) */ > > - sd->cid[10] = 0xad; > > - sd->cid[11] = 0xbe; > > - sd->cid[12] = 0xef; > > - sd->cid[13] = 0x00 | /* Manufacture date (MDT) */ > > - ((MDT_YR - 2000) / 10); > > - sd->cid[14] = ((MDT_YR % 10) << 4) | MDT_MON; > > - sd->cid[15] = (sd_crc7(sd->cid, 15) << 1) | 1; > > + if (sd->emmc) { > > + sd->cid[0] = MID; > > + sd->cid[1] = 0x1; /* CBX */ > > + sd->cid[2] = OID[0]; /* OEM/Application ID (OID) */ > > + sd->cid[3] = PNM[0]; /* Fake product name (PNM) 48bit */ > > + sd->cid[4] = PNM[1]; > > + sd->cid[5] = PNM[2]; > > + sd->cid[6] = PNM[3]; > > + sd->cid[7] = PNM[4]; > > Aren't the majority of these the same between the two cases? It's probably > cleaner to split them out then. [Sai Pavan Boddu] Yes, I would try to re-order. If I see only the PNM fields are same, rest all fields kind of moved a byte below.
Regards, Sai Pavan > > Alistair > > > + sd->cid[8] = 0x0; > > + sd->cid[9] = PRV; /* Fake product revision (PRV) */ > > + sd->cid[10] = 0xde; /* Fake serial number (PSN) */ > > + sd->cid[11] = 0xad; > > + sd->cid[12] = 0xbe; > > + sd->cid[13] = 0xef; > > + sd->cid[14] = ((MDT_YR - 1997) % 0x10); /* MDT */ > > + } else { > > + sd->cid[0] = MID; /* Fake card manufacturer ID (MID) */ > > + sd->cid[1] = OID[0]; /* OEM/Application ID (OID) */ > > + sd->cid[2] = OID[1]; > > + sd->cid[3] = PNM[0]; /* Fake product name (PNM) 40bit */ > > + sd->cid[4] = PNM[1]; > > + sd->cid[5] = PNM[2]; > > + sd->cid[6] = PNM[3]; > > + sd->cid[7] = PNM[4]; > > + sd->cid[8] = PRV; /* Fake product revision (PRV) */ > > + sd->cid[9] = 0xde; /* Fake serial number (PSN) */ > > + sd->cid[10] = 0xad; > > + sd->cid[11] = 0xbe; > > + sd->cid[12] = 0xef; > > + sd->cid[13] = 0x00 | /* Manufacture date (MDT) */ > > + ((MDT_YR - 2000) / 10); > > + sd->cid[14] = ((MDT_YR % 10) << 4) | MDT_MON; > > + } > > + sd->cid[15] = (sd_crc7(sd->cid, 15) << 1) | 1; > > } > > > > #define HWBLOCK_SHIFT 9 /* 512 bytes */ > > -- > > 2.7.4 > > > >