Lines Matching refs:cs

264 void gpmc_cs_write_reg(int cs, int idx, u32 val)  in gpmc_cs_write_reg()  argument
268 reg_addr = gpmc_base + GPMC_CS0_OFFSET + (cs * GPMC_CS_SIZE) + idx; in gpmc_cs_write_reg()
272 static u32 gpmc_cs_read_reg(int cs, int idx) in gpmc_cs_read_reg() argument
276 reg_addr = gpmc_base + GPMC_CS0_OFFSET + (cs * GPMC_CS_SIZE) + idx; in gpmc_cs_read_reg()
299 static unsigned long gpmc_get_clk_period(int cs, enum gpmc_clk_domain cd) in gpmc_get_clk_period() argument
309 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1); in gpmc_get_clk_period()
324 static unsigned int gpmc_ns_to_clk_ticks(unsigned int time_ns, int cs, in gpmc_ns_to_clk_ticks() argument
330 tick_ps = gpmc_get_clk_period(cs, cd); in gpmc_ns_to_clk_ticks()
350 unsigned int gpmc_clk_ticks_to_ns(unsigned ticks, int cs, in gpmc_clk_ticks_to_ns() argument
353 return ticks * gpmc_get_clk_period(cs, cd) / 1000; in gpmc_clk_ticks_to_ns()
373 static inline void gpmc_cs_modify_reg(int cs, int reg, u32 mask, bool value) in gpmc_cs_modify_reg() argument
377 l = gpmc_cs_read_reg(cs, reg); in gpmc_cs_modify_reg()
382 gpmc_cs_write_reg(cs, reg, l); in gpmc_cs_modify_reg()
385 static void gpmc_cs_bool_timings(int cs, const struct gpmc_bool_timings *p) in gpmc_cs_bool_timings() argument
387 gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG1, in gpmc_cs_bool_timings()
390 gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG2, in gpmc_cs_bool_timings()
392 gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG3, in gpmc_cs_bool_timings()
394 gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG4, in gpmc_cs_bool_timings()
396 gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG4, in gpmc_cs_bool_timings()
398 gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG6, in gpmc_cs_bool_timings()
401 gpmc_cs_modify_reg(cs, GPMC_CS_CONFIG6, in gpmc_cs_bool_timings()
429 int cs, int reg, int st_bit, int end_bit, int max, in get_gpmc_timing_reg() argument
441 l = gpmc_cs_read_reg(cs, reg); in get_gpmc_timing_reg()
458 time_ns_min = gpmc_clk_ticks_to_ns(l - 1, cs, cd) + 1; in get_gpmc_timing_reg()
459 time_ns = gpmc_clk_ticks_to_ns(l, cs, cd); in get_gpmc_timing_reg()
472 #define GPMC_PRINT_CONFIG(cs, config) \ argument
473 pr_info("cs%i %s: 0x%08x\n", cs, #config, \
474 gpmc_cs_read_reg(cs, config))
476 get_gpmc_timing_reg(cs, (reg), (st), (end), 0, field, GPMC_CD_FCLK, 0, 1, 0)
478 get_gpmc_timing_reg(cs, (reg), (st), (end), (max), field, GPMC_CD_FCLK, 0, 1, 0)
480 get_gpmc_timing_reg(cs, (reg), (st), (end), 0, field, GPMC_CD_FCLK, 0, 1, 1)
482 get_gpmc_timing_reg(cs, (reg), (st), (end), (max), field, GPMC_CD_FCLK, (shift), 1, 1)
484 get_gpmc_timing_reg(cs, (reg), (st), (end), 0, field, GPMC_CD_FCLK, 0, 0, 0)
486 get_gpmc_timing_reg(cs, (reg), (st), (end), 0, field, (cd), 0, 0, 0)
488 get_gpmc_timing_reg(cs, (reg), (st), (end), (max), field, (cd), 0, 0, 0)
490 static void gpmc_show_regs(int cs, const char *desc) in gpmc_show_regs() argument
492 pr_info("gpmc cs%i %s:\n", cs, desc); in gpmc_show_regs()
493 GPMC_PRINT_CONFIG(cs, GPMC_CS_CONFIG1); in gpmc_show_regs()
494 GPMC_PRINT_CONFIG(cs, GPMC_CS_CONFIG2); in gpmc_show_regs()
495 GPMC_PRINT_CONFIG(cs, GPMC_CS_CONFIG3); in gpmc_show_regs()
496 GPMC_PRINT_CONFIG(cs, GPMC_CS_CONFIG4); in gpmc_show_regs()
497 GPMC_PRINT_CONFIG(cs, GPMC_CS_CONFIG5); in gpmc_show_regs()
498 GPMC_PRINT_CONFIG(cs, GPMC_CS_CONFIG6); in gpmc_show_regs()
505 static void gpmc_cs_show_timings(int cs, const char *desc) in gpmc_cs_show_timings() argument
507 gpmc_show_regs(cs, desc); in gpmc_cs_show_timings()
509 pr_info("gpmc cs%i access configuration:\n", cs); in gpmc_cs_show_timings()
536 pr_info("gpmc cs%i timings configuration:\n", cs); in gpmc_cs_show_timings()
570 static inline void gpmc_cs_show_timings(int cs, const char *desc) in gpmc_cs_show_timings() argument
591 static int set_gpmc_timing_reg(int cs, int reg, int st_bit, int end_bit, int max, in set_gpmc_timing_reg() argument
600 ticks = gpmc_ns_to_clk_ticks(time, cs, cd); in set_gpmc_timing_reg()
609 __func__, cs, name, time, ticks, max); in set_gpmc_timing_reg()
614 l = gpmc_cs_read_reg(cs, reg); in set_gpmc_timing_reg()
618 cs, name, ticks, gpmc_get_clk_period(cs, cd) * ticks / 1000, in set_gpmc_timing_reg()
623 gpmc_cs_write_reg(cs, reg, l); in set_gpmc_timing_reg()
629 if (set_gpmc_timing_reg(cs, (reg), (st), (end), (max), \
693 int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t, in gpmc_cs_set_timings() argument
699 gpmc_cs_show_timings(cs, "before gpmc_cs_set_timings"); in gpmc_cs_set_timings()
758 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1); in gpmc_cs_set_timings()
761 gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, l); in gpmc_cs_set_timings()
772 cs, (div * gpmc_get_fclk_period()) / 1000, div); in gpmc_cs_set_timings()
775 gpmc_cs_bool_timings(cs, &t->bool_timings); in gpmc_cs_set_timings()
776 gpmc_cs_show_timings(cs, "after gpmc_cs_set_timings"); in gpmc_cs_set_timings()
781 static int gpmc_cs_set_memconf(int cs, u32 base, u32 size) in gpmc_cs_set_memconf() argument
798 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); in gpmc_cs_set_memconf()
803 gpmc_cs_write_reg(cs, GPMC_CS_CONFIG7, l); in gpmc_cs_set_memconf()
808 static void gpmc_cs_enable_mem(int cs) in gpmc_cs_enable_mem() argument
812 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); in gpmc_cs_enable_mem()
814 gpmc_cs_write_reg(cs, GPMC_CS_CONFIG7, l); in gpmc_cs_enable_mem()
817 static void gpmc_cs_disable_mem(int cs) in gpmc_cs_disable_mem() argument
821 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); in gpmc_cs_disable_mem()
823 gpmc_cs_write_reg(cs, GPMC_CS_CONFIG7, l); in gpmc_cs_disable_mem()
826 static void gpmc_cs_get_memconf(int cs, u32 *base, u32 *size) in gpmc_cs_get_memconf() argument
831 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); in gpmc_cs_get_memconf()
837 static int gpmc_cs_mem_enabled(int cs) in gpmc_cs_mem_enabled() argument
841 l = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG7); in gpmc_cs_mem_enabled()
845 static void gpmc_cs_set_reserved(int cs, int reserved) in gpmc_cs_set_reserved() argument
847 struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; in gpmc_cs_set_reserved()
852 static bool gpmc_cs_reserved(int cs) in gpmc_cs_reserved() argument
854 struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; in gpmc_cs_reserved()
859 static void gpmc_cs_set_name(int cs, const char *name) in gpmc_cs_set_name() argument
861 struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; in gpmc_cs_set_name()
866 static const char *gpmc_cs_get_name(int cs) in gpmc_cs_get_name() argument
868 struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; in gpmc_cs_get_name()
887 static int gpmc_cs_insert_mem(int cs, unsigned long base, unsigned long size) in gpmc_cs_insert_mem() argument
889 struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; in gpmc_cs_insert_mem()
903 static int gpmc_cs_delete_mem(int cs) in gpmc_cs_delete_mem() argument
905 struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; in gpmc_cs_delete_mem()
927 static int gpmc_cs_remap(int cs, u32 base) in gpmc_cs_remap() argument
932 if (cs > gpmc_cs_num) { in gpmc_cs_remap()
944 gpmc_cs_get_memconf(cs, &old_base, &size); in gpmc_cs_remap()
948 ret = gpmc_cs_delete_mem(cs); in gpmc_cs_remap()
952 ret = gpmc_cs_insert_mem(cs, base, size); in gpmc_cs_remap()
956 ret = gpmc_cs_set_memconf(cs, base, size); in gpmc_cs_remap()
961 int gpmc_cs_request(int cs, unsigned long size, unsigned long *base) in gpmc_cs_request() argument
963 struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; in gpmc_cs_request()
967 if (cs > gpmc_cs_num) { in gpmc_cs_request()
976 if (gpmc_cs_reserved(cs)) { in gpmc_cs_request()
980 if (gpmc_cs_mem_enabled(cs)) in gpmc_cs_request()
989 gpmc_cs_disable_mem(cs); in gpmc_cs_request()
991 r = gpmc_cs_set_memconf(cs, res->start, resource_size(res)); in gpmc_cs_request()
998 gpmc_cs_enable_mem(cs); in gpmc_cs_request()
1000 gpmc_cs_set_reserved(cs, 1); in gpmc_cs_request()
1007 void gpmc_cs_free(int cs) in gpmc_cs_free() argument
1009 struct gpmc_cs_data *gpmc = &gpmc_cs[cs]; in gpmc_cs_free()
1013 if (cs >= gpmc_cs_num || cs < 0 || !gpmc_cs_reserved(cs)) { in gpmc_cs_free()
1014 printk(KERN_ERR "Trying to free non-reserved GPMC CS%d\n", cs); in gpmc_cs_free()
1019 gpmc_cs_disable_mem(cs); in gpmc_cs_free()
1022 gpmc_cs_set_reserved(cs, 0); in gpmc_cs_free()
1064 void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs) in gpmc_update_nand_reg() argument
1070 GPMC_CS_NAND_COMMAND + GPMC_CS_SIZE * cs; in gpmc_update_nand_reg()
1072 GPMC_CS_NAND_ADDRESS + GPMC_CS_SIZE * cs; in gpmc_update_nand_reg()
1074 GPMC_CS_NAND_DATA + GPMC_CS_SIZE * cs; in gpmc_update_nand_reg()
1213 int cs; in gpmc_mem_exit() local
1215 for (cs = 0; cs < gpmc_cs_num; cs++) { in gpmc_mem_exit()
1216 if (!gpmc_cs_mem_enabled(cs)) in gpmc_mem_exit()
1218 gpmc_cs_delete_mem(cs); in gpmc_mem_exit()
1225 int cs; in gpmc_mem_init() local
1236 for (cs = 0; cs < gpmc_cs_num; cs++) { in gpmc_mem_init()
1239 if (!gpmc_cs_mem_enabled(cs)) in gpmc_mem_init()
1241 gpmc_cs_get_memconf(cs, &base, &size); in gpmc_mem_init()
1242 if (gpmc_cs_insert_mem(cs, base, size)) { in gpmc_mem_init()
1244 __func__, cs, base, base + size); in gpmc_mem_init()
1245 gpmc_cs_disable_mem(cs); in gpmc_mem_init()
1584 int gpmc_cs_program_settings(int cs, struct gpmc_settings *p) in gpmc_cs_program_settings() argument
1650 gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, config1); in gpmc_cs_program_settings()
1799 gpmc_nand_data->cs = val; in gpmc_probe_nand_child()
1888 gpmc_onenand_data->cs = val; in gpmc_probe_onenand_child()
1923 int ret, cs; in gpmc_probe_generic_child() local
1926 if (of_property_read_u32(child, "reg", &cs) < 0) { in gpmc_probe_generic_child()
1943 name = gpmc_cs_get_name(cs); in gpmc_probe_generic_child()
1947 ret = gpmc_cs_request(cs, resource_size(&res), &base); in gpmc_probe_generic_child()
1949 dev_err(&pdev->dev, "cannot request GPMC CS %d\n", cs); in gpmc_probe_generic_child()
1952 gpmc_cs_set_name(cs, child->name); in gpmc_probe_generic_child()
1964 cs); in gpmc_probe_generic_child()
1965 gpmc_cs_show_timings(cs, in gpmc_probe_generic_child()
1971 gpmc_cs_disable_mem(cs); in gpmc_probe_generic_child()
1981 ret = gpmc_cs_remap(cs, res.start); in gpmc_probe_generic_child()
1984 cs, &res.start); in gpmc_probe_generic_child()
1992 ret = gpmc_cs_program_settings(cs, &gpmc_s); in gpmc_probe_generic_child()
1996 ret = gpmc_cs_set_timings(cs, &gpmc_t, &gpmc_s); in gpmc_probe_generic_child()
2009 gpmc_cs_enable_mem(cs); in gpmc_probe_generic_child()
2032 gpmc_cs_free(cs); in gpmc_probe_generic_child()