mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
powerpc updates for 4.12 part 2
Highlights include:
- rework the Linux page table geometry to lower memory usage on 64-bit Book3S
(IBM chips) using the Hash MMU.
- support for a new device tree binding for discovering CPU features on future
firmwares.
- Freescale updates from Scott: "Includes a fix for a powerpc/next mm regression
on 64e, a fix for a kernel hang on 64e when using a debugger inside a
relocated kernel, a qman fix, and misc qe improvements."
Thanks to:
Christophe Leroy, Gavin Shan, Horia Geantă, LiuHailong, Nicholas Piggin, Roy
Pledge, Scott Wood, Valentin Longchamp.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJZFXjPAAoJEFHr6jzI4aWAgG4QAJoF7G5Txj0Du2I2/wQDkVq1
InJ+BNji0xnOrFpz2EcIIlbIwBeJbY9cSIbmKUEPQU4hxtQgI8Q5WNEl2btWq8xz
I0Ej3uc5obc9ltUdQoGxgXih/XDd8UN3fscSE2/SSuPY/A7JwAVZMsCEJ1tWdxpM
hx+R9wlaUT3I6jmQwj9gg6zuBdIOL5szvZXKh9ruPKNyZWbPmPSUwIqiyT0YHsiD
01OZsFYpdSH6Ka/eNHSNx5HC+kK8aDVaqd5E2fkHeH9+sxerpEzMo2PmK4T8vChh
mSD4nhfqRwC2WRpPF/MY+zGBeXrFkCkR+nYhaqVDXXACKzfHgU58NOfvrmtRj52X
vTW+cn92wqFTmi0TNUfhEFt8elcOO7/fKh1OVhsFx+bD+bgj8G1ZkLoBU/0QUzRf
R4hiKKuOMnDHriNPdlAOKjHpR+ewh8Q679INThEJzEQpn7VBY72hcQwapQ3MjMnd
E7LfsGwqGPkTc6gy1bFbWum5HMGOcmE0qkrnZo5VyFhNNwBs1Kx/B1GHjUOiucVu
km5GEVNTfCkZqeabdca7fwbGcMH7zchR1ootqH2m18PZJAzr85A+aTqfrdJ5fDBs
v/nznfcPVNEgvEW0im2jhpPoAlQE6/YvYa+kG4zjjxWA5FKVKdTzINexD82jlcqP
+fDtIDxNcFkzlt4gacjh
=YOQs
-----END PGP SIGNATURE-----
Merge tag 'powerpc-4.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull more powerpc updates from Michael Ellerman:
"The change to the Linux page table geometry was delayed for more
testing with 16G pages, and there's the new CPU features stuff which
just needed one more polish before going in. Plus a few changes from
Scott which came in a bit late. And then various fixes, mostly minor.
Summary highlights:
- rework the Linux page table geometry to lower memory usage on
64-bit Book3S (IBM chips) using the Hash MMU.
- support for a new device tree binding for discovering CPU features
on future firmwares.
- Freescale updates from Scott:
"Includes a fix for a powerpc/next mm regression on 64e, a fix for
a kernel hang on 64e when using a debugger inside a relocated
kernel, a qman fix, and misc qe improvements."
Thanks to: Christophe Leroy, Gavin Shan, Horia Geantă, LiuHailong,
Nicholas Piggin, Roy Pledge, Scott Wood, Valentin Longchamp"
* tag 'powerpc-4.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
powerpc/64s: Support new device tree binding for discovering CPU features
powerpc: Don't print cpu_spec->cpu_name if it's NULL
of/fdt: introduce of_scan_flat_dt_subnodes and of_get_flat_dt_phandle
powerpc/64s: Fix unnecessary machine check handler relocation branch
powerpc/mm/book3s/64: Rework page table geometry for lower memory usage
powerpc: Fix distclean with Makefile.postlink
powerpc/64e: Don't place the stack beyond TASK_SIZE
powerpc/powernv: Block PCI config access on BCM5718 during EEH recovery
powerpc/8xx: Adding support of IRQ in MPC8xx GPIO
soc/fsl/qbman: Disable IRQs for deferred QBMan work
soc/fsl/qe: add EXPORT_SYMBOL for the 2 qe_tdm functions
soc/fsl/qe: only apply QE_General4 workaround on affected SoCs
soc/fsl/qe: round brg_freq to 1kHz granularity
soc/fsl/qe: get rid of immrbar_virt_to_phys()
net: ethernet: ucc_geth: fix MEM_PART_MURAM mode
powerpc/64e: Fix hang when debugging programs with relocated kernel
This commit is contained in:
commit
dc2a248166
30 changed files with 1546 additions and 54 deletions
|
|
@ -1344,6 +1344,7 @@ static void qm_congestion_task(struct work_struct *work)
|
|||
if (!qm_mc_result_timeout(&p->p, &mcr)) {
|
||||
spin_unlock(&p->cgr_lock);
|
||||
dev_crit(p->config->dev, "QUERYCONGESTION timeout\n");
|
||||
qman_p_irqsource_add(p, QM_PIRQ_CSCI);
|
||||
return;
|
||||
}
|
||||
/* mask out the ones I'm not interested in */
|
||||
|
|
@ -1358,6 +1359,7 @@ static void qm_congestion_task(struct work_struct *work)
|
|||
if (cgr->cb && qman_cgrs_get(&c, cgr->cgrid))
|
||||
cgr->cb(p, cgr, qman_cgrs_get(&rr, cgr->cgrid));
|
||||
spin_unlock(&p->cgr_lock);
|
||||
qman_p_irqsource_add(p, QM_PIRQ_CSCI);
|
||||
}
|
||||
|
||||
static void qm_mr_process_task(struct work_struct *work)
|
||||
|
|
@ -1417,12 +1419,14 @@ static void qm_mr_process_task(struct work_struct *work)
|
|||
}
|
||||
|
||||
qm_mr_cci_consume(&p->p, num);
|
||||
qman_p_irqsource_add(p, QM_PIRQ_MRI);
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
static u32 __poll_portal_slow(struct qman_portal *p, u32 is)
|
||||
{
|
||||
if (is & QM_PIRQ_CSCI) {
|
||||
qman_p_irqsource_remove(p, QM_PIRQ_CSCI);
|
||||
queue_work_on(smp_processor_id(), qm_portal_wq,
|
||||
&p->congestion_work);
|
||||
}
|
||||
|
|
@ -1434,6 +1438,7 @@ static u32 __poll_portal_slow(struct qman_portal *p, u32 is)
|
|||
}
|
||||
|
||||
if (is & QM_PIRQ_MRI) {
|
||||
qman_p_irqsource_remove(p, QM_PIRQ_MRI);
|
||||
queue_work_on(smp_processor_id(), qm_portal_wq,
|
||||
&p->mr_work);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ static unsigned int qe_num_of_snum;
|
|||
|
||||
static phys_addr_t qebase = -1;
|
||||
|
||||
phys_addr_t get_qe_base(void)
|
||||
static phys_addr_t get_qe_base(void)
|
||||
{
|
||||
struct device_node *qe;
|
||||
int ret;
|
||||
|
|
@ -90,8 +90,6 @@ phys_addr_t get_qe_base(void)
|
|||
return qebase;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(get_qe_base);
|
||||
|
||||
void qe_reset(void)
|
||||
{
|
||||
if (qe_immr == NULL)
|
||||
|
|
@ -163,11 +161,15 @@ EXPORT_SYMBOL(qe_issue_cmd);
|
|||
*/
|
||||
static unsigned int brg_clk = 0;
|
||||
|
||||
#define CLK_GRAN (1000)
|
||||
#define CLK_GRAN_LIMIT (5)
|
||||
|
||||
unsigned int qe_get_brg_clk(void)
|
||||
{
|
||||
struct device_node *qe;
|
||||
int size;
|
||||
const u32 *prop;
|
||||
unsigned int mod;
|
||||
|
||||
if (brg_clk)
|
||||
return brg_clk;
|
||||
|
|
@ -185,10 +187,22 @@ unsigned int qe_get_brg_clk(void)
|
|||
|
||||
of_node_put(qe);
|
||||
|
||||
/* round this if near to a multiple of CLK_GRAN */
|
||||
mod = brg_clk % CLK_GRAN;
|
||||
if (mod) {
|
||||
if (mod < CLK_GRAN_LIMIT)
|
||||
brg_clk -= mod;
|
||||
else if (mod > (CLK_GRAN - CLK_GRAN_LIMIT))
|
||||
brg_clk += CLK_GRAN - mod;
|
||||
}
|
||||
|
||||
return brg_clk;
|
||||
}
|
||||
EXPORT_SYMBOL(qe_get_brg_clk);
|
||||
|
||||
#define PVR_VER_836x 0x8083
|
||||
#define PVR_VER_832x 0x8084
|
||||
|
||||
/* Program the BRG to the given sampling rate and multiplier
|
||||
*
|
||||
* @brg: the BRG, QE_BRG1 - QE_BRG16
|
||||
|
|
@ -215,8 +229,9 @@ int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier)
|
|||
/* Errata QE_General4, which affects some MPC832x and MPC836x SOCs, says
|
||||
that the BRG divisor must be even if you're not using divide-by-16
|
||||
mode. */
|
||||
if (!div16 && (divisor & 1) && (divisor > 3))
|
||||
divisor++;
|
||||
if (pvr_version_is(PVR_VER_836x) || pvr_version_is(PVR_VER_832x))
|
||||
if (!div16 && (divisor & 1) && (divisor > 3))
|
||||
divisor++;
|
||||
|
||||
tempval = ((divisor - 1) << QE_BRGC_DIVISOR_SHIFT) |
|
||||
QE_BRGC_ENABLE | div16;
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@ err_miss_siram_property:
|
|||
devm_iounmap(&pdev->dev, utdm->si_regs);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(ucc_of_parse_tdm);
|
||||
|
||||
void ucc_tdm_init(struct ucc_tdm *utdm, struct ucc_tdm_info *ut_info)
|
||||
{
|
||||
|
|
@ -274,3 +275,4 @@ void ucc_tdm_init(struct ucc_tdm *utdm, struct ucc_tdm_info *ut_info)
|
|||
break;
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(ucc_tdm_init);
|
||||
|
|
|
|||
Loading…
Reference in a new issue