static ssize_t sdram_offsets_show(struct device *dev, struct device_attribute *attr, char *buf) { struct solo6010_dev *solo_dev = container_of(dev, struct solo6010_dev, dev); char *out = buf; out += sprintf(out, "DISP: 0x%08x @ 0x%08x\n", SOLO_DISP_EXT_ADDR(solo_dev), SOLO_DISP_EXT_SIZE); out += sprintf(out, "EOSD: 0x%08x @ 0x%08x (0x%08x * %d)\n", SOLO_EOSD_EXT_ADDR(solo_dev), SOLO_EOSD_EXT_AREA(solo_dev), SOLO_EOSD_EXT_SIZE(solo_dev), SOLO_EOSD_EXT_AREA(solo_dev) / SOLO_EOSD_EXT_SIZE(solo_dev)); out += sprintf(out, "MOTI: 0x%08x @ 0x%08x\n", SOLO_MOTION_EXT_ADDR(solo_dev), SOLO_MOTION_EXT_SIZE); out += sprintf(out, "G723: 0x%08x @ 0x%08x\n", SOLO_G723_EXT_ADDR(solo_dev), SOLO_G723_EXT_SIZE); out += sprintf(out, "CAPT: 0x%08x @ 0x%08x (0x%08x * %d)\n", SOLO_CAP_EXT_ADDR(solo_dev), SOLO_CAP_EXT_SIZE(solo_dev), SOLO_CAP_PAGE_SIZE, SOLO_CAP_EXT_SIZE(solo_dev) / SOLO_CAP_PAGE_SIZE); out += sprintf(out, "EREF: 0x%08x @ 0x%08x (0x%08x * %d)\n", SOLO_EREF_EXT_ADDR(solo_dev), SOLO_EREF_EXT_AREA(solo_dev), SOLO_EREF_EXT_SIZE, SOLO_EREF_EXT_AREA(solo_dev) / SOLO_EREF_EXT_SIZE); out += sprintf(out, "MPEG: 0x%08x @ 0x%08x\n", SOLO_MP4E_EXT_ADDR(solo_dev), SOLO_MP4E_EXT_SIZE(solo_dev)); out += sprintf(out, "JPEG: 0x%08x @ 0x%08x\n", SOLO_JPEG_EXT_ADDR(solo_dev), SOLO_JPEG_EXT_SIZE(solo_dev)); return out - buf; }
static void run_p2m_test(struct solo6010_dev *solo_dev) { unsigned long long errs = 0; u32 size = SOLO_JPEG_EXT_ADDR(solo_dev) + SOLO_JPEG_EXT_SIZE(solo_dev); int i, d; printk(KERN_WARNING "%s: Testing %u bytes of external ram\n", SOLO6010_NAME, size); for (i = 0; i < size; i += TEST_CHUNK_SIZE) for (d = 0; d < 4; d++) errs += p2m_test(solo_dev, d, i, TEST_CHUNK_SIZE); printk(KERN_WARNING "%s: Found %llu errors during p2m test\n", SOLO6010_NAME, errs); return; }