arm: tegra: fuse: replace globals with functions
Shardar Shariff Md [Thu, 17 Oct 2013 06:48:18 +0000 (11:48 +0530)]
Replace globals tegra_sku_id, tegra_chip_id &
tegra_bct_strapping with below functions
u32 tegra_get_sku_id(void);
u32 tegra_get_chip_id(void);
u32 tegra_get_bct_strapping(void);

Bug 1380004

Change-Id: I43eb2523e4af5d06bc1aa1f03c02c5168577878c
Signed-off-by: Shardar Shariff Md <smohammed@nvidia.com>
Reviewed-on: http://git-master/r/300401
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Venu Byravarasu <vbyravarasu@nvidia.com>

23 files changed:
arch/arm/mach-tegra/board-dalmore-memory.c
arch/arm/mach-tegra/board-pluto-memory.c
arch/arm/mach-tegra/common.c
arch/arm/mach-tegra/edp.c
arch/arm/mach-tegra/edp_core.c
arch/arm/mach-tegra/fuse.h
arch/arm/mach-tegra/platsmp.c
arch/arm/mach-tegra/powergate.c
arch/arm/mach-tegra/reset.c
arch/arm/mach-tegra/tegra11_dvfs.c
arch/arm/mach-tegra/tegra11_edp.c
arch/arm/mach-tegra/tegra11_emc.c
arch/arm/mach-tegra/tegra11_soctherm.c
arch/arm/mach-tegra/tegra11_speedo.c
arch/arm/mach-tegra/tegra12_edp.c
arch/arm/mach-tegra/tegra12_speedo.c
arch/arm/mach-tegra/tegra14_edp.c
arch/arm/mach-tegra/tegra14_speedo.c
arch/arm/mach-tegra/tegra20_speedo.c
arch/arm/mach-tegra/tegra2_emc.c
arch/arm/mach-tegra/tegra30_speedo.c
arch/arm/mach-tegra/tegra3_emc.c
arch/arm/mach-tegra/tegra_fuse.c

