RE: [RFC PATCH 10/15] sd: emmc: Update CID structure for eMMC
Hi Alistair > -Original Message- > From: Alistair Francis > Sent: Saturday, February 13, 2021 3:41 AM > To: Sai Pavan Boddu > Cc: Markus Armbruster ; Kevin Wolf > ; Max Reitz ; Vladimir Sementsov- > Ogievskiy ; Eric Blake ; > Joel Stanley ; Cédric Le Goater ; Vincent > Palatin ; Dr. David Alan Gilbert > ; Thomas Huth ; Stefan Hajnoczi > ; Peter Maydell ; Alistair > Francis ; Edgar Iglesias ; Luc > Michel ; Paolo Bonzini ; > Sai Pavan Boddu ; qemu-de...@nongnu.org Developers > ; Qemu-block > 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 > wrote: > > > > CID structure is little different for eMMC, w.r.t to product name and > > manufacturing date. > > > > Signed-off-by: Sai Pavan Boddu > > Signed-off-by: Edgar E. Iglesias > > --- > > 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 > > > >
Re: [RFC PATCH 10/15] sd: emmc: Update CID structure for eMMC
On Thu, Feb 11, 2021 at 12:30 AM Sai Pavan Boddu wrote: > > CID structure is little different for eMMC, w.r.t to product name and > manufacturing date. > > Signed-off-by: Sai Pavan Boddu > Signed-off-by: Edgar E. Iglesias > --- > 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. 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 > >
[RFC PATCH 10/15] sd: emmc: Update CID structure for eMMC
CID structure is little different for eMMC, w.r.t to product name and manufacturing date. Signed-off-by: Sai Pavan Boddu Signed-off-by: Edgar E. Iglesias --- 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]; +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