Skip to content

Commit 0abcae8

Browse files
dhirschfeld1ogabbay
authored andcommitted
habanalabs: add RMWREG32_SHIFTED to set a val within a mask
This is similar to RMWREG32, but the given 'val' is already shifted according to the mask. This allows several 'ORed' vals and masks to be set at once The patch also fixes wrong usage of RMWREG32 by replacing it with RMWREG32_SHIFTED Signed-off-by: Dafna Hirschfeld <[email protected]> Reviewed-by: Oded Gabbay <[email protected]> Signed-off-by: Oded Gabbay <[email protected]>
1 parent 56fb517 commit 0abcae8

File tree

2 files changed

+6
-10
lines changed

2 files changed

+6
-10
lines changed

drivers/misc/habanalabs/common/habanalabs.h

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2498,13 +2498,9 @@ void hl_wreg(struct hl_device *hdev, u32 reg, u32 val);
24982498
#define WREG32_AND(reg, and) WREG32_P(reg, 0, and)
24992499
#define WREG32_OR(reg, or) WREG32_P(reg, or, ~(or))
25002500

2501-
#define RMWREG32(reg, val, mask) \
2502-
do { \
2503-
u32 tmp_ = RREG32(reg); \
2504-
tmp_ &= ~(mask); \
2505-
tmp_ |= ((val) << __ffs(mask)); \
2506-
WREG32(reg, tmp_); \
2507-
} while (0)
2501+
#define RMWREG32_SHIFTED(reg, val, mask) WREG32_P(reg, val, ~(mask))
2502+
2503+
#define RMWREG32(reg, val, mask) RMWREG32_SHIFTED(reg, (val) << __ffs(mask), mask)
25082504

25092505
#define RREG32_MASK(reg, mask) ((RREG32(reg) & mask) >> __ffs(mask))
25102506

drivers/misc/habanalabs/gaudi2/gaudi2.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5052,7 +5052,7 @@ static int gaudi2_pci_mmu_init(struct hl_device *hdev)
50525052
mmu_base = mmPMMU_HBW_MMU_BASE;
50535053
stlb_base = mmPMMU_HBW_STLB_BASE;
50545054

5055-
RMWREG32(stlb_base + STLB_HOP_CONFIGURATION_OFFSET,
5055+
RMWREG32_SHIFTED(stlb_base + STLB_HOP_CONFIGURATION_OFFSET,
50565056
(0 << PMMU_HBW_STLB_HOP_CONFIGURATION_FIRST_HOP_SHIFT) |
50575057
(5 << PMMU_HBW_STLB_HOP_CONFIGURATION_FIRST_LOOKUP_HOP_SMALL_P_SHIFT) |
50585058
(4 << PMMU_HBW_STLB_HOP_CONFIGURATION_FIRST_LOOKUP_HOP_LARGE_P_SHIFT) |
@@ -5068,7 +5068,7 @@ static int gaudi2_pci_mmu_init(struct hl_device *hdev)
50685068

50695069
if (PAGE_SIZE == SZ_64K) {
50705070
/* Set page sizes to 64K on hop5 and 16M on hop4 + enable 8 bit hops */
5071-
RMWREG32(mmu_base + MMU_STATIC_MULTI_PAGE_SIZE_OFFSET,
5071+
RMWREG32_SHIFTED(mmu_base + MMU_STATIC_MULTI_PAGE_SIZE_OFFSET,
50725072
FIELD_PREP(DCORE0_HMMU0_MMU_STATIC_MULTI_PAGE_SIZE_HOP5_PAGE_SIZE_MASK, 4) |
50735073
FIELD_PREP(DCORE0_HMMU0_MMU_STATIC_MULTI_PAGE_SIZE_HOP4_PAGE_SIZE_MASK, 3) |
50745074
FIELD_PREP(
@@ -5116,7 +5116,7 @@ static int gaudi2_dcore_hmmu_init(struct hl_device *hdev, int dcore_id,
51165116
RMWREG32(mmu_base + MMU_STATIC_MULTI_PAGE_SIZE_OFFSET, 5 /* 64MB */,
51175117
MMU_STATIC_MULTI_PAGE_SIZE_HOP4_PAGE_SIZE_MASK);
51185118

5119-
RMWREG32(stlb_base + STLB_HOP_CONFIGURATION_OFFSET,
5119+
RMWREG32_SHIFTED(stlb_base + STLB_HOP_CONFIGURATION_OFFSET,
51205120
FIELD_PREP(DCORE0_HMMU0_STLB_HOP_CONFIGURATION_FIRST_HOP_MASK, 0) |
51215121
FIELD_PREP(DCORE0_HMMU0_STLB_HOP_CONFIGURATION_FIRST_LOOKUP_HOP_SMALL_P_MASK, 3) |
51225122
FIELD_PREP(DCORE0_HMMU0_STLB_HOP_CONFIGURATION_FIRST_LOOKUP_HOP_LARGE_P_MASK, 3) |

0 commit comments

Comments
 (0)