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.

clk: microchip: mpfs: simplify control reg access

The control reg addresses are known when the clocks are registered, so
we can, instead of assigning a base pointer to the structs, assign the
control reg addresses directly. Accordingly, remove the interim
variables used during reads/writes to those registers.

Reviewed-by: Daire McNamara <daire.mcnamara@microchip.com>
Signed-off-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
Link: https://lore.kernel.org/r/20220909123123.2699583-11-conor.dooley@microchip.com

authored by

Conor Dooley and committed by
Claudiu Beznea
5fa27b77 52fe6b52

+17 -25
+17 -25
drivers/clk/microchip/clk-mpfs.c
··· 50 50 #define to_mpfs_msspll_clk(_hw) container_of(_hw, struct mpfs_msspll_hw_clock, hw) 51 51 52 52 struct mpfs_cfg_clock { 53 + void __iomem *reg; 53 54 const struct clk_div_table *table; 54 55 u8 shift; 55 56 u8 width; ··· 59 58 60 59 struct mpfs_cfg_hw_clock { 61 60 struct mpfs_cfg_clock cfg; 62 - void __iomem *sys_base; 63 61 struct clk_hw hw; 64 62 struct clk_init_data init; 65 63 unsigned int id; ··· 68 68 #define to_mpfs_cfg_clk(_hw) container_of(_hw, struct mpfs_cfg_hw_clock, hw) 69 69 70 70 struct mpfs_periph_clock { 71 + void __iomem *reg; 71 72 u8 shift; 72 73 }; 73 74 74 75 struct mpfs_periph_hw_clock { 75 76 struct mpfs_periph_clock periph; 76 - void __iomem *sys_base; 77 77 struct clk_hw hw; 78 78 unsigned int id; 79 79 }; ··· 212 212 static int mpfs_clk_register_mssplls(struct device *dev, struct mpfs_msspll_hw_clock *msspll_hws, 213 213 unsigned int num_clks, struct mpfs_clock_data *data) 214 214 { 215 - void __iomem *base = data->msspll_base; 216 215 unsigned int i; 217 216 int ret; 218 217 219 218 for (i = 0; i < num_clks; i++) { 220 219 struct mpfs_msspll_hw_clock *msspll_hw = &msspll_hws[i]; 221 220 222 - ret = mpfs_clk_register_msspll(dev, msspll_hw, base); 221 + ret = mpfs_clk_register_msspll(dev, msspll_hw, data->msspll_base); 223 222 if (ret) 224 223 return dev_err_probe(dev, ret, "failed to register msspll id: %d\n", 225 224 CLK_MSSPLL); ··· 237 238 { 238 239 struct mpfs_cfg_hw_clock *cfg_hw = to_mpfs_cfg_clk(hw); 239 240 struct mpfs_cfg_clock *cfg = &cfg_hw->cfg; 240 - void __iomem *base_addr = cfg_hw->sys_base; 241 241 u32 val; 242 242 243 - val = readl_relaxed(base_addr + cfg_hw->reg_offset) >> cfg->shift; 243 + val = readl_relaxed(cfg->reg) >> cfg->shift; 244 244 val &= clk_div_mask(cfg->width); 245 245 246 246 return divider_recalc_rate(hw, prate, val, cfg->table, cfg->flags, cfg->width); ··· 257 259 { 258 260 struct mpfs_cfg_hw_clock *cfg_hw = to_mpfs_cfg_clk(hw); 259 261 struct mpfs_cfg_clock *cfg = &cfg_hw->cfg; 260 - void __iomem *base_addr = cfg_hw->sys_base; 261 262 unsigned long flags; 262 263 u32 val; 263 264 int divider_setting; ··· 267 270 return divider_setting; 268 271 269 272 spin_lock_irqsave(&mpfs_clk_lock, flags); 270 - val = readl_relaxed(base_addr + cfg_hw->reg_offset); 273 + val = readl_relaxed(cfg->reg); 271 274 val &= ~(clk_div_mask(cfg->width) << cfg_hw->cfg.shift); 272 275 val |= divider_setting << cfg->shift; 273 - writel_relaxed(val, base_addr + cfg_hw->reg_offset); 276 + writel_relaxed(val, cfg->reg); 274 277 275 278 spin_unlock_irqrestore(&mpfs_clk_lock, flags); 276 279 ··· 318 321 }; 319 322 320 323 static int mpfs_clk_register_cfg(struct device *dev, struct mpfs_cfg_hw_clock *cfg_hw, 321 - void __iomem *sys_base) 324 + void __iomem *base) 322 325 { 323 - cfg_hw->sys_base = sys_base; 326 + cfg_hw->cfg.reg = base + cfg_hw->reg_offset; 324 327 325 328 return devm_clk_hw_register(dev, &cfg_hw->hw); 326 329 } ··· 328 331 static int mpfs_clk_register_cfgs(struct device *dev, struct mpfs_cfg_hw_clock *cfg_hws, 329 332 unsigned int num_clks, struct mpfs_clock_data *data) 330 333 { 331 - void __iomem *sys_base = data->base; 332 334 unsigned int i, id; 333 335 int ret; 334 336 335 337 for (i = 0; i < num_clks; i++) { 336 338 struct mpfs_cfg_hw_clock *cfg_hw = &cfg_hws[i]; 337 339 338 - ret = mpfs_clk_register_cfg(dev, cfg_hw, sys_base); 340 + ret = mpfs_clk_register_cfg(dev, cfg_hw, data->base); 339 341 if (ret) 340 342 return dev_err_probe(dev, ret, "failed to register clock id: %d\n", 341 343 cfg_hw->id); ··· 354 358 { 355 359 struct mpfs_periph_hw_clock *periph_hw = to_mpfs_periph_clk(hw); 356 360 struct mpfs_periph_clock *periph = &periph_hw->periph; 357 - void __iomem *base_addr = periph_hw->sys_base; 358 361 u32 reg, val; 359 362 unsigned long flags; 360 363 361 364 spin_lock_irqsave(&mpfs_clk_lock, flags); 362 365 363 - reg = readl_relaxed(base_addr + REG_SUBBLK_CLOCK_CR); 366 + reg = readl_relaxed(periph->reg); 364 367 val = reg | (1u << periph->shift); 365 - writel_relaxed(val, base_addr + REG_SUBBLK_CLOCK_CR); 368 + writel_relaxed(val, periph->reg); 366 369 367 370 spin_unlock_irqrestore(&mpfs_clk_lock, flags); 368 371 ··· 372 377 { 373 378 struct mpfs_periph_hw_clock *periph_hw = to_mpfs_periph_clk(hw); 374 379 struct mpfs_periph_clock *periph = &periph_hw->periph; 375 - void __iomem *base_addr = periph_hw->sys_base; 376 380 u32 reg, val; 377 381 unsigned long flags; 378 382 379 383 spin_lock_irqsave(&mpfs_clk_lock, flags); 380 384 381 - reg = readl_relaxed(base_addr + REG_SUBBLK_CLOCK_CR); 385 + reg = readl_relaxed(periph->reg); 382 386 val = reg & ~(1u << periph->shift); 383 - writel_relaxed(val, base_addr + REG_SUBBLK_CLOCK_CR); 387 + writel_relaxed(val, periph->reg); 384 388 385 389 spin_unlock_irqrestore(&mpfs_clk_lock, flags); 386 390 } ··· 388 394 { 389 395 struct mpfs_periph_hw_clock *periph_hw = to_mpfs_periph_clk(hw); 390 396 struct mpfs_periph_clock *periph = &periph_hw->periph; 391 - void __iomem *base_addr = periph_hw->sys_base; 392 397 u32 reg; 393 398 394 - reg = readl_relaxed(base_addr + REG_SUBBLK_CLOCK_CR); 399 + reg = readl_relaxed(periph->reg); 395 400 if (reg & (1u << periph->shift)) 396 401 return 1; 397 402 ··· 459 466 }; 460 467 461 468 static int mpfs_clk_register_periph(struct device *dev, struct mpfs_periph_hw_clock *periph_hw, 462 - void __iomem *sys_base) 469 + void __iomem *base) 463 470 { 464 - periph_hw->sys_base = sys_base; 471 + periph_hw->periph.reg = base + REG_SUBBLK_CLOCK_CR; 465 472 466 473 return devm_clk_hw_register(dev, &periph_hw->hw); 467 474 } ··· 469 476 static int mpfs_clk_register_periphs(struct device *dev, struct mpfs_periph_hw_clock *periph_hws, 470 477 int num_clks, struct mpfs_clock_data *data) 471 478 { 472 - void __iomem *sys_base = data->base; 473 479 unsigned int i, id; 474 480 int ret; 475 481 476 482 for (i = 0; i < num_clks; i++) { 477 483 struct mpfs_periph_hw_clock *periph_hw = &periph_hws[i]; 478 484 479 - ret = mpfs_clk_register_periph(dev, periph_hw, sys_base); 485 + ret = mpfs_clk_register_periph(dev, periph_hw, data->base); 480 486 if (ret) 481 487 return dev_err_probe(dev, ret, "failed to register clock id: %d\n", 482 488 periph_hw->id);