On 06/17/21 01:22, Andrew Fish via groups.io wrote:
> 
> 
>> On Jun 16, 2021, at 2:45 PM, David F. <df7...@gmail.com> wrote:
>>
>> Also, I found if there are 2 GOP handles and you change the mode of
>> one, the other one doesn't reflect the change (but still doesn't solve
>> anything with the original question), are you supposed to set the mode
>> on every handle to keep that part in sync?
>>
> 
> A common implementation is to have the Conspliter [1] driver that produces 
> virtual handles that aggregate how many actual devices you have and manages 
> policy. 
> 
> You should grab the protocols on the gST->ConsoleOutHandle as these are the 
> Spec defined active console devices. 
> 
> 
> In terms on Simple Text Output Protocol on Graphics this is the default 
> driver in edk2 [2]. These are the config knobs you can set from your DSC file 
> to control defaults. 
> 
> [Pcd]
>   gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution ## 
> SOMETIMES_CONSUMES
>   gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution   ## 
> SOMETIMES_CONSUMES
>   gEfiMdeModulePkgTokenSpaceGuid.PcdConOutRow                 ## 
> SOMETIMES_CONSUMES
>   gEfiMdeModulePkgTokenSpaceGuid.PcdConOutColumn              ## 
> SOMETIMES_CONSUMES
> Note: If you have serial active that may mess with the Conspliter and force 
> it to pick a lower resolution since it has to find the best match between the 
> serial and graphics Simple Text In. So try the Graphics without the serial 
> terminal connect to see if it does different stuff. 

Regarding the serial terminal aspect, we discussed the following patch (maybe: 
workaround?) for that, many years ago, off-list:

diff --git a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c 
b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
index a98b690c8b95..ded5513c74a7 100644
--- a/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
+++ b/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
@@ -115,9 +115,44 @@ TERMINAL_DEV  mTerminalDevTemplate = {
 };
 
 TERMINAL_CONSOLE_MODE_DATA mTerminalConsoleModeData[] = {
-  {80,  25},
-  {80,  50},
-  {100, 31},
+  {   80,  25 }, // from graphics resolution  640 x  480
+  {   80,  50 }, // from graphics resolution  640 x  960
+  {  100,  25 }, // from graphics resolution  800 x  480
+  {  100,  31 }, // from graphics resolution  800 x  600
+  {  104,  32 }, // from graphics resolution  832 x  624
+  {  120,  33 }, // from graphics resolution  960 x  640
+  {  128,  31 }, // from graphics resolution 1024 x  600
+  {  128,  40 }, // from graphics resolution 1024 x  768
+  {  144,  45 }, // from graphics resolution 1152 x  864
+  {  144,  45 }, // from graphics resolution 1152 x  870
+  {  160,  37 }, // from graphics resolution 1280 x  720
+  {  160,  40 }, // from graphics resolution 1280 x  760
+  {  160,  40 }, // from graphics resolution 1280 x  768
+  {  160,  42 }, // from graphics resolution 1280 x  800
+  {  160,  50 }, // from graphics resolution 1280 x  960
+  {  160,  53 }, // from graphics resolution 1280 x 1024
+  {  170,  40 }, // from graphics resolution 1360 x  768
+  {  170,  40 }, // from graphics resolution 1366 x  768
+  {  175,  55 }, // from graphics resolution 1400 x 1050
+  {  180,  47 }, // from graphics resolution 1440 x  900
+  {  200,  47 }, // from graphics resolution 1600 x  900
+  {  200,  63 }, // from graphics resolution 1600 x 1200
+  {  210,  55 }, // from graphics resolution 1680 x 1050
+  {  240,  56 }, // from graphics resolution 1920 x 1080
+  {  240,  63 }, // from graphics resolution 1920 x 1200
+  {  240,  75 }, // from graphics resolution 1920 x 1440
+  {  250, 105 }, // from graphics resolution 2000 x 2000
+  {  256,  80 }, // from graphics resolution 2048 x 1536
+  {  256, 107 }, // from graphics resolution 2048 x 2048
+  {  320,  75 }, // from graphics resolution 2560 x 1440
+  {  320,  84 }, // from graphics resolution 2560 x 1600
+  {  320, 107 }, // from graphics resolution 2560 x 2048
+  {  350, 110 }, // from graphics resolution 2800 x 2100
+  {  400, 126 }, // from graphics resolution 3200 x 2400
+  {  480, 113 }, // from graphics resolution 3840 x 2160
+  {  512, 113 }, // from graphics resolution 4096 x 2160
+  {  960, 227 }, // from graphics resolution 7680 x 4320
+  { 1024, 227 }, // from graphics resolution 8192 x 4320
   //
   // New modes can be added here.
   //

but the discussion didn't go anywhere over several months, so we've been 
carrying this patch downstream-only ever since.

Thanks
Laszlo

> 
> 
> [1] 
> https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/ConSplitterDxe
>  
> <https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/ConSplitterDxe>
> 
> [2] 
> https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/GraphicsConsoleDxe
>  
> <https://github.com/tianocore/edk2/tree/master/MdeModulePkg/Universal/Console/GraphicsConsoleDxe>
> 
> 
> Thanks,
> 
> Andrew Fish
> 
>> On Tue, Jun 15, 2021 at 11:33 PM David F. via groups.io
>> <df7729=gmail....@groups.io> wrote:
>>>
>>> Hello,
>>>
>>> I've found that most implementation of UEFI don't automatically change
>>> the resolution when setting the mode with STOP (Simple Text Output
>>> Protocol) .  You can use GOP to change it after the mode but that
>>> causes other problems.  For example, using surface pro 7 in this case,
>>> with 4K screen.  The default text mode is 342x96 which puts it in
>>> 2736x1824 mode which you'd expect and the text is tiny.  But now you
>>> set the mode to 0 which is 80x25 and it actually sets the mode to
>>> 2736x1824 if not already in that resolution and uses a 80x25 area in
>>> the center of the screen, still tiny text you can hardly read.  If you
>>> then say you want GOP in 640x480 mode (which is available as GOP mode
>>> 1 on this system, it will make the font larger but you can't see
>>> anything because it's still offset to the middle of the 2736x1824 area
>>> and you're only seeing the 640x480 upper left of that area on the
>>> screen.   Likewise if you have it in 342x96 so it's fully in the upper
>>> left corner of the screen and change the mode to say 800x600
>>> (available as GOP mode 2 on this system) it will make the text
>>> readable but the text can go off the screen in both directions because
>>> it's still 342x96 when the 100x31 STOP mode would be the correct one
>>> (which happens to be mode 2 on this system).
>>>
>>> Shouldn't setting the STOP mode handle adjusting the resolution since
>>> that's the main reason you want to change the mode so the size shown
>>> on the screen changes to something you can read.
>>>
>>> Any tricks? I've tried a bunch of things, resetting the controller,
>>> using the Reset() protocol function, and other things but nothing
>>> works.  As soon as you use STOP to set the mode, it is back to high
>>> resolution and using an area centered in the screen and changing the
>>> resolution after that leaves it in the area centered in the high res
>>> screen and not in the upper left area.
>>>
>>> Thanks.
>>>
>>
>>
>>
>>
>>
> 
> 
> 
> 
> 
> 
> 



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#76926): https://edk2.groups.io/g/devel/message/76926
Mute This Topic: https://groups.io/mt/83575008/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to