Lines Matching defs:ddrss

190 	struct k3_ddrss_desc *ddrss = (struct k3_ddrss_desc *)pd->ddr_instance;
193 status = ddrss->driverdt->readreg(pd, LPDDR4_CTL_REGS, offset, &regval);
204 static void k3_lpddr4_freq_update(struct k3_ddrss_desc *ddrss)
208 for (counter = 0; counter < ddrss->ddr_fhs_cnt; counter++) {
209 if (wait_for_bit_le32(ddrss->ddrss_ctrl_mmr +
210 CTRLMMR_DDR4_FSP_CLKCHNG_REQ_OFFS + ddrss->instance * 0x10, 0x80,
216 req_type = readl(ddrss->ddrss_ctrl_mmr +
217 CTRLMMR_DDR4_FSP_CLKCHNG_REQ_OFFS + ddrss->instance * 0x10) & 0x03;
220 __func__, req_type, counter, ddrss->instance);
223 clk_set_rate(&ddrss->ddr_clk, ddrss->ddr_freq1);
225 clk_set_rate(&ddrss->ddr_clk, ddrss->ddr_freq2);
227 clk_set_rate(&ddrss->ddr_clk, ddrss->ddr_freq0);
231 writel(0x1, ddrss->ddrss_ctrl_mmr +
232 CTRLMMR_DDR4_FSP_CLKCHNG_ACK_OFFS + ddrss->instance * 0x10);
233 if (wait_for_bit_le32(ddrss->ddrss_ctrl_mmr +
234 CTRLMMR_DDR4_FSP_CLKCHNG_REQ_OFFS + ddrss->instance * 0x10, 0x80,
239 writel(0x0, ddrss->ddrss_ctrl_mmr +
240 CTRLMMR_DDR4_FSP_CLKCHNG_ACK_OFFS + ddrss->instance * 0x10);
246 struct k3_ddrss_desc *ddrss = (struct k3_ddrss_desc *)pd->ddr_instance;
250 switch (ddrss->dram_class) {
254 k3_lpddr4_freq_update(ddrss);
261 static int k3_ddrss_init_freq(struct k3_ddrss_desc *ddrss)
264 lpddr4_privatedata *pd = &ddrss->pd;
266 ddrss->dram_class = k3_lpddr4_read_ddr_type(pd);
268 switch (ddrss->dram_class) {
271 ret = clk_set_rate(&ddrss->ddr_clk, ddrss->ddr_freq1);
274 ret = clk_set_rate(&ddrss->ddr_clk, ddrss->ddr_freq0);
282 dev_err(ddrss->dev, "ddr clk init failed: %d\n", ret);
296 static int k3_ddrss_power_on(struct k3_ddrss_desc *ddrss)
300 debug("%s(ddrss=%p)\n", __func__, ddrss);
302 ret = power_domain_on(&ddrss->ddrcfg_pwrdmn);
304 dev_err(ddrss->dev, "power_domain_on() failed: %d\n", ret);
308 ret = power_domain_on(&ddrss->ddrdata_pwrdmn);
310 dev_err(ddrss->dev, "power_domain_on() failed: %d\n", ret);
314 ret = device_get_supply_regulator(ddrss->dev, "vtt-supply",
315 &ddrss->vtt_supply);
317 dev_dbg(ddrss->dev, "vtt-supply not found.\n");
319 ret = regulator_set_value(ddrss->vtt_supply, 3300000);
322 dev_dbg(ddrss->dev, "VTT regulator enabled, volt = %d\n",
323 regulator_get_value(ddrss->vtt_supply));
331 struct k3_ddrss_desc *ddrss = dev_get_priv(dev);
343 ddrss->ddrss_ctl_cfg = reg;
350 ddrss->ddrss_ctrl_mmr = reg;
355 ddrss->ddrss_ss_cfg = reg;
357 ret = power_domain_get_by_index(dev, &ddrss->ddrcfg_pwrdmn, 0);
363 ret = power_domain_get_by_index(dev, &ddrss->ddrdata_pwrdmn, 1);
369 ret = clk_get_by_index(dev, 0, &ddrss->ddr_clk);
373 ret = clk_get_by_index(dev, 1, &ddrss->osc_clk);
379 ret = dev_read_u32(dev, "instance", &ddrss->instance);
385 ddrss->instance = 0;
388 ret = dev_read_u32(dev, "ti,ddr-freq0", &ddrss->ddr_freq0);
390 ddrss->ddr_freq0 = clk_get_rate(&ddrss->osc_clk);
395 ret = dev_read_u32(dev, "ti,ddr-freq1", &ddrss->ddr_freq1);
399 ret = dev_read_u32(dev, "ti,ddr-freq2", &ddrss->ddr_freq2);
403 ret = dev_read_u32(dev, "ti,ddr-fhs-cnt", &ddrss->ddr_fhs_cnt);
407 ddrss->ti_ecc_enabled = dev_read_bool(dev, "ti,ecc-enable");
412 void k3_lpddr4_probe(struct k3_ddrss_desc *ddrss)
416 lpddr4_config *config = &ddrss->config;
418 status = ddrss->driverdt->probe(config, &configsize);
429 void k3_lpddr4_init(struct k3_ddrss_desc *ddrss)
432 lpddr4_config *config = &ddrss->config;
433 lpddr4_obj *driverdt = ddrss->driverdt;
434 lpddr4_privatedata *pd = &ddrss->pd;
441 config->ctlbase = (struct lpddr4_ctlregs_s *)ddrss->ddrss_ctl_cfg;
447 pd->ddr_instance = (void *)ddrss;
460 void populate_data_array_from_dt(struct k3_ddrss_desc *ddrss,
465 ret = dev_read_u32_array(ddrss->dev, "ti,ctl-data",
474 ret = dev_read_u32_array(ddrss->dev, "ti,pi-data",
483 ret = dev_read_u32_array(ddrss->dev, "ti,phy-data",
493 void k3_lpddr4_hardware_reg_init(struct k3_ddrss_desc *ddrss)
497 lpddr4_obj *driverdt = ddrss->driverdt;
498 lpddr4_privatedata *pd = &ddrss->pd;
500 populate_data_array_from_dt(ddrss, &reginitdata);
519 void k3_lpddr4_start(struct k3_ddrss_desc *ddrss)
524 lpddr4_obj *driverdt = ddrss->driverdt;
525 lpddr4_privatedata *pd = &ddrss->pd;
566 static void k3_ddrss_lpddr4_ecc_calc_reserved_mem(struct k3_ddrss_desc *ddrss)
570 ddrss->ecc_reserved_space = gd->ram_size;
571 do_div(ddrss->ecc_reserved_space, 9);
574 ddrss->ecc_reserved_space = 1ull << (fls(ddrss->ecc_reserved_space));
577 static void k3_ddrss_lpddr4_ecc_init(struct k3_ddrss_desc *ddrss)
579 u32 ecc_region_start = ddrss->ecc_regions[0].start;
580 u32 ecc_range = ddrss->ecc_regions[0].range;
581 u32 base = (u32)ddrss->ddrss_ss_cfg;
607 struct k3_ddrss_desc *ddrss = dev_get_priv(dev);
615 ddrss->dev = dev;
616 ret = k3_ddrss_power_on(ddrss);
622 writel(0x000001EF, ddrss->ddrss_ss_cfg + DDRSS_V2A_CTL_REG);
623 writel(0x0, ddrss->ddrss_ss_cfg + DDRSS_ECC_CTRL_REG);
626 ddrss->driverdt = lpddr4_getinstance();
628 k3_lpddr4_probe(ddrss);
629 k3_lpddr4_init(ddrss);
630 k3_lpddr4_hardware_reg_init(ddrss);
632 ret = k3_ddrss_init_freq(ddrss);
636 k3_lpddr4_start(ddrss);
638 if (ddrss->ti_ecc_enabled) {
639 if (!ddrss->ddrss_ss_cfg) {
645 k3_ddrss_lpddr4_ecc_calc_reserved_mem(ddrss);
648 ddrss->ecc_regions[0].start = gd->ram_base;
649 ddrss->ecc_regions[0].range = gd->ram_size - ddrss->ecc_reserved_space;
650 k3_ddrss_lpddr4_ecc_init(ddrss);
658 struct k3_ddrss_desc *ddrss = dev_get_priv(dev);
663 if (ddrss->ecc_reserved_space == 0)
667 if (ddrss->ecc_reserved_space > bd->bi_dram[bank].size) {
668 ddrss->ecc_reserved_space -= bd->bi_dram[bank].size;
671 bd->bi_dram[bank].size -= ddrss->ecc_reserved_space;
702 {.compatible = "ti,am62a-ddrss", .data = (ulong)&k3_data, },
703 {.compatible = "ti,am64-ddrss", .data = (ulong)&k3_data, },
704 {.compatible = "ti,j721e-ddrss", .data = (ulong)&k3_data, },
705 {.compatible = "ti,j721s2-ddrss", .data = (ulong)&j721s2_data, },