[PATCH 3/6] avivotool: error out unless there is exactly one control and fb region
Alex Deucher
alexdeucher at gmail.com
Tue Feb 21 06:45:48 PST 2012
On Tue, Feb 21, 2012 at 2:45 AM, Jonathan Nieder <jrnieder at gmail.com> wrote:
> Just like radeontool, avivotool should not blindly fall back to
> region 0 when the expected memory areas cannot be found. Noticed by
> code inspection. (Compare commits 51a87cf0 and 7e3e9808.)
region 0 is always the frame buffer and region 2 is always mmio.
radeontool and avivotool should be cleaned up the same way radeonreg
is.
Alex
>
> Signed-off-by: Jonathan Nieder <jrnieder at gmail.com>
> ---
> avivotool.c | 29 ++++++++++++++++++++++-------
> 1 files changed, 22 insertions(+), 7 deletions(-)
>
> diff --git a/avivotool.c b/avivotool.c
> index 9a01a9fd..62f96a8e 100644
> --- a/avivotool.c
> +++ b/avivotool.c
> @@ -57,7 +57,7 @@ int reg_type[0x8001];
> /* Not the address but what it points to is volatile. */
> struct pci_device *avivo_device = NULL;
> RADEONCardInfo *card_info = NULL;
> -unsigned int ctrl_region, fb_region;
> +int ctrl_region = -1, fb_region = -1;
> unsigned char * volatile ctrl_mem;
> unsigned char * volatile fb_mem;
>
> @@ -1846,14 +1846,29 @@ static int map_radeon_mem(void)
> }
>
> for (i = 0; i < 6; i++) {
> - if (device->regions[i].size == 64 * 1024)
> + if (device->regions[i].size == 64 * 1024 ||
> + device->regions[i].size == 128 * 1024 ||
> + device->regions[i].size == 256 * 1024) {
> + if (ctrl_region != -1) {
> + printf("cannot distinguish ctrl region\n");
> + return -1;
> + }
> ctrl_region = i;
> - else if (device->regions[i].size == 128 * 1024)
> - ctrl_region = i;
> - else if (device->regions[i].size == 256 * 1024)
> - ctrl_region = i;
> - else if (device->regions[i].size >= 128 * 1024 * 1024)
> + } else if (device->regions[i].size >= 128 * 1024 * 1024) {
> + if (fb_region != -1) {
> + printf("cannot distinguish fb region\n");
> + return -1;
> + }
> fb_region = i;
> + }
> + }
> + if (ctrl_region == -1) {
> + printf("cannot find ctrl region\n");
> + return -1;
> + }
> + if (fb_region == -1) {
> + printf("cannot find fb region\n");
> + return -1;
> }
> avivo_device = device;
> if(skip-- == 0) {
> --
> 1.7.9.1
>
> _______________________________________________
> xorg-driver-ati mailing list
> xorg-driver-ati at lists.x.org
> http://lists.x.org/mailman/listinfo/xorg-driver-ati
More information about the xorg-driver-ati
mailing list