mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-19 18:53:52 +08:00
ARM: 6832/1: mmci: support for ST-Ericsson db8500v2
ST-Ericsson modified ARM PrimeCell PL180 block has not got an updated corresponding amba-id, althought the IP block has changed in db8500v2. The change was done to the datactrl register. Using the overrided subversion ID, account for this. Signed-off-by: Philippe Langlais <philippe.langlais@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
729303191e
commit
1784b157c8
@ -51,6 +51,7 @@ static unsigned int fmax = 515633;
|
|||||||
* is asserted (likewise for RX)
|
* is asserted (likewise for RX)
|
||||||
* @sdio: variant supports SDIO
|
* @sdio: variant supports SDIO
|
||||||
* @st_clkdiv: true if using a ST-specific clock divider algorithm
|
* @st_clkdiv: true if using a ST-specific clock divider algorithm
|
||||||
|
* @blksz_datactrl16: true if Block size is at b16..b30 position in datactrl register
|
||||||
*/
|
*/
|
||||||
struct variant_data {
|
struct variant_data {
|
||||||
unsigned int clkreg;
|
unsigned int clkreg;
|
||||||
@ -60,6 +61,7 @@ struct variant_data {
|
|||||||
unsigned int fifohalfsize;
|
unsigned int fifohalfsize;
|
||||||
bool sdio;
|
bool sdio;
|
||||||
bool st_clkdiv;
|
bool st_clkdiv;
|
||||||
|
bool blksz_datactrl16;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct variant_data variant_arm = {
|
static struct variant_data variant_arm = {
|
||||||
@ -92,6 +94,17 @@ static struct variant_data variant_ux500 = {
|
|||||||
.st_clkdiv = true,
|
.st_clkdiv = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct variant_data variant_ux500v2 = {
|
||||||
|
.fifosize = 30 * 4,
|
||||||
|
.fifohalfsize = 8 * 4,
|
||||||
|
.clkreg = MCI_CLK_ENABLE,
|
||||||
|
.clkreg_enable = MCI_ST_UX500_HWFCEN,
|
||||||
|
.datalength_bits = 24,
|
||||||
|
.sdio = true,
|
||||||
|
.st_clkdiv = true,
|
||||||
|
.blksz_datactrl16 = true,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This must be called with host->lock held
|
* This must be called with host->lock held
|
||||||
*/
|
*/
|
||||||
@ -465,7 +478,10 @@ static void mmci_start_data(struct mmci_host *host, struct mmc_data *data)
|
|||||||
blksz_bits = ffs(data->blksz) - 1;
|
blksz_bits = ffs(data->blksz) - 1;
|
||||||
BUG_ON(1 << blksz_bits != data->blksz);
|
BUG_ON(1 << blksz_bits != data->blksz);
|
||||||
|
|
||||||
datactrl = MCI_DPSM_ENABLE | blksz_bits << 4;
|
if (variant->blksz_datactrl16)
|
||||||
|
datactrl = MCI_DPSM_ENABLE | (data->blksz << 16);
|
||||||
|
else
|
||||||
|
datactrl = MCI_DPSM_ENABLE | blksz_bits << 4;
|
||||||
|
|
||||||
if (data->flags & MMC_DATA_READ)
|
if (data->flags & MMC_DATA_READ)
|
||||||
datactrl |= MCI_DPSM_DIRECTION;
|
datactrl |= MCI_DPSM_DIRECTION;
|
||||||
@ -1311,9 +1327,14 @@ static struct amba_id mmci_ids[] = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.id = 0x00480180,
|
.id = 0x00480180,
|
||||||
.mask = 0x00ffffff,
|
.mask = 0xf0ffffff,
|
||||||
.data = &variant_ux500,
|
.data = &variant_ux500,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.id = 0x10480180,
|
||||||
|
.mask = 0xf0ffffff,
|
||||||
|
.data = &variant_ux500v2,
|
||||||
|
},
|
||||||
{ 0, 0 },
|
{ 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user