Announcement

Collapse
No announcement yet.

Newer kernels with KMS hangs at boot looking 4 firmware, howto fix?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Newer kernels with KMS hangs at boot looking 4 firmware, howto fix?

    Using newer kernels (2.3.33-rcX) and KMS built into the kernel the kernel will boot and show a message about trying to load the R600_rlc.bin firmware file:

    [drm] Loading RS780 Microcode
    platform radeon_cp.0: firmware: requesting radeon/RS780_pfp.bin
    platform radeon_cp.0: firmware: requesting radeon/RS780_me.bin
    platform radeon_cp.0: firmware: requesting radeon/R600_rlc.bin

    Then it just hangs itself and sits there doing who knows what.

    It appears the file is requested even before /sys is mounted. I found an option to build firmware files into the kernel -- but even then it just hung itself trying to load the firmware file.

    I get the KMS technology working by compiling drm and radeon by modules and loading them by adding radeon and fbcon to /etc/modules.autoload.d/kernel-2.6 and echo "options radeon modeset=1" > /etc/modprobe.d/radeon-kms.conf

    Is there any way I can put R600_rlc.bin into the kernel??? I did try

    CONFIG_FIRMWARE_IN_KERNEL=y
    CONFIG_EXTRA_FIRMWARE="R600_rlc.bin RS780_pfp.bin RS780_me.bin"

    and the files were fetched from the kernels /firmware folder (where I placed them) and compiled into the kernel -- yet loading FAiLED.

    WHY can't the firmware file be stuffed into the kernel (by default would be great), and WHY oh WHY can't I find any source code for this file anywhere when the files header claims that "This is free software; see the source for copying conditions."???

  • #2
    I haven't bothered trying to build it into the kernel yet, but I did have a similar problem to yours (I would get screen blanking when it tried to load R700_rlc.bin during boot and then it'd hang).

    I obtained a copy of R700_rlc.bin and copied it to /lib/firmware/radeon/R700_rlc.bin, and now everything's working for me. I'm not sure if you've tried this or not, but it might be worth a shot (using R600_rlc.bin for you instead of R700_rlc.bin).

    Comment


    • #3
      Originally posted by Veerappan View Post
      I haven't bothered trying to build it into the kernel yet, but I did have a similar problem to yours (I would get screen blanking when it tried to load R700_rlc.bin during boot and then it'd hang).

      I obtained a copy of R700_rlc.bin and copied it to /lib/firmware/radeon/R700_rlc.bin, and now everything's working for me. I'm not sure if you've tried this or not, but it might be worth a shot (using R600_rlc.bin for you instead of R700_rlc.bin).
      I also had this problem when building as modules, and like you, I fixed it by placing the files in /lib/firmware/radeon

      Firmware files can be copied from the kernels firmware/radeon folder, two files are missing, those are available from
      http://people.freedesktop.org/~agd5f/radeon_ucode/ (only the .bin files, no source there)

      However, when you do build it into the kernel then there is no /lib or /sys for that matter since the file is requested _before_ init -- this, nothing is mounted.
      Last edited by xiando; 29 December 2009, 05:30 PM.

      Comment


      • #4
        Originally posted by xiando View Post
        Is there any way I can put R600_rlc.bin into the kernel??? I did try

        CONFIG_FIRMWARE_IN_KERNEL=y
        CONFIG_EXTRA_FIRMWARE="R600_rlc.bin RS780_pfp.bin RS780_me.bin"

        and the files were fetched from the kernels /firmware folder (where I placed them) and compiled into the kernel -- yet loading FAiLED.
        The driver searches for radeon/${name}, did you put the rlc firmware in the correct subdir?

        Originally posted by xiando View Post
        WHY oh WHY can't I find any source code for this file anywhere when the files header claims that "This is free software; see the source for copying conditions."???
        The firmware itself is not open; for the rlc file see

        Comment


        • #5
          Originally posted by xiando View Post
          I also had this problem when building as modules, and like you, I fixed it by placing the files in /lib/firmware/radeon

          Firmware files can be copied from the kernels firmware/radeon folder, two files are missing, those are available from
          http://people.freedesktop.org/~agd5f/radeon_ucode/ (only the .bin files, no source there)

          However, when you do build it into the kernel then there is no /lib or /sys for that matter since the file is requested _before_ init -- this, nothing is mounted.
          You have to put the firmware files into the firmware directory in the kernel source tree or set CONFIG_EXTRA_FIRMWARE_DIR.

          Code:
           CONFIG_EXTRA_FIRMWARE_DIR:                                             
          This option controls the directory in which the kernel build system
          looks for the firmware files listed in the EXTRA_FIRMWARE option.
          The default is the firmware/ directory in the kernel source tree,
          but by changing this option you can point it elsewhere, such as the
          /lib/firmware/ directory or another separate directory containing
          firmware files.
          HTH,
          Sirko

          Comment


          • #6
            I bump the post cause i have the same problem. I'm building a kernel without initrd.

            I set CONFIG_EXTRA_FIRMWARE_DIR="/lib/firmware/radeon"
            CONFIG_EXTRA_FIRMWARE="RS780_me.bin RS780_pfp.bin"
            CONFIG_FIRMWARE_IN_KERNEL=y
            CONFIG_PREVENT_FIRMWARE_BUILD disabled.

            CONFIG_FIRMWARE_IN_KERNEL was set as y as well. It says something about "make firmware_install" but i guess it's enough with building the .bin files into the kernel.

            Now, after installed, when i try to boot from it, it hangs after print
            [drm] Loading RS780 Microcode

            Comment


            • #7
              Damn 1 minute edit time limit.

              I'm using Arch x64 and this is the PKGBUILD I'm using:

              Code:
              pkgname=kernel26-custom
              basekernel=2.6.37
              pkgver=2.6.37
              pkgrel=7
              pkgdesc="My custom kernel"
              arch=('i686' 'x86_64')
              license=('GPL')
              url="http://www.kernel.org"
              depends=('module-init-tools' 'mkinitcpio')
              provides=(kernel26)
              install=kernel26.install
              
              build() {
                LOCAL_VERSION="$(grep "CONFIG_LOCALVERSION=" $startdir/.config | sed 's/.*"\(.*\)"/\1/')"
              
                cd ..
                make || return 1
                mkdir -p $startdir/pkg/{lib/modules,boot}
                make INSTALL_MOD_PATH=$startdir/pkg modules_install || return 1
              
                # There's no separation of firmware depending on kernel version - 
                # comment this line if you intend on using the built kernel exclusively,
                # otherwise there'll be file conflicts with the existing kernel
                rm -rf $startdir/pkg/lib/firmware
              
                install -Dm644 "System.map" "$startdir/pkg/boot/System.map26$LOCAL_VERSION"
                install -Dm644 "arch/x86/boot/bzImage" "$startdir/pkg/boot/vmlinuz26$LOCAL_VERSION"
              
                # Change the version strings in kernel26.install
                sed -i \
                      -e "s/KERNEL_VERSION=.*/KERNEL_VERSION=\"$basekernel\"/" \
                      -e "s/LOCAL_VERSION=.*/LOCAL_VERSION=\"$LOCAL_VERSION\"/" \
                      $startdir/kernel26.install
              }

              Comment


              • #8
                Originally posted by Viper_Scull View Post
                CONFIG_EXTRA_FIRMWARE="RS780_me.bin RS780_pfp.bin"
                You need three microcode files, not two. There should be a _rlc file as well.
                Test signature

                Comment


                • #9
                  Thanks for the tip.

                  I added R700_rlc.bin and R600_rlc.bin (just in case), but still happening the same.

                  Actually it never said

                  platform radeon_cp.0: firmware: requesting radeon/RS780_pfp.bin
                  platform radeon_cp.0: firmware: requesting radeon/RS780_me.bin
                  platform radeon_cp.0: firmware: requesting radeon/R600_rlc.bin


                  just hangs after printing
                  [drm] Loading RS780 Microcode

                  Comment


                  • #10
                    See "Troubleshooting Extra Firmware" section on:

                    Comment

                    Working...
                    X