]> git.proxmox.com Git - mirror_edk2.git/blame - EmbeddedPkg/Universal/MmcDxe/MmcDebug.c
UefiCpuPkg: Move AsmRelocateApLoopStart from Mpfuncs.nasm to AmdSev.nasm
[mirror_edk2.git] / EmbeddedPkg / Universal / MmcDxe / MmcDebug.c
CommitLineData
4ca3c688
OM
1/** @file\r
2*\r
3* Copyright (c) 2011-2013, ARM Limited. All rights reserved.\r
4*\r
878b807a 5* SPDX-License-Identifier: BSD-2-Clause-Patent\r
4ca3c688
OM
6*\r
7**/\r
8\r
9#include "Mmc.h"\r
10\r
e7108d0e
MK
11#if !defined (MDEPKG_NDEBUG)\r
12CONST CHAR8 *mStrUnit[] = {\r
13 "100kbit/s", "1Mbit/s", "10Mbit/s", "100MBit/s",\r
14 "Unknown", "Unknown", "Unknown", "Unknown"\r
15};\r
16CONST CHAR8 *mStrValue[] = {\r
17 "1.0", "1.2", "1.3", "1.5", "2.0", "2.5", "3.0", "3.5", "4.0", "4.5", "5.0",\r
18 "Unknown", "Unknown", "Unknown", "Unknown"\r
19};\r
4ca3c688
OM
20#endif\r
21\r
22VOID\r
23PrintCID (\r
e7108d0e 24 IN UINT32 *Cid\r
4ca3c688
OM
25 )\r
26{\r
a1878955
MK
27 DEBUG ((DEBUG_ERROR, "- PrintCID\n"));\r
28 DEBUG ((DEBUG_ERROR, "\t- Manufacturing date: %d/%d\n", (Cid[0] >> 8) & 0xF, (Cid[0] >> 12) & 0xFF));\r
29 DEBUG ((DEBUG_ERROR, "\t- Product serial number: 0x%X%X\n", Cid[1] & 0xFFFFFF, (Cid[0] >> 24) & 0xFF));\r
30 DEBUG ((DEBUG_ERROR, "\t- Product revision: %d\n", Cid[1] >> 24));\r
e7108d0e 31 // DEBUG ((DEBUG_ERROR, "\t- Product name: %s\n", (char*)(Cid + 2)));\r
a1878955 32 DEBUG ((DEBUG_ERROR, "\t- OEM ID: %c%c\n", (Cid[3] >> 8) & 0xFF, (Cid[3] >> 16) & 0xFF));\r
4ca3c688
OM
33}\r
34\r
4ca3c688
OM
35VOID\r
36PrintCSD (\r
e7108d0e 37 IN UINT32 *Csd\r
4ca3c688
OM
38 )\r
39{\r
e7108d0e 40 UINTN Value;\r
4ca3c688
OM
41\r
42 if (((Csd[2] >> 30) & 0x3) == 0) {\r
a1878955 43 DEBUG ((DEBUG_ERROR, "- PrintCSD Version 1.01-1.10/Version 2.00/Standard Capacity\n"));\r
4ca3c688 44 } else if (((Csd[2] >> 30) & 0x3) == 1) {\r
a1878955 45 DEBUG ((DEBUG_ERROR, "- PrintCSD Version 2.00/High Capacity\n"));\r
4ca3c688 46 } else {\r
a1878955 47 DEBUG ((DEBUG_ERROR, "- PrintCSD Version Higher than v3.3\n"));\r
4ca3c688
OM
48 }\r
49\r
a1878955 50 DEBUG ((DEBUG_ERROR, "\t- Supported card command class: 0x%X\n", MMC_CSD_GET_CCC (Csd)));\r
e7108d0e
MK
51 DEBUG ((DEBUG_ERROR, "\t- Speed: %a %a\n", mStrValue[(MMC_CSD_GET_TRANSPEED (Csd) >> 3) & 0xF], mStrUnit[MMC_CSD_GET_TRANSPEED (Csd) & 7]));\r
52 DEBUG ((DEBUG_ERROR, "\t- Maximum Read Data Block: %d\n", 2 << (MMC_CSD_GET_READBLLEN (Csd)-1)));\r
53 DEBUG ((DEBUG_ERROR, "\t- Maximum Write Data Block: %d\n", 2 << (MMC_CSD_GET_WRITEBLLEN (Csd)-1)));\r
4ca3c688
OM
54\r
55 if (!MMC_CSD_GET_FILEFORMATGRP (Csd)) {\r
56 Value = MMC_CSD_GET_FILEFORMAT (Csd);\r
57 if (Value == 0) {\r
a1878955 58 DEBUG ((DEBUG_ERROR, "\t- Format (0): Hard disk-like file system with partition table\n"));\r
4ca3c688 59 } else if (Value == 1) {\r
a1878955 60 DEBUG ((DEBUG_ERROR, "\t- Format (1): DOS FAT (floppy-like) with boot sector only (no partition table)\n"));\r
4ca3c688 61 } else if (Value == 2) {\r
a1878955 62 DEBUG ((DEBUG_ERROR, "\t- Format (2): Universal File Format\n"));\r
4ca3c688 63 } else {\r
a1878955 64 DEBUG ((DEBUG_ERROR, "\t- Format (3): Others/Unknown\n"));\r
4ca3c688
OM
65 }\r
66 } else {\r
a1878955 67 DEBUG ((DEBUG_ERROR, "\t- Format: Reserved\n"));\r
4ca3c688
OM
68 }\r
69}\r
70\r
71VOID\r
72PrintRCA (\r
e7108d0e 73 IN UINT32 Rca\r
4ca3c688
OM
74 )\r
75{\r
a1878955
MK
76 DEBUG ((DEBUG_ERROR, "- PrintRCA: 0x%X\n", Rca));\r
77 DEBUG ((DEBUG_ERROR, "\t- Status: 0x%X\n", Rca & 0xFFFF));\r
78 DEBUG ((DEBUG_ERROR, "\t- RCA: 0x%X\n", (Rca >> 16) & 0xFFFF));\r
4ca3c688
OM
79}\r
80\r
81VOID\r
82PrintOCR (\r
e7108d0e 83 IN UINT32 Ocr\r
4ca3c688
OM
84 )\r
85{\r
e7108d0e
MK
86 UINTN MinV;\r
87 UINTN MaxV;\r
88 UINTN Volts;\r
89 UINTN Loop;\r
4ca3c688
OM
90\r
91 MinV = 36; // 3.6\r
92 MaxV = 20; // 2.0\r
93 Volts = 20; // 2.0\r
94\r
95 // The MMC register bits [23:8] indicate the working range of the card\r
96 for (Loop = 8; Loop < 24; Loop++) {\r
97 if (Ocr & (1 << Loop)) {\r
98 if (MinV > Volts) {\r
99 MinV = Volts;\r
100 }\r
e7108d0e 101\r
4ca3c688
OM
102 if (MaxV < Volts) {\r
103 MaxV = Volts + 1;\r
104 }\r
105 }\r
e7108d0e 106\r
4ca3c688
OM
107 Volts++;\r
108 }\r
109\r
e7108d0e 110 DEBUG ((DEBUG_ERROR, "- PrintOCR Ocr (0x%X)\n", Ocr));\r
a1878955 111 DEBUG ((DEBUG_ERROR, "\t- Card operating voltage: %d.%d to %d.%d\n", MinV/10, MinV % 10, MaxV/10, MaxV % 10));\r
4ca3c688 112 if (((Ocr >> 29) & 3) == 0) {\r
a1878955 113 DEBUG ((DEBUG_ERROR, "\t- AccessMode: Byte Mode\n"));\r
4ca3c688 114 } else {\r
a1878955 115 DEBUG ((DEBUG_ERROR, "\t- AccessMode: Block Mode (0x%X)\n", ((Ocr >> 29) & 3)));\r
4ca3c688
OM
116 }\r
117\r
118 if (Ocr & MMC_OCR_POWERUP) {\r
a1878955 119 DEBUG ((DEBUG_ERROR, "\t- PowerUp\n"));\r
4ca3c688 120 } else {\r
a1878955 121 DEBUG ((DEBUG_ERROR, "\t- Voltage Not Supported\n"));\r
4ca3c688
OM
122 }\r
123}\r
124\r
125VOID\r
126PrintResponseR1 (\r
e7108d0e 127 IN UINT32 Response\r
4ca3c688
OM
128 )\r
129{\r
a1878955 130 DEBUG ((DEBUG_INFO, "Response: 0x%X\n", Response));\r
4ca3c688 131 if (Response & MMC_R0_READY_FOR_DATA) {\r
a1878955 132 DEBUG ((DEBUG_INFO, "\t- READY_FOR_DATA\n"));\r
4ca3c688
OM
133 }\r
134\r
135 switch ((Response >> 9) & 0xF) {\r
e7108d0e
MK
136 case 0:\r
137 DEBUG ((DEBUG_INFO, "\t- State: Idle\n"));\r
138 break;\r
139 case 1:\r
140 DEBUG ((DEBUG_INFO, "\t- State: Ready\n"));\r
141 break;\r
142 case 2:\r
143 DEBUG ((DEBUG_INFO, "\t- State: Ident\n"));\r
144 break;\r
145 case 3:\r
146 DEBUG ((DEBUG_INFO, "\t- State: StandBy\n"));\r
147 break;\r
148 case 4:\r
149 DEBUG ((DEBUG_INFO, "\t- State: Tran\n"));\r
150 break;\r
151 case 5:\r
152 DEBUG ((DEBUG_INFO, "\t- State: Data\n"));\r
153 break;\r
154 case 6:\r
155 DEBUG ((DEBUG_INFO, "\t- State: Rcv\n"));\r
156 break;\r
157 case 7:\r
158 DEBUG ((DEBUG_INFO, "\t- State: Prg\n"));\r
159 break;\r
160 case 8:\r
161 DEBUG ((DEBUG_INFO, "\t- State: Dis\n"));\r
162 break;\r
163 default:\r
164 DEBUG ((DEBUG_INFO, "\t- State: Reserved\n"));\r
165 break;\r
4ca3c688
OM
166 }\r
167}\r