Merge "msm: rpmrs: Fix overflow error during power calculations" into msm-3.0
diff --git a/arch/arm/configs/msm9615_defconfig b/arch/arm/configs/msm9615_defconfig
index f28d420..7ef47c8 100644
--- a/arch/arm/configs/msm9615_defconfig
+++ b/arch/arm/configs/msm9615_defconfig
@@ -99,7 +99,8 @@
CONFIG_SPI_SPIDEV=m
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
-# CONFIG_HWMON is not set
+CONFIG_HWMON=y
+CONFIG_SENSORS_PM8XXX_ADC=y
CONFIG_THERMAL=y
CONFIG_THERMAL_TSENS8960=y
CONFIG_MFD_PM8018_CORE=y
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c
index 19e4224..06118f8 100644
--- a/arch/arm/mach-msm/board-msm8960.c
+++ b/arch/arm/mach-msm/board-msm8960.c
@@ -2930,17 +2930,16 @@
static void __init msm8960_init_buses(void)
{
#ifdef CONFIG_MSM_BUS_SCALING
- msm_bus_apps_fabric_pdata.rpm_enabled = 1;
- msm_bus_sys_fabric_pdata.rpm_enabled = 1;
- msm_bus_mm_fabric_pdata.rpm_enabled = 1;
- msm_bus_sys_fpb_pdata.rpm_enabled = 1;
- msm_bus_cpss_fpb_pdata.rpm_enabled = 1;
- msm_bus_apps_fabric.dev.platform_data = &msm_bus_apps_fabric_pdata;
- msm_bus_sys_fabric.dev.platform_data = &msm_bus_sys_fabric_pdata;
- msm_bus_mm_fabric.dev.platform_data = &msm_bus_mm_fabric_pdata;
- msm_bus_sys_fpb.dev.platform_data = &msm_bus_sys_fpb_pdata;
- msm_bus_cpss_fpb.dev.platform_data = &msm_bus_cpss_fpb_pdata;
msm_bus_rpm_set_mt_mask();
+ msm_bus_8960_apps_fabric_pdata.rpm_enabled = 1;
+ msm_bus_8960_sys_fabric_pdata.rpm_enabled = 1;
+ msm_bus_8960_mm_fabric_pdata.rpm_enabled = 1;
+ msm_bus_apps_fabric.dev.platform_data =
+ &msm_bus_8960_apps_fabric_pdata;
+ msm_bus_sys_fabric.dev.platform_data = &msm_bus_8960_sys_fabric_pdata;
+ msm_bus_mm_fabric.dev.platform_data = &msm_bus_8960_mm_fabric_pdata;
+ msm_bus_sys_fpb.dev.platform_data = &msm_bus_8960_sys_fpb_pdata;
+ msm_bus_cpss_fpb.dev.platform_data = &msm_bus_8960_cpss_fpb_pdata;
#endif
}
diff --git a/arch/arm/mach-msm/devices-msm8x60.h b/arch/arm/mach-msm/devices-msm8x60.h
index 9fbe818..6b7d141 100644
--- a/arch/arm/mach-msm/devices-msm8x60.h
+++ b/arch/arm/mach-msm/devices-msm8x60.h
@@ -51,6 +51,7 @@
extern struct platform_device msm_bus_mm_fabric;
extern struct platform_device msm_bus_sys_fpb;
extern struct platform_device msm_bus_cpss_fpb;
+extern struct platform_device msm_bus_def_fab;
extern struct platform_device msm_device_smd;
extern struct platform_device msm_device_gpio;
diff --git a/arch/arm/mach-msm/include/mach/msm_bus_board.h b/arch/arm/mach-msm/include/mach/msm_bus_board.h
index 644e1b1..2eb504a 100644
--- a/arch/arm/mach-msm/include/mach/msm_bus_board.h
+++ b/arch/arm/mach-msm/include/mach/msm_bus_board.h
@@ -36,6 +36,7 @@
const unsigned int nslaves;
const unsigned int ntieredslaves;
bool il_flag;
+ const struct msm_bus_board_algorithm *board_algo;
};
enum msm_bus_bw_tier_type {
@@ -55,12 +56,23 @@
extern struct msm_bus_fabric_registration msm_bus_mm_fabric_pdata;
extern struct msm_bus_fabric_registration msm_bus_sys_fpb_pdata;
extern struct msm_bus_fabric_registration msm_bus_cpss_fpb_pdata;
+extern struct msm_bus_fabric_registration msm_bus_def_fab_pdata;
-void msm_bus_board_assign_iids(struct msm_bus_fabric_registration
- *fabreg, int fabid);
-int msm_bus_board_get_iid(int id);
+extern struct msm_bus_fabric_registration msm_bus_8960_apps_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8960_sys_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8960_mm_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8960_sys_fpb_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8960_cpss_fpb_pdata;
+
+extern struct msm_bus_fabric_registration msm_bus_8064_apps_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8064_sys_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8064_mm_fabric_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8064_sys_fpb_pdata;
+extern struct msm_bus_fabric_registration msm_bus_8064_cpss_fpb_pdata;
+
void msm_bus_rpm_set_mt_mask(void);
int msm_bus_board_rpm_get_il_ids(uint16_t *id);
+int msm_bus_board_get_iid(int id);
/*
* These macros specify the convention followed for allocating
@@ -124,6 +136,7 @@
/* Topology related enums */
enum msm_bus_fabric_type {
+ MSM_BUS_FAB_DEFAULT = 0,
MSM_BUS_FAB_APPSS = 0,
MSM_BUS_FAB_SYSTEM = 1024,
MSM_BUS_FAB_MMSS = 2048,
@@ -180,7 +193,15 @@
MSM_BUS_MASTER_MSS_SW_PROC,
MSM_BUS_MASTER_MSS_FW_PROC,
MSM_BUS_MMSS_MASTER_UNUSED_2,
+ MSM_BUS_MASTER_GSS_NAV,
+ MSM_BUS_MASTER_PCIE,
+ MSM_BUS_MASTER_SATA,
+ MSM_BUS_MASTER_CRYPTO,
+ MSM_BUS_MASTER_VIDEO_CAP,
+ MSM_BUS_MASTER_GRAPHICS_3D_PORT1,
+ MSM_BUS_MASTER_VIDEO_ENC,
+ MSM_BUS_MASTER_VIDEO_DEC,
MSM_BUS_MASTER_LAST = MSM_BUS_MMSS_MASTER_UNUSED_2,
MSM_BUS_SYSTEM_FPB_MASTER_SYSTEM =
@@ -263,6 +284,8 @@
MSM_BUS_SLAVE_MSM_DIMEM,
MSM_BUS_SLAVE_MSM_TCSR,
MSM_BUS_SLAVE_MSM_PRNG,
+ MSM_BUS_SLAVE_GSS,
+ MSM_BUS_SLAVE_SATA,
MSM_BUS_SLAVE_LAST = MSM_BUS_SLAVE_MSM_PRNG,
MSM_BUS_SYSTEM_FPB_SLAVE_SYSTEM =
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_arb.c b/arch/arm/mach-msm/msm_bus/msm_bus_arb.c
index 7565eb3..56bc71d 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_arb.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_arb.c
@@ -394,7 +394,7 @@
int ret = 0;
struct msm_bus_fabric_device *fabdev = to_msm_bus_fabric_device(dev);
MSM_BUS_DBG("Committing: fabid: %d\n", fabdev->id);
- ret = fabdev->algo->commit(fabdev, (int)data);
+ ret = fabdev->algo->commit(fabdev);
return ret;
}
@@ -556,7 +556,7 @@
client->curr = index;
ctx = ACTIVE_CTX;
msm_bus_dbg_client_data(client->pdata, index, cl);
- bus_for_each_dev(&msm_bus_type, NULL, (void *)ctx, msm_bus_commit_fn);
+ bus_for_each_dev(&msm_bus_type, NULL, NULL, msm_bus_commit_fn);
err:
mutex_unlock(&msm_bus_lock);
@@ -613,6 +613,19 @@
return 0;
}
+int msm_bus_board_get_iid(int id)
+{
+ struct msm_bus_fabric_device *deffab;
+
+ deffab = msm_bus_get_fabric_device(MSM_BUS_FAB_DEFAULT);
+ if (!deffab) {
+ MSM_BUS_ERR("Error finding default fabric\n");
+ return -ENXIO;
+ }
+
+ return deffab->board_algo->get_iid(id);
+}
+
void msm_bus_scale_client_reset_pnodes(uint32_t cl)
{
int i, src, pnode, index;
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_board_8660.c b/arch/arm/mach-msm/msm_bus/msm_bus_board_8660.c
index 13b59ed..fde2322 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_board_8660.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_board_8660.c
@@ -805,80 +805,8 @@
},
};
-struct msm_bus_fabric_registration msm_bus_apps_fabric_pdata = {
- .id = MSM_BUS_FAB_APPSS,
- .name = "msm_apps_fab",
- .info = apps_fabric_info,
- .len = ARRAY_SIZE(apps_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "afab_clk",
- .fabclk[ACTIVE_CTX] = "afab_a_clk",
- .haltid = MSM_RPM_ID_APPS_FABRIC_HALT_0,
- .offset = MSM_RPM_ID_APPS_FABRIC_ARB_0,
- .nmasters = 4,
- .nslaves = 4,
- .ntieredslaves = 2,
-};
-
-struct msm_bus_fabric_registration msm_bus_sys_fabric_pdata = {
- .id = MSM_BUS_FAB_SYSTEM,
- .name = "msm_sys_fab",
- system_fabric_info,
- ARRAY_SIZE(system_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "sfab_clk",
- .fabclk[ACTIVE_CTX] = "sfab_a_clk",
- .haltid = MSM_RPM_ID_SYSTEM_FABRIC_HALT_0,
- .offset = MSM_RPM_ID_SYSTEM_FABRIC_ARB_0,
- .nmasters = 17,
- .nslaves = 9,
- .ntieredslaves = 2,
-};
-
-struct msm_bus_fabric_registration msm_bus_mm_fabric_pdata = {
- .id = MSM_BUS_FAB_MMSS,
- .name = "msm_mm_fab",
- mmss_fabric_info,
- ARRAY_SIZE(mmss_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "mmfab_clk",
- .fabclk[ACTIVE_CTX] = "mmfab_a_clk",
- .haltid = MSM_RPM_ID_MM_FABRIC_HALT_0,
- .offset = MSM_RPM_ID_MM_FABRIC_ARB_0,
- .nmasters = 14,
- .nslaves = 4,
- .ntieredslaves = 3,
-};
-
-struct msm_bus_fabric_registration msm_bus_sys_fpb_pdata = {
- .id = MSM_BUS_FAB_SYSTEM_FPB,
- .name = "msm_sys_fpb",
- sys_fpb_fabric_info,
- ARRAY_SIZE(sys_fpb_fabric_info),
- .ahb = 1,
- .fabclk[DUAL_CTX] = "sfpb_clk",
- .fabclk[ACTIVE_CTX] = "sfpb_a_clk",
- .nmasters = 0,
- .nslaves = 0,
- .ntieredslaves = 0,
-};
-
-struct msm_bus_fabric_registration msm_bus_cpss_fpb_pdata = {
- .id = MSM_BUS_FAB_CPSS_FPB,
- .name = "msm_cpss_fpb",
- cpss_fpb_fabric_info,
- ARRAY_SIZE(cpss_fpb_fabric_info),
- .ahb = 1,
- .fabclk[DUAL_CTX] = "cfpb_clk",
- .fabclk[ACTIVE_CTX] = "cfpb_a_clk",
- .nmasters = 0,
- .nslaves = 0,
- .ntieredslaves = 0,
-};
-
-static void msm_bus_board_get_ids(
- struct msm_bus_fabric_registration *fabreg,
- int fabid)
+static void msm_bus_board_assign_iids(struct msm_bus_fabric_registration
+ *fabreg, int fabid)
{
int i;
for (i = 0; i < fabreg->len; i++) {
@@ -895,17 +823,93 @@
}
}
-void msm_bus_board_assign_iids(struct msm_bus_fabric_registration *fabreg,
- int fabid)
-{
- msm_bus_board_get_ids(fabreg, fabid);
-}
-int msm_bus_board_get_iid(int id)
+static int msm_bus_board_8660_get_iid(int id)
{
return ((id < SLAVE_ID_KEY) ? master_iids[id] : slave_iids[id -
SLAVE_ID_KEY]);
}
+static struct msm_bus_board_algorithm msm_bus_board_algo = {
+ .get_iid = msm_bus_board_8660_get_iid,
+ .assign_iids = msm_bus_board_assign_iids,
+};
+
+struct msm_bus_fabric_registration msm_bus_apps_fabric_pdata = {
+ .id = MSM_BUS_FAB_APPSS,
+ .name = "msm_apps_fab",
+ .info = apps_fabric_info,
+ .len = ARRAY_SIZE(apps_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "afab_clk",
+ .fabclk[ACTIVE_CTX] = "afab_a_clk",
+ .haltid = MSM_RPM_ID_APPS_FABRIC_HALT_0,
+ .offset = MSM_RPM_ID_APPS_FABRIC_ARB_0,
+ .nmasters = 4,
+ .nslaves = 4,
+ .ntieredslaves = 2,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_sys_fabric_pdata = {
+ .id = MSM_BUS_FAB_SYSTEM,
+ .name = "msm_sys_fab",
+ system_fabric_info,
+ ARRAY_SIZE(system_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "sfab_clk",
+ .fabclk[ACTIVE_CTX] = "sfab_a_clk",
+ .haltid = MSM_RPM_ID_SYSTEM_FABRIC_HALT_0,
+ .offset = MSM_RPM_ID_SYSTEM_FABRIC_ARB_0,
+ .nmasters = 17,
+ .nslaves = 9,
+ .ntieredslaves = 2,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_mm_fabric_pdata = {
+ .id = MSM_BUS_FAB_MMSS,
+ .name = "msm_mm_fab",
+ mmss_fabric_info,
+ ARRAY_SIZE(mmss_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "mmfab_clk",
+ .fabclk[ACTIVE_CTX] = "mmfab_a_clk",
+ .haltid = MSM_RPM_ID_MM_FABRIC_HALT_0,
+ .offset = MSM_RPM_ID_MM_FABRIC_ARB_0,
+ .nmasters = 14,
+ .nslaves = 4,
+ .ntieredslaves = 3,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_sys_fpb_pdata = {
+ .id = MSM_BUS_FAB_SYSTEM_FPB,
+ .name = "msm_sys_fpb",
+ sys_fpb_fabric_info,
+ ARRAY_SIZE(sys_fpb_fabric_info),
+ .ahb = 1,
+ .fabclk[DUAL_CTX] = "sfpb_clk",
+ .fabclk[ACTIVE_CTX] = "sfpb_a_clk",
+ .nmasters = 0,
+ .nslaves = 0,
+ .ntieredslaves = 0,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_cpss_fpb_pdata = {
+ .id = MSM_BUS_FAB_CPSS_FPB,
+ .name = "msm_cpss_fpb",
+ cpss_fpb_fabric_info,
+ ARRAY_SIZE(cpss_fpb_fabric_info),
+ .ahb = 1,
+ .fabclk[DUAL_CTX] = "cfpb_clk",
+ .fabclk[ACTIVE_CTX] = "cfpb_a_clk",
+ .nmasters = 0,
+ .nslaves = 0,
+ .ntieredslaves = 0,
+ .board_algo = &msm_bus_board_algo,
+};
+
int msm_bus_board_rpm_get_il_ids(uint16_t id[])
{
return -ENXIO;
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_board_8960.c b/arch/arm/mach-msm/msm_bus/msm_bus_board_8960.c
index 8ab1899..47f3c81 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_board_8960.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_board_8960.c
@@ -832,80 +832,8 @@
},
};
-struct msm_bus_fabric_registration msm_bus_apps_fabric_pdata = {
- .id = MSM_BUS_FAB_APPSS,
- .name = "msm_apps_fab",
- .info = apps_fabric_info,
- .len = ARRAY_SIZE(apps_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "afab_clk",
- .fabclk[ACTIVE_CTX] = "afab_a_clk",
- .haltid = MSM_RPM_ID_APPS_FABRIC_CFG_HALT_0,
- .offset = MSM_RPM_ID_APPS_FABRIC_ARB_0,
- .nmasters = 6,
- .nslaves = 5,
- .ntieredslaves = 3,
-};
-
-struct msm_bus_fabric_registration msm_bus_sys_fabric_pdata = {
- .id = MSM_BUS_FAB_SYSTEM,
- .name = "msm_sys_fab",
- system_fabric_info,
- ARRAY_SIZE(system_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "sfab_clk",
- .fabclk[ACTIVE_CTX] = "sfab_a_clk",
- .haltid = MSM_RPM_ID_SYS_FABRIC_CFG_HALT_0,
- .offset = MSM_RPM_ID_SYSTEM_FABRIC_ARB_0,
- .nmasters = 15,
- .nslaves = 12,
- .ntieredslaves = 3,
-};
-
-struct msm_bus_fabric_registration msm_bus_mm_fabric_pdata = {
- .id = MSM_BUS_FAB_MMSS,
- .name = "msm_mm_fab",
- mmss_fabric_info,
- ARRAY_SIZE(mmss_fabric_info),
- .ahb = 0,
- .fabclk[DUAL_CTX] = "mmfab_clk",
- .fabclk[ACTIVE_CTX] = "mmfab_a_clk",
- .haltid = MSM_RPM_ID_MMSS_FABRIC_CFG_HALT_0,
- .offset = MSM_RPM_ID_MM_FABRIC_ARB_0,
- .nmasters = 14,
- .nslaves = 4,
- .ntieredslaves = 3,
-};
-
-struct msm_bus_fabric_registration msm_bus_sys_fpb_pdata = {
- .id = MSM_BUS_FAB_SYSTEM_FPB,
- .name = "msm_sys_fpb",
- sys_fpb_fabric_info,
- ARRAY_SIZE(sys_fpb_fabric_info),
- .ahb = 1,
- .fabclk[DUAL_CTX] = "sfpb_clk",
- .fabclk[ACTIVE_CTX] = "sfpb_a_clk",
- .nmasters = 0,
- .nslaves = 0,
- .ntieredslaves = 0,
-};
-
-struct msm_bus_fabric_registration msm_bus_cpss_fpb_pdata = {
- .id = MSM_BUS_FAB_CPSS_FPB,
- .name = "msm_cpss_fpb",
- cpss_fpb_fabric_info,
- ARRAY_SIZE(cpss_fpb_fabric_info),
- .ahb = 1,
- .fabclk[DUAL_CTX] = "cfpb_clk",
- .fabclk[ACTIVE_CTX] = "cfpb_a_clk",
- .nmasters = 0,
- .nslaves = 0,
- .ntieredslaves = 0,
-};
-
-static void msm_bus_board_get_ids(
- struct msm_bus_fabric_registration *fabreg,
- int fabid)
+static void msm_bus_board_assign_iids(struct msm_bus_fabric_registration
+ *fabreg, int fabid)
{
int i;
for (i = 0; i < fabreg->len; i++) {
@@ -922,12 +850,7 @@
}
}
-void msm_bus_board_assign_iids(struct msm_bus_fabric_registration *fabreg,
- int fabid)
-{
- msm_bus_board_get_ids(fabreg, fabid);
-}
-int msm_bus_board_get_iid(int id)
+static int msm_bus_board_8960_get_iid(int id)
{
if ((id < SLAVE_ID_KEY && id >= NMASTERS) ||
id >= (SLAVE_ID_KEY + NSLAVES)) {
@@ -939,6 +862,87 @@
SLAVE_ID_KEY]);
}
+static struct msm_bus_board_algorithm msm_bus_board_algo = {
+ .get_iid = msm_bus_board_8960_get_iid,
+ .assign_iids = msm_bus_board_assign_iids,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_apps_fabric_pdata = {
+ .id = MSM_BUS_FAB_APPSS,
+ .name = "msm_apps_fab",
+ .info = apps_fabric_info,
+ .len = ARRAY_SIZE(apps_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "afab_clk",
+ .fabclk[ACTIVE_CTX] = "afab_a_clk",
+ .haltid = MSM_RPM_ID_APPS_FABRIC_CFG_HALT_0,
+ .offset = MSM_RPM_ID_APPS_FABRIC_ARB_0,
+ .nmasters = 6,
+ .nslaves = 5,
+ .ntieredslaves = 3,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_sys_fabric_pdata = {
+ .id = MSM_BUS_FAB_SYSTEM,
+ .name = "msm_sys_fab",
+ system_fabric_info,
+ ARRAY_SIZE(system_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "sfab_clk",
+ .fabclk[ACTIVE_CTX] = "sfab_a_clk",
+ .haltid = MSM_RPM_ID_SYS_FABRIC_CFG_HALT_0,
+ .offset = MSM_RPM_ID_SYSTEM_FABRIC_ARB_0,
+ .nmasters = 15,
+ .nslaves = 12,
+ .ntieredslaves = 3,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_mm_fabric_pdata = {
+ .id = MSM_BUS_FAB_MMSS,
+ .name = "msm_mm_fab",
+ mmss_fabric_info,
+ ARRAY_SIZE(mmss_fabric_info),
+ .ahb = 0,
+ .fabclk[DUAL_CTX] = "mmfab_clk",
+ .fabclk[ACTIVE_CTX] = "mmfab_a_clk",
+ .haltid = MSM_RPM_ID_MMSS_FABRIC_CFG_HALT_0,
+ .offset = MSM_RPM_ID_MM_FABRIC_ARB_0,
+ .nmasters = 14,
+ .nslaves = 4,
+ .ntieredslaves = 3,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_sys_fpb_pdata = {
+ .id = MSM_BUS_FAB_SYSTEM_FPB,
+ .name = "msm_sys_fpb",
+ sys_fpb_fabric_info,
+ ARRAY_SIZE(sys_fpb_fabric_info),
+ .ahb = 1,
+ .fabclk[DUAL_CTX] = "sfpb_clk",
+ .fabclk[ACTIVE_CTX] = "sfpb_a_clk",
+ .nmasters = 0,
+ .nslaves = 0,
+ .ntieredslaves = 0,
+ .board_algo = &msm_bus_board_algo,
+};
+
+struct msm_bus_fabric_registration msm_bus_8960_cpss_fpb_pdata = {
+ .id = MSM_BUS_FAB_CPSS_FPB,
+ .name = "msm_cpss_fpb",
+ cpss_fpb_fabric_info,
+ ARRAY_SIZE(cpss_fpb_fabric_info),
+ .ahb = 1,
+ .fabclk[DUAL_CTX] = "cfpb_clk",
+ .fabclk[ACTIVE_CTX] = "cfpb_a_clk",
+ .nmasters = 0,
+ .nslaves = 0,
+ .ntieredslaves = 0,
+ .board_algo = &msm_bus_board_algo,
+};
+
int msm_bus_board_rpm_get_il_ids(uint16_t id[])
{
id[0] = MSM_RPM_STATUS_ID_EBI1_CH0_RANGE;
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_core.h b/arch/arm/mach-msm/msm_bus/msm_bus_core.h
index 56a5b8da..8a46026 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_core.h
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_core.h
@@ -107,6 +107,7 @@
const char *name;
struct device dev;
const struct msm_bus_fab_algorithm *algo;
+ const struct msm_bus_board_algorithm *board_algo;
int visited;
};
#define to_msm_bus_fabric_device(d) container_of(d, \
@@ -121,8 +122,7 @@
unsigned int cl_active_flag);
int (*port_halt)(struct msm_bus_fabric_device *fabdev, int portid);
int (*port_unhalt)(struct msm_bus_fabric_device *fabdev, int portid);
- int (*commit)(struct msm_bus_fabric_device *fabdev,
- int active_only);
+ int (*commit)(struct msm_bus_fabric_device *fabdev);
struct msm_bus_inode_info *(*find_node)(struct msm_bus_fabric_device
*fabdev, int id);
struct msm_bus_inode_info *(*find_gw_node)(struct msm_bus_fabric_device
@@ -133,6 +133,12 @@
long int add_bw, int *master_tiers, int ctx);
};
+struct msm_bus_board_algorithm {
+ void (*assign_iids)(struct msm_bus_fabric_registration *fabreg,
+ int fabid);
+ int (*get_iid)(int id);
+};
+
/**
* Used to store the list of fabrics and other info to be
* maintained outside the fabric structure.
@@ -160,8 +166,7 @@
struct msm_rpm_iv_pair *allocate_rpm_data(struct msm_bus_fabric_registration
*fab_pdata);
int msm_bus_rpm_commit(struct msm_bus_fabric_registration
- *fab_pdata, int ctx, struct msm_rpm_iv_pair *rpm_data,
- void *cdata);
+ *fab_pdata, struct msm_rpm_iv_pair *rpm_data, void **cdata);
void free_commit_data(void *cdata);
void msm_bus_rpm_update_bw(struct msm_bus_inode_info *hop,
struct msm_bus_inode_info *info,
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_fabric.c b/arch/arm/mach-msm/msm_bus/msm_bus_fabric.c
index fe6dbed..1747425 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_fabric.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_fabric.c
@@ -418,13 +418,10 @@
* msm_bus_fabric_rpm_commit() - Commit the arbitration data to RPM
* @fabric: Fabric for which the data should be committed
* */
-static int msm_bus_fabric_rpm_commit(struct msm_bus_fabric_device *fabdev,
- int ctx)
-
+static int msm_bus_fabric_rpm_commit(struct msm_bus_fabric_device *fabdev)
{
int status = 0;
struct msm_bus_fabric *fabric = to_msm_bus_fabric(fabdev);
- void *cdata;
/*
* For a non-zero bandwidth request, clocks should be enabled before
@@ -441,9 +438,8 @@
goto skip_arb;
}
- cdata = fabric->cdata[ctx];
- status = msm_bus_rpm_commit(fabric->pdata, ctx,
- fabric->rpm_data, cdata);
+ status = msm_bus_rpm_commit(fabric->pdata, fabric->rpm_data,
+ (void **)fabric->cdata);
if (status)
MSM_BUS_DBG("Error committing arb data for fabric: %d\n",
fabric->fabdev.id);
@@ -653,7 +649,9 @@
pdata->il_flag = msm_bus_rpm_is_mem_interleaved();
fabric->ahb = pdata->ahb;
fabric->pdata = pdata;
- msm_bus_board_assign_iids(fabric->pdata, fabric->fabdev.id);
+ fabric->pdata->board_algo->assign_iids(fabric->pdata,
+ fabric->fabdev.id);
+ fabric->fabdev.board_algo = fabric->pdata->board_algo;
for (ctx = 0; ctx < NUM_CTX; ctx++) {
if (pdata->fabclk[ctx]) {
diff --git a/arch/arm/mach-msm/msm_bus/msm_bus_rpm.c b/arch/arm/mach-msm/msm_bus/msm_bus_rpm.c
index 332d3c1..84e2da5 100644
--- a/arch/arm/mach-msm/msm_bus/msm_bus_rpm.c
+++ b/arch/arm/mach-msm/msm_bus/msm_bus_rpm.c
@@ -325,16 +325,35 @@
#define RPM_SHIFT_VAL 16
#define RPM_SHIFT(n) ((n) << RPM_SHIFT_VAL)
-/**
- * msm_bus_rpm_commit() - Commit the arbitration data to RPM
- * @fabric: Fabric for which the data should be committed
- * */
-int msm_bus_rpm_commit(struct msm_bus_fabric_registration
+static int msm_bus_rpm_compare_cdata(
+ struct msm_bus_fabric_registration *fab_pdata,
+ struct commit_data *cd1, struct commit_data *cd2)
+{
+ size_t n;
+ int ret;
+ n = sizeof(uint16_t) * fab_pdata->nslaves;
+ ret = memcmp(cd1->bwsum, cd2->bwsum, n);
+ if (ret) {
+ MSM_BUS_DBG("Commit Data bwsum not equal\n");
+ return ret;
+ }
+
+ n = sizeof(uint16_t *) * ((fab_pdata->ntieredslaves *
+ fab_pdata->nmasters) + 1);
+ ret = memcmp(cd1->arb, cd2->arb, n);
+ if (ret) {
+ MSM_BUS_DBG("Commit Data arb[%d] not equal\n", i);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int msm_bus_rpm_commit_arb(struct msm_bus_fabric_registration
*fab_pdata, int ctx, struct msm_rpm_iv_pair *rpm_data,
- void *cdata)
+ struct commit_data *cd, bool valid)
{
int i, j, offset = 0, status = 0, count, index = 0;
- struct commit_data *cd = (struct commit_data *)cdata;
/*
* count is the number of 2-byte words required to commit the
* data to rpm. This is calculated by the following formula.
@@ -398,12 +417,33 @@
nmasters, fab_pdata->nslaves, fab_pdata->ntieredslaves,
MSM_BUS_DBG_OP);
if (fab_pdata->rpm_enabled) {
- if (ctx == ACTIVE_CTX)
- status = msm_rpm_set(MSM_RPM_CTX_SET_0, rpm_data,
- count);
+ if (valid) {
+ if (ctx == ACTIVE_CTX) {
+ status = msm_rpm_set(MSM_RPM_CTX_SET_0,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_set returned: %d\n",
+ status);
+ } else if (ctx == DUAL_CTX) {
+ status = msm_rpm_set(MSM_RPM_CTX_SET_SLEEP,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_set returned: %d\n",
+ status);
+ }
+ } else {
+ if (ctx == ACTIVE_CTX) {
+ status = msm_rpm_clear(MSM_RPM_CTX_SET_0,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_clear returned: %d\n",
+ status);
+ } else if (ctx == DUAL_CTX) {
+ status = msm_rpm_clear(MSM_RPM_CTX_SET_SLEEP,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_clear returned: %d\n",
+ status);
+ }
+ }
}
- MSM_BUS_DBG("msm_rpm_set returned: %d\n", status);
return status;
}
@@ -571,14 +611,37 @@
return rpm_data;
}
-int msm_bus_rpm_commit(struct msm_bus_fabric_registration
- *fab_pdata, int ctx, struct msm_rpm_iv_pair *rpm_data,
- void *cdata)
+static int msm_bus_rpm_compare_cdata(
+ struct msm_bus_fabric_registration *fab_pdata,
+ struct commit_data *cd1, struct commit_data *cd2)
{
+ size_t n;
+ int i, ret;
+ n = sizeof(uint16_t) * fab_pdata->nslaves;
+ ret = memcmp(cd1->bwsum, cd2->bwsum, n);
+ if (ret) {
+ MSM_BUS_DBG("Commit Data bwsum not equal\n");
+ return ret;
+ }
+ n = sizeof(uint8_t *) * ((fab_pdata->ntieredslaves *
+ fab_pdata->nmasters) + 1);
+ for (i = 0; i < NUM_TIERS; i++) {
+ ret = memcmp(cd1->arb[i], cd2->arb[i], n);
+ if (ret) {
+ MSM_BUS_DBG("Commit Data arb[%d] not equal\n", i);
+ return ret;
+ }
+ }
+
+ return 0;
+}
+
+static int msm_bus_rpm_commit_arb(struct msm_bus_fabric_registration
+ *fab_pdata, int ctx, struct msm_rpm_iv_pair *rpm_data,
+ struct commit_data *cd, bool valid)
+{
int i, j, k, offset = 0, status = 0, count, index = 0;
- struct commit_data *cd = (struct commit_data *)cdata;
-
/*
* count is the number of 2-byte words required to commit the
* data to rpm. This is calculated by the following formula.
@@ -646,16 +709,37 @@
}
MSM_FAB_DBG("calling msm_rpm_set: %d\n", status);
- msm_bus_dbg_commit_data(fab_pdata->name, cdata, fab_pdata->
+ msm_bus_dbg_commit_data(fab_pdata->name, (void *)cd, fab_pdata->
nmasters, fab_pdata->nslaves, fab_pdata->ntieredslaves,
MSM_BUS_DBG_OP);
if (fab_pdata->rpm_enabled) {
- if (ctx == ACTIVE_CTX)
- status = msm_rpm_set(MSM_RPM_CTX_SET_0, rpm_data,
- count);
+ if (valid) {
+ if (ctx == ACTIVE_CTX) {
+ status = msm_rpm_set(MSM_RPM_CTX_SET_0,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_set returned: %d\n",
+ status);
+ } else if (ctx == DUAL_CTX) {
+ status = msm_rpm_set(MSM_RPM_CTX_SET_SLEEP,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_set returned: %d\n",
+ status);
+ }
+ } else {
+ if (ctx == ACTIVE_CTX) {
+ status = msm_rpm_clear(MSM_RPM_CTX_SET_0,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_clear returned: %d\n",
+ status);
+ } else if (ctx == DUAL_CTX) {
+ status = msm_rpm_clear(MSM_RPM_CTX_SET_SLEEP,
+ rpm_data, count);
+ MSM_BUS_DBG("msm_rpm_clear returned: %d\n",
+ status);
+ }
+ }
}
- MSM_FAB_DBG("msm_rpm_set returned: %d\n", status);
return status;
}
@@ -771,3 +855,47 @@
}
}
#endif
+
+/**
+* msm_bus_rpm_commit() - Commit the arbitration data to RPM
+* @fabric: Fabric for which the data should be committed
+**/
+int msm_bus_rpm_commit(struct msm_bus_fabric_registration
+ *fab_pdata, struct msm_rpm_iv_pair *rpm_data,
+ void **cdata)
+{
+
+ int ret;
+ bool valid;
+ struct commit_data *dual_cd, *act_cd;
+ dual_cd = (struct commit_data *)cdata[DUAL_CTX];
+ act_cd = (struct commit_data *)cdata[ACTIVE_CTX];
+
+ /*
+ * If the arb data for active set and sleep set is
+ * different, commit both sets.
+ * If the arb data for active set and sleep set is
+ * the same, invalidate the sleep set.
+ */
+ ret = msm_bus_rpm_compare_cdata(fab_pdata, act_cd, dual_cd);
+ if (!ret)
+ /* Invalidate sleep set.*/
+ valid = false;
+ else
+ valid = true;
+
+ ret = msm_bus_rpm_commit_arb(fab_pdata, DUAL_CTX, rpm_data,
+ dual_cd, valid);
+ if (ret)
+ MSM_BUS_ERR("Error comiting fabric:%d in %d ctx\n",
+ fab_pdata->id, DUAL_CTX);
+
+ valid = true;
+ ret = msm_bus_rpm_commit_arb(fab_pdata, ACTIVE_CTX, rpm_data, act_cd,
+ valid);
+ if (ret)
+ MSM_BUS_ERR("Error comiting fabric:%d in %d ctx\n",
+ fab_pdata->id, ACTIVE_CTX);
+
+ return ret;
+}
diff --git a/arch/arm/mach-msm/pm-8x60.c b/arch/arm/mach-msm/pm-8x60.c
index c831d4b..911d546 100644
--- a/arch/arm/mach-msm/pm-8x60.c
+++ b/arch/arm/mach-msm/pm-8x60.c
@@ -279,7 +279,7 @@
ret = 0;
mode_sysfs_add_cpu_exit:
- if (!ret) {
+ if (ret) {
if (mode && mode->kobj)
kobject_del(mode->kobj);
kfree(mode);
diff --git a/sound/soc/msm/msm8960.c b/sound/soc/msm/msm8960.c
index 5e81e0f..0f08682 100644
--- a/sound/soc/msm/msm8960.c
+++ b/sound/soc/msm/msm8960.c
@@ -25,7 +25,7 @@
#include <sound/jack.h>
#include <asm/mach-types.h>
#include "msm-pcm-routing.h"
-#include <../codecs/wcd9310.h>
+#include "../codecs/wcd9310.h"
/* 8960 machine driver */