Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/ast: Handle known struct ast_dramstruct with helpers

Most of struct ast_dramstruct stores hardware state. Some index
values have known or special meaning. The known values are

- 0xffff - Terminal entry in the array
- 0xff00 - Delays the programming for usecs
- 0x0004 - Sets the type of DRAM

Add constants and helper macros for these cases. Also add a helper
macro for testing. Update Gen1 and Gen2+ accordingly.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://lore.kernel.org/r/20250706162816.211552-8-tzimmermann@suse.de

+41 -19
+8 -8
drivers/gpu/drm/ast/ast_2000.c
··· 38 38 static const struct ast_dramstruct ast2000_dram_table_data[] = { 39 39 { 0x0108, 0x00000000 }, 40 40 { 0x0120, 0x00004a21 }, 41 - { 0xFF00, 0x00000043 }, 41 + AST_DRAMSTRUCT_UDELAY(67u), 42 42 { 0x0000, 0xFFFFFFFF }, 43 - { 0x0004, 0x00000089 }, 43 + AST_DRAMSTRUCT_INIT(DRAM_TYPE, 0x00000089), 44 44 { 0x0008, 0x22331353 }, 45 45 { 0x000C, 0x0d07000b }, 46 46 { 0x0010, 0x11113333 }, ··· 49 49 { 0x0024, 0x00000001 }, 50 50 { 0x001C, 0x00000000 }, 51 51 { 0x0014, 0x00000003 }, 52 - { 0xFF00, 0x00000043 }, 52 + AST_DRAMSTRUCT_UDELAY(67u), 53 53 { 0x0018, 0x00000131 }, 54 54 { 0x0014, 0x00000001 }, 55 - { 0xFF00, 0x00000043 }, 55 + AST_DRAMSTRUCT_UDELAY(67u), 56 56 { 0x0018, 0x00000031 }, 57 57 { 0x0014, 0x00000001 }, 58 - { 0xFF00, 0x00000043 }, 58 + AST_DRAMSTRUCT_UDELAY(67u), 59 59 { 0x0028, 0x1e0828f1 }, 60 60 { 0x0024, 0x00000003 }, 61 61 { 0x002C, 0x1f0f28fb }, 62 62 { 0x0030, 0xFFFFFE01 }, 63 - { 0xFFFF, 0xFFFFFFFF } 63 + AST_DRAMSTRUCT_INVALID, 64 64 }; 65 65 66 66 static void ast_post_chip_2000(struct ast_device *ast) ··· 81 81 ; 82 82 } while (ast_read32(ast, 0x10100) != 0xa8); 83 83 84 - while (dram_reg_info->index != 0xffff) { 85 - if (dram_reg_info->index == 0xff00) {/* delay fn */ 84 + while (!AST_DRAMSTRUCT_IS(dram_reg_info, INVALID)) { 85 + if (AST_DRAMSTRUCT_IS(dram_reg_info, UDELAY)) { 86 86 for (i = 0; i < 15; i++) 87 87 udelay(dram_reg_info->data); 88 88 } else {
+11 -11
drivers/gpu/drm/ast/ast_2100.c
··· 38 38 static const struct ast_dramstruct ast1100_dram_table_data[] = { 39 39 { 0x2000, 0x1688a8a8 }, 40 40 { 0x2020, 0x000041f0 }, 41 - { 0xFF00, 0x00000043 }, 41 + AST_DRAMSTRUCT_UDELAY(67u), 42 42 { 0x0000, 0xfc600309 }, 43 43 { 0x006C, 0x00909090 }, 44 44 { 0x0064, 0x00050000 }, 45 - { 0x0004, 0x00000585 }, 45 + AST_DRAMSTRUCT_INIT(DRAM_TYPE, 0x00000585), 46 46 { 0x0008, 0x0011030f }, 47 47 { 0x0010, 0x22201724 }, 48 48 { 0x0018, 0x1e29011a }, ··· 68 68 { 0x0078, 0x00000000 }, 69 69 { 0x007C, 0x00000000 }, 70 70 { 0x0034, 0x00000001 }, 71 - { 0xFF00, 0x00000043 }, 71 + AST_DRAMSTRUCT_UDELAY(67u), 72 72 { 0x002C, 0x00000732 }, 73 73 { 0x0030, 0x00000040 }, 74 74 { 0x0028, 0x00000005 }, ··· 85 85 { 0x000C, 0x00005a21 }, 86 86 { 0x0034, 0x00007c03 }, 87 87 { 0x0120, 0x00004c41 }, 88 - { 0xffff, 0xffffffff }, 88 + AST_DRAMSTRUCT_INVALID, 89 89 }; 90 90 91 91 static const struct ast_dramstruct ast2100_dram_table_data[] = { 92 92 { 0x2000, 0x1688a8a8 }, 93 93 { 0x2020, 0x00004120 }, 94 - { 0xFF00, 0x00000043 }, 94 + AST_DRAMSTRUCT_UDELAY(67u), 95 95 { 0x0000, 0xfc600309 }, 96 96 { 0x006C, 0x00909090 }, 97 97 { 0x0064, 0x00070000 }, 98 - { 0x0004, 0x00000489 }, 98 + AST_DRAMSTRUCT_INIT(DRAM_TYPE, 0x00000489), 99 99 { 0x0008, 0x0011030f }, 100 100 { 0x0010, 0x32302926 }, 101 101 { 0x0018, 0x274c0122 }, ··· 121 121 { 0x0078, 0x00000000 }, 122 122 { 0x007C, 0x00000000 }, 123 123 { 0x0034, 0x00000001 }, 124 - { 0xFF00, 0x00000043 }, 124 + AST_DRAMSTRUCT_UDELAY(67u), 125 125 { 0x002C, 0x00000942 }, 126 126 { 0x0030, 0x00000040 }, 127 127 { 0x0028, 0x00000005 }, ··· 138 138 { 0x000C, 0x00005a21 }, 139 139 { 0x0034, 0x00007c03 }, 140 140 { 0x0120, 0x00005061 }, 141 - { 0xffff, 0xffffffff }, 141 + AST_DRAMSTRUCT_INVALID, 142 142 }; 143 143 144 144 /* ··· 287 287 ; 288 288 } while (ast_read32(ast, 0x10000) != 0x01); 289 289 290 - while (dram_reg_info->index != 0xffff) { 291 - if (dram_reg_info->index == 0xff00) {/* delay fn */ 290 + while (!AST_DRAMSTRUCT_IS(dram_reg_info, INVALID)) { 291 + if (AST_DRAMSTRUCT_IS(dram_reg_info, UDELAY)) { 292 292 for (i = 0; i < 15; i++) 293 293 udelay(dram_reg_info->data); 294 - } else if (dram_reg_info->index == 0x4) { 294 + } else if (AST_DRAMSTRUCT_IS(dram_reg_info, DRAM_TYPE)) { 295 295 data = dram_reg_info->data; 296 296 if (ast->dram_type == AST_DRAM_1Gx16) 297 297 data = 0x00000d89;
+22
drivers/gpu/drm/ast/ast_post.h
··· 3 3 #ifndef AST_POST_H 4 4 #define AST_POST_H 5 5 6 + #include <linux/limits.h> 6 7 #include <linux/types.h> 7 8 8 9 struct ast_device; ··· 13 12 u16 index; 14 13 u32 data; 15 14 }; 15 + 16 + /* hardware fields */ 17 + #define __AST_DRAMSTRUCT_DRAM_TYPE 0x0004 18 + 19 + /* control commands */ 20 + #define __AST_DRAMSTRUCT_UDELAY 0xff00 21 + #define __AST_DRAMSTRUCT_INVALID 0xffff 22 + 23 + #define __AST_DRAMSTRUCT_INDEX(_name) \ 24 + (__AST_DRAMSTRUCT_ ## _name) 25 + 26 + #define AST_DRAMSTRUCT_INIT(_name, _value) \ 27 + { __AST_DRAMSTRUCT_INDEX(_name), (_value) } 28 + 29 + #define AST_DRAMSTRUCT_UDELAY(_usecs) \ 30 + AST_DRAMSTRUCT_INIT(UDELAY, _usecs) 31 + #define AST_DRAMSTRUCT_INVALID \ 32 + AST_DRAMSTRUCT_INIT(INVALID, U32_MAX) 33 + 34 + #define AST_DRAMSTRUCT_IS(_entry, _name) \ 35 + ((_entry)->index == __AST_DRAMSTRUCT_INDEX(_name)) 16 36 17 37 u32 __ast_mindwm(void __iomem *regs, u32 r); 18 38 void __ast_moutdwm(void __iomem *regs, u32 r, u32 v);