I meant 0x07dc07e0 not 0x07dc0x07e0 for sure... 04.09.2013, 22:34, "Alex Ivanov" <gnidorah@xxxxxxxxx>: > 02.09.2013, в 18:10, John David Anglin <dave.anglin@xxxxxxxx> написал(а): > >> You don't think it ran briefly and crashed? >> >> I have a thought. The code that loads the microcode appears to be trying to load in 32-bit hunks. Maybe >> we have a 64-bit path on the bus and we need to load the firmware in 64-bit words. >> >> Dave >> -- >> John David Anglin dave.anglin@xxxxxxxx > > Dave, > > Am i understood you right? > > --- r100.c.orig 2013-09-04 16:53:28.000000000 +0000 > +++ r100.c 2013-09-04 18:28:23.000000000 +0000 > @@ -1049,9 +1049,13 @@ static int r100_cp_init_microcode(struct > return err; > } > > +#define RADEON_CP_ME_RAM_DATAHL 0x07dc0x07e0 > + > +void r100_mm_wregq(struct radeon_device *rdev, uint64_t reg, uint64_t v, > + bool always_indirect); > static void r100_cp_load_microcode(struct radeon_device *rdev) > { > - const __be32 *fw_data; > + const __be64 *fw_data; > int i, size; > > if (r100_gui_wait_for_idle(rdev)) { > @@ -1060,14 +1064,12 @@ static void r100_cp_load_microcode(struc > } > > if (rdev->me_fw) { > - size = rdev->me_fw->size / 4; > - fw_data = (const __be32 *)&rdev->me_fw->data[0]; > + size = rdev->me_fw->size / 8; > + fw_data = (const __be64 *)&rdev->me_fw->data[0]; > WREG32(RADEON_CP_ME_RAM_ADDR, 0); > - for (i = 0; i < size; i += 2) { > - WREG32(RADEON_CP_ME_RAM_DATAH, > - be32_to_cpup(&fw_data[i])); > - WREG32(RADEON_CP_ME_RAM_DATAL, > - be32_to_cpup(&fw_data[i + 1])); > + for (i = 0; i < size; i += 1) { > + r100_mm_wregq(rdev, RADEON_CP_ME_RAM_DATAHL, > + be64_to_cpup(&fw_data[i]), false); > } > } > } > @@ -4078,6 +4080,21 @@ void r100_mm_wreg(struct radeon_device * > } > } > > +void r100_mm_wregq(struct radeon_device *rdev, uint64_t reg, uint64_t v, > + bool always_indirect) > +{ > + if (reg < rdev->rmmio_size && !always_indirect) > + writeq(v, ((void __iomem *)rdev->rmmio) + reg); > + else { > + unsigned long flags; > + > + spin_lock_irqsave(&rdev->mmio_idx_lock, flags); > + writeq(reg, ((void __iomem *)rdev->rmmio) + RADEON_MM_INDEX); > + writeq(v, ((void __iomem *)rdev->rmmio) + RADEON_MM_DATA); > + spin_unlock_irqrestore(&rdev->mmio_idx_lock, flags); > + } > +} > + > u32 r100_io_rreg(struct radeon_device *rdev, u32 reg) > { > if (reg < rdev->rio_mem_size) > > I'm not sure if this correct, but it didn't help.-- > To unsubscribe from this list: send the line "unsubscribe linux-parisc" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-parisc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html