index 92d5fb3..8d73fcd 100644 (file)
@@ -8697,7 +8697,9 @@ static struct tegra11_emc_pdata e1611_h5tc4g63mfr_pba_T40S_pdata = {
 static struct tegra11_emc_pdata *dalmore_get_emc_data(void)
 {
        struct board_info board_info;
+       u32 tegra_sku_id;
 
+       tegra_sku_id = tegra_get_sku_id();
        tegra_get_board_info(&board_info);
 
        /* load T40T/T40X Table */
index 96b33d9..0d25e45 100644 (file)
@@ -4376,7 +4376,8 @@ static struct tegra11_emc_pdata *pluto_get_emc_data(void)
        tegra_get_board_info(&board_info);
 
        /* Load AP40 Table */
-       if (board_info.board_id == BOARD_E1580 && tegra_sku_id == 0x6) {
+       if (board_info.board_id == BOARD_E1580
+                       && tegra_get_sku_id() == 0x6) {
                /* Get the memory size */
                mem = memblock_phys_mem_size();
                if (mem > SZ_1G)
index b6825e6..54bde61 100644 (file)
@@ -2232,8 +2232,10 @@ static const char * __init tegra_get_family(void)
 static const char * __init tegra_get_soc_id(void)
 {
        int package_id = tegra_package_id();
+
        return kasprintf(GFP_KERNEL, "REV=%s:SKU=0x%x:PID=0x%x",
-               tegra_revision_name[tegra_revision], tegra_sku_id, package_id);
+               tegra_revision_name[tegra_revision],
+               tegra_get_sku_id(), package_id);
 }
 
 static void __init tegra_soc_info_populate(struct soc_device_attribute
index 03d1f8f..25a803c 100644 (file)
@@ -263,7 +263,7 @@ static int edp_find_speedo_idx(int cpu_speedo_id, unsigned int *cpu_speedo_idx)
        int i, array_size;
        struct tegra_edp_cpu_leakage_params *params;
 
-       switch (tegra_chip_id) {
+       switch (tegra_get_chip_id()) {
        case TEGRA_CHIPID_TEGRA11:
                params = tegra11x_get_leakage_params(0, &array_size);
                break;
@@ -313,7 +313,7 @@ static int init_cpu_edp_limits_calculated(void)
        if (ret)
                return ret;
 
-       switch (tegra_chip_id) {
+       switch (tegra_get_chip_id()) {
        case TEGRA_CHIPID_TEGRA11:
                params = tegra11x_get_leakage_params(cpu_speedo_idx, NULL);
                break;
@@ -448,6 +448,9 @@ static int init_cpu_edp_limits_calculated(void)
 
 void tegra_recalculate_cpu_edp_limits(void)
 {
+       u32 tegra_chip_id;
+
+       tegra_chip_id = tegra_get_chip_id();
        if (tegra_chip_id != TEGRA_CHIPID_TEGRA11 &&
            tegra_chip_id != TEGRA_CHIPID_TEGRA14 &&
            tegra_chip_id != TEGRA_CHIPID_TEGRA12)
@@ -474,7 +477,7 @@ void __init tegra_init_cpu_edp_limits(unsigned int regulator_mA)
                goto end;
        regulator_cur = regulator_mA + OVERRIDE_DEFAULT;
 
-       switch (tegra_chip_id) {
+       switch (tegra_get_chip_id()) {
        case TEGRA_CHIPID_TEGRA11:
        case TEGRA_CHIPID_TEGRA14:
        case TEGRA_CHIPID_TEGRA12:
@@ -653,7 +656,9 @@ static int edp_reg_override_write(struct file *file,
        char buf[32], *end;
        unsigned int edp_reg_override_mA_temp;
        unsigned int edp_reg_override_mA_prev = edp_reg_override_mA;
+       u32 tegra_chip_id;
 
+       tegra_chip_id = tegra_get_chip_id();
        if (!(tegra_chip_id == TEGRA_CHIPID_TEGRA11 ||
                tegra_chip_id == TEGRA_CHIPID_TEGRA14 ||
                tegra_chip_id == TEGRA_CHIPID_TEGRA12))
index d5bdede..89e2353 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * arch/arm/mach-tegra/edp_core.c
  *
- * Copyright (C) 2012 NVIDIA Corporation.
+ * Copyright (C) 2012-2013, NVIDIA Corporation. All rights reserved.
  *
  * This software is licensed under the terms of the GNU General Public
  * License version 2, as published by the Free Software Foundation, and
@@ -168,7 +168,9 @@ void __init tegra_init_core_edp_limits(unsigned int regulator_mA)
 {
        int i;
        unsigned long *cap_rates;
+       u32 tegra_chip_id;
 
+       tegra_chip_id = tegra_get_chip_id();
        switch (tegra_chip_id) {
        case TEGRA_CHIPID_TEGRA11:
                if (tegra11x_select_core_edp_table(
index 4384f34..3b71b7b 100644 (file)
@@ -168,10 +168,10 @@ struct fuse_data {
        u32 odm_lock;
 };
 
-extern int tegra_sku_id;
-extern int tegra_chip_id;
-extern int tegra_bct_strapping;
 
+u32 tegra_get_sku_id(void);
+u32 tegra_get_chip_id(void);
+u32 tegra_get_bct_strapping(void);
 u32 tegra_fuse_readl(unsigned long offset);
 void tegra_fuse_writel(u32 val, unsigned long offset);
 
index f48ba34..6e478fd 100644 (file)
@@ -85,7 +85,7 @@ static void __init setup_core_count(void)
 
        /* Dual core SKU */
        if (tegra_get_chipid() == TEGRA_CHIPID_TEGRA11) {
-               if (tegra_sku_id == 0x20) {
+               if (tegra_get_sku_id() == 0x20) {
                        number_of_cores = 2;
                        return;
                }
@@ -316,7 +316,7 @@ static int __cpuinit tegra_boot_secondary(unsigned int cpu, struct task_struct *
        tegra_put_cpu_in_reset(cpu);
 #endif
 
-       switch (tegra_chip_id) {
+       switch (tegra_get_chip_id()) {
        case TEGRA_CHIPID_TEGRA2:
                /*
                 * Unhalt the CPU. If the flow controller was used to power-gate
index 0ec478f..5f45c3a 100644 (file)
@@ -636,7 +636,7 @@ int tegra_powergate_init_refcount(void)
 
 int __init tegra_powergate_init(void)
 {
-       switch (tegra_chip_id) {
+       switch (tegra_get_chip_id()) {
                case TEGRA_CHIPID_TEGRA2:
                        pg_ops = tegra2_powergate_init_chip_support();
                        break;
index 36bafda..a4df14b 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * arch/arm/mach-tegra/reset.c
  *
- * Copyright (C) 2011-2012 NVIDIA Corporation.
+ * Copyright (C) 2011-2013, NVIDIA Corporation. All rights reserved.
  *
  * This software is licensed under the terms of the GNU General Public
  * License version 2, as published by the Free Software Foundation, and
@@ -64,7 +64,7 @@ static void tegra_cpu_reset_handler_enable(void)
         * Prevent further modifications to the physical reset vector.
         *  NOTE: Has no effect on chips prior to Tegra30.
         */
-       if (tegra_chip_id != TEGRA_CHIPID_TEGRA2) {
+       if (tegra_get_chip_id() != TEGRA_CHIPID_TEGRA2) {
                reg = readl(sb_ctrl);
                reg |= 2;
                writel(reg, sb_ctrl);
index 42e30f0..3ac09fb 100644 (file)
@@ -596,7 +596,7 @@ static inline void override_min_millivolts(struct cpu_cvb_dvfs *d)
         * override pll min_millivolts for T40DC sku (the only parameter
         * that seprated it from all skus with speedo_id 1)
         */
-       if (tegra_sku_id == 0x20)
+       if (tegra_get_sku_id() == 0x20)
                d->cvb_table[0].cvb_pll_param.c0 = 940 * d->voltage_scale;
 }
 
@@ -711,6 +711,7 @@ static int __init get_core_nominal_mv_index(int speedo_id)
        int mv = tegra_core_speedo_mv();
        int core_edp_voltage = get_core_edp();
        int core_edp_current = get_maximum_core_current_supported();
+       u32 tegra_sku_id;
 
        /*
         * If core regulator current limit is below minimum required to reach
@@ -736,6 +737,7 @@ static int __init get_core_nominal_mv_index(int speedo_id)
        if (!core_edp_voltage)
                core_edp_voltage = TEGRA11_CORE_VOLTAGE_CAP;
 
+       tegra_sku_id = tegra_get_sku_id();
        if ((core_edp_voltage <= TEGRA11_CORE_VOLTAGE_CAP) ||
            ((tegra_sku_id != 0x4) && (tegra_sku_id != 0x8)))
                mv = min(mv, core_edp_voltage);
index e6775c3..f11e284 100644 (file)
@@ -966,7 +966,7 @@ int __init tegra11x_select_core_edp_table(unsigned int regulator_mA,
                                          struct tegra_core_edp_limits *limits)
 {
        int i;
-       int sku = tegra_sku_id;
+       int sku;
        unsigned long *cap_rates;
        struct core_edp_entry *edp_entry;
 
@@ -982,6 +982,7 @@ int __init tegra11x_select_core_edp_table(unsigned int regulator_mA,
                cap_clks[i] = c;
        }
 
+       sku = tegra_get_sku_id();
        edp_entry = find_edp_entry(sku, regulator_mA);
        if (!edp_entry) {
                pr_info("%s: no core edp table for sku %d, %d mA\n",
index 9e42263..a869bc9 100644 (file)
@@ -1163,7 +1163,7 @@ static struct device_node *tegra_emc_ramcode_devnode(struct device_node *np)
        for_each_child_of_node(np, iter) {
                if (of_property_read_u32(np, "nvidia,ram-code", &reg))
                        continue;
-               if (reg == tegra_bct_strapping)
+               if (reg == tegra_get_bct_strapping())
                        return of_node_get(iter);
        }
 
@@ -1177,10 +1177,12 @@ static struct tegra11_emc_pdata *tegra_emc_dt_parse_pdata(
        struct device_node *tnp, *iter;
        struct tegra11_emc_pdata *pdata;
        int ret, i, num_tables;
+       u32 tegra_bct_strapping;
 
        if (!np)
                return NULL;
 
+       tegra_bct_strapping = tegra_get_bct_strapping();
        if (of_find_property(np, "nvidia,use-ram-code", NULL)) {
                tnp = tegra_emc_ramcode_devnode(np);
                if (!tnp)
index 82d0508..7d90918 100644 (file)
@@ -855,6 +855,7 @@ static int soctherm_hw_action_get_cur_state(struct thermal_cooling_device *cdev,
        struct thermal_trip_info *trip_state = cdev->devdata;
        u32 r, m, n;
        int i, j;
+       u32 tegra_chip_id;
 
        if (!trip_state)
                return 0;
@@ -863,6 +864,7 @@ static int soctherm_hw_action_get_cur_state(struct thermal_cooling_device *cdev,
        if (trip_state->trip_type != THERMAL_TRIP_HOT)
                return 0;
 
+       tegra_chip_id = tegra_get_chip_id();
        for (j = 0; j < THROTTLE_DEV_SIZE; j++) {
                r = soctherm_readl(CPU_PSKIP_STATUS + (j * 4));
                if (!REG_GET(r, CPU_PSKIP_STATUS_ENABLED))
@@ -1564,12 +1566,14 @@ static irqreturn_t soctherm_edp_isr(int irq, void *arg)
 static void tegra11_soctherm_throttle_program(enum soctherm_throttle_id throt)
 {
        u32 r;
+       u32 tegra_chip_id;
        int i;
        u8 gk20a_throt;
        bool throt_enable = false;
        struct soctherm_throttle_dev *dev;
        struct soctherm_throttle *data = &plat_data.throttle[throt];
 
+       tegra_chip_id = tegra_get_chip_id();
        for (i = 0; i < THROTTLE_DEV_SIZE; i++) {
                dev = &data->devs[i];
                if (!dev->enable)
@@ -1671,6 +1675,7 @@ static int __init soctherm_clk_init(void)
 {
        unsigned long default_soctherm_clk_rate;
        unsigned long default_tsensor_clk_rate;
+       u32 tegra_chip_id;
 
        soctherm_clk = clk_get_sys("soc_therm", NULL);
        tsensor_clk = clk_get_sys("tegra-tsensor", NULL);
@@ -1682,6 +1687,7 @@ static int __init soctherm_clk_init(void)
                return -EINVAL;
        }
 
+       tegra_chip_id = tegra_get_chip_id();
        /* initialize default clock rates */
        if (tegra_chip_id == TEGRA_CHIPID_TEGRA11) {
                default_soctherm_clk_rate =
@@ -1738,6 +1744,7 @@ static int soctherm_fuse_read_calib_base(void)
 {
        s32 calib_cp, calib_ft;
        s32 nominal_calib_cp, nominal_calib_ft;
+       u32 tegra_chip_id;
 
        if (tegra_fuse_calib_base_get_cp(&fuse_calib_base_cp, &calib_cp) ||
            tegra_fuse_calib_base_get_ft(&fuse_calib_base_ft, &calib_ft)) {
@@ -1746,6 +1753,7 @@ static int soctherm_fuse_read_calib_base(void)
        }
 
        nominal_calib_cp = 25;
+       tegra_chip_id = tegra_get_chip_id();
        if (tegra_chip_id == TEGRA_CHIPID_TEGRA11)
                nominal_calib_ft = 90;
        else if (tegra_chip_id == TEGRA_CHIPID_TEGRA14)
@@ -1830,6 +1838,7 @@ static int soctherm_fuse_read_tsensor(enum soctherm_sense sensor)
        s32 calib, delta_sens, delta_temp;
        s16 therm_a, therm_b;
        s32 div, mult, actual_tsensor_ft, actual_tsensor_cp;
+       u32 tegra_chip_id;
 
        tegra_fuse_get_tsensor_calib(sensor2tsensorcalib[sensor], &value);
 
@@ -1858,6 +1867,7 @@ static int soctherm_fuse_read_tsensor(enum soctherm_sense sensor)
                                     ((s64)actual_tsensor_cp * actual_temp_ft)),
                                    (s64)delta_sens);
 
+       tegra_chip_id = tegra_get_chip_id();
        /* FUSE corrections for Tegra when precision is set LOW */
        if (PRECISION_IS_LOWER()) {
                if (tegra_chip_id == TEGRA_CHIPID_TEGRA11) {
@@ -2003,7 +2013,9 @@ static int soctherm_init_platform_data(void)
        int i, j, k;
        long rem;
        u32 r;
+       u32 tegra_chip_id;
 
+       tegra_chip_id = tegra_get_chip_id();
        if (tegra_chip_id == TEGRA_CHIPID_TEGRA11)
                sensor_defaults = default_t11x_sensor_params;
        else if (tegra_chip_id == TEGRA_CHIPID_TEGRA14)
@@ -2319,7 +2331,9 @@ static int tegra11_soctherem_oc_int_init(int irq_base, int num_irqs)
 int __init tegra11_soctherm_init(struct soctherm_platform_data *data)
 {
        int ret;
+       u32 tegra_chip_id;
 
+       tegra_chip_id = tegra_get_chip_id();
        if (!(tegra_chip_id == TEGRA_CHIPID_TEGRA11 ||
              tegra_chip_id == TEGRA_CHIPID_TEGRA14 ||
              tegra_chip_id == TEGRA_CHIPID_TEGRA12)) {
@@ -2380,6 +2394,7 @@ static int regs_show(struct seq_file *s, void *data)
        u32 state;
        int tcpu[TSENSE_SIZE];
        int i, j, level;
+       u32 tegra_chip_id;
 
        if (soctherm_suspended) {
                seq_printf(s, "SOC_THERM is SUSPENDED\n");
@@ -2538,6 +2553,7 @@ static int regs_show(struct seq_file *s, void *data)
        state = REG_GET(r, CPU_PSKIP_STATUS_ENABLED);
        seq_printf(s, "enabled(%d)\n", state);
 
+       tegra_chip_id = tegra_get_chip_id();
        r = soctherm_readl(CPU_PSKIP_STATUS + 4);
        if (tegra_chip_id == TEGRA_CHIPID_TEGRA12) {
                state = REG_GET(r, CPU_PSKIP_STATUS_ENABLED);
index e91964c..6d51d2d 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * arch/arm/mach-tegra/tegra11_speedo.c
  *
- * Copyright (C) 2012 NVIDIA Corporation
+ * Copyright (C) 2012-2013, NVIDIA Corporation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -142,7 +142,7 @@ void tegra_init_speedo_data(void)
                pr_warn("Tegra11: CPU IDDQ and speedo may be bogus");
        }
 
-       rev_sku_to_speedo_ids(tegra_revision, tegra_sku_id);
+       rev_sku_to_speedo_ids(tegra_revision, tegra_get_sku_id());
 
        pr_info("Tegra11: CPU Speedo ID %d, Soc Speedo ID %d",
                cpu_speedo_id, soc_speedo_id);
@@ -209,6 +209,9 @@ int tegra_cpu_speedo_mv(void)
 
 int tegra_core_speedo_mv(void)
 {
+       u32 tegra_sku_id;
+
+       tegra_sku_id = tegra_get_sku_id();
        switch (soc_speedo_id) {
        case 0:
                if (core_process_id == 1)
index acfbc4b..9d80960 100644 (file)
@@ -169,7 +169,7 @@ int __init tegra12x_select_core_edp_table(unsigned int regulator_mA,
                                          struct tegra_core_edp_limits *limits)
 {
        int i;
-       int sku = tegra_sku_id;
+       int sku;
        unsigned long *cap_rates;
        struct core_edp_entry *edp_entry;
 
@@ -186,6 +186,7 @@ int __init tegra12x_select_core_edp_table(unsigned int regulator_mA,
                cap_clks[i] = c;
        }
 
+       sku = tegra_get_sku_id();
        if (sku == 0x0)
                sku = 0x7;
 
index b6eb3bb..d217c7d 100644 (file)
@@ -162,7 +162,8 @@ void tegra_init_speedo_data(void)
                pr_warn("Tegra12: Warning: PLEASE USE BOARD WITH FUSED SPEEDO VALUE !!!!\n");
        }
 
-       rev_sku_to_speedo_ids(tegra_revision, tegra_sku_id);
+
+       rev_sku_to_speedo_ids(tegra_revision, tegra_get_sku_id());
 
        for (i = 0; i < GPU_PROCESS_CORNERS_NUM; i++) {
                if (gpu_speedo_value <
index b852b6e..189af42 100644 (file)
@@ -304,7 +304,7 @@ int __init tegra14x_select_core_edp_table(unsigned int regulator_mA,
                                          struct tegra_core_edp_limits *limits)
 {
        int i;
-       int sku = tegra_sku_id;
+       int sku;
        unsigned long *cap_rates;
        struct core_edp_entry *edp_entry;
 
@@ -321,6 +321,7 @@ int __init tegra14x_select_core_edp_table(unsigned int regulator_mA,
                cap_clks[i] = c;
        }
 
+       sku = tegra_get_sku_id();
        if (sku == 0x0)
                sku = 0x7;
 
index a8b0f9d..8b65310 100644 (file)
@@ -94,10 +94,11 @@ static void rev_sku_to_speedo_ids(int rev, int sku)
 void tegra_init_speedo_data(void)
 {
        int i;
+
        cpu_speedo_value = 1024 + tegra_fuse_readl(FUSE_CPU_SPEEDO_0);
        core_speedo_value = tegra_fuse_readl(FUSE_CORE_SPEEDO_0);
 
-       rev_sku_to_speedo_ids(tegra_revision, tegra_sku_id);
+       rev_sku_to_speedo_ids(tegra_revision, tegra_get_sku_id());
 
        for (i = 0; i < CPU_PROCESS_CORNERS_NUM; i++) {
                if (cpu_speedo_value <
index 4da5161..94a57c5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
@@ -64,11 +64,13 @@ void tegra20_init_speedo_data(void)
        u32 reg;
        u32 val;
        int i;
+       u32 tegra_sku_id;
 
        BUILD_BUG_ON(ARRAY_SIZE(cpu_process_speedos) != SPEEDO_ID_COUNT);
        BUILD_BUG_ON(ARRAY_SIZE(core_process_speedos) != SPEEDO_ID_COUNT);
 
        tegra_package_id = -1;
+       tegra_sku_id = tegra_get_sku_id();
 
        if (SPEEDO_ID_SELECT_0(tegra_revision))
                tegra_soc_speedo_id = SPEEDO_ID_0;
index 1d904a7..81ebd9e 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2011 Google, Inc.
+ * Copyright (C) 2013, NVIDIA Corporation. All rights reserved.
  *
  * Author:
  *     Colin Cross <ccross@android.com>
@@ -285,7 +286,7 @@ static struct device_node *tegra_emc_ramcode_devnode(struct device_node *np)
        for_each_child_of_node(np, iter) {
                if (of_property_read_u32(np, "nvidia,ram-code", &reg))
                        continue;
-               if (reg == tegra_bct_strapping)
+               if (reg == tegra_get_bct_strapping())
                        return of_node_get(iter);
        }
 
@@ -299,10 +300,12 @@ static struct tegra_emc_pdata *tegra_emc_dt_parse_pdata(
        struct device_node *tnp, *iter;
        struct tegra_emc_pdata *pdata;
        int ret, i, num_tables;
+       u32 tegra_bct_strapping;
 
        if (!np)
                return NULL;
 
+       tegra_bct_strapping = tegra_get_bct_strapping();
        if (of_find_property(np, "nvidia,use-ram-code", NULL)) {
                tnp = tegra_emc_ramcode_devnode(np);
                if (!tnp)
index ca6e2b2..bf61cff 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms and conditions of the GNU General Public License,
@@ -307,8 +307,10 @@ void tegra30_init_speedo_data(void)
        u32 cpu_speedo_val;
        u32 core_speedo_val;
        int i;
-       int fuse_sku = tegra_sku_id;
-       int new_sku = fuse_sku;
+       int fuse_sku, new_sku;
+
+       fuse_sku = tegra_get_sku_id();
+       new_sku = fuse_sku;
 
        BUILD_BUG_ON(ARRAY_SIZE(cpu_process_speedos) !=
                        THRESHOLD_INDEX_COUNT);
index b071894..424a4c9 100644 (file)
@@ -1059,7 +1059,7 @@ static struct device_node *tegra_emc_ramcode_devnode(struct device_node *np)
        for_each_child_of_node(np, iter) {
                if (of_property_read_u32(np, "nvidia,ram-code", &reg))
                        continue;
-               if (reg == tegra_bct_strapping)
+               if (reg == tegra_get_bct_strapping())
                        return of_node_get(iter);
        }
 
@@ -1073,10 +1073,12 @@ static struct tegra30_emc_pdata *tegra_emc_dt_parse_pdata(
        struct device_node *tnp, *iter;
        struct tegra30_emc_pdata *pdata;
        int ret, i, num_tables;
+       u32 tegra_bct_strapping;
 
        if (!np)
                return NULL;
 
+       tegra_bct_strapping = tegra_get_bct_strapping();
        if (of_find_property(np, "nvidia,use-ram-code", NULL)) {
                tnp = tegra_emc_ramcode_devnode(np);
                if (!tnp)
index 6596a29..b214c80 100644 (file)
@@ -80,8 +80,10 @@ struct tegra_id {
 
 static struct tegra_id tegra_id;
 
-int tegra_sku_id;
-int tegra_chip_id;
+static u32 tegra_fuse_sku_id;
+static u32 tegra_fuse_chip_id;
+static u32 tegra_fuse_bct_strapping;
+
 enum tegra_revision tegra_revision;
 static unsigned int tegra_fuse_vp8_enable;
 static int tegra_gpu_num_pixel_pipes;
@@ -110,7 +112,6 @@ DEFINE_MUTEX(fuse_lock);
 /* The BCT to use at boot is specified by board straps that can be read
  * through a APB misc register and decoded. 2 bits, i.e. 4 possible BCTs.
  */
-int tegra_bct_strapping;
 
 #define STRAP_OPT 0x008
 #define GMI_AD0 BIT(4)
@@ -1277,22 +1278,57 @@ u32 tegra_read_chipid(void)
        return readl_relaxed(IO_ADDRESS(TEGRA_APB_MISC_BASE) + 0x804);
 }
 
-void tegra_init_fuse(void)
+static void tegra_set_sku_id(void)
+{
+       u32 reg;
+
+       reg = tegra_fuse_readl(FUSE_SKU_INFO);
+       tegra_fuse_sku_id = reg & 0xFF;
+}
+
+static void tegra_set_chip_id(void)
 {
        u32 id;
 
-       u32 reg = readl(IO_ADDRESS(TEGRA_CLK_RESET_BASE + 0x48));
-       reg |= BIT(28);
-       writel(reg, IO_ADDRESS(TEGRA_CLK_RESET_BASE + 0x48));
+       id = tegra_read_chipid();
+       tegra_fuse_chip_id = (id >> 8) & 0xff;
+}
 
-       reg = tegra_fuse_readl(FUSE_SKU_INFO);
-       tegra_sku_id = reg & 0xFF;
+static void tegra_set_bct_strapping(void)
+{
+       u32 reg;
 
        reg = readl(IO_ADDRESS(TEGRA_APB_MISC_BASE + STRAP_OPT));
-       tegra_bct_strapping = (reg & RAM_ID_MASK) >> RAM_CODE_SHIFT;
+       tegra_fuse_bct_strapping = (reg & RAM_ID_MASK) >> RAM_CODE_SHIFT;
+}
 
-       id = tegra_read_chipid();
-       tegra_chip_id = (id >> 8) & 0xff;
+u32 tegra_get_sku_id(void)
+{
+       return tegra_fuse_sku_id;
+}
+
+u32 tegra_get_chip_id(void)
+{
+       return tegra_fuse_chip_id;
+}
+
+u32 tegra_get_bct_strapping(void)
+{
+       return tegra_fuse_bct_strapping;
+}
+
+void tegra_init_fuse(void)
+{
+       u32 sku_id;
+
+       u32 reg = readl(IO_ADDRESS(TEGRA_CLK_RESET_BASE + 0x48));
+       reg |= BIT(28);
+       writel(reg, IO_ADDRESS(TEGRA_CLK_RESET_BASE + 0x48));
+
+       tegra_set_sku_id();
+       sku_id = tegra_get_sku_id();
+       tegra_set_bct_strapping();
+       tegra_set_chip_id();
 
        tegra_revision = tegra_get_revision();
 
@@ -1300,7 +1336,7 @@ void tegra_init_fuse(void)
 
        pr_info("Tegra Revision: %s SKU: 0x%x CPU Process: %d Core Process: %d\n",
                tegra_revision_name[tegra_revision],
-               tegra_sku_id, tegra_cpu_process_id(),
+               sku_id, tegra_cpu_process_id(),
                tegra_core_process_id());
 
 #ifdef CONFIG_TEGRA_PRE_SILICON_SUPPORT