int board_get_revision(void) { struct spl_machine_param *params = spl_get_machine_params(); unsigned gpio[CONFIG_BOARD_REV_GPIO_COUNT]; gpio[0] = params->board_rev_gpios & 0xffff; gpio[1] = params->board_rev_gpios >> 16; return gpio_decode_number(gpio, CONFIG_BOARD_REV_GPIO_COUNT); }
int board_wakeup_permitted(void) { struct spl_machine_param *param = spl_get_machine_params(); const int gpio = param->bad_wake_gpio; int is_bad_wake; /* We're a bad wakeup if the gpio was defined and was high */ is_bad_wake = ((gpio != -1) && gpio_get_value(gpio)); return !is_bad_wake; }
/** * Get the required memory type and speed (SPL version). * * In SPL we have no device tree, so we use the machine parameters * * @param mem_type Returns memory type * @param frequency_mhz Returns memory speed in MHz * @param arm_freq Returns ARM clock speed in MHz * @param mem_manuf Return Memory Manufacturer name */ static void clock_get_mem_selection(enum ddr_mode *mem_type, unsigned *frequency_mhz, unsigned *arm_freq, enum mem_manuf *mem_manuf) { struct spl_machine_param *params; params = spl_get_machine_params(); *mem_type = params->mem_type; *frequency_mhz = params->frequency_mhz; *arm_freq = params->arm_freq_mhz; *mem_manuf = params->mem_manuf; }
/** * Initialize the pmic voltages to power up the system * This also calls i2c_init so that we can program the pmic * * REG_ENABLE = 0, needed to set the buck/ldo enable bit ON * * @return Return 0 if ok, else -1 */ int power_init(void) { int error = 0; #ifdef CONFIG_SPL_BUILD struct spl_machine_param *param = spl_get_machine_params(); /* Set the i2c register address base so i2c works before FDT */ i2c_set_early_reg(param->i2c_base); #endif ps_hold_setup(); /* init the i2c so that we can program pmic chip */ i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); /* * We're using CR1616 coin cell battery that is non-rechargeable * battery. But, BBCHOSTEN bit of the BBAT Charger Register in * MAX77686 is enabled by default for charging coin cell. * * Also, we cannot meet the coin cell reverse current spec. in UL * standard if BBCHOSTEN bit is enabled. * * Disable Coin BATT Charging */ error = max77686_disable_backup_batt(); error |= max77686_volsetting(PMIC_BUCK2, CONFIG_VDD_ARM_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUCK3, CONFIG_VDD_INT_UV, REG_ENABLE, MAX77686_UV); error |= max77686_volsetting(PMIC_BUCK1, CONFIG_VDD_MIF_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_BUCK4, CONFIG_VDD_G3D_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_LDO2, CONFIG_VDD_LDO2_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_LDO3, CONFIG_VDD_LDO3_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_LDO5, CONFIG_VDD_LDO5_MV, REG_ENABLE, MAX77686_MV); error |= max77686_volsetting(PMIC_LDO10, CONFIG_VDD_LDO10_MV, REG_ENABLE, MAX77686_MV); if (error != 0) debug("power init failed\n"); return error; }
void mem_ctrl_init(int reset) { struct spl_machine_param *param = spl_get_machine_params(); struct mem_timings *mem; int ret; mem = clock_get_mem_timings(); /* If there are any other memory variant, add their init call below */ if (param->mem_type == DDR_MODE_DDR3) { ret = ddr3_mem_ctrl_init(mem, param->mem_iv_size, reset); if (ret) { /* will hang if failed to init memory control */ while (1) ; } } else { /* will hang if unknow memory type */ while (1) ; } }