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

soundwire: amd: use inline function for register update

Define common inline function for register update.
Use this inline function for updating SoundWire Pad registers
and enable/disable SoundWire interrupt control registers.

Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Link: https://lore.kernel.org/r/20240327063143.2266464-1-Vijendar.Mukunda@amd.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>

authored by

Vijendar Mukunda and committed by
Vinod Koul
e05af1a4 91c4dd2e

+30 -27
+16 -20
drivers/soundwire/amd_init.c
··· 17 17 18 18 #define ACP_PAD_PULLDOWN_CTRL 0x0001448 19 19 #define ACP_SW_PAD_KEEPER_EN 0x0001454 20 - #define AMD_SDW_PAD_PULLDOWN_CTRL_ENABLE_MASK 0x7f9a 21 - #define AMD_SDW0_PAD_PULLDOWN_CTRL_ENABLE_MASK 0x7f9f 22 - #define AMD_SDW1_PAD_PULLDOWN_CTRL_ENABLE_MASK 0x7ffa 23 - #define AMD_SDW0_PAD_EN_MASK 1 24 - #define AMD_SDW1_PAD_EN_MASK 0x10 25 - #define AMD_SDW_PAD_EN_MASK (AMD_SDW0_PAD_EN_MASK | AMD_SDW1_PAD_EN_MASK) 20 + #define AMD_SDW0_PAD_CTRL_MASK 0x60 21 + #define AMD_SDW1_PAD_CTRL_MASK 5 22 + #define AMD_SDW_PAD_CTRL_MASK (AMD_SDW0_PAD_CTRL_MASK | AMD_SDW1_PAD_CTRL_MASK) 23 + #define AMD_SDW0_PAD_EN 1 24 + #define AMD_SDW1_PAD_EN 0x10 25 + #define AMD_SDW_PAD_EN (AMD_SDW0_PAD_EN | AMD_SDW1_PAD_EN) 26 26 27 27 static int amd_enable_sdw_pads(void __iomem *mmio, u32 link_mask, struct device *dev) 28 28 { 29 - u32 val; 30 - u32 pad_keeper_en_mask, pad_pulldown_ctrl_mask; 29 + u32 pad_keeper_en, pad_pulldown_ctrl_mask; 31 30 32 31 switch (link_mask) { 33 32 case 1: 34 - pad_keeper_en_mask = AMD_SDW0_PAD_EN_MASK; 35 - pad_pulldown_ctrl_mask = AMD_SDW0_PAD_PULLDOWN_CTRL_ENABLE_MASK; 33 + pad_keeper_en = AMD_SDW0_PAD_EN; 34 + pad_pulldown_ctrl_mask = AMD_SDW0_PAD_CTRL_MASK; 36 35 break; 37 36 case 2: 38 - pad_keeper_en_mask = AMD_SDW1_PAD_EN_MASK; 39 - pad_pulldown_ctrl_mask = AMD_SDW1_PAD_PULLDOWN_CTRL_ENABLE_MASK; 37 + pad_keeper_en = AMD_SDW1_PAD_EN; 38 + pad_pulldown_ctrl_mask = AMD_SDW1_PAD_CTRL_MASK; 40 39 break; 41 40 case 3: 42 - pad_keeper_en_mask = AMD_SDW_PAD_EN_MASK; 43 - pad_pulldown_ctrl_mask = AMD_SDW_PAD_PULLDOWN_CTRL_ENABLE_MASK; 41 + pad_keeper_en = AMD_SDW_PAD_EN; 42 + pad_pulldown_ctrl_mask = AMD_SDW_PAD_CTRL_MASK; 44 43 break; 45 44 default: 46 45 dev_err(dev, "No SDW Links are enabled\n"); 47 46 return -ENODEV; 48 47 } 49 48 50 - val = readl(mmio + ACP_SW_PAD_KEEPER_EN); 51 - val |= pad_keeper_en_mask; 52 - writel(val, mmio + ACP_SW_PAD_KEEPER_EN); 53 - val = readl(mmio + ACP_PAD_PULLDOWN_CTRL); 54 - val &= pad_pulldown_ctrl_mask; 55 - writel(val, mmio + ACP_PAD_PULLDOWN_CTRL); 49 + amd_updatel(mmio, ACP_SW_PAD_KEEPER_EN, pad_keeper_en, pad_keeper_en); 50 + amd_updatel(mmio, ACP_PAD_PULLDOWN_CTRL, pad_pulldown_ctrl_mask, 0); 51 + 56 52 return 0; 57 53 } 58 54
+8
drivers/soundwire/amd_init.h
··· 10 10 11 11 int amd_sdw_manager_start(struct amd_sdw_manager *amd_manager); 12 12 13 + static inline void amd_updatel(void __iomem *mmio, int offset, u32 mask, u32 val) 14 + { 15 + u32 tmp; 16 + 17 + tmp = readl(mmio + offset); 18 + tmp = (tmp & ~mask) | val; 19 + writel(tmp, mmio + offset); 20 + } 13 21 #endif
+6 -7
drivers/soundwire/amd_manager.c
··· 89 89 u32 val; 90 90 91 91 mutex_lock(amd_manager->acp_sdw_lock); 92 - val = readl(amd_manager->acp_mmio + ACP_EXTERNAL_INTR_CNTL(amd_manager->instance)); 93 - val |= sdw_manager_reg_mask_array[amd_manager->instance]; 94 - writel(val, amd_manager->acp_mmio + ACP_EXTERNAL_INTR_CNTL(amd_manager->instance)); 92 + val = sdw_manager_reg_mask_array[amd_manager->instance]; 93 + amd_updatel(amd_manager->acp_mmio, ACP_EXTERNAL_INTR_CNTL(amd_manager->instance), val, val); 95 94 mutex_unlock(amd_manager->acp_sdw_lock); 96 95 97 96 writel(AMD_SDW_IRQ_MASK_0TO7, amd_manager->mmio + ··· 102 103 103 104 static void amd_disable_sdw_interrupts(struct amd_sdw_manager *amd_manager) 104 105 { 105 - u32 val; 106 + u32 irq_mask; 106 107 107 108 mutex_lock(amd_manager->acp_sdw_lock); 108 - val = readl(amd_manager->acp_mmio + ACP_EXTERNAL_INTR_CNTL(amd_manager->instance)); 109 - val &= ~sdw_manager_reg_mask_array[amd_manager->instance]; 110 - writel(val, amd_manager->acp_mmio + ACP_EXTERNAL_INTR_CNTL(amd_manager->instance)); 109 + irq_mask = sdw_manager_reg_mask_array[amd_manager->instance]; 110 + amd_updatel(amd_manager->acp_mmio, ACP_EXTERNAL_INTR_CNTL(amd_manager->instance), 111 + irq_mask, 0); 111 112 mutex_unlock(amd_manager->acp_sdw_lock); 112 113 113 114 writel(0x00, amd_manager->mmio + ACP_SW_STATE_CHANGE_STATUS_MASK_0TO7);