mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 20:32:04 +09:00
hdmirx: add spin lock when R/D reg [1/1]
PD#SWPL-4073 Problem: warning of CPU Tainted Solution: add spin lock when R/D reg Verify: verify by marconi Change-Id: I8f47666f41c0ba3a010631f5d71416aad0e43beb Signed-off-by: Lei Yang <lei.yang@amlogic.com>
This commit is contained in:
@@ -46,7 +46,7 @@
|
||||
*
|
||||
*
|
||||
*/
|
||||
#define RX_VER2 "ver.2019/01/04"
|
||||
#define RX_VER2 "ver.2019/01/10"
|
||||
|
||||
/*print type*/
|
||||
#define LOG_EN 0x01
|
||||
|
||||
@@ -116,8 +116,10 @@ int data;
|
||||
unsigned long dev_offset = 0x10;
|
||||
|
||||
if (rx.chip_id == CHIP_ID_TL1) {
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
data = rd_reg(MAP_ADDR_MODULE_TOP,
|
||||
addr + reg_maps[MAP_ADDR_MODULE_TOP].phy_addr);
|
||||
spin_unlock_irqrestore(®_rw_lock, flags);
|
||||
} else {
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
wr_reg(MAP_ADDR_MODULE_TOP,
|
||||
@@ -152,8 +154,10 @@ ulong flags;
|
||||
unsigned int dev_offset = 0x10;
|
||||
|
||||
if (rx.chip_id == CHIP_ID_TL1) {
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
wr_reg(MAP_ADDR_MODULE_TOP,
|
||||
addr + reg_maps[MAP_ADDR_MODULE_TOP].phy_addr, data);
|
||||
spin_unlock_irqrestore(®_rw_lock, flags);
|
||||
} else {
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
wr_reg(MAP_ADDR_MODULE_TOP,
|
||||
@@ -284,6 +288,7 @@ unsigned int hdmirx_rd_top(unsigned int addr)
|
||||
unsigned int tempaddr = 0;
|
||||
|
||||
if (rx.chip_id == CHIP_ID_TL1) {
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
dev_offset = TOP_DWC_BASE_OFFSET +
|
||||
reg_maps[MAP_ADDR_MODULE_TOP].phy_addr;
|
||||
if ((addr >= TOP_EDID_OFFSET) &&
|
||||
@@ -296,6 +301,7 @@ unsigned int hdmirx_rd_top(unsigned int addr)
|
||||
data = rd_reg(MAP_ADDR_MODULE_TOP,
|
||||
dev_offset + (addr<<2));
|
||||
}
|
||||
spin_unlock_irqrestore(®_rw_lock, flags);
|
||||
} else {
|
||||
data = rd_reg(MAP_ADDR_MODULE_TOP,
|
||||
dev_offset + (addr<<2));
|
||||
@@ -335,6 +341,7 @@ void hdmirx_wr_top(unsigned int addr, unsigned int data)
|
||||
unsigned int tempaddr = 0;
|
||||
|
||||
if (rx.chip_id == CHIP_ID_TL1) {
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
dev_offset = TOP_DWC_BASE_OFFSET +
|
||||
reg_maps[MAP_ADDR_MODULE_TOP].phy_addr;
|
||||
if ((addr >= TOP_EDID_OFFSET) &&
|
||||
@@ -347,6 +354,7 @@ void hdmirx_wr_top(unsigned int addr, unsigned int data)
|
||||
wr_reg(MAP_ADDR_MODULE_TOP,
|
||||
dev_offset + (addr<<2), data);
|
||||
}
|
||||
spin_unlock_irqrestore(®_rw_lock, flags);
|
||||
} else {
|
||||
wr_reg(MAP_ADDR_MODULE_TOP,
|
||||
dev_offset + (addr<<2), data);
|
||||
@@ -381,10 +389,16 @@ hdmirx_wr_top(addr, rx_set_bits(hdmirx_rd_top(addr), mask, value));
|
||||
*/
|
||||
unsigned int rd_reg_hhi(unsigned int offset)
|
||||
{
|
||||
unsigned int addr = offset +
|
||||
reg_maps[MAP_ADDR_MODULE_HIU].phy_addr;
|
||||
unsigned int ret;
|
||||
unsigned long flags;
|
||||
unsigned int addr;
|
||||
|
||||
return rd_reg(MAP_ADDR_MODULE_HIU, addr);
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
addr = offset +
|
||||
reg_maps[MAP_ADDR_MODULE_HIU].phy_addr;
|
||||
ret = rd_reg(MAP_ADDR_MODULE_HIU, addr);
|
||||
spin_unlock_irqrestore(®_rw_lock, flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -406,9 +420,14 @@ unsigned int rd_reg_hhi_bits(unsigned int offset, unsigned int mask)
|
||||
*/
|
||||
void wr_reg_hhi(unsigned int offset, unsigned int val)
|
||||
{
|
||||
unsigned int addr = offset +
|
||||
reg_maps[MAP_ADDR_MODULE_HIU].phy_addr;
|
||||
wr_reg(MAP_ADDR_MODULE_HIU, addr, val);
|
||||
unsigned long flags;
|
||||
unsigned int addr;
|
||||
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
addr = offset +
|
||||
reg_maps[MAP_ADDR_MODULE_HIU].phy_addr;
|
||||
wr_reg(MAP_ADDR_MODULE_HIU, addr, val);
|
||||
spin_unlock_irqrestore(®_rw_lock, flags);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -714,14 +733,17 @@ void hdmirx_wr_ctl_port(unsigned int offset, unsigned int data)
|
||||
*/
|
||||
void hdmirx_top_sw_reset(void)
|
||||
{
|
||||
ulong flags;
|
||||
unsigned long dev_offset = 0;
|
||||
|
||||
ulong flags;
|
||||
unsigned long dev_offset = 0;
|
||||
spin_lock_irqsave(®_rw_lock, flags);
|
||||
if (rx.chip_id == CHIP_ID_TL1) {
|
||||
hdmirx_wr_top(TOP_SW_RESET, 1);
|
||||
dev_offset = TOP_DWC_BASE_OFFSET +
|
||||
reg_maps[MAP_ADDR_MODULE_TOP].phy_addr;
|
||||
wr_reg(MAP_ADDR_MODULE_TOP,
|
||||
dev_offset + TOP_SW_RESET, 1);
|
||||
udelay(1);
|
||||
hdmirx_wr_top(TOP_SW_RESET, 0);
|
||||
wr_reg(MAP_ADDR_MODULE_TOP,
|
||||
dev_offset + TOP_SW_RESET, 0);
|
||||
} else {
|
||||
wr_reg(MAP_ADDR_MODULE_TOP,
|
||||
hdmirx_addr_port | dev_offset, TOP_SW_RESET);
|
||||
|
||||
Reference in New Issue
Block a user