-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce a few helper functions for HMATRIX configuration and clean up the register definitions. Also add definitions for the HMATRIX master and slave IDs on the AT32AP700x chips. Also make the definitions in hmatrix.h available to board code by moving it to <mach/hmatrix.h> Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
- Loading branch information
Haavard Skinnemoen
committed
Aug 8, 2008
1 parent
a8d902d
commit b47eb40
Showing
6 changed files
with
180 additions
and
201 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,88 @@ | ||
/* | ||
* High-Speed Bus Matrix helper functions | ||
* | ||
* Copyright (C) 2008 Atmel Corporation | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
#include <linux/clk.h> | ||
#include <linux/io.h> | ||
|
||
#include <mach/chip.h> | ||
#include <mach/hmatrix.h> | ||
|
||
static inline void __hmatrix_write_reg(unsigned long offset, u32 value) | ||
{ | ||
__raw_writel(value, (void __iomem __force *)(HMATRIX_BASE + offset)); | ||
} | ||
|
||
static inline u32 __hmatrix_read_reg(unsigned long offset) | ||
{ | ||
return __raw_readl((void __iomem __force *)(HMATRIX_BASE + offset)); | ||
} | ||
|
||
/** | ||
* hmatrix_write_reg - write HMATRIX configuration register | ||
* @offset: register offset | ||
* @value: value to be written to the register at @offset | ||
*/ | ||
void hmatrix_write_reg(unsigned long offset, u32 value) | ||
{ | ||
clk_enable(&at32_hmatrix_clk); | ||
__hmatrix_write_reg(offset, value); | ||
__hmatrix_read_reg(offset); | ||
clk_disable(&at32_hmatrix_clk); | ||
} | ||
|
||
/** | ||
* hmatrix_read_reg - read HMATRIX configuration register | ||
* @offset: register offset | ||
* | ||
* Returns the value of the register at @offset. | ||
*/ | ||
u32 hmatrix_read_reg(unsigned long offset) | ||
{ | ||
u32 value; | ||
|
||
clk_enable(&at32_hmatrix_clk); | ||
value = __hmatrix_read_reg(offset); | ||
clk_disable(&at32_hmatrix_clk); | ||
|
||
return value; | ||
} | ||
|
||
/** | ||
* hmatrix_sfr_set_bits - set bits in a slave's Special Function Register | ||
* @slave_id: operate on the SFR belonging to this slave | ||
* @mask: mask of bits to be set in the SFR | ||
*/ | ||
void hmatrix_sfr_set_bits(unsigned int slave_id, u32 mask) | ||
{ | ||
u32 value; | ||
|
||
clk_enable(&at32_hmatrix_clk); | ||
value = __hmatrix_read_reg(HMATRIX_SFR(slave_id)); | ||
value |= mask; | ||
__hmatrix_write_reg(HMATRIX_SFR(slave_id), value); | ||
__hmatrix_read_reg(HMATRIX_SFR(slave_id)); | ||
clk_disable(&at32_hmatrix_clk); | ||
} | ||
|
||
/** | ||
* hmatrix_sfr_set_bits - clear bits in a slave's Special Function Register | ||
* @slave_id: operate on the SFR belonging to this slave | ||
* @mask: mask of bits to be cleared in the SFR | ||
*/ | ||
void hmatrix_sfr_clear_bits(unsigned int slave_id, u32 mask) | ||
{ | ||
u32 value; | ||
|
||
clk_enable(&at32_hmatrix_clk); | ||
value = __hmatrix_read_reg(HMATRIX_SFR(slave_id)); | ||
value &= ~mask; | ||
__hmatrix_write_reg(HMATRIX_SFR(slave_id), value); | ||
__hmatrix_read_reg(HMATRIX_SFR(slave_id)); | ||
clk_disable(&at32_hmatrix_clk); | ||
} |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.