NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: port-alpha/48431: radeonfb fails to initialize on Alpha Station DS15 and Alpha Station XP1000



The following reply was made to PR port-alpha/48431; it has been noted by GNATS.

From: Izumi Tsutsui <tsutsui%ceres.dti.ne.jp@localhost>
To: gnats-bugs%NetBSD.org@localhost
Cc: netbsd-bugs%netbsd.org@localhost, tsutsui%ceres.dti.ne.jp@localhost
Subject: Re: port-alpha/48431: radeonfb fails to initialize on Alpha Station
         DS15 and Alpha Station XP1000
Date: Tue, 14 Jan 2014 01:46:11 +0900

 > I'm a beginner.
 > Please rewite for NetBSD style.
 > 
 > diff -Naru src.orig/sys/arch/alpha/alpha/dec_6600.c 
 > src/sys/arch/alpha/alpha/dec_6600.c
 > --- src.orig/sys/arch/alpha/alpha/dec_6600.c 2012-02-06 11:14:11.000000000 
 > +0900
 > +++ src/sys/arch/alpha/alpha/dec_6600.c      2013-12-03 01:53:01.000000000 
 > +0900
 > @@ -196,11 +196,16 @@
 >  static void
 >  dec_6600_device_register(device_t dev, void *aux)
 >  {
 > +        struct ctb *ctb;
 > +        device_t pdev;
 > +        prop_dictionary_t dict;
 >      static int found, initted, diskboot, netboot;
 >      static device_t primarydev, pcidev, ctrlrdev;
 >      struct bootdev_data *b = bootdev_data;
 >      device_t parent = device_parent(dev);
 >  
 > +        ctb = (struct ctb *)(((char *)hwrpb) + hwrpb->rpb_ctb_off);
 > +
 >      if (found)
 >              return;
 >  
 > @@ -370,6 +375,13 @@
 >              DR_VERBOSE(printf("booted_device = %s\n", device_xname(dev)));
 >              found = 1;
 >      }
 > +
 > +        if (ctb->ctb_term_type == CTB_GRAPHICS) {
 > +                if ((pdev = device_parent(dev)) != NULL && 
 > device_is_a(pdev, "pci")) {
 > +                        dict = device_properties(dev);
 > +                        prop_dictionary_set_bool(dict, "is_console", 1);
 > +                }
 > +        }
 >  }
 
 The current machine dependent device_register() function
 only checks boot device.
 
 If we'll add different checks to set device properties,
 we have to add them before current boot device check
 otherwise the function returns after boot device is found
 (though usually boot device will be found after any PCI devices
 because they are probed after interrupts are enabled).
 
 To set the "is_console" property for radeon (and other possible
 pci display drivers like machfb), we have to check not only
 the parent "pci" but also whether the device is actually display.
 Could you try this diff?
 
 Index: dec_6600.c
 ===================================================================
 RCS file: /cvsroot/src/sys/arch/alpha/alpha/dec_6600.c,v
 retrieving revision 1.34
 diff -u -p -r1.34 dec_6600.c
 --- dec_6600.c 13 Oct 2012 17:58:54 -0000      1.34
 +++ dec_6600.c 13 Jan 2014 16:18:09 -0000
 @@ -201,6 +201,21 @@ dec_6600_device_register(device_t dev, v
        struct bootdev_data *b = bootdev_data;
        device_t parent = device_parent(dev);
  
 +      /* set properties for PCI framebuffers */
 +      if (parent != NULL && device_is_a(parent, "pci")) {
 +              struct pci_attach_args *pa = aux;
 +              struct ctb *ctb;
 +              prop_dictionary_t dict;
 +
 +              ctb = (struct ctb *)(((char *)hwrpb) + hwrpb->rpb_ctb_off);
 +              if (PCI_CLASS(pa->pa_class) == PCI_CLASS_DISPLAY &&
 +                  ctb->ctb_term_type == CTB_GRAPHICS) {
 +                      dict = device_properties(dev);
 +                      prop_dictionary_set_bool(dict, "is_console", true);
 +              }
 +      }
 +
 +      /* check boot device */
        if (found)
                return;
  
 ---
 
 I wonder if we should prepare a separate common device_register(9)
 function which can be shared among all machines that have PCI bus,
 but it's a future improvement.
 
 > I think that need ALPHA_PHYS_TO_K0SEG.
 > Because direct-mapped addresses.
 > 
 > diff -Naru src.orig/sys/arch/alpha/pci/pci_bwx_bus_mem_chipdep.c 
 > src/sys/arch/alpha/pci/pci_bwx_bus_mem_chipdep.c
 > --- src.orig/sys/arch/alpha/pci/pci_bwx_bus_mem_chipdep.c    2012-02-06 
 > 11:14:15.000000000 +0900
 > +++ src/sys/arch/alpha/pci/pci_bwx_bus_mem_chipdep.c 2013-12-01 
 > 21:33:43.000000000 +0900
 > @@ -500,7 +500,7 @@
 >      int flags)
 >  {
 >  
 > -    return (alpha_btop(CHIP_MEM_SYS_START(v) + addr + off));
 > +        return (alpha_btop(ALPHA_PHYS_TO_K0SEG(CHIP_MEM_SYS_START(v) + addr 
 > + off)));
 >  }
 >  
 >  static inline void
 
 I've committed the similar fix for this part. Thanks.
 
 > Please define RADEONFB_DEPTH_32!
 > If undefined RADEONFB_DEPTH_32, X window system is broken.
 > Please see https://twitter.com/nullnilaki/status/407561289502703616/photo/1
  :
 > Please do not use radeonfb_set_backlight function.
 > Because Display blackout.
 > Use radeonfb_set_backlight function version.
 > Please see http://twitpic.com/dnd9h7
 > Do not use radeonfb_set_backlight function version.
 > http://twitpic.com/dndawd
 
 Can you any info why we need DEPTH_32 and
 how does radeonfb_set_backlight() function fail?
 
 Probably we should also handle these quirks by
 device properties for now, rather than ugly ifdefs.
 
 > If you use X Window System, apply this patch and build.sh -x and use "wsfb" 
 > driver at xorg.conf
 > 
 > diff -Naru src.orig/share/mk/bsd.own.mk src/share/mk/bsd.own.mk
 > --- src.orig/share/mk/bsd.own.mk     2012-11-25 04:45:11.000000000 +0900
 > +++ src/share/mk/bsd.own.mk  2013-12-01 21:31:07.000000000 +0900
 > @@ -847,7 +847,6 @@
 >  #
 >  .if \
 >      ${MACHINE} == "acorn32" || \
 > -    ${MACHINE} == "alpha"   || \
 >      ${MACHINE} == "amiga"   || \
 >      ${MACHINE} == "ews4800mips"     || \
 >      ${MACHINE} == "mac68k"  || \
 
 IIRC the alpha port still sticks X11R6 (XFree) based server
 for PCI TGA and TURBOchannel SFB/HFB/TFB etc.
 
 Probably it's time to switch alpha port to Xorg server
 (I guess TGA and SFB has fewer users and will also work
 with wsfb driver), but it should be discussed on port-alpha@.
 
 ---
 Izumi Tsutsui
 


Home | Main Index | Thread Index | Old Index