blob: f6516778a892156f13cfefab7ed83a7e0f0bf39b [file] [log] [blame]
Duy Truong790f06d2013-02-13 16:38:12 -08001/* Copyright (c) 2012, The Linux Foundation. All rights reserved.
Subhash Jadavanibcd435f2012-04-24 18:26:49 +05302 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13
14#ifndef _BOARD_STORAGE_A_H
15#define _BOARD_STORAGE_A_H
16
17#include <asm/mach/mmc.h>
18#include <mach/msm_bus_board.h>
19#include <mach/msm_bus.h>
20
21#define MSM_BUS_SPS_TO_DDR_VOTE_VECTOR(num, _ib) \
22static struct msm_bus_vectors sps_to_ddr_perf_vectors_##num[] = { \
23 { \
24 .src = MSM_BUS_MASTER_SPS, \
25 .dst = MSM_BUS_SLAVE_EBI_CH0, \
26 .ib = (_ib), \
27 .ab = ((_ib) / 2), \
28 } \
29}
30
31#define MSM_BUS_SPS_TO_DDR_VOTE_VECTOR_USECASE(num) \
32 { \
33 ARRAY_SIZE(sps_to_ddr_perf_vectors_##num), \
34 sps_to_ddr_perf_vectors_##num, \
35 }
36
37/* no bandwidth required */
38MSM_BUS_SPS_TO_DDR_VOTE_VECTOR(0, 0);
39/*
40 * 13 MB/s bandwidth
41 * 4-bit MMC_TIMING_LEGACY
42 * 4-bit MMC_TIMING_UHS_SDR12
43 */
44MSM_BUS_SPS_TO_DDR_VOTE_VECTOR(1, 13 * 1024 * 1024);
45/*
46 * 26 MB/s bandwidth
47 * 8-bit MMC_TIMING_LEGACY
48 * 4-bit MMC_TIMING_MMC_HS / MMC_TIMING_SD_HS /
49 * MMC_TIMING_UHS_SDR25
50 */
51MSM_BUS_SPS_TO_DDR_VOTE_VECTOR(2, 26 * 1024 * 1024);
52/*
53 * 52 MB/s bandwidth
54 * 8-bit MMC_TIMING_MMC_HS
55 * 4-bit MMC_TIMING_UHS_SDR50 / MMC_TIMING_UHS_DDR50
56 */
57MSM_BUS_SPS_TO_DDR_VOTE_VECTOR(3, 52 * 1024 * 1024);
58/*
59 * 104 MB/s bandwidth
60 * 8-bit MMC_TIMING_UHS_DDR50
61 * 4-bit MMC_TIMING_UHS_SDR104 / MMC_TIMING_MMC_HS200
62 */
63MSM_BUS_SPS_TO_DDR_VOTE_VECTOR(4, 104 * 1024 * 1024);
64/*
65 * 200 MB/s bandwidth
66 * 8-bit MMC_TIMING_MMC_HS200
67 */
68MSM_BUS_SPS_TO_DDR_VOTE_VECTOR(5, 200 * 1024 * 1024);
69/* max. possible bandwidth */
70MSM_BUS_SPS_TO_DDR_VOTE_VECTOR(6, UINT_MAX);
71
72static unsigned int sdcc_bw_vectors[] = {0, (13 * 1024 * 1024),
73 (26 * 1024 * 1024), (52 * 1024 * 1024),
74 (104 * 1024 * 1024), (200 * 1024 * 1024),
75 UINT_MAX};
76
77static struct msm_bus_paths sps_to_ddr_bus_scale_usecases[] = {
78 MSM_BUS_SPS_TO_DDR_VOTE_VECTOR_USECASE(0),
79 MSM_BUS_SPS_TO_DDR_VOTE_VECTOR_USECASE(1),
80 MSM_BUS_SPS_TO_DDR_VOTE_VECTOR_USECASE(2),
81 MSM_BUS_SPS_TO_DDR_VOTE_VECTOR_USECASE(3),
82 MSM_BUS_SPS_TO_DDR_VOTE_VECTOR_USECASE(4),
83 MSM_BUS_SPS_TO_DDR_VOTE_VECTOR_USECASE(5),
84 MSM_BUS_SPS_TO_DDR_VOTE_VECTOR_USECASE(6),
85};
86
87static struct msm_bus_scale_pdata sps_to_ddr_bus_scale_data = {
88 sps_to_ddr_bus_scale_usecases,
89 ARRAY_SIZE(sps_to_ddr_bus_scale_usecases),
90 .name = "msm_sdcc",
91};
92
93static struct msm_mmc_bus_voting_data sps_to_ddr_bus_voting_data = {
94 .use_cases = &sps_to_ddr_bus_scale_data,
95 .bw_vecs = sdcc_bw_vectors,
96 .bw_vecs_size = sizeof(sdcc_bw_vectors),
97};
98
99#endif /* _BOARD_STORAGE_A_H */