[Xorg-driver-geode] A question about the gtf setting
FrankR.Huang at amd.com
Fri Oct 15 01:42:45 PDT 2010
Learn much! See below.
By the way, any good document to describe CRTC?
> If the panel only supports 1024x600 at 60hz, just add that mode in the
> probe() function for your LVDS output and reject the other modes in
> the mode_valid() function unless your panel hw has a scaler in which
> case you should be able to support the additional modes. See
> RADEONProbeOutputModes() in radeon_modes.c for how we add modes for
> different output types.
Ok. RADEONProbeOutputModes() is called by radeon_get_modes(). It is *_get_mode() function and similar like lx_output_get_modes(). Seems radeon_add_common_modes() function will use xf86CVTMode() to calculate the modes driver adds.
> When I say panel, I'm generally talking about integrated flat panels
> (e.g., the panels on laptops). LCD monitors connected via DVI or VGA
> have an EDID and generally support other non-native modes due to
> having a built in scaler in the monitor. As for the LVDS panel
> timing, on radeon, we have potentially two places where that
> information is stored: 1. there is an LVDS info table in the vbios
> that includes the panel size and timing, and 2. some laptops have a
> panel EDID. There should be some method to get that information on
Ok. LVDS panel is the panel that generally need a fixed mode to support without a scaler while VGA&&DVI is vice versa. Geode has some VG_FT_nnnn registers to keep the panel's size. But it is not panel EDID. I will ask Marshall for more on TSDB.
> PLL is the clock generator for the crtc; it takes a reference
> frequency and through a set of dividers, generates the requested pixel
> clock for the mode. The encoder is the part of the display pipeline
> that takes the bit stream from the crtc and encodes it in the proper
> format for the selected connector (LVDS, TMDS, etc.). See this blog
> post I wrote for more information in the display pipeline on radeon:
Ok. I have read the summary on the link above and know what the CRTC is. For geode, it is in display controller while my work before are main in graphics processor. I think much crtc_xxx functions in struct xf86CrtcFuncsRec are for this part.
> Yes. LCD panels generally have a fixed size and timing; this timing
> is considered the native mode of the panel. In order to support
> non-native modes, you need a scaler which will scale up (or down in
> some cases) the in coming data to the native panel size. The panel
> always gets native timing. For LVDS, the GPU usually has a scaler to
> handle non-native modes. For VGA/DVI LCD monitors, the monitor
> generally has a scaler that scales the incoming mode to the native
Very Clear now on scaler use now! I found that geode has an scaler too. I think it is used for convert the non-native modes to native modes for LVDS panel.
> RMX (RadioMetric eXpansion) is the name of the scaler on older radeon
> hw. The LVDS panel's native mode is pulled from either the vbios LVDS
> info table or from the panel's EDID if it has one. In the
> mode_valid() function, we reject modes that are larger than the panel
> (MODE_PANEL), but we allow modes smaller than the panel since the RMX
> unit can scale those modes up to the native mode size. When setting
> the mode, we always program the native mode. If requested mode is
> smaller than the native mode, we also set up the RMX unit. You give
> the RMX unit the requested size and the native size and a few other
> parameters and it scales the image up.
IF RMX is off, there is no scaler. So reject other non-native modes. Got it.
More information about the Xorg-driver-geode