static void fix_sizes(void)
{
	if (machine_is_msm7625a_surf() || machine_is_msm7625a_ffa()) {
		reserve_mdp_size 	= MSM7x25A_MSM_RESERVE_MDP_SIZE;
		reserve_adsp_size 	= MSM7x25A_MSM_RESERVE_ADSP_SIZE;
	} else {
		reserve_mdp_size 	= MSM_RESERVE_MDP_SIZE;
		reserve_adsp_size 	= MSM_RESERVE_ADSP_SIZE;
	}

	if (get_ddr_size() > SZ_512M)
		reserve_adsp_size 	= CAMERA_ZSL_SIZE;
#ifdef CONFIG_ION_MSM
		msm_ion_audio_size 	= MSM_RESERVE_AUDIO_SIZE;
		msm_ion_sf_size 	= reserve_mdp_size;
#ifdef CONFIG_CMA
       if (get_ddr_size() > SZ_256M)
                reserve_adsp_size = CAMERA_ZSL_SIZE;
	msm_ion_camera_size = reserve_adsp_size;
        msm_ion_camera_size_carving = 0;
#else
        msm_ion_camera_size = reserve_adsp_size;
        msm_ion_camera_size_carving = msm_ion_camera_size;
#endif
#endif
}
Exemple #2
0
void load_frame(char* filepath) {
    if (access(filepath, F_OK) == -1) {
        printf("%s not found!", filepath);
        exit(1);
    }

    FILE* fp = fopen(filepath, "rb");

    // get the size

    fseek(fp, 0, SEEK_END);
    long fsize = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    // validate size

    if (get_ddr_size() < fsize) {
        int ddrSize = get_ddr_size();
        printf("The size of shared memory is too small! Need %d bytes but only have %d.\n", (int)fsize, ddrSize);
        
        if (ddrSize < 8 * 1024 * 1024)
            printf("Shared memory is smaller than the maximum of 8 megabytes. Has the hardware been initialized?\n");

        exit(1);
    }

    // read the file
    uint32_t* fileData = (uint32_t*)malloc(fsize);
    fread(fileData, fsize, 1, fp);
    fclose(fp);

    if (fsize % BYTE_SIZE_SLICE != 0) {
        printf("LED data needs to be divisible by the size of a slice (%d bytes).\n", BYTE_SIZE_SLICE);
        exit(1);
    }

    sliceCount = fsize / BYTE_SIZE_SLICE;

    // copy the data into shared memory

    for (int slice = 0; slice < sliceCount; slice++) {
        for (int row = 0; row < NUM_ROWS; row++) {
            int index = 4 * 32 * (NUM_ROWS * slice + row);
            reorientBits(fileData + index);
        }
    }

    memcpy(ddrMem, fileData, fsize);

    free(fileData);
}
Exemple #3
0
static void fix_sizes(void)
{
	if (machine_is_msm7625a_surf() || machine_is_msm7625a_ffa()) {
		pmem_mdp_size = MSM7x25A_MSM_PMEM_MDP_SIZE;
		pmem_adsp_size = MSM7x25A_MSM_PMEM_ADSP_SIZE;
	} else {
		pmem_mdp_size = MSM_PMEM_MDP_SIZE;
		pmem_adsp_size = MSM_PMEM_ADSP_SIZE;
	}

	if (get_ddr_size() > SZ_512M)
		pmem_adsp_size = CAMERA_ZSL_SIZE;

#ifdef CONFIG_ION_MSM
	msm_ion_audio_size = MSM_PMEM_AUDIO_SIZE;
	msm_ion_sf_size = pmem_mdp_size;
#ifdef CONFIG_CMA
	msm_ion_camera_size = CAMERA_ZSL_SIZE;
	msm_ion_camera_size_carving = 0;
#else
	msm_ion_camera_size = pmem_adsp_size;
	msm_ion_camera_size_carving = msm_ion_camera_size;
#endif
#endif
}
static void fix_sizes(void)
{
	if (get_ddr_size() > SZ_512M)
		pmem_adsp_size = CAMERA_ZSL_SIZE;
#ifdef CONFIG_ION_MSM
	msm_ion_camera_size = pmem_adsp_size;
	msm_ion_audio_size = (MSM_PMEM_AUDIO_SIZE + PMEM_KERNEL_EBI1_SIZE);
	msm_ion_sf_size = pmem_mdp_size;
#endif
}
static void fix_sizes(void)
{
	if (get_ddr_size() > SZ_512M)
		reserve_adsp_size = CAMERA_ZSL_SIZE;
#ifdef CONFIG_ION_MSM
	msm_ion_camera_size = reserve_adsp_size;
	msm_ion_audio_size = (MSM_RESERVE_AUDIO_SIZE +
						RESERVE_KERNEL_EBI1_SIZE);
	msm_ion_sf_size = reserve_mdp_size;
#endif
}
Exemple #6
0
void init_memory() {
    // open memory device
    mem_fd = open("/dev/mem", O_RDWR | O_SYNC);
    if (mem_fd < 0) {
        printf("Failed to open /dev/mem (%s)\n", strerror(errno));
        exit(1);
    }

    // map the shared DDR memory
    uint32_t size = get_ddr_size();
    uint32_t* address = get_ddr_address();
    ddrMem = (uint32_t*)mmap(0, size, PROT_WRITE | PROT_READ, MAP_SHARED, mem_fd, (int)address);

    if (ddrMem == NULL) {
        printf("Failed to map the device (%s)\n", strerror(errno));
        close(mem_fd);
        exit(1);
    }
}
static void fix_sizes(void)
{
	if (machine_is_msm7625a_surf() || machine_is_msm7625a_ffa()) {
		pmem_mdp_size = MSM7x25A_MSM_PMEM_MDP_SIZE;
		pmem_adsp_size = MSM7x25A_MSM_PMEM_ADSP_SIZE;
	} else {
		pmem_mdp_size = MSM_PMEM_MDP_SIZE;
		pmem_adsp_size = get_pmem_adsp_size();
		printk("pmem_adsp_size=%08x\n",pmem_adsp_size);
	}

	if (get_ddr_size() > SZ_512M)
		pmem_adsp_size = CAMERA_ZSL_SIZE;
#ifdef CONFIG_ION_MSM
	msm_ion_camera_size = pmem_adsp_size;
	msm_ion_audio_size = (MSM_PMEM_AUDIO_SIZE + PMEM_KERNEL_EBI1_SIZE);
	msm_ion_sf_size = pmem_mdp_size;
#endif
}
static void fix_sizes(void)
{
	if (get_ddr_size() > SZ_512M)
		pmem_adsp_size = CAMERA_ZSL_SIZE;
	else {
		if (machine_is_msm8625q_skue() || machine_is_msm8625q_evbd()
					|| machine_is_msm8625q_skud())
			pmem_mdp_size = 0;
	}

#ifdef CONFIG_ION_MSM
	msm_ion_audio_size = MSM_PMEM_AUDIO_SIZE;
#ifdef CONFIG_CMA
	msm_ion_camera_size = CAMERA_ZSL_SIZE;
	msm_ion_camera_size_carving = 0;
#else
	msm_ion_camera_size = pmem_adsp_size;
	msm_ion_camera_size_carving = msm_ion_camera_size;
#endif
	msm_ion_sf_size = pmem_mdp_size;
#endif
}
Exemple #9
0
void print_led_info(char* filepath) {
    if (access(filepath, F_OK) == -1) {
        printf("file %s does not exist.", filepath);
        exit(1);
    }

    FILE* fp = fopen(filepath, "rb");

    // get the size

    fseek(fp, 0, SEEK_END);
    long fsize = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    // validate size
    
    if (fsize % BYTE_SIZE_SLICE != 0) {
        printf("Problem:\tData length is not a multiple of the slice size (%d bytes).\n", BYTE_SIZE_SLICE);
        exit(1);
    } else {
        printf("Info:\tContains %d slices.\n", (int)fsize / BYTE_SIZE_SLICE);
    }

    if (get_ddr_size() < fsize) {
        printf("Warning: The current size of shared memory is too small! Need %d bytes for this frame but only have %d.\n", (int)fsize, get_ddr_size());
        exit(1);
    }

    // read file into shared memory

    uint32_t* frame = (uint32_t*)malloc(fsize);
    fread(frame, fsize, 1, fp);
    fclose(fp);

    validate_frame(frame, fsize / 4);
}
Exemple #10
0
int main(int argc, char* argv[]) {
    // parse cli arguments

    char* filepath;

    if (argc == 2) {
        filepath = argv[1];
    } else {
        printf("usage: %s some-led-data.dat\n", argv[0]);
        exit(1);
    }

    prussdrv_init();

    int ret = prussdrv_open(PRU_EVTOUT_0);
    if (ret) {
        printf("prussdrv_open open failed\n");
        exit(1);
    }

    tpruss_intc_initdata pruss_intc_initdata = PRUSS_INTC_INITDATA;
    prussdrv_pruintc_init(&pruss_intc_initdata);

    // initialize memory shared between PRU and host application
    init_memory();

    // initialize interface to PRU
    pru_ctrl_init(mem_fd);

    // put the LED data in the file where the PRU can get it
    load_frame(filepath);

    // tell the PRU where to find the data
    pru_write_reg(REG_ADDRESS, (uint32_t)get_ddr_address());

    // tell the PRU how many slices we have
    pru_write_reg(REG_SLICE_TOTAL, sliceCount);

    // display!
    ret = prussdrv_exec_program(PRU_NUM, "./driver.bin");
    if (ret == -1) {
        printf("failed to open driver.bin\n");
        exit(1);
    }
    printf("running...\nhit enter to stop.\n");
    getchar(); // stall until enter is hit

    // cleanup

    // disable pru
    prussdrv_pru_disable(PRU_NUM);
    
    // exit PRU interfaces
    prussdrv_exit();
    pru_ctrl_exit();

    // undo memory mapping
    munmap(ddrMem, get_ddr_size());
    close(mem_fd);

    return 0;
}