Home
last modified time | relevance | path

Searched refs:fdt (Results 1 – 25 of 207) sorted by relevance

123456789

/rk3399_rockchip-uboot/scripts/dtc/libfdt/
H A Dlibfdt.h147 const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int checklen);
149 static inline void *fdt_offset_ptr_w(void *fdt, int offset, int checklen) in fdt_offset_ptr_w() argument
151 return (void *)(uintptr_t)fdt_offset_ptr(fdt, offset, checklen); in fdt_offset_ptr_w()
154 uint32_t fdt_next_tag(const void *fdt, int offset, int *nextoffset);
160 int fdt_next_node(const void *fdt, int offset, int *depth);
169 int fdt_first_subnode(const void *fdt, int offset);
182 int fdt_next_subnode(const void *fdt, int offset);
207 #define fdt_for_each_subnode(node, fdt, parent) \ argument
208 for (node = fdt_first_subnode(fdt, parent); \
210 node = fdt_next_subnode(fdt, node))
[all …]
H A Dfdt_sw.c58 static int _fdt_sw_check_header(void *fdt) in _fdt_sw_check_header() argument
60 if (fdt_magic(fdt) != FDT_SW_MAGIC) in _fdt_sw_check_header()
66 #define FDT_SW_CHECK_HEADER(fdt) \ argument
69 if ((err = _fdt_sw_check_header(fdt)) != 0) \
73 static void *_fdt_grab_space(void *fdt, size_t len) in _fdt_grab_space() argument
75 int offset = fdt_size_dt_struct(fdt); in _fdt_grab_space()
78 spaceleft = fdt_totalsize(fdt) - fdt_off_dt_struct(fdt) in _fdt_grab_space()
79 - fdt_size_dt_strings(fdt); in _fdt_grab_space()
84 fdt_set_size_dt_struct(fdt, offset + len); in _fdt_grab_space()
85 return _fdt_offset_ptr_w(fdt, offset); in _fdt_grab_space()
[all …]
H A Dfdt_rw.c58 static int _fdt_blocks_misordered(const void *fdt, in _fdt_blocks_misordered() argument
61 return (fdt_off_mem_rsvmap(fdt) < FDT_ALIGN(sizeof(struct fdt_header), 8)) in _fdt_blocks_misordered()
62 || (fdt_off_dt_struct(fdt) < in _fdt_blocks_misordered()
63 (fdt_off_mem_rsvmap(fdt) + mem_rsv_size)) in _fdt_blocks_misordered()
64 || (fdt_off_dt_strings(fdt) < in _fdt_blocks_misordered()
65 (fdt_off_dt_struct(fdt) + struct_size)) in _fdt_blocks_misordered()
66 || (fdt_totalsize(fdt) < in _fdt_blocks_misordered()
67 (fdt_off_dt_strings(fdt) + fdt_size_dt_strings(fdt))); in _fdt_blocks_misordered()
70 static int _fdt_rw_check_header(void *fdt) in _fdt_rw_check_header() argument
72 FDT_CHECK_HEADER(fdt); in _fdt_rw_check_header()
[all …]
H A Dfdt_ro.c58 static int _fdt_nodename_eq(const void *fdt, int offset, in _fdt_nodename_eq() argument
61 const char *p = fdt_offset_ptr(fdt, offset + FDT_TAGSIZE, len+1); in _fdt_nodename_eq()
78 const char *fdt_string(const void *fdt, int stroffset) in fdt_string() argument
80 return (const char *)fdt + fdt_off_dt_strings(fdt) + stroffset; in fdt_string()
83 static int _fdt_string_eq(const void *fdt, int stroffset, in _fdt_string_eq() argument
86 const char *p = fdt_string(fdt, stroffset); in _fdt_string_eq()
91 uint32_t fdt_get_max_phandle(const void *fdt) in fdt_get_max_phandle() argument
96 for (offset = fdt_next_node(fdt, -1, NULL);; in fdt_get_max_phandle()
97 offset = fdt_next_node(fdt, offset, NULL)) { in fdt_get_max_phandle()
106 phandle = fdt_get_phandle(fdt, offset); in fdt_get_max_phandle()
[all …]
H A Dfdt.c58 int fdt_check_header(const void *fdt) in fdt_check_header() argument
60 if (fdt_magic(fdt) == FDT_MAGIC) { in fdt_check_header()
62 if (fdt_version(fdt) < FDT_FIRST_SUPPORTED_VERSION) in fdt_check_header()
64 if (fdt_last_comp_version(fdt) > FDT_LAST_SUPPORTED_VERSION) in fdt_check_header()
66 } else if (fdt_magic(fdt) == FDT_SW_MAGIC) { in fdt_check_header()
68 if (fdt_size_dt_struct(fdt) == 0) in fdt_check_header()
77 const void *fdt_offset_ptr(const void *fdt, int offset, unsigned int len) in fdt_offset_ptr() argument
79 unsigned absoffset = offset + fdt_off_dt_struct(fdt); in fdt_offset_ptr()
83 || (absoffset + len) > fdt_totalsize(fdt)) in fdt_offset_ptr()
86 if (fdt_version(fdt) >= 0x11) in fdt_offset_ptr()
[all …]
H A Dlibfdt_internal.h58 #define FDT_CHECK_HEADER(fdt) \ argument
61 if ((__err = fdt_check_header(fdt)) != 0) \
65 int _fdt_check_node_offset(const void *fdt, int offset);
66 int _fdt_check_prop_offset(const void *fdt, int offset);
68 int _fdt_node_end_offset(void *fdt, int nodeoffset);
70 static inline const void *_fdt_offset_ptr(const void *fdt, int offset) in _fdt_offset_ptr() argument
72 return (const char *)fdt + fdt_off_dt_struct(fdt) + offset; in _fdt_offset_ptr()
75 static inline void *_fdt_offset_ptr_w(void *fdt, int offset) in _fdt_offset_ptr_w() argument
77 return (void *)(uintptr_t)_fdt_offset_ptr(fdt, offset); in _fdt_offset_ptr_w()
80 static inline const struct fdt_reserve_entry *_fdt_mem_rsv(const void *fdt, int n) in _fdt_mem_rsv() argument
[all …]
H A Dfdt_wip.c58 int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset, in fdt_setprop_inplace_namelen_partial() argument
66 propval = fdt_getprop_namelen_w(fdt, nodeoffset, name, namelen, in fdt_setprop_inplace_namelen_partial()
78 int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name, in fdt_setprop_inplace() argument
84 propval = fdt_getprop(fdt, nodeoffset, name, &proplen); in fdt_setprop_inplace()
91 return fdt_setprop_inplace_namelen_partial(fdt, nodeoffset, name, in fdt_setprop_inplace()
104 int fdt_nop_property(void *fdt, int nodeoffset, const char *name) in fdt_nop_property() argument
109 prop = fdt_get_property_w(fdt, nodeoffset, name, &len); in fdt_nop_property()
118 int _fdt_node_end_offset(void *fdt, int offset) in _fdt_node_end_offset() argument
123 offset = fdt_next_node(fdt, offset, &depth); in _fdt_node_end_offset()
128 int fdt_nop_node(void *fdt, int nodeoffset) in fdt_nop_node() argument
[all …]
H A Dfdt_overlay.c52 static int overlay_get_target(const void *fdt, const void *fdto, in overlay_get_target() argument
69 ret = fdt_path_offset(fdt, path); in overlay_get_target()
73 ret = fdt_node_offset_by_phandle(fdt, phandle); in overlay_get_target()
110 static int overlay_phandle_add_offset(void *fdt, int node, in overlay_phandle_add_offset() argument
117 val = fdt_getprop(fdt, node, name, &len); in overlay_phandle_add_offset()
132 return fdt_setprop_inplace_u32(fdt, node, name, adj_val); in overlay_phandle_add_offset()
361 static int overlay_fixup_one_phandle(void *fdt, void *fdto, in overlay_fixup_one_phandle() argument
376 symbol_path = fdt_getprop(fdt, symbols_off, label, in overlay_fixup_one_phandle()
381 symbol_off = fdt_path_offset(fdt, symbol_path); in overlay_fixup_one_phandle()
385 phandle = fdt_get_phandle(fdt, symbol_off); in overlay_fixup_one_phandle()
[all …]
/rk3399_rockchip-uboot/lib/libfdt/
H A Dfdt_ro.c17 static int _fdt_nodename_eq(const void *fdt, int offset, in _fdt_nodename_eq() argument
20 const char *p = fdt_offset_ptr(fdt, offset + FDT_TAGSIZE, len+1); in _fdt_nodename_eq()
37 const char *fdt_string(const void *fdt, int stroffset) in fdt_string() argument
39 return (const char *)fdt + fdt_off_dt_strings(fdt) + stroffset; in fdt_string()
42 static int _fdt_string_eq(const void *fdt, int stroffset, in _fdt_string_eq() argument
45 const char *p = fdt_string(fdt, stroffset); in _fdt_string_eq()
50 uint32_t fdt_get_max_phandle(const void *fdt) in fdt_get_max_phandle() argument
55 for (offset = fdt_next_node(fdt, -1, NULL);; in fdt_get_max_phandle()
56 offset = fdt_next_node(fdt, offset, NULL)) { in fdt_get_max_phandle()
65 phandle = fdt_get_phandle(fdt, offset); in fdt_get_max_phandle()
[all …]
H A Dfdt_region.c32 int fdt_find_regions(const void *fdt, char * const inc[], int inc_count, in fdt_find_regions() argument
45 int base = fdt_off_dt_struct(fdt); in fdt_find_regions()
59 tag = fdt_next_tag(fdt, offset, &nextoffset); in fdt_find_regions()
66 prop = fdt_get_property_by_offset(fdt, offset, NULL); in fdt_find_regions()
67 str = fdt_string(fdt, fdt32_to_cpu(prop->nameoff)); in fdt_find_regions()
81 name = fdt_get_name(fdt, offset, &len); in fdt_find_regions()
133 if (nextoffset != fdt_size_dt_struct(fdt)) in fdt_find_regions()
141 region[count].size += fdt_size_dt_strings(fdt); in fdt_find_regions()
181 const void *fdt, int target) in region_list_contains_offset() argument
186 target += fdt_off_dt_struct(fdt); in region_list_contains_offset()
[all …]
/rk3399_rockchip-uboot/include/
H A Dfdt_support.h16 u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell,
18 u32 fdt_getprop_u32_default(const void *fdt, const char *path,
20 int fdt_setprop_uxx(void *fdt, int nodeoffset, const char *name,
30 int fdt_root(void *fdt);
39 int fdt_bootargs_append(void *fdt, char *data);
49 int fdt_chosen(void *fdt);
57 int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
59 void do_fixup_by_path(void *fdt, const char *path, const char *prop,
61 void do_fixup_by_path_u32(void *fdt, const char *path, const char *prop,
64 static inline void do_fixup_by_path_string(void *fdt, const char *path, in do_fixup_by_path_string() argument
[all …]
/rk3399_rockchip-uboot/arch/arm/mach-omap2/
H A Dfdt-common.c24 int ft_hs_disable_rng(void *fdt, bd_t *bd) in ft_hs_disable_rng() argument
32 offs = fdt_path_offset(fdt, path); in ft_hs_disable_rng()
37 ret = fdt_setprop_string(fdt, offs, in ft_hs_disable_rng()
51 static int fdt_pack_reg(const void *fdt, void *buf, u64 address, u64 size) in fdt_pack_reg() argument
53 int address_cells = fdt_address_cells(fdt, 0); in fdt_pack_reg()
54 int size_cells = fdt_size_cells(fdt, 0); in fdt_pack_reg()
72 int ft_hs_fixup_dram(void *fdt, bd_t *bd) in ft_hs_fixup_dram() argument
78 fdt32_t address_cells = cpu_to_fdt32(fdt_address_cells(fdt, 0)); in ft_hs_fixup_dram()
79 fdt32_t size_cells = cpu_to_fdt32(fdt_size_cells(fdt, 0)); in ft_hs_fixup_dram()
84 offs = fdt_path_offset(fdt, path); in ft_hs_fixup_dram()
[all …]
/rk3399_rockchip-uboot/arch/arm/mach-omap2/omap5/
H A Dfdt.c31 static int ft_hs_fixup_crossbar(void *fdt, bd_t *bd) in ft_hs_fixup_crossbar() argument
44 ret = fdt_increase_size(fdt, 512); in ft_hs_fixup_crossbar()
53 offs = fdt_path_offset(fdt, path); in ft_hs_fixup_crossbar()
60 p_data = fdt_getprop(fdt, offs, "ti,irqs-skip", &len); in ft_hs_fixup_crossbar()
77 fdt_delprop(fdt, offs, "ti,irqs-skip"); in ft_hs_fixup_crossbar()
78 ret = fdt_setprop(fdt, offs, "ti,irqs-skip", in ft_hs_fixup_crossbar()
95 static int ft_hs_fixup_sram(void *fdt, bd_t *bd) in ft_hs_fixup_sram() argument
108 offs = fdt_path_offset(fdt, path); in ft_hs_fixup_sram()
119 fdt_delprop(fdt, offs, "reg"); in ft_hs_fixup_sram()
120 ret = fdt_setprop(fdt, offs, "reg", temp, 2 * sizeof(u32)); in ft_hs_fixup_sram()
[all …]
/rk3399_rockchip-uboot/test/overlay/
H A Dcmd_ut_overlay.c25 static int ut_fdt_getprop_u32_by_index(void *fdt, const char *path, in ut_fdt_getprop_u32_by_index() argument
33 node_off = fdt_path_offset(fdt, path); in ut_fdt_getprop_u32_by_index()
37 val = fdt_getprop(fdt, node_off, name, &len); in ut_fdt_getprop_u32_by_index()
46 static int ut_fdt_getprop_u32(void *fdt, const char *path, const char *name, in ut_fdt_getprop_u32() argument
49 return ut_fdt_getprop_u32_by_index(fdt, path, name, 0, out); in ut_fdt_getprop_u32()
52 static int fdt_getprop_str(void *fdt, const char *path, const char *name, in fdt_getprop_str() argument
58 node_off = fdt_path_offset(fdt, path); in fdt_getprop_str()
62 *out = fdt_stringlist_get(fdt, node_off, name, 0, &len); in fdt_getprop_str()
69 void *fdt = uts->priv; in fdt_overlay_change_int_property() local
72 ut_assertok(ut_fdt_getprop_u32(fdt, "/test-node", "test-int-property", in fdt_overlay_change_int_property()
[all …]
/rk3399_rockchip-uboot/arch/arm/lib/
H A Dpsci-dt.c17 int fdt_psci(void *fdt) in fdt_psci() argument
25 nodeoff = fdt_path_offset(fdt, "/cpus"); in fdt_psci()
32 for (tmp = fdt_first_subnode(fdt, nodeoff); in fdt_psci()
34 tmp = fdt_next_subnode(fdt, tmp)) { in fdt_psci()
38 prop = fdt_get_property(fdt, tmp, "device_type", &len); in fdt_psci()
51 fdt_setprop_string(fdt, tmp, "enable-method", "psci"); in fdt_psci()
54 nodeoff = fdt_path_offset(fdt, "/psci"); in fdt_psci()
58 nodeoff = fdt_path_offset(fdt, "/"); in fdt_psci()
62 nodeoff = fdt_add_subnode(fdt, nodeoff, "psci"); in fdt_psci()
74 tmp = fdt_setprop_string(fdt, nodeoff, in fdt_psci()
[all …]
/rk3399_rockchip-uboot/tools/
H A Dfit_image.c175 void *fdt, const char *name, const char *fname) in fdt_property_file() argument
195 ret = fdt_property_placeholder(fdt, "data", sbuf.st_size, &ptr); in fdt_property_file()
212 static int fdt_property_strf(void *fdt, const char *name, const char *fmt, ...) in fdt_property_strf() argument
220 return fdt_property_string(fdt, name, str); in fdt_property_strf()
251 static int fit_write_images(struct image_tool_params *params, char *fdt) in fit_write_images() argument
259 fdt_begin_node(fdt, "images"); in fit_write_images()
264 fdt_begin_node(fdt, str); in fit_write_images()
265 fdt_property_string(fdt, "description", params->imagename); in fit_write_images()
266 fdt_property_string(fdt, "type", typename); in fit_write_images()
267 fdt_property_string(fdt, "arch", in fit_write_images()
[all …]
/rk3399_rockchip-uboot/doc/uImage.FIT/
H A Doverlay-fdt-boot.txt13 can be found in doc/README.fdt-overlays
35 fdt@1 {
40 fdt@2 {
45 fdt@3 {
50 fdt@4 {
55 fdt@5 {
60 fdt@6 {
71 fdt = "fdt@1";
75 fdt = "fdt@2";
79 fdt = "fdt@3";
[all …]
/rk3399_rockchip-uboot/board/freescale/qemu-ppce500/
H A Dqemu-ppce500.c51 void *fdt = get_fdt_virt(); in get_phys_ccsrbar_addr_early() local
62 node = fdt_path_offset(fdt, "/soc"); in get_phys_ccsrbar_addr_early()
63 naddr = fdt_address_cells(fdt, node); in get_phys_ccsrbar_addr_early()
64 prop = fdt_getprop(fdt, node, "ranges", &size); in get_phys_ccsrbar_addr_early()
65 r = fdt_translate_address(fdt, node, prop + naddr); in get_phys_ccsrbar_addr_early()
81 static int pci_map_region(void *fdt, int pci_node, int range_id, in pci_map_region() argument
90 r = fdt_read_range(fdt, pci_node, range_id, NULL, &addr, &size); in pci_map_region()
124 void *fdt = get_fdt_virt(); in pci_init_board() local
136 pci_node = fdt_node_offset_by_prop_value(fdt, pci_node, in pci_init_board()
139 pci_node = fdt_node_offset_by_prop_value(fdt, pci_node, in pci_init_board()
[all …]
/rk3399_rockchip-uboot/arch/arm/cpu/armv8/
H A Dspin_table.c12 int spin_table_update_dt(void *fdt) in spin_table_update_dt() argument
21 cpus_offset = fdt_path_offset(fdt, "/cpus"); in spin_table_update_dt()
25 for (offset = fdt_first_subnode(fdt, cpus_offset); in spin_table_update_dt()
27 offset = fdt_next_subnode(fdt, offset)) { in spin_table_update_dt()
28 prop = fdt_getprop(fdt, offset, "device_type", NULL); in spin_table_update_dt()
37 prop = fdt_getprop(fdt, offset, "enable-method", NULL); in spin_table_update_dt()
42 for (offset = fdt_first_subnode(fdt, cpus_offset); in spin_table_update_dt()
44 offset = fdt_next_subnode(fdt, offset)) { in spin_table_update_dt()
45 prop = fdt_getprop(fdt, offset, "device_type", NULL); in spin_table_update_dt()
49 ret = fdt_setprop_u64(fdt, offset, "cpu-release-addr", in spin_table_update_dt()
[all …]
/rk3399_rockchip-uboot/board/freescale/common/
H A Dsgmii_riser.c31 void fsl_sgmii_riser_fdt_fixup(void *fdt) in fsl_sgmii_riser_fdt_fixup() argument
39 node = fdt_path_offset(fdt, "/aliases"); in fsl_sgmii_riser_fdt_fixup()
63 mdio_node = fdt_node_offset_by_compatible(fdt, -1, in fsl_sgmii_riser_fdt_fixup()
69 phy_node = fdt_subnode_offset(fdt, mdio_node, sgmii_phy); in fsl_sgmii_riser_fdt_fixup()
71 fdt_increase_size(fdt, 32); in fsl_sgmii_riser_fdt_fixup()
72 ph = fdt_create_phandle(fdt, phy_node); in fsl_sgmii_riser_fdt_fixup()
78 path = fdt_getprop(fdt, node, enet, NULL); in fsl_sgmii_riser_fdt_fixup()
84 enet_node = fdt_path_offset(fdt, path); in fsl_sgmii_riser_fdt_fixup()
88 model = fdt_getprop(fdt, enet_node, "model", NULL); in fsl_sgmii_riser_fdt_fixup()
108 phyh = fdt_getprop(fdt, enet_node, "phy-handle", NULL); in fsl_sgmii_riser_fdt_fixup()
[all …]
/rk3399_rockchip-uboot/common/
H A Dfdt_support.c42 u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell, in fdt_getprop_u32_default_node() argument
48 val = fdt_getprop(fdt, off, prop, &len); in fdt_getprop_u32_default_node()
72 u32 fdt_getprop_u32_default(const void *fdt, const char *path, in fdt_getprop_u32_default() argument
77 off = fdt_path_offset(fdt, path); in fdt_getprop_u32_default()
81 return fdt_getprop_u32_default_node(fdt, off, 0, prop, dflt); in fdt_getprop_u32_default()
96 int fdt_find_and_setprop(void *fdt, const char *node, const char *prop, in fdt_find_and_setprop() argument
99 int nodeoff = fdt_path_offset(fdt, node); in fdt_find_and_setprop()
104 if ((!create) && (fdt_get_property(fdt, nodeoff, prop, NULL) == NULL)) in fdt_find_and_setprop()
107 return fdt_setprop(fdt, nodeoff, prop, val, len); in fdt_find_and_setprop()
120 int fdt_find_or_add_subnode(void *fdt, int parentoffset, const char *name) in fdt_find_or_add_subnode() argument
[all …]
H A Dcommon_fit.c14 ulong fdt_getprop_u32(const void *fdt, int node, const char *prop) in fdt_getprop_u32() argument
19 cell = fdt_getprop(fdt, node, prop, &len); in fdt_getprop_u32()
31 int fit_find_config_node(const void *fdt) in fit_find_config_node() argument
39 conf = fdt_path_offset(fdt, FIT_CONFS_PATH); in fit_find_config_node()
46 dflt_conf_name = fdt_getprop(fdt, conf, "default", &len); in fit_find_config_node()
48 for (node = fdt_first_subnode(fdt, conf); in fit_find_config_node()
50 node = fdt_next_subnode(fdt, node)) { in fit_find_config_node()
51 name = fdt_getprop(fdt, node, "description", &len); in fit_find_config_node()
61 const char *node_name = fdt_get_name(fdt, node, NULL); in fit_find_config_node()
/rk3399_rockchip-uboot/board/armltd/vexpress/
H A Dvexpress_tc2.c40 int ft_board_setup(void *fdt, bd_t *bd)
53 offset = fdt_path_offset(fdt, "/cpus");
60 for (tmp = fdt_first_subnode(fdt, offset); tmp >= 0;
61 tmp = fdt_next_subnode(fdt, tmp))
62 fdt_delprop(fdt, tmp, "cci-control-port");
65 offset = fdt_node_offset_by_prop_value(fdt, offset, "compatible",
68 prop = fdt_get_property(fdt, offset, "interface-type",
77 fdt_setprop_string(fdt, offset, "status", "disabled");
79 offset = fdt_node_offset_by_prop_value(fdt, offset, "compatible",
/rk3399_rockchip-uboot/arch/arm/mach-omap2/am33xx/
H A Dfdt.c17 static void ft_hs_fixups(void *fdt, bd_t *bd) in ft_hs_fixups() argument
21 if ((ft_hs_disable_rng(fdt, bd) == 0) && in ft_hs_fixups()
22 (ft_hs_fixup_dram(fdt, bd) == 0) && in ft_hs_fixups()
23 (ft_hs_add_tee(fdt, bd) == 0)) in ft_hs_fixups()
32 static void ft_hs_fixups(void *fdt, bd_t *bd) { } in ft_hs_fixups() argument
40 void ft_cpu_setup(void *fdt, bd_t *bd) in ft_cpu_setup() argument
42 ft_hs_fixups(fdt, bd); in ft_cpu_setup()
/rk3399_rockchip-uboot/lib/
H A Dfdtdec_test.c77 static int make_fdt(void *fdt, int size, const char *aliases, in make_fdt() argument
84 CHECK(fdt_create(fdt, size)); in make_fdt()
85 CHECK(fdt_finish_reservemap(fdt)); in make_fdt()
86 CHECK(fdt_begin_node(fdt, "")); in make_fdt()
88 CHECK(fdt_begin_node(fdt, "aliases")); in make_fdt()
92 CHECK(fdt_property_string(fdt, name, value)); in make_fdt()
95 CHECK(fdt_end_node(fdt)); in make_fdt()
99 CHECK(fdt_begin_node(fdt, value)); in make_fdt()
100 CHECK(fdt_property_string(fdt, "compatible", in make_fdt()
103 CHECK(fdt_property_string(fdt, "status", "disabled")); in make_fdt()
[all …]

123456789